<?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>207048</bug_id>
          
          <creation_ts>2020-01-31 08:59:48 -0800</creation_ts>
          <short_desc>Allow different back-ends for ImageBuffer</short_desc>
          <delta_ts>2020-10-14 11:13:19 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217384</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217603</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>206621</dependson>
          <blocked>204955</blocked>
    
    <blocked>207109</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1613386</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 08:59:48 -0800</bug_when>
    <thetext>This will decouple the platform specifics and the back-end details from the interface &quot;ImageBuffer&quot;. In following patches new types of ImageBuffers backed by new ImageBufferBackends will be added. These new ImageBufferBackends will implement DisplayList drawing and synchronize remote rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613393</commentid>
    <comment_count>1</comment_count>
      <attachid>389356</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 09:10:49 -0800</bug_when>
    <thetext>Created attachment 389356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613398</commentid>
    <comment_count>2</comment_count>
      <attachid>389357</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 09:17:26 -0800</bug_when>
    <thetext>Created attachment 389357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613430</commentid>
    <comment_count>3</comment_count>
      <attachid>389366</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 09:46:18 -0800</bug_when>
    <thetext>Created attachment 389366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613583</commentid>
    <comment_count>4</comment_count>
      <attachid>389414</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 14:22:08 -0800</bug_when>
    <thetext>Created attachment 389414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613687</commentid>
    <comment_count>5</comment_count>
      <attachid>389449</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-31 19:00:23 -0800</bug_when>
    <thetext>Created attachment 389449
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620089</commentid>
    <comment_count>6</comment_count>
      <attachid>389449</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-02-18 00:45:13 -0800</bug_when>
    <thetext>Comment on attachment 389449
Patch  for review

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

I think this is fine, except the name.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:834
&gt; -		2DDE1D081F574D0E00D1A365 /* JSVRStageParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DDE1CF61F574BFF00D1A365 /* JSVRStageParameters.h */; };
&gt; +		2DDE1CE31F574AE500D1A365 /* (null) in Headers */ = {isa = PBXBuildFile; };

This all doesn&apos;t look good

&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:33
&gt; +class ContextualImageBuffer : public ImageBuffer {

I&apos;m not sure I follow the &quot;Contextual&quot; name (but maybe you can explain)

(also, I&apos;m not sure why it exists? Why isn&apos;t this just all IN ImageBuffer?)

(reading more... is it so you can hide BackendType from ImageBuffer clients? why not just `using` it away?)

&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:145
&gt; +        const_cast&lt;ContextualImageBuffer&amp;&gt;(*this).flushContext();

Maybe we should just bite the bullet and de-const getImageData if it&apos;s a lie?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620201</commentid>
    <comment_count>7</comment_count>
      <attachid>391061</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 09:58:06 -0800</bug_when>
    <thetext>Created attachment 391061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620205</commentid>
    <comment_count>8</comment_count>
      <attachid>391063</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 10:17:14 -0800</bug_when>
    <thetext>Created attachment 391063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620299</commentid>
    <comment_count>9</comment_count>
      <attachid>389449</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 13:34:23 -0800</bug_when>
    <thetext>Comment on attachment 389449
Patch  for review

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

&gt;&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:834
&gt;&gt; +		2DDE1CE31F574AE500D1A365 /* (null) in Headers */ = {isa = PBXBuildFile; };
&gt; 
&gt; This all doesn&apos;t look good

This was fixed in the latest patch.

&gt;&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:33
&gt;&gt; +class ContextualImageBuffer : public ImageBuffer {
&gt; 
&gt; I&apos;m not sure I follow the &quot;Contextual&quot; name (but maybe you can explain)
&gt; 
&gt; (also, I&apos;m not sure why it exists? Why isn&apos;t this just all IN ImageBuffer?)
&gt; 
&gt; (reading more... is it so you can hide BackendType from ImageBuffer clients? why not just `using` it away?)

Contextual here means an ImageBuffer which can provide a GraphicsContext. ContextualImageBuffer is a template class which is derived from ImageBuffer. All the callers can still keep a. pointer to an ImageBuffer which represents the interface of all the ContextualImageBuffers. It is also a bridge design pattern. As you said it hides the backend type from the callers. The creator can choose the backend type but caller which receives an std::unique_ptr&lt;ImageBuffer&gt; does not have to know any details about  this backend.

Other names: BackendedImageBuffer, ImageBufferWithBackend, PhysicalImageBuffer, ConcreteImageBuffer, ImageBufferImpl, ImageBufferBridge..

&gt;&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:145
&gt;&gt; +        const_cast&lt;ContextualImageBuffer&amp;&gt;(*this).flushContext();
&gt; 
&gt; Maybe we should just bite the bullet and de-const getImageData if it&apos;s a lie?

I think it is okay to keep the function const. flushContext() is an internal function which does nothing expect in the case of IOSurface backed ended ImageBuffer and the remote ImageBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620393</commentid>
    <comment_count>10</comment_count>
      <attachid>391110</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 15:34:51 -0800</bug_when>
    <thetext>Created attachment 391110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620414</commentid>
    <comment_count>11</comment_count>
      <attachid>391114</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 16:08:36 -0800</bug_when>
    <thetext>Created attachment 391114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620449</commentid>
    <comment_count>12</comment_count>
      <attachid>391114</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-18 17:12:54 -0800</bug_when>
    <thetext>Comment on attachment 391114
Patch

Clearing flags on attachment: 391114

Committed r256892: &lt;https://trac.webkit.org/changeset/256892&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620450</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-18 17:12:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620451</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-18 17:13:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/59573099&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389356</attachid>
            <date>2020-01-31 09:10:49 -0800</date>
            <delta_ts>2020-01-31 09:17:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200131091048.patch</filename>
            <type>text/plain</type>
            <size>354294</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uMTk0YTdkYzhmMzY1MDk5NjFkNTRjNDI3MWU4ZjVi
NDAzOTUxZWRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NSBAQAorMjAyMC0wMS0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3Rv
cmVkIHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBi
YWNrLWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAg
ICAgIEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRk
ZWQgdG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBh
Y2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWls
cy4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhl
IHJlc3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBi
ZSBjcmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGlj
aAorICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdl
IHRvIHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAg
QmFzZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhl
IHJlbmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGlu
c3RlYWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVj
aXNpb25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJC
YWNrZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcg
bmV3IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVm
ZmVyQmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50
CisgICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5k
ZXJpbmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Q29udGV4dHVhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpz
aW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlw
bGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNv
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5kQ29vcmRpbmF0ZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsUmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcik6ICAgICAgICAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVy
c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJh
bnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRl
QmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlD
b3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVw
ZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJv
bUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEt
MjggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0
dXJuIGFuZCB0YWtlIEltYWdlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLS0gQ29tYmluZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKCkgYW5kIGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBv
bmUgZnVuY3Rpb24gYW5kIG5hbWUgaXQgZ2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFr
ZSBnZXRJbWFnZURhdGEoKSByZXR1cm5zIGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBj
YW52YXMgY29kZQorICAgICAgICAgICB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBV
aW50OENsYW1wZWRBcnJheSBpbnRvIGFuIEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBp
dCB0byBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSgpIHRvIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAg
ICAgbWFrZSBpdCB0YWtlIGFuIEltYWdlRGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8g
YmUgYXNzb2NpYXRlZAorICAgICAgICAgICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcg
dGhlbSBkb2VzIG5vdCBsb29rIGEgZ29vZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRo
ZSBlbnVtIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVl
ZCB0bworICAgICAgICAgICBwYXNzIHJlY3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29v
cmRpbmF0ZXMuIFRoZSBJbWFnZURhdGEgaGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2Nv
cmRpbmcgdG8gdGhlIEltZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJ
bWFnZUJ1ZmZlckNhaXJvLmNwcC4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Omdl
bmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIGFuZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBu
b3QgCisgICAgICAgIG92ZXJyaWRkZW4gYnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9u
cyBiZSBwdWJsaWMgYW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhh
dmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwg
d2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1
dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9u
bHkgcGxhY2Ugd2hpY2ggd2FzIHBhc3NpbmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQK
KyAgICAgICAgY29vcmRpbmF0ZXMgYWxvbmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lz
dGVtLiBJbnN0ZWFkIHdlIGNhbiBwYXNzCisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNh
bCBjb29yZGluYXRlcyBhbmQgdGhlbiB1c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAg
ICAgaXQgbXVzdCBiZSBzY2FsZWQgd2l0aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFn
ZURhdGEgaXMgY3JlYXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVh
dGVSYXN0ZXJTaGFwZSk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBz
ZWxlY3QgYSBzZW50ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCBhOGMwY2FmNWUxZGFlMDBmNDIzNGZjYzM5MzdmMGNkYzAxZWU0NGE4Li5iYTc4MWM3YTBkYmZk
MzgwYjg1NDVmNTcyNTBlYjNhYWFkYjg1YjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDIwLTAxLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgZGlmZmVyZW50IGJhY2stZW5kcyBmb3IgSW1hZ2VCdWZmZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNl
bGVjdGlvblNuYXBzaG90IGNvbnN0KToKKwogMjAyMC0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRhbHlzdDogVHJpcGxlIGNsaWNr
aW5nIHRvIHNlbGVjdCBhIHNlbnRlbmNlIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2VsZWN0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCA1NGRiNzE2YWM4N2NhYzRkMDEzMGRkOGE3OTU1NGQwZDY3NTY5
ZTY5Li5iYzRiMGNiNTMwNzU1MThkMDIzOTIwMTZkNzczNjcyYmEzZDgxZDBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKQEAgLTEwNDIsNiArMTA0Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVm
ZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgKQEAgLTEwOTMsNyArMTA5NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC0xMTI2LDYg
KzExMjcsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVz
b3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYzYWIw
ZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQuLjVkMTc3NDNlZDM4NDMwMTFmYTg2Y2U1MTFiZTkyOTMz
MDk5MjkyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtODMsOCAr
ODMsNyBAQCBpZiAoJHtVU0VfRElSRUNUMkR9KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRp
dmVJbWFnZURpcmVjdDJELmNwcApAQCAtMTMyLDggKzEzMSw5IEBAIGVsc2UgKCkKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNl
Q0dXaW4uY3BwCkBAIC0xNzYsNyArMTc2LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUZUVy5jbWFrZQppbmRleCA5YWI0Njg3MzllZjExZmY2MDliOTYyOTI4OGJiMDFiMTZk
YTcwMmFhLi5lY2UwZjRlMjUxYmRlZWI5NmNkOTJhZjE4M2JjYzYyYzhhNzllMzRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtODQsOCArODQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2luLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhZWMzMjA2N2QzZTZmMmY0OWQxOTNlMGIx
YTY2YmIwOTU5MTE2MGM4Li4xMjIxNWFiMWQxMGZiZGQ4YWVjYTI2N2Y3MDg0NjM3MzViZjVmZWQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjkxLDggKzI5MSwxMCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNyw3ICs1MjksOSBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjQxZDZmZDQzNWUzYzNhZTA3
ZjBiMDA3Mjg4NTJhZGI5YTNjYjc1ZS4uZTA3NjRmYmY0YWIzM2ZiMGY0ZGQ3Y2YxMWM4ODYwNWFk
M2EyNDc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4NjUsNiArMTg2NSw3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDRkZTc1ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjc2NjFlMmI5
YWQyYjM5MThhNTNiMTY3ZTQ3YmMxNDUzYWU2ZmM5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMjkxLDggKzI5MSw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
T1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzU4N2Nl
NTYyNzQ1NzUwYWE1YmQ5NGM5MTAwODczYjE3OWQ0ZTJiLi44MTZlYWQ4MTQyMjk3Mjg5NmU5ODU1
YzM2Yzc1ZTVjMTc4OTUyNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUz
NjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5
MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJl
Z2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlE
MEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQky
NEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5
NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkx
MjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIx
OTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04MzMsMTcgKzgzMSwxNyBA
QAogCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEyM0YxRkFE
ODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYxMDAzODJDRDMg
LyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVy
dHlNYXAuaCAqLzsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9u
VW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRERFMUNFMzFG
NTc0QUU1MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQxMDBEMUEzNjUgLyogSlNW
UkZpZWxkT2ZWaWV3LmggKi87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZS
RGlzcGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRERTFDREUxRjU3NEFBQjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggKi87IH07Ci0JCTJEREUx
Q0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTYxRjU3NEJGRjAw
RDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07Ci0JCTJEREUxQ0ZBMUY1
NzRDM0UwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZGMDBEMUEzNjUgLyogSlNW
UkRpc3BsYXlFdmVudC5oICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNW
UkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkRERTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRS
ZWFzb24uaCAqLzsgfTsKLQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VDMUY1
NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUxRDAwMUY1NzRDRjcwMEQx
QTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWVQYXJh
bWV0ZXJzLmggKi87IH07Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERF
MUNGMDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICovOyB9OwotCQkyRERFMUQw
NDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJGRjAwRDFBMzY1IC8qIEpT
VlJMYXllckluaXQuaCAqLzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQ
b3NlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERF
MUNGNDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsKLQkJMkRERTFEMDgxRjU3
NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRCRkYwMEQxQTM2NSAvKiBK
U1ZSU3RhZ2VQYXJhbWV0ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
Q0U0MUY1NzRBRTkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZBMUY1NzRDM0UwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAwMUY1NzRD
RjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IH07CisJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA2
MUY1NzREMEEwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IH07CisJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIzMTkyRkU4MkEwMEIwOTc1
QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JNYWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3M0U0NzAwMUQ2NzgwIC8q
IFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFEQjU0MUQwMDAzNjJCOTkg
LyogQnVmZmVyU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyREZBNDg4RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxNTEsNiArMjE0
OSw3IEBACiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5
QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAw
Q0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJBQzNBRTIzRTFG
MEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1
M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9Owog
CQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMw
QUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAv
KiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87
IH07CkBAIC0yNTgxLDcgKzI1ODAsNiBAQAogCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUgLyog
UGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5o
ICovOyB9OwogCQk4QkQzN0E2ODIwMUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEJEMzdB
NjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RTRDOTZERDFBRDQ0ODM1MDAz
NjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3Bv
bnNlLmggKi87IH07Ci0JCThFNjIwRTgxMjBFRTYwMjQwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlz
cGxheUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEVDNkM5
NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdhcExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExl
bmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMg
LyogRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRp
dmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAx
NzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwpA
QCAtNjU1OSw5ICs2NTU3LDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2
ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVn
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5
MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2
MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFu
Z2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5
cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjA1LDYg
Kzk2MDAsMTYgQEAKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNTIzRTE3MzI4
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBD
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGV4dHVhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E5MjNFMUU1
NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUEyM0UxRTU0NDAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMx
OEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTA1NDcsOCArMTA1NTIsNiBAQAogCQk4RTMzQ0Q5MzIwMUEyOUMx
MDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFNEM5
NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNw
b25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFN0UyMEVFNUZFMjAwN0JDNUVG
IC8qIFZSUGxhdGZvcm1EaXNwbGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZSUGxhdGZvcm1EaXNwbGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFQzZDOTYxMjAxQTI1MDEwMEZCRkE1
MyAvKiBHYXBMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FwTGVu
Z3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGNjc1NjE5MTI4OEIxN0IwMDQ3
QUNBMyAvKiBFdmVudFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2
ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFF
RTAwNTA4RDVEIC8qIEpTRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjY3OCw3
ICsxMjY4MSw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMTBCOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
MkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMjBDRUYwQUJG
MDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI0ODQxLDkgKzI0ODQzLDEyIEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0YyM0Ew
IC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAy
IC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEw
QjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3
QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5
RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkFD
M0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJ
NzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJ
CQkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcCAqLywKKwkJCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3
NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0Uy
MURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJ
NTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0
OTM1LDYgKzI0OTQwLDcgQEAKIAkJCQkwRkU2Qzc2QzFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JV
dGlsaXRpZXMuaCAqLywKIAkJCQlDMkY0RTc4ODFFNDVBRURGMDA2RDcxMDUgLyogQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlDMkY0RTc4OTFFNDVBRURGMDA2RDcxMDUgLyogQ29t
cGxleFRleHRDb250cm9sbGVyLmggKi8sCisJCQkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8q
IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYz
MyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2
RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJNEI3QUU0OTUy
MTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLApAQCAtMjUwMzIsNyAr
MjUwMzgsOCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5j
cHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8s
Ci0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAor
CQkJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICov
LAorCQkJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
LywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywK
IAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJ
NTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUwODks
NiArMjUwOTYsNyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0
aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICov
LAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJC
QUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkw
NTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZD
RDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywK
IAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywK
QEAgLTI1ODI0LDcgKzI1ODMyLDYgQEAKIAkJCQk2NTZCODRENzBBRUExQ0U5MDBBMDk1QjQgLyog
bmV0d29yayAqLywKIAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICovLAogCQkJ
CUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAotCQkJCUUxODgyMzVGMjAzMUY1
MEYwMEI0MkRGMyAvKiB2ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZEQTFBRDI2NEYgLyogQWJv
cnRhYmxlVGFza1F1ZXVlLmggKi8sCiAJCQkJNDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENh
bGN1bGF0aW9uVmFsdWUuY3BwICovLAogCQkJCTQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBD
YWxjdWxhdGlvblZhbHVlLmggKi8sCkBAIC0yODkwOCw2ICsyODkxNSwxNyBAQAogCQkJZmlsZXMg
PSAoCiAJCQkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICov
LAogCQkJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywK
KwkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJ
CQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJ
CTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQky
RERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRE
RTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUx
RDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNF
MzFGNTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDIx
RjU3NEQwMDAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA0MUY1
NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNjFGNTc0
RDBBMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDgxRjU3NEQw
RTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkI4MUY4MEE0ODIw
MDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkJG
MUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZC
OTUxOTUyMDdENjMzNDAwQTdEMkREIC8qIEFic3RyYWN0RE9NV2luZG93LmggaW4gSGVhZGVycyAq
LywKQEAgLTMwMjYyLDggKzMwMjgwLDcgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAg
LyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThF
QUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGlu
Z3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8q
IEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNB
RTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29u
dHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZC
OUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTMxMTY4LDE3ICszMTE4NSw2IEBACiAJCQkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8q
IEpTVmlkZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RTc5MTQ5MUY5N0UwMUEw
MDE5OTczOSAvKiBKU1Zpc2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzc3OUJE
OTYxRjMyMjQ2QTAwQzIxNDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNW
UkRpc3BsYXlFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkMxRjU3NENFRTAwRDFB
MzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUx
Q0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERF
MUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRh
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxh
eWVySW5pdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8q
IEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUg
LyogSlNWUlN0YWdlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwODIxOEE0
NjBDMzAwODA2NDdFIC8qIEpTVlRUQ3VlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRDE4
Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlC
MjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggYzRjN2UyODgyNzcyNjZkZGVjNzUyMDQxMjEyYjVlMmJjNWZhYTM1OC4uMjVk
NjlmOTRhNjdmYjkxYmNjNDhiYzdlODU5NmQ3NThmNmY1ZTI3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NDMs
MTMgKzk0MywxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1h
Z2VEYXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogICAg
ICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRh
LT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCktPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAg
ICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
Mjg2NSwxOSArMjg2NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIGF1dG8gYXJyYXkg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBh
cnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCFhcnJheSkgewogICAgICAg
ICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQog
CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShsb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBhcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAg
ICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGF1dG8gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAg
ICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJh
eSgqaW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRT
aXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLT5zaXplKCkgfSk7CiAKICAgICAgICAgYXV0
byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNf
Y2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJp
dG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAppbmRleCBkMmFkNDFlODcxYWM1YTBi
Y2I0ZDY5YzE1MjUzNDYzOWE3MzYxNDVkLi4xNjJiMjk0MmY2NjZhOTMyNDYwYjA2ZTc2ZDA4MzZl
NDNjMDE3MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTE5MSw4ICsxOTEs
OCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZgogICAgICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6
OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCi0gICAg
aWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpKQotICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAg
ICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNp
emUoKSkKKyAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKIAog
ICAgIHNpemVfdCBwcmV2aW91c01lbW9yeUNvc3QgPSBtX2ltYWdlQnVmZmVyQ29zdDsKICAgICBt
X2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5k
ZXggZDQ5NDcxMjA4MzIzMTBjN2MwZDdiZWYxYzg3OWRhM2ZmYjI5M2YwYS4uZDJiOGRiODE0ZDMx
MzQxODY0MTJmYTVkOGFlYWY3YTIzODBiMTI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAg
LTIxNTgsMTEgKzIxNTgsNiBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogfQogCiBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRl
U3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3Jp
Z2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25z
b2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBk
YXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNy
b3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsOCArMjE5MSw4IEBAIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURh
dGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUlt
YWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNv
b3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghYnl0ZUFycmF5KSB7CisgICAgYXV0byBpbWFnZURh
dGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAg
IFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFw
cGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVz
dGVkIHNpemUgd2FzICIpOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmROdW1iZXIoaW1h
Z2VEYXRhUmVjdC53aWR0aCgpKTsKQEAgLTIyMDgsNyArMjIwMyw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURh
dGEoSW1hZ2VCCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OwogICAgIH0KIAotICAgIHJldHVybiBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZURhdGFSZWN0LnNp
emUoKSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBpbWFnZURhdGE7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAtMjIxNywxMSArMjIxMiw2IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCi17Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGly
dHlIZWlnaHQpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdl
QnVmZmVyKiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIp
CkBAIC0yMjQ1LDcgKzIyMzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNp
emUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkp
OwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAg
ICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRS
ZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxD
b29yZGluYXRlU3lzdGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5h
bFNpemUoKSkpOworICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1
ZmZlci0+bG9naWNhbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3
ICsyMjQzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVy
c2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAg
aWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXko
KmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIElu
dFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQo
ZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJj
ZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENh
bnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNs
aXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcy
MjE4N2YxYmVlOTFkLi5kYjNmYWM4YjA4YjcwM2JkNTQxZmM3MmY0ZDMxYmQ1MTc3MzUwNGQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zNzEsOSArMzcxLDYgQEAgcHJvdGVjdGVkOgogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
Ci0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1
ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxv
YXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVm
ZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwg
ZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7Ci0KICAg
ICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzSW52
ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52
ZXJ0aWJsZVRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi5lNjBj
ZGUxNGQxYTdjNmMzMDQyODkwNzUwN2M2MTBiZTU1ZGUxYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRh
LT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3Vy
Y2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgq
aW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQz
YWQ2NTg2ZGE0M2NlZDBkYTdlNjNmMDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZj
YmEwMDU0MDc3NTcxNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMs
NyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkwZDI0NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1
ODMxOTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgyMWJjYTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMCw3ICszMCwxMCBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFs
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjU0NWUzYTkyMGZkYzZjYWQyNWI0YjU2ZTRiYjQ1
NGQ2MTdhMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgQ29udGV4dHVhbEltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8Q29udGV4dHVhbEltYWdlQnVmZmVyPihuZXcgQ29udGV4dHVhbEltYWdl
QnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQgPSBC
YWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBpZiAoIWJhY2tlbmQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxDb250ZXh0dWFsSW1hZ2VCdWZmZXI+KG5ldyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RG
TW92ZShiYWNrZW5kKSkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFn
ZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAg
OiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4
dHVhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSog
ZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7
CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9iYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFz
ZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fYmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2Vu
ZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7
IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29zdCgpOyB9CisgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFj
a2VuZC0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3Rv
cmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKworICAg
IHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUlt
YWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRv
TmF0aXZlSW1hZ2UoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50
b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1p
bmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgfQorCisgICAgdm9pZCB0
cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBk
ZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+dHJhbnNm
b3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgfQorCisg
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9E
YXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hD
b250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXIm
PigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvQkdS
QURhdGEoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFn
ZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2Vu
ZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgfQorCisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQgPSB7IH0pIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRl
eHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShj
b250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11
bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2Vu
ZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCAyMGI5
ODEwYzI5MTQxZTQ3M2U2YTg4OGJjODBjMTQxN2FlYWMyZmFmLi4wZmViMTEyZjJlNTNiZDRjODZh
MDY3MzIyNzZmZTcyZDBhNTk4ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNDQgKzI4LDkwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1
ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRM
ZW5ndGggPSA0MDk2Owogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xh
bXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChJbWFnZUJ1ZmZlcik7Ci0KIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVy
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdp
bmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChjb250
ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VC
dWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2NhbGVkU2l6ZSwg
Y29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisKIH0KIAotI2lmIFVTRShESVJF
Q1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93
LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlmIChz
aXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBj
b250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFw
aGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6
ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIGZsb29yZihzaXplLmhl
aWdodCgpKSAqIGZsb29yZihzaXplLndpZHRoKCkpID4gTWF4Q2xhbXBlZEFyZWE7CiB9CiAKQEAg
LTEwNSw5MSArMTUxLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigp
LCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShD
QUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICBy
ZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkK
LXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3Bh
Y2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdC
IDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0g
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0g
ZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0g
ICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NS
R0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0
aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVT
RShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdl
RGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJh
eS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zm
c2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50
OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlm
ICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUg
bHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUp
YSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywg
bHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVt
aW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlv
bnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBn
ZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xl
bnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlm
IHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hl
cgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRp
ZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRv
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDYsNTAgKzE3MywxOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdAogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50b05h
dGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0g
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXpl
LCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29y
cmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVm
ZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZm
ZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQotCi1JbnRTaXplIElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxhcmdlIHRoZSBidWZm
ZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5l
ZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0Lgot
ICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7
CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNp
ZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50
b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1h
eSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0
byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAg
IC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0
IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53
aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVy
LT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2YjdjZmVkZjliLi5lNWMw
M2U0ZGY4NjU5YzQ2M2UxYzNkMjYwNDE2NzAyMzM2NTc2OTk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykg
Q28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE2
MCArMjcsNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLSNpbmNsdWRlICJJbWFnZVBh
aW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0Owot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1j
bGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50
UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAg
Q29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZm
ZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJh
d3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0
aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19OwotCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JU
KTsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNs
YXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRl
ciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENy
ZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5
IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29s
b3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdp
dGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRv
IHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgfkltYWdlQnVmZmVyKCk7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4g
Y2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFz
a2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3Qg
RmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxv
YXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJl
Y3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICAvLyBUaGUgYWN0dWFsIHJl
c29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dp
Y2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIHN0
YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfklt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0g
MDsKKyAgICAKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKIAotICAgIGVu
dW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3Rv
cmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdCA9IDA7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgCi0gICAgdm9pZCBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZl
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAg
ICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4s
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
THVtaW5hbmNlTWFzaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFj
ZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkgPSAw
OwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNl
KTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsK
IAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9IDA7CiAKICAg
ICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0
aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMg
dGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKLQotICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3
aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRp
YyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBi
b29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUp
OwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0g
ICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJv
b2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSBy
ZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElm
IHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0g
ICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZm
ZXIoKSA9IGRlZmF1bHQ7CiAgICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBz
dGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOwotCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwot
ICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21Q
YWludEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKLQotcHJpdmF0ZToKLSAg
ICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNp
emUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIC8v
IFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBv
dXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxk
IHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykKLSAgICBJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29s
b3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nl
c3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNzKTsKLSNl
bmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpID0g
MDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAg
IDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFja2VuZFNpemUoYmFja2Vu
ZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBt
X2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNv
bHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXpl
LmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6
ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJ
bnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVz
UGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNr
ZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFn
ZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxB
cnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVs
T2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICB1
aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAg
IGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIgPSBzcmNQ
aXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gc3JjUGl4
ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIgPSBzcmNQ
aXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAgICAgZG91YmxlIGx1bWEg
PSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAy
NTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEp
OworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCkp
OworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKHZv
aWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dp
Y2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cg
PSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1
bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZv
cm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0
IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRl
c3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1BpeGVsWzFd
OworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFszXSA9IHNy
Y1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1Vu
cHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCog
c3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVs
KQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8
IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0
Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogMjU1
KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8g
YWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBp
eGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9y
Rm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBh
bHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Cisg
ICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBz
cmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAg
ICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Cisg
ICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4
ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsy
XSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10g
PSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9yKShDb2xvckZvcm1hdCwg
Y29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+CitzdGF0aWMgaW5saW5lIHZv
aWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBieXRl
c1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXpl
LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1Bl
clJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZz
cmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMo
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVz
dFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9y
bWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9y
bWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0
ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdl
UGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihz
cmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAor
eworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1Jl
Y3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0U2Nh
bGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0YSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSAg
aW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3Qg
ZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9Owor
CisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgt
c3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAg
ICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYgKGRlc3RS
ZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgaW1hZ2VEYXRhLT5k
YXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICog
c3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gaW1hZ2VEYXRh
LT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRh
dGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEs
IGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFj
a2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVk
ID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLnNpemUoKSB9LCBz
cmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3JjUmVjdENsaXBwZWQ7Cisg
ICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAgICBpZiAoc3JjUmVjdFNj
YWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1Jl
Y3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAg
IGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAg
ZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNyY1JlY3RDbGlwcGVkLnNl
dFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBpbWFnZURh
dGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0YS5kYXRh
KCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRG
b3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9y
bWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzYjYzY2RmNzE3
OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEs
MTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1
ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VEYXRhOwor
CitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJh
bnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29w
eUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9
OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAor
ICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBS
R0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZh
dWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFja2Vu
ZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUo
KSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3BhY2UgY29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJu
IDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6
ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1
YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZp
cnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSA9IDA7CisKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9v
bCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNP
UkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJl
dHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBDb2xvckZvcm1h
dCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1hdDo6UkdCQTsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFja2VuZENvb3JkaW5hdGVz
KFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFQs
IEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNpemU+Ojp2YWx1ZSB8fCBz
dGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dpY2FsU2l6ZSk7IH07Cisg
ICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNy
Y0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZvaWQq
IGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlRGF0YT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRT
aXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29s
b3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMxMDI0NDdjNzNhMTJmMWQ2
ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENHKQotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTA5YmYyYzBkYWZhMjNhMzgxMzE3MmMyYmJhODc1MjM1YWJhMzUzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIu
aApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdlQnVmZmVy
LmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAmJiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
VVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQ
bGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxp
ZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
QmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRp
ZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBs
YXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXgg
NjgxYWI1NmVlYjM0MTk0NjJiMjM0NDUwZDAwZjQxZjkzMzY3NGQxOC4uM2NmY2U3Mjk1NDIwOWQz
MDNhOWY3MjQzMmZiYjRiNjM5ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQ0OSw3ICs0NTAsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIo
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0g
ICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5ZXJJbWFnZS5pbnRlcm5hbFNpemUoKTsKKyAgICBJ
bnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmJhY2tlbmRTaXplKCk7CiAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBj
bGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZl
ciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xp
cCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNo
YWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0
KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllcklt
YWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5
KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1
clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9
IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5k
YXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVy
SW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYg
dGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmJiNWM2NDgyYjZlMWQzZjI4YWM0NzllYTdjNWQzMWIxZDMzNzkwMi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENBSVJP
KQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNpZiBVU0UoTElCRVBPWFkpCi0j
aW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2VuZGlm
Ci0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2lu
Y2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlQnVmZmVy
RGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KDApCi0gICAgLCBtX3NpemUo
c2l6ZSkKLSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAg
ICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAgLCBtX3RleHR1cmUoMCkKLSNl
bmRpZgotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIG1fbmljb3NpYUxheWVy
ID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKLSNlbHNlCi0gICAgICAgIG1f
cGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0KLUltYWdlQnVmZmVyRGF0YTo6
fkltYWdlQnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYK
LQotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmco
KS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1f
dGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkK
LSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5k
aWYKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQotewotICAgIGF1
dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAg
ICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIGdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBtX2NvbXBvc2l0
b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
Y29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21w
b3NpdG9yVGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIG1f
Y29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2Uu
Z2V0KCkpKTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBD
QUlST19BTlRJQUxJQVNfTk9ORSk7Ci19Ci0KLSNpZiAhVVNFKE5JQ09TSUEpCi1SZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKLX0KLSNl
bmRpZgotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0g
ICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKLQotICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewotICAgICAgICBjcmVhdGVDb21w
b3NpdG9yQnVmZmVyKCk7Ci0KLSAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAg
ICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygp
KTsKLSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUs
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKLSAgICAgICAgICAgIH07
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgp
KS5wcm94eSgpKTsKLSNlbHNlCi0gICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5
ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3
ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBi
dXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCi0gICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhl
IGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1
c3QgY29weSB0aGUgY29udGVudAotICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgot
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJm
YWNlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3Iu
Z2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQobV9jb21wb3Np
dG9yQ3IuZ2V0KCkpOwotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLSNlbmRpZgot
Ci12b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYg
KGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUoc3VyZmFjZSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJ
Uk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCkKLXsKLSAgICBhdXRvKiBj
b250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5z
aGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0
aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQKLSAgICAvLyBmcm9tIGEgcHJl
LWV4aXN0aW5nIHN1cmZhY2UuCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLQotICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0KLSAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOwotCi0gICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNl
KCk7Ci0KLSAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQg
b24gbm9uLUludGVsIGRyaXZlcnMuCi0gICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdh
cmUoZGV2aWNlLCBGQUxTRSk7Ci0KLSAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9z
dXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQ
SEEsIG1fdGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIGNs
ZWFyU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29weShjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpCi17Ci0gICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
d2lkdGgoc3VyZmFjZSksCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChz
dXJmYWNlKSkpOwotCi0gICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5Lmdl
dCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9T
T1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwg
MCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19
Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29lcmNlVG9J
bWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYm
IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gY2Fpcm9TdXJm
YWNlQ29weShzdXJmYWNlKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JH
UkFEYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VU
b0ltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2go
c3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlm
IChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFn
ZURhdGE7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpuYXRpdmVJbWFnZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLUltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJbnRTaXplKHNpemUpLCByZW5k
ZXJpbmdNb2RlKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2Ug
ZWFybHkgcmV0dXJuIG1lYW4gZXJyb3IuCi0KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxm
KG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWln
aHQgPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8g
RklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0g
ICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJs
ZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNj
YWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5tX3NpemUgPSBtX3NpemU7Ci0K
LSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotICAgICAgICBtX2RhdGEuY3JlYXRlQ2Fp
cm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEubV9zdXJmYWNlIHx8IGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24t
YWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUg
PT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkKLSNlbHNlCi0gICAgQVNTRVJUKG1fZGF0
YS5tX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpOwotI2VuZGlm
Ci0gICAgewotICAgICAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURh
dGFLZXk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dp
ZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgdm9pZCog
c3VyZmFjZURhdGE7Ci0gICAgICAgIGlmICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUuaGVp
Z2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VE
YXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgc3RyaWRlKSk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQq
IGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7IH0pOwotICAgIH0KLQotICAgIGlmIChjYWlyb19zdXJm
YWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VT
UykKLSAgICAgICAgcmV0dXJuOyAgLy8gY3JlYXRlIHdpbGwgbm90aWNlIHdlIGRpZG4ndCBzZXQg
bV9pbml0aWFsaXplZCBhbmQgZmFpbC4KLQotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5z
ZXRDcihjci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhp
Y3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9kYXRh
Lm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVm
ZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Ci19
Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAg
IHJldHVybiAqbV9kYXRhLm1fY29udGV4dDsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAg
ICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UgaW5oZXJpdHMgc3VyZmFjZSdzIGRldmljZSBzY2Fs
ZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAg
ICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNl
IHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+KG1fZGF0YS5tX3N1cmZhY2UpKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChkZXN0aW5hdGlvbkNvbnRleHQu
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBzdXJm
YWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRlc3RpbmF0aW9uQ29udGV4dCA9
PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvcHkoc3Vy
ZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0aW9uQ29udGV4dCwgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29uc3QgYXV0byYgZGVzdGluYXRp
b25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsKLSAgICAgICAgZHJh
d05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZh
Y2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4
dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRT
dGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0
aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4m
IGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUgY29sb3Igc3BhY2UgY29udmVy
c2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0
X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBpbnQg
c3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsK
LSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4o
ZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6
ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7
Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFS
R0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBU
YWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVs
dGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX2RhdGEubV9zdXJmYWNlLmdldCgp
LCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOwot
fQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RS
ZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBjYWly
b19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3Vy
ZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1hZ2UsIHdlIHdyaXRlIGRp
cmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAgLy8gb3RoZXJ3aXNlIHdlIGNyZWF0
ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYgKHN1cmZhY2VUeXBlID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0gICAgCi0gICAg
cmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgSW1h
Z2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBs
b2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIC8vIFRoZSBhcmVhIGNh
biBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgotICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAg
ICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93
LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keCA9IDA7Ci0gICAgaWYgKCFX
VEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qud2lkdGgoKSwgZW5keCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50
cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC55KCksIHJl
Y3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChy
ZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHggPiBzaXplLndpZHRoKCkgfHwgZW5k
eSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLQotICAgIGlu
dCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBpZiAob3JpZ2lu
eCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7
Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBz
aXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKLQotICAg
IGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBpZiAob3Jp
Z2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9
IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5
ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwotCi0g
ICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGllZCwgc28ganVzdCByZXR1cm4gdGhlIHJlc3VsdC4K
LSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8IG51bVJvd3MgPD0gMCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4g
QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUg
ZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZl
ci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChvcmlnaW54LCBvcmlnaW55LCBudW1Db2x1bW5zLCBu
dW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5
U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJl
Y3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwg
cmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9uU2NhbGUpOwotICAgIG9yaWdpbnggPSBpbWFnZVJl
Y3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFnZVJlY3QueSgpOwotICAgIGlmIChpbWFnZVN1cmZh
Y2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJm
YWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAg
ICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50ZXJzZWN0aW9uKGxvZ2ljYWxSZWN0LCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7Ci0gICAg
ICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGF0YS5tX3N1cmZhY2UuZ2V0KCks
IGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgtbG9naWNhbEFyZWEueCgpLCAtbG9naWNhbEFy
ZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsQXJlYS5zaXplKCkpLCBJbnRTaXpl
KCkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciog
ZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBkZXN0
Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZGVz
dFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQq
IHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAq
ICh5ICsgb3JpZ2lueSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7
IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNp
Z25lZCogcGl4ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQotICAgICAgICAgICAgLy8gQXZvaWQg
Y2FsbGluZyBDb2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNlIG9uZQot
ICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4K
LSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0
OwotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2
OwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYwMCkgPj4g
ODsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBGRik7Ci0K
LSAgICAgICAgICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSByZWQ7
Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1
ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEu
MCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICBy
ZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgYmFja2luZ1N0b3JlVW5p
dChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNj
YWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykK
LSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7
Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwg
bV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi1SZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9
IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJl
Y3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwg
bV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIEludFJlY3Qgc2Nh
bGVkU291cmNlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9
IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlU2l6ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGJhY2tpbmdTdG9yZVVu
aXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
SW50UmVjdCBsb2dpY2FsU291cmNlUmVjdCA9IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVz
dFBvaW50ID0gbG9naWNhbFVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIGludCBv
cmlnaW54ID0gc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gc2NhbGVkRGVz
dFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBsb2dpY2FsRGVzdHgg
PSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKTsKLSAgICBBU1NF
UlQoZGVzdHggPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4IDwgbV9zaXplLndpZHRoKCkpOwotICAg
IEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNjYWxlZFNvdXJj
ZVJlY3QubWF4WCgpKTsKLQotICAgIGludCBlbmR4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNj
YWxlZFNvdXJjZVJlY3QubWF4WCgpOwotICAgIGludCBsb2dpY2FsRW5keCA9IGxvZ2ljYWxEZXN0
UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WCgpOwotICAgIEFTU0VSVChlbmR4IDw9
IG1fc2l6ZS53aWR0aCgpKTsKLQotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4Owot
ICAgIGludCBsb2dpY2FsTnVtQ29sdW1ucyA9IGxvZ2ljYWxFbmR4IC0gbG9naWNhbERlc3R4Owot
Ci0gICAgaW50IG9yaWdpbnkgPSBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkg
PSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGxv
Z2ljYWxEZXN0eSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgp
OwotICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkgPCBtX3NpemUuaGVp
Z2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9
IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIGludCBlbmR5ID0gc2NhbGVkRGVzdFBv
aW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpOwotICAgIGludCBsb2dpY2FsRW5keSA9
IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WSgpOwotICAgIEFT
U0VSVChlbmR5IDw9IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0g
ZGVzdHk7Ci0gICAgaW50IGxvZ2ljYWxOdW1Sb3dzID0gbG9naWNhbEVuZHkgLSBsb2dpY2FsRGVz
dHk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmlj
ZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0g
ICAgSW50UmVjdCBpbWFnZVJlY3QoZGVzdHgsIGRlc3R5LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsK
LSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRv
SW1hZ2VBbmRBZGp1c3RSZWN0KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0g
ICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX3Jlc29s
dXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3R4ID0gaW1hZ2VSZWN0Lngo
KTsKLSAgICBkZXN0eSA9IGltYWdlUmVjdC55KCk7Ci0KLSAgICB1aW50OF90KiBwaXhlbERhdGEg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzY2FsZWRTb3VyY2VTaXplLndpZHRoKCk7
Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1
cmZhY2UuZ2V0KCkpOwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRh
KCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRl
c3R5KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0g
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHggKyBkZXN0eDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xv
cjo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAg
Ly8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlZCA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3Jl
ZW4gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dzW2Jh
c2V4ICsgM107Ci0KLSAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
KnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7
Ci0gICAgICAgIH0KLSAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICB9Ci0K
LSAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0uCi0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShp
bWFnZVN1cmZhY2UuZ2V0KCksIGxvZ2ljYWxEZXN0eCwgbG9naWNhbERlc3R5LCBsb2dpY2FsTnVt
Q29sdW1ucywgbG9naWNhbE51bVJvd3MpOwotCi0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBtX2Rh
dGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVy
YXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgY29weVJl
Y3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihpbWFnZVN1cmZhY2UuZ2V0KCksIG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIEludFNpemUoKSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsTnVtQ29sdW1ucywg
bG9naWNhbE51bVJvd3MpLCBJbnRTaXplKGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNv
dXJjZVJlY3QueCgpLCBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lnko
KSkpOwotICAgIH0KLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAg
IGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBi
YXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAot
ewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWly
b19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7Ci0gICAgcmV0
dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKLX0KLQotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVy
ZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEFTU0VSVChtX3RleHR1cmUp
OwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1h
a2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KLSAgICBHTENvbnRleHQq
IHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIGNhaXJv
X3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKLSAgICBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBl
ckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVy
R0w6OlNob3VsZEJsZW5kLCBtX3NpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Ci19
Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBj
b25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5JQ09T
SUEpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBtX2RhdGEubV9uaWNvc2lhTGF5ZXIuZ2V0KCk7Ci0j
ZWxzZQotICAgIGlmIChtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9kYXRhKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0
aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNl
IHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0
b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKLSAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlw
WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2RhdGEubV90ZXh0dXJlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQ0dMZW51bSBiaW5kVGV4dHVyZVRhcmdldDsK
LSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAg
YmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJF
X0NVQkVfTUFQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENv
bnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHVpbnQzMl90IGZibzsKLSAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKLSAgICBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVY
VFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4
dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBnbENvcHlUZXhJbWFnZTJEKHRh
cmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCksIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOwotICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICBnbEZsdXNoKCk7Ci0g
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlv
blRleHR1cmUpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNzZhZjQwODk2YmFhY2Q4MGQ5ZjFjNWVmYWE3OTBhMTQ5YjhkZDdmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNh
aXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJv
LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRt
YXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9u
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcikpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5
Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQu
c3RhdGUoKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29u
dGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0
aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25D
b250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRv
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29w
eUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRy
YXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1f
bG9naWNhbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKQoreworICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwg
KGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9
PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Cisg
ICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7
CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChj
b2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5Owor
ICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VS
Z2JMVVQpOworICAgIH0KK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJ
bWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVk
SW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5
cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNh
aXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFs
aXR5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNiOTE5YWQ1MjJl
YTE3OGIzMmMwMDlmNWQ4OGQ1ZDcxNmRlZjNhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+
IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNw
YWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFj
a2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9y
Rm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiYpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyYWQ1ZTllN2NlN2U4NzFkMWUwMDVkM2RmNzY4
NGNiMTk3ZWQ2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKwor
I2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworI2lmIFVT
RShFR0wpCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5RUdMLmgiCisjZWxzZQor
I2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8Y2Fpcm8tZ2wu
aD4KKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2VsaWYgVVNF
KE9QRU5HTF9FUykKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNlbHNlCisjaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgorI2VuZGlmCisKK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQorewor
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7
CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91
cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQK
KyAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCisgICAgdWludDMyX3QgdGV4dHVy
ZQorICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBs
ZXZlbCAqLywgR0xfUkdCQSwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0
KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAg
IGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAg
Ly8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRl
bCBkcml2ZXJzLgorICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwg
RkFMU0UpOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9j
cmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0
dXJlLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIGlm
IChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZhY2Uoc3VyZmFjZS5nZXQo
KSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwg
dGV4dHVyZSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwg
Q29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQorewor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25p
Y29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQor
ICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7Cisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgp
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlv
dXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1M
YXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxh
eWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhp
czsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBD
YW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBh
bHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0
KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9
IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgor
ICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250
ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAg
ICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87CisgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZF
UiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsK
KyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1f
YmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xC
aW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAg
ICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwg
Jm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19B
TElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdC
QSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWly
b0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJl
LCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBt
X2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNl
LmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwg
Q0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2Nv
bXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKwor
ICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAg
IHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUsIFRleHR1cmVNYXBw
ZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07CisjaWYgVVNFKE5J
Q09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsK
KyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0
IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVh
a3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxy
ZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUg
Y29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAw
LCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkp
OworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3Rp
dmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNTRVJU
KG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4
dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgorICAg
IEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0aWNfY2FzdDxU
ZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRhcmdldFJlY3QsIG1h
dHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEp
CisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxz
ZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNFKE5J
Q09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyAg
ICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgfkltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Cisj
aWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5
LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNv
bnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAg
IHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBv
c2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKKyAgICB1
aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisgICAgdWludDMyX3Qg
bV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjMzYTY4MDkzMWQ4OTU4MWIzYmZjMWJiNDY1YmRhYmU3ODkwOTUzMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNl
RGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1h
dF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndpZHRo
KCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFplcm9lZE1hbGxv
YyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndpZHRo
KCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3Nl
dF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRh
LCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgIH0pOworCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tl
bmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVy
biBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9n
aWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJm
YWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1
cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNh
bFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENv
bG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBp
eGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFi
bGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBw
aXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFS
R0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3Vy
ZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNh
bFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDAzNzk0ZmRh
YTk0NzMyYjYxNTU3YzQxZTg0NDIzMWE5OGE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcml2
YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisg
ICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDk4ZmI0MDQyNzhkYjI4YThiNDFi
Y2VmMDM2MTU3YWVjMjY2M2QwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQo
bG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3Vy
ZmFjZV9zdGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisK
KyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNl
LmdldCgpKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1f
Y29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3ND
b250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUlt
YWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJl
aGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29w
eSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdC
MzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQo
KSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0
KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5Lmdl
dCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisK
KyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdT
dG9yZToKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkg
Y29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQ
RV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0g
Q0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENv
cHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFj
a2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JB
RGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9J
bWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhz
dXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4
ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBp
bWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1
cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1
cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRw
dXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNl
LmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50
U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWlyb19zdXJm
YWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50U2NhbGVk
LngoKSwgZGVzdFBvaW50U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0
U2NhbGVkLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2YwNTUzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7
CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJm
YWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3Vy
ZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxw
dHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckRhdGFDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUz
NTk5NDZlZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJv
X2gKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
Ci0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRl
ICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBw
dWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFn
ZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwg
fkltYWdlQnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJm
YWNlOwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1f
c2l6ZTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZv
aWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQg
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9jb21wb3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwot
ICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQot
ICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UK
LSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxh
eWVyUHJveHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90
IG1fdGV4dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWU0ZWM3MTllZGI0OTNmNzlk
YmJmYWJlNWFmOTNjYTA2NzA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBV
U0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5o
PgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFn
ZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1l
dGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2Vz
IEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBv
cHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKElt
YWdlQnVmZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JT
cGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUo
Y2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNv
bG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAg
ICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJ
T1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xv
clNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3Bh
Y2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBj
b2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9
IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJl
bmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNj
YWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQo
KS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQot
ICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1
dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4g
bWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNj
YWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNv
bHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXpl
KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVk
SGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdo
dCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0g
bV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZs
b3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2Vk
PHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5i
eXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElu
dFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgu
dW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vs
c2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0g
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCks
IGhlaWdodC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNl
OjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNv
bG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNn
Q29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRv
dyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4
dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJC
b3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFj
ZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0
V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFj
Y2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBi
YWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0
ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0
cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEu
Ynl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0
YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwg
bV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRh
LmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10g
KHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVm
ZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNh
ZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgp
LCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNj
YWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQot
Ci1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nl
c3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29s
b3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNj
ZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFj
ZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1
Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1f
ZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBj
aGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBt
X2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXpl
KCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VC
dWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1v
cnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFu
ZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFu
ZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNl
IHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2Yg
dGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJm
YWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2lu
dGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3Vy
ZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAg
ICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlm
Ci0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1
c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNy
b3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJv
dW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0
dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFr
ZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBp
bWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBsb2dp
Y2FsU2l6ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdl
LmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0g
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6
ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVz
ZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNpemUo
KSwgaW50ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVy
LT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
LCBsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQot
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFn
ZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZh
Y2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92
ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxD
R0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
LSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3
aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6
Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwg
MzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1f
ZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1h
Z2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJU
KGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNp
emU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJ
bnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1
ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
LSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RD
b250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIs
IG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlm
ICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5l
ZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6Omdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhl
bEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25z
dAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAg
Zmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0K
LSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAg
IHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUo
KTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0
ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXpl
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7
Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
ICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0K
LSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6
ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcg
dGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJ
T1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBp
cyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5n
ZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRh
KG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0
dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWlu
UHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAg
ICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhh
dmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24g
dG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAg
IGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9n
aWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIs
IHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAg
IGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBs
b2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdl
QWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRl
cmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAg
ICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRl
cm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxT
aXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNw
YWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0Nv
bnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAg
ICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAg
RmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAgICAgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VT
aXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBp
bWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlm
ICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRh
dGEpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25z
dAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAg
Zmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJhNzliM2Vi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYg
VVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5k
aWYKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXRh
aW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9y
U3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0
VHlwZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2Uo
Y2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNl
Q29sb3JTcGFjZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNpemUuaGVp
Z2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlv
blNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBiYWNrZW5k
U2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgpKSkpCisg
ICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2Us
IENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0
KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYm
IGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0
ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250
ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSkpOworICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6
ZTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwor
ICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4
dC5nZXQoKSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwor
fQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3Ip
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVl
ZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5k
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVj
dFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9i
YWNrZW5kU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgp
ID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1h
Z2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAg
QVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVs
QXJyYXk7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1hZ2VEYXRh
ID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxv
Z2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGlt
YWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4
ZWxBcnJheS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAg
YXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
bnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikp
OworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJyYXlEaW1l
bnNpb25zLndpZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAzMiwgNCAq
IHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAg
fSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwor
ICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBi
YWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNr
ZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tl
bmRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6
ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1
dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1
YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwg
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVj
dG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHBy
ZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRF
KQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQg
Ynl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
dkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdl
QnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgp
KTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VC
dWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2
SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkK
K3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAg
IEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NF
UlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAg
ICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlm
IChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xv
ckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwg
MSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3Qs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkg
Y29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNy
Y0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VC
dWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVz
dEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNkNDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFn
ZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKwor
ICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENG
RGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJB
VEUpCisgICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjcxNGE2ZTdhYzhiMTU3ZDM0OTdjYjk1NjhkMjczZGFmNjg3M2YwYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0
bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENH
Qml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ0dD
b2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAq
IGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoYmFja2VuZFNp
emUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRh
KSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGJhY2tlbmRTaXplLmhlaWdodCgpICog
Ynl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1C
eXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCA4LCBi
eXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBEZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICgh
Y2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29u
c3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAg
IH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250
ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xv
clNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0Is
IGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVs
bHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgY2FjaGVkQ0dD
b2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0V2luZG93KTsKK30KKworSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEo
ZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAs
IG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAg
IEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0
dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitO
YXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29w
eUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2JhY2tlbmRTaXplLndpZHRo
KCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAg
ICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZv
LCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVj
dCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbV9kYXRhKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhZjY2MmExYzc2YThiODliNzc2ZjIzOTZjYjg1MzQ3
ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9kYXRh
OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3YTU3N2QxYmNiNWI0
OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRl
L0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNw
YXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYK
LQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJl
c2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAo
VVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRp
YyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywg
Y29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAg
IEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVu
cHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVy
dCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdC
QS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxh
Z3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdl
X0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChz
cmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJy
b3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQg
MywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRh
IGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwg
a3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FS
R0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlu
bGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NF
TEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0
ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3Jj
LmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRo
ID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9
IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11
bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAg
IFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0
b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0
KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRh
dGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNp
emUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
c3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJh
c2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vs
c2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0Ci17
Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFy
ZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAo
YXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVh
LnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0
LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAgIENo
ZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCBy
ZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5LnVu
c2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwot
ICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAg
ICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKG9yaWdpbnggPCAw
KSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7
Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4o
ZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwotICAgIGlmIChlbmR4
LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgp
OwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54OwotICAgIAotICAgIGlu
dCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBDaGVja2VkPGlu
dD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAg
ICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBv
cmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVuc2Fm
ZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVuZHkudW5zYWZlR2V0
KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBD
aGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0gICAgaWYgKHdpZHRo
LnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDApCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJl
Y3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlc3VsdERhdGEgKyBkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0
ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9y
aWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
ICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMu
aGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAg
ICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAg
ICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZl
cnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClbMF0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAgICBzcmNCeXRlc1BlclJvdyA9
IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0g
ICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dC
eXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAg
ICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5z
YWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9
IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBp
eGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAgICAgICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFu
bmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAg
IH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIg
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBi
ID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRp
ZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJj
ZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkg
PiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAgIENo
ZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRl
c3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAg
ICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXpl
LCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291
cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8
aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5k
eC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3
aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4
IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwot
ICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBz
b3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChv
cmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgp
IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChD
aGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNT
RVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGlu
dD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGgg
PSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJj
ZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2Fm
ZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0
Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYg
KCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291
cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAg
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0g
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewot
ICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAg
ICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJz
IG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0K
LSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNS
b3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVh
ZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3co
KTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNl
QmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVu
c2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3Jj
LmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3Jj
Um93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVs
dGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Ly8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNv
bnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3Mp
OwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAg
ICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjM3NGJhZDI0ZjA3ODdmZWYwNTQzYzFiNTFiOTEy
MGYxMjMwZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpD
R0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJv
dmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewot
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7
Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0
YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92
aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkZjdjZTE4ZTQxMTA5
ODk3NGU1NzM0MzQwNjVjZTE5OGI5Nzc5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwor
ICAgIGlmIChiYWNrZW5kU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGJhY2tlbmRT
aXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjZ0Nv
bnRleHQpID09IGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlKQorICAgICAgICByZXR1cm4gQ0dJT1N1
cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29udGV4dCk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNr
ZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2Vu
ZFNpemUsIGNnQ29sb3JTcGFjZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZh
Y2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dD
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSkp
OworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3BhY2UgPSBjb250ZXh0
Q29sb3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZh
Y2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1
cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOwor
fQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0
KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQo
KQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9
CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNl
LT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9y
bWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVy
biBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJm
YWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3Vy
ZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYg
aW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50KQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNl
OjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcg
dGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMg
bmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFD
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZjMGYwNDNm
MDU1YTc3ZGNlZjY2M2VlNGZjN2JmNjViOTZmNjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1
ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdF
QkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1
ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFj
a2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNv
c3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2
ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJh
d0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHVuc2ln
bmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2Vu
ZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFkNzVkZmIw
ZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMy4uMmFhODIzMzJkZTJkMTExYmRjZTFlMDgwNjM1OTBk
Y2UyMWI2YzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFBE
RkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAg
KyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CiAKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9
IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIGRlY29kZWRTaXplQ2hh
bmdlZChpbnRlcm5hbFNpemUudW5jbGFtcGVkQXJlYSgpICogNCk7CisgICAgSW50U2l6ZSBiYWNr
ZW5kU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CisgICAgZGVjb2Rl
ZFNpemVDaGFuZ2VkKGJhY2tlbmRTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwogfQogCiBJbWFn
ZURyYXdSZXN1bHQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYx
NjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJk
MTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0
V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZl
ci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
ICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9v
bChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9v
bDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3Vy
ZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZl
ci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9w
dGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1h
dCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRl
c1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5k
TkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
L0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVlOGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIx
NDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxl
bmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTExMSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VS
ZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5
ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhj
Nzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25z
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxB
cnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlm
ICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBp
bWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1h
Z2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRG
bG9hdHMobV92YWx1ZXMpOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEz
LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAg
ICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFy
cmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5z
aXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcAppbmRleCBmYTA0MTNjMDBkYTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgz
Li45NzhjNTVhNjdiOGRlNzIwZTlmYTc5YmQ4Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4
ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1h
Z2VSZXN1bHQgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBp
eGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwog
ICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmlu
ZGV4IGExOWVhMDUzNzU4MTljZWNkYWMyNWQ1ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0
MmFmYTZhYTI5OGRhZjRlYzAyZWUzZDk1Y2VjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0yMjksNyArMjI5LDggQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYg
KG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVs
QXJyYXkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmlu
ZGV4IDYyYzJmODMzNjUzNTg2ODQ0ZDlmMzkwZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEy
NDQ5N2Y5MjYzNDY1Njk3NWZmYjg3ZGM3YWI5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CkBAIC0zNzEsMTIgKzM3MSwxMyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdl
RGF0YSogcmVzdWx0SW1hZ2U7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVz
dWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAg
ICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpA
QCAtMzk1LDcgKzM5Niw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpz
cmNQaXhlbEFycmF5LAotICAgICAgICAqcmVzdWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFy
cmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdo
dCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmlu
ZGV4IDBlOTQ0ZGYwMGE5NWNjMDZkMjZhYTQyZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNl
NDk4NjJjMGU0MTZmMmRjYzI1NmI0NzBjOTE5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTQsNyArOTQsOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktO
T1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7
CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVm
NTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYz
OTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAj
aW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJT
aGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVz
LCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFj
Y2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0g
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNp
emUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdT
dG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRS
ZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwor
ICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdl
RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFn
ZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJl
YS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQ
aXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dB
cmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdT
dG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURh
dGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJy
YXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0
aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwCmluZGV4IDQ5YmE4NDE3M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4
MWIuLmQ3ZWQ5YjI0NDkwMTc4ZmZiZmJlYjFjZDQyYmVhNWU4ZmYxNTllNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJO
RU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCkBAIC01MjIsMTQgKzUyMywxNSBAQCB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRQaXhl
bEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRQaXhlbEFycmF5KQorICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8g
cmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQog
ICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoKnJlc3VsdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAg
ICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsK
QEAgLTU0Myw3ICs1NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBw
bGF0Zm9ybUFwcGx5KCpyZXN1bHRQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXpl
LndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1B
cHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBr
ZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDBiYTUxYjc2MTJmMmNi
MmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMuLjZkYjg3ZmQ1NDVhOGYxZGRhN2Q5YjU4OGEyNTQw
NjU1YTU3OGZiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDczLDcgKzQ3NCw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVz
dXRQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAy
NTE3ODFjYTVhYTUxZjc4MDI3YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3
Mzk0NTIwMGE5MTNlMGU5ZTY1OWFiNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQs
NyArMjM0LDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFt
cGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdl
LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggODIyNzg3OWY1Nzg2ZGU2MzUwNTQzNmYxYjQ4
MDE3YzBhZGQyOGVmNi4uMTk4MGFiOTM0ZTU2ODcyYjYyNjQyMWYwMjIxMmU4MmY5OThhMjE5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVs
ZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
CiAKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2Ut
PmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJm
OTcyYjU5MGZhLi5hOWU4ZmNhMmM1ZDFkY2JiNjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0
Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkq
IGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50
OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCk7CiAgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAg
IGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3
ICsyNjUsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAog
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQo
KSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1
ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNS
ZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1h
Z2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUo
KSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNl
Ci0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAg
ICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGlu
YXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApA
QCAtNDM4LDUyICs0MzgsNTIgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7CiAgICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIg
Y29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsK
ICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlu
cHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUp
OwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdB
bHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBj
b3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJl
Y3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rpbmcg
aW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZp
bHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZm
ZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
clJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlu
cHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQp
LnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAg
ICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAog
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAt
NDk3LDEzICs0OTcsMTAgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKQogCiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVu
ZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2Up
OwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFt
cGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQor
SW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
IHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDEx
IEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3Vs
dFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNp
emUpOwogICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1V
aW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMx
LDcgKzUyOCw3IEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2Fm
ZUdldCgpKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5n
ZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNl
YTJiNmU5MzMyZmU0Mi4uYWY0NjNlZmViMDEzNmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xh
c3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmls
dGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xNTMsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVm
ZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2ls
bCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAg
Ly8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhh
XS4KQEAgLTE4Miw4ICsxODMsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBt
X2lucHV0RWZmZWN0czsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggMWUwMzVhN2VlZjI4
MDNjZjY1OTkyZDA0OWM5ZjhiNTU2YmNlY2FlYy4uOTE4ZTE4YWY1ZTEyZmY5MDQ5NDgzYTc4ZWYx
YmE4MmQ3MzU4YzJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b21tb24uY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXpl
KG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxT
aXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxz
LmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1
ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKICAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEYXRhRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmYxYjM5NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJEYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgi
Ci0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhl
bHMgaW4gYSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRG
b3JtYXQ+Ci12b2lkIHN3aXp6bGVBbmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzcmNSb3dz
LCB1bnNpZ25lZCByb3dDb3VudCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlk
ZSwgdW5zaWduZWQgZGVzdFN0cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCB5ID0gMDsgeSA8IHJvd0NvdW50OyArK3kpIHsKLSAgICAgICAgLy8gU291cmNlIGRh
dGEgbWF5IGJlIHBvd2VyLW9mLXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhl
IGJpdHMgdGhhdAotICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxp
ZWQgYnkgdGhlIGNhbGxlci4KLSAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7Ci0g
ICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5OwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sQ291bnQ7ICsreCkgewotICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZVBvc2l0aW9uID0geCAqIDQ7Ci0gICAgICAgICAgICBjb25zdCB1aW50
MzJfdCogc3JjUGl4ZWwgPSBzcmNSb3cgKyB4OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBm
aWx0ZXJzIGV4cGVjdCAoUClSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJl
Y3QyRCdzIFBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICB1aW50MzJfdCBhbHBo
YSA9ICgqc3JjUGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVpbnQzMl90
IHJlZCA9ICgqc3JjUGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVpbnQz
Ml90IGdyZWVuID0gKCpzcmNQaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1
aW50MzJfdCBibHVlID0gKCpzcmNQaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBp
ZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJs
dWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbl0gICAgID0gcmVkOwotICAgICAg
ICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVz
dFJvd1tieXRlUG9zaXRpb24gKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQ
b3NpdGlvbiArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29s
IGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0
IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdEJ1ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJT
aXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXpl
KCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291
cmNlQnVmZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAq
IDQ7Ci0gICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngo
KSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54
KCkgKiA0OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlk
ZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBk
ZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1
bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1
bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBj
b25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09m
ZnNldDsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAq
IHkgKyBkZXN0Um93T2Zmc2V0OwotICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBieXRl
c1BlclJvdyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE5vdGU6IEFzc3Vt
ZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLWJvb2wgY29weVJlY3RGcm9tU291cmNl
VG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb24oY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBj
b25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVm
ZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Qu
c2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0s
IHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRo
KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgp
ICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24o
KS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRp
b24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNT
dHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dz
ID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29u
c3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZv
ciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNS
b3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJp
ZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLQotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IHNvdXJjZVJlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4
ICogNDsKLQotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOwotICAgICAgICAg
ICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dbeCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQg
Ymx1ZSA9IHNyY1Jvd1t4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jv
d1t4ICsgM107Ci0KLSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdy
ZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB1aW50MzJfdCogcGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykg
KyB4OwotICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBn
cmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYgcmVzdWx0KSBjb25zdAotewotICAg
IGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRo
OwotCi0gICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gcmVjdDsKLSAgICBzY2FsZWRSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKLQotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5nU3Rv
cmVTaXplKS5jb250YWlucyhzY2FsZWRSZWN0KSkgewotICAgICAgICAvLyBSZXF1ZXN0ZWQgcmVj
dCBpcyBvdXRzaWRlIHRoZSBidWZmZXIuIFJldHVybiB6ZXJvLWZpbGxlZCBidWZmZXIuCi0gICAg
ICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3Rv
cmVTaXplLCBkYXRhLmRhdGEoKSwgcmVjdC5zaXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2lu
dCgpKTsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNp
emUgJiYgIWRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8g
bnVtQnl0ZXMgPSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1C
eXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJhY2tp
bmdTdG9yZVNpemUgPSBzaXplOwotICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZl
R2V0KCkpOwotICAgIHJldHVybiBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0
KCk7Ci19Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxz
IGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQ+Ci12b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRl
Q291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotICAgIGF1
dG8qIHBpeGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1
aW50MzJfdCBwaXhlbCA9ICpwaXhlbERhdGE7Ci0gICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24g
PSBpICogNDsKLQotICAgICAgICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDAp
ID4+IDI0OwotICAgICAgICB1aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAx
NjsKLSAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4Owot
ICAgICAgICB1aW50MzJfdCBibHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAg
Ly8gKFApUkdCQSAtPiBQQkdSQQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAy
NCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICArK3BpeGVsRGF0
YTsKLSAgICB9Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBp
biBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZv
cm1hdD4KLXZvaWQgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVE
YXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRl
Q291bnQgLyA0OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kp
IHsKLSAgICAgICAgdW5zaWduZWQgeCA9IHBpeGVsQ291bnQgKiA0OwotCi0gICAgICAgIHVuc2ln
bmVkIHJlZCA9IGJ5dGVEYXRhW3hdOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRh
W3ggKyAxXTsKLSAgICAgICAgdW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKLSAgICAg
ICAgdW5zaWduZWQgYWxwaGEgPSBieXRlRGF0YVt4ICsgM107Ci0KLSAgICAgICAgaWYgKGRlc2ly
ZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAg
ICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQg
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IHJl
ZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGJ5dGVEYXRhKSArIGk7Ci0gICAgICAgICpwaXhlbCA9IChhbHBo
YSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgIH0KLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8q
IHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5h
cmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhD
bGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICgh
Yml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21C
aXRtYXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXpl
IGJpdG1hcFNpemUoY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGlu
dD4ocmF3Qml0bWFwU2l6ZS5oZWlnaHQpKTsKLQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0g
SW50UG9pbnQoKSAmJiByZWN0LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKG51bUJ5dGVzLnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRSYW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIE9ubHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlm
ICghY29weVJlY3RGcm9tRGF0YShyZWN0LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewot
ICAgICAgICAvLyBJbi1tZW1vcnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4g
TmVlZCB0byBzd2l6emxlIHRoZSByZXN1bHRzLgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBp
blBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5s
ZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1
ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzaXJlZEZvcm1hdCkgY29uc3QKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBC
aXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAg
YXV0byBudW1CeXRlcyA9IHBpeGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0
PiBkMmREZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0g
ICAgQVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5E
YXRhID0gcGl4ZWxTaXplLndpZHRoKCkgKiA0OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9t
IHRoZSBJRDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRy
PElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJp
dG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BU
SU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJE
OjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3Jl
YXRlQml0bWFwKHBpeGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFBy
b3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwot
ICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndp
ZHRoKCksIHBpeGVsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9t
Qml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JF
Q1QgbWFwcGVkRGF0YTsKLSAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNf
UkVBRCwgJm1hcHBlZERhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXBwZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0
ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRp
YmxlLgotICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWln
aHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5E
YXRhLCBkYXRhLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlw
bHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJp
dHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0
Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0g
ZGVzaXJlZEZvcm1hdDsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5j
OjpJblN5bmM7Ci0KLSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVy
YXRlUmVuZGVyaW5nICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgQVNTRVJUKHNv
dXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4g
MCk7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENo
ZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VS
ZWN0LngoKSk7Ci0gICAgZGVzdHggKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0
eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXpl
LndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFT
U0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIENo
ZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJl
Y3QubWF4WCgpKTsKLSAgICBlbmR4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5k
eC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBk
ZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJj
ZVJlY3QueSgpKTsKLSAgICBkZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRl
c3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNp
emUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAg
IEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAg
IENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJj
ZVJlY3QubWF4WSgpKTsKLSAgICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQo
ZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBo
ZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVu
ZHkgLSBkZXN0eTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAg
ICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NF
UlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VS
VChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhl
bFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYg
KCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChz
b3VyY2VTaXplID09IHNpemUpIHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2Uu
ZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9y
bWF0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5
dGVGb3JtYXQpOwotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VS
ZWN0LCBzb3VyY2UsIHNvdXJjZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3lu
YzsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBp
eGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJl
Y3RUb0NvcHkgPSBzb3VyY2VSZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhl
bFNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGRlc3RCdWZmZXJQb3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0
RnJvbVNvdXJjZVRvRGVzdChzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRh
dGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7
Ci0KLSAgICBpZiAoYnl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQ
cmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+
KHNvdXJjZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3Rv
cmVTaXplLCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBj
b3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUo
KSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZm
ZXJQb3NpdGlvbik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFw
SWZOZWVkZWQoKQotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5
bmM6OkJpdG1hcE91dE9mU3luYyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VS
VChwaXhlbFNpemUud2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQocGl4ZWxTaXplLmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53
aWR0aCAqIHBpeGVsU2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRt
YXAgZGF0YSBpcyBpbiBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBC
R1JBIHRvIGJlIGNvbXBhdGlibGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFj
a2luZyB3ZSB1c2UuCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8v
IFJHQkEgLT4gUEJHUkEKLSAgICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
IC8vIFBSR0JBIC0+IFBCR1JBCi0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlG
cm9tTWVtb3J5KG51bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1
ZmZlclN5bmM6OkluU3luYzsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRh
dGE6OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsK
LSAgICBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0
KQotICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVu
ZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAg
ICBpZiAoYml0bWFwVGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJh
Y2tpbmdCaXRtYXA7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0
Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0Jp
dG1hcCAhPSBiaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4g
TXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0
LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0
KCksIG51bGxwdHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRt
YXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6
ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlm
IChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRw
dXQgdGFyZ2V0LgotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJ
V0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250
ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VE
ZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYg
KCFzb3VyY2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENP
TVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9Q
RVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9C
SVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcs
IERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNl
Q29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFw
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgaWYgKCFzb3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9
IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJj
ZURhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0Owot
ICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4
dCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
PiBjb21wYXRpYmxlQml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRl
Qml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFw
cGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBh
dGlibGVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVy
biBjb21wYXRpYmxlQml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOWM5NGQ4YTQ4MjJmMTI1ZjQwNmYzMDA3NzQ3ZmY5MzU4YzE1NmEzMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJ
RDJEMUJpdG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGJ5dGVzUGVyUm93OwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJz
LgotICAgIG11dGFibGUgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGJ5dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ+IHBsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiBjb250ZXh0OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBj
bGFzcyBCaXRtYXBCdWZmZXJTeW5jIHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91
dE9mU3luYyB9OwotICAgIG11dGFibGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5j
IHsgQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSkgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
b21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBib29sIGVuc3VyZUJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKLSAgICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVj
dEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29u
c3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgdm9p
ZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVy
U3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNDIx
OGYxZWY0ZjU3OGNlMDdmOTRiN2E4ZWNiYjgzMGE1MjY3ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDT01QdHIu
aCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRp
cmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgot
I2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21w
YXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZm
ZXIoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0
ciwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3Rv
ciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShG
bG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhl
aWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRD
b250ZXh0LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwg
bV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxv
YXQgc2NhbGVkSGVpZ2h0ID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0
KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2Vy
IHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdo
dCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Np
emUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0g
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9z
aXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1Bl
clJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93
PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51
bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGxh
dGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpIDogbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRl
eHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKLQotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVj
dDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUobV9sb2dpY2FsU2l6ZSwgcmVuZGVy
VGFyZ2V0LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFw
KCZtX2RhdGEuYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1f
ZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAg
ICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0gICAgbV9kYXRhLmNv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4
dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBpbWFnZUNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIG51
bGxwdHIsIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAot
ewotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19Ci0KLXN0YXRp
YyBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29u
c3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/
IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChpbWFnZSAm
JiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUu
aGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKLSAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0
ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVkQml0bWFw
KSB7Ci0gICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3Vu
ZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBj
cm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3Qp
OwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNyb3BwZWRCaXRtYXA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19
Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQx
Qml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6
ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBU
YXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsK
LX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwot
ICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQs
IFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwot
fQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVy
LT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBp
bWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJm
YWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUNPTVB0cjxJRDJE
MUJpdG1hcD4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogU2VlIGlmIHdlIGNh
biByZXVzZSB0aGUgb24taGFyZHdhcmUgaW1hZ2UuCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotfQotCi1DT01QdHI8SUQyRDFC
aXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBi
aXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmlt
YWdlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRh
LmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBs
ZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFj
a2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9y
ID0gRG9udENvcHlCYWNraW5nU3RvcmU7Ci0KLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3Zl
cmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBp
ZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dp
dGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAg
ICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50
UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAgICAgICAgICAgaW1hZ2UtPkNv
cHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgp
LCAzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0g
ICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlt
YWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGF1dG8gY29tcGF0aWJsZUJp
dG1hcCA9IG1fZGF0YS5jb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVudEltYWdl
U2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQuZHJhd05h
dGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7
Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBj
b3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdl
PiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0g
ICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVm
UHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAg
ICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5z
aW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlm
IChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0
KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lz
dGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAg
ICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4g
bV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBz
cmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCks
IDEpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJy
YXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17
Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVz
aENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25z
KQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAg
IHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCksIDEpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291
cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAg
ICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBz
Y2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBt
X2RhdGEucHV0RGF0YShzb3VyY2UsIGJ1ZmZlckZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2Nh
bGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91
YmxlKiBxdWFsaXR5KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRh
OiwiX3M7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JT
cGFjZSwgQ29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjcwYWJlZGYwYTYzNTBmZDU1OTQ4ZDQ4MWFiNzg5NWY2MjBiNDhj
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisKKyNpZiBVU0Uo
RElSRUNUMkQpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNPTVB0ci5o
IgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuaCIKKyNpbmNsdWRlIDxkMmQxXzEuaD4KKyNpbmNsdWRlIDxtYXRoLmg+Cisj
aW5jbHVkZSA8d2luY29kZWMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0
YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRy
OworICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29u
dGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQp
CisgICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRh
cmdldCgpOworCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1h
cFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25TY2FsZSk7
CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBOYXRpdmVJ
bWFnZVB0ciBiaXRtYXA7CisgICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1h
cCgmYml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubG9h
ZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisgICAgfSwgW3RoaXNdKCkgeworICAgICAgICBtX2Rh
dGEubWFya0J1ZmZlck91dE9mU3luYygpOworICAgIH0pOworCisgICAgaWYgKCFwbGF0Zm9ybUNv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBpZiAo
IWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRt
YXApKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxs
cHRyKTsKK30KKworSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJh
Y2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIHBsYXRmb3JtQ29udGV4
dCwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0LCBOYXRpdmVJbWFn
ZVB0ciYmIGJpdG1hcCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBi
YWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9wbGF0Zm9y
bUNvbnRleHQoV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpKQorICAgICwgbV9jb250ZXh0KFdURk1v
dmUoY29udGV4dCkpCisgICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCit7Cit9CisKK0dy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5mbHVzaCgpOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFj
ZSgmYml0bWFwVGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKKyAgICBociA9IGJp
dG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OworCisgICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2lu
ZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgorICAgIGlm
IChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5
KCkpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworCisgICAg
Q2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBt
X2RhdGEuYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNr
aW5nU3RvcmUpIHsKKyAgICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMg
PSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAg
aW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRh
dGEuZGF0YSgpLCAzMik7CisKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRp
YyBOYXRpdmVJbWFnZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1h
cFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IElu
dFNpemUmIGJvdW5kcykKK3sKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRp
dmVJbWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7CisKKyAgICBpZiAoaW1hZ2UgJiYgKHN0
YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdo
dCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7CisgICAgICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRt
YXAoYml0bWFwVGFyZ2V0LCBib3VuZHMpOworICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewor
ICAgICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndp
ZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisgICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBl
ZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKKyAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBjcm9w
cGVkQml0bWFwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitz
dGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1h
cD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJp
dG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFn
ZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7Cisg
ICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworCisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVy
cHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlv
blNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5hdGl2
ZUltYWdlUHRyIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
KyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBU
YXJnZXQuZ2V0KCksIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNj
YWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpCit7CisgICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisKKyAgICBp
ZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKworICAgIGlmIChtX3Bs
YXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7CisgICAgICAg
IENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5k
ZXJUYXJnZXQpOworICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7CisgICAgICAgICAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGJpdG1hcDsKKworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQy
RDFCaXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCisgICAgICAgICAgICAgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKFNV
Q0NFRURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgp
LCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFwLT5HZXRQaXhl
bFNpemUoKTsKKyAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7CisKKyAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICog
c2l6ZS5oZWlnaHQgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQg
cmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5vdCBhY2Nl
c3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNl
c3Npb24gaXMgb3Blbi4KKyAgICBjb250ZXh0LT5lbmREcmF3KCk7CisKKyAgICBDT01QdHI8SUQy
RDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gbV9wbGF0Zm9ybUNvbnRleHQt
PmRldmljZUNvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0
bWFwOworICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQx
OjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9C
SVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOworICAg
IEhSRVNVTFQgaHIgPSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9iaXRtYXAt
PkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFw
UHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghc291cmNlQ1BVQml0bWFwKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJv
bUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cik7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfTUFQUEVEX1JF
Q1QgbWFwcGVkU291cmNlRGF0YTsKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFf
TUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOworICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VD
b250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OworICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVy
eUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOworICAgIGhy
ID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXpl
KCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0
MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOworICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQ
VUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb250
ZXh0LT5iZWdpbkRyYXcoKTsKKworICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOworfQorCit2
b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNvbXBh
dGlibGVCaXRtYXAgPSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLT5yZW5kZXJUYXJnZXQoKSk7CisKKyAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9
IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoY3VycmVudEltYWdl
U2l6ZS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVzdENvbnRleHQuZHJhd05h
dGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGlt
YWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdT
dG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9
OworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdS
QURhdGEoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51
bGxwdHIpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG51
bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElS
RUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTU2
MDdmMzY0M2RiYTdlZTVlZWZmMmY3MWFjMzkzOTYwMDdlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
IDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZs
dXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgTmF0
aXZlSW1hZ2VQdHIgbV9iaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCmluZGV4IDg1MWE4NjY3ODliNDgzNTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2NzUuLjA0
MmQ1ZGQ3YmI4MzRmMWUzYmVhMWE5ZTFhOTAyZmUzZGI2ZWZmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
Qm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3RlclNoYXBl
LmgiCkBAIC0xODgsOCArMTg5LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3Jl
YXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICAgICAg
aWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2Us
IEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOworICAgICAgICBhdXRvIGltYWdlRGF0
YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAg
IGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25l
ZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JB
LgogICAgICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50
OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuY3BwCmluZGV4IGQ3ODY5NGFhZTdiMzU5MmIzNjI1MjY3ZDk1MDAxNjZhYmUwNTBmZjkuLmUy
ODU5MmE4MDU2M2JkZDg1YWEyNDdkNWM4ZTBiMTU1YjljMTgyMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzQ1
LDcgKzM0NSw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAgICBJbnRTaXplIGV4
cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsK
ICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRl
ZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8
aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxl
KCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXpl
KCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDlmYmIxZmRmMGQ4
Mjc4ODQ2NjVjZWM3NzM3YjMxMGI1MDMxZDQwYzUuLjBmODg0MjkwMGY4NTFhN2Q5MmY4ODZjYTY2
ZjkxYTkxMGU5ZmVmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAKQEAgLTg0MCw3ICs4NDAsNyBAQCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBX
ZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAogICAgIGlmICghc25hcHNo
b3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5hbFNpemUo
KSwgeyB9KTsKKyAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoc25hcHNob3QtPmJhY2tlbmRTaXplKCksIHsgfSk7CiAgICAgaWYgKCFzaGFy
ZWRTbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389357</attachid>
            <date>2020-01-31 09:17:26 -0800</date>
            <delta_ts>2020-01-31 09:46:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200131091725.patch</filename>
            <type>text/plain</type>
            <size>355324</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uNDJlZDRmMDg1NTRlZDViOGQ2NmVlZGZmZmZlZjE3
ZWE0YjVhMzFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMC0wMS0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3Rv
cmVkIHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBi
YWNrLWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAg
ICAgIEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRk
ZWQgdG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBh
Y2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWls
cy4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhl
IHJlc3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBi
ZSBjcmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGlj
aAorICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdl
IHRvIHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAg
QmFzZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhl
IHJlbmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGlu
c3RlYWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVj
aXNpb25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJC
YWNrZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcg
bmV3IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVm
ZmVyQmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50
CisgICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5k
ZXJpbmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Q29udGV4dHVhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpz
aW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlw
bGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNv
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5kQ29vcmRpbmF0ZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsUmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcik6ICAgICAgICAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVy
c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJh
bnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRl
QmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlD
b3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVw
ZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJv
bUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCisyMDIwLTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVybiBhbmQgdGFrZSBJbWFnZURh
dGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjYy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0tIENv
bWJpbmUgSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSgpIGFuZCBnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgaW4gb25lIGZ1bmN0aW9uIGFuZCBuYW1l
IGl0IGdldEltYWdlRGF0YSgpOworCisgICAgICAgIC0tIE1ha2UgZ2V0SW1hZ2VEYXRhKCkgcmV0
dXJucyBhbiBSZWZQdHI8SW1hZ2VEYXRhPiBzaW5jZSB0aGUgY2FudmFzIGNvZGUKKyAgICAgICAg
ICAgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgcmV0dXJuZWQgVWludDhDbGFtcGVkQXJyYXkgaW50
byBhbiBJbWFnZURhdGEKKyAgICAgICAgICAgYW5kIHNlbmQgaXQgdG8gSmF2YVNjcmlwdENvcmUu
CisKKyAgICAgICAgLS0gUmVuYW1lIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoKSB0byBJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKCkgYW5kCisgICAgICAgICAgIG1ha2UgaXQgdGFrZSBhbiBJ
bWFnZURhdGEgc2luY2UgdGhlIGJ5dGUgYXJyYXkgaGFzIHRvIGJlIGFzc29jaWF0ZWQKKyAgICAg
ICAgICAgd2l0aCBhbiBJbnRTaXplIGFuZCBzZXBhcmF0aW5nIHRoZW0gZG9lcyBub3QgbG9vayBh
IGdvb2QgZGVzaWduLgorCisgICAgICAgIC0tIFJlbW92ZSB0aGUgZW51bSBJbWFnZUJ1ZmZlcjo6
Q29vcmRpbmF0ZVN5c3RlbS4gQWxsIHRoZSBjYWxsZXJzIG5lZWQgdG8KKyAgICAgICAgICAgcGFz
cyByZWN0YW5nbGVzIGFuZCBzaXplcyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUaGUgSW1hZ2VE
YXRhIGhhcyB0bworICAgICAgICAgICBiZSBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBJbWdlQnVm
ZmVyOjpyZXNvbHV0aW9uU2NhbGUoKS4gCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpk
dW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2Ny
ZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gSW1hZ2VCdWZmZXJDYWlyby5jcHAu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5h
bmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhbmQg
Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhcmUgbm90IAorICAgICAgICBvdmVycmlk
ZGVuIGJ5IGFueSBwbGF0Zm9ybS4gU28gZGVsZXRlIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkgYW5kCisgICAgICAgIG1vdmUgaXRzIGJvZHkgdG8gY29udmVydFRvTHVtaW5hbmNlTWFz
aygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJh
d0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgTWFrZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgYmUgcHVibGljIGFuZCByZW1v
dmUgdGhlIGZyaWVuZCBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsVW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpiYWNraW5nU3RvcmVVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJh
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAg
ICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBpbiBs
b2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycgZGF0
YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdoaWNoIHdhcyBw
YXNzaW5nIGEgcmVjdGFuZ2xlIGluIGEgdGhlIGJhY2stZW5kCisgICAgICAgIGNvb3JkaW5hdGVz
IGFsb25nIHdpdGggQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4g
cGFzcworICAgICAgICB0aGUgcmVjdGFuZ2xlIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMgYW5kIHRo
ZW4gdXNlIEltYWdlRGF0YTo6c2l6ZSgpIHNpbmNlCisgICAgICAgIGl0IG11c3QgYmUgc2NhbGVk
IHdpdGggcmVzb2x1dGlvblNjYWxlKCkgd2hlbiB0aGUgSW1hZ2VEYXRhIGlzIGNyZWF0ZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorCiAy
MDIwLTAxLTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIG1hY0NhdGFseXN0OiBUcmlwbGUgY2xpY2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2UgcmVz
dWx0cyBpbiBhbiBlbXB0eSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYThjMGNhZjVlMWRhZTAwZjQy
MzRmY2MzOTM3ZjBjZGMwMWVlNDRhOC4uYmE3ODFjN2EwZGJmZDM4MGI4NTQ1ZjU3MjUwZWIzYWFh
ZGI4NWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0zMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZl
cmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCBjb25z
dCk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBzZWxlY3QgYSBzZW50
ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXgg
NTRkYjcxNmFjODdjYWM0ZDAxMzBkZDhhNzk1NTRkMGQ2NzU2OWU2OS4uYmM0YjBjYjUzMDc1NTE4
ZDAyMzkyMDE2ZDc3MzY3MmJhM2Q4MWQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDQyLDYg
KzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0x
MDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5
NDBkLi41ZDE3NzQzZWQzODQzMDExZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYgKCR7VVNFX0RJ
UkVDVDJEfSkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3Qy
RC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVj
dDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
RC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAK
QEAgLTEzMiw4ICsxMzEsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZh
Y2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcg
KzE3Niw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wu
aAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKaW5k
ZXggOWFiNDY4NzM5ZWYxMWZmNjA5Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZWNlMGY0ZTI1MWJk
ZWViOTZjZDkyYWYxODNiY2M2MmM4YTc5ZTM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UK
QEAgLTg0LDggKzg0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JY29uV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRp
cmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKaW5kZXggYWVjMzIwNjdkM2U2ZjJmNDlkMTkzZTBiMWE2NmJiMDk1OTExNjBjOC4uMTIy
MTVhYjFkMTBmYmRkOGFlY2EyNjdmNzA4NDYzNzM1YmY1ZmVkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKQEAgLTI5MSw4ICsyOTEsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFBvaW50Q0cuY3BwCkBAIC01MjcsNyArNTI5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5o
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDY0MWQ2ZmQ0MzVlM2MzYWUwN2YwYjAwNzI4ODUyYWRiOWEzY2I3
NWUuLmUwNzY0ZmJmNGFiMzNmYjBmNGRkN2NmMTFjODg2MDVhZDNhMjQ3NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xODY1LDYgKzE4NjUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVz
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCA0ZGU3NWRmOGRmMGI4
ZjkwZTViMjU4MTU3ZWFkYTRhNjlkM2I1OTE2Li43NjYxZTJiOWFkMmIzOTE4YTUzYjE2N2U0N2Jj
MTQ1M2FlNmZjOTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2M1ODdjZTU2Mjc0NTc1MGFhNWJkOTRjOTEw
MDg3M2IxNzlkNGUyYi4uODE2ZWFkODE0MjI5NzI4OTZlOTg1NWMzNmM3NWU1YzE3ODk1MjQyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjQ1LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50
UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5
RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBh
YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGFDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyog
SlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhJdGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUg
LyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVm
RWxlbWVudC5oICovOyB9OwpAQCAtODMzLDE3ICs4MzEsMTcgQEAKIAkJMkRBQ0I5RTkyMzc1NUQw
MDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFw
aGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMkRBRjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYz
NDNCMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJE
RDVBNzI3MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpT
VlJGaWVsZE9mVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRERTFDRTAxRjU3NEFEMTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5oICovOyB9
OwotCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0RFMUY1NzRBQUIwMEQx
QTM2NSAvKiBKU1ZSRGlzcGxheS5oICovOyB9OwotCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUg
LyogSlNWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0U2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxh
eUNhcGFiaWxpdGllcy5oICovOyB9OwotCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNW
UkRpc3BsYXlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRERTFDRTgxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCAqLzsg
fTsKLQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VB
MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggKi87IH07Ci0JCTJE
REUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFQzFGNTc0QkZGMDBEMUEzNjUgLyogSlNW
UkV5ZS5oICovOyB9OwotCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0VFMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oICovOyB9OwotCQky
RERFMUQwMjFGNTc0RDAwMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjAxRjU3NEJGRjAwRDFBMzY1
IC8qIEpTVlJGcmFtZURhdGEuaCAqLzsgfTsKLQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8q
IEpTVlJMYXllckluaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEREUxQ0YyMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSTGF5ZXJJbml0LmggKi87IH07
Ci0JCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjQxRjU3NEJGRjAwRDFBMzY1
IC8qIEpTVlJQb3NlLmggKi87IH07Ci0JCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiBKU1ZS
U3RhZ2VQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRERFMUNGNjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFyYW1ldGVycy5o
ICovOyB9OworCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERF
MUNGODFGNTc0QzM5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyB9OworCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGQzFGNTc0Q0VFMDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9Owor
CQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwMjFGNTc0
RDAwMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyB9OworCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQw
ODFGNTc0RDBFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyB9OwogCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyREU3MDAyMjE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmgg
Ki87IH07CiAJCTJERjUxMkNFMUQ4NzNFNDcwMDFENjc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJERjUxMkNDMUQ4NzNFNDcwMDFENjc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQu
aCAqLzsgfTsKIAkJMkRGQTQ4OEYxREI1NDFEMDAwMzYyQjk5IC8qIEJ1ZmZlclNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGQTQ4OEUxREI1
NDFDMjAwMzYyQjk5IC8qIEJ1ZmZlclNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTUxLDYgKzIxNDksNyBAQAogCQk3MjRFRTU1MTFE
QzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5OUJDNjcyM0Q2QTUzMjAwQ0M2ODgz
IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2
QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4
MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgx
RSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAw
N0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5o
ICovOyB9OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQw
Q0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtMjU4MSw3ICsyNTgw
LDYgQEAKIAkJOEFGNEU1NUMxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUY0RTU1OTEx
REM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsgfTsKIAkJOEJEMzdBNjgy
MDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhCRDM3QTY3MjAxQkIzOUMwMDExNzM0QSAv
KiBSZWFkYWJsZVN0cmVhbUNodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOEU0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNw
b25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU0
Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5oICovOyB9OwotCQk4RTYy
MEU4MTIwRUU2MDI0MDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNjIwRTgwMjBFRTVGRkMw
MDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThFQzZDOTYzMjAxQTI1MTYwMEZCRkE1MyAv
KiBHYXBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDhFQzZDOTYxMjAxQTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RjY3NTYxQjEyODhCMTdCMDA0
N0FDQTMgLyogRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MDAxNzc0MTEy
RTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYy
IC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKQEAgLTY1NTksOSArNjU1Nyw2IEBA
CiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJl
Z2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5
MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZl
ckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NW
R0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwNSw2ICs5NjAwLDE2IEBACiAJCTcyN0FG
RUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E0
MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0UxNzMy
ODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNB
QjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3
IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYw
MDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3
NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEw
NTQ3LDggKzEwNTUyLDYgQEAKIAkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExlbmd0
aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEODFBRDQ0ODM1MDAzNjVBNTAg
LyogSlNGZXRjaFJlc3BvbnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRmV0Y2hSZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThF
NEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCThFNjIwRTdFMjBFRTVGRTIwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUlBsYXRmb3JtRGlz
cGxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIwRTgwMjBFRTVGRkMw
MDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU0V4ZWNT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4ZWNTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2NzgsNyArMTI2ODEsNiBAQAogCQlCMkEw
MTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJG
NkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250
RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDg0MSw5ICsyNDg0
MywxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRD
Ry5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRH
TENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQg
LyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8q
IEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FEMjNFMUU1NDUwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E4MjNFMUU1NDMw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMz
QUEyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8sCisJ
CQkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBFNjZGNTUg
LyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0
OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDkzNSw2ICsyNDk0MCw3IEBACiAJ
CQkJMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QzJGNEU3ODgxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8s
CiAJCQkJQzJGNEU3ODkxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5o
ICovLAorCQkJCTcyQkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCTRCN0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBD
dXN0b21QYWludEltYWdlLmNwcCAqLywKQEAgLTI1MDMyLDcgKzI1MDM4LDggQEAKIAkJCQk1NUEz
MzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0Qy
NTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkx
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYy
NUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MkJBQzNBNDIzRTE3MzI3
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBNTIzRTE3
MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3
Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3
MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMEND
QzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MDg5LDYgKzI1MDk2LDcgQEAKIAkJCQky
RDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2
RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENG
REVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQx
QyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFD
QTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcg
LyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVC
MDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTgyNCw3ICsyNTgzMiw2
IEBACiAJCQkJNjU2Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8sCiAJCQkJMUEy
RTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBF
RjZGMjYgLyogdGV4dCAqLywKLQkJCQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMgLyogdnIgKi8s
CiAJCQkJREZEQjkxMkNGOEU4OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICov
LAogCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAq
LywKIAkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICov
LApAQCAtMjg5MDgsNiArMjg5MTUsMTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcyMTQ0MzMyMjIz
RUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzMTIyM0VD
ODU0MDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTQxRjU3NEFF
OTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4MUY1NzRDMzkw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFGNTc0QzNFMDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3NENFRTAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2
NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyog
QWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJE
RCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI2Miw4ICszMDI4
MCw3IEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2
IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBp
biBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0
QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1h
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdl
Q29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTE2OCwxNyArMzExODUs
NiBAQAogCQkJCUJFOEVGMDREMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0NkU3OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNWaXNpYmls
aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc3NzlCRDk2MUYzMjI0NkEwMEMyMTQxNyAv
KiBKU1Zpc3VhbFZpZXdwb3J0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFNDFGNTc0QUU5
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0Y4MUY1
NzRDMzkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2
ZW50UmVhc29uLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUg
LyogSlNWUkV5ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1
IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFMzFGNTc0
QUU1MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERF
MUQwMjFGNTc0RDAwMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFMjA1MDgyMThBNDYwQzMwMDgwNjQ3RSAvKiBKU1ZU
VEN1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRjE4Q0ZCNUY0MDBDNjRCRUYg
LyogSlNWVFRSZWdpb25MaXN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4
Mjc3MjY2ZGRlYzc1MjA0MTIxMmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3
ZTg1OTZkNzU4ZjZmNWUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEp
IHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlv
bkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVm
ZmVyKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92
ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBp
ZiAoIWltYWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdl
RGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgYXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7
CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCks
IGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xl
YW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2
MTQ1ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVm
ZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYm
IG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXpl
ID0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIg
JiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6
ZSA9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNN
ZW1vcnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBt
ZW1vcnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IGQ0OTQ3MTIwODMyMzEwYzdj
MGQ3YmVmMWM4NzlkYTNmZmIyOTNmMGEuLmQyYjhkYjgxNGQzMTM0MTg2NDEyZmE1ZDhhZWFmN2Ey
MzgwYjEyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMTU4LDExICsyMTU4LDYgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1h
Z2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywg
c2gpOwotfQotCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNo
KSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNh
dXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7
CkBAIC0yMTk2LDggKzIxOTEsOCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVj
dC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKLSAg
ICBpZiAoIWJ5dGVBcnJheSkgeworICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFS
ZWN0KTsKKyAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNv
bGVNZXNzYWdlOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUg
dG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKICAg
ICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTnVtYmVyKGltYWdlRGF0YVJlY3Qud2lkdGgoKSk7
CkBAIC0yMjA4LDcgKzIyMDMsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICB9CiAKLSAgICByZXR1
cm4gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VEYXRhUmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0
IGR4LCBmbG9hdCBkeSkKQEAgLTIyMTcsMTEgKzIyMTIsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBm
bG9hdAogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9h
dCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQotewotICAgIHB1
dEltYWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4
LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLX0KLQotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBk
YXRhLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9h
dCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdp
ZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2Fu
dmFzQmFzZSgpLmJ1ZmZlcigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjM1LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGlj
X2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0
T2Zmc2V0KTsKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29y
ZGluYXRlU3lzdGVtID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1
ZmZlci0+bG9naWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBkZXN0
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmxvZ2ljYWxTaXplKCkp
KTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50
UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAgLTIyNTMsNyArMjI0Myw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
SW1hZ2VCdWZmZXI6OkNvCiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBk
YXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwg
ZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGlu
YXRlU3lzdGVtKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0
T2Zmc2V0KSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25l
KTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uZGIzZmFj
OGIwOGI3MDNiZDU0MWZjNzJmNGQzMWJkNTE3NzM1MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApA
QCAtMzcxLDkgKzM3MSw2IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZv
aWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2
b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOwotCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVk
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkx
NjE5ZGM2NDNmODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uZTYwY2RlMTRkMWE3YzZjMzA0Mjg5MDc1
MDdjNjEwYmU1NWRlMWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5jcHAKQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5z
aG90KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAg
ICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAg
ICBJbnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJj
ZVJlY3QsIEludFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdl
RGF0YSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1
ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYz
ZjA1NWFiOWE1ZC4uMTJhMmQ3NGZmYmU4ZmNjNzNmMDY4YmJmY2JhMDA1NDA3NzU3MTc3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Jl
ZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0Cmlu
ZGV4IGY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3MjI0MGNmMjAyNTgzMTkyYzQuLjZmYTRmZmUxNDYw
ZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2Y1NDVlM2E5MjBmZGM2Y2FkMjViNGI1NmU0YmI0NTRkNjE3YTE5NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlw
ZT4KK2NsYXNzIENvbnRleHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICBh
dXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENvbnRl
eHR1YWxJbWFnZUJ1ZmZlcj4obmV3IENvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tl
bmQpKSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQorICAgIHsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShz
aXplLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dHVhbEltYWdl
QnVmZmVyPihuZXcgQ29udGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUo
YmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQg
Zmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hD
b250ZXh0KCk7CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQorICAg
IEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQt
PmxvZ2ljYWxTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9u
U2NhbGUoKTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2JhY2tlbmQtPm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5
Q29zdCgpOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcik7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZp
b3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgfQor
CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAg
fQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29s
dXRpb24pOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+Y29udmVydFRv
THVtaW5hbmNlTWFzaygpOworICAgIH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29s
b3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250
ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVh
bGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9
IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8
Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgfQorCisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdldEltYWdlRGF0YShvdXRw
dXRGb3JtYXQsIHNyY1JlY3QpOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgIG1fYmFj
a2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQ
b2ludCk7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9ybUxheWVy
KCk7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBk
ZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1
cm4gbV9iYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7
CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhi
YzgwYzE0MTdhZWFjMmZhZi4uMGZlYjExMmYyZTUzYmQ0Yzg2YTA2NzMyMjc2ZmU3MmQwYTU5OGYz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ0ICsyOCw5MCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRp
YyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFt
cGVkTGVuZ3RoOwogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwot
CiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVy
YXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkp
IHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1
ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRl
eHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1
ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIGNvbnRleHQpOworICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEg
Y29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyOworCiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3Vj
Y2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNj
YWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4
dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBj
b3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1
cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwog
fQotI2VuZGlmCiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLQogICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWlnaHQoKSkgKiBmbG9vcmYoc2l6
ZS53aWR0aCgpKSA+IE1heENsYW1wZWRBcmVhOwogfQogCkBAIC0xMDUsOTEgKzE1MSwxMiBAQCBG
bG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5z
aXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRp
ZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi12b2lkIEltYWdlQnVmZmVyOjp0
cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBk
c3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBz
dXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAg
ICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAg
ICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
Y29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFy
Q29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5z
Zm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3Bh
Y2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBm
OwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29s
b3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91
bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJh
eTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2
aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lk
IEltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50
UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRv
IHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7
Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSAr
IGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAg
IHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBw
dXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50
KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsK
LSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252
ZXJ0VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wg
SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0lu
dFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxz
ZTsKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5z
Zm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9u
IHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6
ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewpAQCAtMjA2LDUwICsxNzMsMTkgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QK
ICAgICByZXR1cm4gYnVmZmVyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitO
YXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIGlmIChzaXplLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBh
dXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxl
KHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElS
RUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwg
JmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJs
ZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRl
eHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8g
cmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJ
bnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25z
dAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJy
ZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3
aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFz
aW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6
ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVz
ZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBp
bWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggN2I3NzJhMmYy
ZDhmNmU3NTc3ZWFmYzZkYjIyOTMwNmI3Y2ZlZGY5Yi4uZTVjMDNlNGRmODY1OWM0NjNlMWMzZDI2
MDQxNjcwMjMzNjU3Njk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywxNjAgKzI3LDc2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNp
bmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJ
bWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2lu
ZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8v
IEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBE
b250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNv
cHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAg
WWVzLAotfTsKLQogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJs
aWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWls
dXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdp
bmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2lu
ZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVy
IGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZm
ZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
b3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8v
IENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRo
IHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVu
IGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwor
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1
ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAg
IHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0
YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYg
c2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXpl
Jik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBG
bG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwogCi0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNr
aW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRp
YmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
KyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVs
dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
OworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVh
bCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdCA9IDA7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0g
eyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9
OworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0
ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29s
b3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJh
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVy
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0pOwotICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwog
Ci0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxs
b3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAg
IHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0Nv
bnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
IAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0
OwotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKIAotI2lmICFVU0UoQ0cpCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0j
ZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQg
aW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQg
dGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JB
IGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2Jq
ZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJl
IHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3Ig
ZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFt
cGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGlu
Zyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRT
aXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUg
Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3Rh
dGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOwog
Ci1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQg
YmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxl
cgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUlt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0
KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25z
dDsKLSNlbmRpZgorcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogICAg
IAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1
bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQot
ICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJ
bWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3Jh
ZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLSAgICBmcmll
bmQgY2xhc3MgQml0bWFwSW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1f
ZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0g
ICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdp
bGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8g
c28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
LCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNU
MkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNv
bHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjNhYTVkYTYyNjI1M2I1MWQ5
MmZlZDgxYWJjYWJkMjc0M2RlZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRl
ICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNhbFNpemUobG9n
aWNhbFNpemUpCisgICAgLCBtX2JhY2tlbmRTaXplKGJhY2tlbmRTaXplKQorICAgICwgbV9yZXNv
bHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCit7Cit9CisKK0ludFNpemUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5k
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAg
ICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53
aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBp
ZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50
U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9
IEludFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
KGJhY2tlbmRTaXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3Zl
cmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tl
bmRTaXplLmhlaWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7
Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdl
KFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNv
cHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAg
dW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCArIDIpOworCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICog
MC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQ
aXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpKTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdAorewor
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2Fm
ZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0
aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisg
ICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpOwor
CisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29s
b3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2Fs
U2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVp
bnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107Cisg
ICAgaWYgKCFhbHBoYSkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dFBpeGVsKVswXSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29s
b3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJf
dCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAg
cGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhl
bFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0g
PSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFs
cGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAg
ICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNy
Y1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAg
ICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAg
ZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0
UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhl
bCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsy
XSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUp
IC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhh
OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29w
eVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICBpZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlw
bGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0g
PSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsy
XSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVs
WzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBs
YXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xv
ckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Vu
YWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9yRm9ybWF0IGRlc3RDb2xv
ckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRo
KCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAg
ICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9y
Rm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93
OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXpl
JiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3Jt
YXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2Vs
ZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwg
c3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVz
dEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
eworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVk
VG9VbnByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8
Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1Jl
Y3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKworICAgIGF1dG8gaW1h
Z2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdFNjYWxlZC5zaXplKCkpOworICAgIGlm
ICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkID0gIGludGVyc2VjdGlvbihiYWNrZW5k
UmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2lu
dDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2Nh
bGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsK
KworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFko
LXNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dFNjYWxlZC5zaXplKCkpCisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOwor
CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVk
LnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNv
cHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAg
ICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRl
c3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSkKK3sKKyAg
ICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsK
KyAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0
UG9pbnQpOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAg
ICAgZGVzdFJlY3Quc2V0WChkZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisKKyAg
ICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKGRlc3RS
ZWN0LnkoKSAtIHNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIGRlc3RSZWN0LmludGVyc2VjdChi
YWNrZW5kUmVjdCgpKTsKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRTaXplKGRlc3RSZWN0LnNpemUo
KSk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAg
IHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwor
ICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0
Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisK
KyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6
UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhM2I2M2NkZjcxNzhhYmIxYjVhMzg4MjljNTVlMTI4
ZWRiN2EyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5j
bHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKK2NsYXNzIEhvc3RXaW5k
b3c7CitjbGFzcyBJbWFnZTsKK2NsYXNzIEltYWdlRGF0YTsKKworZW51bSBCYWNraW5nU3RvcmVD
b3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3
cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vi
c2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVz
ZXJ2ZVJlc29sdXRpb24gOiB1aW50OF90IHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVt
IGNsYXNzIENvbG9yRm9ybWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9Owor
CitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkg
eyB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
U2l6ZTsgfQorICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmRTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1
YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS5h
cmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNv
c3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0ID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9O
YXRpdmVJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkgPSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZl
ckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNp
emUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJHQkE7IH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgVCB0b0JhY2tlbmRDb29yZGluYXRlcyhUIHQpIGNvbnN0CisgICAgewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxULCBJbnRQb2ludD46OnZhbHVlIHx8
IHN0ZDo6aXNfc2FtZTxULCBJbnRTaXplPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFJl
Y3Q+Ojp2YWx1ZSk7CisgICAgICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAg
ICAgICAgdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHJldHVybiB0OworICAg
IH0KKworICAgIEludFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIG1fbG9naWNhbFNpemUpOyB9OworICAgIEludFJlY3QgYmFja2VuZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja2VuZFNp
emUpOyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCog
ZGF0YSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSk7CisK
KyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2JhY2tlbmRTaXplOwor
ICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQyYTVjODg1ZTVjMTAyNDQ3YzczYTEyZjFkNmZiMzJiNWQzOTkwMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwOWJmMmMwZGFmYTIzYTM4MTMx
NzJjMmJiYTg3NTIzNWFiYTM1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNU
MkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShD
QUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgor
I2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRm
b3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBV
U0UoQ0FJUk8pCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQg
PSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsKKyNlbmRpZgorCisjaWYgSEFW
RShJT1NVUkZBQ0UpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOworI2Vsc2UK
K3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
ID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJh
Y2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYyYjIz
NDQ1MGQwMGY0MWY5MzM2NzRkMTguLjNjZmNlNzI5NTQyMDlkMzAzYTlmNzI0MzJmYmI0YjYzOWQ0
YjQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00NDksNyArNDUwLDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIEludFNpemUgYnVmZmVyU2l6
ZSA9IGxheWVySW1hZ2UuaW50ZXJuYWxTaXplKCk7CisgICAgSW50U2l6ZSBidWZmZXJTaXplID0g
bGF5ZXJJbWFnZS5iYWNrZW5kU2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IGxheWVyU2l6
ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1hZ2VCdWZmZXIoKSBo
YXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAgICAgIC8vIGJ1dCB3
ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhlIGZpbGxlZCBwYXJ0
IGZpcnN0LgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93
QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0
ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJsdXJMYXll
ckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRo
KCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJl
Y3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsK
KyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXpl
KCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJS
ZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjVjNjQ4MmI2
ZTFkM2YyOGFjNDc5ZWE3YzVkMzFiMWQzMzc5MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9V
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIK
LQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgi
Ci0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8
Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgot
I2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5j
bHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5j
bHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0
YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAg
OiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1
cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAg
aWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lm
IFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRM
YXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVh
dGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgot
ICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQot
ewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgp
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlv
dXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRh
OjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZv
cm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0
KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1
cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9V
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAs
IEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNl
KCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9f
c2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUp
OwotfQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlv
dXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29t
cG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0g
ICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAg
cHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNo
b3VsZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQot
ICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQot
ICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRo
ZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBj
YXNlcwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVu
ZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQK
LSAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0g
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRP
Ul9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAg
IGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2Uo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1
cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsK
LSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsK
LSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpj
cmVhdGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwot
ICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5l
cmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJ
IGZvciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgot
ICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFD
S19BTElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyog
bGV2ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyog
Ym9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2Rl
dmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFk
LWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJz
LgotICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwot
Ci0gICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3Rl
eHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNl
LmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNh
aXJvU3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29w
eSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdC
MzIsCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1
dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9j
b250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJl
dHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19
Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRv
IHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0g
ICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShzdXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBt
X2RhdGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nl
c3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1f
bG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2Fs
ZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVy
cm9yLgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAq
IHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0
aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0
b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNj
YWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVp
Z2h0KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAg
ICAgIGlmICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1f
ZGF0YS5tX3JlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyAvLyBJ
ZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0g
ICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3Rh
dGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGlu
dCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJH
QjMyLCBtX3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAg
ICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRW
YWx1ZShzdXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRh
Lm1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9B
UkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAg
ICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNf
c3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRh
dGEpOyB9KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsg
IC8vIGNyZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZh
aWwuCi0KLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCkpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAg
IG1fZGF0YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkp
OwotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkg
PSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2Nv
bnRleHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VT
dXJmYWNlIGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChj
b3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
KTsKLQotICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZh
Y2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkp
IHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAg
ICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAg
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVz
dGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGlu
YXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpD
YWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAg
IENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5n
ZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKLXsKLSAg
ICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVk
IGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiBy
b3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lkdGgoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAgICAgICAgICAgQ29sb3Ig
cGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci0gICAgICAg
ICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVl
bigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENv
bG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxDb2xvci5h
bHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9y
KHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhaXJvX3N1cmZhY2VfbWFya19k
aXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6
ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKLX0KLQotUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90eXBlX3Qgc3Vy
ZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpOwotCi0gICAgLy8gSWYg
d2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUgdW5kZXJs
eWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lzZSB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3VyZmFj
ZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlwZSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0Up
Ci0gICAgICAgIHJldHVybiBzdXJmYWNlOwotICAgIAotICAgIHJlY3Quc2V0WCgwKTsKLSAgICBy
ZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwot
fQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBwcmVtdWx0aXBsaWVkPgotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBUaGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJl
Y3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJl
YSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdo
dCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAy
IGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueCgp
LCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8v
IENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHkgPSAw
OwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0LmhlaWdodCgpLCBlbmR5KSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdodCgpKQot
ICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRl
c3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLQotICAgIGlmIChl
bmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIGlu
dCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHJlY3Qu
eSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAg
IGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLQotICAgIGlm
IChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0g
ICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKLQotICAgIC8vIE5vdGhpbmcgd2lsbCBi
ZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYgKG51bUNvbHVtbnMg
PD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBU
aGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhl
IGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFn
ZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRq
dXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZh
Y2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIHJlc29sdXRpb25TY2FsZSwgcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBvcmlnaW55
ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IGRhdGEubV9zdXJmYWNl
LmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9u
ZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgSW50UmVjdCBsb2dpY2FsQXJl
YSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVjdCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBjb3B5UmVjdEZyb21PbmVT
dXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVN1cmZhY2UuZ2V0KCks
IEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwgLWxvZ2ljYWxBcmVhLnkoKSksIEludFJlY3QoSW50
UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgpKSwgSW50U2l6ZSgpKTsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFn
ZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQtPmRh
dGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGlt
YWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJl
Y3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9j
YXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsg
eCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0
aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAocHJl
bXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBn
cmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBi
bHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBs
b2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAg
ICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUs
IEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVl
ID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRp
b25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2
YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJy
YXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVT
eXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3Qg
PSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5
RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFn
ZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3Rv
cmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5n
U3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAq
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1
cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJh
Y2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJy
YXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNr
aW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0KHNv
dXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQ
b2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNhbFNvdXJj
ZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxVbml0
KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAg
QVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzY2FsZWRT
b3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJj
ZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRT
b3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERlc3R4ID0gbG9naWNhbERlc3RQb2ludC54
KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJUKGRlc3R4ID49IDApOwotICAg
IEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueCA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAg
ICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgo
KTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxT
b3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5keCA8PSBtX3NpemUud2lkdGgoKSk7Ci0K
LSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKLSAgICBpbnQgbG9naWNhbE51bUNv
bHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0eDsKLQotICAgIGludCBvcmlnaW55ID0g
c2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gc2NhbGVkRGVzdFBvaW50Lnko
KSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBsb2dpY2FsRGVzdHkgPSBsb2dpY2Fs
RGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkg
Pj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQo
b3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1h
eFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3Vy
Y2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVuZHkgPSBsb2dpY2FsRGVzdFBvaW50Lnko
KSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NFUlQoZW5keSA8PSBtX3NpemUu
aGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwotICAgIGludCBsb2dp
Y2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNhbERlc3R5OwotCi0gICAgLy8gVGhlIHNp
emUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lz
dGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJp
dmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0
KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdCht
X2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERl
dmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVjdC54KCk7Ci0gICAgZGVzdHkgPSBpbWFn
ZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQ
ZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwotICAgIGludCBzdHJpZGUgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5
dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dz
OyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVu
c2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7
Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdC
RnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVy
IHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNS
b3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCAr
IDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0gICAgICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAy
NCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBz
dXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAg
IGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBs
b2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1S
b3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkg
ewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fu
b3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXpl
KCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50
U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNh
bERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpKTsKLSAgICB9Ci19Ci0KLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZl
Y3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwot
ICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7
Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2Rl
ZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICBy
ZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUp
KTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1l
VHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAm
JiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxv
YXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1h
eSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0
IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3Vy
ZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIp
LmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9z
aXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3Jt
TGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEu
bV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICBy
ZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRh
Lm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4o
Jm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQot
ewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZl
YXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEu
Iik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0g
R0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3Jl
ZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygp
KTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87
Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3Rl
eHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0
aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9y
bWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJp
bmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFs
cGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0MDg5NmJh
YWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1
ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBVU0UoQ0FJ
Uk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNl
IHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29u
dGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAo
YXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/
IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdO
YXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBX
ZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ug
c3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3Jj
Q29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
b25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAg
aWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNw
YWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JH
QikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAg
ICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Cisg
ICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xv
ciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAg
ICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JM
VVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikg
eworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJn
YkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisK
K1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5
cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNl
NjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0
RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJh
c2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdl
ID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwor
ICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVkODhkNWQ3
MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIg
PHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlS
TykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVy
QmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0
Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisK
K3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFj
a2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42MmFkNWU5ZTdjZTdlODcxZDFlMDA1ZDNkZjc2ODRjYjE5N2VkNmE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJF
UE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+
CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJT
dXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxj
dWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5k
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogY29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhl
cmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHByZS1l
eGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUp
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworCisg
ICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIGJh
Y2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCogZGV2
aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5lc3Mg
aXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBjYWly
b19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1dG8g
c3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRl
dmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgYmFja2VuZFNpemUud2lk
dGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4obmV3IEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51
bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UsIHVpbnQzMl90
IHRleHR1cmUpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3Vy
ZmFjZSkpCisgICAgLCBtX3RleHR1cmUodGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lh
OjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQ
cm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNl
bmRpZgorI2VuZGlmCit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVD
bGllbnQoKTsKKyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2Nv
bXBvc2l0b3JUZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAg
ICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKwor
UGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lm
IFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNlCisg
ICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworYm9vbCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBk
ZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29s
dXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVt
b3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYg
KHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghbV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBi
aW5kVGV4dHVyZVRhcmdldDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVU
YXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVz
aChtX3N1cmZhY2UuZ2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29u
dGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5
OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEs
ICZmYm8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAg
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmlu
ZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2Uy
RCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX2JhY2tlbmRTaXplLndpZHRoKCks
IG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1
cmVUYXJnZXQsIDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsK
KyAgICBnbEZsdXNoKCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkK
K3sKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9y
Q29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUp
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1fYmFja2VuZFNpemUud2lk
dGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMCk7CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3Vy
ZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09O
VEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9iYWNrZW5kU2l6ZS53aWR0
aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNhaXJv
X3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05F
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBH
TENvbnRleHQ6OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewor
ICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSYgcHJveHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBo
b2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZl
cihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBH
TF9SR0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94
eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94
eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAg
Ly8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhl
cmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8v
IHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhl
IHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRv
IHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9j
b21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwor
ICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3RleHR1cmUpOworCisgICAg
Ly8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0
byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIGNhaXJvX3N1cmZhY2Vf
Zmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4
dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kLCBtX2JhY2tlbmRTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZjBmYWU3ZTJjMzQ5ZTIxNjQx
OTg0NTVkNDE4YzNjYWI2NzQ3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2MuaD4KKworI2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUgIk5pY29zaWFD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2Vsc2UKKyNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQorICAgIDogcHVibGlj
IE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNlbHNlCisg
ICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJsaWMgSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKworICAgIH5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOwor
CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworICAgIHZv
aWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2lmICFVU0UoTklDT1NJQSkKKyAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7IH0KKyNlbmRp
ZgorI2Vsc2UKKyAgICB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lm
IFVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3Np
YUxheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmU7
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBS
ZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9y
VGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2E2ODA5MzFkODk1ODFi
M2JmYzFiYjQ2NWJkYWJlNzg5MDk1MzAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBz
dGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBJbnRT
aXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChD
QUlST19GT1JNQVRfQVJHQjMyLCBiYWNrZW5kU2l6ZS53aWR0aCgpKTsKKyAgICB2b2lkKiBzdXJm
YWNlRGF0YTsKKyAgICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0
KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBD
QUlST19GT1JNQVRfQVJHQjMyLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWln
aHQoKSwgc3RyaWRlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKHN1cmZhY2Uu
Z2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgewor
ICAgICAgICBmYXN0RnJlZShkYXRhKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxs
cHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAg
IDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQoreworICAg
IEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNy
YyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKTsKKyAgICBp
bnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQo
KSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyArK3kp
IHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVk
Kj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1f
bG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4o
KV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsK
KyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29s
b3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0
YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9n
aWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjAwMzc5NGZkYWE5NDczMmI2MTU1N2M0MWU4NDQy
MzFhOThhNzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFu
c2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFi
bGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDQ5OGZiNDA0Mjc4ZGIyOGE4YjQxYmNlZjAzNjE1N2FlYzI2NjNkMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIg
PHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShD
QUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3Vy
ZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5k
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1v
dmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFj
ZS5nZXQoKSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+
IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxh
dGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5
KG1fcGxhdGZvcm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29u
dGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRl
c1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0
cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2Ug
Q29weUJhY2tpbmdTdG9yZTogeworICAgICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1
dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAg
IGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAw
KTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5
OworICAgIH0KKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBtX3N1cmZhY2U7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUo
bV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3Vy
ZmFjZV9nZXRfY29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1Jf
QUxQSEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAg
IGVsc2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1
cm4gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAg
IGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19z
dXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdl
RGF0YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAg
ICAgIHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhl
bHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAg
ICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2Uu
Z2V0KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5h
dGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKGRlc3RQb2ludCk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3Rh
bmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxl
ZC55KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk0OWZm
MzczNzQ4ODI0NTUxZTNlNGVmZTVhMmI0ZDY2OTNmMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVy
cmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYmKTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
bXV0YWJsZSBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1D
b250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3
NTY0YTJlMzlmNzY5YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm9faAotI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8p
Ci0KLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNh
aXJvLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBs
YXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJbnRTaXplOwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQot
Y2xhc3MgSW1hZ2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
LSNpZiBVU0UoTklDT1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIK
LSNlbmRpZgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IElu
dFNpemUmLCBSZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsK
LQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNv
bnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVk
ZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lm
TmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZm
ZXIoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7
Ci0gICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4g
bV9jb21wb3NpdG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6
Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0j
ZWxzZQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
JiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQot
I2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0OTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIK
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVU
SVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2Ev
SU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVz
IGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBV
U0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVG
SU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBj
YXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBD
b250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZF
KElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBj
b2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwot
ICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2Ug
PSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAg
IH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xv
clNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigp
OwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZl
cihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRy
LCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdy
YXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAv
IHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNw
YWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUo
c2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBz
dWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBm
bG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7
Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEg
bG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVk
SGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlm
IChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENo
ZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNl
bmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRl
c1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJm
bG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1
cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6
ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRl
cmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAg
IG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2Vy
Qm91bmRzID0gRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkp
OwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAg
aWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3Vy
ZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYg
KGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAg
ICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0g
ZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0
ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAg
ICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdl
dCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYg
MykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0j
ZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51
bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAg
ICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25z
dF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxp
dmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBt
X2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkp
OwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4
dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkp
OwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhl
aWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRp
b25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZm
ZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNw
YWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25z
dAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJv
bSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEg
d2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVy
bmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAg
IC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFj
ZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VC
dWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxC
eXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAg
aWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFs
Qnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5h
bFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25s
eSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0g
ICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJl
Y2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0
YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsK
LSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVy
Ojpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJm
YWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRh
LmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17
Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQot
c3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGlt
YWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91
bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNp
emVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRo
KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBS
ZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWlu
UHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2Ug
PSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXpl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCks
IDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2Rl
KGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlw
VG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2lj
YWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2lj
YWxTaXplOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQo
KSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShj
b250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdl
KSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1f
cmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZp
b3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5n
SWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCksIGludGVybmFsU2l6ZSgpLCBt
X3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewot
ICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwot
ICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7
Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5r
SW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgbG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJm
YWNlKQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElP
U3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0j
ZWxzZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZm
ZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QK
LXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikg
ewotICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJS
b3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9k
YXRhLmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToK
LSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3Jl
YXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1
ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFn
ZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
ID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6
Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0
LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdl
KGltYWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBvcHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlm
ICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0
b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4K
LSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAg
IGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAg
ICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAg
ICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VG
b3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAg
ICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhl
bEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5n
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
ID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9k
YXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVj
dCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRT
aXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3Vy
Y2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6
ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEo
c291cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3Qs
IGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVk
IGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0
ZUltYWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlm
IChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZp
bGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBp
ZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1
dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAg
ICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEu
Z2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlG
cm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAg
ICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3Qo
SW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWRE
YXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFT
aXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7
Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEt
PmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+
ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQo
KSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7
Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0
ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNv
bnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgp
LCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJ
blVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRo
KCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdl
LmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAg
IHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFj
ZDIzNzU4MWY5NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lu
Y2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJl
Zj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChDR0Nv
bnRleHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAgICAg
IHJldHVybiBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAgCisg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0
KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbmRpZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRl
eHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250
ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0
KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYgKGlt
YWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYmFj
a2VuZFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJh
Y2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBp
bWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAg
aWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRT
aXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBp
bWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAg
IE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwg
bV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05h
dGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNj
YWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBD
b3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0
LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUg
OiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisg
ICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
QVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhh
dmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24g
dG9wIG9mIGJsYWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7Cisg
ICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgo
KTsKKyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6
ZSgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4
ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3RlZFBp
eGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRh
UHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhl
bEFycmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9u
cy53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2Uu
Z2V0KCksIGJhY2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgp
LCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNv
cHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7
CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdl
LmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQor
ICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJu
ICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdklt
YWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90
KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdl
QnVmZmVyOworCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBp
eGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRp
Y19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVy
LnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOwor
ICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1h
Z2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAor
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhh
Rm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3Jt
YXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3Qg
bWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19B
UkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0g
Q29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9y
Rm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4K
KyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAg
dkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1h
Z2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWlu
dDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNy
Y0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0
Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhl
bHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZl
ciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsK
KyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJv
dywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3Jj
QWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENv
bG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NhMzk4
MDM0ZjI1YTMzNDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1
YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92
ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1
cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUlt
YWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsK
KyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MTRhNmU3
YWM4YjE1N2QzNDk3Y2I5NTY4ZDI3M2RhZjY4NzNmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1h
cEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJp
dG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBj
YWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNr
ZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCog
ZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgp
OworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1Bl
clJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXpl
X3QgbnVtQnl0ZXMgPSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBj
Z0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6
ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JT
cGFjZSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdl
RGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZh
c3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwg
bnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRh
LCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xv
clNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCks
IG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykK
K3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNl
KSwgaG9zdFdpbmRvdyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRh
UHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAg
ICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQ
cm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShj
b250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlk
ZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitH
cmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNh
c2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNl
IERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKAorICAgICAgICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhl
aWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JT
cGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0
KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0
YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSht
X2RhdGEpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNS
ZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI2YWY2NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFj
ZVJlZiwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEs
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0
IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0
OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dE
YXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAi
SU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMy
IGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXpl
ZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5
QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXIm
IGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsK
LQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3Vy
ZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZv
aWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3Qg
dkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VS
VChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwt
PlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRl
Q2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRh
dGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXpl
X3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQo
aW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMu
cm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3Qu
aGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVz
dC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91
dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgp
OwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRh
dGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5z
ZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwg
aGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsK
LSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFt
cGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAg
dWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsK
LSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJl
Y3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgu
dW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lu
eCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3
ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyAr
PSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0g
MDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBz
aXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUu
d2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4g
d2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgp
OwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsK
LSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQot
ICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQo
KSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9
IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8
IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAot
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhf
dCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAg
ICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJS
b3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRl
c3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAo
b3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQu
dW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3Jk
ZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNh
ZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVu
c2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJv
dygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBk
ZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAg
ICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJH
UkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAw
LCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBp
ZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNy
Y1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVu
c2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4
ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNv
dXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9
IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkg
PCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6
ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0Lndp
ZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgp
IDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJl
Y3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAg
IAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgp
OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkg
KiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYg
KCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRh
KSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAg
ICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0g
Y29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0g
ZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQg
YmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVy
IGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAg
ICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3Jj
Um93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFj
ZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRl
c3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dz
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndp
ZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMs
IGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXgg
KyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUp
Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNs
dWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlw
ZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1
aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9T
dXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdT
dG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVy
Um93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Ig
c29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAg
UmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJ
bmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29u
dGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8g
T25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25z
dDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZGY3Y2UxOGU0MTEwOTg5NzRlNTczNDM0MDY1Y2UxOThi
OTc3OTJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNp
ZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5j
bHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxj
dWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSkKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJh
Y2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUg
bWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUu
d2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNp
emU7Cit9CisKK1JldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0
VHlwZUlPU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9y
U3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0g
SU9TdXJmYWNlOjpjcmVhdGUoYmFja2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2Up
OworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNv
bnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkp
CisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXpl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAg
IAorICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAx
LCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5k
b3cpOworfQorCisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NF
UlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0
JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRG
bHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
dXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNv
c3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1Bl
clJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30K
KworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JG
b3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJ
bWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRv
SW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisg
ICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5k
U2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAor
eworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIElt
YWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsK
K30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJm
YWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2Rl
OjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0
Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVk
IGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250
ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmYzBmMDQzZjA1NWE3N2RjZWY2NjNlZTRmYzdi
ZjY1Yjk2ZjY4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVi
bGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNw
YWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRl
eHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOwor
Citwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsK
KworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFj
ZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwCmluZGV4IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1
NjJlYjMuLjJhYTgyMzMyZGUyZDExMWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRh
dGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAg
ICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JU
ZXN0aW5nOwogCi0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKTsKLSAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVu
Y2xhbXBlZEFyZWEoKSAqIDQpOworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZElt
YWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5k
U2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3Vt
ZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2
ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAi
SU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdl
QnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNj
cmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwx
MyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRT
dXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsK
LX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJm
YWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5l
Qnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4
IGZkOGU1ZThlMmU5NGU3MDU0ODk2ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUzM2NhNWY2MTMx
ZTUyZTFlOWQ0NWQ3YzAyMTYzZGU0YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
CkBAIC0xMTEsNyArMTExLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZl
Y3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBp
eGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBp
bWFnZVJlc3VsdCA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8q
IGRzdFBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxs
cHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1
Li45NTE4MDBlZGE5MTc0MTFjODhiOWE0YmU1NTE0Y2YxZjY4Yzc4Nzk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMyAr
Mjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0byBpbWFn
ZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRz
KG1fdmFsdWVzKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Cisg
ICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOwogCisg
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAg
ICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIElu
dFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJlY3QpOwogfQogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JN
YXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggZmEw
NDEzYzAwZGE0M2FjNWRmNTVlNWUwMWY2OTQ0YWI5ZWRhNzQ4My4uOTc4YzU1YTY3YjhkZTcyMGU5
ZmE3OWJkOGNjMzRkNzQ1MjhhMDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
CkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJh
eS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1
bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBpeGVsQXJyYXkp
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBhMTllYTA1Mzc1ODE5Y2Vj
ZGFjMjVkNWQ5NjNkNTQ0ZGQ0ZDFhOTY5Li4yNjU0NDBmNDM5NDJhZmE2YWEyOThkYWY0ZWMwMmVl
M2Q5NWNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDcgKzIyOSw4IEBA
IHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJ
VEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0
UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
ICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0
YSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA2MmMyZjgzMzY1MzU4Njg0
NGQ5ZjM5MGVlYTVlZGMxMDhlMzBhMzg4Li5hNmUzZjRiYmFhMjQ0OTdmOTI2MzQ2NTY5NzVmZmI4
N2RjN2FiOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcxLDEy
ICszNzEsMTMgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiByZXN1bHRJbWFnZTsKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlOwog
ICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkK
KyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0
YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTM5NSw3ICszOTYsNyBAQCB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAg
ICAgKnJlc3VsdEltYWdlLAorICAgICAgICAqZHN0UGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRT
aXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFz
ICogMjU1LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwZTk0NGRmMDBhOTVjYzA2
ZDI2YWE0MmYxNjllZTZhNDZmNWEyNzgyLi41MzczNTUwNDUzZTQ5ODYyYzBlNDE2ZjJkY2MyNTZi
NDcwYzkxOTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhD
bGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0LDcgKzk0LDggQEAg
dm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBBU1NF
UlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1f
eUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgVWludDhDbGFtcGVk
QXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThl
OGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0
ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0Nv
bG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIg
d291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJl
YShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3Jj
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRv
d0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0
YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwot
Ci0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0Fy
ZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
KTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29u
dGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0
YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVz
dWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0
Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA0
OWJhODQxNzNjMmQxYTk5NTRlNTYxMzkwY2UwM2MyNGJjOTBjODFiLi5kN2VkOWIyNDQ5MDE3OGZm
YmZiZWIxY2Q0MmJlYTVlOGZmMTU5ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVS
QVRFKQpAQCAtNTIyLDE0ICs1MjMsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdWx0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0UGl4ZWxBcnJheSkKKyAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkg
OiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1
bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAgICBpZiAo
IW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CkBAIC01NDMsNyArNTQ1LDcgQEAg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXRt
cEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1BcHBseSgqcmVzdWx0
UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXpl
LmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoKmRzdFBpeGVsQXJyYXks
ICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwg
cGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwYmE1MWI3NjEyZjJjYjJmNjlmNGY2MDIxY2VmY2JlM2My
ZTc0MmQzLi42ZGI4N2ZkNTQ1YThmMWRkYTdkOWI1ODhhMjU0MDY1NWE1NzhmYjI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3
Myw3ICs0NzQsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFt
cGVkQXJyYXkqIHJlc3V0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJ
bWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMjUxNzgxY2E1YWE1MWY3ODAyN2Fk
NTA4ZGY5YWM2MTBjNjc5NGZhNS4uY2JkNDI0MTk3NjU3MGE4NzM5NDUyMDBhOTEzZTBlOWU2NTlh
YjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAi
Q29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjM0LDcgKzIzNCw4IEBAIHZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQ
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsK
ICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCmluZGV4IDgyMjc4NzlmNTc4NmRlNjM1MDU0MzZmMWI0ODAxN2MwYWRkMjhlZjYuLjE5ODBh
YjkzNGU1Njg3MmI2MjY0MjFmMDIyMTJlODJmOTk4YTIxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgpAQCAtMzk1LDcgKzM5NSw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVyYnVsZW5j
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4
ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwog
ICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAK
aW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uYTllOGZjYTJj
NWQxZGNiYjY2N2E1YjdjYzBkNGY3NzAyNDg0ZjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAt
MjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykK
QEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdl
QXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAgIHVpbnQ4X3Qq
IHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKICAgICBpbnQgcGl4ZWxBcnJheUxlbmd0
aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3Rp
bmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVB
cnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUo
KSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1MiArNDM4LDUyIEBA
IHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAg
IAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIg
PDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
KTsKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBX
ZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAg
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5h
cmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICgh
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXpl
KTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCks
IGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1hZ2VC
eXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVj
dCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
QVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0
ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBF
eGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAi
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGlt
YWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
IH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXpl
IGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAg
ICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAg
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAg
ICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlu
cHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29weVBy
ZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQot
ICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKQEAgLTQ5NywxMyArNDk3LDEwIEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICBpZiAoIW1faW1hZ2VC
dWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMs
ICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0
ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MTUsMTEgKzUxMiwxMSBAQCBVaW50OENsYW1wZWRBcnJh
eSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50
U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHJl
c3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExP
RyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUzMSw3ICs1MjgsNyBAQCBVaW50OENs
YW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwog
ICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIuLmFmNDYz
ZWZlYjAxMzZhYzYxOGUyOTljZDA4ZDQ0ODM4ZDBlZjU2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
NDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBG
aWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKIAogdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIApA
QCAtMTUzLDggKzE1NCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlVW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAK
ICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJl
Y3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0g
YW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xODIsOCArMTgzLDgg
QEAgcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Cisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3Qg
bV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDFlMDM1YTdlZWYyODAzY2Y2NTk5MmQwNDljOWY4YjU1
NmJjZWNhZWMuLjkxOGUxOGFmNWUxMmZmOTA0OTQ4M2E3OGVmMWJhODJkNzM1OGMyYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMTg4LDcg
KzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCks
IGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShP
UEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMWIzOTQxNWViYjIx
YmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNF
KERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkRpcmVjdDJE
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFdu
ZERDLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFN3aXp6
bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1w
bGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBzd2l6emxl
QW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQs
IHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJp
ZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBy
b3dDb3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10
d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAg
Ly8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0g
ICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50OF90KiBkZXN0
Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4
ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQb3Np
dGlvbiA9IHggKiA0OwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1BpeGVsID0gc3Jj
Um93ICsgeDsKLQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgKFApUkdC
QSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQQkdSQSB0byBiZSBj
b21wYXRpYmxlLgotICAgICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNyY1BpeGVsICYgMHhG
RjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1aW50MzJfdCByZWQgPSAoKnNyY1BpeGVsICYg
MHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1aW50MzJfdCBncmVlbiA9ICgqc3JjUGl4
ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdWludDMyX3QgYmx1ZSA9ICgqc3Jj
UGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQg
PSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAq
IDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVz
dFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBv
c2l0aW9uICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsg
Ml0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAzXSA9IGFscGhh
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVm
ZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVy
U2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikK
LXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVj
dChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRh
aW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBz
cmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRl
c3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNy
Y1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVk
IGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0
aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBk
ZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cg
PSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBz
b3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93
ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4
X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsK
LSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1JvdywgYnl0ZXNQZXJSb3cpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFs
cmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c2lyZWRGb3JtYXQ+Ci1ib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRp
cGxpY2F0aW9uKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJj
ZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1
ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRp
b24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKElu
dFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5j
b250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWdu
ZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25l
ZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25l
ZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNp
Z25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBj
b25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5s
b2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRl
ICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVy
Um93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5
IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1
aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZz
ZXQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcG9zID0geCAqIDQ7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0g
c3JjUm93W3ggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJd
OwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dbeCArIDNdOwotCi0gICAgICAg
ICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYm
IGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdWludDMyX3QqIHBpeGVsID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKLSAgICAgICAgICAgICpw
aXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZm
ZXJEYXRhOjpjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICBhdXRvIHJhd0JpdG1hcFNpemUg
PSBiaXRtYXAtPkdldFNpemUoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0
b3JlU2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKLQotICAgIEludFJlY3Qgc2Nh
bGVkUmVjdCA9IHJlY3Q7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAg
ICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgYmFja2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2Nh
bGVkUmVjdCkpIHsKLSAgICAgICAgLy8gUmVxdWVzdGVkIHJlY3QgaXMgb3V0c2lkZSB0aGUgYnVm
ZmVyLiBSZXR1cm4gemVyby1maWxsZWQgYnVmZmVyLgotICAgICAgICByZXN1bHQtPnplcm9GaWxs
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBjb3B5UmVjdEZy
b21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCks
IHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Ci19Ci0KLWJvb2wgSW1h
Z2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29u
c3QKLXsKLSAgICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVh
PFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsK
LSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4g
ZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwotfQotCi0vLyBTd2l6emxl
IHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0Pgotdm9pZCBpblBsYWNlU3dp
enpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVf
dCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLSAgICBhdXRvKiBwaXhlbERhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgcGl4ZWwgPSAqcGl4
ZWxEYXRhOwotICAgICAgICBzaXplX3QgYnl0ZVBvc2l0aW9uID0gaSAqIDQ7Ci0KLSAgICAgICAg
dWludDMyX3QgYWxwaGEgPSAocGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdWlu
dDMyX3QgcmVkID0gKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90
IGdyZWVuID0gKHBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgdWludDMyX3QgYmx1
ZSA9IChwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgIC8vIChQKVJHQkEgLT4gUEJHUkEK
LSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
IGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJs
dWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgICpwaXhlbERhdGEgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdy
ZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi0vLyBO
b3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBs
YXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIGluUGxhY2VD
aGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNv
dW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IHggPSBwaXhlbENvdW50ICogNDsKLQotICAgICAgICB1bnNpZ25lZCByZWQgPSBieXRlRGF0YVt4
XTsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07Ci0gICAgICAgIHVu
c2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsgMl07Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0g
Ynl0ZURhdGFbeCArIDNdOwotCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBo
YSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihi
eXRlRGF0YSkgKyBpOwotICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAx
NiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
aXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8p
IGNvbnN0Ci17Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJl
ZEZvcm1hdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByYXdCaXRtYXBT
aXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplKGNsYW1wVG88
aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUuaGVp
Z2h0KSk7Ci0KLSAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50KCkgJiYgcmVjdC5z
aXplKCkgPT0gYml0bWFwU2l6ZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1CeXRlcy51
bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBPbmx5
IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbURhdGEo
cmVjdCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKLSAgICAgICAgLy8gSW4tbWVtb3J5
IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8gc3dpenpsZSB0aGUg
cmVzdWx0cy4KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgaW5QbGFjZUNoYW5nZVByZW11bHRp
cGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4ocmVzdWx0
LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBp
blBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZy
b21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNv
bnN0Ci17Ci0gICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6QnVm
ZmVyT3V0T2ZTeW5jKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEludFNpemUgcGl4ZWxT
aXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBwaXhl
bFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29udGV4dC0+ZW5kRHJh
dygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIEFTU0VSVCghIWQyZERldmlj
ZUNvbnRleHQpOwotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0
aCgpICogNDsKLQotICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8g
YSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJp
dG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQy
RDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQx
X0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0g
ICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChwaXhlbFNpemUs
IG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1h
cCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBEMkQxX1JFQ1RfVSBkYXRh
UmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVp
Z2h0KCkpOwotICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBi
aXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7Ci0gICAg
aHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghbWFwcGVkRGF0YS5iaXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWVu
c3VyZUJhY2tpbmdTdG9yZShwaXhlbFNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6
bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICBpZiAoZGVzaXJl
ZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQotICAgICAg
ICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0
aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0
KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0
YSwgZGF0YS5kYXRhKCkpOwotCi0gICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7Ci0KLSAg
ICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwotCi0gICAgaHIg
PSBjcHVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Y29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAw
KTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgQ2hlY2tlZDxp
bnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAo
Q2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIGRlc3R4
ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVH
ZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IChD
aGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgZW5k
eCAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6
ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgo
KTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVz
dHkgKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNh
ZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keSA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAg
ZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0g
c2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5o
ZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0KLSAgICBp
ZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0g
Yml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+
PSBzb3VyY2VTaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49
IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJj
ZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzaXpl
LmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3Jl
KHNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc291cmNlU2l6ZSA9PSBzaXplKSB7
Ci0gICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0
aCgpKTsKLSAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0KTsKLSAgICAgICAg
aWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291cmNlLCBzb3VyY2VG
b3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJpdG1hcEJ1ZmZlclN5
bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0KLWJvb2wgSW1hZ2VC
dWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzb3VyY2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdl
dFBpeGVsU2l6ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0gc291cmNlUmVj
dDsKLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzb3Vy
Y2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0QnVmZmVyUG9z
aXRpb24gPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291cmNlRm9ybWF0ID09
IGJ5dGVGb3JtYXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc291
cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNp
emUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgaWYgKGJ5dGVGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICBy
ZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VS
ZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCks
IGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9E
ZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJh
Y2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotfQotCi12
b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKLXsKLSAgICBp
ZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMg
fHwgZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGl4ZWxTaXpl
ID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49
IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQg
Pj0gYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBwaXhlbFNpemUuaGVp
Z2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4gUkdCQS4g
V2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBjb21wYXRpYmxl
Ci0gICAgLy8gd2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNlLgotICAgIGlm
IChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkK
LSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+IFBCR1JBCi0gICAg
ZWxzZQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQot
Ci0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAq
IDQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShudWxscHRyLCBk
YXRhLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci19
Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFw
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1h
cElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJp
dG1hcDsKLQotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRl
clRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkg
ewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAg
ICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1h
cCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gYml0bWFwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4K
LSAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKLSAgICAg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1h
cC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRC
aXRtYXApKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1h
cC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lk
dGgpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
c2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMg
ZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBX
ZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBh
Y3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0g
ICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNlQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBz
b3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVy
dGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JF
QUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3Jt
YXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1h
cChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQo
KSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghc291cmNlQ1BVQml0
bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFw
LT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01B
UFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1h
cChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQx
RGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdl
dC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsK
LSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBp
eGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gs
IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0g
ICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTRkOGE0ODIyZjEyNWY0
MDZmMzAwNzc0N2ZmOTM1OGMxNTZhMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWlu
dDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1pbnRl
cmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLXN0cnVj
dCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
OwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLQot
ICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBtdXRhYmxlIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBieXRl
Rm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNvbnRleHQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3lu
YyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKLSAgICBtdXRh
YmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6
OkJ1ZmZlck91dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0
OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcChJRDJE
MVJlbmRlclRhcmdldCopOwotCi0gICAgYm9vbCBlbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50
U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAg
Ym9vbCByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c2lyZWRGb3JtYXQpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRS
ZWN0JiwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYpIGNvbnN0OwotICAgIGJvb2wgY29weVJl
Y3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmLCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHZvaWQgbWFya0J1ZmZlck91dE9mU3lu
YygpIHsgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3lu
YzsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0Yjdh
OGVjYmI4MzBhNTI2N2Y5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0
MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2lu
Y2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAg
IGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJ
bnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6
ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsICZjb250ZXh0LCBzdWNjZXNz
KSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNv
bnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKHNjYWxlZFNpemUu
d2lkdGgoKSAvIHNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0
KCkpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Lypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2Vz
cykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0
dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IHN0ZDo6Y2VpbChyZXNv
bHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IHN0
ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlm
ICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0lu
dFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRX
aWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6
ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwg
bV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFByZXZlbnQg
aW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkp
OwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0
KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdl
dENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0g
ICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0
LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAg
ICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVu
ZGVyVGFyZ2V0T2ZTaXplKG1fbG9naWNhbFNpemUsIHJlbmRlclRhcmdldCwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmbV9kYXRhLmJpdG1hcCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEucGxh
dGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFw
Q29udGV4dC5nZXQoKSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1h
cElmTmVlZGVkKCk7Ci0gICAgfSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubWFya0J1ZmZl
ck91dE9mU3luYygpOwotICAgIH0pOwotICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICBzdWNj
ZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYg
c3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgaW1hZ2VD
b2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBudWxscHRyLCBzdWNjZXNzKQotewot
fQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1HcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0
YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAot
ewotICAgIGNvbnRleHQoKS5mbHVzaCgpOwotfQotCi1zdGF0aWMgQ09NUHRyPElEMkQxQml0bWFw
PiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCog
Yml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykK
LXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1h
Z2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVf
dD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRo
KCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0
LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewotICAgICAgICAgICAgYXV0
byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZy
b21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPElt
YWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50
U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwg
aW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1w
bGVtZW50IHNjYWxlZCB2ZXJzaW9uCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIGF1dG8g
Yml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+
KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50
ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAg
IEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1
dGlvblNjYWxlOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBU
YXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0
LmdldCgpLCBzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJu
YWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVy
OjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIG9uLWhhcmR3
YXJlIGltYWdlLgotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhS
RVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsK
LSAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZl
biB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1
cmVzLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEu
ZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0
b3JlOwotCi0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7
Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgRDJEMV9SRUNUX1Ug
YmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplKTsKLSAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2lu
Z1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0
YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBtX2RhdGEuY29tcGF0
aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkp
OwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29t
cGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxl
Qml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwg
ZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJl
ZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2lu
ZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcg
PSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdl
Rm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBz
cmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5z
aW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXpl
KCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsK
LQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6
ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNl
LCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAx
KTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB7
IH07Ci19Ci0KLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3
MGFiZWRmMGE2MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJEaXJlY3Qy
RFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCisjaW5j
bHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHdpbmNvZGVjLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNp
emUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2Nh
bGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdl
dENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJU
YXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgp
IDogbnVsbHB0cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJn
ZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIGF1dG8g
Yml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUo
c2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmICghYml0bWFwQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwOworICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQu
Z2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRl
ZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5
bmMoKTsKKyAgICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNr
ZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29u
dGV4dCksIFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpj
cmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBiaXRtYXApCisgICAg
OiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUocGxh
dGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgICwg
bV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1f
Y29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250
ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Cisg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1h
cCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIC8vIEZJWE1FOiBt
X2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0
b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJlaGF2aW9yID09IENv
cHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAgICAgICBjb3B5QmVo
YXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNv
cmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4o
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93Owor
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7CisgICAgICAg
IEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgp
LCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9y
eSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworCisg
ICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCit7Cisg
ICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6
IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGlt
YWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8
fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91
bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291
cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0
KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0
bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRh
cmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdl
dCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBl
bHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJu
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZN
b3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJl
c29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7
CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAg
SFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkt
PlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3Zl
KGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAg
IGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisg
ICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRl
clRhcmdldCgpID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICAgICAg
aWYgKGJpdG1hcFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNr
aW5nQml0bWFwOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJp
dG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRt
YXAgIT0gbV9iaXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4g
TXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0
LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChT
VUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5n
ZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJp
dG1hcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJU
KHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKKyAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUg
b3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcg
YW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCisgICAg
Y29udGV4dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291
cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Cisg
ICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1B
UF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEo
RDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9U
X0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNl
RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVs
bHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VD
UFVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9i
aXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7
CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZt
YXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNl
Q29udGV4dDsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERl
dmljZUNvbnRleHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRl
eHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRh
LmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVz
KCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisK
KyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwg
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0gY29tcGF0
aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkp
OworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29t
cGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxl
Qml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVj
dCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNkYmE3ZWU1ZWVmZjJm
NzFhYzM5Mzk2MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRp
b24pIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsK
KworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdlUHRyIG1fYml0bWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJE
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVT
b3VyY2UuY3BwCmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0ZTVjY2QzNzAxYmQu
LjMyYmY4NmJjNmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAg
LTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1lcmF0b3IsIGZwc0Rl
bm9taW5hdG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRl
KCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VT
aXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRvIGNhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAgICAgICAgICAgImZv
cm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQ
RV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1
Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJT
aGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAg
ICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFn
ZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAg
ICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczog
UkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBm
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCBkNzg2OTRhYWU3YjM1OTJiMzYyNTI2N2Q5NTAwMTY2YWJlMDUwZmY5
Li5lMjg1OTJhODA1NjNiZGQ4NWFhMjQ3ZDVjOGUwYjE1NWI5YzE4MjM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTM0NSw3ICszNDUsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91
bmQoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdQogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKICAgICAgICAgSW50U2l6
ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5nQm94LnNpemUo
KSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhw
YW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19j
YXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJhbnNmb3JtLnlT
Y2FsZSgpKSkpOwotICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+aW50ZXJu
YWxTaXplKCkpCisgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5k
U2l6ZSgpKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIucmVzZXQoKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCA5ZmJiMWZk
ZjBkODI3ODg0NjY1Y2VjNzczN2IzMTBiNTAzMWQ0MGM1Li4wZjg4NDI5MDBmODUxYTdkOTJmODg2
Y2E2NmY5MWE5MTBlOWZlZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QKICAgICBpZiAoIXNu
YXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2hhcmVkU25hcHNo
b3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxT
aXplKCksIHsgfSk7CisgICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0pOwogICAgIGlmICgh
c2hhcmVkU25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389366</attachid>
            <date>2020-01-31 09:46:18 -0800</date>
            <delta_ts>2020-01-31 14:22:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200131094617.patch</filename>
            <type>text/plain</type>
            <size>359533</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uNjBmNDk2Y2I1ZWNhOTZkNjVhNDkyMDM3YThlYTQ0
MmM2Y2VhYjJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1NCBAQAorMjAyMC0wMS0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3Rv
cmVkIHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBi
YWNrLWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAg
ICAgIEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRk
ZWQgdG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBh
Y2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWls
cy4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhl
IHJlc3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBi
ZSBjcmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGlj
aAorICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdl
IHRvIHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAg
QmFzZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhl
IHJlbmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGlu
c3RlYWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVj
aXNpb25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJC
YWNrZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcg
bmV3IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVm
ZmVyQmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50
CisgICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5k
ZXJpbmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
bGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2Fs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZv
cm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdT
aGFkb3dMYXllckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1M
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVm
ZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0lt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNl
VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3Vs
YXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1v
cnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6
OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRl
RnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFV
UkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCisyMDIwLTAxLTI4ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVybiBhbmQgdGFrZSBJbWFn
ZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NjYyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0t
IENvbWJpbmUgSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSgpIGFuZCBnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgaW4gb25lIGZ1bmN0aW9uIGFuZCBu
YW1lIGl0IGdldEltYWdlRGF0YSgpOworCisgICAgICAgIC0tIE1ha2UgZ2V0SW1hZ2VEYXRhKCkg
cmV0dXJucyBhbiBSZWZQdHI8SW1hZ2VEYXRhPiBzaW5jZSB0aGUgY2FudmFzIGNvZGUKKyAgICAg
ICAgICAgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgcmV0dXJuZWQgVWludDhDbGFtcGVkQXJyYXkg
aW50byBhbiBJbWFnZURhdGEKKyAgICAgICAgICAgYW5kIHNlbmQgaXQgdG8gSmF2YVNjcmlwdENv
cmUuCisKKyAgICAgICAgLS0gUmVuYW1lIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoKSB0byBJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKCkgYW5kCisgICAgICAgICAgIG1ha2UgaXQgdGFrZSBh
biBJbWFnZURhdGEgc2luY2UgdGhlIGJ5dGUgYXJyYXkgaGFzIHRvIGJlIGFzc29jaWF0ZWQKKyAg
ICAgICAgICAgd2l0aCBhbiBJbnRTaXplIGFuZCBzZXBhcmF0aW5nIHRoZW0gZG9lcyBub3QgbG9v
ayBhIGdvb2QgZGVzaWduLgorCisgICAgICAgIC0tIFJlbW92ZSB0aGUgZW51bSBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbS4gQWxsIHRoZSBjYWxsZXJzIG5lZWQgdG8KKyAgICAgICAgICAg
cGFzcyByZWN0YW5nbGVzIGFuZCBzaXplcyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUaGUgSW1h
Z2VEYXRhIGhhcyB0bworICAgICAgICAgICBiZSBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBJbWdl
QnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUoKS4gCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVy
OjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gSW1hZ2VCdWZmZXJDYWlyby5j
cHAuCisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVt
aW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBh
bmQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhcmUgbm90IAorICAgICAgICBvdmVy
cmlkZGVuIGJ5IGFueSBwbGF0Zm9ybS4gU28gZGVsZXRlIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgYW5kCisgICAgICAgIG1vdmUgaXRzIGJvZHkgdG8gY29udmVydFRvTHVtaW5hbmNl
TWFzaygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgTWFrZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgYmUgcHVibGljIGFuZCBy
ZW1vdmUgdGhlIGZyaWVuZCBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hhZG93
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsVW5pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpiYWNraW5nU3RvcmVVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoK
KyAgICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBp
biBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycg
ZGF0YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdoaWNoIHdh
cyBwYXNzaW5nIGEgcmVjdGFuZ2xlIGluIGEgdGhlIGJhY2stZW5kCisgICAgICAgIGNvb3JkaW5h
dGVzIGFsb25nIHdpdGggQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBj
YW4gcGFzcworICAgICAgICB0aGUgcmVjdGFuZ2xlIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMgYW5k
IHRoZW4gdXNlIEltYWdlRGF0YTo6c2l6ZSgpIHNpbmNlCisgICAgICAgIGl0IG11c3QgYmUgc2Nh
bGVkIHdpdGggcmVzb2x1dGlvblNjYWxlKCkgd2hlbiB0aGUgSW1hZ2VEYXRhIGlzIGNyZWF0ZWQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpn
ZXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVj
dDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgor
CiAyMDIwLTAxLTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIG1hY0NhdGFseXN0OiBUcmlwbGUgY2xpY2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2Ug
cmVzdWx0cyBpbiBhbiBlbXB0eSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYThjMGNhZjVlMWRhZTAw
ZjQyMzRmY2MzOTM3ZjBjZGMwMWVlNDRhOC4uYmE3ODFjN2EwZGJmZDM4MGI4NTQ1ZjU3MjUwZWIz
YWFhZGI4NWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0zMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRp
ZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCBj
b25zdCk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBzZWxlY3QgYSBz
ZW50ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggNTRkYjcxNmFjODdjYWM0ZDAxMzBkZDhhNzk1NTRkMGQ2NzU2OWU2OS4uYmM0YjBjYjUzMDc1
NTE4ZDAyMzkyMDE2ZDc3MzY3MmJhM2Q4MWQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDQy
LDYgKzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09w
dGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBA
IC0xMDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYz
Y2Y5NDBkLi41ZDE3NzQzZWQzODQzMDExZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYgKCR7VVNF
X0RJUkVDVDJEfSkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0
MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJl
Y3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyRC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJE
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5j
cHAKQEAgLTEzMiw4ICsxMzEsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2
LDcgKzE3Niw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UK
aW5kZXggOWFiNDY4NzM5ZWYxMWZmNjA5Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRiOWI3Zjg4
NjZiMTI0MWE4NTU3OWIyZTYxZjdiYWU1NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21h
a2UKQEAgLTg0LDggKzg0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2Rl
ckRpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3ICsyMDAs
NiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmlu
ZGV4IGFlYzMyMDY3ZDNlNmYyZjQ5ZDE5M2UwYjFhNjZiYjA5NTkxMTYwYzguLjEyMjE1YWIxZDEw
ZmJkZDhhZWNhMjY3ZjcwODQ2MzczNWJmNWZlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CkBAIC0yOTEsOCArMjkxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2lu
dENHLmNwcApAQCAtNTI3LDcgKzUyOSw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVmNWMwN2E4
ZGM5M2ViLi44YWY3MDFjNzc3ZmUxNTJlMjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
SUJQaXhlbERhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJv
bGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDY0MWQ2ZmQ0MzVlM2MzYWUwN2YwYjAwNzI4ODUyYWRiOWEzY2I3NWUuLmUwNzY0ZmJm
NGFiMzNmYjBmNGRkN2NmMTFjODg2MDVhZDNhMjQ3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY1
LDYgKzE4NjUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCA0ZGU3NWRmOGRmMGI4ZjkwZTViMjU4MTU3
ZWFkYTRhNjlkM2I1OTE2Li43NjYxZTJiOWFkMmIzOTE4YTUzYjE2N2U0N2JjMTQ1M2FlNmZjOTFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggY2M1ODdjZTU2Mjc0NTc1MGFhNWJkOTRjOTEwMDg3M2IxNzlkNGUy
Yi4uODE2ZWFkODE0MjI5NzI4OTZlOTg1NWMzNmM3NWU1YzE3ODk1MjQyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1LDgg
KzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAq
LzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMx
MUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUz
NjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUz
NjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlw
aERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVt
RWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlw
aFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICov
OyB9OwpAQCAtODMzLDE3ICs4MzEsMTcgQEAKIAkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8q
IEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJ
bXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkRBRjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEw
MDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJERDVBNzI3MUVCRUU0
N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmll
dy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFD
RTAxRjU3NEFEMTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5oICovOyB9OwotCQkyRERFMUNF
NDFGNTc0QUU5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0RFMUY1NzRBQUIwMEQxQTM2NSAvKiBKU1ZS
RGlzcGxheS5oICovOyB9OwotCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUgLyogSlNWUkRpc3Bs
YXlDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEREUxQ0U2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGll
cy5oICovOyB9OwotCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFD
RTgxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCAqLzsgfTsKLQkJMkRERTFD
RkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VBMUY1NzRCRkYwMEQx
QTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggKi87IH07Ci0JCTJEREUxQ0ZFMUY1NzRD
RjMwMEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNFQzFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkV5ZS5oICovOyB9
OwotCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VFMUY1NzRC
RkYwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oICovOyB9OwotCQkyRERFMUQwMjFGNTc0
RDAwMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjAxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJGcmFt
ZURhdGEuaCAqLzsgfTsKLQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIEpTVlJMYXllcklu
aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUx
Q0YyMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSTGF5ZXJJbml0LmggKi87IH07Ci0JCTJEREUxRDA2
MUY1NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjQxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJQb3Nl
LmggKi87IH07Ci0JCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERF
MUNGNjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFyYW1ldGVycy5oICovOyB9OworCQky
RERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGODFGNTc0QzM5
MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9
OworCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUNGRTFG
NTc0Q0YzMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyB9OworCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERF
MUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyB9OworCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkyRERFMUQwODFGNTc0RDBFMDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9Owog
CQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREU3MDAyMjE5
MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmggKi87IH07CiAJCTJE
RjUxMkNFMUQ4NzNFNDcwMDFENjc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERjUxMkNDMUQ4
NzNFNDcwMDFENjc4MCAvKiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaCAqLzsgfTsKIAkJ
MkRGQTQ4OEYxREI1NDFEMDAwMzYyQjk5IC8qIEJ1ZmZlclNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGQTQ4OEUxREI1NDFDMjAwMzYyQjk5
IC8qIEJ1ZmZlclNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yMTUxLDYgKzIxNDksNyBAQAogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5OUJDNjcyM0Q2QTUzMjAwQ0M2ODgzIC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5
OUJDNjgyM0Q2QTUzRTAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAv
KiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMz
QTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVB
MjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGlu
ZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1l
c3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3
NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBB
QyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtMjU4MSw3ICsyNTgwLDYgQEAKIAkJOEFG
NEU1NUMxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUY0RTU1OTExREM1QTYzMDAwRUQz
REUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsgfTsKIAkJOEJEMzdBNjgyMDFCQjM5QzAwMTE3
MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhCRDM3QTY3MjAxQkIzOUMwMDExNzM0QSAvKiBSZWFkYWJsZVN0
cmVhbUNodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOEU0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU0Qzk2RDkxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5oICovOyB9OwotCQk4RTYyMEU4MTIwRUU2MDI0
MDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNjIwRTgwMjBFRTVGRkMwMDdCQzVFRiAvKiBW
UlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCThFQzZDOTYzMjAxQTI1MTYwMEZCRkE1MyAvKiBHYXBMZW5ndGgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFQzZDOTYx
MjAxQTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RjY3NTYxQjEyODhCMTdCMDA0N0FDQTMgLyogRXZl
bnRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0
NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKQEAgLTY1NTksOSArNjU1Nyw2IEBACiAJCTIyNUExNkIz
MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNj
cmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRX
cmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5
NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5
NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTYwNSw2ICs5NjAwLDE2IEBACiAJCTcyN0FGRUQzMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgz
IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4
NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E0MjNFMTczMjcwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJB
QzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQjIzRTFFNTQ0MDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJB
QzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFp
bnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBK
U0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRz
UkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAw
NEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTQ3LDggKzEwNTUy
LDYgQEAKIAkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExlbmd0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJl
c3BvbnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hS
ZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFNEM5NkQ5MUFENDQ4
MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CThFNjIwRTdFMjBFRTVGRTIwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUlBsYXRmb3JtRGlzcGxheS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIwRTgwMjBFRTVGRkMwMDdCQzVFRiAvKiBW
UlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU0V4ZWNTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI2NzgsNyArMTI2ODEsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUz
MDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
QnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYw
QUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDg0MSw5ICsyNDg0MywxMiBAQAogCQkJ
CTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJ
CTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywK
IAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZm
ZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQUEyM0UxRTU0NDAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTky
M0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFn
ZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDkzNSw2ICsyNDk0MCw3IEBACiAJCQkJMEZFNkM3NkMx
RkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1
QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQzJGNEU3
ODkxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAorCQkJCTcy
QkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLywKIAkJ
CQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3Bw
ICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJ
bWFnZS5oICovLAogCQkJCTRCN0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBDdXN0b21QYWludElt
YWdlLmNwcCAqLywKQEAgLTI1MDMyLDcgKzI1MDM4LDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTND
MDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0
MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5
OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZC
IC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8q
IEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFn
ZUZyYW1lLmNwcCAqLywKQEAgLTI1MDg5LDYgKzI1MDk2LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZE
Nzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQw
MEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkg
LyogUGF0dGVybi5oICovLAorCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRm
b3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8q
IFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTgyNCw3ICsyNTgzMiw2IEBACiAJCQkJNjU2
Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8sCiAJCQkJMUEyRTZFNTYwQ0M1NTFF
MDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4
dCAqLywKLQkJCQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMgLyogdnIgKi8sCiAJCQkJREZEQjkx
MkNGOEU4OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICovLAogCQkJCTQ5QUUy
RDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKIAkJCQk0OUFF
MkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovLApAQCAtMjg5MDgs
NiArMjg5MTUsMTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZG
NyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzMTIyM0VDODU0MDBGMTJGRjcg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwpIGlu
IEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBI
ZWFkZXJzICovLAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLywKKwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRl
cnMgKi8sCisJCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJz
ICovLAorCQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFj
dERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI2Miw4ICszMDI4MCw3IEBACiAJCQkJ
N0M3OTAzQjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5
MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIy
QkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICov
LAotCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8q
IEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThD
RTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTE2OCwxNyArMzExODUsNiBAQAogCQkJCUJF
OEVGMDREMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NkU3OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNWaXNpYmlsaXR5U3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc3NzlCRDk2MUYzMjI0NkEwMEMyMTQxNyAvKiBKU1Zpc3VhbFZp
ZXdwb3J0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyog
SlNWUkRpc3BsYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2
NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFD
RkExRjU3NEMzRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJFeWVQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUg
LyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMjFGNTc0RDAw
MDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDQx
RjU3NEQwNTAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJE
REUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJFMjA1MDgyMThBNDYwQzMwMDgwNjQ3RSAvKiBKU1ZUVEN1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRjE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdp
b25MaXN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4Mjc3MjY2ZGRlYzc1
MjA0MTIxMmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3ZTg1OTZkNzU4ZjZm
NWUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXpl
LmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVy
bygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAg
ICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLT5w
b3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7CiAgICAg
ICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZl
ciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0
YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZShX
VEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgYXJyYXku
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAg
ICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXpl
KGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAg
ICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQp
LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkp
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+
c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7
IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAg
ICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5j
cHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2MTQ1ZC4uMTYyYjI5
NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZh
c0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWYKICAg
ICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBXVEZNb3Zl
KGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1fc2l6ZSAhPSBt
X2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9
IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6ZSA9IG1faW1hZ2VC
dWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNNZW1vcnlDb3N0ID0g
bV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBtZW1vcnlDb3N0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IGQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4Nzlk
YTNmZmIyOTNmMGEuLmQyYjhkYjgxNGQzMTM0MTg2NDEyZmE1ZDhhZWFmN2EyMzgwYjEyODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMTU4LDExICsyMTU4LDYgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUlt
YWdlRGF0YShmbG8KIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZs
b2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdl
QnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwotfQotCi1F
eGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewog
ICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52
YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDgg
KzIxOTEsOCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwog
Ci0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIWJ5dGVB
cnJheSkgeworICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKKyAgICBp
ZiAoIWltYWdlRGF0YSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwog
ICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdl
IGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKICAgICAgICAgY29uc29s
ZU1lc3NhZ2UuYXBwZW5kTnVtYmVyKGltYWdlRGF0YVJlY3Qud2lkdGgoKSk7CkBAIC0yMjA4LDcg
KzIyMDMsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSW1hZ2VEYXRh
OjpjcmVhdGUoaW1hZ2VEYXRhUmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBk
eSkKQEAgLTIyMTcsMTEgKzIyMTIsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEm
IGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZs
b2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQotewotICAgIHB1dEltYWdlRGF0YShk
YXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlY
LCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLX0KLQotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1
ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBk
aXJ0eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1
ZmZlcigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjM1LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJ
bWFnZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50Pihk
eCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAg
ICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVt
ID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNh
bFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKICAgICBpZiAo
ZGVzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0KGRlc3RSZWN0KTsKQEAgLTIyNTMsNyArMjI0Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6
OkNvCiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCks
IGRhdGEuaGVpZ2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQo
KSksIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsK
KyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSk7CiAK
ICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3Jl
IHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2Rm
YzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uZGIzZmFjOGIwOGI3MDNiZDU0
MWZjNzJmNGQzMWJkNTE3NzM1MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMzcxLDkgKzM3
MSw2IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZh
c0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgs
IGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwg
ZmxvYXQgZGlydHlIZWlnaHQpOwotCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBib29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5ZGM2NDNmODcy
OTA5Y2I3MWY3ODI4ZWY4NWJiYy4uZTYwY2RlMTRkMWE3YzZjMzA0Mjg5MDc1MDdjNjEwYmU1NWRl
MWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAgLTM3
Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAgICAgICAgIGF1
dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXplLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlt
YWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBv
aW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNl
UmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4u
MTJhMmQ3NGZmYmU4ZmNjNzNmMDY4YmJmY2JhMDA1NDA3NzU3MTc3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRp
ZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgK
ICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IGY5MGQyNDZl
YzU5YjRmOGE4ZTEzOGI3MjI0MGNmMjAyNTgzMTkyYzQuLjZmYTRmZmUxNDYwZWE3MTM4MjFiY2Ez
NjIyNmQyNmE5N2U1ZDk5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dApAQCAtMzAsNyArMzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBl
YTkxNGIxNDk5YTIyLi5kZGQ1YzZjNzM0NWEyYzBkOGJkOWE4ZTRlZmI0ZTNjYjk5NTg3YzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CkBAIC0xNjUsMTIgKzE2NSw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbihjb25zCiAgICAgICAgIHJl
dHVybiBpbWFnZTsKIAogICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdOYXRpdmVJbWFnZShpbWFn
ZSwgcmVjdC5zaXplKCksIHJlY3QsIHJlY3QsIHsgb3JpZW50YXRpb24gfSk7Ci0KLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKICAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4g
YnVmZmVyLT5uYXRpdmVJbWFnZSgpOwotI2VuZGlmCiB9CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdmNTQ1ZTNhOTIwZmRjNmNhZDI1YjRiNTZlNGJiNDU0ZDYxN2Ex
OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1h
Z2VCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAg
IHsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tl
bmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxDb250ZXh0dWFsSW1hZ2VCdWZmZXI+KG5ldyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIo
V1RGTW92ZShiYWNrZW5kKSkpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRU
eXBlOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENv
bnRleHR1YWxJbWFnZUJ1ZmZlcj4obmV3IENvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJh
Y2tlbmQpKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29udGV4dHVhbEltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1fYmFj
a2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBDb250ZXh0dWFsSW1h
Z2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVC
YWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9
CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Jh
Y2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgIH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNl
VHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5iYXNlVHJhbnNm
b3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpOyB9CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFja2VuZFNpemUoKTsgfQorICAg
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Vu
ZC0+cmVzb2x1dGlvblNjYWxlKCk7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5tZW1vcnlDb3N0KCk7IH0KKyAgICBzaXplX3Qg
ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5l
eHRlcm5hbE1lbW9yeUNvc3QoKTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlOYXRpdmVJ
bWFnZShjb3B5QmVoYXZpb3IpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1h
Z2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3KGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRpdmVJ
bWFnZSgpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvSW1hZ2Uo
cHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKworICAgIHZvaWQg
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tl
bmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9y
bUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xv
clNwYWNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT50cmFuc2Zvcm1Db2xv
clNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICB9CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGFVUkwo
bWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQo
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlz
KS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9CR1JBRGF0YSgp
OworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5nZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOwor
ICAgICAgICBtX2JhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBz
cmNSZWN0LCBkZXN0UG9pbnQpOworICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
cGxhdGZvcm1MYXllcigpOworICAgIH0KKworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQs
IHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlB
bHBoYSwgZmxpcFkpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4g
bV9iYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDIwYjk4MTBjMjkx
NDFlNDczZTZhODg4YmM4MGMxNDE3YWVhYzJmYWYuLjBmZWIxMTJmMmU1M2JkNGM4NmEwNjczMjI3
NmZlNzJkMGE1OThmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NCArMjgsOTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9
IDQwOTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVu
Z3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElt
YWdlQnVmZmVyKTsKLQogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBz
dWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29u
dGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRTaXplLCBjb250ZXh0
KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBj
b250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNp
emUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQot
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdl
dENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQp
OworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNv
bnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gZmxvb3JmKHNpemUuaGVpZ2h0KCkp
ICogZmxvb3JmKHNpemUud2lkdGgoKSkgPiBNYXhDbGFtcGVkQXJlYTsKIH0KIApAQCAtMTA1LDkx
ICsxNTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1w
ZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENBSVJPKQot
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJldHVybiB7
IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQot
Ci1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5n
dGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBw
aXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0g
KHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1
LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsK
LSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VS
ZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRo
IHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWND
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJv
b2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNv
bnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAg
Ly8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5k
ZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNiw1MCArMTczLDE5IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRl
eHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25k
aW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNv
bnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vs
c2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXpl
IGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhp
Z2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0
dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1v
cnlDb3N0KCkgY29uc3QKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGlu
dm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55
IHBvaW50ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkg
KiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJ
bnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpl
eHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
ZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0
dXJuIDA7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOwogfQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmlu
ZGV4IDdiNzcyYTJmMmQ4ZjZlNzU3N2VhZmM2ZGIyMjkzMDZiN2NmZWRmOWIuLmU1YzAzZTRkZjg2
NTljNDYzZTFjM2QyNjA0MTY3MDIzMzY1NzY5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTYwICsyNyw3
NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdN
b2RlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNp
bmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIElt
YWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0Owot
Y2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFj
a2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhl
IGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkg
YWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewot
ICAgIE5vLAotICAgIFllcywKLX07Ci0KIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9T
dXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFs
bG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0Is
IGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwg
Y29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBm
cm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUg
Y29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1
ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1h
Z2VCdWZmZXIoKTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGlu
ZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3Ig
Y2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNp
emUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUm
LCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3Qg
RmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFt
cGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlv
biBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgc3RhdGljIElu
dFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZm
ZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNp
emUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOworICAg
IAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwogCi0gICAgZW51bSBDb29y
ZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3Jk
aW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNv
bnN0ID0gMDsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9
IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29u
c3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxw
dHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgdm9p
ZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKLSAgICAKLSAgICB2b2lkIGNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pID0gMDsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4s
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRp
YyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKSA9IDA7CiAKLSNp
ZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAg
IHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pID0gMDsKIAogICAgIC8vIEZJ
WE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0
cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFy
ZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpOwotCi0gICAgLy8gVGhlc2Ug
ZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlz
IGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wg
c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6
ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAg
c3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0
aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2Nh
bGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0ID0gMDsKIAotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVk
IGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdh
bnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05h
dGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hD
b250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKICAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAs
IDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2
b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdl
QnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xv
Z2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJp
YWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJu
IGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNl
UmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0g
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAg
IHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzYWE1
ZGE2MjYyNTNiNTFkOTJmZWQ4MWFiY2FiZDI3NDNkZWU4NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5o
IgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2xv
Z2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICwgbV9iYWNrZW5kU2l6ZShiYWNrZW5kU2l6ZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2Fs
Y3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0
KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUg
YmFja2VuZFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cu
aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXpl
X3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVt
Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJu
IGJhY2tlbmRTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1
dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7
CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFh
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKworICAgICAgICBkb3VibGUgbHVtYSA9IChyICog
MC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsK
KyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAg
fQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSk7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEodm9pZCogZGF0
YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXpl
LmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9n
aWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRh
KCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVs
WzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAg
ZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxb
M107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0
aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhl
bCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7Cisg
ICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEg
PT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0Nv
bG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAg
ICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0g
PSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1Bp
eGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0g
c3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAg
Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVs
LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRl
c3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAo
c3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNy
Y1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhh
OworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1
aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5
SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCog
ZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93
ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0
KCk7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4
ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3Nb
eF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAg
IH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RD
b2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0g
ZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdl
UGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3Jj
Q29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5
UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93
cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNV
bmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9y
Rm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0
ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAg
SW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisK
KyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6
ZSgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9ICBpbnRlcnNl
Y3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVj
dCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBp
ZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0
U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBk
ZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6
ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQorICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+
emVyb0ZpbGwoKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0
U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgp
ICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAg
ICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBz
cmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAq
IDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBpbWFn
ZURhdGE7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQq
IGRhdGEpCit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0
ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29v
cmRpbmF0ZXMoZGVzdFBvaW50KTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRl
cnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBpbWFnZURhdGEuc2l6ZSgpIH0sIHNyY1JlY3RT
Y2FsZWQpOworICAgIEludFJlY3QgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0
UmVjdC5tb3ZlQnkoZGVzdFBvaW50U2NhbGVkKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngo
KSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdFNjYWxl
ZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJl
Y3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBkZXN0UmVj
dC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0UmVjdC5zaXplKCkpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgp
ICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXpl
KCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0
YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTNiNjNjZGY3MTc4YWJiMWI1
YTM4ODI5YzU1ZTEyOGVkYjdhMjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXNHTC5oIgorI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Citj
bGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CitjbGFzcyBJbWFnZURhdGE7CisKK2VudW0g
QmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1
YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2lu
Z1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2Vu
dW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVz
LAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisg
ICAgQkdSQQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kU2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1f
YmFja2VuZFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdS
QURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpID0gMDsKKworICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29s
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Up
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQg
KiBtX2JhY2tlbmRTaXplLndpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIENvbG9yRm9ybWF0IGJhY2tl
bmRDb2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIENvbG9yRm9ybWF0OjpSR0JBOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgdG9CYWNrZW5kQ29vcmRpbmF0ZXMoVCB0KSBj
b25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8VCwgSW50UG9p
bnQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50U2l6ZT46OnZhbHVlIHx8IHN0ZDo6aXNf
c2FtZTxULCBJbnRSZWN0Pjo6dmFsdWUpOworICAgICAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUg
IT0gMSkKKyAgICAgICAgICAgIHQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBy
ZXR1cm4gdDsKKyAgICB9CisKKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1
cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xvZ2ljYWxTaXplKTsgfTsKKyAgICBJbnRS
ZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBtX2JhY2tlbmRTaXplKTsgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkg
Y29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZv
aWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9i
YWNrZW5kU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNl
IG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmE1Yzg4NWU1YzEwMjQ0N2M3M2ExMmYxZDZmYjMyYjVk
Mzk5MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdl
QnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDliZjJj
MGRhZmEyM2EzODEzMTcyYzJiYmE4NzUyMzVhYmEzNTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCIKKwor
I2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2Vs
aWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgi
CisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cp
Cit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3Jt
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5k
aWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShD
QUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kOworI2VuZGlmCisKK3Vz
aW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1V
bmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA2ODFhYjU2
ZWViMzQxOTQ2MmIyMzQ0NTBkMDBmNDFmOTMzNjc0ZDE4Li4zY2ZjZTcyOTU0MjA5ZDMwM2E5Zjcy
NDMyZmJiNGI2MzlkNGI0MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
NDQ5LDcgKzQ1MCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW1hZ2VCdWZmZXImCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBJbnRT
aXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmludGVybmFsU2l6ZSgpOworICAgIEludFNpemUg
YnVmZmVyU2l6ZSA9IGxheWVySW1hZ2UuYmFja2VuZFNpemUoKTsKICAgICBpZiAoYnVmZmVyU2l6
ZSAhPSBsYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0lt
YWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAg
ICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRo
ZSBmaWxsZWQgcGFydCBmaXJzdC4KQEAgLTg4NCwxMiArODg1LDEzIEBAIHZvaWQgU2hhZG93Qmx1
cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6
ZSYgdGVtcGxhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9p
bnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxh
eWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAK
LSAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBi
bHVyUmVjdC53aWR0aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVy
RGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5z
aXplKCksIGJsdXJSZWN0LCB7IH0pOworICAgIGF1dG8qIGJsdXJQaXhlbEFycmF5ID0gbGF5ZXJE
YXRhLT5kYXRhKCk7CisgICAgYmx1ckxheWVySW1hZ2UoYmx1clBpeGVsQXJyYXktPmRhdGEoKSwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7CisgICAgbGF5ZXJJbWFnZS5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCAzOTZjZjBiZTA3MDVhNjZhNGZmNGYyY2E1
NzE2MGM3NTFkZjcwNzg1Li5iMjM2NTQxM2ZkZTM3NzNiNzMyMTg5OTAwYjVmNmUxZTk2MmQ4MWUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3
aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwg
Y29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5
ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAg
IGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVj
dChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJh
dG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9
CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBU
aGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxk
IG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dT
dGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2Uu
bmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUlt
YWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
c2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFs
QWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0
aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1
dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNl
LmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUp
KSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1
ZDMxYjFkMzM3OTAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xD
b250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQot
I2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRl
IDxFR0wvZWdsLmg+Ci0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xf
RVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCi0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRl
eHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAg
ICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykp
OwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0K
LQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5k
ZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRh
dGVDbGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkK
LSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNl
bmRpZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRv
ckJ1ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKLQotICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNl
X2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
bV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9j
b21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0Uo
TklDT1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1
ZmZlckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJv
eHkuY29weVJlZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVm
ZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9
IEdMQ29udGV4dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7
Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5
T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGhvbGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVm
ZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9z
aXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdC
QSkpOwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVy
YXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVy
YXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0
IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFz
IHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVy
ZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2
aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUg
Y29tcG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9z
aXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBj
YWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190
PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQo
Y3IuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZh
Y2UoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUg
b3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBp
dAotICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVz
KDEsICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0
dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsK
LQotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JB
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0g
Y29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBo
dWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9k
ZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJ
Uk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5k
aWYKLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0K
LSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1j
YWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9
PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQot
ICAgIHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9
IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90
PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkp
KQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBl
bmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkg
KgotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkp
OwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRh
KEludFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUp
Ci0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2Vz
cyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0
IHNjYWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwot
ICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEg
bG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVk
SGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRh
Lm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2Rh
dGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAg
ICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5t
X3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkg
IT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWls
cywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vs
c2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2Rh
dGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9f
Zm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRo
KCkpOwotICAgICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVy
b2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9z
ZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBz
dXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQot
Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBu
b3RpY2Ugd2UgZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9T
dXJmYWNlU2V0RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9u
U2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRh
Lm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0g
dHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNl
OjpTUkdCLCBjb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCi17Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBz
dXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENv
cHlCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlD
YWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRt
YXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9u
Ci0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4o
bV9kYXRhLm1fc3VyZmFjZSkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5n
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYg
KGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgm
ZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0g
Y2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGlu
YXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBj
b25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5z
dGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRl
KGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBp
ZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRl
cm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3Np
emUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xv
ckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9
IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAg
ICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dp
Y2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJm
YWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0
JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBh
biBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAv
LyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAo
c3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4g
c3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRf
QVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxv
Z2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17
Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0g
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEg
Kj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJl
YS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBy
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVu
c2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBl
bmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBl
bmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFz
IHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6
c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+
IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56
ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHgg
PSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54Owot
ICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgo
KSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVu
ZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVz
dHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55
OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0g
ZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0
IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8
PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRl
cml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8v
IFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2Ug
ZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9y
aWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUo
aW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0g
ICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7
Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAg
ICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24o
bG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihk
YXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2Fs
QXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxB
cmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0
YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0
cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkp
OwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAg
ICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkg
ewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQq
PihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICog
NDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0g
ICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhl
bCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVs
ICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVs
ICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4
ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4
ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSBy
ZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1
NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBn
cmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3Qg
VW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCBy
ZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCBy
ZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUg
VW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6
QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3Vs
dC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9n
aWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5p
dChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBp
eGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNr
aW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJl
Y3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJ
bnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tp
bmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNp
b25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBs
b2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNj
YWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3Vy
Y2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6
ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGlu
YXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBv
aW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVu
aXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQo
KSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBp
bnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0g
ICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJj
ZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9y
aWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2Fs
ZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2lj
YWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7
Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVt
bnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVu
ZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3Qu
eSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VS
ZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBs
b2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VS
VChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50
IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0g
ICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNl
UmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBp
bnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dp
Y2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVk
IHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBu
ZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20g
dGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51
bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3Vy
ZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1
cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
ZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAg
IHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxl
ZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAg
IHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0
YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBu
dW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAv
LyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1
c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhw
ZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9
IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0g
KGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0g
KGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8
IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24g
aXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dp
Y2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAo
aW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFj
ZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAs
IGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQ
b2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5j
b2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZElt
YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNo
YXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVu
Y29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwot
fQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0g
ICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3Rp
dmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNo
aW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0
aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3Rl
eHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwg
bWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25p
Y29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlm
Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQs
IHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVt
dWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVt
IGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29u
dGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZv
cm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVi
dWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBm
Ym8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBn
bEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAg
IGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4
dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDAp
OwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFs
Zm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1ZWZhYTc5
MGExNDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1
cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0
U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RD
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNo
YWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVz
dENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGlu
ZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2Ug
aWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNv
bG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0
b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAg
ICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOwor
CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJ
bWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisgICAgcmV0
dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJn
ZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShp
bWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGlj
OgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJy
aWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
dXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xv
ckZvcm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2MzcyZjkx
OWU3ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAi
RXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYK
KyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVw
b3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5k
aWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENB
SVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsK
KyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2Vu
ZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQ
SSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4K
KyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53aWR0aCgp
LCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNh
aXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3Jt
YW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90
aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJl
ZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXpl
LmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENB
SVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFy
U3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVh
dGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0
ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJ
QSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5p
Y29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlz
KSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkK
KyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwor
ICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmlu
Z0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAg
ICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJu
IG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAg
ICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNl
IHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0
b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlw
WSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3
aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4
dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgor
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9N
QVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJf
dCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRp
b25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3Jt
YXQsIDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwg
MCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERl
bGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENv
bnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2Vu
VGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVp
KEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdo
dCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRv
clN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShj
b250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBv
c2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0
KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBv
c2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisg
ICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0
aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAg
ICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUs
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgp
KS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5
ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3
ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBi
dXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhl
IGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1
c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgor
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJm
YWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3Iu
Z2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3Np
dG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7
CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBh
Y3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZs
dXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0
OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZSht
X3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRh
cmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYg
VVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVy
CisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgewor
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgfkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkg
b3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZv
cm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRy
PE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsK
KyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0
b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisg
ICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU1ZjJkZGU5OGViNzRlNGUyMTAzY2FjNDQxOGY3YjU4ZWE5ZTFjZmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNF
KENBSVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxh
dGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9
IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tl
bmRTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFz
dFplcm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3Vy
ZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tl
bmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXks
IHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAx
LCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
KGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1f
c3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7Cisg
ICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xv
Z2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4
ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAg
ICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tV
cFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgp
XSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJv
X3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xv
Z2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjAwMzc5
NGZkYWE5NDczMmI2MTU1N2M0MWU4NDQyMzFhOThhNzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKwor
cHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsK
KworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMTVmMGJhMjIyMTBmN2Ex
NzRiYTcwN2VkMjYxODBjMThmZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5j
cHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlSTykKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAg
ICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFj
ZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkg
PT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRv
cHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250
ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZv
cm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30K
KwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1
cmZhY2UuZ2V0KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tp
bmdTdG9yZTogeworICAgICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1dG8gY3IgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfb3Bl
cmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAg
ICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0K
KworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZh
Y2U7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNl
LmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRf
Y29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisg
ICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAg
ICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3Vy
ZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4g
aW1hZ2VEYXRhOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRl
c3RQb2ludCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsK
KworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1Jl
Y3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVz
KGRlc3RQb2ludCk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1
cmZhY2UuZ2V0KCksIGRlc3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxlZC55KCksIHNy
Y1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk0OWZmMzczNzQ4ODI0
NTUxZTNlNGVmZTVhMmI0ZDY2OTNmMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgOiBwdWJs
aWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKwor
cHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fp
cm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlm
NzY5YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8u
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAot
I2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5
ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRT
aXplOwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1h
Z2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgot
I2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBS
ZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWly
byBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3Jl
bmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZv
aWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVy
cmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkg
b3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQot
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWlu
dDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3Np
dG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExh
eWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAg
IHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3Bh
Y2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8v
IEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
OTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hl
YXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGll
cy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNl
U1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdC
MzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMy
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
aWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0Nv
bnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0
Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFD
RSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNl
ID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENG
KENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAg
IGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVm
KCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlm
Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZm
ZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRT
aXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNz
KSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNv
bnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwot
ICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAg
ICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0g
ZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2Fs
ZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxv
YXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVz
b2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5p
c0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9
IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5k
ZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUu
d2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50
LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0g
ICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9
IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1C
eXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVz
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1h
eGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgp
IHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUg
PT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5j
b2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNn
Q29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0g
RmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpOwotICAgICAg
ICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0
YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5z
dXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4
dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8v
IElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4K
LSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRh
LmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAg
ICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0j
aWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAg
ICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsK
LSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQo
KSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0
IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZv
aWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2Ug
dGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0
YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAg
ICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0
YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7
Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNv
bnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsK
LSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGlt
YWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVu
ZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAg
IC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRo
cmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNz
IGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgp
IGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25s
eSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0g
ICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJl
Y2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0
YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsK
LSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5o
ZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBj
b25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0
IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBh
Y2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3Np
Z25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90
YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1
cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0
KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1
cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dD
b250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdl
UmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRo
KCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91
bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRo
SW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1h
Z2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1h
Z2VSZWY+JiYgaW1hZ2UsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgaW50ZXJuYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBs
b2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7
Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOwot
ICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAg
ICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0Lmdl
dCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0K
LVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
LXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAg
IGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
V1RGTW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCksIGludGVybmFsU2l6ZSgpLCBtX3Jlc29sdXRp
b25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNp
emUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNp
emUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2
ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgbG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6
Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAg
IHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENG
KENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZl
R2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQ
cm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAg
ICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2Uo
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAo
IWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+
bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VC
dWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJv
bUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0
IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8g
RHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNl
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05h
dGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
fHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYg
KFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJh
d2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAg
ICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJp
bmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGlt
YWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9
IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQot
ICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBz
b3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2lu
dCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAg
ICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlm
IGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCku
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5
NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZs
b2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0g
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4g
ImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewot
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwot
ICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0
b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVt
dWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkg
ewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVs
dGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQo
KSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAq
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAg
IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwg
ZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBk
YXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIs
IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1h
cEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBl
bHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNh
bFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFj
ZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdl
U2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAg
IH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1
dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBt
X2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFjZDIzNzU4MWY5
NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChDR0NvbnRleHRHZXRU
eXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAgICAgIHJldHVybiBD
R0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAgCisgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRp
ZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoKQorewor
ICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJh
bnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYmFja2VuZFNpemUu
d2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXpl
LndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFnZTsKK30K
Kworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShp
bWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJ
blVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2Fs
U2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdl
KCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1Jl
Y3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2lu
Z1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3
TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0
U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1
dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0
aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYgKENGRXF1YWwodXRp
LmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxw
aGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJs
YWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFp
bWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwcm90ZWN0
ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIHNp
emVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAg
ICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOworCisg
ICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+
ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3RlZFBpeGVsQXJyYXkt
PmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGlt
ZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUg
PT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsK
KyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAg
ICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJh
Y2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5k
U2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dD
b250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
YmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tl
bmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsK
KyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFn
ZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4g
eyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRv
Q0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICBy
ZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwi
X3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZl
ciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOwor
CisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+
KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJ
bWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVz
ID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVy
biB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNB
Y2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09
IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVz
dENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0g
eyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3Jt
YXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZv
cm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7
CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7
CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMo
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVz
dFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9y
bWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3Jt
YXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxw
aGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFs
cGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBt
YWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1h
Z2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJv
d3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3Jt
YXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0
LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NhMzk4MDM0ZjI1YTMz
NDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwor
Citwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENv
bG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxz
KAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZv
cm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNy
Y1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWlu
dDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MTRhNmU3YWM4YjE1N2Qz
NDk3Y2I5NTY4ZDI3M2RhZjY4NzNmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0
OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAg
aWYgKCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0
VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0
ZXMgPSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgp
LCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVm
YXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
Y2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtd
ICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMs
IHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3Zl
KGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQoreworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNv
bnRleHQpKQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0
ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIp
OworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNp
emUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdp
bmRvdyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBi
YWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIs
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdl
QnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihX
VEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkK
K3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAg
IEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
cikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJh
Y2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5
QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAg
ICAgICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4
LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAg
ICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwor
fQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWY2
NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1
YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29u
c3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1h
Z2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0
cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4m
Jik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRD
b2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9
CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlk
ZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQot
I2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNl
LmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0
dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZp
bmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0
YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17
Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlm
IChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2Fw
IGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJl
IEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0g
PSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRl
c3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVs
dGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1
ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRh
dGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElP
U3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNf
QVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCog
b3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRC
eXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwot
ICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndp
ZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMg
PSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0g
b3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVO
VVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFD
Q0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRo
LCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShy
ZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBz
dXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVh
ICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCog
cmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAo
IXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+
IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgp
OwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0
KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3Qu
eCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53
aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54
OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9
Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRo
KCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkK
LSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBl
bmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGlu
dCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAg
ICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAg
ZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3Ro
ID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdp
bnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
ZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBv
cmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51
bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVz
dFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7
Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93
czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFk
YXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAg
ICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAg
c3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0g
ICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBk
ZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRl
cyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwot
Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3Jj
LCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAg
ICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlm
ZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAo
c3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJf
dCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsg
Kyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgp
OyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3Mg
KyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNl
KTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAg
ICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53
aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdo
dCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVz
UGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAg
ICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdC
QS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRo
ICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBp
ZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZl
R2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2Fm
ZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owot
ICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAg
ICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qu
aGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJl
Y3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50
LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndp
ZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VS
VChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBD
aGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VS
ZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgp
KTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+
IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChk
ZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBz
aXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAg
ICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAg
Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsg
c291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVy
YXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBz
cmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93
Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2Fz
dDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsK
LSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5
dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7
Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3Jj
LCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZl
cmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0g
PSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93
c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
c3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYm
IGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAo
c3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBi
YXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJh
c2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJm
YWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1Bl
clJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVz
dEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lk
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0
YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAg
ICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVz
ID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBS
R0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0g
c3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIz
NzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJJbWFn
ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5
cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1
Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBD
R0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwot
Ci1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7
Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAg
IENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUg
SW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRy
PENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1h
cEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3Ig
YWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wg
YWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
IGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZGY3Y2UxOGU0MTEwOTg5NzRlNTczNDM0MDY1Y2UxOThiOTc3OTJmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBIQVZFKElP
U1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
b3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNr
ZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sK
KyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0
ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9
IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+
IG1heFNpemUud2lkdGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisK
K1JldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3Vy
ZmFjZSkKKyAgICAgICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dD
b250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRD
b2xvclNwYWNlKGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBDR0NvbG9yU3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNl
OjpjcmVhdGUoYmFja2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9z
dFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYg
KGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAg
IHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xv
clNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJl
dHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNw
YWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQor
CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
CisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJm
YWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1
cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50
b3RhbEJ5dGVzKCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30K
KwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JG
b3JtYXQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBj
b25zdAoreworICAgIHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwor
fQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRv
TmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RG
TW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0g
c3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRl
c3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tl
ciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3Jp
dGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7
CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgor
ICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2
IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmls
bFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRmYzBmMDQzZjA1NWE3N2RjZWY2NjNlZTRmYzdiZjY1Yjk2ZjY4
NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVy
cmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6
ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1h
Z2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdl
KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0
YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJy
aWRlOworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCmluZGV4IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJh
YTgyMzMyZGUyZDExMWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
CkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJ
bWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hl
ZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwog
Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKTsKLSAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFy
ZWEoKSAqIDQpOworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVy
LT5iYWNrZW5kU2l6ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNs
YW1wZWRBcmVhKCkgKiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2
Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAt
MzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNl
UG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0
YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYg
QEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4m
JiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdU
Rk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0g
ICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRp
ZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNp
emUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQ
aXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IGZkOGU1ZThl
MmU5NGU3MDU0ODk2ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUzM2NhNWY2MTMxZTUyZTFlOWQ0
NWQ3YzAyMTYzZGU0YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMTEs
NyArMTExLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9
IGlucHV0RWZmZWN0KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBpbWFnZVJlc3Vs
dCA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVs
QXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAg
IGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li45NTE4MDBl
ZGE5MTc0MTFjODhiOWE0YmU1NTE0Y2YxZjY4Yzc4Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMyArMjg2LDE1IEBA
IHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0
IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAg
SW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlE
aW1lbnNpb25zKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0byBpbWFnZURhdGEgPSBy
ZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVz
KTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgSW50U2l6
ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOwogCisgICAgVmVjdG9y
PGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICAKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAg
ICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0
SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkp
OworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggZmEwNDEzYzAwZGE0
M2FjNWRmNTVlNWUwMWY2OTQ0YWI5ZWRhNzQ4My4uOTc4YzU1YTY3YjhkZTcyMGU5ZmE3OWJkOGNj
MzRkNzQ1MjhhMDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yNiw3
ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
QEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQgPyBpbWFn
ZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBhMTllYTA1Mzc1ODE5Y2VjZGFjMjVkNWQ5
NjNkNTQ0ZGQ0ZDFhOTY5Li4yNjU0NDBmNDM5NDJhZmE2YWEyOThkYWY0ZWMwMmVlM2Q5NWNlYzgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFQ29tcG9z
aXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJh
eS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDcgKzIyOSw4IEBAIHZvaWQgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIg
PSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQykgewotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRvKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRv
KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVs
bHB0cjsKICAgICAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA2MmMyZjgzMzY1MzU4Njg0NGQ5ZjM5MGVl
YTVlZGMxMDhlMzBhMzg4Li5hNmUzZjRiYmFhMjQ0OTdmOTI2MzQ2NTY5NzVmZmI4N2RjN2FiOWYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRl
ICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcxLDEyICszNzEsMTMg
QEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiByZXN1bHRJbWFnZTsKKyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlOwogICAgIGlmICht
X3ByZXNlcnZlQWxwaGEpCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRv
KiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVs
bHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTM5NSw3ICszOTYsNyBAQCB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgKnJlc3Vs
dEltYWdlLAorICAgICAgICAqZHN0UGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRo
KCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwZTk0NGRmMDBhOTVjYzA2ZDI2YWE0MmYx
NjllZTZhNDZmNWEyNzgyLi41MzczNTUwNDUzZTQ5ODYyYzBlNDE2ZjJkY2MyNTZiNDcwYzkxOTUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1
ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0LDcgKzk0LDggQEAgdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBBU1NFUlQobV94Q2hh
bm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRz
dFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRv
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVj
Yi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5OSwxNSBA
QCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAog
ICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZv
aWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51
bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKLSAgICBp
ZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdElt
YWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
c2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFk
b3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0gICAgcmVz
dWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBv
aW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBh
dXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRv
dy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgp
LCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0SW1hZ2Ut
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1h
Z2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA0OWJhODQxNzNj
MmQxYTk5NTRlNTYxMzkwY2UwM2MyNGJjOTBjODFiLi5kN2VkOWIyNDQ5MDE3OGZmYmZiZWIxY2Q0
MmJlYTVlOGZmMTU5ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpAQCAt
NTIyLDE0ICs1MjMsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBV
aW50OENsYW1wZWRBcnJheSogcmVzdWx0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0UGl4ZWxBcnJheSkKKyAgICBhdXRvKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRz
dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRy
OworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1bHRQaXhlbEFy
cmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAKICAgICBpZiAoIW1fc3RkWCAm
JiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CkBAIC01NDMsNyArNTQ1LDcgQEAgdm9pZCBGRUdh
dXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXRtcEltYWdlRGF0
YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1BcHBseSgqcmVzdWx0UGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoKmRzdFBpeGVsQXJyYXksICp0bXBJbWFn
ZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
KTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcAppbmRleCAwYmE1MWI3NjEyZjJjYjJmNjlmNGY2MDIxY2VmY2JlM2MyZTc0MmQzLi42
ZGI4N2ZkNTQ1YThmMWRkYTdkOWI1ODhhMjU0MDY1NWE1NzhmYjI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3Myw3ICs0NzQs
OCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkq
IHJlc3V0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0
YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMjUxNzgxY2E1YWE1MWY3ODAyN2FkNTA4ZGY5YWM2
MTBjNjc5NGZhNS4uY2JkNDI0MTk3NjU3MGE4NzM5NDUyMDBhOTEzZTBlOWU2NTlhYjQyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjM0LDcgKzIzNCw4IEBAIHZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAo
IWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4
IDgyMjc4NzlmNTc4NmRlNjM1MDU0MzZmMWI0ODAxN2MwYWRkMjhlZjYuLjE5ODBhYjkzNGU1Njg3
MmI2MjY0MjFmMDIyMTJlODJmOTk4YTIxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTI3LDcg
KzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAt
Mzk1LDcgKzM5NSw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICgh
cGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5
ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uYTllOGZjYTJjNWQxZGNiYjY2
N2E1YjdjYzBkNGY3NzAyNDg0ZjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjcsMTAgKzI3
LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKQEAgLTE5OSw3
ICsxOTksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhl
bHMoKQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAgIHVpbnQ4X3QqIHBpeGVsRGF0
YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKICAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdl
QXJyYXktPmxlbmd0aCgpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6Omlt
YWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBp
bWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpKTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdl
QnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGlu
YXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1MiArNDM4LDUyIEBAIHZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNv
cHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAg
IGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIg
YSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VC
dWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
aW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhD
bGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAg
ICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6
ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcygqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAK
IHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZp
bHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZm
ZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkg
PDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBp
bWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkg
ewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZl
ci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAg
ICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7
CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29weVByZW11bHRpcGx5
aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvcHlJ
bWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3Qp
OworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKQEAgLTQ5NywxMyArNDk3LDEwIEBAIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJS
ZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJF
ZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCks
IHRoaXMpOwogCkBAIC01MTUsMTEgKzUxMiwxMSBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVy
RWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHJlc3VsdFNpemUu
YXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICByZXR1cm4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJz
LCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZp
bHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUzMSw3ICs1MjgsNyBAQCBVaW50OENsYW1wZWRBcnJh
eSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3Vs
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgo
cmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICByZXR1cm4g
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4
IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIuLmFmNDYzZWZlYjAxMzZh
YzYxOGUyOTljZDA4ZDQ0ODM4ZDBlZjU2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNDAsNiArNDAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKIAogdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIApAQCAtMTUzLDgg
KzE1NCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKICAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2
YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2gg
Y29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xODIsOCArMTgzLDggQEAgcHJpdmF0
ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRy
PEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0
ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b21tb24uY3BwCmluZGV4IDFlMDM1YTdlZWYyODAzY2Y2NTk5MmQwNDljOWY4YjU1NmJjZWNhZWMu
LjkxOGUxOGFmNWUxMmZmOTA0OTQ4M2E3OGVmMWJhODJkNzM1OGMyYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwYWludFRv
Q2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMp
CiAgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMWIzOTQxNWViYjIxYmU2Y2VmYWM1
OTA2ZjdkNDI1MWI4MzU5M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKERJUkVDVDJE
KQotCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1
ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9V
bmlxdWVBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFN3aXp6bGUgdGhlIHJl
ZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBzd2l6emxlQW5kUHJlbXVs
dGlwbHkoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVk
IGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUsIHVpbnQ4
X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dDb3VudDsg
Kyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28gc2l6ZWQs
IHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8gY29ycmVz
cG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGNv
bnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
c3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVz
dFJvd3MgKyBkZXN0U3RyaWRlICogeTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8
IGNvbENvdW50OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQb3NpdGlvbiA9IHgg
KiA0OwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1BpeGVsID0gc3JjUm93ICsgeDsK
LQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgKFApUkdCQSBieXRlcy4g
V2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQQkdSQSB0byBiZSBjb21wYXRpYmxl
LgotICAgICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNyY1BpeGVsICYgMHhGRjAwMDAwMCkg
Pj4gMjQ7Ci0gICAgICAgICAgICB1aW50MzJfdCByZWQgPSAoKnNyY1BpeGVsICYgMHgwMEZGMDAw
MCkgPj4gMTY7Ci0gICAgICAgICAgICB1aW50MzJfdCBncmVlbiA9ICgqc3JjUGl4ZWwgJiAweDAw
MDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdWludDMyX3QgYmx1ZSA9ICgqc3JjUGl4ZWwgJiAw
eDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFs
cGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAy
NTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd1tieXRl
UG9zaXRpb25dICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsg
MV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMl0gPSBibHVl
OwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAzXSA9IGFscGhhOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwg
Y29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWlu
dDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBp
ZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVm
ZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJj
ZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUg
PSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUg
PSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNl
dCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dP
ZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgp
OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVy
UG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VS
ZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93
cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RS
b3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLSAgICAgICAg
bWVtY3B5KGRlc3RSb3csIHNyY1JvdywgYnl0ZXNQZXJSb3cpOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4g
UkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3Jt
YXQ+Ci1ib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9u
KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNp
emUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUs
IHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0g
ICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVz
dEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhz
b3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3Ry
aWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3Ry
aWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dP
ZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0
Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigp
LnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1
ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291
cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNl
UmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNy
Y1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBk
ZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7ICsreCkgewot
ICAgICAgICAgICAgdW5zaWduZWQgcG9zID0geCAqIDQ7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVk
IHJlZCA9IHNyY1Jvd1t4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93W3gg
KyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJdOwotICAgICAg
ICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dbeCArIDNdOwotCi0gICAgICAgICAgICBpZiAo
ZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAg
ICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBn
cmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
Ymx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9
IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKLSAgICAgICAgICAgICpwaXhlbCA9IChh
bHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpj
b3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAt
PkdldFNpemUoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0b3JlU2l6ZS53
aWR0aCgpIC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKLQotICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9
IHJlY3Q7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAoIUlu
dFJlY3QoSW50UG9pbnQoKSwgYmFja2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2NhbGVkUmVjdCkp
IHsKLSAgICAgICAgLy8gUmVxdWVzdGVkIHJlY3QgaXMgb3V0c2lkZSB0aGUgYnVmZmVyLiBSZXR1
cm4gemVyby1maWxsZWQgYnVmZmVyLgotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3Qoc2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIHJlY3Quc2l6
ZSgpLCByZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJE
YXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAg
ICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKLSAgICBkYXRh
LnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4gZGF0YS5jYXBh
Y2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwotfQotCi0vLyBTd2l6emxlIHRoZSByZWQg
YW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0Pgotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50
OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENv
dW50ID0gYnl0ZUNvdW50IC8gNDsKLSAgICBhdXRvKiBwaXhlbERhdGEgPSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
aXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgcGl4ZWwgPSAqcGl4ZWxEYXRhOwot
ICAgICAgICBzaXplX3QgYnl0ZVBvc2l0aW9uID0gaSAqIDQ7Ci0KLSAgICAgICAgdWludDMyX3Qg
YWxwaGEgPSAocGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdWludDMyX3QgcmVk
ID0gKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90IGdyZWVuID0g
KHBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgdWludDMyX3QgYmx1ZSA9IChwaXhl
bCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgIC8vIChQKVJHQkEgLT4gUEJHUkEKLSAgICAgICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBy
ZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0g
KGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1
ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgICpwaXhlbERhdGEgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4
IHwgYmx1ZTsKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi0vLyBOb3RlOiBBc3N1
bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIGluUGxhY2VDaGFuZ2VQcmVt
dWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewot
ICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHggPSBwaXhl
bENvdW50ICogNDsKLQotICAgICAgICB1bnNpZ25lZCByZWQgPSBieXRlRGF0YVt4XTsKLSAgICAg
ICAgdW5zaWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07Ci0gICAgICAgIHVuc2lnbmVkIGJs
dWUgPSBieXRlRGF0YVt4ICsgMl07Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0gYnl0ZURhdGFb
eCArIDNdOwotCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9
IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSkg
KyBpOwotICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVu
ICA8PCA4IHwgYmx1ZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2Nl
bGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0Ci17
Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0g
ICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLQotICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1hdCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByYXdCaXRtYXBTaXplID0gYml0
bWFwLT5HZXRTaXplKCk7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplKGNsYW1wVG88aW50PihyYXdC
aXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUuaGVpZ2h0KSk7Ci0K
LSAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50KCkgJiYgcmVjdC5zaXplKCkgPT0g
Yml0bWFwU2l6ZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1CeXRlcy51bnNhZmVHZXQo
KSA9PSBkYXRhLnNpemUoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBPbmx5IHdhbnQgcGFy
dCBvZiB0aGUgYml0bWFwLgotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbURhdGEocmVjdCwgcmVz
dWx0KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChieXRl
Rm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKLSAgICAgICAgLy8gSW4tbWVtb3J5IGRhdGEgZG9l
cyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8gc3dpenpsZSB0aGUgcmVzdWx0cy4K
LSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9u
PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCks
IHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpblBsYWNlQ2hh
bmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJ
Zk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNvbnN0Ci17Ci0g
ICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZT
eW5jKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0
bWFwLT5HZXRQaXhlbFNpemUoKTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBwaXhlbFNpemUuYXJl
YTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0g
ICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQp
OwotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0aCgpICogNDsK
LQotICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFj
a2VkIElEMkQxQml0bWFwMQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKLSAg
ICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1h
cFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9P
UFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VM
VCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChwaXhlbFNpemUsIG51bGxwdHIs
IGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHRh
cmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQy
RDE6OlJlY3RVKDAsIDAsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOwot
ICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0
KCksICZkYXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7Ci0gICAgaHIgPSBjcHVC
aXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbWFwcGVk
RGF0YS5iaXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWVuc3VyZUJhY2tp
bmdTdG9yZShwaXhlbFNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTb2Z0
d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBE
aXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICBpZiAoZGVzaXJlZEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQotICAgICAgICBzd2l6emxl
QW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFw
cGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBw
ZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotICAgIGVsc2UK
LSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVs
U2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5k
YXRhKCkpOwotCi0gICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7Ci0KLSAgICBiaXRtYXBC
dWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwotCi0gICAgaHIgPSBjcHVCaXRt
YXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4dC0+
YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBB
U1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdp
bnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxp
bnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIGRlc3R4ICo9IHJlc29s
dXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGlu
dD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgZW5keCAqPSByZXNv
bHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgp
KTsKLQotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3Jp
Z2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2Vk
PGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVzdHkgKj0gcmVz
b2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBB
U1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3Jp
Z2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8
PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2Vk
PGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgZW5keSAqPSBy
ZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsK
LSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0KLSAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5H
ZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzb3VyY2VT
aXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNpemUud2lk
dGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVp
Z2h0KCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzaXplLmhlaWdodCgp
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHNpemUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc291cmNlU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAg
IG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKLSAg
ICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0KTsKLSAgICAgICAgaWYgKCFjb3B5
UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291cmNlLCBzb3VyY2VGb3JtYXQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRt
YXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRh
Ojpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0gc291cmNlUmVjdDsKLSAgICBp
ZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0QnVmZmVyUG9zaXRpb24gPSBz
b3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291cmNlRm9ybWF0ID09IGJ5dGVGb3Jt
YXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc291cmNlUmVjdCwg
c291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEu
ZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICByZXR1cm4gY29w
eVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUo
KSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZm
ZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0
UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4o
c291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9y
ZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKLXsKLSAgICBpZiAoYml0bWFw
QnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0YS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFw
LT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IGJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBwaXhlbFNpemUuaGVpZ2h0ICogNDsK
LSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4gUkdCQS4gV2UgbmVlZCB0
byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBjb21wYXRpYmxlCi0gICAgLy8g
d2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNlLgotICAgIGlmIChieXRlRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAg
aW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+IFBCR1JBCi0gICAgZWxzZQotICAg
ICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
PihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQotCi0gICAgYXV0
byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShudWxscHRyLCBkYXRhLmRhdGEo
KSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci19Ci0KLUNPTVB0
cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVk
KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQot
ICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkg
ewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChR
dWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgewotICAgICAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gYml0bWFwKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJh
dyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4KLSAgICAgICAg
ICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4
ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZy
b21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IGJpdG1hcC0+R2V0
UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0g
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0
aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJy
ZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3Qg
YWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJh
dyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRy
PElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVC
aXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQy
RDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQx
X0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0g
ICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAt
PkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFw
UHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghc291cmNlQ1BVQml0bWFwKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJv
bUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNU
IG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01B
UF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJ
bnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKLSAgICBociA9
IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgp
LCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJE
OjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVC
aXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4
dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTRkOGE0ODIyZjEyNWY0MDZmMzAwNzc0
N2ZmOTM1OGMxNTZhMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1pbnRlcmZhY2UgSUQy
RDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLXN0cnVjdCBJbWFnZUJ1
ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLQotICAgIC8vIE9u
bHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBtdXRhYmxlIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBieXRlRm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3luYyB7IEluU3lu
YywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKLSAgICBtdXRhYmxlIEJpdG1h
cEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91
dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0OwotICAgIHZv
aWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRh
cmdldCopOwotCi0gICAgYm9vbCBlbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYpIGNv
bnN0OwotICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAgYm9vbCByZWFk
RGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3Jt
YXQpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0JiwgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tU291
cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOwotICAgIHZvaWQgbWFya0J1ZmZlck91dE9mU3luYygpIHsgYml0
bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYzsgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0YjdhOGVjYmI4MzBh
NTI2N2Y5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQy
ZDFfMS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNj
YWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4
dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2U6
OlNSR0IsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsICZjb250ZXh0LCBzdWNjZXNzKSk7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVw
IGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0g
ICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKHNjYWxlZFNpemUud2lkdGgoKSAv
IHNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCkpKTsKLSAg
ICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgLypjb2xvclNw
YWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2VzcykKLSAgICA6
IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25T
Y2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4g
ZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IHN0ZDo6Y2VpbChyZXNvbHV0aW9uU2Nh
bGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IHN0ZDo6Y2VpbChy
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRT
aXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2Nh
bGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAg
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhl
aWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBv
dmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENo
ZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9k
YXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQg
PyB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byog
cmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJU
YXJnZXQoKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAg
ICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0
T2ZTaXplKG1fbG9naWNhbFNpemUsIHJlbmRlclRhcmdldCwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFJFU1VMVCBo
ciA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmbV9kYXRhLmJpdG1hcCk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEucGxhdGZvcm1Db250
ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5n
ZXQoKSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVlZGVk
KCk7Ci0gICAgfSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9mU3lu
YygpOwotICAgIH0pOwotICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1
ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2VzcykK
LSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgaW1hZ2VDb2xvclNwYWNl
LCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBudWxscHRyLCBzdWNjZXNzKQotewotfQotCi1JbWFn
ZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1HcmFwaGljc0NvbnRleHQmIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIGNv
bnRleHQoKS5mbHVzaCgpOwotfQotCi1zdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFy
Z2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBG
bG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpIDogRmxv
YXRTaXplKCk7Ci0KLSAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VT
aXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3Jv
cHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBib3VuZHMp
OwotICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewotICAgICAgICAgICAgYXV0byBzb3VyY2VS
ZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7
Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21CaXRtYXAo
bnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
aHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRl
cm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHNj
YWxlZCB2ZXJzaW9uCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIGF1dG8gYml0bWFwVGFy
Z2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJT
Y2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXpl
KCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUg
bG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0g
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxl
OwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0g
ICAgSFJFU1VMVCBociA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkt
PnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBz
aW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBs
b2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJl
c29sdXRpb24pOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17
Ci0gICAgLy8gRklYTUU6IFNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIG9uLWhhcmR3YXJlIGltYWdl
LgotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIg
PSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVy
ZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBociA9
IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFz
a2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgotICAg
IGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0Vt
cHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwotCi0g
ICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkg
KiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAg
IGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0
b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplKTsKLSAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGlt
ZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNl
LT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAg
YWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBtX2RhdGEuY29tcGF0aWJsZUJpdG1h
cChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0gICAg
RmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJp
dG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBj
dXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRl
eHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRvIG91
ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5LT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVy
aW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShD
b3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0g
cmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAo
cGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNy
Y1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNy
Y1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNp
b25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCks
IGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIElu
dFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRT
b3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJG
b3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91
YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
cjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
LVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi12b2lkIEltYWdlQnVmZmVy
Ojp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3MGFiZWRmMGE2
MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCisjaW5jbHVkZSA8ZDJk
MV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHdpbmNvZGVjLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2Vu
ZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAg
IGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBw
bGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0
cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFw
aGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIGF1dG8gYml0bWFwQ29u
dGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoc2l6ZSwgcmVu
ZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwOworICAgIEhSRVNVTFQg
aHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IG1h
a2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0
aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworICAg
IH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKKyAg
ICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihwbGF0
Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCksIFdU
Rk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoc2l6
ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBiaXRtYXApCisgICAgOiBJbWFnZUJ1
ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUocGxhdGZvcm1Db250
ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgICwgbV9iaXRtYXAo
V1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sK
KyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5y
ZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFT
VUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2Up
OworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0
YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRp
bmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5n
U3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBE
b250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OworICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
aWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7CisgICAgICAgIEQyRDFfUkVD
VF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2lu
Z1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworCisgICAgfQorCisg
ICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwg
SUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCit7CisgICAgRmxvYXRT
aXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6
ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53
aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihi
b3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRC
aXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKKyAg
ICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9
IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxw
dHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0
bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRl
cm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1l
bnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKworICAg
IGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRh
cmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdl
KSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgQ09N
UHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VMVCBo
ciA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50
ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdl
QWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwg
aW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
fQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJs
ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIGxvYWREYXRh
VG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJl
dHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgp
ID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgaWYgKGJpdG1h
cFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFw
OworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFj
a2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gbV9i
aXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICAgICAgICAg
ICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1
cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0
bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVC
aXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMo
KSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
Y29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVs
bHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJpdG1hcDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh
dXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJUKHNpemUuaGVp
Z2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKKyAgICBpZiAobnVt
Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRh
cmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0Jp
dG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCisgICAgY29udGV4dC0+
ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNl
Q29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CisgICAgaWYgKCFz
b3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0
cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJU
SUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRN
QVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERp
cmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29u
dGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0
ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXAp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBo
ciA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0
KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7CisgICAgaHIg
PSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3Vy
Y2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsK
KyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRl
eHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0
ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1h
cHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21w
YXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICByZXR1
cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJpdG1h
cChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworCisgICAg
RmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJp
dG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBj
dXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQg
PT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkp
CisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwor
fQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNkYmE3ZWU1ZWVmZjJmNzFhYzM5Mzk2
MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQg
eworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJy
aWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJvdGVj
dGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdlUHRyIG1fYml0bWFwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3Bw
CmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0ZTVjY2QzNzAxYmQuLjMyYmY4NmJj
NmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0
dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1lcmF0b3IsIGZwc0Rlbm9taW5hdG9y
OwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlKCksICZmcHNO
dW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdl
QnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAgICAgICAgICAgImZvcm1hdCIsIEdf
VFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGlt
YWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1Li4wNDJkNWRk
N2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJveFNo
YXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgpA
QCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJh
c3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgICAgIGlmIChp
bWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRS
ZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBp
bWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBhdXRv
KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4
ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAg
ICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
bHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNw
cAppbmRleCBkNzg2OTRhYWU3YjM1OTJiMzYyNTI2N2Q5NTAwMTY2YWJlMDUwZmY5Li5lMjg1OTJh
ODA1NjNiZGQ4NWFhMjQ3ZDVjOGUwYjE1NWI5YzE4MjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM0NSw3ICsz
NDUsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKICAgICAgICAgSW50U2l6ZSBleHBhbmRl
ZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5nQm94LnNpemUoKSk7CiAgICAg
ICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4o
Y2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkp
OwotICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkp
CisgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQog
ICAgICAgICAgICAgaW1hZ2VCdWZmZXIucmVzZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCA5ZmJiMWZkZjBkODI3ODg0
NjY1Y2VjNzczN2IzMTBiNTAzMWQ0MGM1Li4wZjg4NDI5MDBmODUxYTdkOTJmODg2Y2E2NmY5MWE5
MTBlOWZlZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJh
bWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QKICAgICBpZiAoIXNuYXBzaG90KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2hhcmVkU25hcHNob3QgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxTaXplKCksIHsg
fSk7CisgICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0pOwogICAgIGlmICghc2hhcmVkU25h
cHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389414</attachid>
            <date>2020-01-31 14:22:08 -0800</date>
            <delta_ts>2020-02-18 09:58:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200131142207.patch</filename>
            <type>text/plain</type>
            <size>361318</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uYzA2NjkxMzY5YWYwZTFiYmFlYTgzYjVmMWM2ZjM4
YzIyZDliNDU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1OCBAQAorMjAyMC0wMS0zMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3Rv
cmVkIHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBi
YWNrLWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAg
ICAgIEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRk
ZWQgdG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBh
Y2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWls
cy4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhl
IHJlc3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBi
ZSBjcmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGlj
aAorICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdl
IHRvIHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAg
QmFzZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhl
IHJlbmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGlu
c3RlYWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVj
aXNpb25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJC
YWNrZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcg
bmV3IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVm
ZmVyQmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50
CisgICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5k
ZXJpbmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBw
bGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
bGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2Fs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZv
cm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdT
aGFkb3dMYXllckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29t
cG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNj
ZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFj
a2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChXZWJDb3Jl
OjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5r
SW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb21wYXRpYmxlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjp1cGRhdGVTYW1wbGVCdWZmZXIpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToKKworMjAyMC0w
MS0yOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFnZURhdGEoKSBy
ZXR1cm4gYW5kIHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoKSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAgICAgICAgIGlu
IG9uZSBmdW5jdGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAgICAgICAtLSBN
YWtlIGdldEltYWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4gc2luY2UgdGhl
IGNhbnZhcyBjb2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJldHVybmVk
IFVpbnQ4Q2xhbXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAgIGFuZCBzZW5k
IGl0IHRvIEphdmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFnZUJ1ZmZlcjo6
cHV0Qnl0ZUFycmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFuZAorICAgICAg
ICAgICBtYWtlIGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFycmF5IGhhcyB0
byBiZSBhc3NvY2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQgc2VwYXJhdGlu
ZyB0aGVtIGRvZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAtLSBSZW1vdmUg
dGhlIGVudW0gSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUgY2FsbGVycyBu
ZWVkIHRvCisgICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4gbG9naWNhbCBj
b29yZGluYXRlcy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUgc2NhbGVkIGFj
Y29yZGluZyB0byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgor
ICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1bmN0aW9uIHRv
IEltYWdlQnVmZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYXJl
IG5vdCAKKyAgICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRlbGV0ZSBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0cyBib2R5IHRv
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZhdGUgZnVuY3Rp
b25zIGJlIHB1YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbFVuaXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5pdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0NGRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmg6CisgICAgICAgIEFsbCB0aGUgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMg
aGF2ZSB0byBiZSBwYXNzZWQgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gVG8KKyAgICAgICAgZGVh
bCB3aXRoIHRoZSBwaXhlbHMnIGRhdGEgd2UgbmVlZCB0byBzY2FsZSB0aGVtIGJ5IHRoZSByZXNv
bHV0aW9uU2NhbGUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICBUaGlzIHdhcyB0aGUg
b25seSBwbGFjZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3RhbmdsZSBpbiBhIHRoZSBiYWNrLWVu
ZAorICAgICAgICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVT
eXN0ZW0uIEluc3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhlIHJlY3RhbmdsZSBpbiBsb2dp
Y2FsIGNvb3JkaW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6OnNpemUoKSBzaW5jZQorICAg
ICAgICBpdCBtdXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpIHdoZW4gdGhlIElt
YWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFBy
ZU11bHRpcGxpZWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNy
ZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMC0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRhbHlzdDogVHJpcGxlIGNsaWNraW5nIHRv
IHNlbGVjdCBhIHNlbnRlbmNlIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2VsZWN0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGE4YzBjYWY1ZTFkYWUwMGY0MjM0ZmNjMzkzN2YwY2RjMDFlZTQ0YTguLmJhNzgxYzdhMGRi
ZmQzODBiODU0NWY1NzI1MGViM2FhYWRiODViN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMjAtMDEtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4K
KworICAgICAgICBBbGxvdyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorCiAyMDIwLTAxLTI4ICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIG1hY0NhdGFseXN0OiBUcmlwbGUgY2xp
Y2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2UgcmVzdWx0cyBpbiBhbiBlbXB0eSBzZWxlY3Rpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDU0ZGI3MTZhYzg3Y2FjNGQwMTMwZGQ4YTc5NTU0ZDBkNjc1
NjllNjkuLmJjNGIwY2I1MzA3NTUxOGQwMjM5MjAxNmQ3NzM2NzJiYTNkODFkMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtMTA0Miw2ICsxMDQyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuaApAQCAtMTA5Myw3ICsxMDk0LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2Vy
dmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMjYs
NiArMTEyNyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Q
YXR0ZXJuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFS
ZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UZXh0VHJhY2su
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNh
YjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4uNWQxNzc0M2VkMzg0MzAxMWZhODZjZTUxMWJlOTI5
MzMwOTkyOTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC04Myw4
ICs4Myw3IEBAIGlmICgke1VTRV9ESVJFQ1QyRH0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05h
dGl2ZUltYWdlRGlyZWN0MkQuY3BwCkBAIC0xMzIsOCArMTMxLDkgQEAgZWxzZSAoKQogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZURlY29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzYsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDlhYjQ2ODczOWVmMTFmZjYwOWI5NjI5Mjg4YmIwMWIx
NmRhNzAyYWEuLmY0YjliN2Y4ODY2YjEyNDFhODU1NzliMmU2MWY3YmFlNTQzZDg3NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC04NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4u
Y3BwCkBAIC0yMDEsNyArMjAwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhZWMzMjA2N2QzZTZmMmY0OWQxOTNlMGIxYTY2YmIwOTU5
MTE2MGM4Li4xMjIxNWFiMWQxMGZiZGQ4YWVjYTI2N2Y3MDg0NjM3MzViZjVmZWQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjkxLDggKzI5MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNyw3ICs1MjksOSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNGYzMDcxNTliN2VkODA2
ZWI4MTk1MmJiYTQ1ZjVjMDdhOGRjOTNlYi4uOGFmNzAxYzc3N2ZlMTUyZTIzMTZjYTUwMDA0M2Fk
OTcxYWNiZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExOSw3ICsxMTksNiBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxs
U2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5k
b3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZUZ1bGxzY3JlZW5XaW5kb3cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElP
YmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2NDFkNmZkNDM1ZTNjM2FlMDdmMGIwMDcyODg1MmFk
YjlhM2NiNzVlLi5lMDc2NGZiZjRhYjMzZmIwZjRkZDdjZjExYzg4NjA1YWQzYTI0NzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dApAQCAtMTg2NSw2ICsxODY1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0
aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VE
ZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNGRlNzVk
ZjhkZjBiOGY5MGU1YjI1ODE1N2VhZGE0YTY5ZDNiNTkxNi4uNzY2MWUyYjlhZDJiMzkxOGE1M2Ix
NjdlNDdiYzE0NTNhZTZmYzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOTEsOCAr
MjkxLDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wu
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNjNTg3Y2U1NjI3NDU3NTBhYTVi
ZDk0YzkxMDA4NzNiMTc5ZDRlMmIuLjgxNmVhZDgxNDIyOTcyODk2ZTk4NTVjMzZjNzVlNWMxNzg5
NTI0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMg
LyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBX
ZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4
MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlw
dFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYy
NUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjky
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1
NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAv
KiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAw
RDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdH
bHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTgzMywxNyArODMxLDE3IEBACiAJCTJEQUNCOUU5
MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFBy
b3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyREFGMzQzQjFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9
OwogCQkyREQ1QTcyNzFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDVBNzI2MUVC
RUU0N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2
NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEREUxQ0UwMUY1NzRBRDEwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcu
aCAqLzsgfTsKLQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNERTFGNTc0
QUFCMDBEMUEzNjUgLyogSlNWUkRpc3BsYXkuaCAqLzsgfTsKLQkJMkRERTFDRjgxRjU3NEMzOTAw
RDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFNjFGNTc0QkZGMDBEMUEzNjUgLyogSlNW
UkRpc3BsYXlDYXBhYmlsaXRpZXMuaCAqLzsgfTsKLQkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1
IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEREUxQ0U4MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50
LmggKi87IH07Ci0JCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50
UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RERFMUNFQTFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oICovOyB9
OwotCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUMxRjU3NEJGRjAwRDFBMzY1
IC8qIEpTVlJFeWUuaCAqLzsgfTsKLQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJF
eWVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRERFMUNFRTFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCAqLzsg
fTsKLQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFtZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0YwMUY1NzRCRkYw
MEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggKi87IH07Ci0JCTJEREUxRDA0MUY1NzREMDUwMEQx
QTM2NSAvKiBKU1ZSTGF5ZXJJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNGMjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5o
ICovOyB9OwotCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogSlNWUlBvc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y0MUY1NzRCRkYw
MEQxQTM2NSAvKiBKU1ZSUG9zZS5oICovOyB9OwotCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUg
LyogSlNWUlN0YWdlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRERTFDRjYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFt
ZXRlcnMuaCAqLzsgfTsKKwkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRTQxRjU3NEFFOTAw
RDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsK
KwkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRkMxRjU3
NENFRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgfTsKKwkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFE
MDIxRjU3NEQwMDAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgfTsKKwkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDYxRjU3NEQwQTAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJ
MkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgfTsKIAkJMkRFNzAwMjMxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlS
ZWZyZXNoTW9uaXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRFNzAwMjIxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hYy5oICovOyB9OwogCQkyREY1MTJDRTFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyREY1MTJDQzFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmggKi87IH07CiAJCTJERkE0ODhGMURCNTQxRDAwMDM2MkI5OSAvKiBCdWZmZXJTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERkE0
ODhFMURCNTQxQzIwMDM2MkI5OSAvKiBCdWZmZXJTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE1MSw2ICsyMTQ5LDcgQEAKIAkJNzI0
RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3
RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY3MjNENkE1MzIw
MENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2
NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5
M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI1ODEs
NyArMjU4MCw2IEBACiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRp
bWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFG
NEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87IH07CiAJCThC
RDM3QTY4MjAxQkIzOUMwMDExNzM0QSAvKiBSZWFkYWJsZVN0cmVhbUNodW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QkQzN0E2NzIwMUJCMzlDMDAx
MTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCThFNEM5NkREMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0Zl
dGNoUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDhFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLzsgfTsK
LQkJOEU2MjBFODEyMEVFNjAyNDAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTYyMEU4MDIw
RUU1RkZDMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RUM2Qzk2MzIwMUEyNTE2MDBG
QkZBNTMgLyogR2FwTGVuZ3RoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEY2NzU2MUIxMjg4
QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhGNjc1NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTAw
MTc3NDExMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3NzNFMTJFMDM0Nzgw
MDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07CkBAIC02NTU5LDkgKzY1
NTcsNiBAQAogCQkyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2
ZW50UmVnaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
RXZlbnRSZWdpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBE
ODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjgwMTM1
MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdB
bHRHbHlwaERlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDUsNiArOTYwMCwxNiBAQAog
CQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlC
QzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E2
MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbnRleHR1YWxJbWFn
ZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0dWFsSW1h
Z2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTgyM0UxRTU0
MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUMyM0UxRTU0NTAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0Qjcw
MDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFB
MkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDU0Nyw4ICsxMDU1Miw2IEBACiAJCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBH
YXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVu
Z3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDgxQUQ0NDgzNTAw
MzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4RTYyMEU3RTIwRUU1RkUyMDA3QkM1RUYgLyogVlJQbGF0Zm9y
bURpc3BsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlJQbGF0
Zm9ybURpc3BsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4RTYyMEU4MDIw
RUU1RkZDMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXBMZW5ndGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50
UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRRdWV1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlGMUVFMDA1MDhENUQgLyog
SlNFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFeGVjU3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjc4LDcgKzEyNjgxLDYgQEAK
IAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4
RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBT
VkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9u
dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4NDEs
OSArMjQ4NDMsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3ND
b250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENG
MTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMzQUMyM0UxRTU0NTAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBRDIzRTFF
NTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBODIz
RTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
ICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEg
LyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAw
RTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5MzUsNiArMjQ5NDAs
NyBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICov
LAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRy
b2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbElt
YWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyog
Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5
NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8sCkBAIC0yNTAzMiw3ICsyNTAzOCw4IEBACiAJ
CQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzJCQUMzQTQy
M0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMz
QTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlG
RUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2
MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhB
NzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTA4OSw2ICsyNTA5Niw3IEBA
CiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJ
CQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZF
NUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJBQzNBNjIzRTE3MzI4
MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4
OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAw
Mzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0Uy
MTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjU4MjQsNyAr
MjU4MzIsNiBAQAogCQkJCTY1NkI4NEQ3MEFFQTFDRTkwMEEwOTVCNCAvKiBuZXR3b3JrICovLAog
CQkJCTFBMkU2RTU2MENDNTUxRTAwMDRBMjA2MiAvKiBzcWwgKi8sCiAJCQkJQjJDM0Q5RUMwRDAw
NkMxRDAwRUY2RjI2IC8qIHRleHQgKi8sCi0JCQkJRTE4ODIzNUYyMDMxRjUwRjAwQjQyREYzIC8q
IHZyICovLAogCQkJCURGREI5MTJDRjhFODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVUYXNrUXVl
dWUuaCAqLywKIAkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1
ZS5jcHAgKi8sCiAJCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFs
dWUuaCAqLywKQEAgLTI4OTA4LDYgKzI4OTE1LDE3IEBACiAJCQlmaWxlcyA9ICgKIAkJCQk3MjE0
NDMzMjIyM0VDODVGMDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJNzIxNDQz
MzEyMjNFQzg1NDAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0U0
MUY1NzRBRTkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGODFG
NTc0QzM5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkExRjU3
NEMzRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZDMUY1NzRD
RUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGRTFGNTc0Q0Yz
MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDAxRjU3NENGNzAw
RDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0UzMUY1NzRBRTUwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEz
NjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFi
b3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZB
NENFIC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0
MDBBN0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyNjIs
OCArMzAyODAsNyBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAw
MDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkFDM0FFMjNFMUYwQjAwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0UyMURE
MjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzExNjgsMTcg
KzMxMTg1LDYgQEAKIAkJCQlCRThFRjA0RDE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNr
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZFNzkxNDkxRjk3RTAxQTAwMTk5NzM5IC8qIEpT
VmlzaWJpbGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Nzc5QkQ5NjFGMzIyNDZBMDBD
MjE0MTcgLyogSlNWaXN1YWxWaWV3cG9ydC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRTQx
RjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERF
MUNGODFGNTc0QzM5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNWUkRp
c3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkUxRjU3NENGMzAw
RDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDAwMUY1NzRDRjcw
MEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFD
RTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFtZURhdGEuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiBKU1ZSTGF5ZXJJbml0LmggaW4g
SGVhZGVycyAqLywKLQkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogSlNWUlBvc2UuaCBp
biBIZWFkZXJzICovLAotCQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTIwNTA4MjE4QTQ2MEMzMDA4MDY0N0Ug
LyogSlNWVFRDdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJF
RiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FGOUIyMEYxOENGQjVGNDAw
QzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBj
NGM3ZTI4ODI3NzI2NmRkZWM3NTIwNDEyMTJiNWUyYmM1ZmFhMzU4Li4yNWQ2OWY5NGE2N2ZiOTFi
Y2M0OGJjN2U4NTk2ZDc1OGY2ZjVlMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTk0MywxMyArOTQzLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6
ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZm
ZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghaW1h
Z2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZh
bGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPnBvc3NpYmx5U2hh
cmVkQnVmZmVyKCk7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBp
bWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFh
cnJheUJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODY1LDE5ICsyODY1
LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
KFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAg
ICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5i
eXRlTGVuZ3RoKCkpOworICAgICAgICBpZiAoIWFycmF5KSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9n
aWNhbEhlaWdodCksIGFycmF5LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1
ZmZlcikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEs
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgeyBJbnRQb2ludDo6
emVybygpLCBpbWFnZURhdGEtPnNpemUoKSB9KTsKIAogICAgICAgICBhdXRvIGJpdG1hcCA9IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9y
aWdpbkNsZWFuKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuY3BwCmluZGV4IGQyYWQ0MWU4NzFhYzVhMGJjYjRkNjljMTUyNTM0
NjM5YTczNjE0NWQuLjE2MmIyOTQyZjY2NmE5MzI0NjBiMDZlNzZkMDgzNmU0M2MwMTcxNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcApAQCAtMTkxLDggKzE5MSw4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmCiAgICAgICAgIHJldHVybkJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV9p
bWFnZUJ1ZmZlciwgV1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKLSAgICBpZiAobV9pbWFnZUJ1
ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpCi0gICAgICAg
IG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgIGlmIChtX2ltYWdl
QnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQorICAgICAg
ICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogCiAgICAgc2l6ZV90IHBy
ZXZpb3VzTWVtb3J5Q29zdCA9IG1faW1hZ2VCdWZmZXJDb3N0OwogICAgIG1faW1hZ2VCdWZmZXJD
b3N0ID0gbWVtb3J5Q29zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBkNDk0NzEyMDgz
MjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4MTRkMzEzNDE4NjQxMmZhNWQ4
YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjE1OCwxMSArMjE1
OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJ
bWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBz
eSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBm
bG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52
YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRh
dGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdl
RGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3Rl
bSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgU3RyaW5nQnVpbGRl
ciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgi
VW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMg
Iik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFSZWN0Lndp
ZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCi0g
ICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBieXRlQXJy
YXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRh
LCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsyMjEyLDYgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9h
dCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJ
bWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5
WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKLXsK
LSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
ciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyAr
MjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0
KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVj
dCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1v
dmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7Cisg
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgYnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyNDMsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEm
IGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCks
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndp
ZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9p
bnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0Fw
cGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQu
LmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzczNTA0ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxjbGFz
cyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7
Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVks
IGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKLQogICAgIGJvb2wgaXNBY2Nl
bGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNm
b3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNm
b3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRj
MzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLmU2MGNkZTE0ZDFhN2M2YzMw
NDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYK
ICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAg
ICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRh
dGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXpl
LCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZm
ZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0g
aW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4IDlhM2E4YmY5NDNhZDY1ODZkYTQzY2Vk
MGRhN2U2M2YwNTVhYjlhNWQuLjEyYTJkNzRmZmJlOGZjYzczZjA2OGJiZmNiYTAwNTQwNzc1NzE3
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCkBAIC0xMyw3ICsxMywxMCBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyRGF0YUNhaXJvLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dAppbmRleCBmOTBkMjQ2ZWM1OWI0ZjhhOGUxMzhiNzIyNDBjZjIwMjU4MzE5MmM0Li42ZmE0
ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDgyMjQ0YTRm
MmJkY2VkZTdjODc0Y2QxYjUwZWE5MTRiMTQ5OWEyMi4uZGRkNWM2YzczNDVhMmMwZDhiZDlhOGU0
ZWZiNGUzY2I5OTU4N2M2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMTY1LDEyICsxNjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50YXRp
b24oY29ucwogICAgICAgICByZXR1cm4gaW1hZ2U7CiAKICAgICBidWZmZXItPmNvbnRleHQoKS5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHJlY3Quc2l6ZSgpLCByZWN0LCByZWN0LCB7IG9yaWVudGF0
aW9uIH0pOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoYnVmZmVyKSk7Ci0jZWxpZiBVU0Uo
Q0FJUk8pCi0gICAgcmV0dXJuIGJ1ZmZlci0+bmF0aXZlSW1hZ2UoKTsKLSNlbmRpZgogfQogCiAj
aWYgVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29udGV4dHVhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjU0NWUzYTkyMGZkYzZjYWQy
NWI0YjU2ZTRiYjQ1NGQ2MTdhMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgQ29udGV4dHVhbEltYWdl
QnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBl
OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsK
KyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dHVhbEltYWdlQnVmZmVyPihuZXcgQ29u
dGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgeworICAgICAgICBhdXRv
IGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBp
ZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0dWFsSW1hZ2VCdWZmZXI+KG5ldyBDb250ZXh0dWFsSW1h
Z2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENv
bnRleHR1YWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2Vu
ZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQor
CisgICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBC
YWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQo
KTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICB9CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
YmFja2VuZC0+YmFzZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQorICAgIElu
dFNpemUgYmFja2VuZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJh
Y2tlbmRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpOyB9CisKKyAgICBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29z
dCgpOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fYmFja2VuZC0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUlt
YWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENv
cHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9i
YWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
KyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
YmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
ICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5r
SW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgdm9p
ZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQt
PmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgfQor
CisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFj
a2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7
CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1
YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1f
YmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigq
dGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENv
bnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAg
fQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICB9CisKKyAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICB9CisKKyAgICBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlUb1BsYXRm
b3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxm
b3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNw
cAppbmRleCAyMGI5ODEwYzI5MTQxZTQ3M2U2YTg4OGJjODBjMTQxN2FlYWMyZmFmLi4wZmViMTEy
ZjJlNTNiZDRjODZhMDY3MzIyNzZmZTcyZDBhNTk4ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
NDQgKzI4LDkwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGZsb2F0
IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRB
cmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKLVdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7Ci0KIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5k
ZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3Jt
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAg
c3dpdGNoIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExUSFJPVUdI
OworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50
U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUs
IGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2NhbGVkU2l6ZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3Rv
ciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNj
YWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisKIH0KIAot
I2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
LCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNz
KQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9y
IG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2Nh
bGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCks
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIGZs
b29yZihzaXplLmhlaWdodCgpKSAqIGZsb29yZihzaXplLndpZHRoKCkpID4gTWF4Q2xhbXBlZEFy
ZWE7CiB9CiAKQEAgLTEwNSw5MSArMTUxLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVj
dC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShD
RykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0
YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNr
ZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JT
cGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYg
KHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0g
ICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNS
R0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAg
ICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0g
ICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xv
ciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
ICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JM
VVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdi
TFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3Ig
PSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJy
YXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAg
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQot
I2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9p
bnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVs
dGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
c3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9
IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewot
ICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7
Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50OF90
IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhfdCBn
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90
IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAotICAg
ICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEp
ICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVs
T2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJh
eSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0
LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVj
aWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBs
YXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYgIVVT
RShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xP
YmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0
aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1
ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2Ug
bmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQu
CisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rvcigp
KTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
Ojpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDYsNTAgKzE3
MywxOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogICAgIHJldHVybiBidWZmZXI7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVy
OjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIpCiB7Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4
dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
U2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRl
eHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRl
KHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQot
Ci1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxh
cmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5n
IGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVs
IHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2Nh
bGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdl
KCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVf
dCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVt
b3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBh
bmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBh
bmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVz
ZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRl
cm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5n
KGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2Yjdj
ZmVkZjliLi5lNWMwM2U0ZGY4NjU5YzQ2M2UxYzNkMjYwNDE2NzAyMzM2NTc2OTk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI3LDE2MCArMjcsNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCi0jaW5j
bHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLSNpbmNs
dWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50
OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3Jl
Q29weSB7Ci0gICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1
YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJl
c2VydmVSZXNvbHV0aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19OwotCiBjbGFzcyBJbWFnZUJ1
ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdF
QkNPUkVfRVhQT1JUKTsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0g
ICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBh
IG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2Ug
PSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVT
RShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYK
LQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBj
b21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3Ig
ZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZm
ZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9y
IGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICAvLyBU
aGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2Fs
ZTsgfQorICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4
dCgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4s
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBi
YWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0ID0g
MDsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
LCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJh
eURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJl
Y3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0jaWYgVVNFKENBSVJPKQotICAgIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29s
b3JTcGFjZSkgPSAwOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0
cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBk
c3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwg
LTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxs
b3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0ID0gMDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90
IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
KSA9IDA7CiAKICAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBt
ZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdp
dGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllU
RSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29s
KTsKLQotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJ
bWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVy
LgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwot
ICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxv
YXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNp
emUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwg
R0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQot
ICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJu
YWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhl
IHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCitwcm90ZWN0ZWQ6Cisg
ICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAgICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVy
YXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBj
bGFzcyBDdXN0b21QYWludEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKLQot
cHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXpl
OwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2Fs
ZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRv
IHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdo
ZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVT
RShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyos
IGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBz
dWNjZXNzKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFja2Vu
ZFNpemUoYmFja2VuZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2Nh
bGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0g
eyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8
fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKwor
ICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7Cisg
ICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQ
ZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7Cisg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1BpeGVs
QXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNl
dCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkg
eworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50
OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhf
dCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAgICAg
ZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgo
ZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNl
dCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBv
aW50Ojp6ZXJvKCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0
b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0
Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisg
ICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xv
ckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVz
UGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWws
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAg
IHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3Jt
YXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0g
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9
IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQ
aXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11
bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhf
dCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBp
ZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRv
UHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZv
cm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1Bp
eGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhl
bCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7Cisg
ICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEg
PT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0Nv
bG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4K
KyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Cisg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAg
IGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBk
ZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9yKShD
b2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+CitzdGF0
aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xvckZv
cm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNy
Y1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7
IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29s
b3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7Cisg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRl
c3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYg
KHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3Jj
QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBk
ZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywg
ZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29s
b3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RC
eXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RD
b2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0
ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0
YS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3JjUmVj
dENsaXBwZWQgPSAgaW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQpOwor
ICAgIEludFJlY3QgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVk
LnNpemUoKSB9OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVz
dFJlY3Quc2V0WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQu
eSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisg
ICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAg
aW1hZ2VEYXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dz
ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBz
cmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQo
KSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JG
b3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9
IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0IHNy
Y1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRh
LnNpemUoKSB9LCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3JjUmVj
dENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAgICBp
ZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0
LngoKSAtIHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55
KCkpOworCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNyY1Jl
Y3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGlt
YWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVy
Um93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAg
ICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFj
a2VuZENvbG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWEzYjYzY2RmNzE3OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xhc3Mg
SW1hZ2VEYXRhOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3Rv
cmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4K
KyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3Qg
dGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3Qg
eworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50
OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2Vu
ZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNr
ZW5kKCkgPSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNh
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBiYWNr
ZW5kU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAg
IHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7
IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSA9
IDA7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVk
OgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVh
bCBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZv
cm1hdDo6UkdCQTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFja2Vu
ZENvb3JkaW5hdGVzKFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPFQsIEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNpemU+
Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAgaWYg
KG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dpY2Fs
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dpY2Fs
U2l6ZSk7IH07CisgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IElu
dFNpemUmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6
ZTsKKyAgICBJbnRTaXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2Nh
bGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMxMDI0
NDdjNzNhMTJmMWQ2ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
VVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNU
MkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlS
TykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTA5YmYyYzBkYWZhMjNhMzgxMzE3MmMyYmJhODc1MjM1YWJhMzUzMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVh
bEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJG
QUNFKQorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNF
KENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNU
MkQpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3Jt
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRm
b3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFj
a2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbElt
YWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8
UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAKaW5kZXggNjgxYWI1NmVlYjM0MTk0NjJiMjM0NDUwZDAwZjQxZjkzMzY3NGQxOC4uM2Nm
Y2U3Mjk1NDIwOWQzMDNhOWY3MjQzMmZiYjRiNjM5ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KQEAgLTQ0OSw3ICs0NTAsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdT
aGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEltYWdlQnVmZmVy
JgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5ZXJJbWFnZS5pbnRlcm5hbFNp
emUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmJhY2tlbmRTaXplKCk7
CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0
IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUg
ZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0
IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCkBAIC04ODQsMTIgKzg4NSwx
MyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVy
SW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRS
ZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAg
YXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCks
IGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2Uu
cHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBhdXRvKiBibHVy
UGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQ
aXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0Js
dXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29u
c3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMzk2Y2Yw
YmUwNzA1YTY2YTRmZjRmMmNhNTcxNjBjNzUxZGY3MDc4NS4uYjIzNjU0MTNmZGUzNzczYjczMjE4
OTkwMGI1ZjZlMWU5NjJkODFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzUsNyArMTc1
LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xh
eWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVm
ZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxv
YXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAg
ICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJm
YWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJT
aXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5n
bG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93
U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIGRyYXdT
aGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJ
bWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJC
dWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1h
Z2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxh
eWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1
cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAg
ICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRl
c3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0s
IHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0x
OTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRm
b3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJ
bWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRm
b3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRl
ZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4Njdi
MDQ1ODVlZTgwMzQxMzQuLjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmNwcAppbmRleCBiY2EyOWRmYjY5NDk4NmU4Nzc0NjZiOGYwNzc4NmZiZDFi
ZjM5NDU2Li5jZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2MjAyY2YxMTI1OTViYzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTQxNCw3ICs0MTQsNyBAQCBJbnRS
ZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
YmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMxYjFkMzM3OTAyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJF
cG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jZW5kaWYKLSNlbmRpZgot
I2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBv
eHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
ZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLSNlbmRp
ZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFn
ZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAg
ICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBv
c2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lh
OjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxh
eWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7
Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZm
ZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0g
ICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xD
b250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAg
ICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdH
TENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQot
ICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBn
bERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAg
aWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdl
QnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4
dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmlu
Z0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
Z2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29tcG9zaXRvclN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5j
YWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0
dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9y
Q3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwot
ICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElB
TElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotI2VuZGlmCi0KLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRl
eHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotCi0gICAg
aWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZm
ZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlz
XShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwotICAgICAg
ICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1h
cHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAgICAgfTsKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkp
OwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsK
LSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1
c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJy
ZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBh
bHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRo
ZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCks
IDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJ
Uk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQo
KSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xl
YXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShz
dXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRP
Ul9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENv
bnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdl
IG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5v
IENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcg
c3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAg
ICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAg
IC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50
ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2Us
IEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3Jl
YXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0
dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNl
KG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJm
YWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7
Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0g
ICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAg
ICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGlj
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShz
dXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3Vy
ZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQot
ICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1
cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBj
b25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdl
dCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwot
Ci0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2Uu
Z2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0K
LQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBi
b29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUp
Ci0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNv
bHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1
cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0
aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxm
KG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZs
b2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXpl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgs
IHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmICht
X3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0
dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRl
ZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVy
aW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0g
ICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKLQot
ICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9f
Rk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lkKiBzdXJmYWNlRGF0
YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0
cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlS
T19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBzdHJpZGUp
KTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeyBm
YXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAg
ICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNldCBtX2luaXRpYWxp
emVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdl
dCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+
KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9wbGF0Zm9y
bUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICpt
X2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50
b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVy
LT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19
Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIC8vIGNvcHlD
YWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4K
LSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3Nl
ZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVh
dGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRp
dmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0
KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgp
KTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlv
blF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRT
dGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1h
Z2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwg
V2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgp
KQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCks
IHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFu
c2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFi
bGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBh
Y2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2Rh
dGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1
bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsg
c3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7
IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAg
ICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwp
OwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
cmVkKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFi
bGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJH
QkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJm
YWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1f
bG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2Vf
dHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQot
ICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8g
dGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9y
YXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgo
MCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlw
bGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93
IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0g
cmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFy
ZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFk
ZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGlu
dCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQo
KSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwg
MCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbngg
PSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewot
ICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0K
LSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgo
KTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdp
bnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkg
ewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9
Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhl
aWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3Ro
aW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChu
dW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3Rv
cmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2Nh
bGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIElu
dFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwot
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9J
bWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAg
Y2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9u
U2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0g
ICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRh
Lm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0
aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3Qg
bG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJl
Y3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJm
YWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJ
bnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0g
cmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRh
dGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmln
aW55KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0g
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENv
bG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAg
ICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAg
ICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAg
ICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewot
ICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5s
aW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2Fs
ZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVu
aXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lz
dGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8
fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5p
dCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5n
U3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAq
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1
cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4o
YmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxT
aXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykK
LSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7
Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1f
bG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VS
ZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0
b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9p
bnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxv
Z2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBs
b2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBz
Y2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgp
ICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxE
ZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+
PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9y
aWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhY
KCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNl
UmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkg
KyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndp
ZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxv
Z2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQg
b3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERl
c3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5
ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNT
RVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291
cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsg
c2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERl
c3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkg
PD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAg
ICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAg
IC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29v
cmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZv
ciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0
IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1
cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxl
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRl
c3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQg
c3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQo
KSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdp
bnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9j
YXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsg
eCArIGRlc3R4OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlv
biBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQg
cmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jv
d3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LQotICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAo
YWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAg
fQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRo
aXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFj
ZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBs
b2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBk
b25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVT
dXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVt
Um93cyksIEludFNpemUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54
KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAg
fQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
LXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBx
dWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
ICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5j
b2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEp
OwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjRE
YXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJn
ZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShp
bWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJE
YXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAv
LyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRv
IGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNB
Y3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0
dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxk
QmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgot
Ci1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBp
ZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAg
aWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVm
ZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQot
Ym9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4
dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJ
IENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlz
IGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRj
aCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3Jl
YXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWlu
dDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBt
X2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0
LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBp
bnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7
Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJl
bXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3
NmFmNDA4OTZiYWFjZDgwZDlmMWM1ZWZhYTc5MGExNDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisj
aWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdp
bGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2Nv
cGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29u
c3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOwor
CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAg
ICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0
U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0
b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4o
KmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7Cisg
ICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1v
bWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYg
c3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2Ug
PT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10geworICAgICAgICAgICAgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1
LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQo
Y29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
cm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBh
cnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
bGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3Bh
Y2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykg
eworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAg
ICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0o
KTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Cisg
ICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9E
YXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7
CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXpl
KCksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFz
ZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFj
ZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAw
OWY1ZDg4ZDVkNzE2ZGVmM2ExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9y
U3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92
ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDM2MzcyZjkxOWU3ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENB
SVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8
RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYg
VVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VT
KQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2
b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWly
b19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRT
aXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBp
ZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBi
ZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZy
b20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xH
ZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBH
TF9SR0JBLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBi
b3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2
aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQt
YXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMu
CisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisK
KyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tl
bmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+
KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwg
bnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMy
X3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2Fs
U2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShz
dXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXll
clByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOwor
I2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5J
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0
ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1f
Y29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9z
aXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQor
ICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQor
CitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7Cisj
aWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UK
KyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJl
dHVybiBudWxscHRyOworfQorCitib29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
Ojpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVz
b2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyBy
ZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBp
ZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVt
IGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgor
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBj
b250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Cisg
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShi
aW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFn
ZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgo
KSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4
dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDAp
OworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIo
KQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1
cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAg
IGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53
aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9z
dXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19D
T05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndp
ZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fp
cm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVm
ZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9
IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7
CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5
T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVm
ZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9z
aXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQs
IEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHBy
b3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHBy
b3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMg
aGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAg
Ly8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0
aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGlu
dG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZSht
X2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19z
ZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZp
b3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAg
ICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJl
IHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlv
dXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFj
ZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0
ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2
NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3Np
YUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJs
aWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UK
KyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOworCisgICAgfkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7
CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2Vu
ZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNv
c2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVy
ZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAg
IFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0
b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1ZjJkZGU5OGViNzRl
NGUyMTAzY2FjNDQxOGY3YjU4ZWE5ZTFjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAg
IHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIElu
dFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRo
KENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1
cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFplcm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWln
aHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Y3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSks
IENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhl
aWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFj
ZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7
CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsK
K30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VS
VChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3Ry
aWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAg
ICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0
YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNh
bFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cg
KyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxp
ZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFi
bGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxv
b2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAg
ICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUo
bV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNp
emUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNjAwMzc5NGZkYWE5NDczMmI2MTU1N2M0MWU4NDQyMzFhOThh
NzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIK
KyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92
ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTJkMTVmMGJhMjIyMTBmN2ExNzRiYTcwN2VkMjYxODBjMThmZWE0YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSA8Y2Fp
cm8uaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxv
Z2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAg
ICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2Nv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworfQorCitOYXRpdmVJbWFn
ZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhh
dmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZTogeworICAgICAgICBhdXRvIGNvcHkg
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMy
LAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkp
LAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgp
KSkpOworCisgICAgICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQo
KSkpOworICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9z
dXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisg
ICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNv
bnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5
QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tp
bmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURh
dGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3Vy
ZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVs
cyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1h
Z2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJm
YWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9
IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisgICAgY2Fpcm9fc3VyZmFj
ZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludFNjYWxlZC54
KCksIGRlc3RQb2ludFNjYWxlZC55KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNj
YWxlZC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzk0OWZmMzczNzQ4ODI0NTUxZTNlNGVmZTVhMmI0ZDY2OTNmMDU1MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgewor
cHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFj
ZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZh
Y2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRy
IH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5
OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19o
Ci0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgot
I2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAi
Tmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVi
bGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5J
bWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFj
ZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3Np
emU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNy
ZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1f
Y29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAg
ICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXll
clByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBt
X3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJi
ZmFiZTVhZjkzY2EwNjcwOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNF
KENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4K
LSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJ
Ty9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1
ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBB
UkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0
aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFn
ZUJ1ZmZlcik7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3Bh
Y2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNn
Q29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xv
clNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAg
ICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9T
dXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JT
cGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNl
KGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29s
b3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBz
UkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5k
ZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2Fs
ZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAg
ICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRp
b25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1l
YW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2Fs
ZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1
dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1
dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShz
Y2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQo
KSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3Np
emUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1f
c2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93
cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0
ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRT
aXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVu
c2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNl
Ci0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJl
bmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
ICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBo
ZWlnaHQudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6
Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xv
clNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0Nv
bnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cp
OwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRD
bGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91
bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2Ug
PSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdp
bmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFj
ayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVS
ZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5
WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEu
Yml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1f
ZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5i
aXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2
b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZl
ck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZl
R2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwg
cmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQot
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNz
KQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9y
U3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vz
cykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6
Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tl
ZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1
bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNh
ZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9p
bnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ug
YmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0
aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2Rh
dGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hh
c2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9k
YXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgp
LndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVm
ZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5
Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQg
d2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQg
aG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0
aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRo
aXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFj
ZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRl
cnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZh
Y2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgot
ICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNo
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3Vu
ZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRp
Y19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Up
ICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2Uo
MCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1h
Z2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgbG9naWNh
bFNpemUsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5n
ZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9n
aWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dD
b250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJ
blVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2Vy
U3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFn
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0
aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCks
IGludGVybmFsU2l6ZSgpLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
LX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXIt
PmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+
bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwg
bG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRv
TmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VC
dWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNl
OjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUo
aW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0g
ICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0
Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgot
ICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMy
LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2Rh
dGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBt
X2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdl
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkg
ewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChk
ZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6
ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
OwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50
b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZm
ZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0g
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29u
dGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBu
ZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAo
JmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFn
ZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVk
IHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJl
ZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkK
LSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBj
b25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBz
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGlt
ZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7
Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNl
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9
IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsK
LSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewot
ICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAg
ICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0g
ICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUs
IHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRo
ZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9T
dXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMg
bmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxp
dHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0
KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVy
biBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0
cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAg
QVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVx
dWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZl
IGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRv
cCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
cHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBw
cmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBp
ZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9n
aWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6
ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAo
IWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRh
KTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzFjZDIzNzU4MWY5NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlm
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNw
YWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKKworICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5
cGVCaXRtYXApCisgICAgICAgIHJldHVybiBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNn
Q29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNv
bG9yU3BhY2UoY2dDb250ZXh0KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpzZXR1cENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdo
dCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25T
Y2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZElt
YWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNp
emUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRp
Y19jYXN0PHNpemVfdD4oYmFja2VuZFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAg
ICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgp
KSkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAq
IGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUp
KTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7
CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
KyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RT
Y2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFj
a2VuZFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/
IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdl
LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFu
c2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVp
Z2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFy
cmF5OworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAg
IC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51
YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dp
Y2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFn
ZURhdGEtPmRhdGEoKSk7CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVs
QXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IGltYWdlRGF0YS0+c2l6ZSgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51
bGxwdHIsIHByb3RlY3RlZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsK
KyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5z
aW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBw
aXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0g
ZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFj
a2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2Vu
ZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5k
U2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUo
KS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRv
IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFs
aXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1l
VHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkK
K3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5
dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJ
bWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0
YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1
ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7
CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVm
ZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdklt
YWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7
CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBB
U1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJU
KGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAo
c3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFn
ZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JG
b3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAm
ZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVm
ZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4
ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RB
bHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jN2NhMzk4MDM0ZjI1YTMzNDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VC
dWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJl
c2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRh
dGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRF
KQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
KSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzODNjOTk2ZTU0ZDBiMDQ3MTNmZGM3NDJjMjE0MzZkMzgwN2U4NDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
K2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vs
c2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5k
U2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNp
Z25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0
cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUo
ZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBi
YWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNr
ZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVmYXVsdEJp
dG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250
ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lk
KiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVh
c2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBiYWNr
ZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQ
cm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQp
KQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXpl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAg
IAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7
Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5k
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQq
IGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVy
Q0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3Zl
KGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VS
VChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdT
dG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2lu
Z1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAg
ICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4LCAzMiwg
Ynl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3Bh
Y2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAg
ICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWY2NjJhMWM3
NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVm
UHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZv
cm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5k
aWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1f
Y29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAz
MWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVT
RShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0j
aW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBh
bmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNF
X0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25z
dCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAg
QVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdklt
YWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5u
ZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEs
IEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZk
ZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlC
dWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYg
ZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwot
Ci0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFj
ZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBt
YXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4
ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0
LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1Bl
clJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFT
U0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0g
d2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1
dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0
OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0
OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9Q
QVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJB
VEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcs
IGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcp
IHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWln
aHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQu
ZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNl
LT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJl
Y3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0
RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3Vs
dERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHgg
PSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAg
IGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBz
aXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwot
ICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgp
OwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAg
ICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAg
ZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBv
cmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAg
ICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0g
b3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0
eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAo
b3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkg
PSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3Rk
OjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwot
ICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9
IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55
OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVH
ZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3Mg
PSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAg
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAg
ICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICog
NDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRh
dGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAg
ICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0Lmhl
aWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYg
VVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAg
aWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsr
eSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAg
ICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBV
U0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50
IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBp
ZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93
c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNy
Y1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93
c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
c3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9
IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVsw
XTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAg
ICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBz
cmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
ICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3Jj
LmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAg
ZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAg
ICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAg
ICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCku
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChi
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgp
OyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NF
UlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0
KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkp
OwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmln
aW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1h
eFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdp
bnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxp
bnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51
bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhl
aWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAg
Q2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNl
UmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0
KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0
aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVu
ZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAg
ZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNy
Yy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50
OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAg
ICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qu
aGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lm
IFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBh
cyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291
cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3Jj
Um93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClb
MF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVsw
XTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpM
b2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9
IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNv
bnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRv
IEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jv
d3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIzNzRiYWQy
NGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYg
c3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dE
YXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1h
cEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1
Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29s
b3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VC
dWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxl
cmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZh
Y2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNDdjZjVjZGU2MzkzOTdlN2IwMTU0N2ZmZGRjOGI2OGJkNjYwNDg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBIQVZFKElPU1VSRkFD
RSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNl
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFj
a2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQo
KSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
YmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBr
Q0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4
dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBj
YWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNr
ZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBz
dXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFja2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0Nv
bG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQ
bGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQo
KSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNpemUpKTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2Uo
Y29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxw
dHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSks
IGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sK
KyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBD
R0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3Qg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJS
b3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsK
K30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNl
LT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUlt
YWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwg
bV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEo
KSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRk
cmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAg
ICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpB
Y2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZh
Y2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4K
KyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmYzBmMDQzZjA1NWE3N2RjZWY2
NjNlZTRmYzdiZjY1Yjk2ZjY4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJT1N1cmZh
Y2UuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
Q0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBm
bHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmco
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92
ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmKTsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0
Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1Bl
clJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1h
dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9z
dXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJ
T1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVj
OWZiYzI1OGI1NjJlYjMuLjJhYTgyMzMyZGUyZDExMWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBQREZEb2N1bWVudElt
YWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5n
Q291bnRGb3JUZXN0aW5nOwogCi0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZElt
YWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJu
YWxTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBt
X2NhY2hlZEltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdl
ZChiYWNrZW5kU2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0
IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4
MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMy
ODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgog
I2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBv
cnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
QEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBv
b2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3Vy
ZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5z
dXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlw
bGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBm
aXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkK
IHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oCmluZGV4IGZkOGU1ZThlMmU5NGU3MDU0ODk2ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUz
M2NhNWY2MTMxZTUyZTFlOWQ0NWQ3YzAyMTYzZGU0YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oCkBAIC0xMTEsNyArMTExLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJy
YXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRh
KCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1
YTQ3ZmM1OTc1Li45NTE4MDBlZGE5MTc0MTFjODhiOWE0YmU1NTE0Y2YxZjY4Yzc4Nzk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAg
LTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9n
aWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAg
YXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWltYWdlRGF0
YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxp
emVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7CisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6
ZSgpOwogCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFs
dWVzKTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQg
RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFn
ZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJlY3Qp
OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAK
aW5kZXggZmEwNDEzYzAwZGE0M2FjNWRmNTVlNWUwMWY2OTQ0YWI5ZWRhNzQ4My4uOTc4YzU1YTY3
YjhkZTcyMGU5ZmE3OWJkOGNjMzRkNzQ1MjhhMDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0g
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0g
aW1hZ2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBp
eGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBhMTllYTA1
Mzc1ODE5Y2VjZGFjMjVkNWQ5NjNkNTQ0ZGQ0ZDFhOTY5Li4yNjU0NDBmNDM5NDJhZmE2YWEyOThk
YWY0ZWMwMmVlM2Q5NWNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDcg
KzIyOSw4IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBVaW50OENsYW1wZWRB
cnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJ
bWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAg
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA2MmMyZjgz
MzY1MzU4Njg0NGQ5ZjM5MGVlYTVlZGMxMDhlMzBhMzg4Li5hNmUzZjRiYmFhMjQ0OTdmOTI2MzQ2
NTY5NzVmZmI4N2RjN2FiOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI1LDcg
KzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpA
QCAtMzcxLDEyICszNzEsMTMgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAot
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRJbWFnZTsKKyAgICBJbWFnZURhdGEqIHJlc3Vs
dEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAgICAgIHJlc3VsdEltYWdlID0g
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3Vs
dEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJ
bWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTM5NSw3ICsz
OTYsNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAK
ICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4ZWxBcnJh
eSwKLSAgICAgICAgKnJlc3VsdEltYWdlLAorICAgICAgICAqZHN0UGl4ZWxBcnJheSwKICAgICAg
ICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAgICAg
ICAgbV9iaWFzICogMjU1LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwZTk0NGRm
MDBhOTVjYzA2ZDI2YWE0MmYxNjllZTZhNDZmNWEyNzgyLi41MzczNTUwNDUzZTQ5ODYyYzBlNDE2
ZjJkY2MyNTZiNDcwYzkxOTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMjcs
NyArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0LDcg
Kzk0LDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
ICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAg
QVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3Vs
dEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5
ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3NDFj
YzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZF
R2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
QEAgLTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBt
X3NoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1h
Z2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJlY3Qg
c2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAg
IGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFkb3dB
cmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxB
cnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndp
ZHRoKCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCks
IHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7
CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCks
IGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CisgICAg
CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAg
ICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cAppbmRleCA0OWJhODQxNzNjMmQxYTk5NTRlNTYxMzkwY2UwM2MyNGJjOTBjODFiLi5kN2VkOWIy
NDQ5MDE3OGZmYmZiZWIxY2Q0MmJlYTVlOGZmMTU5ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVT
RShBQ0NFTEVSQVRFKQpAQCAtNTIyLDE0ICs1MjMsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdWx0UGl4ZWxBcnJheSA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0UGl4ZWxBcnJh
eSkKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdl
LT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJ
bnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0
YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCpyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAK
ICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CkBAIC01NDMsNyAr
NTQ1LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1BcHBs
eSgqcmVzdWx0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBr
ZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoKmRzdFBp
eGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5o
ZWlnaHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0
c2V0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwYmE1MWI3NjEyZjJjYjJmNjlmNGY2MDIx
Y2VmY2JlM2MyZTc0MmQzLi42ZGI4N2ZkNTQ1YThmMWRkYTdkOWI1ODhhMjU0MDY1NWE1NzhmYjI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3Myw3ICs0NzQsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIHJlc3V0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ug
PyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3V0UGl4ZWxBcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMjUxNzgxY2E1YWE1
MWY3ODAyN2FkNTA4ZGY5YWM2MTBjNjc5NGZhNS4uY2JkNDI0MTk3NjU3MGE4NzM5NDUyMDBhOTEz
ZTBlOWU2NTlhYjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjM0LDcgKzIzNCw4IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBk
c3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDog
bnVsbHB0cjsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCmluZGV4IDgyMjc4NzlmNTc4NmRlNjM1MDU0MzZmMWI0ODAxN2MwYWRkMjhl
ZjYuLjE5ODBhYjkzNGU1Njg3MmI2MjY0MjFmMDIyMTJlODJmOTk4YTIxOWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAog
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgpAQCAtMzk1LDcgKzM5NSw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxs
UmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lkIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4u
YTllOGZjYTJjNWQxZGNiYjY2N2E1YjdjYzBkNGY3NzAyNDg0ZjM0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
R2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlu
bGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5U
UklOU0lDUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxp
ZFByZU11bHRpcGxpZWRQaXhlbHMoKQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgVWludDhDbGFtcGVkQXJy
YXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwogICAg
IHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKICAgICBpbnQgcGl4ZWxB
cnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJF
QU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwg
IiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZm
ZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQo
KSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQo
KS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8
PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRp
b25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0
aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25S
ZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1MiAr
NDM4LDUyIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwor
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAg
ICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlu
cHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAg
ICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEo
Km1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
aW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0
ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBj
b3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgp
KTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZy
b20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsK
LSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsK
ICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9
CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
ZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKQEAgLTQ5NywxMyArNDk3
LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCkKIAogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICBpZiAo
IW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9H
KEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MTUsMTEgKzUxMiwxMSBAQCBVaW50OENs
YW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAg
ICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoKHJlc3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICBy
ZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVk
QXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0lt
YWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQog
ewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUzMSw3ICs1MjgsNyBA
QCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0
U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRT
aXplKTsKICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZl
NDIuLmFmNDYzZWZlYjAxMzZhYzYxOGUyOTljZDA4ZDQ0ODM4ZDBlZjU2NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7
CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0
YTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZl
Y3RvcjsKIApAQCAtMTUzLDggKzE1NCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVy
YXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGlu
IFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xODIs
OCArMTgzLDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVj
dHM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAg
IEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDFlMDM1YTdlZWYyODAzY2Y2NTk5MmQw
NDljOWY4YjU1NmJjZWNhZWMuLjkxOGUxOGFmNWUxMmZmOTA0OTQ4M2E3OGVmMWJhODJkNzM1OGMy
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApA
QCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50
U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShPUEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMWIz
OTQxNWViYjIxYmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUg
IkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVm
ZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9p
ZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQg
cm93Q291bnQsIHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVk
IGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9
IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBw
b3dlci1vZi10d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQK
LSAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBj
YWxsZXIuCi0gICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50
OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCB4ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVQb3NpdGlvbiA9IHggKiA0OwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1Bp
eGVsID0gc3JjUm93ICsgeDsKLQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBl
Y3QgKFApUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQQkdS
QSB0byBiZSBjb21wYXRpYmxlLgotICAgICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNyY1Bp
eGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1aW50MzJfdCByZWQgPSAoKnNy
Y1BpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1aW50MzJfdCBncmVlbiA9
ICgqc3JjUGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdWludDMyX3QgYmx1
ZSA9ICgqc3JjUGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4g
PSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAq
IDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RS
b3dbYnl0ZVBvc2l0aW9uICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBv
c2l0aW9uICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAz
XSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBjb3B5UmVjdEZy
b21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBk
ZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQ
b3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFp
bnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNp
emUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1
bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVu
c2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVu
c2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAg
IHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQot
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VS
ZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RT
dHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0
ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9
IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAg
ICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJv
d09mZnNldDsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1JvdywgYnl0ZXNQZXJSb3cpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0
ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci1ib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNl
dFByZW11bHRpcGxpY2F0aW9uKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNp
emUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6
ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVm
ZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUpLmNv
bnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VCdWZm
ZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAg
ICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICogNDsK
LSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7
Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICogc291
cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBk
ZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVk
IGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2lnbmVk
IHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0Owot
ICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSArIGRl
c3RSb3dPZmZzZXQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzb3VyY2VSZWN0
LndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcG9zID0geCAqIDQ7Ci0KLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGdyZWVuID0gc3JjUm93W3ggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNS
b3dbeCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dbeCArIDNdOwot
Ci0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewot
ICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdWludDMyX3Qq
IHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKLSAgICAg
ICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDgg
fCBibHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICBhdXRvIHJhd0Jp
dG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
YmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKLQotICAgIElu
dFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rv
cik7Ci0KLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgYmFja2luZ1N0b3JlU2l6ZSkuY29u
dGFpbnMoc2NhbGVkUmVjdCkpIHsKLSAgICAgICAgLy8gUmVxdWVzdGVkIHJlY3QgaXMgb3V0c2lk
ZSB0aGUgYnVmZmVyLiBSZXR1cm4gemVyby1maWxsZWQgYnVmZmVyLgotICAgICAgICByZXN1bHQt
Pnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBj
b3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0
YS5kYXRhKCksIHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Ci19Ci0K
LWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRh
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0g
c2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICByZXR1cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwotfQotCi0v
LyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZl
cgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0Pgotdm9pZCBp
blBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewot
ICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLSAgICBhdXRvKiBwaXhlbERh
dGEgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgcGl4
ZWwgPSAqcGl4ZWxEYXRhOwotICAgICAgICBzaXplX3QgYnl0ZVBvc2l0aW9uID0gaSAqIDQ7Ci0K
LSAgICAgICAgdWludDMyX3QgYWxwaGEgPSAocGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAg
ICAgICAgdWludDMyX3QgcmVkID0gKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAg
IHVpbnQzMl90IGdyZWVuID0gKHBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgdWlu
dDMyX3QgYmx1ZSA9IChwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgIC8vIChQKVJHQkEg
LT4gUEJHUkEKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgICpwaXhlbERhdGEgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8
PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQot
fQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3Jt
YXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lk
IGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWdu
ZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIHggPSBwaXhlbENvdW50ICogNDsKLQotICAgICAgICB1bnNpZ25lZCByZWQgPSBi
eXRlRGF0YVt4XTsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07Ci0g
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsgMl07Ci0gICAgICAgIHVuc2lnbmVk
IGFscGhhID0gYnl0ZURhdGFbeCArIDNdOwotCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbHBo
YSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihieXRlRGF0YSkgKyBpOwotICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwg
cmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pIGNvbnN0Ci17Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWJpdG1hcCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVk
ZWQoZGVzaXJlZEZvcm1hdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBy
YXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXpl
KGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0JpdG1h
cFNpemUuaGVpZ2h0KSk7Ci0KLSAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50KCkg
JiYgcmVjdC5zaXplKCkgPT0gYml0bWFwU2l6ZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1CeXRlcy51bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBPbmx5IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgotICAgICAgICBpZiAoIWNvcHlSZWN0
RnJvbURhdGEocmVjdCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLQotICAgIGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKLSAgICAgICAgLy8g
SW4tbWVtb3J5IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8gc3dp
enpsZSB0aGUgcmVzdWx0cy4KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgaW5QbGFjZUNoYW5n
ZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpy
ZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRG
b3JtYXQpIGNvbnN0Ci17Ci0gICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVy
U3luYzo6QnVmZmVyT3V0T2ZTeW5jKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEludFNp
emUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLQotICAgIGF1dG8gbnVtQnl0
ZXMgPSBwaXhlbFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29udGV4
dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNl
Q29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIEFTU0VSVCgh
IWQyZERldmljZUNvbnRleHQpOwotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBpeGVs
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFC
aXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQotICAgIENPTVB0cjxJRDJEMUJpdG1h
cDE+IGNwdUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0
aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JF
QUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3Jt
YXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChw
aXhlbFNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwg
JmNwdUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBEMkQxX1JF
Q1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhl
bFNpemUuaGVpZ2h0KCkpOwotICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFy
Z2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERh
dGE7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBw
ZWREYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghbWFwcGVkRGF0YS5iaXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShwaXhlbFNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBuZWVk
IHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICBp
ZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVs
U2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5k
YXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNp
emUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1Bl
clJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotCi0gICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3Jt
YXQ7Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwot
Ci0gICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmlu
ZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0Lndp
ZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAg
Q2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4g
ZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwot
ICAgIGRlc3R4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0
KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsK
LSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4g
ZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7
Ci0gICAgZW5keCAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0
KCkgPD0gc2l6ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJl
Y3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAg
ICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7
Ci0gICAgZGVzdHkgKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVH
ZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgp
KTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3Jp
Z2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBDaGVja2VkPGlu
dD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0gICAgZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZl
R2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291
cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7
Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8gcGl4
ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6
ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXpl
LndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0
ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZW5zdXJlQmFj
a2luZ1N0b3JlKHNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc291cmNlU2l6ZSA9
PSBzaXplKSB7Ci0gICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291
cmNlLmxlbmd0aCgpKTsKLSAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICB9
IGVsc2UgewotICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0KTsK
LSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291cmNl
LCBzb3VyY2VGb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJpdG1h
cEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0KLWJv
b2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBi
aXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0g
c291cmNlUmVjdDsKLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250
YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0
QnVmZmVyUG9zaXRpb24gPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291cmNl
Rm9ybWF0ID09IGJ5dGVGb3JtYXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3Qoc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tp
bmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgaWYg
KGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGlj
YXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0
LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0
YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9t
U291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5k
YXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24p
OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkK
LXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBP
dXRPZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
cGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXpl
LndpZHRoID49IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6
ZS5oZWlnaHQgPj0gYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBwaXhl
bFNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMg
aW4gUkdCQS4gV2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBj
b21wYXRpYmxlCi0gICAgLy8gd2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNl
LgotICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+IFBC
R1JBCi0gICAgZWxzZQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdCQSAt
PiBQQkdSQQotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNpemUu
d2lkdGgoKSAqIDQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShu
dWxscHRyLCBkYXRhLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJ
blN5bmM7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRp
YmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERh
dGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAg
cmV0dXJuIGJpdG1hcDsKLQotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgp
ID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1h
cFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFw
OwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFj
a2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gYml0
bWFwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJu
IGEgY29weS4KLSAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1h
cDsKLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0
bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCks
ICZjb3BpZWRCaXRtYXApKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNv
cGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRy
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8g
c2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYm
IHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENvcHkg
dGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4K
LSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3
aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5kRHJh
dygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2
aWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFC
aXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0
bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElP
TlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6
cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNy
ZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51
bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghc291
cmNlQ1BVQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNl
Q1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VDUFVC
aXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09N
UHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJl
bmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJs
ZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRt
YXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURh
dGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFw
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0aWJs
ZUJpdG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTRkOGE0
ODIyZjEyNWY0MDZmMzAwNzc0N2ZmOTM1OGMxNTZhMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7
Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdzsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBtdXRh
YmxlIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBieXRlRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
IH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9y
bUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0bWFw
QnVmZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsK
LSAgICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1
ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJp
dG1hcChJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgYm9vbCBlbnN1cmVCYWNraW5nU3RvcmUo
Y29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVk
KCk7Ci0gICAgYm9vbCByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tRGF0YShj
b25zdCBJbnRSZWN0JiwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYpIGNvbnN0OwotICAgIGJv
b2wgY29weVJlY3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmLCBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHZvaWQgbWFya0J1ZmZl
ck91dE9mU3luYygpIHsgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZl
ck91dE9mU3luYzsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQyMThmMWVmNGY1Nzhj
ZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkK
LQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVk
ZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3
aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0No
ZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsICZjb250ZXh0
LCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdy
YXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKHNj
YWxlZFNpemUud2lkdGgoKSAvIHNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSAvIHNp
emUuaGVpZ2h0KCkpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgYm9v
bCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2Ug
ZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IHN0ZDo6
Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhl
aWdodCA9IHN0ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9u
PwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVz
c2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6
ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgp
IDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICog
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMg
PSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4
dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51
bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZv
cm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVu
ZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRl
Qml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fbG9naWNhbFNpemUsIHJlbmRlclRhcmdldCwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmbV9kYXRhLmJp
dG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubG9hZERh
dGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAgfSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEu
bWFya0J1ZmZlck91dE9mU3luYygpOwotICAgIH0pOwotICAgIG1fZGF0YS5jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7Ci0K
LSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdl
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93
KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgaW1hZ2VDb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBudWxscHRyLCBzdWNj
ZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1H
cmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQo
KSBjb25zdAotewotICAgIGNvbnRleHQoKS5mbHVzaCgpOwotfQotCi1zdGF0aWMgQ09NUHRyPElE
MkQxQml0bWFwPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRl
clRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUm
IGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFn
ZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19j
YXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91
bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0
bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewotICAgICAg
ICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1h
cC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKLSAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0
bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMg
UmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBp
bWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUg
YmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFn
ZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IE5l
ZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQot
ICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGlt
YWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXIt
Pm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFw
VGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0
bWFwVGFyZ2V0LmdldCgpLCBzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIp
KSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhl
IG9uLWhhcmR3YXJlIGltYWdlLgotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFn
ZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBj
b25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0
OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRh
cmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFw
PiBpbWFnZTsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51
bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0
ZXN0IGZhaWx1cmVzLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAm
JiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5
QmFja2luZ1N0b3JlOwotCi0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1C
eXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVz
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJl
aGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgRDJE
MV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKLSAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9y
eSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFn
ZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4g
aW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBtX2Rh
dGEuY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFn
ZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJv
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShj
b21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkg
Ly8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAg
ICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JS
ZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAg
ICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
ID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9k
YXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVj
dCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0g
ICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENv
bnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0g
ICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRT
b3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNl
U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERh
dGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCAxKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VE
YXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0
eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9y
U3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI3MGFiZWRmMGE2MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQor
CisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRl
ICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCisjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHdp
bmNvZGVjLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4
dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRl
clRhcmdldCgpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICBy
ZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKwor
ICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJn
ZXRPZlNpemUoc2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmICgh
Yml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgYml0
bWFwOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBs
YXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1h
cENvbnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRt
YXBJZk5lZWRlZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtCdWZm
ZXJPdXRPZlN5bmMoKTsKKyAgICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChz
aXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBs
YXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisK
K0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBiaXRt
YXApCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdU
Rk1vdmUocGxhdGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQp
KQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0NvbnRl
eHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKm1fY29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRh
cmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQt
PkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIC8v
IEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBi
YWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJlaGF2
aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAgICAg
ICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVz
UGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7
CisgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJ
bnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5Db3B5
RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwg
MzIpOworCisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3Vu
ZHMpCit7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXpl
KGltYWdlKSA6IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxz
aXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53
aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRh
cmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAg
IGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNv
cHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0
cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1h
cFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2Us
IEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQs
IGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhN
RTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKwor
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jl
c29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29s
dXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9y
KTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFy
Z2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJn
ZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJu
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgp
LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KQoreworICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5kZXJU
YXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRl
eHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsK
KyAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0
bWFwPiBiYWNraW5nQml0bWFwOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJn
ZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJh
Y2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRt
YXA7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRv
IGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVu
ZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6
OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBt
X2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Cisg
ICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0
ICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdl
dCB0byB0aGUgb3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRh
IGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9w
ZW4uCisgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250
ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBE
MkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJv
cGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElP
TlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhy
ID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNp
emUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMs
ICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVs
bHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNv
dXJjZURhdGE7CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05T
X1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFy
Z2V0RGV2aWNlQ29udGV4dDsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2Uo
JnRhcmdldERldmljZUNvbnRleHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERl
dmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRT
b3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQ
cm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVu
bWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5E
cmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0bWFw
ID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCkpOworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFn
ZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJv
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShj
b21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJ
bWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRhdGE6
LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNkYmE3
ZWU1ZWVmZjJmNzFhYzM5Mzk2MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkltYWdl
QnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQo
KSBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBv
dmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdlUHRy
IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0ZTVj
Y2QzNzAxYmQuLjMyYmY4NmJjNmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJj
ZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1lcmF0
b3IsIGZwc0Rlbm9taW5hdG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24o
ZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAgIGF1
dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBhdXRv
IGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRvIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAgICAg
ICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3aWR0
aCIsIEdfVFlQRV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3NWEw
YmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRl
ICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xk
LCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3
SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAot
ICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZl
ci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0
LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAgICAg
YXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
IH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5kYXRh
KCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91
ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEp
ICogMjU1LjBmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBkNzg2OTRhYWU3YjM1OTJiMzYyNTI2N2Q5NTAwMTY2
YWJlMDUwZmY5Li5lMjg1OTJhODA1NjNiZGQ4NWFhMjQ3ZDVjOGUwYjE1NWI5YzE4MjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTM0NSw3ICszNDUsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckZvcmVncm91bmQoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdQogICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKICAgICAg
ICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5n
Qm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+
KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSks
IHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJh
bnNmb3JtLnlTY2FsZSgpKSkpOwotICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCkpCisgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVy
LT5iYWNrZW5kU2l6ZSgpKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIucmVzZXQoKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRl
eCA5ZmJiMWZkZjBkODI3ODg0NjY1Y2VjNzczN2IzMTBiNTAzMWQ0MGM1Li4wZjg4NDI5MDBmODUx
YTdkOTJmODg2Y2E2NmY5MWE5MTBlOWZlZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QKICAg
ICBpZiAoIXNuYXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2hh
cmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+
aW50ZXJuYWxTaXplKCksIHsgfSk7CisgICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0pOwog
ICAgIGlmICghc2hhcmVkU25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389449</attachid>
            <date>2020-01-31 19:00:23 -0800</date>
            <delta_ts>2020-02-18 09:58:04 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Pacthes-06.patch</filename>
            <type>text/plain</type>
            <size>300247</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMmRkMGNjM2MzYy4uNTEzODExOWY0OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjIgQEAKKzIwMjAtMDEtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFn
ZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBkZWNvdXBsZSB0aGUgcGxhdGZvcm0g
c3BlY2lmaWNzIGFuZAorICAgICAgICB0aGUgYmFjay1lbmQgZGV0YWlscyBmcm9tIHRoZSBpbnRl
cmZhY2UgIkltYWdlQnVmZmVyIi4KKworICAgICAgICBBIGNsYXNzIGhpZXJhcmNoeSBmb3IgdGhl
IEltYWdlQnVmZmVyQmFja2VuZCB3aWxsIGFkZGVkIHRvIGFsbG93IGNvZGUKKyAgICAgICAgc2hh
cmluZyBhbmQgdG8gc3BsaXQgdGhlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBwbGF0Zm9ybSBhbmQg
dGhlIGJhY2stZW5kCisgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2ls
bCBiZSBrZXB0IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2RlIGJ1dCBkaWZmZXJl
bnQKKyAgICAgICAgYmFjay1lbmRzIHdpbGwgYmUgY3JlYXRlZC4gQ29udGV4dHVhbEltYWdlQnVm
ZmVyIGlzIGEgdGVtcGxhdGUgY2xhc3Mgd2hpY2gKKyAgICAgICAgaW5oZXJpdHMgSW1hZ2VCdWZm
ZXIgYW5kIHdpbGwgIGFjdCBhcyBhIGJyaWRnZSB0byB0aGUgY29uY3JldGUKKyAgICAgICAgSW1h
Z2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgIEJhc2VkIG9uIHRoZSBSZW5kZXJpbmdNb2RlLCBh
IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gd2lsbAorICAgICAgICBiZSBjcmVh
dGVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSByZW5kZXJpbmdNb2RlIGluIG1hbnkgcGxhY2Vz
IG9mIHRoZQorICAgICAgICBjb2RlIGFuZCBpbnN0ZWFkIG9mIGFuZCB1c2luZyBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlcywgYWxsIHRoZXNlIGRlY2lzaW9ucworICAgICAgICB3aWxsIGJlIG1hZGUg
aW4gdGhlIGNvbmNyZXRlIEltYWdlQnVmZmVyQmFja2VuZC4KKworICAgICAgICBUaGlzIHJlLWZh
Y3RvcmluZyB3aWxsIGFsbG93IGNyZWF0aW5nIG5ldyB0eXBlcyBvZiBJbWFnZUJ1ZmZlcnMgYmFj
a2VkIGJ5CisgICAgICAgIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzLiBUaGVzZSBuZXcgSW1hZ2VC
dWZmZXJCYWNrZW5kcyB3aWxsIGltcGxlbWVudAorICAgICAgICBEaXNwbGF5TGlzdCBkcmF3aW5n
IGFuZCBzeW5jaHJvbml6ZSByZW1vdGUgcmVuZGVyaW5nLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZVJlc3BlY3RpbmdPcmllbnRhdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjplbnN1
cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgQSBicmlkZ2UgY2xhc3MgdG8gSW1hZ2VCdWZmZXJC
YWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIFJlbW92ZSBhbGwgdGhlIGJhY2stZW5kIGFuZCBwbGF0Zm9ybXMgZGV0YWlscy4g
VW5pZnkgdGhlIGludGVyZmFjZSBzdWNoCisgICAgICAgIHRoYXQgSW1hZ2VCdWZmZXIgZG9lcyBu
b3QgaW5jbHVkZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gQWxsIHRoZSAKKyAgICAgICAgcGxh
dGZvcm0gc3BlY2lmaWNzIHdpbGwgYmUgaW4gSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlw
bGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNv
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5kQ29vcmRpbmF0ZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsUmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToK
KyAgICAgICAgQSBiYXNlIGNsYXNzIHdoaWNoIGRlZmluZXMgc29tZSAgZGVmYXVsdCBiZWhhdmlv
cnMgc28gbm90IGFsbCB0aGUgcGxhdGZvcm1zCisgICAgICAgIGhhdmUgdG8gaW1wbGVtZW50IHRo
ZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNo
YWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JT
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRh
VVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0
b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRU
b1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBbiBhY2NlbGVy
YXRlZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQW4gdW5hY2NlbGVyYXRl
ZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZh
Y2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIEEgQ2Fpcm8gc3VyZmFj
ZSBiYXNlIGNsYXNzIGJhY2stZW5kLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpi
YXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgQSBiYXNlIGNsYXNzIGZvciBhbGwgQ0cgYmFjay1lbmRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdl
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQW4gdW5hY2NlbGVyYXRlZCBD
RyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmNwcDogUmVtb3ZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHRDb2xvclNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNv
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVk
LgorICAgICAgICBBbiBJT1N1cmZhY2UgYWNjZWxlcmF0ZWQgQ0cgYmFjay1lbmQuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
cHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBSZW1vdmUgRGlyZWN0MkQgaW1wbGVt
ZW50YXRpb24gZm9yIEltYWdlQnVmZmVyLiBJbnRyb2R1Y2UgCisgICAgICAgIEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwcGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1
ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQp
OgorCiAyMDIwLTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CiAKICAgICAgICAgTWFrZSBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dElt
YWdlRGF0YSgpIHJldHVybiBhbmQgdGFrZSBJbWFnZURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4
IDU0ZGI3MTZhYzg3Li5iYzRiMGNiNTMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDQyLDYg
KzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0x
MDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MS4uNWQxNzc0M2VkMzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtODMsOCArODMsNyBAQCBpZiAoJHtVU0VfRElS
RUNUMkR9KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckRpcmVjdDJE
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRpdmVJbWFnZURpcmVjdDJELmNwcApA
QCAtMTMyLDggKzEzMSw5IEBAIGVsc2UgKCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFj
ZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCkBAIC0xNzYsNyAr
MTc2LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5o
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRl
eCA5YWI0Njg3MzllZi4uZjRiOWI3Zjg4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCkBA
IC04NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJl
Y3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCkBAIC0yMDEsNyArMjAwLDYgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9j
YWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBh
ZWMzMjA2N2QzZS4uMTIyMTVhYjFkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0y
OTEsOCArMjkxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9T
dXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNw
cApAQCAtNTI3LDcgKzUyOSw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVdpbi5jbWFrZQppbmRleCA0ZjMwNzE1OWI3ZS4uOGFmNzAxYzc3N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCkBAIC0xMTksNyArMTE5LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVs
RGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2hhcmVkR0RJT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
NjQxZDZmZDQzNWUuLmUwNzY0ZmJmNGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2NSw2ICsxODY1
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNGRlNzVkZjhkZjAuLjc2NjFlMmI5YWQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFj
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggY2M1ODdjZTU2MjcuLjgxNmVhZDgxNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAK
IAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUx
MjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQky
MjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5
NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMy
ODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJC
RDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0
ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50Lmgg
Ki87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEy
OTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04
MzMsMTcgKzgzMSwxNyBAQAogCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3ND
b250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFF
QTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8q
IENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3
IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25V
bmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQx
MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggKi87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkw
MEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRERTFDREUxRjU3NEFBQjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Lmgg
Ki87IH07Ci0JCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxp
dGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRE
RTFDRTYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07
Ci0JCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5oICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VF
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpT
VlJEaXNwbGF5RXZlbnRSZWFzb24uaCAqLzsgfTsKLQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1
IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEREUxQ0VDMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUx
RDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1
IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggKi87IH07Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2
NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNGMDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICov
OyB9OwotCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJG
RjAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCAqLzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAw
RDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNGNDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsK
LQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRC
RkYwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1
NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IH07CisJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
Q0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzRE
MDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IH07CisJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIz
MTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIw
OTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3
M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2
NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFE
QjU0MUQwMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREZBNDg4RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVy
U291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTIxNTEsNiArMjE0OSw3IEBACiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
Q2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5
OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZB
NTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmlu
Z01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRp
bWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4
MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTc1NzkzRUM5MEQw
Q0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVz
c2FnZUV2ZW50LmggKi87IH07CkBAIC0yNTgxLDcgKzI1ODAsNiBAQAogCQk4QUY0RTU1QzExREM1
QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QkQzN0E2ODIwMUJCMzlDMDAxMTczNEEgLyogUmVh
ZGFibGVTdHJlYW1DaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOEJEMzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RTRD
OTZERDFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAg
LyogSlNGZXRjaFJlc3BvbnNlLmggKi87IH07Ci0JCThFNjIwRTgxMjBFRTYwMjQwMDdCQzVFRiAv
KiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1E
aXNwbGF5Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOEVDNkM5NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdhcExlbmd0aC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEVDNkM5NjEyMDFBMjUwMTAw
RkJGQTUzIC8qIEdhcExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RjY3NTYxOTEy
ODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNT
dGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0
aXZlcy5oICovOyB9OwpAQCAtNjU1OSw5ICs2NTU3LDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAw
MDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUEx
NkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBh
YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRh
Q0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5
NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEy
OEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1
IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjA1LDYgKzk2MDAsMTYgQEAKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4
MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E3MjNFMTcz
MjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUEy
M0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FEMjNFMUU1
NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyog
SlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDcsOCArMTA1NTIsNiBAQAogCQk4
RTMzQ0Q5MzIwMUEyOUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ZldGNoUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFN0Uy
MEVFNUZFMjAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZSUGxhdGZvcm1EaXNwbGF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1E
aXNwbGF5Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZv
cm1EaXNwbGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFQzZDOTYx
MjAxQTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR2FwTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGNjc1
NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV2ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OEY5MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpTRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjY3OCw3ICsxMjY4MSw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAv
KiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2
QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODQxLDkgKzI0ODQzLDEyIEBACiAJCQkJOTM0OTA3RTMx
MjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzEx
MTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2
NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
ICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAq
LywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
ICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5o
ICovLAorCQkJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBOTIzRTFFNTQzMDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNB
QjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJ
CQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
ICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNH
LmNwcCAqLywKQEAgLTI0OTM1LDYgKzI0OTQwLDcgQEAKIAkJCQkwRkU2Qzc2QzFGQkZCN0E2MDAy
NUMwNTMgLyogQ29sb3JVdGlsaXRpZXMuaCAqLywKIAkJCQlDMkY0RTc4ODFFNDVBRURGMDA2RDcx
MDUgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlDMkY0RTc4OTFFNDVBRURG
MDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggKi8sCisJCQkJNzJCQUMzQTcyM0Ux
NzMyODAwOEQ3NDFDIC8qIENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0
MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJ
MkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8s
CiAJCQkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICov
LApAQCAtMjUwMzIsNyArMjUwMzgsOCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAv
KiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAv
KiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIElt
YWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YS5oICovLAorCQkJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VE
ZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNv
ZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3Bw
ICovLApAQCAtMjUwODksNiArMjUwOTYsNyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFG
NyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJu
LmggKi8sCisJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
ICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1U
ZXh0VHJhY2suaCAqLywKQEAgLTI1ODI0LDcgKzI1ODMyLDYgQEAKIAkJCQk2NTZCODRENzBBRUEx
Q0U5MDBBMDk1QjQgLyogbmV0d29yayAqLywKIAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIg
Lyogc3FsICovLAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAotCQkJ
CUUxODgyMzVGMjAzMUY1MEYwMEI0MkRGMyAvKiB2ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZE
QTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8sCiAJCQkJNDlBRTJEOTQxMzRFRTVG
OTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAogCQkJCTQ5QUUyRDk1MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCkBAIC0yODkwOCw2ICsyODkxNSwx
NyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxs
KSBpbiBIZWFkZXJzICovLAogCQkJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGlu
IEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBI
ZWFkZXJzICovLAorCQkJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLywKKwkJCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRl
cnMgKi8sCisJCQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJz
ICovLAorCQkJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LywKKwkJCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8s
CisJCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAor
CQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJ
CQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJ
MkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTdD
RDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDZCOTUxOTUyMDdENjMzNDAwQTdEMkREIC8qIEFic3RyYWN0RE9NV2luZG93
LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjYyLDggKzMwMjgwLDcgQEAKIAkJCQk3Qzc5MDNCMzFG
ODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUz
NjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJC
RDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcw
MjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTMxMTY4LDE3ICszMTE4NSw2IEBACiAJCQkJQkU4RUYwNEQxNzFD
OTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2
RTc5MTQ5MUY5N0UwMUEwMDE5OTczOSAvKiBKU1Zpc2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzc3OUJEOTYxRjMyMjQ2QTAwQzIxNDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGQTFGNTc0QzNF
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFD
RkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmll
bGRPZlZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAv
KiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwNDFGNTc0RDA1MDBE
MUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDYxRjU3
NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwODFG
NTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkUyMDUwODIxOEE0NjBDMzAwODA2NDdFIC8qIEpTVlRUQ3VlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QUY5QjIwRDE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3
MWEuLjE2MmIyOTQyZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTE5MSw4
ICsxOTEsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZgogICAgICAgICByZXR1cm5CdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQog
Ci0gICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmludGVy
bmFsU2l6ZSgpKQotICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUo
KTsKKyAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+YmFj
a2VuZFNpemUoKSkKKyAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUo
KTsKIAogICAgIHNpemVfdCBwcmV2aW91c01lbW9yeUNvc3QgPSBtX2ltYWdlQnVmZmVyQ29zdDsK
ICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2EuLjEyYTJkNzRmZmJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMsNyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
aAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkwZDI0
NmVjNTkuLjZmYTRmZmUxNDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDgyMjQ0YTRmMmIuLmRkZDVjNmM3MzQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CkBAIC0xNjUsMTIgKzE2NSw3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbihjb25zCiAgICAgICAgIHJl
dHVybiBpbWFnZTsKIAogICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdOYXRpdmVJbWFnZShpbWFn
ZSwgcmVjdC5zaXplKCksIHJlY3QsIHJlY3QsIHsgb3JpZW50YXRpb24gfSk7Ci0KLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKICAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4g
YnVmZmVyLT5uYXRpdmVJbWFnZSgpOwotI2VuZGlmCiB9CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oCmluZGV4IDhiMTM3ODkxNzkxLi43ZjU0NWUzYTkyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgK
QEAgLTEgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCiAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENv
bnRleHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQg
PSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENvbnRleHR1YWxJbWFnZUJ1
ZmZlcj4obmV3IENvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKSk7CisgICAg
fQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgIHsK
KyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dHVhbEltYWdlQnVmZmVyPihuZXcg
Q29udGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisg
ICAgeworICAgIH0KKworICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKwor
ICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0
KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7Cisg
ICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9n
aWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmxvZ2ljYWxTaXpl
KCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKTsgfQor
CisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tl
bmQtPm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5Q29zdCgpOyB9CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAg
fQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZl
UmVzb2x1dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFj
a2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgfQorCisgICAgTmF0aXZl
SW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgfQorCisgICAgUmVm
UHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAg
IH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9iYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworICAgIH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVz
dENvbG9yU3BhY2UpOworICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3Rf
Y2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9w
dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbElt
YWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nh
c3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAg
ICByZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgfQorCisgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Y29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNy
Y1JlY3QpOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAg
fQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgfQor
CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
IGNvbnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRl
eHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1
cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgfQorCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKaW5kZXggZjNlZWU5M2E1MzIuLjBmZWIxMTJmMmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjksNDMgKzI5LDg5IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVu
Z3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1w
ZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXIpOwotCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5k
b3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAoY29udGV4
dC5yZW5kZXJpbmdNb2RlKCkpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCBjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVm
ZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKwor
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIGNv
bnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBo
aWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXpl
IC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworCiB9CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywg
dGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7
CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29u
dGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUg
LyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWln
aHQoKSkgKiBmbG9vcmYoc2l6ZS53aWR0aCgpKSA+IE1heENsYW1wZWRBcmVhOwogfQogCkBAIC0x
MDUsNDggKzE1MSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwg
Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJ
Uk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0
dXJuIHsgfTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpIH07Ci0gICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7Ci0gICAgaWYgKCFp
bWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNy
Y1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAg
ICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwot
ICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCBy
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBi
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dpY2FsUmVjdCk7Ci19Ci0K
LSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTE2
Myw1MCArMTczLDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1h
Z2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBj
b25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBh
Ym91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRl
ciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlm
Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdhYmZlMGQxNzExLi5lNWMwM2U0ZGY4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yNyw1NiArMjcsMTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgi
Ci0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIK
LSNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7
Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1l
bnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRl
ZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJh
Y2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19Owot
Ci1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsK
LQogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JU
KEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAg
Ly8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBu
dWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51
bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGli
bGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0
aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRv
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIENyZWF0ZSBh
biBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxl
IHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhp
cyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CkBAIC05Miw3NSArNTEsNTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEludFNpemUgY29t
cGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CiAgICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKLSNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCisg
ICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1
dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGJh
Y2tlbmRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgPSAwOwogICAgIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlD
b3N0KCkgY29uc3QgPSAwOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCi0gICAgTmF0
aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdDsKLSNlbGlmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOworCisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0
KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKICAgICBzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
LSNlbmRpZgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0K
LSNlbmRpZgotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdDsKLSAg
ICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50ID0geyB9KTsKLSAgICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9IDA7CiAKICAg
ICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0
aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMg
dGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKLQotcHJpdmF0
ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAg
IEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQot
ICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBn
aXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQg
c2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykK
LSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wm
IHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNz
KTsKLSNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKKyAgICAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZl
SW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApp
bmRleCA4YjEzNzg5MTc5MS4uNDYzYWE1ZGE2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMSArMSwy
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIAorI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2xvZ2ljYWxTaXpl
KGxvZ2ljYWxTaXplKQorICAgICwgbV9iYWNrZW5kU2l6ZShiYWNrZW5kU2l6ZSkKKyAgICAsIG1f
cmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xv
clNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFj
a2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7
CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNp
emUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07Cisg
ICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVB
c0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgYmFja2VuZFNp
emUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PihiYWNrZW5kU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29y
ZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93Pihi
YWNrZW5kU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGJhY2tlbmRT
aXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVy
biBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgYXV0
byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwor
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0o
cGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBp
eGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0o
cGl4ZWxPZmZzZXQgKyAyKTsKKworICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsg
ZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAg
c3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAg
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmlt
YWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSk7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3QK
K3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51
bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUu
d2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsK
KworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRh
KTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9n
aWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9y
bWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0
LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNd
OworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RQaXhlbClbMF0gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNy
Y0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3Jj
UGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVs
WzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENv
bG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhf
dCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7
CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0
LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgewor
ICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAg
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAg
ZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0
UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAg
cGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICog
MjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBh
bHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxb
M107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29s
b3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
c3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFsw
XSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4
ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhl
bFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCit0
ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90Kiwg
Q29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53
aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkg
eworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisg
ICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RD
b2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1h
dCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50
U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhh
Rm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5h
Y2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJh
dGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3cs
IGRlc3RSb3dzLCBzaXplKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgSW50UmVjdCBz
cmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisKKyAgICBhdXRv
IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6ZSgpKTsKKyAg
ICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9ICBpbnRlcnNlY3Rpb24oYmFj
a2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVj
dFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVkLngo
KSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5z
ZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNy
Y1JlY3RTY2FsZWQuc2l6ZSgpKQorICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwo
KTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndp
ZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
ICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKwor
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90
KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xp
cHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAg
ICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywK
KyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpCit7
CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVj
dCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMo
ZGVzdFBvaW50KTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24o
eyBJbnRQb2ludDo6emVybygpLCBpbWFnZURhdGEuc2l6ZSgpIH0sIHNyY1JlY3RTY2FsZWQpOwor
ICAgIEludFJlY3QgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3Zl
QnkoZGVzdFBvaW50U2NhbGVkKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdFNjYWxlZC54KCkpOwor
CisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShk
ZXN0UmVjdC55KCkgLSBzcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBkZXN0UmVjdC5pbnRlcnNl
Y3QoYmFja2VuZFJlY3QoKSk7CisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5z
aXplKCkpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsK
KyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEp
ICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKwor
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgo
KTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgc3Jj
UmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0
OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3Jt
YXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuaAppbmRleCA4YjEzNzg5MTc5MS4uOWEzYjYzY2RmNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCkBAIC0xICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLwogCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZTsKK2NsYXNz
IEltYWdlRGF0YTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0
b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHku
CisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0
IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gOiB1aW50OF90
IHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENvbG9yRm9ybWF0IDogdWlu
dDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tl
bmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFj
a2VuZCgpID0gZGVmYXVsdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgeyB9CisKKyAgICBJbnRTaXplIGxvZ2lj
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgYmFj
a2VuZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRTaXplOyB9CisgICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBj
b25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkg
eyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVm
UHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkg
PSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwg
R0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzUGVyUm93
KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUud2lkdGgoKTsgfQorICAgIHZpcnR1
YWwgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gQ29sb3JG
b3JtYXQ6OlJHQkE7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCB0b0JhY2tl
bmRDb29yZGluYXRlcyhUIHQpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxULCBJbnRQb2ludD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBJbnRTaXpl
Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIGlm
IChtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICAgICAgdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIEludFJlY3QgbG9naWNh
bFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fbG9naWNh
bFNpemUpOyB9OworICAgIEludFJlY3QgYmFja2VuZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja2VuZFNpemUpOyB9OworCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNp
emU7CisgICAgSW50U2l6ZSBtX2JhY2tlbmRTaXplOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNj
YWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQyYTVjODg1ZTUuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
VVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNU
MkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlS
TykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
aW5kZXggOGIxMzc4OTE3OTEuLmUwOWJmMmMwZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0xICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0Uo
Q0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShE
SVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYg
VVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcg
UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNl
bGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFj
a2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlmCisKKyNp
ZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7Cisj
ZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRm
b3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0
Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYzdhZTJmNWQ3M2IuLjNj
ZmNlNzI5NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRv
d0J1ZmZlcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW1hZ2VCdWZmZXImCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4
dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmludGVybmFsU2l6ZSgp
OworICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IGxheWVySW1hZ2UuYmFja2VuZFNpemUoKTsKICAg
ICBpZiAoYnVmZmVyU2l6ZSAhPSBsYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFz
c2VkIHRvIGNsaXBUb0ltYWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRp
cmUgYnVmZmVyLAogICAgICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxs
LCBzbyBjbGlwIHRvIHRoZSBmaWxsZWQgcGFydCBmaXJzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmlu
ZGV4IDM5NmNmMGJlMDcwLi5iMjM2NTQxM2ZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0x
NzUsNyArMTc1LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJh
d1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwg
Y29uc3QgRmxvYXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0
ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7
CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250
ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2lu
KSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFk
b3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBo
YSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2
b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hh
ZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3
U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VC
dWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0
byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2Uu
Z2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9w
ZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9
CiB9CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBz
YXZlKHBsYXRmb3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFn
ZS5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVm
ZmVyKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2lu
LCBleHBhbmRlZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291
cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3Li40ZTFi
ZjJiNDM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRm
b3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0Li5jZDg2NWFhYTI2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCkBAIC00MTQsNyArNDE0LDcg
QEAgSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAoYXV0byBzdXJm
YWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZl
ci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6
Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RS
ZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmJiNWM2NDgyYjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0K
LSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgot
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCi0jaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxj
YWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNs
dWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jZW5kaWYKLSNl
bmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVk
ZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIK
LSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXpl
KQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBt
X2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlm
Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBO
aWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0
Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1h
Z2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09T
SUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNlbmRpZgotCi0g
ICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNo
YXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAg
ICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgot
Ci0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVD
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lk
IEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0gICAgYXV0byog
Y29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29tcG9zaXRvclN1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250
ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jb21w
b3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQo
KSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJP
X0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0cjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotI2VuZGlm
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwot
Ci0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0
b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAg
IFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwot
ICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4
dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAgICAgfTsKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnBy
b3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclBy
b3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNv
dWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0
aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29u
dGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBj
b3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCi0gICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2Uu
Z2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQo
KSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JD
ci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2VuZGlmCi0KLXZv
aWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19P
UEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1dG8qIGNvbnRl
eHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJl
IGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20gYSBwcmUtZXhp
c3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0gICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsK
LQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBu
b24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShk
ZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwg
bV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2xlYXJT
dXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkK
LXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShD
QUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkp
KTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAw
KTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQot
c3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdl
KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fp
cm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWlyb1N1cmZhY2VD
b3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURh
dGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJm
YWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6
OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5k
b3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSksIHJlbmRlcmlu
Z01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2Fs
ZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJs
eSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYobV9y
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9
IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBp
ZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJ
bnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAg
IGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dM
U3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
Ci0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2Nl
bGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1f
cmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAg
ICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtl
eTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgo
Q0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lkKiBzdXJm
YWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQo
KSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEp
LCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBz
dHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0
YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQot
ICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNldCBtX2lu
aXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2Rh
dGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENy
KGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9w
bGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6
On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpz
aW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJuIGltYWdl
QnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIC8v
IGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZh
Y3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0gICAgICAg
IHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhl
IHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdl
OjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZj
b250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNl
LmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0
aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5h
bHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
KSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJ
bWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9v
a1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9u
cyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJp
ZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAg
ICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRh
U3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndp
ZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAg
ICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigq
cGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxl
W3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWly
b19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAs
IDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0K
LVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3Qo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1
cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNl
KTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0
bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEg
dGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VS
RkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0
LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJl
bXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1
ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92
ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFy
ZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFz
IHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6
c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgot
ICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5o
ZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3Qu
eCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4g
c2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9y
aWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwg
MCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAg
ICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUu
d2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50
IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55
IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsK
LSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBz
aXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAv
LyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAg
IGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNr
aW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZp
Y2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgot
ICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJv
d3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJm
YWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7
Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNv
bHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54
KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAh
PSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ug
b3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIElu
dFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwg
MCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAg
Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1h
Z2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55
KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
RHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93
cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkg
KyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsr
KSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxs
aW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAg
ICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4Owot
ICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAg
ICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0
PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVm
ZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3Vs
dC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNv
bnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5
c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChy
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBi
YWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAg
ICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xv
Z2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9n
aWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5z
aXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRT
b3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFj
a2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChk
ZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRS
ZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9p
bnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAg
ICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdp
bnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9p
bnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxv
Z2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChk
ZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVj
dC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVk
U291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2lu
dC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9z
aXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAg
aW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAg
ICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNj
YWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNh
bERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0g
ICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2Nh
bGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQu
eSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9n
aWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJU
KGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0
eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsK
LQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNj
YWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJ
bnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBj
YWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlv
blNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwot
ICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFj
ZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkp
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAg
ICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0g
cm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBm
dW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5z
aWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4
ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAg
ICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAg
IC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdl
U3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1
bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5t
X3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlv
biBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dp
Y2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNl
UmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSk7
Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVU
eXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFz
ZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2
NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBi
YXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dl
dF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLSAgICByZXR1cm4g
ZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFw
cGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0K
LSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBz
dXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wm
Pih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6
U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNl
bmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0
Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkK
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNl
Ci0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PElt
YWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhl
IEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBo
ZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAg
IHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5k
VGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VC
RV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJl
VGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0
LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4
dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFS
QU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGU2
OWRlMjliYjJkLi4wNzZhZjQwODk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgor
CisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBVU0Uo
Q0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxl
YXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0
Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRv
JiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRy
YXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhh
LCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBE
b250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3Bh
Y2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAo
c3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Cisg
ICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAh
PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xv
clNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Cisg
ICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7
CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChj
b2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5Owor
ICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJS
Z2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JH
QikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmlj
ZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNv
bG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9
CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWlt
ZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBi
YXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFz
ZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGlt
YWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
OworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oCmluZGV4IGU2OWRlMjliYjJkLi4yM2I5MTlhZDUyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZp
c2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykg
Q28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7Citw
dWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNw
YWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkg
b3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAg
IENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcAppbmRleCBlNjlkZTI5YmIy
ZC4uZDM2MzcyZjkxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaW5jbHVkZSAiR0xDb250ZXh0
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KKworI2lmIFVTRShFR0wpCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCisjZWxzZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorI2VuZGlm
CisjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxl
cG94eS9nbC5oPgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
KyNlbHNlCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgorI2Vu
ZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlKQoreworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShzdXJmYWNlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBD
QUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7
CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBXZSBtdXN0IGdl
bmVyYXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBB
UEkgZm9yIGV4dHJhY3RpbmcgaXQKKyAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2Uu
CisgICAgdWludDMyX3QgdGV4dHVyZQorICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKworICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisKKyAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgYmFja2VuZFNpemUud2lkdGgo
KSwgYmFja2VuZFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5j
YWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9y
bWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAgIGNhaXJvX2dsX2RldmljZV9zZXRf
dGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05U
RU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6
ZS5oZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBD
QUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVh
clN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYmIHN1cmZhY2UsIHVpbnQzMl90IHRleHR1cmUpCisgICAgOiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCisgICAgLCBtX3RleHR1cmUo
dGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhp
cykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2VuZGlmCit9CisKK0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEp
CisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKKyNlbmRpZgorCisgICAg
R0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsK
KyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV90ZXh0dXJl
KQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAg
ICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisg
ICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1MYXllciogSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVy
biBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNlCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5j
ZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFj
dG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxp
cFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAgICBz
d2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgYmluZFRl
eHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVf
TUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRl
T2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9z
aXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdWludDMy
X3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0
aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9y
bWF0LCAwLCAwLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCks
IDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAgIGdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7CisgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xD
b250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBnbEdl
blRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCAsIEdMX1JHQkEsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWln
aHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0
b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
Y29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21w
b3NpdG9yVGV4dHVyZSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdo
dCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21w
b3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3Np
dG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgR0xD
b250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKwor
ICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICBjcmVhdGVDb21wb3NpdG9y
QnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgICAgICBb
dGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKyAg
ICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXpl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9
OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxh
eWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYg
d2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwg
YnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRo
ZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBq
dXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4K
KyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9z
aXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisjZWxzZQor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQor
eworICAgIEFTU0VSVChtX3RleHR1cmUpOworCisgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUg
YWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBm
bHVzaGluZy4KKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsK
KyAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
c3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUo
bV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX2JhY2tlbmRTaXplLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5o
CmluZGV4IGU2OWRlMjliYjJkLi5jZGYwZmFlN2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNl
bGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworI2lmIFVTRShO
SUNPU0lBKQorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5o
IgorI2Vsc2UKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorI2lm
IFVTRShOSUNPU0lBKQorICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsOjpDbGllbnQKKyNlbHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2Vu
ZGlmCisgICAgLCBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIH5JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+JiYpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHZvaWQgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJy
aWRlOworI2lmICFVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5
ZXJQcm94eS5jb3B5UmVmKCk7IH0KKyNlbmRpZgorI2Vsc2UKKyAgICB2b2lkIHBhaW50VG9UZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKKyNlbmRpZgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxOaWNv
c2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5k
aWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmU7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7
CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVp
bnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApp
bmRleCBlNjlkZTI5YmIyZC4uNTVmMmRkZTk4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsK
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19z
dXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNr
ZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9IGNhaXJv
X2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXpl
LndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFplcm9l
ZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURh
dGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0
UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXpl
LndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWlyb19zdXJm
YWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZh
Y2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgIH0p
OworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKHNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xv
clNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2lj
YWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFj
ZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5z
aWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJm
YWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxT
aXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xv
ciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhl
bENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxl
W3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4
ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdC
RnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZh
Y2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxT
aXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAppbmRleCBlNjlkZTI5YmIyZC4uMTYwMDM3
OTRmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5jcHAKaW5kZXggZTY5ZGUyOWJiMmQuLmUyZDE1ZjBiYTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwx
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNT
RVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdl
dCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordW5zaWduZWQgSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOwor
fQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZTogeworICAg
ICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlS
T19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aCht
X3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
bV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCks
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQo
Y3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIGNhc2UgRG9u
dENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29l
cmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7
CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZh
Y2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhh
dmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2
aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlC
ZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0
KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisK
KyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5n
ZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQor
CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3Qg
c3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBv
aW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7Cisg
ICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRl
c3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxlZC55KCksIHNyY1JlY3RTY2FsZWQud2lk
dGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmgKaW5kZXggZTY5ZGUyOWJiMmQuLmM5NDlmZjM3Mzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsg
bnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YTYxZTM1OTk0Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFD
YWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWly
by5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKE5JQ09TSUEpCi0jaW5j
bHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xhc3MgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICA6IHB1YmxpYyBO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAg
IDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAg
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0
dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1f
c3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6
ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2Uo
KTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2
b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVy
ZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNl
bHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZv
cm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50
MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDVlNGVjNzE5Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNp
ZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJ
bWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0j
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1
c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBp
cyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEltYWdlQnVmZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29s
b3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5
cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAg
IGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0g
ICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5
cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRD
b2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9y
U3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAg
ICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFj
ZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0g
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCks
IHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5n
IHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRl
eHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQot
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNz
KQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVz
b2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1
cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlv
blNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihy
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRT
aXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2Nh
bGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAg
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhl
aWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9
IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0
ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3Zl
cmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVj
a2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0
YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lk
dGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4g
bWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwot
I2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwot
Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVy
YXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0
KCksIGhlaWdodC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJm
YWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyks
IGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAg
IGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdp
bmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29u
dGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVz
ZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3Vy
ZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSho
b3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAg
IGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFs
bCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxl
cmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9j
Ojp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2Rh
dGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1f
ZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwg
OCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9k
YXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0g
W10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdl
QnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsK
LSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAg
ICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdl
dCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCku
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwot
fQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1
Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENH
Q29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBz
dWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0Owot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBp
bnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBj
YXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0
J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFu
eSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3Vy
ZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25z
dHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNz
IG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24n
dCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxT
aXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxN
ZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQs
IGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJl
IGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNh
dXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24g
b2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBw
b2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUm
IGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0
TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVy
biBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBs
b2dpY2FsU2l6ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGlt
YWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJ
blVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNp
emUoKSwgaW50ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVm
ZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZl
cikpLCBsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
KQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFp
bWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1
cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RG
TW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0
cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwg
OCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2Us
IG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFn
ZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4g
aW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJm
YWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNT
RVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNp
bmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVj
dDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZm
ZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAg
IGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29w
eUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIs
IG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3Rv
cmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBj
b25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBz
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGlt
ZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7
Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNp
emUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0g
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAg
ICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXko
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
b3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VS
ZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VT
aXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9
Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNl
U2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRp
bmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2gg
Q0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhp
cyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0K
LQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwg
cXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0
YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAg
cmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0
YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
LSAgICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAg
ICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICog
bG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxw
dHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAg
ICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgp
LCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0lt
YWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBp
bnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0g
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAw
LCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAg
ICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAgICAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1h
Z2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkp
LCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAg
IGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRh
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShj
ZkRhdGEpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBj
b25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcAppbmRleCA4YjEzNzg5MTc5MS4uMzFjZDIzNzU4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAKQEAgLTEgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENHQ29udGV4
dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENH
Q29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUJpdG1hcCkKKyAgICAg
ICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAgICAK
KyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRl
eHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBudWxs
cHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29u
dGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNv
bnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRl
eHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3Rh
dGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShD
R0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSkKK3sKKyAgICBpZiAo
aW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihi
YWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9w
dENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwg
YmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJu
IGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAg
ICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlm
TmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxT
aXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBGbG9h
dFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCks
IGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0K
KworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7Cisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEg
fHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJl
dHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2Up
LCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAo
YXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/
IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdl
ID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9y
ZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK1Jl
dGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisK
KyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAg
ICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7CisKKyAgICBpZiAo
Q0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3Qg
aGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBv
biB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAg
ICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsK
KyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4ZWxBcnJheS0+Ynl0ZUxlbmd0
aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5z
aXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcm90ZWN0ZWRQ
aXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVk
UGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWRh
dGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHBp
eGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAzMiwgNCAqIHBpeGVsQXJyYXlEaW1lbnNp
b25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1
bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0
b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFn
ZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRo
KCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRoKCks
IHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwor
ICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2Rl
Q29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkp
KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1h
Z2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAo
IWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRh
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAorewor
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikp
CisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1
cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2
SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2SW1h
Z2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dkltYWdl
UGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndpZHRoID0gc3Rh
dGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2SW1hZ2VCdWZm
ZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IHJvd3M7
CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMs
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0
IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBpZiAoc3JjQWxw
aGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNDb2xvckZv
cm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisgICAgICAgIC8v
IFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxz
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JB
LgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1
aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
c3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRl
c3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBp
eGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUp
OworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVy
Um93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChz
cmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCmluZGV4IDhiMTM3ODkxNzkx
Li5jN2NhMzk4MDM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0xICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6
CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAg
ICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29u
c3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0
dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCmluZGV4IDhiMTM3ODkxNzkxLi45MzgzYzk5NmU1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMSArMSwxNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0Owor
I2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNr
ZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1
bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFs
dWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMg
PSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBi
YWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVmYXVs
dEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dD
b250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2
b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0
X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJl
bGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBi
YWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRh
dGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRl
eHQpKQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShz
aXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOwor
ICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRv
dyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNr
ZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZv
aWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVm
ZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZN
b3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sK
KyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFT
U0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRl
eHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tp
bmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5QmFj
a2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAg
ICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4LCAz
MiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9y
U3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAg
ICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQor
CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdl
RGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCmluZGV4IDhiMTM3ODkxNzkxLi5i
NmFmNjYyYTFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0xICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
JiYsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsgfQorI2VuZGlmCisKKyAgICB2b2lk
KiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0
Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgot
I2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFS
R0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9S
TShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFU
RSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkp
Ci1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVy
JiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRh
KTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2
SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRv
IGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBl
Y3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0
IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBB
U1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1h
Z2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxz
IDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIElt
YWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYg
KFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0
YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwot
Ci0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3Jj
LmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93Owot
ICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVz
dC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93
Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdl
VW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0
KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwot
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
RGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50
IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAq
IGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJh
bnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5n
U3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2Vy
IGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygp
KTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBj
b25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsK
LSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0g
ICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/
IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsK
LSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8
IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwg
ZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0Zp
bGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9
IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmln
aW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1v
cmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1p
bjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBp
ZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUu
d2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAK
LSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsK
LSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAg
ICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0
aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVu
c2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlm
ICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsg
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFj
Y2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0
YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dC
eXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAg
ICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAg
ICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQp
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFn
ZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsg
Ml0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUp
IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhd
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsg
Ml0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClb
MF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4
ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAg
ZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
ICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQ
ZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAg
ICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBz
cmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dz
OwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0
LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlw
bHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8g
U3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJt
dXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwot
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWlu
dDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53
aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAK
LSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lngo
KSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVT
RUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChv
cmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgp
IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChD
aGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNT
RVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3
ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0
LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55
KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNh
ZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVu
ZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwot
ICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdo
dCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3Mg
PSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0
KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhf
dCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAg
ICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMu
d2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWln
aHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7
Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lk
dGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0g
ICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAg
ICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5k
aWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5
KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4
KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAg
ICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAg
ICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2Ug
YnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAy
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9T
dXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01v
ZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVz
UGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2su
c3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRl
cyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhf
dCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVz
dC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3Ro
LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93Owot
ICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAg
IHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAg
ICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAg
dkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAg
ICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXgg
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9
Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIzNzRiYWQyNC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNw
YWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dE
YXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRh
dGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9y
U3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9p
ZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRh
dGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZl
cnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXRE
YXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDhiMTM3ODkxNzkxLi5h
NDdjZjVjZGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0x
ICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwog
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgiCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNp
emUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6
bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lk
dGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxD
R0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9y
U3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29u
dGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAg
ICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNv
bnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9y
U3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFj
a2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xv
clNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBu
dWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1
cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBz
ZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3Vy
ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpt
ZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7
Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZh
Y2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1p
bmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9C
R1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7
CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBG
b3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWlu
aW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCmluZGV4
IDhiMTM3ODkxNzkxLi5kZmMwZjA0M2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgKQEAgLTEgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KIAorI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1
ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdF
QkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1
ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFj
a2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNv
c3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2
ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJh
d0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHVuc2ln
bmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2Vu
ZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFkNzUuLjJh
YTgyMzMyZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMjU0LDggKzI1NCw4IEBAIHZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKICAgICAr
K21fY2FjaGluZ0NvdW50Rm9yVGVzdGluZzsKIAotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0g
bV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgZGVjb2RlZFNpemVDaGFu
Z2VkKGludGVybmFsU2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0KTsKKyAgICBJbnRTaXplIGJhY2tl
bmRTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKKyAgICBkZWNvZGVk
U2l6ZUNoYW5nZWQoYmFja2VuZFNpemUudW5jbGFtcGVkQXJlYSgpICogNCk7CiB9CiAKIEltYWdl
RHJhd1Jlc3VsdCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGMyMTI1YzNlZjE2
Li4zOTFmYzIzY2QwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdp
bmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2wo
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6
OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXIt
Pm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQs
IHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQ
ZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRleCAxZTAzNWE3ZWVmMi4uOTE4
ZTE4YWY1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgp
LCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQo
KSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0o
Q09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZmMWIzOTQxNWViLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRh
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4g
YSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+
Ci12b2lkIHN3aXp6bGVBbmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNp
Z25lZCByb3dDb3VudCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5z
aWduZWQgZGVzdFN0cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCB5ID0gMDsgeSA8IHJvd0NvdW50OyArK3kpIHsKLSAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5
IGJlIHBvd2VyLW9mLXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMg
dGhhdAotICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkg
dGhlIGNhbGxlci4KLSAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7Ci0gICAgICAg
IHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5OwotICAgICAgICBm
b3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sQ291bnQ7ICsreCkgewotICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZVBvc2l0aW9uID0geCAqIDQ7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCog
c3JjUGl4ZWwgPSBzcmNSb3cgKyB4OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJz
IGV4cGVjdCAoUClSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdz
IFBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICB1aW50MzJfdCBhbHBoYSA9ICgq
c3JjUGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlZCA9
ICgqc3JjUGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVpbnQzMl90IGdy
ZWVuID0gKCpzcmNQaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1aW50MzJf
dCBibHVlID0gKCpzcmNQaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAoZGVz
aXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBn
cmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBi
bHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbl0gICAgID0gcmVkOwotICAgICAgICAgICAg
ZGVzdFJvd1tieXRlUG9zaXRpb24gKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd1ti
eXRlUG9zaXRpb24gKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlv
biArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGNvcHlS
ZWN0RnJvbVNvdXJjZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRT
aXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNp
emUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1
ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5j
b250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291cmNlQnVm
ZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0g
ICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotCi0g
ICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7
Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0
OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNv
dXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsg
ZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25l
ZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBjb25zdCB1
aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNldDsK
LSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkgKyBk
ZXN0Um93T2Zmc2V0OwotICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBieXRlc1BlclJv
dyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhh
dCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLWJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0
QW5kU2V0UHJlbXVsdGlwbGljYXRpb24oY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJ
bnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6
ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgp
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJj
ZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0
OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsK
LQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkg
KiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgp
ICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUg
KiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVz
dCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5z
aWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5z
aWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZz
ZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5
ICsgZGVzdFJvd09mZnNldDsKLQotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHNvdXJj
ZVJlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4ICogNDsK
LQotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOwotICAgICAgICAgICAgdW5z
aWduZWQgZ3JlZW4gPSBzcmNSb3dbeCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
IHNyY1Jvd1t4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd1t4ICsg
M107Ci0KLSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9
IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICog
MjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50
MzJfdCogcGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykgKyB4Owot
ICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAg
PDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYgcmVzdWx0KSBjb25zdAotewotICAgIGF1dG8g
cmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRoOwotCi0g
ICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gcmVjdDsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKHNjYWxl
RmFjdG9yKTsKLQotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5nU3RvcmVTaXpl
KS5jb250YWlucyhzY2FsZWRSZWN0KSkgewotICAgICAgICAvLyBSZXF1ZXN0ZWQgcmVjdCBpcyBv
dXRzaWRlIHRoZSBidWZmZXIuIFJldHVybiB6ZXJvLWZpbGxlZCBidWZmZXIuCi0gICAgICAgIHJl
c3VsdC0+emVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3RvcmVTaXpl
LCBkYXRhLmRhdGEoKSwgcmVjdC5zaXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRT
aXplJiBzaXplKSBjb25zdAotewotICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYg
IWRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gbnVtQnl0
ZXMgPSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJhY2tpbmdTdG9y
ZVNpemUgPSBzaXplOwotICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkp
OwotICAgIHJldHVybiBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7Ci19
Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEg
YnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQ+Ci12
b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQp
Ci17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotICAgIGF1dG8qIHBp
eGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJf
dCBwaXhlbCA9ICpwaXhlbERhdGE7Ci0gICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24gPSBpICog
NDsKLQotICAgICAgICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0
OwotICAgICAgICB1aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAg
ICAgICAgdWludDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAg
ICB1aW50MzJfdCBibHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgLy8gKFAp
UkdCQSAtPiBQQkdSQQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAyNCkgfCBy
ZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICArK3BpeGVsRGF0YTsKLSAg
ICB9Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JB
IGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4K
LXZvaWQgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1
bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQg
LyA0OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAg
ICAgICAgdW5zaWduZWQgeCA9IHBpeGVsQ291bnQgKiA0OwotCi0gICAgICAgIHVuc2lnbmVkIHJl
ZCA9IGJ5dGVEYXRhW3hdOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAx
XTsKLSAgICAgICAgdW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKLSAgICAgICAgdW5z
aWduZWQgYWxwaGEgPSBieXRlRGF0YVt4ICsgM107Ci0KLSAgICAgICAgaWYgKGRlc2lyZWRGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAg
ICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1
NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsK
LSAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGJ5dGVEYXRhKSArIGk7Ci0gICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAy
NCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgIH0KLX0KLQotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRT
aXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29s
dXRpb25TY2FsZSAqLykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAg
IGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghYml0bWFw
KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJ
Zk5lZWRlZChkZXNpcmVkRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXplIGJpdG1h
cFNpemUoY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3
Qml0bWFwU2l6ZS5oZWlnaHQpKTsKLQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9p
bnQoKSAmJiByZWN0LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKG51bUJ5dGVzLnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRSYW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIE9ubHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlmICghY29w
eVJlY3RGcm9tRGF0YShyZWN0LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewotICAgICAg
ICAvLyBJbi1tZW1vcnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0
byBzd2l6emxlIHRoZSByZXN1bHRzLgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBpblBsYWNl
Q2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRh
dGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
aXJlZEZvcm1hdCkgY29uc3QKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBC
dWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
SW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgYXV0byBu
dW1CeXRlcyA9IHBpeGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAo
bnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmRE
ZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNT
RVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0g
cGl4ZWxTaXplLndpZHRoKCkgKiA0OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJ
RDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRyPElEMkQx
Qml0bWFwMT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFBy
b3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19D
UFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhl
bEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKHBpeGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRp
ZXMyLCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQy
RDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCks
IHBpeGVsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFw
cGVkRGF0YTsKLSAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwg
Jm1hcHBlZERhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFtYXBwZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdl
IG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgot
ICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwg
cGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBk
YXRhLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBp
eGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5
dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0gZGVzaXJl
ZEZvcm1hdDsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5
bmM7Ci0KLSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVu
ZGVyaW5nICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJl
Y3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0K
LSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lngo
KSk7Ci0gICAgZGVzdHggKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eC51bnNh
ZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRo
KCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChv
cmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIENoZWNrZWQ8
aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4
WCgpKTsKLSAgICBlbmR4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keC51bnNh
ZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291
cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsK
LQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3Qu
eSgpKTsKLSAgICBkZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRlc3R5LnVu
c2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVp
Z2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VS
VChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIENoZWNr
ZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3Qu
bWF4WSgpKTsKLSAgICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keS51
bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQg
PSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBk
ZXN0eTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgYXV0
byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4
ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5o
ZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUu
aGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFlbnN1
cmVCYWNraW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzb3VyY2VT
aXplID09IHNpemUpIHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgp
LCBzb3VyY2UubGVuZ3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0Owot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3Jt
YXQpOwotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBz
b3VyY2UsIHNvdXJjZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Yml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0K
LQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6
ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0Nv
cHkgPSBzb3VyY2VSZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUp
LmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGRlc3RCdWZmZXJQb3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNv
dXJjZVRvRGVzdChzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAg
ICBpZiAoYnl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0
aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJj
ZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXpl
LCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVj
dEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291
cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3Np
dGlvbik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVk
ZWQoKQotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJp
dG1hcE91dE9mU3luYyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4
ZWxTaXplLmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAq
IHBpeGVsU2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0
YSBpcyBpbiBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRv
IGJlIGNvbXBhdGlibGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3
ZSB1c2UuCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEg
LT4gUEJHUkEKLSAgICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBS
R0JBIC0+IFBCR1JBCi0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVt
b3J5KG51bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5
bmM6OkluU3luYzsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNv
bXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBs
b2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAg
ICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFy
Z2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAo
Yml0bWFwVGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdC
aXRtYXA7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFw
KCZiYWNraW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAh
PSBiaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCBy
ZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVk
Qml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVE
RUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51
bGxwdHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
YXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWln
aHQgJiYgc2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1C
eXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFy
Z2V0LgotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0
bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5l
bmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VD
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3Vy
Y2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVT
MSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBf
T1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVj
dDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4
dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KCFzb3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJj
ZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhy
ID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21w
YXRpYmxlQml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFw
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291
cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVC
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21w
YXRpYmxlQml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5
NGQ4YTQ4MjIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxQml0
bWFwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBtdXRhYmxlIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0
ZXNQZXJSb3c7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAg
bXV0YWJsZSBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBtdXRhYmxlIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYnl0ZUZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gcGxh
dGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRl
eHQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0KLSAgICBlbnVtIGNsYXNzIEJp
dG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywgQnVmZmVyT3V0T2ZTeW5j
IH07Ci0gICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1ZmZlclN5bmMgeyBCaXRt
YXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKLQotICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGli
bGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIGJvb2wgZW5zdXJlQmFja2luZ1N0
b3JlKGNvbnN0IEludFNpemUmKSBjb25zdDsKLSAgICB2b2lkIGxvYWREYXRhVG9CaXRtYXBJZk5l
ZWRlZCgpOwotICAgIGJvb2wgcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbURh
dGEoY29uc3QgSW50UmVjdCYsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4mKSBjb25zdDsKLSAg
ICBib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiwgY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICB2b2lkIG1hcmtC
dWZmZXJPdXRPZlN5bmMoKSB7IGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpC
dWZmZXJPdXRPZlN5bmM7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCmluZGV4IGU2OWRlMjliYjJkLi4yNzBhYmVkZjBh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgor
CisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJDT01QdHIuaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdl
RGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dERpcmVjdDJELmgiCisjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8
bWF0aC5oPgorI2luY2x1ZGUgPHdpbmNvZGVjLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogcGxhdGZvcm1D
b250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBw
bGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1
bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpj
cmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoc2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0
aW9uU2NhbGUpOworICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0
LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAg
bV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAg
ICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKKyAgICB9KTsKKworICAgIGlmICgh
cGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4dCksIFdU
Rk1vdmUoYml0bWFwKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJu
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0
Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwg
TmF0aXZlSW1hZ2VQdHImJiBiaXRtYXApCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dp
Y2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAs
IG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29u
dGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQor
eworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1
c2goKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVT
VUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVl
cnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Cisg
ICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKKworICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4g
d2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJl
cy4KKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRh
dGEuaXNFbXB0eSgpKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9y
ZTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9
PSBDb3B5QmFja2luZ1N0b3JlKSB7CisgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURp
bWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7
CisgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMs
IG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworCisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOwor
fQorCitzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdl
LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCit7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGlt
YWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGlt
YWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdl
U2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkg
eworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6
Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRC
aXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAs
IGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBo
ciA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNl
UmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JvcHBlZEJpdG1hcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbWFn
ZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8
SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAg
aWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24K
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdU
Rk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRy
IGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0
ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCks
IHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJn
ZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJl
c29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgp
OworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAg
ICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkg
eworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChR
dWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgeworICAgICAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOworICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBk
cmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAg
ICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOworICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQ
aXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5
RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1h
cC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgp
OworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6
ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJv
bSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBj
YW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3Rp
dmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCisgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAg
Q09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZv
cm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNv
dXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0
aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVB
RCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1h
dCgpKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFw
KG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJp
dG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1h
cC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQx
X01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAt
Pk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAo
IVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElE
MkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKKyAgICBociA9IHJlbmRlclRh
cmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOworICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1h
cDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdl
dFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0
Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAg
ICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIg
PSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1h
cDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
YXV0byBjb21wYXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJ
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1
cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RDb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxk
b3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBudWxscHRyKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAppbmRleCBl
NjlkZTI5YmIyZC4uM2QxNTYwN2YzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgOiBw
dWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hD
b250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNh
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICBOYXRpdmVJ
bWFnZVB0ciBtX2JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAppbmRleCA0OTM2N2NiMjlkMC4uMzJiZjg2YmM2ZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNO
dW1lcmF0b3IsIGZwc0Rlbm9taW5hdG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJh
Y3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAg
ICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAg
ICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBh
dXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAog
ICAgICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAg
ICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZDc4
Njk0YWFlN2IuLmUyODU5MmE4MDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM0NSw3ICszNDUsNyBAQCBib29s
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiYgaW1hZ2VCdQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKICAgICAgICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94
ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5nQm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUg
YnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0
aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRl
ZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkpOwotICAgICAgICBp
ZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpCisgICAgICAgIGlm
IChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQogICAgICAgICAgICAg
aW1hZ2VCdWZmZXIucmVzZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYThjMGNhZjVlMWQuLmJh
NzgxYzdhMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTMxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgZGlm
ZmVyZW50IGJhY2stZW5kcyBmb3IgSW1hZ2VCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90IGNv
bnN0KToKKwogMjAyMC0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KIAogICAgICAgICBtYWNDYXRhbHlzdDogVHJpcGxlIGNsaWNraW5nIHRvIHNlbGVjdCBhIHNl
bnRlbmNlIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggOWZiYjFmZGYwZDguLjBmODg0Mjkw
MGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNy
ZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QKICAgICBpZiAoIXNuYXBzaG90KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxTaXplKCksIHsgfSk7Cisg
ICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0pOwogICAgIGlmICghc2hhcmVkU25hcHNob3Qp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391061</attachid>
            <date>2020-02-18 09:58:06 -0800</date>
            <delta_ts>2020-02-18 10:17:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200218095805.patch</filename>
            <type>text/plain</type>
            <size>305643</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI2NWQ2YWE1YWUyZWMz
MWRhMDA2MGQxMzRmNGUyZmVmYTJjNzZhNy4uYTMwMGJiMDlmN2M2MmUyODhkMGE1MjgwMDI5ODJl
YTU2YjE3YzNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNCBAQAorMjAyMC0wMi0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUgcmUtZmFjdG9yZWQg
dG8gZGVjb3VwbGUgdGhlIHBsYXRmb3JtIHNwZWNpZmljcyBhbmQKKyAgICAgICAgdGhlIGJhY2st
ZW5kIGRldGFpbHMgZnJvbSB0aGUgaW50ZXJmYWNlICJJbWFnZUJ1ZmZlciIuCisKKyAgICAgICAg
QSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQgd2lsbCBhZGRlZCB0
byBhbGxvdyBjb2RlCisgICAgICAgIHNoYXJpbmcgYW5kIHRvIHNwbGl0IHRoZSBjb2RlIGFjY29y
ZGluZyB0byB0aGUgcGxhdGZvcm0gYW5kIHRoZSBiYWNrLWVuZAorICAgICAgICBkZXRhaWxzLgor
CisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUga2VwdCBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVz
dCBvZiB0aGUgY29kZSBidXQgZGlmZmVyZW50CisgICAgICAgIGJhY2stZW5kcyB3aWxsIGJlIGNy
ZWF0ZWQuIENvbnRleHR1YWxJbWFnZUJ1ZmZlciBpcyBhIHRlbXBsYXRlIGNsYXNzIHdoaWNoCisg
ICAgICAgIGluaGVyaXRzIEltYWdlQnVmZmVyIGFuZCB3aWxsICBhY3QgYXMgYSBicmlkZ2UgdG8g
dGhlIGNvbmNyZXRlCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZC4KKworICAgICAgICBCYXNl
ZCBvbiB0aGUgUmVuZGVyaW5nTW9kZSwgYSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5
cGU+IHdpbGwKKyAgICAgICAgYmUgY3JlYXRlZC4gSW5zdGVhZCBvZiBjaGVja2luZyB0aGUgcmVu
ZGVyaW5nTW9kZSBpbiBtYW55IHBsYWNlcyBvZiB0aGUKKyAgICAgICAgY29kZSBhbmQgaW5zdGVh
ZCBvZiBhbmQgdXNpbmcgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFsbCB0aGVzZSBkZWNpc2lv
bnMKKyAgICAgICAgd2lsbCBiZSBtYWRlIGluIHRoZSBjb25jcmV0ZSBJbWFnZUJ1ZmZlckJhY2tl
bmQuCisKKyAgICAgICAgVGhpcyByZS1mYWN0b3Jpbmcgd2lsbCBhbGxvdyBjcmVhdGluZyBuZXcg
dHlwZXMgb2YgSW1hZ2VCdWZmZXJzIGJhY2tlZCBieQorICAgICAgICBuZXcgSW1hZ2VCdWZmZXJC
YWNrZW5kcy4gVGhlc2UgbmV3IEltYWdlQnVmZmVyQmFja2VuZHMgd2lsbCBpbXBsZW1lbnQKKyAg
ICAgICAgRGlzcGxheUxpc3QgZHJhd2luZyBhbmQgc3luY2hyb25pemUgcmVtb3RlIHJlbmRlcmlu
Zy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL0NhaXJvLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppbnRlcm5hbFNpemUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpyZXNvbHV0
aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmJhY2tlbmRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpieXRl
c1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJh
Y2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnRvQmFja2VuZENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kUmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRv
d0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZpbGxTaGFkb3dCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1
cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdl
UGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5k
Q29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpn
ZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBE
RkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklP
U3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
bXBhdGlibGVCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFw
cGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCiAyMDIwLTAyLTE4
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVy
biBhbmQgdGFrZSBJbWFnZURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGZhYjYyMDVlYzI5Mzg4ODI0MDFmYTRi
YjdkZjUxNGE1OTA0MzFkZS4uMTBjYjk5MTExMjAyMmRhMWViZTE3NWMyNjk2ZjMwZmJhYjc1MjAw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMi0xOCAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZlcmVudCBi
YWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9u
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90IGNvbnN0KToKKwogMjAy
MC0wMi0xNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTZWxlY3Rpb24gY2Fubm90IGJlIG1vZGlmaWVkIHZpYSB0ZXh0IGludGVyYWN0aW9uIGluIHNv
bWUgYXJlYXMgb2YgdGhlIGNvbXBvc2UgYm9keSBmaWVsZCBpbiBHbWFpbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggZjQ4MzJhYTcxNjM2Nzg1MTFkODZhNDk0MjA3MzM1ZDU3ZWRmMTYxYS4uODA1MDNj
MWM2OGFjODliNWExMzAxY2Q1OGViNTkzMjQyM2I3NzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC0xMDQyLDYgKzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNwYWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNv
ZGluZ09wdGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oCkBAIC0xMDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1M
YXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAx
N2JkMGYzY2Y5NDBkLi41ZDE3NzQzZWQzODQzMDExZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYg
KCR7VVNFX0RJUkVDVDJEfSkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5
ZXJEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKQEAgLTEzMiw4ICsxMzEsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApA
QCAtMTc2LDcgKzE3Niw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcu
Y21ha2UKaW5kZXggOWFiNDY4NzM5ZWYxMWZmNjA5Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRi
OWI3Zjg4NjZiMTI0MWE4NTU3OWIyZTYxZjdiYWU1NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1G
VFcuY21ha2UKQEAgLTg0LDggKzg0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3
ICsyMDAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IGZlMTFiNzYwMDhkODdlY2VlN2RlODYwYjBhZWU4MDhiYzVjNTE4MTYuLmZhNjI4
NDhhMTExNTY2YjNiZTNiMDdjZDNjOTRmY2M0ZDJhNjM0NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0yOTEsOCArMjkxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRQb2ludENHLmNwcApAQCAtNTU2LDcgKzU1OCw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVm
NWMwN2E4ZGM5M2ViLi44YWY3MDFjNzc3ZmUxNTJlMjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9ESUJQaXhlbERhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVu
Q29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyQ2xpZW50LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQzNTJhMzhhZDlmZWRhNTNkZTRmOTE2MGZlYzRiNDM5YzNiOTgwNjkuLjI0
ODBmMmEzZjIyZWUwZDM3NGFjOTg4MDYwNjIyZjFhZGYyZTcyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhMDVlMDFjZGVmMmNmZjE2YWI4
M2M1ZDRmMDYxNmIwY2M1MTZkZTQ5Li4wOWRjMTIzYmI3MWFkNjg3YjRiYTk4OGRmMjQ4OTU0ZjE4
MjY2MDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2JjZmRmNDQwNTE5MzBjYTlkMDQ5NTE2YzJkMGUwNGRh
OGE1ODhlYy4uOTlkNDg2OTllMjQzODk5YzM5YzQ0MzQ1NGQ0MmU3OTkyOGY1NDM5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NjQ1LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZC
MzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUg
LyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlG
N0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8q
IEltYWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdB
bHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5
cGhJdGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNT
VkdHbHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVu
dC5oICovOyB9OwpAQCAtMjEzNyw2ICsyMTM1LDcgQEAKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
OTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMg
LyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFD
M0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJ
NzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMw
QUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDYsOSArNjU0NSw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5Miw2ICs5NTg4LDE2IEBACiAJCTcyN0FGRUQzMUEy
RUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRz
UkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAw
Q0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2
NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E0MjNFMTcz
MjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3
NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQjIzRTFF
NTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYy
QSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJF
OEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjY1LDcg
KzEyNjcxLDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBC
MzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
QTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjQ4NDksOSArMjQ4NTQsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMz
QUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQx
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
NDIsNiArMjQ5NTAsNyBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0
aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21w
bGV4VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyog
Q29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMz
IC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZG
MDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQk0QjdBRTQ5NTIx
NzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8sCkBAIC0yNTAzOSw3ICsy
NTA0OCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0
b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNw
cCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywK
LQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJ
CQkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8s
CisJCQkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICov
LAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAog
CQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1
NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTA5Niw2
ICsyNTEwNiw3IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRp
ZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8s
CiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJB
QzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1
NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNE
N0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAog
CQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApA
QCAtMzAyNjEsOCArMzAyNzIsNyBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDRE
MUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkFDM0FFMjNF
MUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9s
c0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5Qjcw
MDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1
MzQ2MzlhNzM2MTQ1ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZSht
X2ltYWdlQnVmZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdl
QnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAg
ICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1h
Z2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAg
ICAgIG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3Qg
cHJldmlvdXNNZW1vcnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZl
ckNvc3QgPSBtZW1vcnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4
IDZhOWVjMmE5NTM5MDgwOTdlNzFjMDY2ZjkxOWM4N2IxNGJhZDg0Y2MuLmZjNmM1ZjNjZDA0NjI2
OTU2NjgyMmMwOGE0ODJjYzNiZDZhODgzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNt
YWtlCkBAIC0xMyw3ICsxMywxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCBmOTBkMjQ2ZWM1OWI0ZjhhOGUxMzhi
NzIyNDBjZjIwMjU4MzE5MmM0Li42ZmE0ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5
OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcg
KzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdl
Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKaW5kZXggNDgyMjQ0YTRmMmJkY2VkZTdjODc0Y2QxYjUwZWE5MTRiMTQ5OWEyMi4u
ZGRkNWM2YzczNDVhMmMwZDhiZDlhOGU0ZWZiNGUzY2I5OTU4N2M2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMTY1LDEyICsx
NjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWVSZXNwZWN0aW5nT3JpZW50YXRpb24oY29ucwogICAgICAgICByZXR1cm4gaW1hZ2U7CiAK
ICAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHJlY3Quc2l6ZSgp
LCByZWN0LCByZWN0LCB7IG9yaWVudGF0aW9uIH0pOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoRElS
RUNUMkQpCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1v
dmUoYnVmZmVyKSk7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgcmV0dXJuIGJ1ZmZlci0+bmF0aXZl
SW1hZ2UoKTsKLSNlbmRpZgogfQogCiAjaWYgVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZjU0NWUzYTkyMGZkYzZjYWQyNWI0YjU2ZTRiYjQ1NGQ2MTdhMTk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgQ29udGV4dHVhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIGF1
dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4
dHVhbEltYWdlQnVmZmVyPihuZXcgQ29udGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2Vu
ZCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0dWFsSW1hZ2VC
dWZmZXI+KG5ldyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9w
dHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShi
YWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBm
bHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENv
bnRleHQoKTsKKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRyYW5zZm9ybSgpOyB9CisgICAg
SW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+
bG9naWNhbFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPnJlc29sdXRpb25T
Y2FsZSgpOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29zdCgpOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+ZXh0ZXJuYWxNZW1vcnlD
b3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlv
ciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xv
clNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxD
b250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybiBtX2JhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgfQorCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgbV9iYWNr
ZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50KTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYgY29udGV4dCwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRl
c3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3Rp
bmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsK
KyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBmM2VlZTkzYTUzMjVlNTJlYmYzM2ZmZGU2
YzZhNjcxNzU4NzU2YzExLi44ZDI0YTQzNjFhNDk2MzJkODU1OGVlZjJiZTMyMzY2ZDZmYzZmZTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMzcgKzI5LDg0IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBN
YXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJl
YSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCi1XVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwotCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAg
ICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAg
ICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1
ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAg
ICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJ
bnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6
ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzY2FsZWRTaXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKwogfQog
Ci0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEs
IGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0
b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5z
Y2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29sIEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0x
MDUsNDggKzE1MiwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwg
Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJ
Uk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0
dXJuIHsgfTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpIH07Ci0gICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7Ci0gICAgaWYgKCFp
bWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNy
Y1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAg
ICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwot
ICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCBy
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBi
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dpY2FsUmVjdCk7Ci19Ci0K
LSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTE2
Myw1MCArMTc0LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1h
Z2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBj
b25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBh
Ym91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRl
ciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlm
Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdhYmZlMGQxNzExNDA2ZDkwOGUwMzFkMmY2
YTA3MWU0OTBhZjE4YWMuLmEwYjA0YWZlMjdkMzg1ODA4NzY2YWM2YzJiMTczNzUzZDQwNTgyYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjcsNTYgKzI3LDE2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
IgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRh
OwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQot
ZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50
ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlC
YWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsK
LQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07
Ci0KIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9S
VChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgogICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0g
bnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBu
dWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RU
b0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwpAQCAtOTIsNzUgKzUyLDU0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7Ci0jaWYgVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICAvLyBUaGUgYWN0dWFsIHJlc29s
dXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQotICAgIAotICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIAotICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObykgY29uc3QgPSAwOworCisgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RU
b0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgc3RhdGljIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0j
ZW5kaWYKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0K
LSNlbmRpZgotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdDsKLSAg
ICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50ID0geyB9KTsKLSAgICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9IDA7CiAKICAg
ICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0
aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMg
dGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKLQotcHJpdmF0
ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAg
IEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQot
ICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBn
aXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQg
c2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykK
LSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wm
IHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNz
KTsKLSNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFn
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1
ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFja2VuZFNpemUo
YmFja2VuZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisg
ICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUg
KiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2Nh
bGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgaWYg
KGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7
CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgaWYg
KCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkg
PSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3Jj
UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7
IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAg
ICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Cisg
ICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0g
c3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAgICAgZG91Ymxl
IGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91Ymxl
KWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMs
IGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6
ZXJvKCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICog
bV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93
LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgor
ICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1Bp
eGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFsz
XSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWlu
dDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVz
dFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFs
cGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVs
dGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBp
eGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBd
ICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAy
NTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1
KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9y
bWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVz
dFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQ
aXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4
ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9yKShDb2xvckZv
cm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xvckZvcm1hdCBz
cmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3Ms
CisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVf
dCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBi
eXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3Jt
YXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAg
ICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNj
ZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBj
b25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVz
KHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzcmNS
ZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0
YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBw
ZWQgPSAgaW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQpOworICAgIElu
dFJlY3QgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUo
KSB9OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Qu
c2V0WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwg
MCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYg
KGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgaW1hZ2VE
YXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cg
PSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0
Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6
OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFj
a2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9
IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RD
bGlwcGVkID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLnNpemUo
KSB9LCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3JjUmVjdENsaXBw
ZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAt
IHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55KCkpOwor
CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNyY1JlY3RDbGlw
cGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBp
bWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0
YS5kYXRhKCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAg
aW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENv
bG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzYjYz
Y2RmNzE3OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VE
YXRhOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8v
IEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBE
b250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNv
cHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAg
IE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsK
KyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkg
PSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRl
QmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1
YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAg
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKwor
ICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSA9IDA7CisK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51
bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25z
dCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1hdDo6
UkdCQTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFja2VuZENvb3Jk
aW5hdGVzKFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPFQsIEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNpemU+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAgaWYgKG1fcmVz
b2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dpY2FsU2l6ZSk7
IH07CisgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
KSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAg
ICBJbnRTaXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Cisg
ICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0
YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMxMDI0NDdjNzNh
MTJmMWQ2ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0
YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENH
KQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTA5YmYyYzBkYWZhMjNhMzgxMzE3MmMyYmJhODc1MjM1YWJhMzUzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQor
I2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJP
KSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1
c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7
CisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsK
KyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
aW5kZXggYzdhZTJmNWQ3M2I5MTM4ZDc1NGVkMTJhYTA3OGU3MWFiOTU5NTM0ZS4uM2NmY2U3Mjk1
NDIwOWQzMDNhOWY3MjQzMmZiYjRiNjM5ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5
ZXJJbWFnZS5pbnRlcm5hbFNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllcklt
YWdlLmJhY2tlbmRTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7CiAg
ICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBi
ZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBu
b3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3Qu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGY5NmZjOTViYjZkZTVlZDJj
ZjNkYTZlMTI5ZTFhNDMyYzcyNGM3YWQuLjg1M2NkMDJiYjhjZTkzOTAwNmJiZTM0ZTQwOTc5Yjhm
MzRkNGZjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC00NTMsNyAr
NDUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAotICAg
IHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykKICAgICAvLyBGSVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAppbmRleCA2ODk4NGQ1NjRhOTI5MjdkNDI4ZmNlYmI4MGUxNGFhY2Y5YWZhNGVm
Li5jZDhmMWRiMzU5ZTI2YTAxYTJjODViYmQyMmVhMzY4ZTZhYzg4OTRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBz
dGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQm
IGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3Rh
dGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5h
dGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFn
ZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9p
bnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXll
clNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0
YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgz
LDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBz
YW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0
YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3Rh
dGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkg
eworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29u
dGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xv
YmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0
YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hh
ZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVm
ZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxh
eWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAg
Y2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJl
Y3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxs
U291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIw
MjVlMTQ3NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlk
ODU0ZWI3OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApA
QCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVm
ZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0
OTg2ZTg3NzQ2NmI4ZjA3Nzg2ZmJkMWJmMzk0NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYy
MDJjZjExMjU5NWJjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApA
QCAtNDE0LDcgKzQxNCw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlw
Qm91bmRzKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
ICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJm
YWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxM2JiNjdjODcwYjcwMzNjMDAwYzMxYmQyZjI1OWJkN2Jk
ODJmOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fp
cm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
bmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lm
IFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxz
ZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8t
Z2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25z
dCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAgOiBtX3Bs
YXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkK
LSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1f
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lmIFVTRShO
SUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6
Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0
b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0K
LSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQotewotICAg
IGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVh
dGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JH
QkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X2Fu
dGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwotfQot
Ci0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRm
b3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3Rp
dmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRv
clRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgICAg
IGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJveHku
cHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJs
ZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAgICAg
ICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgICAg
ICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZm
ZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcwot
ICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQg
aW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAgICAv
LyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fp
cm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlmIChw
cmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJm
YWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
UHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICBj
YWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVD
YWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0
aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBl
eHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAgIGds
R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElH
Tk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwg
Ki8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVy
ICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2RldmljZV90
KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3YXJl
bmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgotICAg
IGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0gICAg
bV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
ZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdldCgp
KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3Vy
ZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0g
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50
KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVybiBz
dXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0
byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3Vy
ZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBpeGVs
cyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW1h
Z2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJm
YWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9naWNh
bFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsK
LSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9yLgot
Ci0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUu
d2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9uU2Nh
bGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGlj
YWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdp
ZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsK
LSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0g
ICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlm
ICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5t
X3JlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxv
Y2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQot
ICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNh
aXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJp
ZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAo
IXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShz
dXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFj
ZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9
KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNy
ZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0K
LSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBt
X3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsK
LSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0
YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAg
IHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNl
IGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVo
YXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQot
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAg
ICAgICAgaWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAg
IHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZShkZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7
Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRp
b25Db250ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25D
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6
U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJv
OjpkcmF3UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwg
bV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlv
bnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3Bh
Y2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChz
cmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAg
IGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdC
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFj
ZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1Njsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAg
ICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAg
ICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3Ig
KiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAg
ICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVU
KTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxV
VD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0g
bGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYg
KGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXpl
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBD
b2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0g
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkg
aGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsK
LSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAg
ICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICBy
ZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDAp
OwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxJbWFnZURh
dGE+IGdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJl
Y3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKLSAgICBhdXRvKiBw
aXhlbEFycmF5ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywg
YXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RG
OjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMu
Ci0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0
LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVj
dC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwotCi0gICAg
aW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmln
aW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0g
MDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0g
ICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChv
cmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVu
ZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0K
LSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0
LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBp
biBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRo
ZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVm
ZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMs
IG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdl
UmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgp
LCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdl
UmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3Vy
ZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1
cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAg
ICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJl
Y3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2Fs
QXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNp
emUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhRHN0ID0gcGl4ZWxBcnJheS0+ZGF0YSgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hh
ciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAq
IDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5z
aWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0
cmlkZSAqICh5ICsgb3JpZ2lueSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNv
bHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQotICAgICAgICAgICAgLy8g
QXZvaWQgY2FsbGluZyBDb2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNl
IG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVu
c2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDAp
ID4+IDI0OwotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDAp
ID4+IDE2OwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYw
MCkgPj4gODsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBG
Rik7Ci0KLSAgICAgICAgICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAg
PSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IGxvZ2ljYWxSZWN0ID0gc3JjUmVjdDsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBz
cmNSZWN0OwotICAgIGJhY2tpbmdTdG9yZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIAotICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQotICAgICAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVy
biBnZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdT
dG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KQotewotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIElu
dFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBkZXN0UG9pbnQ7Ci0KLSAgICBJbnRSZWN0IHNjYWxl
ZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9
IGltYWdlRGF0YS5zaXplKCk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBv
aW50OwotCi0gICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgc2NhbGVkRGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VS
VChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNl
UmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0
LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNl
UmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsg
bG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50
IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0g
ICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNl
UmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAg
aW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5z
ID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxl
ZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBz
Y2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQ
b2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDAp
OwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkp
OwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVj
dC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBs
b2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdo
dCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51
bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9m
IHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4K
LSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBz
dXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0
eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VT
Y2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0
LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25z
dCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
dW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsg
ZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNh
bGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQg
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0g
ICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBo
YSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0g
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBj
YWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
LgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdl
dCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2lj
YWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUg
aW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZh
Y2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJ
bnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dz
KSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwg
bG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpKTsKLSAgICB9Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRh
dGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUo
ZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0K
LSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVybiBkYXRhKGltYWdl
LCBtaW1lVHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENh
aXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hh
bmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2
ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVN
YXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmICht
X2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAo
bV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJE
YXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29s
IEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJl
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2Fu
dmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3
YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJf
dCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0
YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRl
c3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVy
bmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAg
ICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0
aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0
MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
IgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBV
U0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCBy
ZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShk
ZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBh
dXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAg
IGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFs
cGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUp
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUg
OiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVz
dENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBp
ZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50
CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xv
cik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5
OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5l
YXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6
U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRl
dmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9
Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEo
bWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAg
ICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwg
YmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNy
KCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVk
ODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFj
ZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJp
ZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVm
ZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMzYzNzJmOTE5ZTdlY2U4Y2JjNmEyNjNjNDg5Yzk5ZTBlODc2MjQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVT
RShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisj
ZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQg
Y2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUg
PSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChi
YWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1
c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBh
IHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JH
QkEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRl
ciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2Vf
dCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2Fy
ZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAg
ICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAg
IGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0
dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgYmFja2VuZFNp
emUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4obmV3
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxs
cHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0
ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZh
Y2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6
Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJv
eHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5k
aWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xp
ZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21w
b3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAg
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1Bs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVz
dGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92
ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChw
cmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmlu
ZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2go
bV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRl
eHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAm
ZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRU
ZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQo
dGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBt
X2JhY2tlbmRTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJl
VGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Cisg
ICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIHJl
dHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCit7
CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
KyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2JhY2tlbmRTaXplLndpZHRo
KCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUud2lkdGgo
KSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAg
ICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVy
YXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9s
ZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIo
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9y
VGV4dHVyZSwgbV9iYWNrZW5kU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xf
UkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8v
IEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJl
IGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3
aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBw
cmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0
aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29t
cG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9v
cGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAg
ICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8v
IENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8g
Y2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1
cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRC
bGVuZCwgbV9iYWNrZW5kU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGYwZmFlN2UyYzM0OWUyMTY0MTk4
NDU1ZDQxOGMzY2FiNjc0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAg
IDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKwor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYK
KyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFM
YXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlOwor
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVm
UHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRl
eHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMmRkZTk4ZWI3NGU0ZTIx
MDNjYWM0NDE4ZjdiNThlYTllMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3Rh
dGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFj
ZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgp
ICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0
KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdl
dCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAg
ICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQor
CitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNh
aXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3Jj
ICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6
ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7
CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFS
R0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1
cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE2MDAzNzk0ZmRhYTk0NzMyYjYxNTU3YzQxZTg0NDIzMWE5OGE3MDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
QUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJp
ZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMmQxNWYwYmEyMjIxMGY3YTE3NGJhNzA3ZWQyNjE4MGMxOGZlYTRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisj
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby5o
PgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNh
bFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBt
X3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9z
dGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgp
KSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4
dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0
JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAg
IHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9y
KSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7
CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7
CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZh
Y2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAg
ICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
KyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QK
K3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNr
aW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0
b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgp
OworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8
dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNl
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURh
dGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2Uu
Z2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Uu
Z2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3Jt
YXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgp
KSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50U2NhbGVkLngoKSwg
ZGVzdFBvaW50U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVk
LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2YwNTUzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJmYWNlQ29l
cmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZl
ZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
bWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMg
UGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZl
ckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdl
QnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwot
ICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsK
LSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21w
b3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJl
ZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJl
ZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJv
eHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4
dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2NGM2OTk1MTk3ZWNiM2Q1M2VkZDMyYmFl
MGQwZTQ1ZmJmNzQ1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cp
Ci0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0Iz
MiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6
ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFn
ZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVm
ZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250
ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZh
Y2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNl
KGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dD
b250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNw
YWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JD
b2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUg
PSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIo
bmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmlu
Z01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZh
Y3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2Fs
ZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZm
ZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDog
bV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNj
YWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBm
YWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICog
c2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21h
dGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9
IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53
aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXpl
LmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0g
ICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVf
dCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1Bl
clJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUg
bWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZl
R2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAg
ICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
LSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVy
aW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAg
RmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdo
dC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVh
dGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3Bh
Y2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4
dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0g
ICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFy
UmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51
bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93
KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRv
IG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRl
cmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJv
ZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Piht
X2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRt
YXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVP
cmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRh
LmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1h
cEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFs
bG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQo
KSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxl
YXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFj
ZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQot
ewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVt
b3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNv
bmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFi
b3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0
byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVy
IGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNh
dXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24g
b2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBw
b2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lk
dGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBu
ZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cu
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBz
dXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJ
bWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50
b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4K
LSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+
dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4
dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1
cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAg
cmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250
ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykK
LXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAw
LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsK
LX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBsb2dpY2FsU2l6
ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQot
ICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNl
clNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFj
ZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24g
PT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNpemUoKSwgaW50
ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQot
Ci1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jl
c29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZl
ci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNp
bmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdl
UmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBp
ZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAo
Y29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAg
ICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1f
ZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5i
aXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5
QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0
YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0g
ICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RD
b250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1h
Z2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
KTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQg
dG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBp
ZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8g
ZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRy
PEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAg
ICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAg
ICB9Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7Ci0gICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBy
ZXR1cm4gbV9kYXRhLmdldERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5h
bFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2Nh
bGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVz
dFBvaW50OwotICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBtX2RhdGEu
cHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0
UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7
Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFn
ZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFn
ZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVj
dChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1
dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24p
KQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0
dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QK
LXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgp
KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZl
cjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAg
IEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNv
ZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
cHJvdGVjdGVkUGl4ZWxBcnJheTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VU
SSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNv
IHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAg
YXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH0pOwotICAgICAgICBpZiAo
IWltYWdlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVf
dCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhl
aWdodCgpOwotICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURh
dGEtPmRhdGEoKSk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVj
dGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0KLSAgICAgICAgYXV0byBkYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJv
dGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBp
ZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9n
aWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6
ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAo
IWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRh
KTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzFjZDIzNzU4MWY5NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlm
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNw
YWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKKworICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5
cGVCaXRtYXApCisgICAgICAgIHJldHVybiBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNn
Q29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNv
bG9yU3BhY2UoY2dDb250ZXh0KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpzZXR1cENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdo
dCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25T
Y2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZElt
YWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNp
emUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRp
Y19jYXN0PHNpemVfdD4oYmFja2VuZFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAg
ICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgp
KSkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAg
IGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAq
IGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUp
KTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7
CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
KyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RT
Y2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFj
a2VuZFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/
IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdl
LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFu
c2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVp
Z2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFy
cmF5OworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAg
IC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51
YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dp
Y2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFn
ZURhdGEtPmRhdGEoKSk7CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVs
QXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IGltYWdlRGF0YS0+c2l6ZSgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51
bGxwdHIsIHByb3RlY3RlZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsK
KyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5z
aW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBw
aXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0g
ZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFj
a2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2Vu
ZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5k
U2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUo
KS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRv
IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFs
aXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1l
VHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkK
K3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5
dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJ
bWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0
YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1
ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7
CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVm
ZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdklt
YWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7
CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBB
U1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJU
KGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAo
c3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFn
ZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JG
b3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAm
ZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVm
ZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4
ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RB
bHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jN2NhMzk4MDM0ZjI1YTMzNDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VC
dWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJl
c2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRh
dGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRF
KQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
KSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzODNjOTk2ZTU0ZDBiMDQ3MTNmZGM3NDJjMjE0MzZkMzgwN2U4NDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
K2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vs
c2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5k
U2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNp
Z25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0
cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUo
ZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBi
YWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNr
ZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVmYXVsdEJp
dG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250
ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lk
KiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVh
c2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBiYWNr
ZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQ
cm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQp
KQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXpl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAg
IAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7
Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5k
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQq
IGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVy
Q0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3Zl
KGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VS
VChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdT
dG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2lu
Z1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAg
ICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4LCAzMiwg
Ynl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3Bh
Y2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAg
ICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWY2NjJhMWM3
NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVm
UHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZv
cm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5k
aWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1f
Y29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwYWQw
OTljNzE2YWVmZmViMDQxYjdkZDg4NTAxNmViNjE0ZWRhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVT
RShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0j
aW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVz
ZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlz
IG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIg
fHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnBy
ZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFn
ZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVz
dC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJH
QkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hh
bm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQot
c3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNy
YywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwot
ICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFn
ZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZl
cnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJH
QkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0Zs
YWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0
cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAg
ICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsK
LSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5w
dXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwot
ICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7
Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
QkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFS
QU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0j
ZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsK
LSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBp
ZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5k
YXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwot
ICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygp
LCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQ
dHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBhdXRvIHJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKLSAgICBhdXRvKiBwaXhlbEFycmF5ID0g
cmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcGl4ZWxBcnJheSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3Qu
bWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJl
Y3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lk
dGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcGl4ZWxB
cnJheS0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAg
IGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwot
ICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAg
ICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVz
dHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmln
aW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAg
ZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3Jp
Z2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9
IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3Jp
Z2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAt
b3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjpt
aW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAg
IGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNp
emUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55Owot
ICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQo
KSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBw
aXhlbEFycmF5LT5kYXRhKCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsK
LSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dz
OwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRh
dGEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBz
cmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRl
c3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVz
ID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMs
IGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAg
ICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENS
QVNIKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQo
KTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNh
ZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwot
I2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZm
ZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXgg
KyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNS
b3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90
Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyAr
K3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7
IHggKz0gNCkKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RSb3dzICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyAr
IHgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2Up
OwotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAg
ICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJl
c3MoKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndp
ZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAg
ICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0
ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRw
dXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAg
ICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JB
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAg
ICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFw
LCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGgg
KiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlm
IChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsg
Kyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAg
ICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1ti
YXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAg
ZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZl
R2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVz
dHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJl
Y3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5z
YWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGgg
PSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRl
c3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNl
UmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChl
bmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhl
aWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5k
eSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1h
Z2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFn
ZURhdGEuZGF0YSgpLT5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lu
eCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1
aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsK
LSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVy
Um93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAg
IHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNS
b3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVz
dC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBk
ZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdC
MzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBp
bWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4
ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAg
ICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNj
ZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+
Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJv
d0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1
aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAg
ICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0g
ZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAg
ICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAg
ICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCAr
IDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGZiZjJhZGU1ZTg2MGQzNGUy
MTNlMWM0MTJlMTViZGFiYzUzZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dD
b2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRl
ciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJT1N1cmZhY2U7
Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0g
ICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2Fy
ZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5Q
dHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0
bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0Owot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZv
ciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjdmYzY3YjkyYzcxYzAyMGVhYmVi
NjMzNDkyYmQwZjhkMzZiMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgiCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNp
emUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6
bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lk
dGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxD
R0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9y
U3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29u
dGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAg
ICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNv
bnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9y
U3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFj
a2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xv
clNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBu
dWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1
cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBz
ZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3Vy
ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpt
ZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7
Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZh
Y2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1p
bmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9C
R1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7
CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBG
b3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWlu
aW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkZGJiZjI5ODRmYWU4MTA2ZWQ3YzFmNjNiNjRhMjIwY2IxODA2MjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShJT1NV
UkZBQ0UpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgIklP
U3VyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRT
aXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENv
bG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4
IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJhYTgyMzMyZGUyZDEx
MWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yNTQsOCAr
MjU0LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hlZFNvdXJjZVJlY3Qg
PSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwogCi0gICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAg
ICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNsYW1wZWRBcmVhKCkg
KiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0K
aW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2Nk
MGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBA
QAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2lt
cG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1w
b3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1
cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQog
ICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFj
ZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5z
aWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90
IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRl
eCAxZTAzNWE3ZWVmMjgwM2NmNjU5OTJkMDQ5YzlmOGI1NTZiY2VjYWVjLi45MThlMThhZjVlMTJm
ZjkwNDk0ODNhNzhlZjFiYTgyZDczNThjMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciogaW1hZ2VCdQogICAgICAgICB9CiAgICAgfQogCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMu
Z2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgcGFpbnRU
b0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQogICAgIHByZXNlbnRS
ZW5kZXJidWZmZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYmI2N2M2NDNlY2I4OTNhNzkzN2Q4MDI0MzU3MTg2Y2IxNjQy
MWNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0
ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5z
aWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewotICAgICAg
ICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRv
IG9ubHkgY29weSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJl
Y3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50MzJfdCog
c3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNT
dHJpZGUgKiB5KTsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0
cmlkZSAqIHk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2xDb3VudDsgKyt4
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlUG9zaXRpb24gPSB4ICogNDsKLSAgICAgICAg
ICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQaXhlbCA9IHNyY1JvdyArIHg7Ci0KLSAgICAgICAgICAg
IC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IChQKVJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dp
enpsZSBmcm9tIERpcmVjdDJEJ3MgUEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICAgICAgICAg
IHVpbnQzMl90IGFscGhhID0gKCpzcmNQaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAg
ICAgICAgdWludDMyX3QgcmVkID0gKCpzcmNQaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAg
ICAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAoKnNyY1BpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsK
LSAgICAgICAgICAgIHVpbnQzMl90IGJsdWUgPSAoKnNyY1BpeGVsICYgMHgwMDAwMDBGRik7Ci0K
LSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uXSAgICAg
PSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDFdID0gZ3JlZW47Ci0g
ICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDJdID0gYmx1ZTsKLSAgICAgICAgICAg
IGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0KGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNv
bnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsg
fSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBz
b3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUlu
dFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVy
U2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1
ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291
cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90
KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5
KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUg
KiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3Mg
KyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0gICAgICAgIG1lbWNweShkZXN0Um93
LCBzcmNSb3csIGJ5dGVzUGVyUm93KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10
ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0PgotYm9vbCBjb3B5
UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbihjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50
OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVj
dCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlv
biwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZm
ZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNl
UmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRl
c3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9
IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55
KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgo
KSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7
ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3Ry
aWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RS
b3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0OwotCi0gICAgICAgIGZvciAoc2l6
ZV90IHggPSAwOyB4IDwgc291cmNlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHBvcyA9IHggKiA0OwotCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3db
eF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd1t4ICsgMV07Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93W3ggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFscGhhID0gc3JjUm93W3ggKyAzXTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1
ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihkZXN0Um93KSArIHg7Ci0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwg
cmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6Y29weVJlY3RGcm9tRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JiByZXN1bHQp
IGNvbnN0Ci17Ci0gICAgYXV0byByYXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0K
LSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAvIHJhd0Jp
dG1hcFNpemUud2lkdGg7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSByZWN0OwotICAgIHNj
YWxlZFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKCFJbnRSZWN0KEludFBvaW50
KCksIGJhY2tpbmdTdG9yZVNpemUpLmNvbnRhaW5zKHNjYWxlZFJlY3QpKSB7Ci0gICAgICAgIC8v
IFJlcXVlc3RlZCByZWN0IGlzIG91dHNpZGUgdGhlIGJ1ZmZlci4gUmV0dXJuIHplcm8tZmlsbGVk
IGJ1ZmZlci4KLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNjYWxlZFJl
Y3QsIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCByZWN0LnNpemUoKSwgcmVzdWx0LT5k
YXRhKCksIEludFBvaW50KCkpOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6ZW5zdXJlQmFj
a2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUgPT0g
YmFja2luZ1N0b3JlU2l6ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChu
dW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1C
eXRlcy51bnNhZmVHZXQoKTsKLX0KLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVz
IG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdD4KLXZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEs
IHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVDb3Vu
dCAvIDQ7Ci0gICAgYXV0byogcGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGJ5dGVEYXRhKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytp
KSB7Ci0gICAgICAgIHVpbnQzMl90IHBpeGVsID0gKnBpeGVsRGF0YTsKLSAgICAgICAgc2l6ZV90
IGJ5dGVQb3NpdGlvbiA9IGkgKiA0OwotCi0gICAgICAgIHVpbnQzMl90IGFscGhhID0gKHBpeGVs
ICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIHVpbnQzMl90IHJlZCA9IChwaXhlbCAmIDB4
MDBGRjAwMDApID4+IDE2OwotICAgICAgICB1aW50MzJfdCBncmVlbiA9IChwaXhlbCAmIDB4MDAw
MEZGMDApID4+IDg7Ci0gICAgICAgIHVpbnQzMl90IGJsdWUgPSAocGl4ZWwgJiAweDAwMDAwMEZG
KTsKLQotICAgICAgICAvLyAoUClSR0JBIC0+IFBCR1JBCi0gICAgICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAg
ICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAqcGl4ZWxEYXRh
ID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAg
ICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVz
IGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb24o
dWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3QgcGl4
ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBp
eGVsQ291bnQ7ICsraSkgewotICAgICAgICB1bnNpZ25lZCB4ID0gcGl4ZWxDb3VudCAqIDQ7Ci0K
LSAgICAgICAgdW5zaWduZWQgcmVkID0gYnl0ZURhdGFbeF07Ci0gICAgICAgIHVuc2lnbmVkIGdy
ZWVuID0gYnl0ZURhdGFbeCArIDFdOwotICAgICAgICB1bnNpZ25lZCBibHVlID0gYnl0ZURhdGFb
eCArIDJdOwotICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGJ5dGVEYXRhW3ggKyAzXTsKLQotICAg
ICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBncmVl
biA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVlID0g
KGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSBn
cmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50MzJfdCogcGl4
ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpICsgaTsKLSAgICAgICAg
KnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7
Ci0gICAgfQotfQotCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOwotICAgIGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHQg
PyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBi
aXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBUbzxpbnQ+KHJh
d0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5oZWlnaHQpKTsK
LQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0LnNpemUoKSA9
PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVzLnVuc2FmZUdl
dCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9ubHkgd2FudCBw
YXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0YShyZWN0LCBy
ZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGJ5
dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJbi1tZW1vcnkgZGF0YSBk
b2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRoZSByZXN1bHRz
LgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRp
b248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEo
KSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluUGxhY2VD
aGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1h
cElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKLXsK
LSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRP
ZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBi
aXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHBpeGVsU2l6ZS5h
cmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4
dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJpdG1hcCB0byBhIENQVS1i
YWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwot
ICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0
bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQ
X09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVT
VUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBpeGVsU2l6ZSwgbnVsbHB0
ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
dGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0g
RDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5n
ZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAgICBociA9IGNw
dUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXBw
ZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZW5zdXJlQmFj
a2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNv
ZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9t
IERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlmIChkZXNpcmVkRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgIHN3aXp6
bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPiht
YXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1h
cHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4
ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRh
LmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKLQotICAgIGJpdG1h
cEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0KLSAgICBociA9IGNwdUJp
dG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0
LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQVNTRVJUKHNv
dXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4g
MCk7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENo
ZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VS
ZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VS
VChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291
cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+
KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVu
c2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBz
b3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4
OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVj
a2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVj
dC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQo
ZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51
bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3Vy
Y2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5z
YWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0g
c291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVz
dHk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8g
cGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQo
cGl4ZWxTaXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNp
emUuaGVpZ2h0ID49IGltYWdlRGF0YS5zaXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQo
cGl4ZWxTaXplLmhlaWdodCA+PSBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRveiogc291cmNlID0gaW1hZ2VEYXRhLmRhdGEoKTsKLSAgICBpZiAoc291cmNlU2l6ZSA9PSBz
aXplKSB7Ci0gICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNl
Lmxlbmd0aCgpKTsKLSAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICB9IGVs
c2UgewotICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0KTsKLSAg
ICAgICAgaWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291cmNlLCBz
b3VyY2VGb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJpdG1hcEJ1
ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0KLWJvb2wg
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRt
YXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0gc291
cmNlUmVjdDsKLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlu
cyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0QnVm
ZmVyUG9zaXRpb24gPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291cmNlRm9y
bWF0ID09IGJ5dGVGb3JtYXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rl
c3Qoc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdT
dG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgaWYgKGJ5
dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAg
ICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRp
b248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBz
b3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5k
YXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291
cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRh
KCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwot
fQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKLXsK
LSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRP
ZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGl4
ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndp
ZHRoID49IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5o
ZWlnaHQgPj0gYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBwaXhlbFNp
emUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4g
UkdCQS4gV2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBjb21w
YXRpYmxlCi0gICAgLy8gd2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNlLgot
ICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+IFBCR1JB
Ci0gICAgZWxzZQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdCQSAtPiBQ
QkdSQQotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNpemUud2lk
dGgoKSAqIDQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShudWxs
cHRyLCBkYXRhLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5
bmM7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxl
Qml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFU
b0JpdG1hcElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0
dXJuIGJpdG1hcDsKLQotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09
IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+
IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRh
cmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwot
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2lu
Z0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gYml0bWFw
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAgICAg
Ly8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEg
Y29weS4KLSAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsK
LSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFw
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZj
b3BpZWRCaXRtYXApKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGll
ZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6
ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNp
emUud2lkdGgpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5
dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhl
IGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAg
ICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGls
ZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygp
OwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNl
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRt
YXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFw
UHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNf
Q1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4
ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0
ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNh
ZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAgaWYgKCFT
VUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghc291cmNl
Q1BVQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNlQ1BV
Qml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBE
MkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRt
YXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKLSAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRy
PElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRl
clRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJp
dG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAt
PkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEu
cGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0aWJsZUJp
dG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5Y2M0OTNlMWMy
YTVhNTZjMmNlYWVmNWMzYTI5Yzk1MDQ1ZDFkMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0K
LXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5nU3Rv
cmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJv
dzsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBtdXRhYmxl
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBieXRlRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0bWFwQnVm
ZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKLSAg
ICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZl
clN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYpOwotCi0gICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7
Ci0KLSAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICBib29sIHJlYWREYXRhRnJv
bUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29u
c3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rh
dGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7Ci0gICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZm
ZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNmYWYxNWU0N2MyOTcyNTYyNzQzZmQ3MjE1ZmRmNTc1ZTRiNTAyOTcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwg
cmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICgh
c3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3Jy
ZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZm
ZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53
aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dp
Y2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQot
ewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJl
LgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNp
emUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gc3RkOjpjZWlsKHJlc29sdXRp
b25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRv
bWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2Nh
bGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93
cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0
ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdl
dENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJU
YXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgp
IDogbnVsbHB0cjsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJn
ZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGF1dG8g
Yml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUo
bV9sb2dpY2FsU2l6ZSwgcmVuZGVyVGFyZ2V0LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYg
KCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0
bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBt
YWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBb
dGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAg
ICB9LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0g
ICAgfSk7Ci0gICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
bV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQot
Ci1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDog
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBpbWFnZUNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIG51bGxwdHIsIG51bGxwdHIsIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVy
Ojp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgY29udGV4dCgp
LmZsdXNoKCk7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElE
MkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIEZsb2F0U2l6
ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUo
KTsKLQotICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lk
dGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91
bmRzLmhlaWdodCgpKSkpIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0
bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAg
ICAgIGlmIChjcm9wcGVkQml0bWFwKSB7Ci0gICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBE
MkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAg
ICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRy
LCBpbWFnZSwgJnNvdXJjZVJlY3QpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1h
cFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6
ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17
Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwot
ICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZl
cnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1h
Z2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSBy
ZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9n
aWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5h
bFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVT
VUxUIGhyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIHNpbmtJbnRv
TmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxT
aXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZl
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICAv
LyBGSVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgb24taGFyZHdhcmUgaW1hZ2UuCi0gICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQx
Qml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZi
aXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGhyID0gYml0bWFw
VGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRv
IGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0gICAgaWYgKGNv
cHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkK
LSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7Ci0KLSAgICBDaGVj
a2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0
YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBE
b250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
cHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1l
bnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwot
ICAgICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9u
cywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0
ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21wYXRpYmxlQml0bWFwKGRlc3RD
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNp
emUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsK
LSAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJ
bWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0g
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0g
ICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5
ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBi
dWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVk
U3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRT
cmNSZWN0LCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVj
dDsKLSAgICBJbnRSZWN0IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKLSAgICBzY2FsZWRT
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBzY2FsZWREZXN0UG9pbnQuc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgbV9kYXRhLnB1dERhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc2NhbGVkU3JjUmVjdCwgc2NhbGVkRGVzdFBvaW50LCBpbnRlcm5hbFNpemUo
KSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9w
dGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi1TdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291
cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NzBhYmVkZjBhNjM1MGZkNTU5NDhkNDgxYWI3ODk1ZjYyMGI0OGMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiRGlyZWN0
MkRVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgorI2lu
Y2x1ZGUgPGQyZDFfMS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3aW5jb2RlYy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRT
aXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJn
ZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVy
VGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQo
KSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFy
Z2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBhdXRv
IGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXpl
KHNpemUsIHJlbmRlclRhcmdldCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoIWJpdG1hcENv
bnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGJpdG1hcDsKKyAg
ICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwbGF0Zm9ybUNv
bnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0
LmdldCgpLCBbdGhpc10oKSB7CisgICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVk
ZWQoKTsKKyAgICB9LCBbdGhpc10oKSB7CisgICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZT
eW5jKCk7CisgICAgfSk7CisKKyAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoc2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShwbGF0Zm9ybUNv
bnRleHQpLCBXVEZNb3ZlKGNvbnRleHQpLCBXVEZNb3ZlKGJpdG1hcCkpKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIE5hdGl2ZUltYWdlUHRyJiYgYml0bWFwKQorICAg
IDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4dChXVEZNb3ZlKHBs
YXRmb3JtQ29udGV4dCkpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICAs
IG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICpt
X2NvbnRleHQ7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmZsdXNoQ29u
dGV4dCgpCit7CisgICAgY29udGV4dCgpLmZsdXNoKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFy
Z2V0PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRt
YXAoJmltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAvLyBGSVhNRTog
bV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBz
dG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgY29weUJl
aGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVj
b3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsK
KyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgeworICAgICAg
ICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQo
KSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOworICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1v
cnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKKwor
ICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIE5hdGl2ZUltYWdlUHRyIGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRt
YXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQorewor
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkg
OiBGbG9hdFNpemUoKTsKKworICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkg
fHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0
PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFw
PiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJv
dW5kcyk7CisgICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7CisgICAgICAgICAgICBhdXRvIHNv
dXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJp
dG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOworICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXpl
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGlt
YWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5n
ZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQg
dG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAg
ZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7CisKKyAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRt
YXBSZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVy
biBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RG
TW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQor
eworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAg
IEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgp
LT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92
ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAg
ICBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQor
ICAgICAgICByZXR1cm4gYml0bWFwOworCisgICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0LT5yZW5k
ZXJUYXJnZXQoKSA9PSByZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFw
UmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIHJlbmRlclRhcmdldCk7CisgICAgICAg
IGlmIChiaXRtYXBUYXJnZXQpIHsKKyAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYmFj
a2luZ0JpdG1hcDsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoYml0bWFwVGFyZ2V0LT5HZXRC
aXRtYXAoJmJhY2tpbmdCaXRtYXApKSkgeworICAgICAgICAgICAgICAgIGlmIChiYWNraW5nQml0
bWFwICE9IG1fYml0bWFwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOworCisg
ICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYu
IE11c3QgcmV0dXJuIGEgY29weS4KKyAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdl
dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQ
cm9wZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAu
Z2V0KCksIG51bGxwdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRC
aXRtYXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgYXV0byBzaXplID0gbV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VS
VChzaXplLmhlaWdodCAmJiBzaXplLndpZHRoKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Cisg
ICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhl
IG91dHB1dCB0YXJnZXQuCisgICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5n
IGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAg
IGNvbnRleHQtPmVuZERyYXcoKTsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNv
dXJjZURldmljZUNvbnRleHQgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwor
ICAgIGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJEMV9CSVRN
QVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMx
KEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5P
VF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IHNvdXJj
ZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51
bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNl
Q1BVQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKCFzb3VyY2VDUFVCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1f
Yml0bWFwLmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRh
OworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAm
bWFwcGVkU291cmNlRGF0YSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmlj
ZUNvbnRleHQ7CisgICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXRE
ZXZpY2VDb250ZXh0KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7CisgICAgaHIgPSB0YXJnZXREZXZpY2VDb250
ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0
YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGll
cygpLCAmY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwor
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOwor
CisgICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IGNvbXBh
dGlibGVCaXRtYXAoZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgp
KTsKKworICAgIEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNv
bXBhdGlibGVCaXRtYXApOworICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJs
ZUJpdG1hcCwgY3VycmVudEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRl
c3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNr
aW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbnVsbHB0cik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNTYwN2YzNjQzZGJhN2VlNWVlZmYy
ZjcxYWMzOTM5NjAwN2UxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZm
ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJp
ZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4g
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7
CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2JpdG1h
cDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1Qy
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcAppbmRleCA0OTM2N2NiMjlkMGYyMGQxNzEyMjBiMzIwMGM5NGU1Y2NkMzcwMWJk
Li4zMmJmODZiYzZmYjY4YzFlNmQ2M2RlZDg3NjI3NTM1M2Q1NGFmYjgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNE
ZW5vbWluYXRvcjsKICAgICAgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0
ZSgpLCAmZnBzTnVtZXJhdG9yLCAmZnBzRGVub21pbmF0b3IpOwotICAgICAgICBhdXRvIGltYWdl
U2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZVNp
emUgPSBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKICAgICAgICAgYXV0byBjYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKICAgICAgICAgICAgICJm
b3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsCiAgICAgICAgICAgICAid2lkdGgiLCBHX1RZ
UEVfSU5ULCBpbWFnZVNpemUud2lkdGgoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDYwNzVmNjNlMWMyODAwN2Y2
NzdlMjkzN2M1Y2E3YmM2NzkzMzIwMjguLmY2YTk1NDU4OTg1OGUwMGU0ZTdiNmEzYzE5ZjIyYmFm
YTU3NjFkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+
Y29udGV4dCgpLmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNl
U2NhbGUpOwogICAgICAgICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZElu
dFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0
YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zv
cm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gu
aGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXpl
ICE9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUg
IT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5y
ZXNldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwCmluZGV4IDJlMGE0MDU2NTg5ZTI0OTBhNTg1ZGYzZmFhOGQzYzZlZjQxMTkyZmIu
LjRkODU3OGIxYTM4OTM3ZGE1YmI5YmVjNmUyNGIxZDBjZDVkZjMxNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTg0Niw3ICs4NDYsNyBA
QCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNo
b3QoKSBjb25zdAogICAgIGlmICghc25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKHNuYXBzaG90LT5pbnRlcm5hbFNpemUoKSwgeyB9KTsKKyAgICBhdXRvIHNoYXJlZFNuYXBz
aG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmJhY2tlbmRT
aXplKCksIHsgfSk7CiAgICAgaWYgKCFzaGFyZWRTbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391063</attachid>
            <date>2020-02-18 10:17:14 -0800</date>
            <delta_ts>2020-02-18 15:34:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200218101713.patch</filename>
            <type>text/plain</type>
            <size>305651</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI2NWQ2YWE1YWUyZWMz
MWRhMDA2MGQxMzRmNGUyZmVmYTJjNzZhNy4uYTMwMGJiMDlmN2M2MmUyODhkMGE1MjgwMDI5ODJl
YTU2YjE3YzNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNCBAQAorMjAyMC0wMi0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUgcmUtZmFjdG9yZWQg
dG8gZGVjb3VwbGUgdGhlIHBsYXRmb3JtIHNwZWNpZmljcyBhbmQKKyAgICAgICAgdGhlIGJhY2st
ZW5kIGRldGFpbHMgZnJvbSB0aGUgaW50ZXJmYWNlICJJbWFnZUJ1ZmZlciIuCisKKyAgICAgICAg
QSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQgd2lsbCBhZGRlZCB0
byBhbGxvdyBjb2RlCisgICAgICAgIHNoYXJpbmcgYW5kIHRvIHNwbGl0IHRoZSBjb2RlIGFjY29y
ZGluZyB0byB0aGUgcGxhdGZvcm0gYW5kIHRoZSBiYWNrLWVuZAorICAgICAgICBkZXRhaWxzLgor
CisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUga2VwdCBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVz
dCBvZiB0aGUgY29kZSBidXQgZGlmZmVyZW50CisgICAgICAgIGJhY2stZW5kcyB3aWxsIGJlIGNy
ZWF0ZWQuIENvbnRleHR1YWxJbWFnZUJ1ZmZlciBpcyBhIHRlbXBsYXRlIGNsYXNzIHdoaWNoCisg
ICAgICAgIGluaGVyaXRzIEltYWdlQnVmZmVyIGFuZCB3aWxsICBhY3QgYXMgYSBicmlkZ2UgdG8g
dGhlIGNvbmNyZXRlCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZC4KKworICAgICAgICBCYXNl
ZCBvbiB0aGUgUmVuZGVyaW5nTW9kZSwgYSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5
cGU+IHdpbGwKKyAgICAgICAgYmUgY3JlYXRlZC4gSW5zdGVhZCBvZiBjaGVja2luZyB0aGUgcmVu
ZGVyaW5nTW9kZSBpbiBtYW55IHBsYWNlcyBvZiB0aGUKKyAgICAgICAgY29kZSBhbmQgaW5zdGVh
ZCBvZiBhbmQgdXNpbmcgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFsbCB0aGVzZSBkZWNpc2lv
bnMKKyAgICAgICAgd2lsbCBiZSBtYWRlIGluIHRoZSBjb25jcmV0ZSBJbWFnZUJ1ZmZlckJhY2tl
bmQuCisKKyAgICAgICAgVGhpcyByZS1mYWN0b3Jpbmcgd2lsbCBhbGxvdyBjcmVhdGluZyBuZXcg
dHlwZXMgb2YgSW1hZ2VCdWZmZXJzIGJhY2tlZCBieQorICAgICAgICBuZXcgSW1hZ2VCdWZmZXJC
YWNrZW5kcy4gVGhlc2UgbmV3IEltYWdlQnVmZmVyQmFja2VuZHMgd2lsbCBpbXBsZW1lbnQKKyAg
ICAgICAgRGlzcGxheUxpc3QgZHJhd2luZyBhbmQgc3luY2hyb25pemUgcmVtb3RlIHJlbmRlcmlu
Zy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL0NhaXJvLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppbnRlcm5hbFNpemUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpyZXNvbHV0
aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmJhY2tlbmRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpieXRl
c1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJh
Y2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnRvQmFja2VuZENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kUmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRv
d0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZpbGxTaGFkb3dCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1
cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdl
UGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5k
Q29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpn
ZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBE
RkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklP
U3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
bXBhdGlibGVCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9j
a0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFw
cGVkTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCiAyMDIwLTAyLTE4
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVy
biBhbmQgdGFrZSBJbWFnZURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGZhYjYyMDVlYzI5Mzg4ODI0MDFmYTRi
YjdkZjUxNGE1OTA0MzFkZS4uMTBjYjk5MTExMjAyMmRhMWViZTE3NWMyNjk2ZjMwZmJhYjc1MjAw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMi0xOCAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZlcmVudCBi
YWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9u
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90IGNvbnN0KToKKwogMjAy
MC0wMi0xNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTZWxlY3Rpb24gY2Fubm90IGJlIG1vZGlmaWVkIHZpYSB0ZXh0IGludGVyYWN0aW9uIGluIHNv
bWUgYXJlYXMgb2YgdGhlIGNvbXBvc2UgYm9keSBmaWVsZCBpbiBHbWFpbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggZjQ4MzJhYTcxNjM2Nzg1MTFkODZhNDk0MjA3MzM1ZDU3ZWRmMTYxYS4uODA1MDNj
MWM2OGFjODliNWExMzAxY2Q1OGViNTkzMjQyM2I3NzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC0xMDQyLDYgKzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNwYWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNv
ZGluZ09wdGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oCkBAIC0xMDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1M
YXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAx
N2JkMGYzY2Y5NDBkLi41ZDE3NzQzZWQzODQzMDExZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYg
KCR7VVNFX0RJUkVDVDJEfSkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5
ZXJEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyRC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
ZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURp
cmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJl
Y3QyRC5jcHAKQEAgLTEzMiw4ICsxMzEsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApA
QCAtMTc2LDcgKzE3Niw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcu
Y21ha2UKaW5kZXggOWFiNDY4NzM5ZWYxMWZmNjA5Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRi
OWI3Zjg4NjZiMTI0MWE4NTU3OWIyZTYxZjdiYWU1NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1G
VFcuY21ha2UKQEAgLTg0LDggKzg0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3
ICsyMDAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IGZlMTFiNzYwMDhkODdlY2VlN2RlODYwYjBhZWU4MDhiYzVjNTE4MTYuLmZhNjI4
NDhhMTExNTY2YjNiZTNiMDdjZDNjOTRmY2M0ZDJhNjM0NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0yOTEsOCArMjkxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRQb2ludENHLmNwcApAQCAtNTU2LDcgKzU1OCw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVm
NWMwN2E4ZGM5M2ViLi44YWY3MDFjNzc3ZmUxNTJlMjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9ESUJQaXhlbERhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVu
Q29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyQ2xpZW50LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQzNTJhMzhhZDlmZWRhNTNkZTRmOTE2MGZlYzRiNDM5YzNiOTgwNjkuLjI0
ODBmMmEzZjIyZWUwZDM3NGFjOTg4MDYwNjIyZjFhZGYyZTcyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhMDVlMDFjZGVmMmNmZjE2YWI4
M2M1ZDRmMDYxNmIwY2M1MTZkZTQ5Li4wOWRjMTIzYmI3MWFkNjg3YjRiYTk4OGRmMjQ4OTU0ZjE4
MjY2MDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2JjZmRmNDQwNTE5MzBjYTlkMDQ5NTE2YzJkMGUwNGRh
OGE1ODhlYy4uOTlkNDg2OTllMjQzODk5YzM5YzQ0MzQ1NGQ0MmU3OTkyOGY1NDM5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NjQ1LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZC
MzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUg
LyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlG
N0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8q
IEltYWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdB
bHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5
cGhJdGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNT
VkdHbHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVu
dC5oICovOyB9OwpAQCAtMjEzNyw2ICsyMTM1LDcgQEAKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
OTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMg
LyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFD
M0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJ
NzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMw
QUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDYsOSArNjU0NSw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5Miw2ICs5NTg4LDE2IEBACiAJCTcyN0FGRUQzMUEy
RUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRz
UkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAw
Q0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2
NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E0MjNFMTcz
MjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3
NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQjIzRTFF
NTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYy
QSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJF
OEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjY1LDcg
KzEyNjcxLDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBC
MzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
QTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjQ4NDksOSArMjQ4NTQsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMz
QUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQx
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
NDIsNiArMjQ5NTAsNyBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0
aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21w
bGV4VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyog
Q29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMz
IC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZG
MDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQk0QjdBRTQ5NTIx
NzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8sCkBAIC0yNTAzOSw3ICsy
NTA0OCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0
b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNw
cCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywK
LQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJ
CQkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8s
CisJCQkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICov
LAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAog
CQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1
NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTA5Niw2
ICsyNTEwNiw3IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRp
ZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8s
CiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJB
QzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1
NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNE
N0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAog
CQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApA
QCAtMzAyNjEsOCArMzAyNzIsNyBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDRE
MUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkFDM0FFMjNF
MUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9s
c0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5Qjcw
MDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1
MzQ2MzlhNzM2MTQ1ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZSht
X2ltYWdlQnVmZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdl
QnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAg
ICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1h
Z2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAg
ICAgIG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3Qg
cHJldmlvdXNNZW1vcnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZl
ckNvc3QgPSBtZW1vcnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4
IDZhOWVjMmE5NTM5MDgwOTdlNzFjMDY2ZjkxOWM4N2IxNGJhZDg0Y2MuLmZjNmM1ZjNjZDA0NjI2
OTU2NjgyMmMwOGE0ODJjYzNiZDZhODgzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNt
YWtlCkBAIC0xMyw3ICsxMywxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCBmOTBkMjQ2ZWM1OWI0ZjhhOGUxMzhi
NzIyNDBjZjIwMjU4MzE5MmM0Li42ZmE0ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5
OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcg
KzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdl
Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKaW5kZXggNDgyMjQ0YTRmMmJkY2VkZTdjODc0Y2QxYjUwZWE5MTRiMTQ5OWEyMi4u
ZGRkNWM2YzczNDVhMmMwZDhiZDlhOGU0ZWZiNGUzY2I5OTU4N2M2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMTY1LDEyICsx
NjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWVSZXNwZWN0aW5nT3JpZW50YXRpb24oY29ucwogICAgICAgICByZXR1cm4gaW1hZ2U7CiAK
ICAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHJlY3Quc2l6ZSgp
LCByZWN0LCByZWN0LCB7IG9yaWVudGF0aW9uIH0pOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoRElS
RUNUMkQpCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1v
dmUoYnVmZmVyKSk7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgcmV0dXJuIGJ1ZmZlci0+bmF0aXZl
SW1hZ2UoKTsKLSNlbmRpZgogfQogCiAjaWYgVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZjU0NWUzYTkyMGZkYzZjYWQyNWI0YjU2ZTRiYjQ1NGQ2MTdhMTk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgQ29udGV4dHVhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIGF1
dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4
dHVhbEltYWdlQnVmZmVyPihuZXcgQ29udGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2Vu
ZCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0dWFsSW1hZ2VC
dWZmZXI+KG5ldyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9w
dHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShi
YWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBm
bHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENv
bnRleHQoKTsKKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRyYW5zZm9ybSgpOyB9CisgICAg
SW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+
bG9naWNhbFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPnJlc29sdXRpb25T
Y2FsZSgpOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29zdCgpOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+ZXh0ZXJuYWxNZW1vcnlD
b3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlv
ciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xv
clNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxD
b250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybiBtX2JhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgfQorCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgbV9iYWNr
ZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50KTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYgY29udGV4dCwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRl
c3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3Rp
bmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsK
KyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBmM2VlZTkzYTUzMjVlNTJlYmYzM2ZmZGU2
YzZhNjcxNzU4NzU2YzExLi44ZDI0YTQzNjFhNDk2MzJkODU1OGVlZjJiZTMyMzY2ZDZmYzZmZTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMzcgKzI5LDg0IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBmbG9hdCBN
YXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJl
YSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCi1XVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwotCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAg
ICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAg
ICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1
ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAg
ICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJ
bnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6
ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzY2FsZWRTaXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKwogfQog
Ci0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEs
IGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0
b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5z
Y2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29sIEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0x
MDUsNDggKzE1MiwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwg
Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJ
Uk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0
dXJuIHsgfTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpIH07Ci0gICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7Ci0gICAgaWYgKCFp
bWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNy
Y1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAg
ICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwot
ICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCBy
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBi
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dpY2FsUmVjdCk7Ci19Ci0K
LSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTE2
Myw1MCArMTc0LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1h
Z2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBj
b25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBh
Ym91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRl
ciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlm
Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdhYmZlMGQxNzExNDA2ZDkwOGUwMzFkMmY2
YTA3MWU0OTBhZjE4YWMuLmEwYjA0YWZlMjdkMzg1ODA4NzY2YWM2YzJiMTczNzUzZDQwNTgyYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjcsNTYgKzI3LDE2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
IgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRh
OwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQot
ZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50
ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlC
YWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsK
LQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07
Ci0KIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9S
VChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgogICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0g
bnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBu
dWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RU
b0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwpAQCAtOTIsNzUgKzUyLDU0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7Ci0jaWYgVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICAvLyBUaGUgYWN0dWFsIHJlc29s
dXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQotICAgIAotICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIAotICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObykgY29uc3QgPSAwOworCisgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RU
b0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgc3RhdGljIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0j
ZW5kaWYKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsg
fQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0K
LSNlbmRpZgotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdDsKLSAg
ICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50ID0geyB9KTsKLSAgICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9IDA7CiAKICAg
ICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0
aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGggdGV4dHVyZXMg
dGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKLQotcHJpdmF0
ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAg
IEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQot
ICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBn
aXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQg
c2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykK
LSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wm
IHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNz
KTsKLSNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFn
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1
ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFja2VuZFNpemUo
YmFja2VuZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisg
ICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUg
KiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2Nh
bGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgaWYg
KGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7
CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgaWYg
KCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkg
PSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3Jj
UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7
IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAg
ICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Cisg
ICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0g
c3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAgICAgZG91Ymxl
IGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91Ymxl
KWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMs
IGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6
ZXJvKCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICog
bV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93
LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgor
ICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1Bp
eGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFsz
XSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWlu
dDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVz
dFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFs
cGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVs
dGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBp
eGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBd
ICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAy
NTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1
KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9y
bWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVz
dFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQ
aXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4
ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9yKShDb2xvckZv
cm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xvckZvcm1hdCBz
cmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3Ms
CisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVf
dCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBi
eXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3Jt
YXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAg
ICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNj
ZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBj
b25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVz
KHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzcmNS
ZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0
YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBw
ZWQgPSAgaW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQpOworICAgIElu
dFJlY3QgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUo
KSB9OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Qu
c2V0WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwg
MCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYg
KGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgaW1hZ2VE
YXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cg
PSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0
Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6
OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFj
a2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9
IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RD
bGlwcGVkID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLnNpemUo
KSB9LCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3JjUmVjdENsaXBw
ZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAt
IHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55KCkpOwor
CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNyY1JlY3RDbGlw
cGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBp
bWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0
YS5kYXRhKCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAg
aW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENv
bG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzYjYz
Y2RmNzE3OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VE
YXRhOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8v
IEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBE
b250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNv
cHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAg
IE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsK
KyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkg
PSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRl
QmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1
YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAg
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKwor
ICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSA9IDA7CisK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51
bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25z
dCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1hdDo6
UkdCQTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFja2VuZENvb3Jk
aW5hdGVzKFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPFQsIEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNpemU+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAgaWYgKG1fcmVz
b2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dpY2FsU2l6ZSk7
IH07CisgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
KSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAg
ICBJbnRTaXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Cisg
ICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0
YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMxMDI0NDdjNzNh
MTJmMWQ2ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0
YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENH
KQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTA5YmYyYzBkYWZhMjNhMzgxMzE3MmMyYmJhODc1MjM1YWJhMzUzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQor
I2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJP
KSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1
c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7
CisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsK
KyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
aW5kZXggYzdhZTJmNWQ3M2I5MTM4ZDc1NGVkMTJhYTA3OGU3MWFiOTU5NTM0ZS4uM2NmY2U3Mjk1
NDIwOWQzMDNhOWY3MjQzMmZiYjRiNjM5ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5
ZXJJbWFnZS5pbnRlcm5hbFNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllcklt
YWdlLmJhY2tlbmRTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7CiAg
ICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBi
ZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBu
b3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3Qu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGY5NmZjOTViYjZkZTVlZDJj
ZjNkYTZlMTI5ZTFhNDMyYzcyNGM3YWQuLjg1M2NkMDJiYjhjZTkzOTAwNmJiZTM0ZTQwOTc5Yjhm
MzRkNGZjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC00NTMsNyAr
NDUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAotICAg
IHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykKICAgICAvLyBGSVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAppbmRleCA2ODk4NGQ1NjRhOTI5MjdkNDI4ZmNlYmI4MGUxNGFhY2Y5YWZhNGVm
Li5jZDhmMWRiMzU5ZTI2YTAxYTJjODViYmQyMmVhMzY4ZTZhYzg4OTRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBz
dGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQm
IGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3Rh
dGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5h
dGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFn
ZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9p
bnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXll
clNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0
YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgz
LDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBz
YW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0
YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3Rh
dGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkg
eworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29u
dGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xv
YmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0
YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hh
ZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVm
ZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxh
eWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAg
Y2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJl
Y3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxs
U291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIw
MjVlMTQ3NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlk
ODU0ZWI3OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApA
QCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVm
ZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0
OTg2ZTg3NzQ2NmI4ZjA3Nzg2ZmJkMWJmMzk0NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYy
MDJjZjExMjU5NWJjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApA
QCAtNDE0LDcgKzQxNCw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlw
Qm91bmRzKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
ICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJm
YWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxM2JiNjdjODcwYjcwMzNjMDAwYzMxYmQyZjI1OWJkN2Jk
ODJmOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fp
cm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
bmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lm
IFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxz
ZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8t
Z2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25z
dCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAgOiBtX3Bs
YXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkK
LSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1f
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lmIFVTRShO
SUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6
Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0
b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0K
LSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQotewotICAg
IGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVh
dGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JH
QkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X2Fu
dGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwotfQot
Ci0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRm
b3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3Rp
dmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRv
clRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgICAg
IGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJveHku
cHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJs
ZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAgICAg
ICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgICAg
ICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZm
ZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcwot
ICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQg
aW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAgICAv
LyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fp
cm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlmIChw
cmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJm
YWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
UHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICBj
YWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVD
YWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0
aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBl
eHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAgIGds
R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElH
Tk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwg
Ki8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVy
ICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2RldmljZV90
KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3YXJl
bmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgotICAg
IGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0gICAg
bV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
ZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdldCgp
KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3Vy
ZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0g
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50
KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVybiBz
dXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0
byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3Vy
ZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBpeGVs
cyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW1h
Z2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJm
YWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9naWNh
bFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsK
LSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9yLgot
Ci0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUu
d2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9uU2Nh
bGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGlj
YWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdp
ZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsK
LSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0g
ICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlm
ICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5t
X3JlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxv
Y2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQot
ICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNh
aXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJp
ZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAo
IXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShz
dXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFj
ZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9
KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNy
ZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0K
LSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBt
X3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsK
LSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0
YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAg
IHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNl
IGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVo
YXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQot
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAg
ICAgICAgaWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAg
IHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZShkZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7
Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRp
b25Db250ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25D
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6
U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJv
OjpkcmF3UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwg
bV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlv
bnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3Bh
Y2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChz
cmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAg
IGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdC
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFj
ZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1Njsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAg
ICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAg
ICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3Ig
KiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAg
ICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVU
KTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxV
VD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0g
bGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYg
KGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXpl
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBD
b2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0g
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkg
aGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsK
LSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAg
ICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICBy
ZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDAp
OwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxJbWFnZURh
dGE+IGdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJl
Y3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKLSAgICBhdXRvKiBw
aXhlbEFycmF5ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywg
YXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RG
OjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMu
Ci0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0
LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVj
dC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwotCi0gICAg
aW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmln
aW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0g
MDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0g
ICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChv
cmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVu
ZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0K
LSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0
LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBp
biBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRo
ZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVm
ZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMs
IG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdl
UmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgp
LCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdl
UmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3Vy
ZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1
cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAg
ICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJl
Y3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2Fs
QXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNp
emUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhRHN0ID0gcGl4ZWxBcnJheS0+ZGF0YSgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hh
ciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAq
IDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5z
aWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0
cmlkZSAqICh5ICsgb3JpZ2lueSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNv
bHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQotICAgICAgICAgICAgLy8g
QXZvaWQgY2FsbGluZyBDb2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNl
IG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVu
c2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDAp
ID4+IDI0OwotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDAp
ID4+IDE2OwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYw
MCkgPj4gODsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBG
Rik7Ci0KLSAgICAgICAgICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAg
PSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IGxvZ2ljYWxSZWN0ID0gc3JjUmVjdDsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBz
cmNSZWN0OwotICAgIGJhY2tpbmdTdG9yZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIAotICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQotICAgICAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVy
biBnZXREYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdT
dG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KQotewotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIElu
dFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBkZXN0UG9pbnQ7Ci0KLSAgICBJbnRSZWN0IHNjYWxl
ZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9
IGltYWdlRGF0YS5zaXplKCk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBv
aW50OwotCi0gICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgc2NhbGVkRGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VS
VChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNl
UmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0
LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNl
UmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsg
bG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50
IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0g
ICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNl
UmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAg
aW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5z
ID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxl
ZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBz
Y2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQ
b2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDAp
OwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkp
OwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVj
dC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBs
b2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdo
dCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51
bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9m
IHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4K
LSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBz
dXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0
eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VT
Y2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0
LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25z
dCB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
dW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsg
ZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNh
bGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQg
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0g
ICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBo
YSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0g
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBj
YWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
LgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdl
dCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2lj
YWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUg
aW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZh
Y2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJ
bnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dz
KSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwg
bG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpKTsKLSAgICB9Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRh
dGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUo
ZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0K
LSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVybiBkYXRhKGltYWdl
LCBtaW1lVHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENh
aXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hh
bmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2
ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVN
YXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmICht
X2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAo
bV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJE
YXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29s
IEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJl
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2Fu
dmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3
YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJf
dCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0
YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRl
c3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVy
bmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAg
ICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0
aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0
MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
IgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBV
U0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCBy
ZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShk
ZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBh
dXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAg
IGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFs
cGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUp
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUg
OiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVz
dENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBp
ZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50
CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xv
cik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5
OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5l
YXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6
U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRl
dmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9
Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEo
bWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAg
ICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwg
YmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNy
KCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVk
ODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFj
ZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJp
ZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVm
ZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMzYzNzJmOTE5ZTdlY2U4Y2JjNmEyNjNjNDg5Yzk5ZTBlODc2MjQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVT
RShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisj
ZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQg
Y2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUg
PSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChi
YWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1
c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBh
IHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JH
QkEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRl
ciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2Vf
dCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2Fy
ZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAg
ICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAg
IGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0
dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgYmFja2VuZFNp
emUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4obmV3
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxs
cHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0
ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZh
Y2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6
Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJv
eHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5k
aWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xp
ZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21w
b3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAg
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1Bs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVz
dGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92
ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChw
cmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmlu
ZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2go
bV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRl
eHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAm
ZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRU
ZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQo
dGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBt
X2JhY2tlbmRTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJl
VGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Cisg
ICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIHJl
dHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCit7
CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
KyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2JhY2tlbmRTaXplLndpZHRo
KCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUud2lkdGgo
KSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAg
ICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVy
YXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9s
ZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIo
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9y
VGV4dHVyZSwgbV9iYWNrZW5kU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xf
UkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8v
IEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJl
IGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3
aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBw
cmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0
aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29t
cG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9v
cGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAg
ICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8v
IENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8g
Y2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1
cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRC
bGVuZCwgbV9iYWNrZW5kU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGYwZmFlN2UyYzM0OWUyMTY0MTk4
NDU1ZDQxOGMzY2FiNjc0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAg
IDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKwor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYK
KyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFM
YXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlOwor
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVm
UHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRl
eHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBiZjczNGMwYWM2NDFhZWRj
ZTBiMGI5Y2M3ODBmYTZmNDk3MDg0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3Rh
dGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFj
ZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgp
ICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0
KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdl
dCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAg
ICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQor
CitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNh
aXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3Jj
ICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6
ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7
CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFS
R0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2lj
YWxTaXplLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYwMDM3OTRmZGFhOTQ3MzJiNjE1NTdjNDFlODQ0MjMx
YTk4YTcwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICB2b2lkIHBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxl
KSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUyZDE1ZjBiYTIyMjEwZjdhMTc0YmE3MDdlZDI2MTgwYzE4ZmVhNGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6
ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
I2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUg
PGNhaXJvLmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkK
KyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19z
dXJmYWNlX3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsK
KworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZh
Y2UuZ2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAg
bV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGlj
c0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKK30KKworTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5
QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBj
b3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FS
R0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdl
dCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5n
ZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHku
Z2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCks
IG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsK
KworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2lu
Z1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2Uo
KSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yOworICAgIGlmIChj
YWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobV9zdXJmYWNlLmdldCgpKSA9
PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250
Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlCZWhhdmlvciA9IENvcHlC
YWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JH
UkFEYXRhKCkgY29uc3QKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VU
b0ltYWdlKCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAg
IFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHN1cmZhY2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBw
aXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAg
IGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
c3VyZmFjZS5nZXQoKSkgKgorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
c3VyZmFjZS5nZXQoKSkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZh
Y2UuZ2V0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1
dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2Fs
ZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKyAgICBJbnRQb2ludCBkZXN0UG9p
bnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGNhaXJvX3N1
cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCBkZXN0UG9pbnRTY2Fs
ZWQueCgpLCBkZXN0UG9pbnRTY2FsZWQueSgpLCBzcmNSZWN0U2NhbGVkLndpZHRoKCksIHNyY1Jl
Y3RTY2FsZWQuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM5NDlmZjM3Mzc0ODgyNDU1MWUzZTRlZmU1YTJiNGQ2NjkzZjA1NTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6
ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8p
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1
cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBj
b25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9z
dXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVs
bHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTYx
ZTM1OTk0NmVmNGJhZDY5MjNmZGJmNzU2NGEyZTM5Zjc2OWM0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm9faAotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShOSUNPU0lBKQotI2luY2x1
ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgOiBwdWJsaWMgTmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICA6
IHB1YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotcHVibGljOgotICAgIElt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVh
bCB+SW1hZ2VCdWZmZXJEYXRhKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1
cmZhY2U7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwotICAgIEludFNpemUg
bV9zaXplOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9p
ZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBtX2NvbXBvc2l0b3JTdXJmYWNlOwotICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmU7
Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOwotCi0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxz
ZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3Jt
TGF5ZXJQcm94eTsKLSNlbmRpZgotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0gICAgdWludDMy
X3QgbV90ZXh0dXJlOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ0FJUk8pCi0KLSNlbmRpZiAvLyBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTY0YzY5OTUxOTdlY2IzZDUz
ZWRkMzJiYWUwZDBlNDVmYmY3NDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lm
IFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRo
Lmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPElt
YWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9S
TShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVz
ZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlz
IG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SW1hZ2VCdWZmZXIpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xv
clNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlw
ZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAg
Y29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlw
ZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENv
bG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0
OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JT
cGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAg
IGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNl
ID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwg
cmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcg
c2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4
dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1J
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3Mp
Ci0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNv
bHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVy
biBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJl
c29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3
ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2Fs
ZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVp
Z2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0g
bV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQg
PSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVy
Zmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNr
ZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRh
LmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
SW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0
aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBt
YXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0j
ZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJh
dGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IEZsb2F0U2l6ZSh3aWR0aC51bnNhZmVHZXQo
KSwgaGVpZ2h0LnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZh
Y2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwg
Y29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAg
Y2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2lu
ZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNl
ckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJm
YWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhv
c3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAg
YWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxs
IGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVy
YXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6
OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0
YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9k
YXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0
bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4
LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2Rh
dGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBb
XSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VC
dWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9Owot
ICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAg
ICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVu
c2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0
KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19
Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3Vj
Y2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dD
b2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1
Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVm
ZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGlu
dm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55
IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJm
YWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0
cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3Mg
bV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0
IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJu
IG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNp
emUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFn
ZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1l
bW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwg
YW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUg
YW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1
c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBv
ZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1
cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBv
aW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhp
Y3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAg
ICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICBy
ZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RN
YWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJu
IGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGxv
Z2ljYWxTaXplLCBJbnRTaXplIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1h
Z2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsK
LSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VT
aXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUlu
VXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdl
OjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBsb2dpY2FsU2l6
ZSgpLCBpbnRlcm5hbFNpemUoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZm
ZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVy
KSksIGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5r
SW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIp
Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWlt
YWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3Vy
ZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZN
b3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRy
PENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
c3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9y
ZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4
LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwg
bV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdl
ID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBp
bWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZh
Y2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NF
UlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIElu
dFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVy
LT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVz
dENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZl
ciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
aWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwg
bmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgIH0KLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0
ID0gc3JjUmVjdDsKLSAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShvdXRwdXRGb3JtYXQsIHNjYWxlZFNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50
UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9p
bnQgPSBkZXN0UG9pbnQ7Ci0gICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgc2NhbGVkRGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAg
IG1fZGF0YS5wdXREYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNj
YWxlZERlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2Fj
aGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAg
IGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgp
LmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVz
b2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsK
LSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRh
dGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IElt
YWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgp
LCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hh
bm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgot
ICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkgfSk7Ci0gICAg
ICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxT
aXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRy
KGltYWdlRGF0YS0+ZGF0YSgpKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKLQotICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0g
ICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0
aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNj
YWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwot
ICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgw
LCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
aW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0
KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwot
ICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZE
YXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShjZkRhdGEpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJh
NzliM2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
CisjZW5kaWYKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4
dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dD
b250ZXh0VHlwZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9y
U3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5
RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNp
emUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVz
b2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBi
YWNrZW5kU2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkg
IT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0
SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgp
KSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qo
aW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUu
aGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdl
UmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6
ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgp
LCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dp
Y2FsU2l6ZSkpOworICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dp
Y2FsU2l6ZTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0
UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0
KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFn
ZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYg
KG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBt
X3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9i
YWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qg
c3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQo
KSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAg
ICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0Fm
ZmluZVRyYW5zZm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2Fs
U2l6ZS5oZWlnaHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3Rl
ZFBpeGVsQXJyYXk7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsK
KyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVm
UHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVj
dGVkUGl4ZWxBcnJheS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZm
ZXJJc0JpZ0Vub3VnaChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAg
ICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVs
bHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJy
YXlEaW1lbnNpb25zLndpZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAz
MiwgNCAqIHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7
CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQg
KiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29u
dGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCks
IGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNr
ZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKwor
ICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0
KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1l
VHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBk
YXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxp
dHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0
KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NF
TEVSQVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5z
aWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAg
dkltYWdlQnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53
aWR0aCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2
SW1hZ2VCdWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9y
bWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYg
ZGVzdCkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7Cisg
ICAgICAgIEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAg
ICBBU1NFUlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdC
QS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAg
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAg
ICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9C
R1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChz
cmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhl
bCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYg
c2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0
ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0
ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VW
SW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNy
YywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNk
NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBS
ZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisgICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZv
cm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTM4M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQzNmQzODA3ZTg0
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShD
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhv
c3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5m
byA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0
ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOwor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAg
ICBpZiAoIXRyeUZhc3RDYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5n
ZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1C
eXRlcyA9IGJhY2tlbmRTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRo
KCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBE
ZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0g
W10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUo
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRl
cywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1v
dmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2Uo
Y29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0
cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUo
c2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0
V2luZG93KTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRl
ciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVy
KFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQp
KQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7Cisg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5
QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENv
cHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisg
ICAgICAgICAgICBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCks
IDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1f
Y29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAg
ICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7
Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRl
c3RQb2ludCwgbV9kYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZh
ZjY2MmExYzc2YThiODliNzc2ZjIzOTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2Vu
ZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7
IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmZjBhZDA5OWM3MTZhZWZmZWIwNDFiN2RkODg1MDE2ZWI2MTRlZGE2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgot
Ci0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0Fj
Y2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRj
aC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQot
Ly8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2Ft
cGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNF
X0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRpYyB2
b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29u
c3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFT
U0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVucHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBC
R1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4K
LSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBl
cm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3Mp
OwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1
ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMu
ZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3Ig
IT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywg
dG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4
cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9Owot
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0Iz
MiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlubGlu
ZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3JjLmRh
dGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0g
d2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdp
ZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAgIFVO
VVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0b0JH
UkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBj
b25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0KTsK
LQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRhdGEo
cmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNpemUu
d2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3Vy
ZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vsc2UK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIGF1dG8g
cmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOwotICAgIGF1dG8qIHBpeGVs
QXJyYXkgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhl
bEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4
ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAg
ICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4g
c2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAg
ICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54
KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0Lndp
ZHRoKCk7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7
Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0K
LSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgo
KSAtIG9yaWdpbngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQot
ICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVu
ZHggLSBvcmlnaW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50
IGRlc3R5ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAg
IGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBk
ZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGgg
PSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lu
eSk7Ci0gICAgaWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBl
bmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9y
aWdpbnk7Ci0gICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVu
c2FmZUdldCgpIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0
Um93cyA9IHBpeGVsQXJyYXktPmRhdGEoKSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3Qq
IHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAg
IGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0
ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93
ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1
dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQot
ICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3
aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBk
ZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAg
ICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qu
cm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0
Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJE
YXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91
dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVu
c2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4
ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVy
IGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0g
KiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZl
R2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNl
bHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNh
ZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihz
cmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
c3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3co
KTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VC
YXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAg
ICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhl
aWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVz
dC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAg
aWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JB
IHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwg
MyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZk
ZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYg
KCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAg
ICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXgg
KyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNS
b3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBz
cmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNh
ZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHgg
KiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCAr
IDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRo
KCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAg
IENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsK
LSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChz
aXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0g
c291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQo
ZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBl
bmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VS
VChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdl
dCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAg
QVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2Vk
PGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93
cyA9IGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cg
KyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRl
cmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRl
c3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0
Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
ICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMu
aGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhf
dCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAg
ICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0Lmhl
aWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYg
VVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7
Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0g
ICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBV
U0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMg
d2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNS
b3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXgg
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3Nb
YmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4
ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBd
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9j
a2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBz
dXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAg
ICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2Fm
ZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25z
dF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5o
ZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYg
KHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
Ci0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBC
R1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsK
LSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwg
bWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3Jj
Um93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0ZmJmMmFkZTVl
ODYwZDM0ZTIxM2UxYzQxMmUxNWJkYWJjNTNmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0
cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHRGF0
YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJ
bmZvOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIElP
U3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9y
IHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAg
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFw
SW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8v
IE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3Q7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiN2ZjNjdiOTJjNzFj
MDIwZWFiZWI2MzM0OTJiZDBmOGQzNmIxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsK
KworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAg
IEludFNpemUgYmFja2VuZFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlQmFj
a2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9T
dXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChiYWNrZW5kU2l6ZS53aWR0aCgpID4gbWF4
U2l6ZS53aWR0aCgpIHx8IGJhY2tlbmRTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250
ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBp
ZiAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpID09IGtDR0NvbnRleHRUeXBlSU9TdXJmYWNl
KQorICAgICAgICByZXR1cm4gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRl
eHQpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9y
U3BhY2UoY29udGV4dCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNp
emUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNy
ZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2VuZFNpemUsIGNnQ29sb3JTcGFjZSk7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2lu
ZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBiYWNrZW5kU2l6ZSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92
ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0
byBjZ0NvbG9yU3BhY2UgPSBjb250ZXh0Q29sb3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0
dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJu
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6
OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKKwor
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChs
b2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAg
ICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2Up
OworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFs
Qnl0ZXMoKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1
bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1h
dCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisK
K05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRp
dmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3Zl
KG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJh
d0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENv
bnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8
SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKwor
ICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9y
IGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVj
dChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmRkYmJmMjk4NGZhZTgxMDZlZDdjMWY2M2I2NGEyMjBjYjE4MDYyMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBI
QVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3Rh
dGljIEludFNpemUgY2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0
IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRl
OworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3Qg
ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBv
dmVycmlkZTsKKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGlj
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAKaW5kZXggMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMy4uMmFhODIz
MzJkZTJkMTExYmRjZTFlMDgwNjM1OTBkY2UyMWI2YzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAg
LTI1NCw4ICsyNTQsOCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIG1fY2FjaGVkU291
cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CiAKLSAg
ICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpOwotICAgIGRlY29kZWRTaXplQ2hhbmdlZChpbnRlcm5hbFNpemUudW5jbGFtcGVkQXJlYSgp
ICogNCk7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKGJhY2tlbmRTaXplLnVuY2xhbXBl
ZEFyZWEoKSAqIDQpOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUERGRG9jdW1lbnRJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4z
OTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3
ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29s
LmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cu
aCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1w
b3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2
b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1
cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92
ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VC
dWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBy
ZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0K
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBz
aXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVs
LCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCmluZGV4IDFlMDM1YTdlZWYyODAzY2Y2NTk5MmQwNDljOWY4YjU1NmJjZWNhZWMuLjkxOGUx
OGFmNWUxMmZmOTA0OTQ4M2E3OGVmMWJhODJkNzM1OGMyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKElt
YWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFz
KHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwg
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAg
ICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAg
cHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjY3YzY0M2VjYjg5M2E3OTM3ZDgwMjQzNTcx
ODZjYjE2NDIxY2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0j
aW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQy
ZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVB
cnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQg
Ymx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHko
Y29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVkIGNvbENv
dW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRl
c3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7
Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28gc2l6ZWQsIHNvIHdl
IG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8gY29ycmVzcG9uZCB0
byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGNvbnN0IHVp
bnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3Mg
KyBkZXN0U3RyaWRlICogeTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbENv
dW50OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQb3NpdGlvbiA9IHggKiA0Owot
ICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1BpeGVsID0gc3JjUm93ICsgeDsKLQotICAg
ICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgKFApUkdCQSBieXRlcy4gV2UgbmVl
ZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAg
ICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNyY1BpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7
Ci0gICAgICAgICAgICB1aW50MzJfdCByZWQgPSAoKnNyY1BpeGVsICYgMHgwMEZGMDAwMCkgPj4g
MTY7Ci0gICAgICAgICAgICB1aW50MzJfdCBncmVlbiA9ICgqc3JjUGl4ZWwgJiAweDAwMDBGRjAw
KSA+PiA4OwotICAgICAgICAgICAgdWludDMyX3QgYmx1ZSA9ICgqc3JjUGl4ZWwgJiAweDAwMDAw
MEZGKTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYm
IGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRp
b25dICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMV0gPSBn
cmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMl0gPSBibHVlOwotICAg
ICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1zdGF0aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3Qg
dWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCog
ZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUlu
dFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9z
aXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3Qp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3Vy
Y2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0
QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNv
dXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQg
PSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jv
d3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAg
IHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRp
b24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0Lndp
ZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNy
Y1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBk
ZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLSAgICAgICAgbWVtY3B5
KGRlc3RSb3csIHNyY1JvdywgYnl0ZXNQZXJSb3cpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBm
b3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci1i
b29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uKGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4
X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYg
KCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZl
clBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0g
c291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0g
ZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQg
PSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zm
c2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsK
LSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBv
c2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVj
dC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5o
ZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3Mg
KyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93
ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0KLSAgICAgICAg
Zm9yIChzaXplX3QgeCA9IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7ICsreCkgewotICAgICAg
ICAgICAgdW5zaWduZWQgcG9zID0geCAqIDQ7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9
IHNyY1Jvd1t4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93W3ggKyAxXTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJdOwotICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGEgPSBzcmNSb3dbeCArIDNdOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJl
ZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQg
PSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9
IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9
IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8
PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVj
dEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4m
IHJlc3VsdCkgY29uc3QKLXsKLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNp
emUoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
IC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKLQotICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7
Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAoIUludFJlY3Qo
SW50UG9pbnQoKSwgYmFja2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2NhbGVkUmVjdCkpIHsKLSAg
ICAgICAgLy8gUmVxdWVzdGVkIHJlY3QgaXMgb3V0c2lkZSB0aGUgYnVmZmVyLiBSZXR1cm4gemVy
by1maWxsZWQgYnVmZmVyLgotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qo
c2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIHJlY3Quc2l6ZSgpLCBy
ZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpl
bnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpZiAo
c2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6
ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4gZGF0YS5jYXBhY2l0eSgp
ID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwotfQotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJs
dWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0Pgotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBi
eXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0g
Ynl0ZUNvdW50IC8gNDsKLSAgICBhdXRvKiBwaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oYnl0ZURhdGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENv
dW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgcGl4ZWwgPSAqcGl4ZWxEYXRhOwotICAgICAg
ICBzaXplX3QgYnl0ZVBvc2l0aW9uID0gaSAqIDQ7Ci0KLSAgICAgICAgdWludDMyX3QgYWxwaGEg
PSAocGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdWludDMyX3QgcmVkID0gKHBp
eGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90IGdyZWVuID0gKHBpeGVs
ICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgdWludDMyX3QgYmx1ZSA9IChwaXhlbCAmIDB4
MDAwMDAwRkYpOwotCi0gICAgICAgIC8vIChQKVJHQkEgLT4gUEJHUkEKLSAgICAgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAo
cmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVu
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICpw
aXhlbERhdGEgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1
ZTsKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRo
YXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBs
aWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNp
emVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHggPSBwaXhlbENvdW50
ICogNDsKLQotICAgICAgICB1bnNpZ25lZCByZWQgPSBieXRlRGF0YVt4XTsKLSAgICAgICAgdW5z
aWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07Ci0gICAgICAgIHVuc2lnbmVkIGJsdWUgPSBi
eXRlRGF0YVt4ICsgMl07Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0gYnl0ZURhdGFbeCArIDNd
OwotCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
IGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAg
ICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBn
cmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQz
Ml90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSkgKyBpOwot
ICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4
IHwgYmx1ZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQg
PSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LnNpemUoKSk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9
IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXBpeGVsQXJyYXkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0KLSAgICBpZiAoIXJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGRlc2ly
ZWRGb3JtYXQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmF3Qml0bWFw
U2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotICAgIEludFNpemUgYml0bWFwU2l6ZShjbGFtcFRv
PGludD4ocmF3Qml0bWFwU2l6ZS53aWR0aCksIGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLmhl
aWdodCkpOwotCi0gICAgaWYgKHJlY3QubG9jYXRpb24oKSA9PSBJbnRQb2ludCgpICYmIHJlY3Qu
c2l6ZSgpID09IGJpdG1hcFNpemUpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQnl0ZXMu
dW5zYWZlR2V0KCkgPT0gZGF0YS5zaXplKCkpOwotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT25s
eSB3YW50IHBhcnQgb2YgdGhlIGJpdG1hcC4KLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21EYXRh
KHJlY3QsIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAoYnl0ZUZvcm1hdCAhPSBkZXNpcmVkRm9ybWF0KSB7Ci0gICAgICAgIC8vIEluLW1lbW9y
eSBkYXRhIGRvZXMgbm90IG1hdGNoIGRlc2lyZWQgZm9ybWF0LiBOZWVkIHRvIHN3aXp6bGUgdGhl
IHJlc3VsdHMuCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0
aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHJlc3Vs
dC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
aW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFG
cm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBj
b25zdAotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1
ZmZlck91dE9mU3luYykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBJbnRTaXplIHBpeGVs
U2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gcGl4
ZWxTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnRleHQtPmVuZERy
YXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKLSAgICBBU1NFUlQoISFkMmREZXZp
Y2VDb250ZXh0KTsKLQotICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNpemUud2lk
dGgoKSAqIDQ7Ci0KLSAgICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRv
IGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEKLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVC
aXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBE
MkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJE
MV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwot
ICAgIEhSRVNVTFQgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAocGl4ZWxTaXpl
LCBudWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRt
YXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0
YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhl
aWdodCgpKTsKLSAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywg
Yml0bWFwLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAg
IGhyID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIW1hcHBlZERhdGEuYml0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFl
bnN1cmVCYWNraW5nU3RvcmUocGl4ZWxTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6
emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgaWYgKGRlc2ly
ZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKLSAgICAg
ICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUud2lk
dGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdo
dCgpLCBwaXhlbFNpemUud2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRh
dGEsIGRhdGEuZGF0YSgpKTsKLQotICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OwotCi0g
ICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLQotICAgIGhy
ID0gY3B1Qml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBB
U1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVp
Z2h0KCkgPiAwKTsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSAr
IHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0g
ICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQo
b3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQo
KSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVj
a2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJU
KGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiB3
aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4
IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwot
ICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBz
b3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChv
cmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgp
IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQo
ZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBo
ZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVu
ZHkgLSBkZXN0eTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAg
ICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NF
UlQocGl4ZWxTaXplLndpZHRoID49IGltYWdlRGF0YS5zaXplKCkud2lkdGgoKSk7Ci0gICAgICAg
IEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJU
KHBpeGVsU2l6ZS5oZWlnaHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgICAg
IEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG96KiBzb3VyY2UgPSBpbWFnZURhdGEuZGF0YSgpOwotICAgIGlmIChzb3VyY2VT
aXplID09IHNpemUpIHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgp
LCBzb3VyY2UubGVuZ3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0Owot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3Jt
YXQpOwotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBz
b3VyY2UsIHNvdXJjZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Yml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0K
LQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6
ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0Nv
cHkgPSBzb3VyY2VSZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUp
LmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGRlc3RCdWZmZXJQb3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNv
dXJjZVRvRGVzdChzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAg
ICBpZiAoYnl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0
aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJj
ZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXpl
LCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVj
dEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291
cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3Np
dGlvbik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVk
ZWQoKQotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJp
dG1hcE91dE9mU3luYyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4
ZWxTaXplLmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAq
IHBpeGVsU2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0
YSBpcyBpbiBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRv
IGJlIGNvbXBhdGlibGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3
ZSB1c2UuCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEg
LT4gUEJHUkEKLSAgICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBS
R0JBIC0+IFBCR1JBCi0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVt
b3J5KG51bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5
bmM6OkluU3luYzsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNv
bXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBs
b2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAg
ICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFy
Z2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAo
Yml0bWFwVGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdC
aXRtYXA7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFw
KCZiYWNraW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAh
PSBiaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCBy
ZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVk
Qml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVE
RUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51
bGxwdHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
YXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWln
aHQgJiYgc2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1C
eXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFy
Z2V0LgotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0
bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5l
bmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VD
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3Vy
Y2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVT
MSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBf
T1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVj
dDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4
dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KCFzb3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJj
ZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhy
ID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21w
YXRpYmxlQml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFw
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291
cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVC
aXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21w
YXRpYmxlQml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlj
YzQ5M2UxYzJhNWE1NmMyY2VhZWY1YzNhMjljOTUwNDVkMWQwNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXpl
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUJp
dG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5
dGVzUGVyUm93OwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAg
IG11dGFibGUgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGJ5dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBs
YXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250
ZXh0OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBjbGFzcyBC
aXRtYXBCdWZmZXJTeW5jIHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3lu
YyB9OwotICAgIG11dGFibGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0
bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJik7
Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJU
YXJnZXQqKTsKLQotICAgIGJvb2wgZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmKSBj
b25zdDsKLSAgICB2b2lkIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIGJvb2wgcmVh
ZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9y
bWF0KSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYsIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbVNv
dXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICB2b2lkIG1hcmtCdWZmZXJPdXRPZlN5bmMoKSB7IGJp
dG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmM7IH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhZjE1ZTQ3YzI5NzI1NjI3NDNmZDcyMTVmZGY1NzVl
NGI1MDI5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxk
MmQxXzEuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRl
eHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCAmY29udGV4dCwgc3VjY2VzcykpOwotCi0g
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1
cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0Lgot
ICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZShzY2FsZWRTaXplLndpZHRoKCkg
LyBzaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgpKSk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JT
cGFjZSovLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGJvb2wmIHN1Y2Nlc3MpCi0gICAg
OiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9u
U2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFu
IGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBzdGQ6OmNlaWwocmVzb2x1dGlvblNj
YWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBzdGQ6OmNlaWwo
cmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNj
YWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAg
ICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5o
ZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIg
b3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBD
aGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1f
ZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0
ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwotICAgIGF1dG8q
IHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVy
VGFyZ2V0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJl
bmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0g
ICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdl
dE9mU2l6ZShtX2xvZ2ljYWxTaXplLCByZW5kZXJUYXJnZXQsIG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhSRVNVTFQg
aHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJm1fZGF0YS5iaXRtYXApOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLnBsYXRmb3JtQ29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQu
Z2V0KCksIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRl
ZCgpOwotICAgIH0sIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5
bmMoKTsKLSAgICB9KTsKLSAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0PihtX2RhdGEucGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgc3VjY2VzcyA9IHRy
dWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3Mp
Ci0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGltYWdlQ29sb3JTcGFj
ZSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgc3VjY2VzcykKLXsKLX0KLQotSW1h
Z2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250ZXh0JiBJ
bWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEuY29udGV4
dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBj
b250ZXh0KCkuZmx1c2goKTsKLX0KLQotc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRh
cmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAg
RmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZs
b2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdl
U2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNy
b3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRz
KTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8gc291cmNl
UmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50
ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0
aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNy
b3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFs
U2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBz
Y2FsZWQgdmVyc2lvbgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBhdXRvIGJpdG1hcFRh
cmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6
ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXpl
IGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwot
ICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2Fs
ZTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0Owot
ICAgIEhSRVNVTFQgaHIgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwg
c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwg
bG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQot
ewotICAgIC8vIEZJWE1FOiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBpbWFn
ZS4KLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhy
ID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRl
cmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaHIg
PSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLQotICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBh
c2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KLSAg
ICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNF
bXB0eSgpKQotICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKLQot
ICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkp
ICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdT
dG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSk7Ci0gICAgICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURp
bWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFj
ZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAg
IGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2Nh
bGUpOwotCi0gICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0gbV9kYXRhLmNvbXBhdGlibGVCaXRt
YXAoZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLQotICAg
IEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVC
aXRtYXApOwotICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwg
Y3VycmVudEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1h
Z2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBv
dXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRl
cmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShvdXRwdXRGb3JtYXQs
IHNjYWxlZFNyY1JlY3QsIGludGVybmFsU2l6ZSgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIEludFJlY3Qgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwotICAg
IHNjYWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHNjYWxlZERlc3RQ
b2ludC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBtX2RhdGEucHV0RGF0YShpbnB1
dEZvcm1hdCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVy
bmFsU2l6ZSgpKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VE
YXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0
eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9y
U3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI3MGFiZWRmMGE2MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQor
CisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRl
ICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCisjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHdp
bmNvZGVjLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4
dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRl
clRhcmdldCgpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICBy
ZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKwor
ICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJn
ZXRPZlNpemUoc2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmICgh
Yml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgYml0
bWFwOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBs
YXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1h
cENvbnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRt
YXBJZk5lZWRlZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtCdWZm
ZXJPdXRPZlN5bmMoKTsKKyAgICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChz
aXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBs
YXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisK
K0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBiaXRt
YXApCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdU
Rk1vdmUocGxhdGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQp
KQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0NvbnRl
eHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKm1fY29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRh
cmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQt
PkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIC8v
IEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBi
YWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJlaGF2
aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAgICAg
ICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVz
UGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7
CisgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJ
bnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5Db3B5
RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwg
MzIpOworCisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3Vu
ZHMpCit7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXpl
KGltYWdlKSA6IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxz
aXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53
aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRh
cmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAg
IGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNv
cHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0
cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1h
cFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2Us
IEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQs
IGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhN
RTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKwor
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jl
c29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29s
dXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9y
KTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFy
Z2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJn
ZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJu
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgp
LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KQoreworICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5kZXJU
YXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRl
eHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsK
KyAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0
bWFwPiBiYWNraW5nQml0bWFwOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJn
ZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJh
Y2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRt
YXA7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRv
IGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVu
ZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6
OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBt
X2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Cisg
ICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0
ICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdl
dCB0byB0aGUgb3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRh
IGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9w
ZW4uCisgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250
ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBE
MkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJv
cGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElP
TlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhy
ID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNp
emUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMs
ICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVs
bHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNv
dXJjZURhdGE7CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05T
X1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFy
Z2V0RGV2aWNlQ29udGV4dDsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2Uo
JnRhcmdldERldmljZUNvbnRleHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERl
dmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRT
b3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQ
cm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVu
bWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5E
cmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0bWFw
ID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCkpOworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFn
ZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJv
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShj
b21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJ
bWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRhdGE6
LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNkYmE3
ZWU1ZWVmZjJmNzFhYzM5Mzk2MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkltYWdl
QnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQo
KSBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBv
dmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdlUHRy
IG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0ZTVj
Y2QzNzAxYmQuLjMyYmY4NmJjNmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJj
ZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1lcmF0
b3IsIGZwc0Rlbm9taW5hdG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24o
ZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAgIGF1
dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBhdXRv
IGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRvIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAgICAg
ICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3aWR0
aCIsIEdfVFlQRV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggNjA3NWY2M2Ux
YzI4MDA3ZjY3N2UyOTM3YzVjYTdiYzY3OTMzMjAyOC4uZjZhOTU0NTg5ODU4ZTAwZTRlN2I2YTNj
MTlmMjJiYWZhNTc2MWQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgYm9vbCBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4mIGltYWdlQnUKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFp
bnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4
cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZl
clNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAq
IHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKLSAgICAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpKQorICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSkKICAgICAgICAgICAgIGltYWdl
QnVmZmVyLnJlc2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggMmUwYTQwNTY1ODllMjQ5MGE1ODVkZjNmYWE4ZDNjNmVm
NDExOTJmYi4uNGQ4NTc4YjFhMzg5MzdkYTViYjliZWM2ZTI0YjFkMGNkNWRmMzE1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtODQ2LDcg
Kzg0Niw3IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rp
b25TbmFwc2hvdCgpIGNvbnN0CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoc25hcHNob3QtPmludGVybmFsU2l6ZSgpLCB7IH0pOworICAgIGF1dG8gc2hh
cmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+
YmFja2VuZFNpemUoKSwgeyB9KTsKICAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391110</attachid>
            <date>2020-02-18 15:34:51 -0800</date>
            <delta_ts>2020-02-18 16:08:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200218153451.patch</filename>
            <type>text/plain</type>
            <size>309911</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI2NWQ2YWE1YWUyZWMz
MWRhMDA2MGQxMzRmNGUyZmVmYTJjNzZhNy4uZDczNzU4ZWM1NDkxNWE0MzAxYTk3NWI1YWJmMTMz
YjZjNzM2NjJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNCBAQAorMjAyMC0wMi0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUgcmUtZmFjdG9yZWQg
dG8gZGVjb3VwbGUgdGhlIHBsYXRmb3JtIHNwZWNpZmljcyBhbmQKKyAgICAgICAgdGhlIGJhY2st
ZW5kIGRldGFpbHMgZnJvbSB0aGUgaW50ZXJmYWNlICJJbWFnZUJ1ZmZlciIuCisKKyAgICAgICAg
QSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQgd2lsbCBhZGRlZCB0
byBhbGxvdyBjb2RlCisgICAgICAgIHNoYXJpbmcgYW5kIHRvIHNwbGl0IHRoZSBjb2RlIGFjY29y
ZGluZyB0byB0aGUgcGxhdGZvcm0gYW5kIHRoZSBiYWNrLWVuZAorICAgICAgICBkZXRhaWxzLgor
CisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUga2VwdCBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVz
dCBvZiB0aGUgY29kZSBidXQgZGlmZmVyZW50CisgICAgICAgIGJhY2stZW5kcyB3aWxsIGJlIGNy
ZWF0ZWQuIENvbmNyZXRlSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAorICAg
ICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRvIHRo
ZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFzZWQg
b24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4g
d2lsbAorICAgICAgICBiZSBjcmVhdGVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSByZW5kZXJp
bmdNb2RlIGluIG1hbnkgcGxhY2VzIG9mIHRoZQorICAgICAgICBjb2RlIGFuZCBpbnN0ZWFkIG9m
IGFuZCB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYWxsIHRoZXNlIGRlY2lzaW9ucwor
ICAgICAgICB3aWxsIGJlIG1hZGUgaW4gdGhlIGNvbmNyZXRlIEltYWdlQnVmZmVyQmFja2VuZC4K
KworICAgICAgICBUaGlzIHJlLWZhY3RvcmluZyB3aWxsIGFsbG93IGNyZWF0aW5nIG5ldyB0eXBl
cyBvZiBJbWFnZUJ1ZmZlcnMgYmFja2VkIGJ5CisgICAgICAgIG5ldyBJbWFnZUJ1ZmZlckJhY2tl
bmRzLiBUaGVzZSBuZXcgSW1hZ2VCdWZmZXJCYWNrZW5kcyB3aWxsIGltcGxlbWVudAorICAgICAg
ICBEaXNwbGF5TGlzdCBkcmF3aW5nIGFuZCBzeW5jaHJvbml6ZSByZW1vdGUgcmVuZGVyaW5nLgor
CisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFj
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVS
ZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNy
ZXRlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdl
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6
Q29uY3JldGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVm
ZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmNyZXRlSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRl
cm5hbE1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5w
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5j
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNo
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxT
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2Vu
ZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNv
bHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5k
Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpn
ZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxh
dGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9y
eUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6
dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvSU9TdXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVG
cm9tSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVS
TCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKIDIwMjAtMDItMTggIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0dXJuIGFuZCB0YWtlIEltYWdl
RGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCAwZmFiNjIwNWVjMjkzODg4MjQwMWZhNGJiN2RmNTE0YTU5MDQzMWRl
Li4xMGNiOTkxMTEyMDIyZGExZWJlMTc1YzI2OTZmMzBmYmFiNzUyMDA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIwLTAyLTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgZGlmZmVyZW50IGJhY2stZW5kcyBmb3IgSW1h
Z2VCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorCiAyMDIwLTAyLTE3ICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFNlbGVjdGlvbiBjYW5u
b3QgYmUgbW9kaWZpZWQgdmlhIHRleHQgaW50ZXJhY3Rpb24gaW4gc29tZSBhcmVhcyBvZiB0aGUg
Y29tcG9zZSBib2R5IGZpZWxkIGluIEdtYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBmNDgzMmFh
NzE2MzY3ODUxMWQ4NmE0OTQyMDczMzVkNTdlZGYxNjFhLi5lMDgwMGIxZWQyYTMwMzlmN2E3ZmVl
Zjc2NTBiMjA1NzM0ZDVkZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwNDIsNiArMTA0Miw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0xMDkzLDcgKzEw
OTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0
b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiw2ICsxMTI3LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZDE3
NzQzZWQzODQzMDExZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYgKCR7VVNFX0RJUkVDVDJEfSkK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKQEAgLTEzMiw4
ICsxMzEsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNw
cAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Niw5IEBA
IGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggOWFiNDY4
NzM5ZWYxMWZmNjA5Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRiOWI3Zjg4NjZiMTI0MWE4NTU3
OWIyZTYxZjdiYWU1NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1G
VFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTg0LDgg
Kzg0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JY29uV2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3ICsyMDAsNiBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRv
d3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRl
RnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGZlMTFiNzYw
MDhkODdlY2VlN2RlODYwYjBhZWU4MDhiYzVjNTE4MTYuLmZhNjI4NDhhMTExNTY2YjNiZTNiMDdj
ZDNjOTRmY2M0ZDJhNjM0NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yOTEsOCAr
MjkxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNl
UG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAt
NTU2LDcgKzU1OCw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5j
bWFrZQppbmRleCA0ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVmNWMwN2E4ZGM5M2ViLi44YWY3
MDFjNzc3ZmUxNTJlMjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdp
bi5jbWFrZQpAQCAtMTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQzNTJh
MzhhZDlmZWRhNTNkZTRmOTE2MGZlYzRiNDM5YzNiOTgwNjkuLjI0ODBmMmEzZjIyZWUwZDM3NGFj
OTg4MDYwNjIyZjFhZGYyZTcyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4NjksNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
SWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAppbmRleCBhMDVlMDFjZGVmMmNmZjE2YWI4M2M1ZDRmMDYxNmIwY2M1MTZk
ZTQ5Li4wOWRjMTIzYmI3MWFkNjg3YjRiYTk4OGRmMjQ4OTU0ZjE4MjY2MDUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKQEAgLTI5MSw4ICsyOTEsOSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggM2JjZmRmNDQwNTE5MzBjYTlkMDQ5NTE2YzJkMGUwNGRhOGE1ODhlYy4uMjU0ZDU2NGE2
MmI0NTQ0ZWQ1ZDRjNmY2N2I4NmFiMGE0MWE0NDMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1LDggKzY0NSw2IEBACiAJ
CTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1
QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0
NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5
RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5
cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQu
aCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVt
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oICov
OyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk5
MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICovOyB9OwpAQCAtMjEz
Nyw2ICsyMTM1LDcgQEAKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIz
RDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMEND
Njg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkFD
M0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhENzQx
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
Ki87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0Uw
QjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAw
N0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZl
bnQuaCAqLzsgfTsKQEAgLTM0MDgsNyArMzQwNyw2IEBACiAJCUFBN0ZFRUFEMTZBNEU3NEIwMDRD
MEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUE3RkVFQUMxNkE0RTc0QjAwNEMwQzMzIC8qIEpTU3BlZWNoU3lu
dGhlc2lzLmggKi87IH07CiAJCUFBQTcyOEY3MTZEMUQ4QkMwMEQzQkJDNiAvKiBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLmggKi87IH07CiAJCUFBQzA4Q0YzMTVGOTQxRkQwMEYxRTE4OCAv
KiBBY2Nlc3NpYmlsaXR5U1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUFDMDhDRjExNUY5NDFGQzAwRjFFMTg4IC8qIEFjY2Vzc2liaWxpdHlT
VkdSb290LmggKi87IH07Ci0JCUFBRDlEMEI1MjFERkE4MTAwMDFCMTFDNyAvKiBMYXp5TG9hZElt
YWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFBRDlEMEIzMjFERkE4MEUwMDFCMTFDNyAvKiBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBQjIzQTMy
ODA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNBMzI2MDlCQkE3RDAwMDY3
Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oICovOyB9OwogCQlBQjI0N0E2RDBBRkQ2
MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xp
ZGVyLmggKi87IH07CiAJCUFCMzFDOTFFMTBBRTFCOEUwMDBDN0I5MiAvKiBMaW5lQ2xhbXBWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIzMUM5
MUQxMEFFMUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY1NDYsOSArNjU0NCw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE4NCw4ICs5MTc5LDYgQEAKIAkJNjVGRUE4NjgwOTgz
M0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2OTcxMDEwNzFD
NkJFMTU1MDAxOEM3RjEgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2OTcxMDEwODFDNkJFMTU1MDAxOEM3RjEgLyog
QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQUFEOUQwQjEyMURGQTgwQzAwMUIxMUM3IC8qIExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5TG9hZEltYWdlT2JzZXJ2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQUQ5RDBCMzIxREZBODBFMDAx
QjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2QTIyRTg2RjFGMTA0MTg2MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2QTIyRTg3MjFGMTA0MkM0MDBGNTQ2QzMgLyogSW5zcGVjdG9yQ2FudmFzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNhbnZhcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZBNzI3OTg4MUYxNkMyOUIwMDNGMzlCOCAvKiBJbnNwZWN0b3JTaGFkZXJQcm9n
cmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclNoYWRlclBy
b2dyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTIsNiArOTU4NSwxNiBA
QAogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
OTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbmNyZXRlSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQz
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAw
Njg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFp
bnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyMjI1LDYgKzEyMjI4LDggQEAKIAkJQUFDQzgzRDYyMzE2NTY5RTAwRUI2QkY1IC8qIEhU
TUxPckZvcmVpZ25FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MT3JGb3JlaWduRWxlbWVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQ0M4M0Q3MjMxNjU3NkEwMEVCNkJGNSAvKiBK
U0hUTUxPckZvcmVpZ25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9yRm9yZWlnbkVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFDQzgzRDgyMzE2NTc2QjAw
RUI2QkY1IC8qIEpTSFRNTE9yRm9yZWlnbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNIVE1MT3JGb3JlaWduRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFBRDlEMEIxMjFERkE4MEMwMDFCMTFDNyAvKiBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eUxvYWRJbWFnZU9ic2VydmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFEOUQwQjMyMURGQTgwRTAwMUIx
MUM3IC8qIExhenlMb2FkSW1hZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUFFMjdCNzQxNkNCRkMwRDAwNjIzMDQzIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2l6ZXJNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUFFMjdCNzUxNkNCRkMwRDAwNjIzMDQzIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBRTM3NTVEMTc0MjlC
Q0MwMDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjY1LDcgKzEyNjcwLDYgQEAK
IAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhp
Y3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4
RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBT
VkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9u
dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4NDks
OSArMjQ4NTMsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3ND
b250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENG
MTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMzQUMyM0UxRTU0NTAw
OEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBRDIzRTFF
NTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBODIz
RTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
ICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEg
LyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAw
RTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5NDIsNiArMjQ5NDks
NyBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICov
LAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRy
b2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENy
b3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5
IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLApAQCAtMjUwMzksNyArMjUwNDcsOCBAQAogCQkJ
CTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJ
CTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJB
MTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0Qx
MzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyQkFDM0E0MjNF
MTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0E1
MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVB
NzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFG
NTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcw
ODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUwOTYsNiArMjUxMDUsNyBAQAog
CQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQUMzQTYyM0UxNzMyODAw
OEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTMwMjYxLDggKzMw
MjcxLDcgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VG
ODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0
NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1h
Z2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZh
c0Jhc2UuY3BwCmluZGV4IGQyYWQ0MWU4NzFhYzVhMGJjYjRkNjljMTUyNTM0NjM5YTczNjE0NWQu
LjE2MmIyOTQyZjY2NmE5MzI0NjBiMDZlNzZkMDgzNmU0M2MwMTcxNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9DYW52YXNCYXNlLmNwcApAQCAtMTkxLDggKzE5MSw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmCiAgICAgICAgIHJldHVybkJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwg
V1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3Np
emUgIT0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpCi0gICAgICAgIG1fc2l6ZSA9IG1f
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1f
c2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQorICAgICAgICBtX3NpemUgPSBt
X2ltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogCiAgICAgc2l6ZV90IHByZXZpb3VzTWVtb3J5
Q29zdCA9IG1faW1hZ2VCdWZmZXJDb3N0OwogICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gbWVtb3J5
Q29zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA2YTllYzJhOTUzOTA4
MDk3ZTcxYzA2NmY5MTljODdiMTRiYWQ4NGNjLi5mYzZjNWYzY2QwNDYyNjk1NjY4MjJjMDhhNDgy
Y2MzYmQ2YTg4M2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMsNyAr
MTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQKaW5kZXggZjkwZDI0NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1ODMx
OTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgyMWJjYTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMCw3ICszMCwxMCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4
IDQ4MjI0NGE0ZjJiZGNlZGU3Yzg3NGNkMWI1MGVhOTE0YjE0OTlhMjIuLmRkZDVjNmM3MzQ1YTJj
MGQ4YmQ5YThlNGVmYjRlM2NiOTk1ODdjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTE2NSwxMiArMTY1LDcgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGlu
Z09yaWVudGF0aW9uKGNvbnMKICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAgICAgYnVmZmVyLT5j
b250ZXh0KCkuZHJhd05hdGl2ZUltYWdlKGltYWdlLCByZWN0LnNpemUoKSwgcmVjdCwgcmVjdCwg
eyBvcmllbnRhdGlvbiB9KTsKLQotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHJl
dHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwot
I2VsaWYgVVNFKENBSVJPKQotICAgIHJldHVybiBidWZmZXItPm5hdGl2ZUltYWdlKCk7Ci0jZW5k
aWYKIH0KIAogI2lmIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTZiMzFhMWQ5Yzc3
NzkxM2NhYTBkZjk3ZGYyODliMDQzOWFjMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEs
MTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENvbmNyZXRlSW1h
Z2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5
cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cp
OworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb25jcmV0ZUltYWdlQnVmZmVyPihuZXcgQ29u
Y3JldGVJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgYXV0byBi
YWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8Q29uY3JldGVJbWFnZUJ1ZmZlcj4obmV3IENvbmNyZXRlSW1hZ2VCdWZm
ZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENvbmNyZXRl
SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAg
ICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIENv
bmNyZXRlSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBl
KiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgIH0KKworICAgIEFmZmluZVRyYW5z
Zm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5i
YXNlVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpOyB9CisgICAgSW50U2l6ZSBiYWNr
ZW5kU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFja2VuZFNpemUo
KTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCk7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5tZW1vcnlDb3N0KCk7IH0KKyAg
ICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9i
YWNrZW5kLT5leHRlcm5hbE1lbW9yeUNvc3QoKTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4g
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9y
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5k
cmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgfQorCisg
ICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZl
SW1hZ2UoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0lu
dG9OYXRpdmVJbWFnZSgpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFn
ZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJ
bnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25z
dW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhd0NvbnN1
bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKwor
ICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX2JhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB9CisKKyAgICB2b2lk
IHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNl
IGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT50cmFu
c2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9E
YXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9CR1JBRGF0
YSgpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgfQorCisgICAgdm9pZCBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQgPSB7IH0pIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsK
KyAgICAgICAgbV9iYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwg
c3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQt
PnBsYXRmb3JtTGF5ZXIoKTsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0
LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5
QWxwaGEsIGZsaXBZKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+
IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBmM2VlZTkzYTUz
MjVlNTJlYmYzM2ZmZGU2YzZhNjcxNzU4NzU2YzExLi40YTNmYmVhZTllN2NhNmZlMTk5ODJkZDRl
YzkzZDdiZDRlODk5YTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMzcgKzI5LDg0IEBACiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKIHN0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwog
Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwotCiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewot
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAK
KyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwor
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7CisgICAgY2Fz
ZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2Nl
bGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExU
SFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7
CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzY2FsZWRTaXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcg
c2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKKwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxl
ZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBz
Y2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBi
b29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUp
CiB7CkBAIC0xMDUsNDggKzE1MiwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9j
YXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMu
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0geyBJbnRQb2lu
dCgpLCBsb2dpY2FsU2l6ZSgpIH07Ci0gICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCk7Ci0g
ICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvKiBzcmNQ
aXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxP
ZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
dWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVp
bnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAg
dWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAg
ICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICog
MC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNl
dChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dpY2FsUmVj
dCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMg
c2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9u
ZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250
ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKQEAgLTE2Myw1MCArMTc0LDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0
dXJuIGJ1ZmZlcjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRT
aXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRl
KHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpOwotI2VuZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdl
KCk7CiB9CiAKLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQogewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJh
bnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRp
b24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShz
aXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNp
bmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkg
Y29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUg
aW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUg
Y2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJ
dCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBh
bnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgo
KSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3Vt
aW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IElt
YWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwot
fQotI2VuZGlmCi0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdhYmZlMGQxNzExNDA2ZDkw
OGUwMzFkMmY2YTA3MWU0OTBhZjE4YWMuLmEwYjA0YWZlMjdkMzg1ODA4NzY2YWM2YzJiMTczNzUz
ZDQwNTgyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsNTYgKzI3LDE2IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3Mg
SW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdp
bmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAv
LyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAg
RG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBj
b3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAg
IFllcywKLX07Ci0KIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVi
bGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFp
bHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RX
aW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdp
bmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZl
ciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVm
ZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAv
LyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0
aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhl
biBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOwpAQCAtOTIsNzUgKzUyLDU0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBJ
bnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7Ci0jaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsK
LSNlbmRpZgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICAvLyBUaGUgYWN0
dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXpl
JiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQot
ICAgIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKIAotI2lmIFVTRShD
RykgfHwgVVNFKERJUkVDVDJEKQotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0jZWxpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAg
IHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXpl
X3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0Owot
ICAgIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworCisgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZl
ciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVm
ZmVyIGludG8gdGhpcyBuZXcgb25lLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgc3RhdGljIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPik7Ci0jZW5kaWYKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3RhdGljIHZvaWQgZHJhd0Nv
bnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
IAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotI2lmICFVU0UoQ0cpCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0Nv
bG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxz
ZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSk7IH0KLSNlbmRpZgotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50ID0geyB9KTsKLSAgICAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKKworICAgIHZp
cnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSA9
IDA7CiAKICAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRo
b2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAgIC8vIHdpdGgg
dGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0
eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsK
LQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9z
aXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25T
Y2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBp
bnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dz
IHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lm
IFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRv
dyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29s
JiBzdWNjZXNzKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwg
R0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1
ZmZlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9O
YXRpdmVJbWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFn
ZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVlODYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5k
OjpJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fYmFj
a2VuZFNpemUoYmFja2VuZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9u
U2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXpl
ID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0
aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHko
KSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsK
KworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQg
KiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgoKSk7
CisgICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICogYnl0
ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7
CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNyY1Bp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0
ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1
aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWlu
dDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1
aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIElu
dFBvaW50Ojp6ZXJvKCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBz
cmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVs
dGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4
ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorewor
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7CisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JG
b3JtYXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClb
MF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwt
PiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsx
XSA9IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRl
c3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
Y29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWlu
dDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAg
ICBpZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGll
ZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xv
ckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNy
Y1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4
ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsy
XSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJH
QkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAg
IGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4
ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0g
YWxwaGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQ
aXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7
CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxw
aGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNy
Y0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xv
ckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxw
aGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdC
QS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5jdG9y
KShDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+Citz
dGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0
Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9
IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3Jj
Q29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7
CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpj
b3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1
aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAg
aWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQo
c3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAm
JiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBp
eGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3Jj
Q29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9Q
cmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRl
c3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1Jl
ZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lk
KiBkYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdl
RGF0YS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qgc3Jj
UmVjdENsaXBwZWQgPSAgaW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2FsZWQp
OworICAgIEludFJlY3QgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlw
cGVkLnNpemUoKSB9OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAg
ZGVzdFJlY3Quc2V0WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2Fs
ZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOwor
CisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAg
ICAgaW1hZ2VEYXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RS
b3dzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRl
c1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cg
KyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3Jt
YXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29s
b3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxl
ZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2lu
dFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRSZWN0
IHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VE
YXRhLnNpemUoKSB9LCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0gc3Jj
UmVjdENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisKKyAg
ICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RS
ZWN0LngoKSAtIHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAgIHNy
Y1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRl
c1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IDQgKiBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9
IGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVz
UGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygK
KyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
YmFja2VuZENvbG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0
LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWEzYjYzY2RmNzE3OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0
aW9ucy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworY2xh
c3MgSW1hZ2VEYXRhOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5n
U3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29w
eS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZl
Y3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4
X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1
aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFj
a2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXJC
YWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUg
Y2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9n
aWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBi
YWNrZW5kU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAg
IENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQor
CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgp
IGNvbnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQor
ICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNl
KSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KSA9IDA7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVj
dGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJS
b3coKSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAgdmly
dHVhbCBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xv
ckZvcm1hdDo6UkdCQTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRvQmFj
a2VuZENvb3JkaW5hdGVzKFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPFQsIEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFNp
emU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAgICAg
aWYgKG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBsb2dp
Y2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9sb2dp
Y2FsU2l6ZSk7IH07CisgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0
IEludFNpemUmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dpY2Fs
U2l6ZTsKKyAgICBJbnRTaXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVlNWMx
MDI0NDdjNzNhMTJmMWQ2ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShD
QUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGY0NjkwMTE3YjM1ZTk5MWMyYTAyZWM3ZTBjN2U0ZDEzMjViMTU5Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBIQVZFKElPU1VS
RkFDRSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKyNlbGlmIFVT
RShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3Vz
aW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsKKyNlbmRpZgor
CisjaWYgSEFWRShJT1NVUkZBQ0UpCit1c2luZyBBY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcg
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kOworI2VuZGlmCisKK3VzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbmNy
ZXRlSW1hZ2VCdWZmZXI8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBB
Y2NlbGVyYXRlZEltYWdlQnVmZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZElt
YWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYzdhZTJmNWQ3
M2I5MTM4ZDc1NGVkMTJhYTA3OGU3MWFiOTU5NTM0ZS4uM2NmY2U3Mjk1NDIwOWQzMDNhOWY3MjQz
MmZiYjRiNjM5ZDRiNDIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRy
YXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEltYWdlQnVm
ZmVyJgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5ZXJJbWFnZS5pbnRlcm5h
bFNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmJhY2tlbmRTaXpl
KCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSBy
ZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0
aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVk
IGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFO
R0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNz
Q29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGY5NmZjOTViYjZkZTVlZDJjZjNkYTZlMTI5ZTFhNDMy
YzcyNGM3YWQuLjg1M2NkMDJiYjhjZTkzOTAwNmJiZTM0ZTQwOTc5YjhmMzRkNGZjZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1h
Z2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAotICAgIHBhaW50VG9DYW52YXMo
cGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBp
bWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAg
IHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKICAgICAv
LyBGSVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRl
eCA2ODk4NGQ1NjRhOTI5MjdkNDI4ZmNlYmI4MGUxNGFhY2Y5YWZhNGVmLi5jZDhmMWRiMzU5ZTI2
YTAxYTJjODViYmQyMmVhMzY4ZTZhYzg4OTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3
NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3
U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
SW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBj
b25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRl
KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsK
KyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRl
eHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4p
LCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRv
d1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhh
LCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZv
aWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFk
b3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdT
aGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0K
IH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIHNh
dmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdl
Lm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZm
ZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4s
IGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3Vy
Y2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJlMTRh
ZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAyZGY1
N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRm
b3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0OTg2ZTg3NzQ2NmI4ZjA3
Nzg2ZmJkMWJmMzk0NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYyMDJjZjExMjU5NWJjODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDE0LDcgKzQxNCw3
IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8gc3Vy
ZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZm
ZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0
UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGIxM2JiNjdjODcwYjcwMzNjMDAwYzMxYmQyZjI1OWJkN2JkODJmOWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykK
LQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
Ci0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRl
eHQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVH
TC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVT
RShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykK
LSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIK
LSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgw
KQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9k
ZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwg
bV90ZXh0dXJlKDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAg
ICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0j
ZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1J
bWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmlu
Z01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNs
aWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9
IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29t
cG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRv
clRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAg
ICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlm
Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVm
ZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRl
eHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsK
LSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwot
Ci0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3Jl
YXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09M
T1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2Nv
bXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBv
c2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwotfQotCi0jaWYgIVVTRShOSUNP
U0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IEltYWdlQnVmZmVy
RGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5j
b3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAg
ICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgICAgIGF1dG8gcHJveHlPcGVy
YXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9s
ZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIo
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9y
VGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7
Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBwcm94eU9wZXJhdGlv
bihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNv
c2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgICAgICBwcm94eU9wZXJhdGlv
bigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSXQgd291
bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2Ug
ZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcwotICAgIC8vIHdoZXJlIG9u
ZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3Vz
IGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAgICAvLyBpbnRvIHRoZSBjb21w
b3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9y
Q3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJv
X3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNv
bnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19T
VEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICBjYWlyb19wYWludChjci5n
ZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDYWlyb0dMU3VyZmFjZSgp
Ci17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJz
ZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Ci0g
ICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAgIGdsR2VuVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotCi0g
ICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250
ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2Ug
cGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgotICAgIGNhaXJvX2dsX2Rldmlj
ZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0gICAgbV9zdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19D
T05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLX0KLSNlbmRpZgot
Ci1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvcHkoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0gICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Iu
Z2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLQotICAg
IHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJv
U3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlm
IChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAg
cmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzdXJmYWNlID0gY2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGlt
YWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChw
aXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCi0g
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7Ci0K
LSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6
bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEubV9zdXJmYWNlLmdldCgp
OwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50
U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAg
ICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0g
ZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9yLgotCi0gICAgZmxvYXQgc2Nh
bGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAg
ZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdo
dCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dl
ciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
aXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEubV9z
aXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZGF0YS5t
X3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSAgICAgICAg
bV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhLm1fc3Vy
ZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBD
QUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmluZ01vZGUg
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBm
YWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2RhdGEu
bV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCi0jZWxzZQot
ICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9r
ZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3Jt
YXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7
Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAoIXRyeUZhc3RaZXJvZWRN
YWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWlyb19zdXJmYWNlX3NldF91
c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZh
Y2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9KTsKLSAgICB9Ci0KLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNyZWF0ZSB3aWxsIG5vdGlj
ZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0KLSAgICBjYWlyb1N1cmZh
Y2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2Fs
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLSAgICBtX2RhdGEubV9w
bGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0YS5tX2NvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVh
dGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAgIHN1Y2Nlc3MgPSB0cnVl
OwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNS
R0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7Ci19Ci0KLVJlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikK
LXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNlIGluaGVyaXRzIHN1cmZh
Y2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJh
Y2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJv
SW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQotICAgIC8vIEJpdG1hcElt
YWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAg
ICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihtX2Rh
dGEubV9zdXJmYWNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFn
ZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25D
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVz
dGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0
aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWly
b1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlv
bkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0
IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRl
KCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVz
dGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChj
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1
dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigq
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09
IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4g
bGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUgY29sb3Igc3BhY2UgY29u
dmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lN
QUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBp
bnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kp
IHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVk
Kj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1f
c2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyAr
IHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJs
ZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUoKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQot
ewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9n
ZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwg
d2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndp
c2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5
cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsK
LSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBh
ZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVs
dGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxJbWFnZURhdGE+IGdldERhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QsIGNvbnN0IEltYWdl
QnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgbG9n
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlY3Quc2l6ZSgpKTsKLSAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGlu
ZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3Qu
eCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHkg
PSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0LmhlaWdodCgpLCBlbmR5
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdodCgp
KQotICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAg
ICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAg
ICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsK
LSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkg
PSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewot
ICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0K
LSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdo
dCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5n
IHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1D
b2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUg
Zm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJl
Y3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fp
cm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2Nh
bGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAg
b3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1f
c3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9u
IGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9n
aWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNh
bFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNl
LmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRS
ZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcGl4
ZWxBcnJheS0+ZGF0YSgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBk
YXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3Jp
Z2lueSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewot
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4
ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBD
b2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNlIG9uZQotICAgICAgICAg
ICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAg
ICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAg
ICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAg
ICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSByZWQ7Ci0gICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZm
ZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0g
c3JjUmVjdDsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBzcmNSZWN0OwotICAgIGJh
Y2tpbmdTdG9yZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIAotICAgIGlmIChv
dXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9s
b2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiBnZXREYXRhPEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2lj
YWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQotewotICAgIEludFJl
Y3QgbG9naWNhbFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFBvaW50IGxvZ2ljYWxE
ZXN0UG9pbnQgPSBkZXN0UG9pbnQ7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBz
b3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGltYWdlRGF0YS5zaXpl
KCk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwotCi0gICAgc2Nh
bGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgc2NhbGVkRGVzdFBv
aW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQg
ZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAg
aW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJl
Y3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3Np
emUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
bnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWRE
ZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxF
bmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0g
ICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMg
PSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHgg
LSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgp
OwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0
LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dp
Y2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChk
ZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAg
QVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVu
ZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAg
aW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQg
bnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2Fs
RW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1
cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhp
cyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNv
bHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFj
ZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZh
Y2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVz
dHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJm
YWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNv
dXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNS
b3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93
ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsK
LSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4o
cGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAg
ICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9y
KCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlz
IHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAg
ICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
Z3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQg
IDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9w
ZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1
cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVz
dHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQot
ICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAg
ICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1h
Z2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJl
Y3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dp
Y2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2lu
dC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50
OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChl
bmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRh
dGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRh
dGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLSAgICBj
YWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVh
bGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2Ug
dGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0
ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENv
bnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQo
KSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0
dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJn
ZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9k
YXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVy
ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7
Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jl
c29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMg
cmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAg
aWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVS
RV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1
cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0
KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDAp
OwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVy
ZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZm
Ym8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
LSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0o
aW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAg
ICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0MDg5NmJhYWNkODBkOWYx
YzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJv
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNz
ZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNr
aW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFn
ZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpD
YWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JT
cGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFj
ZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdC
IDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBs
aW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4g
YXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
KyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAg
ICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAg
ICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7
CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAg
IH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAg
ICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10g
eworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFy
VG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRh
dGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUo
ZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisK
KyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9f
Z2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVy
biBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVkODhkNWQ3MTZkZWYzYTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNl
bGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7
CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFj
ZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3Rl
ZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKwor
ICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MzYzNzJmOTE5ZTdlY2U4Y2JjNmEyNjNjNDg5Yzk5ZTBlODc2MjQzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNp
bmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYK
KyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5j
bHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHku
aCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJmYWNlKGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5n
ZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNr
ZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogY29udGV4dCA9IFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29u
dGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gV2Ug
bXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8g
Q2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBz
dXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0
dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisK
KyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworCisgICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIGJhY2tlbmRTaXpl
LndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdl
IHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBjYWlyb19nbF9kZXZp
Y2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1dG8gc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJ
Uk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFj
a2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFj
ZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJlKQorICAgIDog
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwgbV90
ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVT
RShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpj
cmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3Rv
cnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgorfQor
CitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYK
KworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmco
KS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1f
dGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkK
KyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5k
aWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJl
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4w
LCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0
aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhh
IHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7
CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAg
IGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVS
RV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgp
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6
OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBk
ZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRl
cm5hbGZvcm1hdCwgMCwgMCwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhl
aWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOwor
ICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIHJldHVybiB0cnVlOworfQor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCit7CisgICAgYXV0byogY29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNp
emUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgbV9j
b21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90
ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEs
IG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6
ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1f
Y29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQorewor
ICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50
KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRlQ29t
cG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAg
ICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2so
KSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9iYWNr
ZW5kU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOworICAgICAg
ICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNh
c3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVy
LT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxh
dGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIEl0IHdvdWxkIGJlIGdy
ZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGgg
d2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3aGVyZSBvbmUgZnJhbWUg
dXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4g
U28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBi
dWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgp
LCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBv
c2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19wYWludCht
X2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQor
ICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQor
I2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnBhaW50VG9UZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8vIENhaXJvIG1heSBjaGFu
Z2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sg
YWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBH
TENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5n
ZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdU
ZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9iYWNrZW5k
U2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jZGYwZmFlN2UyYzM0OWUyMTY0MTk4NDU1ZDQxOGMzY2FiNjc0
N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
Q0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAgIDogcHVibGljIFBsYXRm
b3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAg
ICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKworICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGNvcHlUb1BsYXRm
b3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25U
ZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9p
ZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5k
aWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXll
clByb3h5OworI2VuZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlOworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1f
Y29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07Cisj
ZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBiZjczNGMwYWM2NDFhZWRjZTBiMGI5Y2M3ODBmYTZm
NDk3MDg0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJf
ZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9
IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJh
Y2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQg
c3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYg
KCF0cnlGYXN0WmVyb2VkTWFsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRW
YWx1ZShzdXJmYWNlRGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBz
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwor
ICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNl
RGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUo
ZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
V1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKQor
eworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0
X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5z
Zm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJs
ZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4Kysp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBD
b2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAg
ICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgp
XSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5n
ZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTYwMDM3OTRmZGFhOTQ3MzJiNjE1NTdjNDFlODQ0MjMxYTk4YTcwMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4mJik7CisKKyAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKSBvdmVycmlkZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
ZDE1ZjBiYTIyMjEwZjdhMTc0YmE3MDdlZDI2MTgwYzE4ZmVhNGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9y
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKyNp
ZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwg
YmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICptX2NvbnRleHQ7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAg
ICBjYXNlIENvcHlCYWNraW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAg
ICAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwor
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQo
KSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1
cm4gY29weTsKKyAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAg
IEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNh
aXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9y
ZTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7Cisg
ICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworfQorCitWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QK
K3sKKyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90
PiBpbWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBl
bmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkg
KgorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkp
OworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0
YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRD
b29yZGluYXRlcyhzcmNSZWN0KTsKKyAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0
eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCBkZXN0UG9pbnRTY2FsZWQueCgpLCBkZXN0UG9p
bnRTY2FsZWQueSgpLCBzcmNSZWN0U2NhbGVkLndpZHRoKCksIHNyY1JlY3RTY2FsZWQuaGVpZ2h0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM5NDlmZjM3Mzc0ODgyNDU1MWUzZTRlZmU1YTJiNGQ2NjkzZjA1NTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIHsKK3B1YmxpYzoKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1h
Z2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJik7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0lt
YWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsK
KworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOworICAgIFBs
YXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFD
YWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTYxZTM1OTk0NmVmNGJhZDY5
MjNmZGJmNzU2NGEyZTM5Zjc2OWM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyRGF0YUNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlQnVm
ZmVyRGF0YUNhaXJvX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotCi0jaWYgVVNF
KENBSVJPKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29zaWFDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotcHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShj
b25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJE
YXRhKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwotICAgIEludFNpemUgbV9zaXplOwotICAgIFJl
bmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgdm9pZCBzd2FwQnVmZmVy
c0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBvc2l0b3JT
dXJmYWNlOwotICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmU7Ci0gICAgUmVmUHRyPGNh
aXJvX3Q+IG1fY29tcG9zaXRvckNyOwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVmUHRyPE5p
Y29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxzZQotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKLSNl
bmRpZgotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0gICAgdWludDMyX3QgbV90ZXh0dXJlOwot
I2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCi0KLSNlbmRpZiAvLyBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTY0YzY5OTUxOTdlY2IzZDUzZWRkMzJiYWUwZDBlNDVm
YmY3NDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5o
PgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNs
dWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNs
dWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0
ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNk
ZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVy
KTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwot
Ci1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7
Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENH
Qml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAg
ICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250
ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQp
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBz
UkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3Bh
Y2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1h
Z2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwg
bnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9u
IHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxl
ZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENH
Q29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2lj
YWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17
Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUu
Ci0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndp
ZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAq
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5
IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgs
IHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAg
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsK
LSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAg
ICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7
Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0
KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2Rh
dGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNv
cmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4o
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93Owot
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXpl
ID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+
IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgp
KQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VS
VChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwotI2VuZGlm
Ci0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNp
emUgdXNlckJvdW5kcyA9IEZsb2F0U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2Fm
ZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0g
ICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9k
YXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAg
ICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRl
cmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7
Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxv
YyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5k
YXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykp
OwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZy
ZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVh
dGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFn
ZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihj
Z0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdl
Q29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0K
LUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0
KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVu
dGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hh
dCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2Vz
cyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2lu
Zy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhl
IHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlz
IEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ut
PnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJz
LgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkg
YmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8g
YmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAv
LyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2Ug
Y2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVm
ZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0
ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlm
IChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5
dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFn
ZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2Rh
dGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
Km1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBj
b25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7
Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZO
ZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAg
IGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5k
cy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1z
dGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRT
aXplIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVy
bmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhl
aWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJs
ZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2Ug
PSBsb2dpY2FsU2l6ZTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCks
IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92
ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAg
IGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29w
eUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBsb2dpY2FsU2l6ZSgpLCBpbnRlcm5hbFNp
emUoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCk7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlv
blNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2Rh
dGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9J
bWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVy
KSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IElt
YWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcElu
Zm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5n
U3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZh
Y2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAg
aW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQu
aXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1
cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAg
IAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
LSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVw
IGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVj
dDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRl
c3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAg
YWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNv
cHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+
IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAg
ICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0K
LQotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHJldHVybiBt
X2RhdGEuZ2V0RGF0YShvdXRwdXRGb3JtYXQsIHNjYWxlZFNyY1JlY3QsIGludGVybmFsU2l6ZSgp
LCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBkZXN0UG9pbnQ7
Ci0gICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgc2NhbGVk
RGVzdFBvaW50LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIG1fZGF0YS5wdXREYXRh
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNjYWxlZFNyY1JlY3QsIHNjYWxlZERlc3RQb2ludCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAK
LSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0
IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYg
Zm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAg
ICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRh
dGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0
ZWRQaXhlbEFycmF5OwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7
Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2
ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCB7IEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkgfSk7Ci0gICAgICAgIGlmICghaW1hZ2VE
YXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFT
aXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7
Ci0gICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0
YSgpKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcm90ZWN0ZWRQaXhl
bEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKLQotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcm90ZWN0ZWRQ
aXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghZGF0
YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2Vy
U3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQo
KSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShj
b250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2Rl
SW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQot
Ci1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAg
IGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250
ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJhNzliM2ViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUJpdG1h
cCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0
KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFj
ZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJl
dHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkp
OworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNpemUuaGVpZ2h0KCkpOwor
ICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsK
K30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSkKK3sK
KyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJl
dHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1h
a2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKSk7Cisg
ICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJ
bWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBj
b25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3Bw
ZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAs
IGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNh
bFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgp
LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAg
ICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50
Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkp
OworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNj
YWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVs
c2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1v
dmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29sdXRpb25TY2Fs
ZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9y
ZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9
IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisK
KyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNv
bnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAg
ICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Cisg
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChh
dXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJh
Y2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7
Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVU
eXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVU
eXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7CisK
KyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBF
R3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNv
bXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0
KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+
ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4ZWxBcnJheS0+
Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1h
Z2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChw
cm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwg
cHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAg
ICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJyYXlEaW1lbnNpb25zLndp
ZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAzMiwgNCAqIHBpeGVsQXJy
YXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVP
cmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0
KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5
QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBh
dXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6
ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgp
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NH
QmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCku
aGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENH
UmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdo
dCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRh
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsK
KyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNm
RGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1v
dmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEu
Z2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVz
b2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsK
KyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGlj
IGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1
ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndp
ZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2
SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0
YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVm
ZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChz
cmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFs
cGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xv
ckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0Nv
bG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAh
PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sK
KyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9y
bWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
cHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2
SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2Nl
bGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9y
bWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNkNDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBX
RUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJh
Y2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xv
clNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAg
ICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4g
dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
dm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3Jj
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0
IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTM4M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQzNmQzODA3ZTg0NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY29uc3Rl
eHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQorY29u
c3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNp
emUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5
dGVzUGVyUm93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RD
YWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGJhY2tlbmRT
aXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXpl
LmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBEZWZhdWx0Qml0bWFwSW5m
bykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0
KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdl
RGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVy
KSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
aWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAg
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JT
cGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0V2luZG93KTsKK30KKwor
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwg
UmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
CisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVBy
b3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VS
VChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29u
dGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9j
b250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAorewor
ICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgor
ICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6
CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2Jh
Y2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1Bl
clJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERl
ZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRy
dWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisKK1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbV9kYXRh
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhZjY2MmExYzc2YThiODli
Nzc2ZjIzOTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93
Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3Zp
ZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgorCisg
ICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRh
UHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjBhZDA5OWM3MTZh
ZWZmZWIwNDFiN2RkODg1MDE2ZWI2MTRlZGE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENHKQot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNl
bmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUg
PHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdC
MzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1p
emVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlw
bHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZl
ciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEp
OwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9T
dXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50
OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19B
UkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMg
dm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25z
dCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNT
RVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JB
PC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11
dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwot
fQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVy
RGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNp
emVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VS
VChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
LSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNy
Yy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQot
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVz
dC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBk
ZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
b3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
fQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwg
ZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJh
bnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRo
LCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVjdC5zaXplKCkpOwotICAgIGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHQg
PyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkg
PCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8
IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBwaXhlbEFycmF5LT56
ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRl
c3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYg
KG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4
ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0
ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwot
ICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0g
c2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54Owot
ICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAg
ICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmlnaW55IDwg
MCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55
OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+
KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVu
ZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWln
aHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0g
ICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHBpeGVsQXJy
YXktPmRhdGEoKSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAot
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAg
Ci0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQo
KTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRh
ID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAg
ICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWln
aHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVT
RV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7
Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlm
ICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgp
OyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNF
X0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBh
cyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBz
cmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3Jj
Um93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNS
b3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
I2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXgg
KyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3Nb
YmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNy
Y1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0g
c3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0
KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAg
ICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3Jj
Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3
aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQo
KTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5k
YXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRl
c3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAg
ICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAg
ICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAg
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1
dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpwdXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBB
U1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBv
cmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVz
dHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNh
ZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhY
KCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQo
KSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJj
ZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0K
LSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lnko
KSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0
eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJl
Y3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5z
YWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0g
c291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVz
dHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBpbWFnZURhdGEu
c2l6ZSgpLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IGltYWdlRGF0YS5k
YXRhKCktPmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCku
dW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAg
ICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVy
Um93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlm
IChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndp
ZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0
LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAg
ICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlm
Ci0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkg
ewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAg
ICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1
ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
KHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2Rl
OjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1Bl
clJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICog
NCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qu
d2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBw
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAg
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJ
bWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHgg
KiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0ZmJmMmFkZTVlODYwZDM0ZTIxM2UxYzQx
MmUxNWJkYWJjNTNmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3Bh
Y2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0Rh
dGFQcm92aWRlclJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIElPU3VyZmFjZTsKLQotc3Ry
dWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLSAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdl
QnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAgIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZv
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8vIE9ubHkgZm9yIGFjY2Vs
ZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBzdXJm
YWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRy
PEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
IGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiN2ZjNjdiOTJjNzFjMDIwZWFiZWI2MzM0OTJi
ZDBmOGQzNmIxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIK
KworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SU9TdXJmYWNlLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2lu
Y2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgYmFja2Vu
ZFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVt
U2l6ZSgpOworICAgIGlmIChiYWNrZW5kU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8
IGJhY2tlbmRTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0
VHlwZShjZ0NvbnRleHQpID09IGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlKQorICAgICAgICByZXR1
cm4gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAg
IHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29udGV4dCk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJl
ZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6
ZSwgYmFja2VuZFNpemUsIGNnQ29sb3JTcGFjZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4
dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAo
IWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVh
clJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNr
ZW5kU2l6ZSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3BhY2Ug
PSBjb250ZXh0Q29sb3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29s
b3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29s
b3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShX
VEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29u
dGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVz
aENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNv
c3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKwor
c2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENvbG9yRm9ybWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAorewor
ICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7Cisg
ICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOwor
fQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFn
ZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRh
KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwg
SU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJl
Y3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5
IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwg
MSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZF
KElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmRkYmJmMjk4NGZhZTgxMDZlZDdjMWY2M2I2NGEyMjBjYjE4MDYyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNl
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlD
b3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3Jt
YXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVm
ODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMy4uMmFhODIzMzJkZTJkMTExYmRjZTFl
MDgwNjM1OTBkY2UyMWI2YzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBA
QCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1Jl
Y3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CiAKLSAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIGRlY29k
ZWRTaXplQ2hhbmdlZChpbnRlcm5hbFNpemUudW5jbGFtcGVkQXJlYSgpICogNCk7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7Cisg
ICAgZGVjb2RlZFNpemVDaGFuZ2VkKGJhY2tlbmRTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwog
fQogCiBJbWFnZURyYXdSZXN1bHQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBj
MjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5
YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1w
b3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJ
bWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxv
Z2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6
bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9T
dXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9
CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShp
bWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rp
b25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBw
aXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25k
UGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDFlMDM1
YTdlZWYyODAzY2Y2NTk5MmQwNDljOWY4YjU1NmJjZWNhZWMuLjkxOGUxOGFmNWUxMmZmOTA0OTQ4
M2E3OGVmMWJhODJkNzM1OGMyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFn
ZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwg
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmlu
dGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFz
KHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwg
aW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRlcmJ1
ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGViYjY3YzY0M2VjYjg5M2E3OTM3ZDgwMjQzNTcxODZjYjE2NDIxY2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFw
SW5mby5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0
aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0Pgotdm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCog
c3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBz
cmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAg
IGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNv
dXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBj
b3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xl
IHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAq
IHkpOwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICog
eTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQb3NpdGlvbiA9IHggKiA0OwotICAgICAgICAgICAgY29u
c3QgdWludDMyX3QqIHNyY1BpeGVsID0gc3JjUm93ICsgeDsKLQotICAgICAgICAgICAgLy8gU29m
dHdhcmUgZmlsdGVycyBleHBlY3QgKFApUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZy
b20gRGlyZWN0MkQncyBQQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgICAgICAgICAgdWludDMy
X3QgYWxwaGEgPSAoKnNyY1BpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1
aW50MzJfdCByZWQgPSAoKnNyY1BpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAg
ICB1aW50MzJfdCBncmVlbiA9ICgqc3JjUGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAg
ICAgICAgdWludDMyX3QgYmx1ZSA9ICgqc3JjUGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAg
ICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJlZDsK
LSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMV0gPSBncmVlbjsKLSAgICAgICAg
ICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJv
d1tieXRlUG9zaXRpb24gKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0
aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNl
LCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0
QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJl
Y3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7
IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndp
ZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0
aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRp
b24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9z
aXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBz
cmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RS
b3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAg
Y29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAg
IGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBz
cmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RT
dHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1Jv
dywgYnl0ZXNQZXJSb3cpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBOb3Rl
OiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRl
IDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci1ib29sIGNvcHlSZWN0RnJv
bVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uKGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0
IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwg
ZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3Vy
Y2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUludFJl
Y3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVyU2l6
ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUu
d2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0Lmxv
Y2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZl
clBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNl
ICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90KiBk
ZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQot
ICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsK
LSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5
ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBk
ZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgeCA9
IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQg
cG9zID0geCAqIDQ7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93W3ggKyAxXTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBzcmNSb3dbeCArIDNdOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3cpICsgeDsKLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8
IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21EYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4mIHJlc3VsdCkgY29uc3QK
LXsKLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLQotICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFwU2l6
ZS53aWR0aDsKLQotICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7Ci0gICAgc2NhbGVkUmVj
dC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgYmFj
a2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2NhbGVkUmVjdCkpIHsKLSAgICAgICAgLy8gUmVxdWVz
dGVkIHJlY3QgaXMgb3V0c2lkZSB0aGUgYnVmZmVyLiBSZXR1cm4gemVyby1maWxsZWQgYnVmZmVy
LgotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwgYmFj
a2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEoKSwg
SW50UG9pbnQoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3Rv
cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSA9PSBiYWNraW5n
U3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBp
ZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVz
LnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVu
c2FmZUdldCgpOwotfQotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhl
IHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0Pgotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWdu
ZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsK
LSAgICBhdXRvKiBwaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURh
dGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAg
ICAgICAgdWludDMyX3QgcGl4ZWwgPSAqcGl4ZWxEYXRhOwotICAgICAgICBzaXplX3QgYnl0ZVBv
c2l0aW9uID0gaSAqIDQ7Ci0KLSAgICAgICAgdWludDMyX3QgYWxwaGEgPSAocGl4ZWwgJiAweEZG
MDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdWludDMyX3QgcmVkID0gKHBpeGVsICYgMHgwMEZGMDAw
MCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90IGdyZWVuID0gKHBpeGVsICYgMHgwMDAwRkYwMCkg
Pj4gODsKLSAgICAgICAgdWludDMyX3QgYmx1ZSA9IChwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0g
ICAgICAgIC8vIChQKVJHQkEgLT4gUEJHUkEKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICpwaXhlbERhdGEgPSAoYWxw
aGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgKytw
aXhlbERhdGE7Ci0gICAgfQotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFs
cmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c2lyZWRGb3JtYXQ+Ci12b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90
KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50
ID0gYnl0ZUNvdW50IC8gNDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHggPSBwaXhlbENvdW50ICogNDsKLQotICAgICAg
ICB1bnNpZ25lZCByZWQgPSBieXRlRGF0YVt4XTsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBi
eXRlRGF0YVt4ICsgMV07Ci0gICAgICAgIHVuc2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsgMl07
Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0gYnl0ZURhdGFbeCArIDNdOwotCi0gICAgICAgIGlm
IChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
IHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQg
PSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdy
ZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBy
ZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICog
MjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSkgKyBpOwotICAgICAgICAqcGl4ZWwg
PSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICB9
Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IEludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShyZWN0LnNpemUoKSk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdCA/IHJlc3Vs
dC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICBpZiAoIXJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGRlc2lyZWRGb3JtYXQpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+
R2V0U2l6ZSgpOwotICAgIEludFNpemUgYml0bWFwU2l6ZShjbGFtcFRvPGludD4ocmF3Qml0bWFw
U2l6ZS53aWR0aCksIGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLmhlaWdodCkpOwotCi0gICAg
aWYgKHJlY3QubG9jYXRpb24oKSA9PSBJbnRQb2ludCgpICYmIHJlY3Quc2l6ZSgpID09IGJpdG1h
cFNpemUpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQnl0ZXMudW5zYWZlR2V0KCkgPT0g
ZGF0YS5zaXplKCkpOwotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT25seSB3YW50IHBhcnQgb2Yg
dGhlIGJpdG1hcC4KLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21EYXRhKHJlY3QsIHJlc3VsdCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoYnl0ZUZvcm1h
dCAhPSBkZXNpcmVkRm9ybWF0KSB7Ci0gICAgICAgIC8vIEluLW1lbW9yeSBkYXRhIGRvZXMgbm90
IG1hdGNoIGRlc2lyZWQgZm9ybWF0LiBOZWVkIHRvIHN3aXp6bGUgdGhlIHJlc3VsdHMuCi0gICAg
ICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1
bHQtPmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5QbGFjZUNoYW5nZVBy
ZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHJl
c3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVk
ZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdAotewotICAgIGlm
IChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYykK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+
R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gcGl4ZWxTaXplLmFyZWE8UmVj
b3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQotICAgIENP
TVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQtPmRldmljZUNvbnRleHQoKTsKLSAgICBBU1NFUlQoISFkMmREZXZpY2VDb250ZXh0KTsKLQot
ICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tlZCBJ
RDJEMUJpdG1hcDEKLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7Ci0gICAgRDJE
MV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBEMkQxOjpCaXRtYXBQcm9w
ZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9O
U19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgIEhSRVNVTFQgaHIg
PSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAocGl4ZWxTaXplLCBudWxscHRyLCBieXRl
c1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXApOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byB0YXJnZXRQ
b3MgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSBEMkQxOjpS
ZWN0VSgwLCAwLCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhlaWdodCgpKTsKLSAgICBo
ciA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0bWFwLmdldCgpLCAm
ZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAgIGhyID0gY3B1Qml0bWFw
LT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0gICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1hcHBlZERhdGEu
Yml0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3Rv
cmUocGl4ZWxTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU29mdHdhcmUg
ZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0
MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKLSAgICAgICAgc3dpenpsZUFuZFBy
ZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KG1hcHBlZERh
dGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUud2lkdGgoKSwgbWFwcGVkRGF0
YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUu
d2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgp
KTsKLQotICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OwotCi0gICAgYml0bWFwQnVmZmVy
U3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLQotICAgIGhyID0gY3B1Qml0bWFwLT5V
bm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2lu
RHJhdygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
dXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQoc291cmNlUmVj
dC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQot
ICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgp
KTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4
LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVH
ZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0
Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBv
aW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0
KCkgPD0gc2l6ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJl
Y3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAg
ICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7
Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51
bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdl
dCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3Qu
bWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQo
KSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VS
ZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLQot
ICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgYXV0byBwaXhlbFNp
emUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndp
ZHRoID49IGltYWdlRGF0YS5zaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNp
emUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWln
aHQgPj0gaW1hZ2VEYXRhLnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNp
emUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFl
bnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG96KiBz
b3VyY2UgPSBpbWFnZURhdGEuZGF0YSgpOwotICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsK
LSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3Ro
KCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3JtYXQpOwotICAgICAgICBp
ZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2UsIHNvdXJjZUZv
cm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYml0bWFwQnVmZmVyU3lu
YyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0KLQotYm9vbCBJbWFnZUJ1
ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0
UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBzb3VyY2VSZWN0
OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRhaW5zKHNvdXJj
ZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RCdWZmZXJQb3Np
dGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChzb3VyY2VGb3JtYXQgPT0g
Ynl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzb3Vy
Y2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6
ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICBpZiAoYnl0ZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgIHJl
dHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3QsIHNvdXJjZVJl
Y3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwg
ZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rl
c3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFj
a2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKQotewotICAgIGlm
IChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYyB8
fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwaXhlbFNpemUg
PSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0g
YmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+
PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAqIHBpeGVsU2l6ZS5oZWln
aHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0YSBpcyBpbiBSR0JBLiBX
ZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRvIGJlIGNvbXBhdGlibGUK
LSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3ZSB1c2UuCi0gICAgaWYg
KGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEgLT4gUEJHUkEKLSAgICBl
bHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBSR0JBIC0+IFBCR1JBCi0K
LSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpICog
NDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIsIGRh
dGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLX0K
LQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRtYXAo
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0YVRvQml0bWFw
SWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gYml0
bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVy
VGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFw
VGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7
Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFw
KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBiaXRtYXApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBj
YW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5Lgot
ICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFw
LT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJp
dG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFw
LT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0gYml0
bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0
aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBz
aXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ29weSB0aGUgYml0cyBm
cm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgotICAgIC8vIFdl
IGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFj
dGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAg
ICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNv
dXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0
aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVB
RCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1h
dCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFw
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdldCgp
LCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVCaXRt
YXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAt
PkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEQyRDFfTUFQ
UEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFw
KEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwotICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFE
ZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFyZ2V0
LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOwot
ICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4
ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwg
RGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOwotICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHNv
dXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljYzQ5M2UxYzJhNWE1NmMy
Y2VhZWY1YzNhMjljOTUwNDVkMWQwNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLWludGVy
ZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotc3RydWN0
IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7
Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotCi0g
ICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIG11dGFibGUgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ5dGVG
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRmb3JtQ29udGV4dDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBjbGFzcyBCaXRtYXBCdWZmZXJTeW5j
IHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9OwotICAgIG11dGFi
bGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVmZmVyU3luYzo6
QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJik7Ci0KLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAg
IGJvb2wgZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmKSBjb25zdDsKLSAgICB2b2lk
IGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIGJvb2wgcmVhZERhdGFGcm9tQml0bWFw
SWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdDsKLSAg
ICBib29sIGNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYsIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25z
dCBJbnRSZWN0JiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKLSAgICB2b2lkIG1hcmtCdWZmZXJPdXRPZlN5bmMoKSB7IGJpdG1hcEJ1ZmZlclN5bmMg
PSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmM7IH0KLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2ZhZjE1ZTQ3YzI5NzI1NjI3NDNmZDcyMTVmZGY1NzVlNGI1MDI5Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2lu
Y2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNs
dWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCByZW5kZXJp
bmdNb2RlLCBudWxscHRyLCAmY29udGV4dCwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRp
bmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29u
dGV4dCgpLnNjYWxlKEZsb2F0U2l6ZShzY2FsZWRTaXplLndpZHRoKCkgLyBzaXplLndpZHRoKCks
IHNjYWxlZFNpemUuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgpKSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXpl
KHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
c3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAg
ZmxvYXQgc2NhbGVkV2lkdGggPSBzdGQ6OmNlaWwocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0
aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBzdGQ6OmNlaWwocmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2Fs
bHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0g
ICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAg
bV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwg
UmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJv
dzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9
IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdy
YXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBD
b250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShtX2xvZ2lj
YWxTaXplLCByZW5kZXJUYXJnZXQsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAoIWJpdG1h
cENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250
ZXh0LT5HZXRCaXRtYXAoJm1fZGF0YS5iaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLnBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlx
dWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0aGlzXSgp
IHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIH0sIFt0
aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKLSAgICB9KTsK
LSAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihtX2RhdGEu
cGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1
ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGltYWdlQ29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSwgbnVsbHB0ciwgbnVsbHB0ciwgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBjb250ZXh0KCkuZmx1c2go
KTsKLX0KLQotc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZO
ZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRt
YXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgRmxvYXRTaXplIGltYWdl
U2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwotCi0g
ICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVp
Z2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBE
aXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKLSAgICAgICAgaWYg
KGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJl
Y3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
SFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdl
LCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0
LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRT
aXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBp
ZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgot
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RG
TW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAg
ICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6
ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9
IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
ID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgc2lua0ludG9OYXRpdmVJ
bWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJh
Y2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIC8vIEZJWE1F
OiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBpbWFnZS4KLSAgICByZXR1cm4g
aW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci19Ci0K
LUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRh
cmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQt
PkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIC8v
IEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBi
YWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KLSAgICBpZiAoY29weUJlaGF2
aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQotICAgICAg
ICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKLQotICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVz
UGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkg
ewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERvbnRDb3B5
QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tp
bmdTdG9yZToKLSAgICAgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25z
ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgICAg
ICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2Rh
dGEuZGF0YS5kYXRhKCksIDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2Uo
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgYXV0
byBjb21wYXRpYmxlQml0bWFwID0gbV9kYXRhLmNvbXBhdGlibGVCaXRtYXAoZGVzdENvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLQotICAgIEZsb2F0U2l6ZSBjdXJy
ZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXApOwotICAgIGlm
IChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwgY3VycmVudEltYWdlU2l6
ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
aWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwg
bmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgIH0KLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0
ID0gc3JjUmVjdDsKLSAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShvdXRwdXRGb3JtYXQsIHNjYWxlZFNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQot
ewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1
c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAg
IEludFJlY3Qgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwotICAgIHNjYWxlZFNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHNjYWxlZERlc3RQb2ludC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpKTsKLX0K
LQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8
ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB7IH07Ci19
Ci0KLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3MGFiZWRm
MGE2MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCisjaW5jbHVkZSA8
ZDJkMV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHdpbmNvZGVjLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFj
a2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOwor
ICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQg
PSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVs
bHB0cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBH
cmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIGF1dG8gYml0bWFw
Q29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoc2l6ZSwg
cmVuZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmICghYml0bWFwQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwOworICAgIEhSRVNV
TFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9
IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCks
IFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwor
ICAgIH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsK
KyAgICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihw
bGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCks
IFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUo
c2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBiaXRtYXApCisgICAgOiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUocGxhdGZvcm1D
b250ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgICwgbV9iaXRt
YXAoV1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4
dDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkK
K3sKKyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJp
dG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1h
Z2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIC8vIEZJWE1FOiBtX2RhdGEu
ZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxl
YWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNr
aW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAgICAgICBjb3B5QmVoYXZpb3Ig
PSBEb250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OworICAgIGlm
IChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKSB7CisgICAgICAgIEQyRDFf
UkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFj
a2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworCisgICAgfQor
CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdl
dCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCit7CisgICAgRmxv
YXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0
U2l6ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6
ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihib3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3Bw
ZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsK
KyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291cmNlUmVj
dCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51
bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCog
Yml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBp
bnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBs
ZW1lbnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAor
eworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisg
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKwor
ICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGlt
YWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5r
SW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAg
Q09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VM
VCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5
SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdl
KSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0
aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIGxvYWRE
YXRhVG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAg
IHJldHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdl
dCgpID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgaWYgKGJp
dG1hcFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0
bWFwOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgm
YmFja2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0g
bV9iaXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCBy
ZXR1cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVk
Qml0bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVh
dGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVE
RUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwg
bnVsbHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJpdG1hcDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJUKHNpemUu
aGVpZ2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKKyAgICBpZiAo
bnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0
IHRhcmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJ
Q0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCisgICAgY29udGV4
dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2
aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CisgICAgaWYg
KCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENP
TVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9Q
RVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9C
SVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcs
IERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNl
Q29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwg
Ynl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRt
YXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAu
Z2V0KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7CisgICAg
aHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRT
b3VyY2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4
dDsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNv
bnRleHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNy
ZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMs
IG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZj
b21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICBy
ZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNv
bHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJp
dG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworCisg
ICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJs
ZUJpdG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFw
LCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGlt
YWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNkYmE3ZWU1ZWVmZjJmNzFhYzM5
Mzk2MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5o
IgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92
ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJv
dGVjdGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdlUHRyIG1fYml0bWFwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01v
Y2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0ZTVjY2QzNzAxYmQuLjMyYmY4
NmJjNmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTU4LDcg
KzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1lcmF0b3IsIGZwc0Rlbm9taW5h
dG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlKCksICZm
cHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VTaXplID0g
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGlt
YWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAgICAgICAgICAgImZvcm1hdCIs
IEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQs
IGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggNjA3NWY2M2UxYzI4MDA3ZjY3N2UyOTM3
YzVjYTdiYzY3OTMzMjAyOC4uZjZhOTU0NTg5ODU4ZTAwZTRlN2I2YTNjMTlmMjJiYWZhNTc2MWQz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0
OjpidWZmZXJGb3JlZ3JvdW5kKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnUK
ICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0
KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7
CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVkSW50U2l6ZShi
b3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZlclNpemUoc3RhdGljX2Nh
c3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5zZm9ybS54U2Nh
bGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC5oZWlnaHQo
KSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKLSAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpKQorICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFn
ZUJ1ZmZlci0+YmFja2VuZFNpemUoKSkKICAgICAgICAgICAgIGltYWdlQnVmZmVyLnJlc2V0KCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHAKaW5kZXggMmUwYTQwNTY1ODllMjQ5MGE1ODVkZjNmYWE4ZDNjNmVmNDExOTJmYi4uNGQ4NTc4
YjFhMzg5MzdkYTViYjliZWM2ZTI0YjFkMGNkNWRmMzE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtODQ2LDcgKzg0Niw3IEBAIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNv
bnN0CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc25h
cHNob3QtPmludGVybmFsU2l6ZSgpLCB7IH0pOworICAgIGF1dG8gc2hhcmVkU25hcHNob3QgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+YmFja2VuZFNpemUoKSwg
eyB9KTsKICAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391114</attachid>
            <date>2020-02-18 16:08:36 -0800</date>
            <delta_ts>2020-02-18 17:12:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207048-20200218160835.patch</filename>
            <type>text/plain</type>
            <size>306483</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlNWEzYjEzZTk4NGEy
MGFjZTc1ZWY5MDljMzUwMDExZjgwMWViNy4uYmM1OTljNzc4M2E5NDkwNTE4YTU5MTUxYzZkOWYw
NTVjMDJhYTczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNCBAQAorMjAyMC0wMi0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUgcmUtZmFjdG9yZWQg
dG8gZGVjb3VwbGUgdGhlIHBsYXRmb3JtIHNwZWNpZmljcyBhbmQKKyAgICAgICAgdGhlIGJhY2st
ZW5kIGRldGFpbHMgZnJvbSB0aGUgaW50ZXJmYWNlICJJbWFnZUJ1ZmZlciIuCisKKyAgICAgICAg
QSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQgd2lsbCBhZGRlZCB0
byBhbGxvdyBjb2RlCisgICAgICAgIHNoYXJpbmcgYW5kIHRvIHNwbGl0IHRoZSBjb2RlIGFjY29y
ZGluZyB0byB0aGUgcGxhdGZvcm0gYW5kIHRoZSBiYWNrLWVuZAorICAgICAgICBkZXRhaWxzLgor
CisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwgYmUga2VwdCBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVz
dCBvZiB0aGUgY29kZSBidXQgZGlmZmVyZW50CisgICAgICAgIGJhY2stZW5kcyB3aWxsIGJlIGNy
ZWF0ZWQuIENvbmNyZXRlSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAorICAg
ICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRvIHRo
ZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFzZWQg
b24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4g
d2lsbAorICAgICAgICBiZSBjcmVhdGVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSByZW5kZXJp
bmdNb2RlIGluIG1hbnkgcGxhY2VzIG9mIHRoZQorICAgICAgICBjb2RlIGFuZCBpbnN0ZWFkIG9m
IGFuZCB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYWxsIHRoZXNlIGRlY2lzaW9ucwor
ICAgICAgICB3aWxsIGJlIG1hZGUgaW4gdGhlIGNvbmNyZXRlIEltYWdlQnVmZmVyQmFja2VuZC4K
KworICAgICAgICBUaGlzIHJlLWZhY3RvcmluZyB3aWxsIGFsbG93IGNyZWF0aW5nIG5ldyB0eXBl
cyBvZiBJbWFnZUJ1ZmZlcnMgYmFja2VkIGJ5CisgICAgICAgIG5ldyBJbWFnZUJ1ZmZlckJhY2tl
bmRzLiBUaGVzZSBuZXcgSW1hZ2VCdWZmZXJCYWNrZW5kcyB3aWxsIGltcGxlbWVudAorICAgICAg
ICBEaXNwbGF5TGlzdCBkcmF3aW5nIGFuZCBzeW5jaHJvbml6ZSByZW1vdGUgcmVuZGVyaW5nLgor
CisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFj
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVS
ZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNy
ZXRlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdl
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6
Q29uY3JldGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVm
ZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmNyZXRlSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRl
cm5hbE1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5w
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5j
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNo
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxT
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2Vu
ZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNv
bHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5k
Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpn
ZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxh
dGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9y
eUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6
dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvSU9TdXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVG
cm9tSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVS
TCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKIDIwMjAtMDItMTggIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEFzayB0aGUgRWRpdG9yQ2xpZW50IHdoZXRo
ZXIgdG8gcmV2ZWFsIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhZnRlciBpbnNlcnRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggNGIxZTM2NjAyMjNmZTM0MTg1YTBjNTBhN2IzMzZlZjA2YzhmMzIzNS4uODNlNzI3ZWNi
ZDIxODA1NGVhOTM0NzMzOTdhYTk0NTRlMjUwZTVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAyMC0wMi0xOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIEFsbG93IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNl
bGVjdGlvblNuYXBzaG90IGNvbnN0KToKKwogMjAyMC0wMi0xOCAgRGFuaWVsIEJhdGVzICA8ZGFi
YXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQXNrIHRoZSBFZGl0b3JDbGllbnQgd2hldGhlciB0
byByZXZlYWwgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFmdGVyIGluc2VydGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggZWQwN2IwMzJlMzdiYmNhZWU1NDljYTE5MzRkMGJkMmQ5NjkxZDcwNi4uNzQx
Y2YyNzJkYWExOThiODc2Nzg4YmE1ZjhhYzJjNzUzMWMzZjFhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xMDQyLDYgKzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclNwYWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGVj
b2RpbmdPcHRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0
b3IuaApAQCAtMTA5Myw3ICsxMDk0LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMjYsNiArMTEyNyw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
TGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UZXh0VHJhY2suaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMw
MTdiZDBmM2NmOTQwZC4uNWQxNzc0M2VkMzg0MzAxMWZhODZjZTUxMWJlOTI5MzMwOTkyOTJlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC04Myw4ICs4Myw3IEBAIGlm
ICgke1VTRV9ESVJFQ1QyRH0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVu
dERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xh
eWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
RGVjb2RlckRpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VE
aXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGly
ZWN0MkQuY3BwCkBAIC0xMzIsOCArMTMxLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAK
QEAgLTE3Niw3ICsxNzYsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5o
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDlhYjQ2ODczOWVmMTFmZjYwOWI5NjI5Mjg4YmIwMWIxNmRhNzAyYWEuLmY0
YjliN2Y4ODY2YjEyNDFhODU1NzliMmU2MWY3YmFlNTQzZDg3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC04NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJl
Y3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCkBAIC0yMDEs
NyArMjAwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCBmZTExYjc2MDA4ZDg3ZWNlZTdkZTg2MGIwYWVlODA4YmM1YzUxODE2Li5mYTYy
ODQ4YTExMTU2NmIzYmUzYjA3Y2QzYzk0ZmNjNGQyYTYzNDZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtMjkxLDggKzI5MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKQEAgLTU1Niw3ICs1NTgsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNGYzMDcxNTliN2VkODA2ZWI4MTk1MmJiYTQ1
ZjVjMDdhOGRjOTNlYi4uOGFmNzAxYzc3N2ZlMTUyZTIzMTZjYTUwMDA0M2FkOTcxYWNiZjFhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExOSw3ICsxMTksNiBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRElCUGl4ZWxEYXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVl
bkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJv
bGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5X
aW5kb3cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA0MzUyYTM4YWQ5ZmVkYTUzZGU0ZjkxNjBmZWM0YjQzOWMzYjk4MDY5Li4y
NDgwZjJhM2YyMmVlMGQzNzRhYzk4ODA2MDYyMmYxYWRmMmU3MjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzdjMTYzY2E0NzQzMjljZTU4
ODcyNDUzYmRlNjVhYWM0ZDUyM2IwMy4uNGEwOTJkODhmZjhlYzAyYzM4YzI5ODg5OTc0ZWM5YTI5
Y2EzMGQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOTEsOCArMjkxLDkgQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYyMGQ1MmY1ZjI5MDM1ODVlNGY4ZmJlODg5OWE2MGIy
NDQxOTdlN2MuLjc4YzgzN2E4Yzg0OTVmZDEzYmM5YzcxYWZlZmZmZjFjY2VlNjYwZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2
QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5
RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5
RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAv
KiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEds
eXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpT
U1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1l
bnQuaCAqLzsgfTsKQEAgLTIxMzcsNiArMjEzNSw3IEBACiAJCTcyNEVFNTUxMURDODBEODQwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJB
QzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAw
RUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVs
aW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJ
CTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZD
MEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC02NTQ2LDkgKzY1NDUsNiBAQAogCQky
MjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnRSZWdpb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAwMDlEMEQw
RSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNDQy
QkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdBbHRH
bHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI5
MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTAsNiArOTU4NiwxNiBAQAogCQk3MjdBRkVEMzFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhU
c1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYw
MENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNDIzRTE3
MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E2MjNFMTczMjgwMDhE
NzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbmNyZXRlSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3JldGVJbWFnZUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQjIzRTFFNTQ0
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdl
UGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNF
WFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQy
RjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjY1LDcgKzEy
NjcxLDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUg
LyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3Jh
cGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgx
OEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEw
QjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0
MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYy
QTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjQ4NTMsOSArMjQ4NTgsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyog
R3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyog
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYw
IC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMw
QjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1
NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMzQUMy
M0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJB
QzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3
MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
ICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAv
KiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0
MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIy
MTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5NDYs
NiArMjQ5NTQsNyBAQAogCQkJCTBGRTZDNzZDMUZCRkI3QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxp
dGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0NUFFREYwMDZENzEwNSAvKiBDb21wbGV4
VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2RjAwMjYz
NjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJNEI3QUU0OTUyMTc3QjYz
RTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLApAQCAtMjUwNDMsNyArMjUwNTIs
OCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5o
ICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8s
CiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJ
MjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcy
QkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJ
CQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlD
RDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1
NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUxMDAsNiArMjUx
MTAsNyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmgg
Ki8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJ
CUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQUMzQTYy
M0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2
MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlE
QjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkw
NzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI5
NjcwLDYgKzI5NjgxLDcgQEAKIAkJCQlBODE4NUY0MDA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg1RjNEMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1
bWVudEZyYWdtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDkyRjUxMzIyNjBGRkVFMDBGODdC
QjMgLyogRG9jdW1lbnRGdWxsc2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTgyNkJGMjIz
RkI1OTc3MDBCOTIyQjEgLyogRG9jdW1lbnRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTZEMzczNjBBREJBNURFMDBBNDU1NEQgLyogRG9jdW1lbnRMb2FkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUVEMkJBODNDMDlBMjRCOTEwMDZDMEFDNCAvKiBEb2N1bWVudE1hcmtlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI2NCw4ICszMDI3Niw3IEBACiAJ
CQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEx
MEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1
IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYz
MThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNS
b290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDU0MCw3ICszMDU1MSw2IEBACiAJCQkJ
OTQ3OTQ5MzgxRTA0NTlGQTAwMDE4RDg1IC8qIEpTRGVwcmVjYXRlZENTU09NVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk0Nzk0OTNBMUUwNDU5RkEwMDAxOEQ4NSAvKiBKU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMw
MkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxODI2QkYy
MjNGQjU5NzcwMEI5MjJCMSAvKiBEb2N1bWVudElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTU5QTg2MDA4MTE5REFGQTEwMERFRjFFRiAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1OUREQzgzMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3Vt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERBOTRDMjE5Njg3QUE1MDA0NTMwMjkgLyogSlNE
b2N1bWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNw
cAppbmRleCBkMmFkNDFlODcxYWM1YTBiY2I0ZDY5YzE1MjUzNDYzOWE3MzYxNDVkLi4xNjJiMjk0
MmY2NjZhOTMyNDYwYjA2ZTc2ZDA4MzZlNDNjMDE3MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFz
QmFzZS5jcHAKQEAgLTE5MSw4ICsxOTEsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZgogICAg
ICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUo
YnVmZmVyKSk7CiAgICAgfQogCi0gICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1f
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpKQotICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0g
bV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSkKKyAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1
ZmZlci0+YmFja2VuZFNpemUoKTsKIAogICAgIHNpemVfdCBwcmV2aW91c01lbW9yeUNvc3QgPSBt
X2ltYWdlQnVmZmVyQ29zdDsKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggNmE5ZWMyYTk1MzkwODA5N2U3MWMw
NjZmOTE5Yzg3YjE0YmFkODRjYy4uZmM2YzVmM2NkMDQ2MjY5NTY2ODIyYzA4YTQ4MmNjM2JkNmE4
ODNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJEYXRhQ2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0CmluZGV4IGY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3MjI0MGNmMjAyNTgzMTkyYzQuLjZm
YTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAsMTAgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0ODIyNDRh
NGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkxNGIxNDk5YTIyLi5kZGQ1YzZjNzM0NWEyYzBkOGJkOWE4
ZTRlZmI0ZTNjYjk5NTg3YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0xNjUsMTIgKzE2NSw3IEBAIE5hdGl2ZUltYWdlUHRy
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZVJlc3BlY3RpbmdPcmllbnRh
dGlvbihjb25zCiAgICAgICAgIHJldHVybiBpbWFnZTsKIAogICAgIGJ1ZmZlci0+Y29udGV4dCgp
LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgcmVjdC5zaXplKCksIHJlY3QsIHJlY3QsIHsgb3JpZW50
YXRpb24gfSk7Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKICAgICByZXR1cm4gSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsKLSNlbGlmIFVT
RShDQUlSTykKLSAgICByZXR1cm4gYnVmZmVyLT5uYXRpdmVJbWFnZSgpOwotI2VuZGlmCiB9CiAK
ICNpZiBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU2YjMxYTFkOWM3Nzc5MTNjYWEw
ZGY5N2RmMjg5YjA0MzlhYzM3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDE2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBDb25jcmV0ZUltYWdlQnVmZmVy
IDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVh
dGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAg
ICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3JldGVJbWFnZUJ1ZmZlcj4obmV3IENvbmNyZXRlSW1h
Z2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9
IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGlmICghYmFja2Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPENvbmNyZXRlSW1hZ2VCdWZmZXI+KG5ldyBDb25jcmV0ZUltYWdlQnVmZmVyKFdURk1v
dmUoYmFja2VuZCkpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBDb25jcmV0ZUltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1f
YmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBDb25jcmV0ZUlt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9i
YWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFz
ZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRyYW5z
Zm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fYmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2VuZFNpemUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0KKyAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tl
bmQtPnJlc29sdXRpb25TY2FsZSgpOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29zdCgpOyB9CisgICAgc2l6ZV90
IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+
ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZl
SW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUlt
YWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+ZHJhdyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIH0KKworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZl
SW1hZ2UoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0ltYWdl
KHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgfQorCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9iYWNr
ZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29s
b3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29s
b3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgfQorCisgICAgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVSTCht
aW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0geyB9KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAg
IG1fYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCk7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9y
bUxheWVyKCk7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0
LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBm
bGlwWSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tl
bmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggZjNlZWU5M2E1MzI1ZTUyZWJm
MzNmZmRlNmM2YTY3MTc1ODc1NmMxMS4uNGEzZmJlYWU5ZTdjYTZmZTE5OTgyZGQ0ZWM5M2Q3YmQ0
ZTg5OWEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDM3ICsyOSw4NCBAQAogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xh
bXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAotV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKLQogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKIHsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dp
dGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAg
ICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwor
CisgICAgc3dpdGNoIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2NhbGVkU2l6ZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZh
Y3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisKIH0K
IAotI2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcg
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdN
b2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNj
ZXNzKQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAx
LCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewpAQCAt
MTA1LDQ4ICsxNTIsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCks
IGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENB
SVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJl
dHVybiB7IH07Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCi17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IHsgSW50UG9pbnQoKSwgbG9n
aWNhbFNpemUoKSB9OwotICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QpOwotICAgIGlmICgh
aW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byogc3JjUGl4ZWxBcnJh
eSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBz
cmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0g
MDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0g
ICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsK
LSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3Qg
ciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkg
KiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxP
ZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QpOwotfQot
Ci0jaWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBs
YXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZl
cjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFy
Z2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcg
aXQgc28gd2UgbmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwg
cGVyIHVuaXQuCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2Fs
ZUZhY3RvcigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0x
NjMsNTAgKzE3NCwxOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
Ojpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogICAgIHJldHVybiBidWZm
ZXI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21w
YXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFj
ZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBo
aWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNp
emUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1
cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBj
b250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNl
bmRpZgorICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQog
Ci1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK1JlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAg
ICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBp
cyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4g
b25lIHBpeGVsIHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNv
bnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0lt
YWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Cit2
b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50
ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRl
cm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRp
ZgotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3YWJmZTBkMTcxMTQwNmQ5MDhlMDMxZDJm
NmEwNzFlNDkwYWYxOGFjLi5hMGIwNGFmZTI3ZDM4NTgwODc2NmFjNmMyYjE3Mzc1M2Q0MDU4MmI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTI3LDU2ICsyNywxNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5o
IgotI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0
YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0K
LWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFu
dGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5
QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07
Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19
OwotCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBP
UlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKICAg
ICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9
IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVu
ZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0g
bnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0
aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRv
IHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0
VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gQ3JlYXRl
IGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFi
bGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0
aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKQEAgLTkyLDc1ICs1Miw1NCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSW50U2l6ZSBj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OwotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGhlIGFjdHVhbCByZXNv
bHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNh
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0gICAgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KLSAgICAKLSAg
ICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNv
c3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKLSAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotI2VsaWYgVVNFKENBSVJPKQotICAg
IE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVy
bmFsTWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJ
bWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0
aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRv
IHRoaXMgbmV3IG9uZS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0
VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0g
MDsKIAotI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHN0YXRpYyBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwot
I2VuZGlmCisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50
b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwogICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAs
IDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
IH0KLSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9
Ci0jZW5kaWYKLQotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9
IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdDsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7Ci0g
ICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSk7Ci0gICAgCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29s
b3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0
cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSkgPSAwOwogCiAg
ICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUg
dGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVz
IHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAg
ICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdD
R0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7Ci0KLXByaXZh
dGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAg
ICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0K
LSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUg
Z2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0
IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cp
Ci0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29s
JiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vz
cyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVt
LCBib29sLCBib29sKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1h
Z2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NjNhYTVkYTYyNjI1M2I1MWQ5MmZlZDgxYWJjYWJkMjc0M2RlZTg2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlRGF0
YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VC
dWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKKyAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX2JhY2tlbmRTaXpl
KGJhY2tlbmRTaXplKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQor
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsgY2Vp
bGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwgIXNj
YWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRTaXplLndpZHRoKCkpOworICAgIGlm
IChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRTaXplLmhlaWdodCgpKSAqIGJ5dGVzUGVyUm93
OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdD
b25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3sKKyAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgIGlm
ICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNy
Y1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAg
ICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwor
ICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCBy
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBi
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworCisgICAgICAgIGRvdWJs
ZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJs
ZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAz
LCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6
emVybygpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JB
RGF0YSh2b2lkKiBkYXRhKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAq
IG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVz
UGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3Jt
YXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJv
dywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQo
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50
OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSkgeworICAgICAgICByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7
CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4K
KyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQ
aXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxb
M10gPSBzcmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBs
aWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVp
bnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRl
c3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFh
bHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQ
aXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQg
PT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsw
XSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICog
MjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUp
IC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4
ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzJdID0g
KHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVp
bnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8IGFscGhhID09IDI1
NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZv
cm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQp
IHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0
UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBp
eGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dz
LAorICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXpl
X3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwg
Ynl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9y
bWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdl
UGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9y
Rm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCog
c3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNB
bHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFs
cGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
ICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RD
b2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFj
Y2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9y
bWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkg
Y29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRl
cyhzcmNSZWN0KTsKKworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoc3Jj
UmVjdFNjYWxlZC5zaXplKCkpOworICAgIGlmICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRh
dGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlw
cGVkID0gIGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJ
bnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5zaXpl
KCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0
LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIGlm
IChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5zaXplKCkpCisgICAgICAgIGltYWdl
RGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cg
KyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0
OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisg
ICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgdm9pZCogZGF0YSkKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKyAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworCisgICAgSW50UmVjdCBzcmNSZWN0
Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXpl
KCkgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlw
cGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnRTY2FsZWQpOworCisgICAgaWYgKHNy
Y1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVjdC54KCkg
LSBzcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQor
ICAgICAgICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3RTY2FsZWQueSgpKTsK
KworICAgIGRlc3RSZWN0LmludGVyc2VjdChiYWNrZW5kUmVjdCgpKTsKKyAgICBzcmNSZWN0Q2xp
cHBlZC5zZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cg
KyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICog
aW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURh
dGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhM2I2
M2NkZjcxNzhhYmIxYjVhMzg4MjljNTVlMTI4ZWRiN2EyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIK
KyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZTsKK2NsYXNzIEltYWdl
RGF0YTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAv
LyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAg
RG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBj
b3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gOiB1aW50OF90IHsKKyAg
ICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENvbG9yRm9ybWF0IDogdWludDhfdCB7
CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgp
ID0gZGVmYXVsdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0
ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgeyB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgYmFja2VuZFNp
emUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNw
YWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZp
bmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7
IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0
dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
bik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVh
bCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkgeyB9CisK
KyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgPSAwOwor
CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1
cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29u
c3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29s
b3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6
OlJHQkE7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCB0b0JhY2tlbmRDb29y
ZGluYXRlcyhUIHQpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZTxULCBJbnRQb2ludD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBJbnRTaXplPjo6dmFs
dWUgfHwgc3RkOjppc19zYW1lPFQsIEludFJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIGlmIChtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICAgICAgdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIEludFJlY3QgbG9naWNhbFJlY3Qo
KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fbG9naWNhbFNpemUp
OyB9OworICAgIEludFJlY3QgYmFja2VuZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIG1fYmFja2VuZFNpemUpOyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXpl
JikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSh2b2lkKiBkYXRhKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Cisg
ICAgSW50U2l6ZSBtX2JhY2tlbmRTaXplOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwor
ICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRh
dGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQyYTVjODg1ZTVjMTAyNDQ3Yzcz
YTEyZjFkNmZiMzJiNWQzOTkwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRh
dGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShD
RykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhmNDY5MDExN2IzNWU5OTFjMmEwMmVjN2UwYzdlNGQxMzI1YjE1OTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbmNyZXRlSW1hZ2VC
dWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiBVU0UoQ0cpCit1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7
CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIEhB
VkUoSU9TVVJGQUNFKQordXNpbmcgQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBBY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOworI2Vsc2UKK3VzaW5nIEFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsK
KyNlbmRpZgorCit1c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdl
QnVmZmVyPFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IGM3YWUyZjVkNzNiOTEzOGQ3
NTRlZDEyYWEwNzhlNzFhYjk1OTUzNGUuLjNjZmNlNzI5NTQyMDlkMzAzYTlmNzI0MzJmYmI0YjYz
OWQ0YjQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0
KTsKIAotICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IGxheWVySW1hZ2UuaW50ZXJuYWxTaXplKCk7
CisgICAgSW50U2l6ZSBidWZmZXJTaXplID0gbGF5ZXJJbWFnZS5iYWNrZW5kU2l6ZSgpOwogICAg
IGlmIChidWZmZXJTaXplICE9IGxheWVyU2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNz
ZWQgdG8gY2xpcFRvSW1hZ2VCdWZmZXIoKSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGly
ZSBidWZmZXIsCiAgICAgICAgIC8vIGJ1dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGws
IHNvIGNsaXAgdG8gdGhlIGZpbGxlZCBwYXJ0IGZpcnN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRH
TEFOR0xFLmNwcAppbmRleCBmOTZmYzk1YmI2ZGU1ZWQyY2YzZGE2ZTEyOWUxYTQzMmM3MjRjN2Fk
Li44NTNjZDAyYmI4Y2U5MzkwMDZiYmUzNGU0MDk3OWI4ZjM0ZDRmY2Y0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFO
R0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcApAQCAtNDUzLDcgKzQ1Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVy
KiBpbWFnZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5n
ZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRv
Q2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkp
OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgLy8gRklYTUU6
IHdvcmsgb24gaU9TIGludGVncmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggNjg5ODRk
NTY0YTkyOTI3ZDQyOGZjZWJiODBlMTRhYWNmOWFmYTRlZi4uY2Q4ZjFkYjM1OWUyNmEwMWEyYzg1
YmJkMjJlYTM2OGU2YWM4ODk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzUsNyArMTc1
LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xh
eWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVm
ZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxv
YXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAg
ICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJm
YWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJT
aXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5n
bG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93
U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIGRyYXdT
aGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJ
bWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJC
dWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1h
Z2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxh
eWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1
cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAg
ICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRl
c3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0s
IHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0x
OTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRm
b3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJ
bWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRm
b3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRl
ZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4Njdi
MDQ1ODVlZTgwMzQxMzQuLjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmNwcAppbmRleCBiY2EyOWRmYjY5NDk4NmU4Nzc0NjZiOGYwNzc4NmZiZDFi
ZjM5NDU2Li5jZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2MjAyY2YxMTI1OTViYzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTQxNCw3ICs0MTQsNyBAQCBJbnRS
ZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
MTNiYjY3Yzg3MGI3MDMzYzAwMGMzMWJkMmYyNTliZDdiZDgyZjlmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVz
Q2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
Ci0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJF
UE9YWSkKLSNpbmNsdWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+
Ci0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYK
LQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAgICAs
IG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4dHVy
ZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9uaWNv
c2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UKLSAg
ICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZm
ZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlICE9
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
JiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsK
LSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRl
eHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17
Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1f
Y29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7
Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9y
U3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3Iu
Z2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJl
ZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnBy
b3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigp
OwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVk
KCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6
Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNy
ZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0K
LSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94
eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlx
dWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUs
IG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAg
ICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNh
c3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVy
LT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxh
dGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdy
ZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGgg
d2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUg
dXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4g
U28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBi
dWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgp
LCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBv
c2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludCht
X2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQot
ICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQot
I2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsK
LSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdl
dCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAg
IGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBi
ZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZy
b20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwot
Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fp
cm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1h
bmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3Ro
cmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7
Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGlj
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09Q
RVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBz
dXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4g
Y29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VD
b2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAg
ICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05U
RU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBj
YWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFj
ZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7
Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0
dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUlt
YWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQot
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6
ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jl
c29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAg
Ly8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRo
ID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNj
YWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1
dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IElu
dFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1f
c2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5j
cmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwg
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNr
IHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVy
aW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NF
UlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7
Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19z
dXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlk
ZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAg
ICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1f
c2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
c3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRh
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwg
W10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlk
bid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2
aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1D
b250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9y
eShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQot
SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250
ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2
aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3Rv
cmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3Vy
ZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxs
IHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3Vy
ZmFjZSkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXIt
PmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9u
Q29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25D
b250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNl
Q29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAg
ICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRp
b25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xv
clNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJH
QiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JH
QikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYm
IGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAg
ICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtd
IHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAg
IGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAv
IDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9u
ZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29r
VXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25z
IG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IHN0cmlk
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEubV9zdXJmYWNlLmdldCgp
KTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAg
ICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFT
cmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lk
dGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAg
ICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpw
aXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxD
b2xvci5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpLnZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkp
OwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1
c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBj
YWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUo
c3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1hZ2UsIHdlIHdyaXRl
IGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAgLy8gb3RoZXJ3aXNlIHdlIGNy
ZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYgKHN1cmZhY2VUeXBlID09IENB
SVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0gICAgCi0g
ICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8SW1hZ2VEYXRhPiBnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRh
dGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShyZWN0LnNpemUoKSk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdCA/IHJl
c3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRz
LgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVj
dC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4g
b3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAg
ICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8
IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgcGl4ZWxBcnJheS0+emVyb0ZpbGwoKTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7
Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVz
dHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVu
ZHggPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50
IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55
KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAg
ZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYg
KGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAg
ICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJl
IGNvcGllZCwgc28ganVzdCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8
PSAwIHx8IG51bVJvd3MgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRo
ZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUg
ZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdl
UmVjdChvcmlnaW54LCBvcmlnaW55LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1
c3RSZWN0KGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFj
ZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNv
bHV0aW9uU2NhbGUpOwotICAgIG9yaWdpbnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkg
PSBpbWFnZVJlY3QueSgpOwotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2Uu
Z2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25l
IGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVh
ID0gaW50ZXJzZWN0aW9uKGxvZ2ljYWxSZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndp
ZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1
cmZhY2VUb0Fub3RoZXIoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwg
SW50U2l6ZSgtbG9naWNhbEFyZWEueCgpLCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQ
b2ludCgpLCBsb2dpY2FsQXJlYS5zaXplKCkpLCBJbnRTaXplKCkpOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdl
U3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHBpeGVsQXJyYXkt
PmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAq
IHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCAr
IGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJl
dF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAg
ICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93
ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNv
bG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1
bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNp
Z25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAo
cHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUg
PSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gc3JjUmVjdDsKLSAgICBiYWNraW5nU3Rv
cmVSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAKLSAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAg
cmV0dXJuIGdldERhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihi
YWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNp
emUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gZ2V0RGF0YTxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwg
bV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKLXsKLSAgICBJbnRSZWN0IGxvZ2lj
YWxTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50
ID0gZGVzdFBvaW50OwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVj
dDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBpbWFnZURhdGEuc2l6ZSgpOwotICAg
IEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKLQotICAgIHNjYWxlZFNvdXJj
ZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHNjYWxlZERlc3RQb2ludC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0
aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQot
ICAgIGludCBvcmlnaW54ID0gc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0g
c2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBsb2dp
Y2FsRGVzdHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKTsK
LSAgICBBU1NFUlQoZGVzdHggPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4IDwgbV9zaXplLndpZHRo
KCkpOwotICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNj
YWxlZFNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIGludCBlbmR4ID0gc2NhbGVkRGVzdFBvaW50
LngoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpOwotICAgIGludCBsb2dpY2FsRW5keCA9IGxv
Z2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WCgpOwotICAgIEFTU0VS
VChlbmR4IDw9IG1fc2l6ZS53aWR0aCgpKTsKLQotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAt
IGRlc3R4OwotICAgIGludCBsb2dpY2FsTnVtQ29sdW1ucyA9IGxvZ2ljYWxFbmR4IC0gbG9naWNh
bERlc3R4OwotCi0gICAgaW50IG9yaWdpbnkgPSBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBp
bnQgZGVzdHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC55KCk7Ci0g
ICAgaW50IGxvZ2ljYWxEZXN0eSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJj
ZVJlY3QueSgpOwotICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkgPCBt
X3NpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VSVChv
cmlnaW55IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIGludCBlbmR5ID0gc2Nh
bGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpOwotICAgIGludCBsb2dp
Y2FsRW5keSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WSgp
OwotICAgIEFTU0VSVChlbmR5IDw9IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaW50IG51bVJvd3Mg
PSBlbmR5IC0gZGVzdHk7Ci0gICAgaW50IGxvZ2ljYWxOdW1Sb3dzID0gbG9naWNhbEVuZHkgLSBs
b2dpY2FsRGVzdHk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlz
IGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQg
dGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VC
dWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZGVzdHgsIGRlc3R5LCBudW1Db2x1bW5zLCBu
dW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5
U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdl
UmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgp
LCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3R4ID0gaW1h
Z2VSZWN0LngoKTsKLSAgICBkZXN0eSA9IGltYWdlUmVjdC55KCk7Ci0KLSAgICB1aW50OF90KiBw
aXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQo
KSk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzY2FsZWRTb3VyY2VTaXpl
LndpZHRoKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IGlt
YWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAg
IHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0
YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBu
dW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAv
LyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1
c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhw
ZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9
IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0g
KGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0g
KGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8
IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24g
aXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dp
Y2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAo
aW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFj
ZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAs
IGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQ
b2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5j
b2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZElt
YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNo
YXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVu
Y29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwot
fQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0g
ICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3Rp
dmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNo
aW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0
aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3Rl
eHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwg
bWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25p
Y29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlm
Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQs
IHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVt
dWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVt
IGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29u
dGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZv
cm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVi
dWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBm
Ym8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBn
bEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAg
IGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4
dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDAp
OwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFs
Zm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1ZWZhYTc5
MGExNDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1
cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0
U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RD
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNo
YWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVz
dENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGlu
ZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2Ug
aWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNv
bG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0
b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAg
ICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOwor
CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJ
bWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisgICAgcmV0
dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJn
ZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShp
bWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGlj
OgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJy
aWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
dXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xv
ckZvcm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2MzcyZjkx
OWU3ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAi
RXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYK
KyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVw
b3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5k
aWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENB
SVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsK
KyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2Vu
ZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQ
SSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4K
KyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53aWR0aCgp
LCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNh
aXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3Jt
YW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90
aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJl
ZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXpl
LmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENB
SVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFy
U3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVh
dGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0
ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJ
QSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5p
Y29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlz
KSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkK
KyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwor
ICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmlu
Z0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAg
ICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJu
IG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAg
ICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNl
IHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0
b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlw
WSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3
aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4
dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgor
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9N
QVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJf
dCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRp
b25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3Jt
YXQsIDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwg
MCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERl
bGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENv
bnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2Vu
VGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVp
KEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdo
dCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRv
clN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShj
b250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBv
c2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0
KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBv
c2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisg
ICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0
aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAg
ICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUs
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgp
KS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5
ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3
ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBi
dXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhl
IGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1
c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgor
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJm
YWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3Iu
Z2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3Np
dG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7
CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBh
Y3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZs
dXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0
OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZSht
X3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRh
cmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYg
VVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVy
CisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgewor
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgfkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkg
b3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZv
cm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRy
PE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsK
KyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0
b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisg
ICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQwYmY3MzRjMGFjNjQxYWVkY2UwYjBiOWNjNzgwZmE2ZjQ5NzA4NDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNF
KENBSVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxh
dGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9
IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tl
bmRTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFz
dFplcm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3Vy
ZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tl
bmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXks
IHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAx
LCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
KGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1f
c3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7Cisg
ICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xv
Z2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4
ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAg
ICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tV
cFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgp
XSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAs
IDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE2MDAzNzk0ZmRhYTk0NzMyYjYxNTU3YzQxZTg0NDIzMWE5OGE3MDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZp
c2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykg
Q28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3Rk
OjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQxNWYwYmEy
MjIxMGY3YTE3NGJhNzA3ZWQyNjE4MGMxOGZlYTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWYgVVNFKENB
SVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJm
YWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92
ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9zdXJmYWNl
LmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CisgICAgbV9wbGF0
Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3Rvcnko
bV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250
ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVz
UGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0
byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDAp
OworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7
CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJu
IG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QKK3sKKyAgICBCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWlyb19zdXJm
YWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9B
TFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisgICAg
ZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlOworICAgIHJldHVy
biBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAg
YXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1
cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VE
YXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVs
cywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAg
IHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0
ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29v
cmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50U2NhbGVkLngoKSwgZGVzdFBvaW50U2NhbGVk
LnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVkLmhlaWdodCgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTQ5ZmYz
NzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2YwNTUzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0
cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNv
bnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRiZjc1
NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRh
dGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFD
YWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShDQUlSTykK
LQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fp
cm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVy
VGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1j
bGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgot
I2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0YSgpOwot
Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRmb3JtQ29u
dGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5kZXJpbmdN
b2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsK
LSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWlyb190PiBt
X2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNvc2lhOjpD
b250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNl
bHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIm
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNlbmRpZgot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQotCi0j
ZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTE2NGM2OTk1MTk3ZWNiM2Q1M2VkZDMyYmFlMGQwZTQ1ZmJmNzQ1OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3Rm
L0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJ
VXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9J
T1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMg
YW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVT
RV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1E
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJ
TkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNh
c2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENv
bnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUo
SU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNv
bG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0g
ICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9
IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAg
fQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9y
U3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7
Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0
aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVy
KHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIs
IHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8g
c2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3Bh
Y2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShz
aXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1
Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZs
b2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsK
LSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhl
aWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBs
b3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRI
ZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYg
KG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENo
ZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2Vu
ZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVz
UGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZs
b3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAo
bnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3Vy
ZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXpl
LndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVy
aW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKLSNlbmRpZgotCi0gICAg
bV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgRmxvYXRTaXplIHVzZXJC
b3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSk7
Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBp
ZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJm
YWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAo
Y2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAg
IH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAg
ICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBm
YWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRl
ZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAg
ICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAz
KSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNl
bHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVu
c2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAg
ICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0
X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2
ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklz
QmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1f
ZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
MCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7
Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0
LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZl
cihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3Bh
Y2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1
ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0
Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9t
IGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3
ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJu
YWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAg
Ly8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNl
IGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1
ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5
dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBp
ZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxC
eXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFs
U2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9r
ZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVm
dWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBz
YWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5
IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVj
YXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRh
LnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwot
ICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6
OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZh
Y2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEu
Y29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsK
LSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1z
dGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1h
Z2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3Vu
ZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgo
KSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJl
ZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2Vy
dmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUp
OwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwg
OCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUo
Y29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNh
bFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNh
bFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJl
Y3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgp
KTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2Up
KTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlv
cik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNpemUoKSwgaW50ZXJuYWxTaXplKCksIG1f
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0g
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsK
LQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZh
Y2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9T
dXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZl
cjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAot
ewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7
Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJv
dy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2Rh
dGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgot
ICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVh
dGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVm
ZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdl
QnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUg
PSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpj
cmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYg
KCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3Rv
cmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5Lgot
ICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAg
YWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNv
bnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUp
KSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAg
ICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZv
clJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAg
ICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdl
PiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgc2NhbGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdl
dERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gZGVzdFBvaW50OwotICAgIHNj
YWxlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIHNjYWxlZERlc3RQb2lu
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBtX2RhdGEucHV0RGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzY2FsZWRTcmNSZWN0LCBzY2FsZWREZXN0UG9pbnQsIGludGVybmFs
U2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8g
Rm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1
ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBs
YWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwg
MSwgMCwgMCkpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBm
bHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJvdGVjdGVkUGl4ZWxB
cnJheTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgYXV0byBpbWFnZURhdGEg
PSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpIH0pOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAg
ICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7Ci0g
ICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+
ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0KLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRl
cikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0
LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4
LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2Rl
KGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlw
VG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0
aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNp
emVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndp
ZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5n
ZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGlt
YWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwot
ICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzFjZDIzNzU4MWY5NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQor
I2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBo
aWNzU1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChD
R0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAg
ICAgIHJldHVybiBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAg
CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250
ZXh0KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKKyNlbmRpZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENv
bnRleHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250
ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYg
KGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
YmFja2VuZFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAs
IGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVy
biBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7Cisg
ICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndp
ZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxl
bmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxv
YXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9
CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdl
KSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sK
KyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50
b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlv
blNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0
OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
PyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFn
ZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3Rv
cmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwor
CisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Cisg
ICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAg
ICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7
CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5n
dGgoKTsKKyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+
c2l6ZSgpOworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVk
UGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3Rl
ZFBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFk
YXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBw
aXhlbEFycmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5z
aW9ucy53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZh
dWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBm
YWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdT
dG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1h
Z2UuZ2V0KCksIGJhY2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0
aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
KyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9k
ZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVj
dE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgp
KSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtl
KDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGlt
YWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYg
KCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0
KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0
YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sK
KyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsK
KyAgICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24p
KQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0
dXJuICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUg
dkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50
OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdklt
YWdlQnVmZmVyOworCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFn
ZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0
YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVm
ZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dz
OworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5
SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0Fs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3Jj
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JG
b3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4
X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVs
c19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQg
PT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1h
dCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENv
bG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdC
QS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAg
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYg
KHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBk
ZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQ
aXhlbHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1
ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXpl
KTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQo
c3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVz
dENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2Nh
Mzk4MDM0ZjI1YTMzNDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9F
WFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsK
K3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJl
Zj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBz
ZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29w
eUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlk
ZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzODNj
OTk2ZTU0ZDBiMDQ3MTNmZGM3NDJjMjE0MzZkMzgwN2U4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25z
dCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBj
b25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQorewor
ICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJv
dyA9IDQgKiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGJh
Y2tlbmRTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBiYWNrZW5kU2l6ZS5oZWln
aHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0
YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQo
KSwgOCwgYnl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAg
ICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKwor
ICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEp
KTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3Zp
ZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsK
KworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+
KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1v
dmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRv
IGNnQ29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1
cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNS
R0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNh
Y2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKK0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0
cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2lj
YWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwg
bV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikp
CisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRh
KTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOwor
ICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsK
K30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9iYWNrZW5kU2l6
ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwK
KyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0
bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdl
QnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorewor
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHNyY1JlY3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWY2NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2
Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5o
IgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFj
a2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9zdFdpbmRvdyopOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
Jiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQq
IG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVy
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwYWQwOTljNzE2YWVmZmViMDQx
YjdkZDg4NTAxNmViNjE0ZWRhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhD
bGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFD
Q0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJm
YWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3Bp
L2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0
ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNk
ZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVy
RGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3Qp
Ci17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAg
IGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBT
d2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMg
YXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBb
NF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJl
bXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdl
X0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0
LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEu
IElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3Qg
dWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5l
bHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9p
ZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5w
dXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQp
OwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3Jj
LndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0
ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0
ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRh
ID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAg
IFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90
IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVS
ZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdp
ZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0
YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0
LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBhdXRvIHJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpKTsKLSAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVzdWx0ID8gcmVzdWx0
LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAgIENo
ZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCBy
ZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5LnVu
c2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcGl4ZWxBcnJheS0+emVyb0ZpbGwo
KTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54
IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmln
aW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxp
bnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAo
ZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lk
dGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAg
ICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAg
ICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAg
ICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51
bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2Fm
ZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3
aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQg
KiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBwaXhlbEFycmF5LT5kYXRh
KCkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlm
ICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jv
d3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qu
d2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVz
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMy
Ci0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRo
ICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAg
ICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNl
IGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1ti
YXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBi
YXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJh
c2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClb
MF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAgICBzcmNC
eXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IHNy
Y1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNy
Y1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAg
ICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAg
ZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6
cHV0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNv
dXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9
IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkg
PCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6
ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0Lndp
ZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgp
IDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJl
Y3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAg
IAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53
aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5k
YXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdl
dCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0Um93
czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFk
YXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291cmNl
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0g
ICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdp
ZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAg
ICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3
LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQo
KTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAg
IHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAg
ICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9m
IEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
KHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSNl
bHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdy
aXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsK
LSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFz
ZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2Fm
ZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3Jj
OwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhl
aWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93
cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0g
ZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0
KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRl
c3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVsdGlw
bHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8g
U3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJt
dXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwot
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNh
ZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVu
c2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAg
ICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAg
ICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIGlm
IChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
ICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGZiZjJhZGU1ZTg2MGQzNGUyMTNlMWM0MTJlMTViZGFi
YzUzZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0Nv
bG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlk
ZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFn
ZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMu
Ci0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlk
ZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJ
bWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNl
bmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdDsK
LSAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYjdmYzY3YjkyYzcxYzAyMGVhYmViNjMzNDkyYmQwZjhkMzZi
MTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBI
QVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIklPU3VyZmFj
ZS5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRp
b25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsK
KyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBiYWNrZW5k
U2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dD
b250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIENHSU9T
dXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYgY2dDb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFj
a2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOwor
ICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFja2VuZFNpemUsIGJhY2tl
bmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJm
YWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNpemUp
KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4
dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2Uu
Z2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVh
dGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNoZWRDR0NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJm
YWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShz
dXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsK
K30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4
dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0
KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwor
fQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3NpemVfdCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckZv
cm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVy
biBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5r
SW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShp
bWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3Vy
ZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNl
OjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRk
cmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFj
ZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2lu
dCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5n
IHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlz
IG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDAp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZB
Q0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZGJiZjI5
ODRmYWU4MTA2ZWQ3YzFmNjNiNjRhMjIwY2IxODA2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBX
RUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJh
Y2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRp
dmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRy
YXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBo
eXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB1bnNp
Z25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9ybWF0IGJhY2tl
bmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDI4MjFlZjgxZDc1ZGZi
MGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJhYTgyMzMyZGUyZDExMWJkY2UxZTA4MDYzNTkw
ZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yNTQsOCArMjU0LDggQEAgdm9pZCBQ
REZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAg
ICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwogCi0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUg
PSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBkZWNvZGVkU2l6ZUNo
YW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOworICAgIEludFNpemUgYmFj
a2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOworICAgIGRlY29k
ZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0KTsKIH0KIAogSW1h
Z2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2Vm
MTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMy
ZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9z
dFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZm
ZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
CiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bv
b2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBv
b2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZm
ZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3Jt
YXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0
ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRleCAxZTAzNWE3ZWVmMjgw
M2NmNjU5OTJkMDQ5YzlmOGI1NTZiY2VjYWVjLi45MThlMThhZjVlMTJmZjkwNDk0ODNhNzhlZjFi
YTgyZDczNThjMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUo
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMu
Z2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVm
ZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQogICAgIHByZXNlbnRSZW5kZXJidWZmZXIoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlYmI2N2M2NDNlY2I4OTNhNzkzN2Q4MDI0MzU3MTg2Y2IxNjQyMWNiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1MzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckRhdGEuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIK
LSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVs
cyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZv
cm1hdD4KLXZvaWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3Ms
IHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5zaWduZWQgc3JjU3RyaWRl
LCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewotICAgICAgICAvLyBTb3VyY2UgZGF0
YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRvIG9ubHkgY29weSB0aGUg
Yml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJlY3RhbmdsZSBzdXBwbGll
ZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUm93ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5KTsKLSAg
ICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2xDb3VudDsgKyt4KSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBieXRlUG9zaXRpb24gPSB4ICogNDsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQz
Ml90KiBzcmNQaXhlbCA9IHNyY1JvdyArIHg7Ci0KLSAgICAgICAgICAgIC8vIFNvZnR3YXJlIGZp
bHRlcnMgZXhwZWN0IChQKVJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVj
dDJEJ3MgUEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICAgICAgICAgIHVpbnQzMl90IGFscGhh
ID0gKCpzcmNQaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICAgICAgdWludDMyX3Qg
cmVkID0gKCpzcmNQaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAgICAgICAgdWludDMy
X3QgZ3JlZW4gPSAoKnNyY1BpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgICAgIHVp
bnQzMl90IGJsdWUgPSAoKnNyY1BpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgICAgIGlm
IChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1
ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uXSAgICAgPSByZWQ7Ci0gICAgICAg
ICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0
Um93W2J5dGVQb3NpdGlvbiArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBv
c2l0aW9uICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGJvb2wg
Y29weVJlY3RGcm9tU291cmNlVG9EZXN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3Qg
SW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNp
emUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUo
KSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3Vy
Y2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICog
NDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgp
ICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngo
KSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRl
ICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRl
c3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVu
c2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVu
c2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zm
c2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICog
eSArIGRlc3RSb3dPZmZzZXQ7Ci0gICAgICAgIG1lbWNweShkZXN0Um93LCBzcmNSb3csIGJ5dGVz
UGVyUm93KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTm90ZTogQXNzdW1l
cyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10ZW1wbGF0ZSA8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0PgotYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbihjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNv
bnN0IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdEJ1ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZm
ZXJTaXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5z
aXplKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwg
c291cmNlQnVmZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgo
KSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkg
KiA0OwotCi0gICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigp
LngoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlv
bi54KCkgKiA0OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0
cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3Mg
PSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9y
ICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jv
d09mZnNldDsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlk
ZSAqIHkgKyBkZXN0Um93T2Zmc2V0OwotCi0gICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwg
c291cmNlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IHgg
KiA0OwotCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dbeF07Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd1t4ICsgMV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBi
bHVlID0gc3JjUm93W3ggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93
W3ggKyAzXTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3Jl
ZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93KSAr
IHg7Ci0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdy
ZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6Y29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0LCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
YXV0byByYXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0KLSAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAvIHJhd0JpdG1hcFNpemUud2lkdGg7
Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSByZWN0OwotICAgIHNjYWxlZFJlY3Quc2NhbGUo
c2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKCFJbnRSZWN0KEludFBvaW50KCksIGJhY2tpbmdTdG9y
ZVNpemUpLmNvbnRhaW5zKHNjYWxlZFJlY3QpKSB7Ci0gICAgICAgIC8vIFJlcXVlc3RlZCByZWN0
IGlzIG91dHNpZGUgdGhlIGJ1ZmZlci4gUmV0dXJuIHplcm8tZmlsbGVkIGJ1ZmZlci4KLSAgICAg
ICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNjYWxlZFJlY3QsIGJhY2tpbmdTdG9y
ZVNpemUsIGRhdGEuZGF0YSgpLCByZWN0LnNpemUoKSwgcmVzdWx0LT5kYXRhKCksIEludFBvaW50
KCkpOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0
IEludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUgPT0gYmFja2luZ1N0b3JlU2l6
ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBu
dW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYmFja2lu
Z1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChudW1CeXRlcy51bnNhZmVH
ZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1CeXRlcy51bnNhZmVHZXQo
KTsKLX0KLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMg
aW4gYSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dD4KLXZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVD
b3VudCkKLXsKLSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7Ci0gICAgYXV0
byogcGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGJ5dGVEYXRhKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAgIHVp
bnQzMl90IHBpeGVsID0gKnBpeGVsRGF0YTsKLSAgICAgICAgc2l6ZV90IGJ5dGVQb3NpdGlvbiA9
IGkgKiA0OwotCi0gICAgICAgIHVpbnQzMl90IGFscGhhID0gKHBpeGVsICYgMHhGRjAwMDAwMCkg
Pj4gMjQ7Ci0gICAgICAgIHVpbnQzMl90IHJlZCA9IChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2
OwotICAgICAgICB1aW50MzJfdCBncmVlbiA9IChwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0g
ICAgICAgIHVpbnQzMl90IGJsdWUgPSAocGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAv
LyAoUClSR0JBIC0+IFBCR1JBCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAqcGl4ZWxEYXRhID0gKGFscGhhIDw8IDI0
KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgICsrcGl4ZWxEYXRh
OwotICAgIH0KLX0KLQotLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGlu
IFJHQkEgZm9ybWF0Ci10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9y
bWF0Pgotdm9pZCBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb24odWludDhfdCogYnl0ZURh
dGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVD
b3VudCAvIDQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkg
ewotICAgICAgICB1bnNpZ25lZCB4ID0gcGl4ZWxDb3VudCAqIDQ7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgcmVkID0gYnl0ZURhdGFbeF07Ci0gICAgICAgIHVuc2lnbmVkIGdyZWVuID0gYnl0ZURhdGFb
eCArIDFdOwotICAgICAgICB1bnNpZ25lZCBibHVlID0gYnl0ZURhdGFbeCArIDJdOwotICAgICAg
ICB1bnNpZ25lZCBhbHBoYSA9IGJ5dGVEYXRhW3ggKyAzXTsKLQotICAgICAgICBpZiAoZGVzaXJl
ZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gKHJlZCAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gcmVk
ICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50MzJfdCogcGl4ZWwgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpICsgaTsKLSAgICAgICAgKnBpeGVsID0gKGFscGhh
IDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgfQotfQotCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXpl
JiBzaXplKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVj
dC5zaXplKCkpOwotICAgIGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYg
KCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0KSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUo
KTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUud2lk
dGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5oZWlnaHQpKTsKLQotICAgIGlmIChyZWN0
LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVzLnVuc2FmZUdldCgpID09IGRhdGEuc2l6
ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCks
IDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9ubHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRt
YXAuCi0gICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0YShyZWN0LCByZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVz
aXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJbi1tZW1vcnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBk
ZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRoZSByZXN1bHRzLgotICAgICAgICBpZiAo
ZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
Ci0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5n
dGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBs
aWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRh
dGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKLXsKLSAgICBpZiAoYml0bWFw
QnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVs
U2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHBpeGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJm
bG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQy
RDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZp
Y2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRv
IGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndpZHRoKCkgKiA0OwotCi0gICAgLy8gQ29w
eSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRt
YXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklUTUFQ
X1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEo
RDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9U
X0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gZDJkRGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBpeGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJ
bkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJE
MTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwg
MCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVC
aXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQy
RDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXBwZWREYXRhLmJpdHMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVs
U2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMg
ZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdS
QSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBs
eTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMs
IHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gs
IGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBzd2l6
emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
PihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCks
IG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAg
ICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBC
aXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0KLSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgo
KSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBDaGVj
a2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAg
QVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVH
ZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0g
MCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkp
OwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkp
ICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNp
emUud2lkdGgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRo
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tl
ZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFT
U0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0
KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7
Ci0KLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6
ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0KLSAgICBpZiAo
d2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0gYml0
bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBp
bWFnZURhdGEuc2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRo
ID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IGlt
YWdlRGF0YS5zaXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZW5zdXJlQmFj
a2luZ1N0b3JlKHNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRveiogc291cmNlID0g
aW1hZ2VEYXRhLmRhdGEoKTsKLSAgICBpZiAoc291cmNlU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAg
IG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKLSAg
ICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0KTsKLSAgICAgICAgaWYgKCFjb3B5
UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291cmNlLCBzb3VyY2VGb3JtYXQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRt
YXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRh
Ojpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0gc291cmNlUmVjdDsKLSAgICBp
ZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0QnVmZmVyUG9zaXRpb24gPSBz
b3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291cmNlRm9ybWF0ID09IGJ5dGVGb3Jt
YXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc291cmNlUmVjdCwg
c291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEu
ZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICByZXR1cm4gY29w
eVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUo
KSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZm
ZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0
UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4o
c291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9y
ZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotfQotCi12b2lkIEltYWdl
QnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKLXsKLSAgICBpZiAoYml0bWFw
QnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0YS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFw
LT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IGJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBwaXhlbFNpemUuaGVpZ2h0ICogNDsK
LSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4gUkdCQS4gV2UgbmVlZCB0
byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBiZSBjb21wYXRpYmxlCi0gICAgLy8g
d2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2UgdXNlLgotICAgIGlmIChieXRlRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAg
aW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+IFBCR1JBCi0gICAgZWxzZQotICAg
ICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
PihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQotCi0gICAgYXV0
byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9yeShudWxscHRyLCBkYXRhLmRhdGEo
KSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci19Ci0KLUNPTVB0
cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVk
KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQot
ICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkg
ewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChR
dWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgewotICAgICAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gYml0bWFwKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJh
dyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4KLSAgICAgICAg
ICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4
ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZy
b21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IGJpdG1hcC0+R2V0
UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0g
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0
aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJy
ZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3Qg
YWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJh
dyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRy
PElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVC
aXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQy
RDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQx
X0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0g
ICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAt
PkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFw
UHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghc291cmNlQ1BVQml0bWFwKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJv
bUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNU
IG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01B
UF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJ
bnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKLSAgICBociA9
IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgp
LCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJE
OjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVC
aXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4
dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5Y2M0OTNlMWMyYTVhNTZjMmNlYWVmNWMz
YTI5Yzk1MDQ1ZDFkMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1pbnRlcmZhY2UgSUQy
RDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLXN0cnVjdCBJbWFnZUJ1
ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLQotICAgIC8vIE9u
bHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBtdXRhYmxlIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBieXRlRm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3luYyB7IEluU3lu
YywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMgfTsKLSAgICBtdXRhYmxlIEJpdG1h
cEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91
dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKSBj
b25zdDsKLSAgICB2b2lkIHB1dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYpOwotCi0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBib29sIGVu
c3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRGF0
YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVk
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3Q7Ci0gICAgYm9vbCBj
b3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
JikgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVj
dCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0g
ICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFw
QnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNmYWYxNWU0N2MyOTcyNTYyNzQzZmQ3MjE1ZmRmNTc1ZTRiNTAyOTcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJD
T01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlRGVj
b2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1h
Z2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwg
bnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5z
Y2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRT
aXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQot
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNj
YWxlZFdpZHRoID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0g
ICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBh
IGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBp
ZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5i
eXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92
ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpIDogbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9y
bUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKLQot
ICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9
IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUobV9sb2dpY2FsU2l6ZSwg
cmVuZGVyVGFyZ2V0LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0
Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAg
ICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7
Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0gICAgbV9k
YXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3Jt
Q29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBpbWFnZUNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIG51bGxw
dHIsIG51bGxwdHIsIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIo
KSA9IGRlZmF1bHQ7Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19Ci0K
LXN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFn
ZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBp
bWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChp
bWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFn
ZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkp
IHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6
OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVk
Qml0bWFwKSB7Ci0gICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAw
LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQg
aHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJj
ZVJlY3QpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1h
Z2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRy
PElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dp
Y2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShi
aXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAg
ICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1h
Z2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaWYgKG1f
cmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZp
b3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBU
YXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdl
QnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICBDT01QdHI8SUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5
SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RG
TW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3Rv
cmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUNPTVB0
cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogU2VlIGlm
IHdlIGNhbiByZXVzZSB0aGUgb24taGFyZHdhcmUgaW1hZ2UuCi0gICAgcmV0dXJuIGltYWdlQnVm
ZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotfQotCi1DT01QdHI8
SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFy
Z2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwot
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRt
YXAoJmltYWdlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTog
bV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBz
dG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJl
aGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7Ci0KLSAgICBDaGVja2VkPHNpemVfdCwgUmVj
b3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsK
LSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAg
ICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdT
dG9yZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6
Ci0gICAgICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJl
Y3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAgICAgICAgICAgaW1h
Z2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEu
ZGF0YSgpLCAzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBl
bHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1
bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGF1dG8gY29tcGF0
aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21wYXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdl
U2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVu
dEltYWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBp
ZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8g
ZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRy
PEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAg
ICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAg
ICB9Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7Ci0gICAgc2NhbGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBy
ZXR1cm4gbV9kYXRhLmdldERhdGEob3V0cHV0Rm9ybWF0LCBzY2FsZWRTcmNSZWN0LCBpbnRlcm5h
bFNpemUoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKLXsKLSAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4
dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBJbnRSZWN0
IHNjYWxlZERlc3RQb2ludCA9IGRlc3RQb2ludDsKLSAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICBzY2FsZWREZXN0UG9pbnQuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgbV9kYXRhLnB1dERhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc2Nh
bGVkU3JjUmVjdCwgc2NhbGVkRGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLVN0cmlu
ZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4s
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1TdHJp
bmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJh
bnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzBhYmVkZjBhNjM1MGZk
NTU5NDhkNDgxYWI3ODk1ZjYyMGI0OGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApA
QCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNp
bmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgorI2luY2x1ZGUgPGQyZDFfMS5o
PgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3aW5jb2RlYy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXpl
ID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAo
YmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZv
cm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBhdXRvIGJpdG1hcENvbnRleHQg
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNpemUsIHJlbmRlclRh
cmdldCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAg
IHJldHVybjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGJpdG1hcDsKKyAgICBIUkVTVUxUIGhyID0g
Yml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5p
cXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10o
KSB7CisgICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKyAgICB9LCBb
dGhpc10oKSB7CisgICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7CisgICAgfSk7
CisKKyAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4ocGxhdGZvcm1D
b250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
PihuZXcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpLCBXVEZNb3Zl
KGNvbnRleHQpLCBXVEZNb3ZlKGJpdG1hcCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIHJldHVybiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiYmIGNvbnRleHQsIE5hdGl2ZUltYWdlUHRyJiYgYml0bWFwKQorICAgIDogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4dChXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCkp
CisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICAsIG1fYml0bWFwKFdURk1v
dmUoYml0bWFwKSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAg
Y29udGV4dCgpLmZsdXNoKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJn
ZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGltYWdlOworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMg
bnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRv
IHRlc3QgZmFpbHVyZXMuCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3Jl
ICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENv
cHlCYWNraW5nU3RvcmU7CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0
ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChj
b3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgeworICAgICAgICBEMkQxX1JFQ1RfVSBi
YWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUpOworICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9y
ZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKKworICAgIH0KKworICAgIHJl
dHVybiBpbWFnZTsKK30KKworc3RhdGljIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUNyb3BwZWRJbWFn
ZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQx
Qml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQoreworICAgIEZsb2F0U2l6ZSBp
bWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsK
KworICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgo
KSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRz
LmhlaWdodCgpKSkpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFw
ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7CisgICAgICAg
IGlmIChjcm9wcGVkQml0bWFwKSB7CisgICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQx
OjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBp
bWFnZSwgJnNvdXJjZVJlY3QpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRh
cmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHNj
YWxlZCB2ZXJzaW9uCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBO
YXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisKKyAgICBhdXRv
IGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQq
Pihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJ
bWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGlu
dGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFn
ZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIENPTVB0cjxJ
RDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFj
ZSgmYml0bWFwVGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92ZShpbWFnZSksIGludGVy
bmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRt
YXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBsb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm4g
Yml0bWFwOworCisgICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSBy
ZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBi
aXRtYXBUYXJnZXQoUXVlcnksIHJlbmRlclRhcmdldCk7CisgICAgICAgIGlmIChiaXRtYXBUYXJn
ZXQpIHsKKyAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYmFja2luZ0JpdG1hcDsKKyAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQoYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJhY2tpbmdC
aXRtYXApKSkgeworICAgICAgICAgICAgICAgIGlmIChiYWNraW5nQml0bWFwICE9IG1fYml0bWFw
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOworCisgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEg
Y29weS4KKyAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsK
KyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFw
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZj
b3BpZWRCaXRtYXApKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGll
ZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBz
aXplID0gbV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChzaXplLmhlaWdodCAm
JiBzaXplLndpZHRoKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBu
dW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7CisgICAgaWYgKG51bUJ5dGVz
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBDb3B5
IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQu
CisgICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAg
d2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNvbnRleHQtPmVuZERy
YXcoKTsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRl
eHQgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOworICAgIGlmICghc291cmNl
RGV2aWNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEg
Yml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09Q
VElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3Qy
RDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQt
PkNyZWF0ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKKyAg
ICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KCFzb3VyY2VDUFVCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBz
b3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBu
dWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOworICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0
YSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7CisgICAg
aHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNv
bXBhdGlibGVCaXRtYXA7CisgICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRt
YXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRT
b3VyY2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJs
ZUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOworICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKKworICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworCisgICAgcmV0dXJuIGNv
bXBhdGlibGVCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNj
YWxlKTsKKworICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IGNvbXBhdGlibGVCaXRtYXAoZGVz
dENvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKKworICAgIEZsb2F0
U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXAp
OworICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwgY3VycmVu
dEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAg
ICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKwor
U3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEs
IHNyY1JlY3QsIGRlc3RQb2ludCwgbnVsbHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2QxNTYwN2YzNjQzZGJhN2VlNWVlZmYyZjcxYWMzOTM5NjAwN2Ux
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsK
KworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IG1fY29udGV4dDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2JpdG1hcDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVh
bWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAppbmRl
eCA0OTM2N2NiMjlkMGYyMGQxNzEyMjBiMzIwMGM5NGU1Y2NkMzcwMWJkLi4zMmJmODZiYzZmYjY4
YzFlNmQ2M2RlZDg3NjI3NTM1M2Q1NGFmYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC01OCw3ICs1OCw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvcjsKICAg
ICAgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSgpLCAmZnBzTnVtZXJh
dG9yLCAmZnBzRGVub21pbmF0b3IpOwotICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZUJ1ZmZl
ci0+YmFja2VuZFNpemUoKTsKICAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKICAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVf
U1RSSU5HLCAiQkdSQSIsCiAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBpbWFnZVNp
emUud2lkdGgoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDYwNzVmNjNlMWMyODAwN2Y2NzdlMjkzN2M1Y2E3YmM2
NzkzMzIwMjguLmY2YTk1NDU4OTg1OGUwMGU0ZTdiNmEzYzE5ZjIyYmFmYTU3NjFkMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
Rm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAg
ICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdC
b3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4o
Y2VpbChleHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwg
c3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFu
c2Zvcm0ueVNjYWxlKCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4
IDJlMGE0MDU2NTg5ZTI0OTBhNTg1ZGYzZmFhOGQzYzZlZjQxMTkyZmIuLjRkODU3OGIxYTM4OTM3
ZGE1YmI5YmVjNmUyNGIxZDBjZDVkZjMxNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTg0Niw3ICs4NDYsNyBAQCBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAogICAg
IGlmICghc25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzaGFy
ZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5p
bnRlcm5hbFNpemUoKSwgeyB9KTsKKyAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmJhY2tlbmRTaXplKCksIHsgfSk7CiAg
ICAgaWYgKCFzaGFyZWRTbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>