<?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>174860</bug_id>
          
          <creation_ts>2017-07-26 04:55:58 -0700</creation_ts>
          <short_desc>[TexMap] Remove use of GraphicsContext3D</short_desc>
          <delta_ts>2017-11-16 04:23:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174774</dependson>
    
    <dependson>174776</dependson>
    
    <dependson>175310</dependson>
    
    <dependson>175311</dependson>
    
    <dependson>175313</dependson>
    
    <dependson>175314</dependson>
    
    <dependson>175317</dependson>
    
    <dependson>175319</dependson>
    
    <dependson>175425</dependson>
          <blocked>166968</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>magomez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1332322</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-07-26 04:55:58 -0700</bug_when>
    <thetext>The TextureMapper subsystem depends on the GraphicsContext3D class for performing OpenGL operations. It really shouldn&apos;t since that class is tailored to WebGL needs, and carries along costs like ANGLE support.

Instead, GraphicsContext3D usage in TextureMapper should be replaced with direct usage of OpenGL APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333709</commentid>
    <comment_count>1</comment_count>
      <attachid>316846</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-01 05:25:27 -0700</bug_when>
    <thetext>Created attachment 316846
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371809</commentid>
    <comment_count>2</comment_count>
      <attachid>326982</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-11-15 07:26:09 -0800</bug_when>
    <thetext>Created attachment 326982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371810</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-15 07:27:45 -0800</bug_when>
    <thetext>Attachment 326982 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:172:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372552</commentid>
    <comment_count>4</comment_count>
      <attachid>327052</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2017-11-16 01:24:24 -0800</bug_when>
    <thetext>Created attachment 327052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372553</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-16 01:27:05 -0800</bug_when>
    <thetext>Attachment 327052 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:176:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372568</commentid>
    <comment_count>6</comment_count>
      <attachid>327052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-16 04:22:51 -0800</bug_when>
    <thetext>Comment on attachment 327052
Patch

Clearing flags on attachment: 327052

Committed r224912: &lt;https://trac.webkit.org/changeset/224912&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372569</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-16 04:22:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372570</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-16 04:23:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/35586444&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316846</attachid>
            <date>2017-08-01 05:25:27 -0700</date>
            <delta_ts>2017-11-15 07:26:04 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>gc3d.patch</filename>
            <type>text/plain</type>
            <size>96951</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDQxZmZl
OGY0Y2UzLi43NWU0MTA2ODViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJl
TWFwcGVyLmNtYWtlCkBAIC0xNyw2ICsxNyw3IEBAIGlmIChVU0VfVEVYVFVSRV9NQVBQRVJfR0wp
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9DbGlwU3RhY2suY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKICAgICApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRl
eCAwZjgyZTAxNjBlNC4uNmZmNWMzMWM1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzIzLDcgKzcyMyw2IEBA
IHB1YmxpYzoKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVu
LAogICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKLSAgICAgICAgUmVuZGVyVG9D
dXJyZW50R0xDb250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRleHRMb3N0Q2FsbGJhY2sg
ewpAQCAtNzQyLDcgKzc0MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pOwogCiAgICAgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0
cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLSAg
ICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVGb3JDdXJyZW50R0xDb250
ZXh0KCk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IDc5YmY4NmM2ZmFjLi40M2RmNTYzODBjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC00MCwxNCArNDAsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCi0gICAgOiBtX3JlbmRlclN0eWxl
KHJlbmRlclN0eWxlKQogewogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0g
R0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0OgotICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdzoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaAppbmRleCA3MThiYWVlMTViNC4uMWI0MjI4NmRkZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5oCkBAIC0zNCwxMSArMzQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4
dCgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKCkg
eyByZXR1cm4gbV9yZW5kZXJTdHlsZTsgfQotCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSBtX3JlbmRlclN0eWxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJv
LmNwcAppbmRleCBmMzAzOTBmZjRlNS4uNGJkODg0NjdlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dDNEQ2Fpcm8uY3BwCkBAIC0yMjAsMTQgKzIyMCw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
SG9zCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotI2lmIFVT
RShURVhUVVJFX01BUFBFUikKLSAgICBpZiAobV90ZXhtYXBMYXllci0+cmVuZGVyU3R5bGUoKSA9
PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
aWYgKG1fcHJpdmF0ZS0+cmVuZGVyU3R5bGUoKSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UuY3BwCmluZGV4IDk2YjU0MjBjMTk4Li43MmUyMTNiZTFjNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAtMTAxLDYgKzEw
MSw3IEBACiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogI2luY2x1ZGUgIkJpdG1hcFRleHR1
cmVHTC5oIgogI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVQb29sLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKICNpZiBVU0Uo
Q0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkBAIC02MDgsMTAgKzYwOSwx
MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnB1c2hUZXh0dXJlVG9D
b21wb3NpdG9yKCkKICAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKEdTVF9WSURFT19JTkZPX1dJ
RFRIKCZ2aWRlb0luZm8pLCBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbykpOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gYnVmZmVy
ID0gbV9wbGF0Zm9ybUxheWVyUHJveHktPmdldEF2YWlsYWJsZUJ1ZmZlcihzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6RE9OVF9DQVJFKTsKICAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX2NvbnRleHQzRCkpCi0gICAgICAgICAgICBtX2NvbnRleHQz
RCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVz
KCksIG51bGxwdHIsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQp
OworICAgICAgICBUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMgY29udGV4dEF0dHJpYnV0
ZXM7CisgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmluaXRpYWxpemUoKTsKIAotICAgICAgICBh
dXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZSgqbV9jb250ZXh0M0QpOworICAg
ICAgICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShjb250ZXh0QXR0cmli
dXRlcyk7CiAgICAgICAgIHRleHR1cmUtPnJlc2V0KHNpemUsIEdTVF9WSURFT19JTkZPX0hBU19B
TFBIQSgmdmlkZW9JbmZvKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBU
ZXh0dXJlOjpOb0ZsYWcpOwogICAgICAgICBidWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwCmluZGV4IDM2
N2EzOGY1OTk1Li5jNGU4YzE2NjM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVy
ZUNvcGllckdTdHJlYW1lci5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpZiBVU0UoR1NUUkVBTUVS
X0dMKQogCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0uaCIKIApAQCAtMzUsMTggKzM2LDE1IEBAIFZpZGVvVGV4dHVyZUNv
cGllckdTdHJlYW1lcjo6VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyKENvbG9yQ29udmVyc2lv
biBjb2xvckNvCiAgICAgQVNTRVJUKHByZXZpb3VzQ29udGV4dCk7CiAgICAgUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpOworICAgIG1fc2hhZGVyUHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmUpOwogCi0gICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmNyZWF0ZSgqbV9jb250ZXh0M0QsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpUZXh0dXJlKTsKLQotICAgIG1fZnJhbWVidWZmZXIgPSBtX2NvbnRleHQzRC0+Y3JlYXRlRnJh
bWVidWZmZXIoKTsKLQotICAgIG1fcmVzdWx0VGV4dHVyZSA9IG1fY29udGV4dDNELT5jcmVhdGVU
ZXh0dXJlKCk7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZnJhbWVidWZmZXIpOworICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1fcmVzdWx0VGV4dHVyZSk7CiAKICAgICBzdGF0aWMgY29uc3Qg
R0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07Ci0gICAgbV92
Ym8gPSBtX2NvbnRleHQzRC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92Ym8pOwotICAgIG1fY29u
dGV4dDNELT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVv
ZihHQzNEZmxvYXQpICogOCwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJB
Vyk7CisgICAgZ2xHZW5CdWZmZXJzKDEsICZtX3Zibyk7CisgICAgZ2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92Ym8pOworICAgIGdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNp
emVvZihHTGZsb2F0KSAqIDgsIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CiAKICAgICB1cGRh
dGVDb2xvckNvbnZlcnNpb25NYXRyaXgoY29sb3JDb252ZXJzaW9uKTsKICAgICB1cGRhdGVUZXh0
dXJlU3BhY2VNYXRyaXgoKTsKQEAgLTU5LDExICs1NywxMCBAQCBWaWRlb1RleHR1cmVDb3BpZXJH
U3RyZWFtZXI6On5WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIoKQogICAgIEdMQ29udGV4dCog
cHJldmlvdXNDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CiAgICAgUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgbV9jb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVy
KG1fZnJhbWVidWZmZXIpOwotICAgIG1fY29udGV4dDNELT5kZWxldGVCdWZmZXIobV92Ym8pOwot
ICAgIG1fY29udGV4dDNELT5kZWxldGVUZXh0dXJlKG1fcmVzdWx0VGV4dHVyZSk7CisgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZnJhbWVidWZmZXIpOworICAgIGdsRGVsZXRlQnVmZmVy
cygxLCAmbV92Ym8pOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fcmVzdWx0VGV4dHVyZSk7
CiAgICAgbV9zaGFkZXJQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2NvbnRleHQzRCA9IG51bGxw
dHI7CiAKICAgICBpZiAocHJldmlvdXNDb250ZXh0KQogICAgICAgICBwcmV2aW91c0NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTUwLDYwICsxNDcsNjAgQEAgYm9vbCBWaWRlb1Rl
eHR1cmVDb3BpZXJHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQ
bGF0Zm9ybTNET2IKICAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICAv
LyBTYXZlIHByZXZpb3VzIGJvdW5kIGZyYW1lYnVmZmVyLCB0ZXh0dXJlIGFuZCB2aWV3cG9ydC4K
LSAgICBHQzNEaW50IGJvdW5kRnJhbWVidWZmZXIgPSAwOwotICAgIEdDM0RpbnQgYm91bmRUZXh0
dXJlID0gMDsKLSAgICBHQzNEaW50IHByZXZpb3VzVmlld3BvcnRbNF0gPSB7IDAsIDAsIDAsIDB9
OwotICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQklORElORywgJmJvdW5kRnJhbWVidWZmZXIpOwotICAgIG1fY29udGV4dDNELT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJELCAmYm91bmRUZXh0
dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JULCBwcmV2aW91c1ZpZXdwb3J0KTsKKyAgICBHTGludCBib3VuZEZyYW1lYnVmZmVyID0g
MDsKKyAgICBHTGludCBib3VuZFRleHR1cmUgPSAwOworICAgIEdMaW50IHByZXZpb3VzVmlld3Bv
cnRbNF0gPSB7IDAsIDAsIDAsIDB9OworICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJf
QklORElORywgJmJvdW5kRnJhbWVidWZmZXIpOworICAgIGdsR2V0SW50ZWdlcnYoR0xfVEVYVFVS
RV9CSU5ESU5HXzJELCAmYm91bmRUZXh0dXJlKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQ
T1JULCBwcmV2aW91c1ZpZXdwb3J0KTsKIAogICAgIC8vIFVzZSBvdXIgb3duIG91dHB1dCB0ZXh0
dXJlIGlmIHdlIGFyZSBub3QgZ2l2ZW4gb25lLgogICAgIGlmICghb3V0cHV0VGV4dHVyZSkKICAg
ICAgICAgb3V0cHV0VGV4dHVyZSA9IG1fcmVzdWx0VGV4dHVyZTsKIAogICAgIC8vIFNldCBwcm9w
ZXIgcGFyYW1ldGVycyB0byB0aGUgb3V0cHV0IHRleHR1cmUgYW5kIGFsbG9jYXRlIHVuaW5pdGlh
bGl6ZWQgbWVtb3J5IGZvciBpdC4KLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUob3V0cHV0
VGFyZ2V0LCBvdXRwdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0M0Qt
PnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Up
OwotICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChv
dXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKyAgICBnbEJpbmRUZXh0dXJl
KG91dHB1dFRhcmdldCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhJbWFnZTJEKG91dHB1dFRhcmdldCwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBm
b3JtYXQsIHR5cGUsIG51bGxwdHIpOwogCiAgICAgLy8gQmluZCBmcmFtZWJ1ZmZlciB0byBwYWlu
dCBhbmQgYXR0YWNoIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIHRvIGl0LgotICAgIG1fY29udGV4
dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zy
YW1lYnVmZmVyKTsKLSAgICBtX2NvbnRleHQzRC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIDApOworICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKKyAgICBnbEZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV8yRCwgb3V0cHV0VGV4dHVyZSwgMCk7CiAKICAgICAvLyBTZXQgcHJvcGVyIHdyYXAgcGFyYW1l
dGVyIHRvIHRoZSBzb3VyY2UgdGV4dHVyZS4KLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgaW5wdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250
ZXh0M0QtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOwotICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIGlucHV0VGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CiAKICAgICAvLyBTZXQgdGhlIHZpZXdwb3J0LgotICAgIG1fY29udGV4dDNELT52
aWV3cG9ydCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBnbFZp
ZXdwb3J0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogCiAgICAgLy8g
U2V0IHByb2dyYW0gcGFyYW1ldGVycy4KLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShtX3No
YWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKG1f
c2hhZGVyUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOworICAgIGdsVXNlUHJvZ3JhbSht
X3NoYWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbFVuaWZvcm0xaShtX3NoYWRlclBy
b2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKICAgICBtX3NoYWRlclByb2dyYW0tPnNldE1h
dHJpeChtX3NoYWRlclByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIG1fbW9kZWxW
aWV3TWF0cml4KTsKICAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclByb2dy
YW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBtX3Byb2plY3Rpb25NYXRyaXgpOwogICAg
IG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZVNwYWNl
TWF0cml4TG9jYXRpb24oKSwgbV90ZXh0dXJlU3BhY2VNYXRyaXgpOwogICAgIG1fc2hhZGVyUHJv
Z3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZUNvbG9yU3BhY2VNYXRyaXhM
b2NhdGlvbigpLCBtX2NvbG9yQ29udmVyc2lvbk1hdHJpeCk7CiAKICAgICAvLyBQZXJmb3JtIHRo
ZSBjb3B5LgotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NoYWRl
clByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmJvKTsKLSAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCks
IDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIG1fY29udGV4
dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwot
ICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIDApOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFk
ZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3Jh
bSgwKTsKKyAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV92Ym8p
OworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0
aW9uKCksIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7
CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpKTsKKyAgICBnbFVzZVByb2dyYW0oMCk7CiAKICAgICAvLyBSZXN0b3JlIHByZXZp
b3VzIGJpbmRpbmdzIGFuZCB2aWV3cG9ydC4KLSAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgYm91bmRGcmFtZWJ1ZmZlcik7Ci0g
ICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKG91dHB1dFRhcmdldCwgYm91bmRUZXh0dXJlKTsK
LSAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQocHJldmlvdXNWaWV3cG9ydFswXSwgcHJldmlvdXNW
aWV3cG9ydFsxXSwgcHJldmlvdXNWaWV3cG9ydFsyXSwgcHJldmlvdXNWaWV3cG9ydFszXSk7Cisg
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVidWZmZXIpOwor
ICAgIGdsQmluZFRleHR1cmUob3V0cHV0VGFyZ2V0LCBib3VuZFRleHR1cmUpOworICAgIGdsVmll
d3BvcnQocHJldmlvdXNWaWV3cG9ydFswXSwgcHJldmlvdXNWaWV3cG9ydFsxXSwgcHJldmlvdXNW
aWV3cG9ydFsyXSwgcHJldmlvdXNWaWV3cG9ydFszXSk7CiAKLSAgICBib29sIG9rID0gKG1fY29u
dGV4dDNELT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CisgICAg
Ym9vbCBvayA9IChnbEdldEVycm9yKCkgPT0gR0xfTk9fRVJST1IpOwogCiAgICAgLy8gUmVzdG9y
ZSBwcmV2aW91cyBjb250ZXh0LgogICAgIHByZXZpb3VzQ29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgKaW5k
ZXggNzU4NTBmZDFiMDQuLjMzZDdhZGFjMjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4
dHVyZUNvcGllckdTdHJlYW1lci5oCkBAIC0yMiw4ICsyMiwxNyBAQAogCiAjaWYgVVNFKEdTVFJF
QU1FUl9HTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1h
Z2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5
L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
ZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MCwxNyArNDksMTYgQEAgcHVibGljOgogICAgIFZpZGVvVGV4dHVyZUNvcGll
ckdTdHJlYW1lcihDb2xvckNvbnZlcnNpb24pOwogICAgIH5WaWRlb1RleHR1cmVDb3BpZXJHU3Ry
ZWFtZXIoKTsKIAotICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlLCBJbnRTaXplJiBmcmFtZVNpemUsIFBsYXRmb3Jt
M0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBib29sIGZsaXBZLCBJbWFnZU9yaWVudGF0aW9uJiBzb3VyY2VPcmllbnRhdGlvbik7Cisg
ICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR0x1aW50IGlucHV0VGV4
dHVyZSwgSW50U2l6ZSYgZnJhbWVTaXplLCBHTHVpbnQgb3V0cHV0VGV4dHVyZSwgR0xlbnVtIG91
dHB1dFRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEltYWdlT3JpZW50YXRpb24mIHNvdXJjZU9y
aWVudGF0aW9uKTsKICAgICB2b2lkIHVwZGF0ZUNvbG9yQ29udmVyc2lvbk1hdHJpeChDb2xvckNv
bnZlcnNpb24pOwogICAgIHZvaWQgdXBkYXRlVGV4dHVyZVNwYWNlTWF0cml4KCk7CiAgICAgdm9p
ZCB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgcmVz
dWx0VGV4dHVyZSgpIHsgcmV0dXJuIG1fcmVzdWx0VGV4dHVyZTsgfQorICAgIEdMdWludCByZXN1
bHRUZXh0dXJlKCkgeyByZXR1cm4gbV9yZXN1bHRUZXh0dXJlOyB9CiAKIHByaXZhdGU6Ci0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKICAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IG1fc2hhZGVyUHJvZ3JhbTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fZnJhbWVidWZmZXIgeyAwIH07Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZibyB7IDAg
fTsKKyAgICBHTHVpbnQgbV9mcmFtZWJ1ZmZlciB7IDAgfTsKKyAgICBHTHVpbnQgbV92Ym8geyAw
IH07CiAgICAgYm9vbCBtX2ZsaXBZIHsgZmFsc2UgfTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb247CiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC01OCw3ICs2Niw3IEBAIHByaXZh
dGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fdGV4dHVyZVNwYWNlTWF0cml4OwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fY29sb3JDb252ZXJzaW9uTWF0cml4OwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9yZXN1bHRUZXh0dXJlIHsgMCB9OworICAgIEdMdWludCBtX3Jlc3VsdFRleHR1cmUgeyAwIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA0NzU1NjhjYmRhYi4uM2ZmODU5NTdiY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTMy
LDE5ICsxMzIsNiBAQCBzdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hh
ciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xD
b250ZXh0KCkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29u
dGV4dDNEKHsgfSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4
dCkpOwotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBpZiAoIWNvbnRleHQtPm1fdGV4bWFw
TGF5ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICBpZiAoIWNvbnRleHQt
Pm1fcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLSAgICByZXR1cm4g
V1RGTW92ZShjb250ZXh0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewog
ICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHAKaW5kZXggZjJlZDAxYmY5ZjAuLmI3YzI5NGE5YTE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZUdMLmNwcApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTU3LDI2ICs1NiwyNiBAQCBCaXRtYXBUZXh0
dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHRleHR1cmUpOwogfQogCi1CaXRtYXBU
ZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29u
dGV4dDNELCBjb25zdCBGbGFncyBmbGFncywgR0MzRGludCBpbnRlcm5hbEZvcm1hdCkKLSAgICA6
IG1fY29udGV4dDNEKFdURk1vdmUoY29udGV4dDNEKSkKK0JpdG1hcFRleHR1cmVHTDo6Qml0bWFw
VGV4dHVyZUdMKGNvbnN0IFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcyYgY29udGV4dEF0
dHJpYnV0ZXMsIGNvbnN0IEZsYWdzIGZsYWdzLCBHTGludCBpbnRlcm5hbEZvcm1hdCkKKyAgICA6
IG1fY29udGV4dEF0dHJpYnV0ZXMoY29udGV4dEF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKGludGVy
bmFsRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpET05UX0NBUkUpIHsKKyAgICBpZiAoaW50
ZXJuYWxGb3JtYXQgIT0gR0xfRE9OVF9DQVJFKSB7CiAgICAgICAgIG1faW50ZXJuYWxGb3JtYXQg
PSBtX2Zvcm1hdCA9IGludGVybmFsRm9ybWF0OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKGZsYWdzICYgRkJPQXR0YWNobWVudCkKLSAgICAgICAgbV9pbnRlcm5hbEZvcm1hdCA9
IG1fZm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIG1faW50ZXJuYWxG
b3JtYXQgPSBtX2Zvcm1hdCA9IEdMX1JHQkE7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIElmIEdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBpcyBzdXBwb3J0ZWQgaW4gdGhlIE9wZW5HTEVT
CiAgICAgICAgIC8vIGludGVybmFsIGFuZCBleHRlcm5hbCBmb3JtYXRzIG5lZWQgdG8gYmUgQkdS
QQotICAgICAgICBtX2ludGVybmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0g
ICAgICAgIG1fZm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkE7Ci0gICAgICAgIGlmICht
X2NvbnRleHQzRC0+aXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9jb250
ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JH
UkE4ODg4IikpCi0gICAgICAgICAgICAgICAgbV9pbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCR1JBOworICAgICAgICBtX2ludGVybmFsRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAg
ICAgbV9mb3JtYXQgPSBHTF9CR1JBOworICAgICAgICBpZiAobV9jb250ZXh0QXR0cmlidXRlcy5p
c0dMRVMyQ29tcGxpYW50KSB7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0QXR0cmlidXRlcy5z
dXBwb3J0c0JHUkE4ODg4KQorICAgICAgICAgICAgICAgIG1faW50ZXJuYWxGb3JtYXQgPSBHTF9C
R1JBOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICAgICAgICAgbV9mb3JtYXQgPSBHTF9SR0JBOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtOTEsNTkgKzkwLDQ5IEBAIHN0YXRpYyB2b2lkIHN3aXp6
bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3Ry
aWRlID0KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKGNvbnRleHQtPmlzR0xFUzJDb21w
bGlhbnQoKSkgewotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1N1YkltYWdlID0gY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9FWFRfdW5wYWNrX3N1YmltYWdlIik7Ci0g
ICAgICAgIHJldHVybiBzdXBwb3J0c1N1YkltYWdlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogewogICAgIGlmICghbV9p
ZCkKLSAgICAgICAgbV9pZCA9IG1fY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpOwogCiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiAg
ICAgaWYgKG1fdGV4dHVyZVNpemUgPT0gY29udGVudFNpemUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV90ZXh0dXJlU2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgbV9jb250ZXh0M0QtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKLSAgICBtX2Nv
bnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7Ci0gICAgbV9jb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQz
RC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKTsKKyAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwogCi0gICAg
bV9jb250ZXh0M0QtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIG1faW50ZXJuYWxGb3JtYXQsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSwgMCwgbV9mb3JtYXQsIG1fdHlwZSwgMCk7CisgICAgZ2xUZXhJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxGb3JtYXQsIG1fdGV4dHVyZVNpemUud2lkdGgo
KSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgbV9mb3JtYXQsIG1fdHlwZSwgMCk7CiB9CiAK
LXZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50c05vU3dpenpsZShjb25zdCB2b2lk
KiBzcmNEYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291
cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lLCB1bnNpZ25lZCBieXRlc1BlclBpeGVsLCBQbGF0
Zm9ybTNET2JqZWN0IGdsRm9ybWF0KQordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRl
bnRzTm9Td2l6emxlKGNvbnN0IHZvaWQqIHNyY0RhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIHVuc2ln
bmVkIGJ5dGVzUGVyUGl4ZWwsIEdMdWludCBnbEZvcm1hdCkKIHsKLSAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOworICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCk7CiAgICAgLy8gRm9yIEVTIGRyaXZlcnMg
dGhhdCBkb24ndCBzdXBwb3J0IHN1Yi1pbWFnZXMuCi0gICAgaWYgKGRyaXZlclN1cHBvcnRzU3Vi
SW1hZ2UobV9jb250ZXh0M0QuZ2V0KCkpKSB7CisgICAgaWYgKG1fY29udGV4dEF0dHJpYnV0ZXMu
c3VwcG9ydHNVbnBhY2tTdWJpbWFnZSkgewogICAgICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWIt
aW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgICAg
ICBtX2NvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19ST1df
TEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsKLSAgICAgICAgbV9jb250ZXh0
M0QtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfU0tJUF9ST1dTLCBzb3Vy
Y2VPZmZzZXQueSgpKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgICAg
ICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRl
c1BlclBpeGVsKTsKKyAgICAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBz
b3VyY2VPZmZzZXQueSgpKTsKKyAgICAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9Q
SVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOwogICAgIH0KIAotICAgIG1fY29udGV4dDNELT50ZXhT
dWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0Lngo
KSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQo
KSwgZ2xGb3JtYXQsIG1fdHlwZSwgc3JjRGF0YSk7CisgICAgZ2xUZXhTdWJJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53
aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgbV90eXBlLCBzcmNEYXRhKTsK
IAogICAgIC8vIEZvciBFUyBkcml2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzdWItaW1hZ2VzLgot
ICAgIGlmIChkcml2ZXJTdXBwb3J0c1N1YkltYWdlKG1fY29udGV4dDNELmdldCgpKSkgewotICAg
ICAgICBtX2NvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19S
T1dfTEVOR1RILCAwKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfU0tJUF9ST1dTLCAwKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfU0tJUF9QSVhFTFMsIDApOworICAg
IGlmIChtX2NvbnRleHRBdHRyaWJ1dGVzLnN1cHBvcnRzVW5wYWNrU3ViaW1hZ2UpIHsKKyAgICAg
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CisgICAgICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7CisgICAgICAgIGdsUGl4ZWxTdG9yZWko
R0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKICAgICB9CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBzcmNEYXRhLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5l
LCBVcGRhdGVDb250ZW50c0ZsYWcgdXBkYXRlQ29udGVudHNGbGFnKQogewotICAgIG1fY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7Cisg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKTsKIAogICAgIGNvbnN0IHVuc2ln
bmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwogICAgIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihjb25zdF9jYXN0PHZvaWQqPihzcmNEYXRhKSk7CkBAIC0xNTEsMTEgKzE0MCwxMSBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogc3JjRGF0
YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UgogICAgIEludFBvaW50IGFkanVzdGVkU291cmNlT2Zm
c2V0ID0gc291cmNlT2Zmc2V0OwogCiAgICAgLy8gVGV4dHVyZSB1cGxvYWQgcmVxdWlyZXMgc3Vi
aW1hZ2UgYnVmZmVyIGlmIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgc3ViaW1hZ2UgYW5kIHdlIGRv
bid0IGhhdmUgZnVsbCBpbWFnZSB1cGxvYWQuCi0gICAgYm9vbCByZXF1aXJlU3ViSW1hZ2VCdWZm
ZXIgPSAhZHJpdmVyU3VwcG9ydHNTdWJJbWFnZShtX2NvbnRleHQzRC5nZXQoKSkKKyAgICBib29s
IHJlcXVpcmVTdWJJbWFnZUJ1ZmZlciA9ICFtX2NvbnRleHRBdHRyaWJ1dGVzLnN1cHBvcnRzVW5w
YWNrU3ViaW1hZ2UKICAgICAgICAgJiYgIShieXRlc1BlckxpbmUgPT0gc3RhdGljX2Nhc3Q8aW50
Pih0YXJnZXRSZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsKSAmJiBhZGp1c3RlZFNvdXJjZU9m
ZnNldCA9PSBJbnRQb2ludDo6emVybygpKTsKIAogICAgIC8vIHByZXBhcmUgdGVtcG9yYXJ5RGF0
YSBpZiBuZWNlc3NhcnkKLSAgICBpZiAoKG1fZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBICYmIHVwZGF0ZUNvbnRlbnRzRmxhZyA9PSBVcGRhdGVDYW5ub3RNb2RpZnlPcmlnaW5hbElt
YWdlRGF0YSkgfHwgcmVxdWlyZVN1YkltYWdlQnVmZmVyKSB7CisgICAgaWYgKChtX2Zvcm1hdCA9
PSBHTF9SR0JBICYmIHVwZGF0ZUNvbnRlbnRzRmxhZyA9PSBVcGRhdGVDYW5ub3RNb2RpZnlPcmln
aW5hbEltYWdlRGF0YSkgfHwgcmVxdWlyZVN1YkltYWdlQnVmZmVyKSB7CiAgICAgICAgIHRlbXBv
cmFyeURhdGEucmVzaXplKHRhcmdldFJlY3Qud2lkdGgoKSAqIHRhcmdldFJlY3QuaGVpZ2h0KCkg
KiBieXRlc1BlclBpeGVsKTsKICAgICAgICAgZGF0YSA9IHRlbXBvcmFyeURhdGEuZGF0YSgpOwog
ICAgICAgICBjb25zdCBjaGFyKiBiaXRzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHNyY0Rh
dGEpOwpAQCAtMTcyLDcgKzE2MSw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250
ZW50cyhjb25zdCB2b2lkKiBzcmNEYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSCiAgICAgICAg
IGFkanVzdGVkU291cmNlT2Zmc2V0ID0gSW50UG9pbnQoMCwgMCk7CiAgICAgfQogCi0gICAgaWYg
KG1fZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQorICAgIGlmIChtX2Zvcm1hdCA9
PSBHTF9SR0JBKQogICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0X3B0
cjx1aW50MzJfdCo+KGRhdGEpLCBJbnRSZWN0KGFkanVzdGVkU291cmNlT2Zmc2V0LCB0YXJnZXRS
ZWN0LnNpemUoKSksIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwogCiAgICAgdXBkYXRl
Q29udGVudHNOb1N3aXp6bGUoZGF0YSwgdGFyZ2V0UmVjdCwgYWRqdXN0ZWRTb3VyY2VPZmZzZXQs
IGJ5dGVzUGVyTGluZSwgYnl0ZXNQZXJQaXhlbCwgbV9mb3JtYXQpOwpAQCAtMjY4LDEzICsyNTcs
MTMgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxpemVTdGVuY2lsKCkKICAgICBpZiAo
bV9yYm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmJvID0gbV9jb250ZXh0M0QtPmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpOwotICAgIG1fY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKLSAgICBtX2NvbnRleHQzRC0+cmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgbV9jb250ZXh0M0QtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9yYm8pOwotICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAg
bV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQp
OworICAgIGdsQ3JlYXRlUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pOworICAgIGdsQmluZFJlbmRl
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKTsKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBnbEJpbmRSZW5kZXJidWZmZXIoR0xf
UkVOREVSQlVGRkVSLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pOwor
ICAgIGdsQ2xlYXJTdGVuY2lsKDApOworICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklU
KTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxpemVEZXB0aEJ1ZmZlcigpCkBA
IC0yODIsMTEgKzI3MSwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZURlcHRo
QnVmZmVyKCkKICAgICBpZiAobV9kZXB0aEJ1ZmZlck9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kZXB0aEJ1ZmZlck9iamVjdCA9IG1fY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZm
ZXIoKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyT2JqZWN0KTsKLSAgICBtX2NvbnRleHQzRC0+
cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgbV9jb250ZXh0M0Qt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXJPYmplY3QpOworICAgIGdsQ3JlYXRlUmVuZGVyYnVm
ZmVycygxLCAmbV9kZXB0aEJ1ZmZlck9iamVjdCk7CisgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlck9iamVjdCk7CisgICAgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIG1fdGV4dHVyZVNp
emUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisgICAgZ2xCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2Rl
cHRoQnVmZmVyT2JqZWN0KTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVk
ZWQoKQpAQCAtMjk1LDkgKzI4NCw5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVl
ZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jbGlwU3RhY2sucmVzZXQoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBtX3RleHR1cmVTaXplKSwgQ2xpcFN0YWNrOjpZQXhpc01vZGU6OkRl
ZmF1bHQpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5SWZOZWVkZWQoKm1fY29udGV4dDNEKTsKLSAg
ICBtX2NvbnRleHQzRC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQzRC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworICAgIG1fY2xpcFN0
YWNrLmFwcGx5SWZOZWVkZWQoKTsKKyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAg
Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKICAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7
CiB9CiAKQEAgLTMwNiwzNSArMjk1LDM1IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjcmVhdGVG
Ym9JZk5lZWRlZCgpCiAgICAgaWYgKG1fZmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zi
byA9IG1fY29udGV4dDNELT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dDNELT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0g
ICAgbV9jb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwgMCk7CisgICAgZ2xDcmVhdGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgpLCAwKTsKICAgICBtX3Nob3VsZENsZWFy
ID0gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmRBc1N1cmZhY2UoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzRCkKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kQXNTdXJm
YWNlKCkKIHsKLSAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwogICAg
IGNyZWF0ZUZib0lmTmVlZGVkKCk7Ci0gICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgY29udGV4dDNELT52aWV3
cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkp
OworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgZ2xW
aWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0
KCkpOwogICAgIGNsZWFySWZOZWVkZWQoKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgqbV9jb250
ZXh0M0QpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CiB9CiAKIEJpdG1hcFRleHR1cmVHTDo6
fkJpdG1hcFRleHR1cmVHTCgpCiB7CiAgICAgaWYgKG1faWQpCi0gICAgICAgIG1fY29udGV4dDNE
LT5kZWxldGVUZXh0dXJlKG1faWQpOworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lk
KTsKIAogICAgIGlmIChtX2ZibykKLSAgICAgICAgbV9jb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVm
ZmVyKG1fZmJvKTsKKyAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKIAog
ICAgIGlmIChtX3JibykKLSAgICAgICAgbV9jb250ZXh0M0QtPmRlbGV0ZVJlbmRlcmJ1ZmZlciht
X3Jibyk7CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pOwogCiAgICAg
aWYgKG1fZGVwdGhCdWZmZXJPYmplY3QpCi0gICAgICAgIG1fY29udGV4dDNELT5kZWxldGVSZW5k
ZXJidWZmZXIobV9kZXB0aEJ1ZmZlck9iamVjdCk7CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmbV9kZXB0aEJ1ZmZlck9iamVjdCk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdM
Ojppc1ZhbGlkKCkgY29uc3QKQEAgLTM0OCwzMSArMzM3LDMyIEBAIEludFNpemUgQml0bWFwVGV4
dHVyZUdMOjpzaXplKCkgY29uc3QKIH0KIAogCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6Y29weUZy
b21FeHRlcm5hbFRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCBzb3VyY2VUZXh0dXJlSUQpCit2b2lk
IEJpdG1hcFRleHR1cmVHTDo6Y29weUZyb21FeHRlcm5hbFRleHR1cmUoR0x1aW50IHNvdXJjZVRl
eHR1cmVJRCkKIHsKLSAgICBHQzNEaW50IGJvdW5kVGV4dHVyZSA9IDA7Ci0gICAgR0MzRGludCBi
b3VuZEZyYW1lYnVmZmVyID0gMDsKLSAgICBHQzNEaW50IGJvdW5kQWN0aXZlVGV4dHVyZSA9IDA7
Ci0KLSAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQklORElOR18yRCwgJmJvdW5kVGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91bmRGcmFtZWJ1
ZmZlcik7Ci0gICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpB
Q1RJVkVfVEVYVFVSRSwgJmJvdW5kQWN0aXZlVGV4dHVyZSk7Ci0KLSAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNvdXJjZVRleHR1cmVJ
RCk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNvcHlGYm8gPSBtX2NvbnRleHQzRC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgY29weUZibyk7Ci0gICAgbV9jb250ZXh0M0QtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgc291cmNlVGV4dHVyZUlELCAwKTsKLQotICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpZCgpKTsKLSAgICBtX2NvbnRleHQz
RC0+Y29weVRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAs
IDAsIDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGJvdW5kVGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVidWZmZXIpOwotICAgIG1f
Y29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgYm91
bmRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShib3VuZEFjdGl2ZVRl
eHR1cmUpOwotICAgIG1fY29udGV4dDNELT5kZWxldGVGcmFtZWJ1ZmZlcihjb3B5RmJvKTsKKyAg
ICBHTGludCBib3VuZFRleHR1cmUgPSAwOworICAgIEdMaW50IGJvdW5kRnJhbWVidWZmZXIgPSAw
OworICAgIEdMaW50IGJvdW5kQWN0aXZlVGV4dHVyZSA9IDA7CisKKyAgICBnbEdldEludGVnZXJ2
KEdMX1RFWFRVUkVfQklORElOR18yRCwgJmJvdW5kVGV4dHVyZSk7CisgICAgZ2xHZXRJbnRlZ2Vy
dihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91bmRGcmFtZWJ1ZmZlcik7CisgICAgZ2xHZXRJ
bnRlZ2VydihHTF9BQ1RJVkVfVEVYVFVSRSwgJmJvdW5kQWN0aXZlVGV4dHVyZSk7CisKKyAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZVRleHR1cmVJRCk7CisKKyAgICBHTHVp
bnQgY29weUZibyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmNvcHlGYm8pOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBjb3B5RmJvKTsKKyAgICBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
VEVYVFVSRV8yRCwgc291cmNlVGV4dHVyZUlELCAwKTsKKworICAgIGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBpZCgpKTsKKyAg
ICBnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJvdW5kVGV4dHVyZSk7CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVidWZmZXIpOworICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgYm91bmRUZXh0dXJlKTsKKyAgICBnbEFjdGl2ZVRleHR1cmUoYm91bmRB
Y3RpdmVUZXh0dXJlKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmY29weUZibyk7CiB9
CiAKIH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmgKaW5kZXggYWJiZmJk
ZTMyY2YuLjc0MDkwYTRkZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5oCkBAIC0yNiw5ICsyNiwxMCBA
QAogI2luY2x1ZGUgIkJpdG1hcFRleHR1cmUuaCIKICNpbmNsdWRlICJDbGlwU3RhY2suaCIKICNp
bmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyR0xIZWFkZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsOSAr
MzksOSBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb247CiAKIGNsYXNzIEJpdG1hcFRleHR1cmVHTCA6
IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJpdG1hcFRl
eHR1cmU+IGNyZWF0ZShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dDNELCBjb25zdCBG
bGFncyBmbGFncyA9IE5vRmxhZywgR0MzRGludCBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpET05UX0NBUkUpCisgICAgc3RhdGljIFJlZjxCaXRtYXBUZXh0dXJlPiBjcmVhdGUo
Y29uc3QgVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzJiBjb250ZXh0QXR0cmlidXRlcywg
Y29uc3QgRmxhZ3MgZmxhZ3MgPSBOb0ZsYWcsIEdMaW50IGludGVybmFsRm9ybWF0ID0gR0xfRE9O
VF9DQVJFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQml0bWFwVGV4dHVy
ZUdMKFdURk1vdmUoY29udGV4dDNEKSwgZmxhZ3MsIGludGVybmFsRm9ybWF0KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEJpdG1hcFRleHR1cmVHTChjb250ZXh0QXR0cmlidXRlcywg
ZmxhZ3MsIGludGVybmFsRm9ybWF0KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Qml0bWFwVGV4
dHVyZUdMKCk7CkBAIC00OCwxNSArNDksMTUgQEAgcHVibGljOgogICAgIEludFNpemUgc2l6ZSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkUmVzZXQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRBc1N1cmZhY2UoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIGJpbmRBc1N1cmZhY2UoKTsKICAgICB2b2lkIGluaXRp
YWxpemVTdGVuY2lsKCk7CiAgICAgdm9pZCBpbml0aWFsaXplRGVwdGhCdWZmZXIoKTsKICAgICB2
aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHVpbnQzMl90
IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVybiBHTF9U
RVhUVVJFXzJEOyB9CiAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dHVyZVNpemU7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFBvaW50JiwgVXBkYXRlQ29udGVudHNGbGFnKSBvdmVycmlkZTsKICAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQs
IGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIFVwZGF0ZUNv
bnRlbnRzRmxhZykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50c05vU3dpenpsZShj
b25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNl
T2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lLCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNCwgUGxh
dGZvcm0zRE9iamVjdCBnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzTm9Td2l6emxlKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIHVu
c2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0LCBHTHVpbnQgZ2xGb3JtYXQgPSBHTF9SR0JBKTsKICAg
ICBib29sIGlzQmFja2VkQnlPcGVuR0woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIm
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgb3ZlcnJpZGU7CkBAIC03NCwzNSArNzUsMzUgQEAg
cHVibGljOgogICAgIGNvbnN0IEZpbHRlckluZm8qIGZpbHRlckluZm8oKSBjb25zdCB7IHJldHVy
biAmbV9maWx0ZXJJbmZvOyB9CiAgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKSB7IHJldHVybiBt
X2NsaXBTdGFjazsgfQogCi0gICAgR0MzRGludCBpbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIG1faW50ZXJuYWxGb3JtYXQ7IH0KKyAgICBHTGludCBpbnRlcm5hbEZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIG1faW50ZXJuYWxGb3JtYXQ7IH0KIAotICAgIHZvaWQgY29weUZyb21FeHRlcm5h
bFRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSUQpOworICAgIHZvaWQgY29weUZyb21F
eHRlcm5hbFRleHR1cmUoR0x1aW50IHRleHR1cmVJRCk7CiAKIHByaXZhdGU6Ci0gICAgQml0bWFw
VGV4dHVyZUdMKFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4mJiwgY29uc3QgRmxhZ3MsIEdDM0Rp
bnQgaW50ZXJuYWxGb3JtYXQpOworICAgIEJpdG1hcFRleHR1cmVHTChjb25zdCBUZXh0dXJlTWFw
cGVyQ29udGV4dEF0dHJpYnV0ZXMmLCBjb25zdCBGbGFncywgR0xpbnQgaW50ZXJuYWxGb3JtYXQp
OwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkIHsgMCB9OworICAgIEdMdWludCBtX2lkIHsg
MCB9OwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm8geyAwIH07Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBtX3JibyB7IDAgfTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZmZXJPYmplY3Qg
eyAwIH07CisgICAgR0x1aW50IG1fZmJvIHsgMCB9OworICAgIEdMdWludCBtX3JibyB7IDAgfTsK
KyAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlck9iamVjdCB7IDAgfTsKICAgICBib29sIG1fc2hvdWxk
Q2xlYXIgeyB0cnVlIH07CiAgICAgQ2xpcFN0YWNrIG1fY2xpcFN0YWNrOwotICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckNvbnRleHRB
dHRyaWJ1dGVzIG1fY29udGV4dEF0dHJpYnV0ZXM7CiAKICAgICB2b2lkIGNsZWFySWZOZWVkZWQo
KTsKICAgICB2b2lkIGNyZWF0ZUZib0lmTmVlZGVkKCk7CiAKICAgICBGaWx0ZXJJbmZvIG1fZmls
dGVySW5mbzsKIAotICAgIEdDM0RpbnQgbV9pbnRlcm5hbEZvcm1hdDsKLSAgICBHQzNEZW51bSBt
X2Zvcm1hdDsKLSAgICBHQzNEZW51bSBtX3R5cGUgeworICAgIEdMaW50IG1faW50ZXJuYWxGb3Jt
YXQ7CisgICAgR0xlbnVtIG1fZm9ybWF0OworICAgIEdMZW51bSBtX3R5cGUgewogI2lmIE9TKERB
UldJTikKICAgICAgICAgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCiAjZWxzZQotICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICBHTF9VTlNJR05FRF9C
WVRFCiAjZW5kaWYKICAgICB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuY3BwCmluZGV4IGMx
OWYzMWJlN2ExLi4xMmM5ZDA2NTFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuY3BwCkBAIC0z
Nyw4ICszNyw4IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgcmVsZWFzZVVudXNlZFNlY29uZHNUb2xl
cmFuY2UgPSAzOwogc3RhdGljIGNvbnN0IFNlY29uZHMgcmVsZWFzZVVudXNlZFRleHR1cmVzVGlt
ZXJJbnRlcnZhbCB7IDUwMF9tcyB9OwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotQml0
bWFwVGV4dHVyZVBvb2w6OkJpdG1hcFRleHR1cmVQb29sKFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4mJiBjb250ZXh0M0QpCi0gICAgOiBtX2NvbnRleHQzRChXVEZNb3ZlKGNvbnRleHQzRCkpCitC
aXRtYXBUZXh0dXJlUG9vbDo6Qml0bWFwVGV4dHVyZVBvb2woY29uc3QgVGV4dHVyZU1hcHBlckNv
bnRleHRBdHRyaWJ1dGVzJiBjb250ZXh0QXR0cmlidXRlcykKKyAgICA6IG1fY29udGV4dEF0dHJp
YnV0ZXMoY29udGV4dEF0dHJpYnV0ZXMpCiAgICAgLCBtX3JlbGVhc2VVbnVzZWRUZXh0dXJlc1Rp
bWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkJpdG1hcFRleHR1cmVQb29sOjpyZWxlYXNl
VW51c2VkVGV4dHVyZXNUaW1lckZpcmVkKQogewogfQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEJp
dG1hcFRleHR1cmVQb29sOjpyZWxlYXNlVW51c2VkVGV4dHVyZXNUaW1lckZpcmVkKCkKIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlUG9vbDo6Y3JlYXRlVGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlOjpGbGFncyBmbGFncykKIHsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0gICAgcmV0dXJuIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKCptX2NvbnRleHQzRCwgZmxhZ3Mp
OworICAgIHJldHVybiBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShtX2NvbnRleHRBdHRyaWJ1dGVz
LCBmbGFncyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmbGFncyk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvQml0bWFwVGV4dHVyZVBvb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5oCmluZGV4IGUyZTExZjE3ZGZmLi4zMWNhZmY3NGZm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0Jp
dG1hcFRleHR1cmVQb29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmgKQEAgLTI4LDE2ICsyOCwxMiBAQAogI2RlZmluZSBC
aXRtYXBUZXh0dXJlUG9vbF9oCiAKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAotI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBJbnRTaXpl
OwogCiBjbGFzcyBCaXRtYXBUZXh0dXJlUG9vbCB7CkBAIC00NSw3ICs0MSw3IEBAIGNsYXNzIEJp
dG1hcFRleHR1cmVQb29sIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgZXhwbGljaXQgQml0bWFwVGV4dHVyZVBv
b2woUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiYmKTsKKyAgICBleHBsaWNpdCBCaXRtYXBUZXh0
dXJlUG9vbChjb25zdCBUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMmKTsKICNlbmRpZgog
CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJlKGNvbnN0IEludFNpemUm
LCBjb25zdCBCaXRtYXBUZXh0dXJlOjpGbGFncyk7CkBAIC02OCw3ICs2NCw3IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZTo6RmxhZ3MpOwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckNvbnRleHRB
dHRyaWJ1dGVzIG1fY29udGV4dEF0dHJpYnV0ZXM7CiAjZW5kaWYKIAogICAgIFZlY3RvcjxFbnRy
eT4gbV90ZXh0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9DbGlwU3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0NsaXBTdGFjay5jcHAKaW5kZXggMTFhMDBiYzhhM2IuLmRhODQwYmY0ZjdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xp
cFN0YWNrLmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkNsaXBTdGFjay5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNjIsMjkgKzYyLDI5IEBAIHZvaWQgQ2xpcFN0YWNrOjpzZXRTdGVuY2lsSW5kZXgoaW50IHN0
ZW5jaWxJbmRleCkKICAgICBjbGlwU3RhdGVEaXJ0eSA9IHRydWU7CiB9CiAKLXZvaWQgQ2xpcFN0
YWNrOjphcHBseShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK3ZvaWQgQ2xpcFN0YWNrOjph
cHBseSgpCiB7CiAgICAgaWYgKGNsaXBTdGF0ZS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY29udGV4dC5zY2lzc29yKGNsaXBTdGF0ZS5zY2lzc29yQm94Lngo
KSwKKyAgICBnbFNjaXNzb3IoY2xpcFN0YXRlLnNjaXNzb3JCb3gueCgpLAogICAgICAgICAoeUF4
aXNNb2RlID09IFlBeGlzTW9kZTo6SW52ZXJ0ZWQpID8gc2l6ZS5oZWlnaHQoKSAtIGNsaXBTdGF0
ZS5zY2lzc29yQm94Lm1heFkoKSA6IGNsaXBTdGF0ZS5zY2lzc29yQm94LnkoKSwKICAgICAgICAg
Y2xpcFN0YXRlLnNjaXNzb3JCb3gud2lkdGgoKSwgY2xpcFN0YXRlLnNjaXNzb3JCb3guaGVpZ2h0
KCkpOwotICAgIGNvbnRleHQuc3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOwotICAgIGNvbnRl
eHQuc3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNp
bEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEpOworICAgIGdsU3RlbmNpbE9w
KEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApOworICAgIGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUws
IGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSk7
CiAgICAgaWYgKGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAgY29udGV4dC5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOworICAgICAgICBnbERpc2Fi
bGUoR0xfU1RFTkNJTF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOworICAgICAgICBnbEVuYWJsZShHTF9TVEVO
Q0lMX1RFU1QpOwogfQogCi12b2lkIENsaXBTdGFjazo6YXBwbHlJZk5lZWRlZChHcmFwaGljc0Nv
bnRleHQzRCYgY29udGV4dCkKK3ZvaWQgQ2xpcFN0YWNrOjphcHBseUlmTmVlZGVkKCkKIHsKICAg
ICBpZiAoIWNsaXBTdGF0ZURpcnR5KQogICAgICAgICByZXR1cm47CiAKICAgICBjbGlwU3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIGFwcGx5KGNvbnRleHQpOworICAgIGFwcGx5KCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9DbGlwU3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9DbGlwU3RhY2suaAppbmRleCAyZmM0MDQ3NWIxYy4uMjY3Y2U0MDk2MDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9DbGlw
U3RhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xp
cFN0YWNrLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKLQogY2xhc3MgQ2xpcFN0YWNrIHsKIHB1YmxpYzoKICAgICBz
dHJ1Y3QgU3RhdGUgewpAQCAtNTYsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGVu
Y2lsSW5kZXgoaW50KTsKICAgICBpbnQgZ2V0U3RlbmNpbEluZGV4KCkgY29uc3QgeyByZXR1cm4g
Y2xpcFN0YXRlLnN0ZW5jaWxJbmRleDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQzRCYpOwotICAgIHZvaWQgYXBwbHlJZk5lZWRlZChHcmFwaGljc0NvbnRleHQzRCYpOworICAg
IHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIGFwcGx5SWZOZWVkZWQoKTsKIAogICAgIGJvb2wgaXND
dXJyZW50U2Npc3NvckJveEVtcHR5KCkgY29uc3QgeyByZXR1cm4gY2xpcFN0YXRlLnNjaXNzb3JC
b3guaXNFbXB0eSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IDI1NGQ3ODY0Y2E2Li41YWQwNGJl
MTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJCaXRt
YXBUZXh0dXJlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVz
M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC03Miw2ICs3MSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgdW5z
aWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihjb25zdCBD
b2xvciYpID0gMDsKIAogICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUg
Zm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFj
ZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgY2xp
cEJvdW5kcygpID0gMDsKICAgICB2aXJ0dWFsIFJlZjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUo
R0MzRGludCBpbnRlcm5hbEZvcm1hdCkgPSAwOworICAgIHZpcnR1YWwgUmVmPEJpdG1hcFRleHR1
cmU+IGNyZWF0ZVRleHR1cmUoaW50IGludGVybmFsRm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYWludGluZyhQYWludEZsYWdzID0gMCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGVuZFBhaW50aW5nKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNDg0
NzdmMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0wLDAgKzEs
MjYgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4
dEF0dHJpYnV0ZXMuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKworI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRleHR1cmVNYXBwZXJDb250ZXh0QXR0
cmlidXRlczo6aW5pdGlhbGl6ZSgpCit7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIGlzR0xF
UzJDb21wbGlhbnQgPSB0cnVlOworI2VuZGlmCisKKyAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9FWFRFTlNJT05T
KSkpOworCisgICAgc3VwcG9ydHNOUE9UVGV4dHVyZXMgPSAhaXNHTEVTMkNvbXBsaWFudCB8fCBl
eHRlbnNpb25zU3RyaW5nLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiR0xfT0VTX3RleHR1cmVfbnBv
dCIpKTsKKyAgICBzdXBwb3J0c0JHUkE4ODg4ID0gZXh0ZW5zaW9uc1N0cmluZy5jb250YWlucyhB
U0NJSUxpdGVyYWwoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpKTsKKyAgICBzdXBw
b3J0c1VucGFja1N1YmltYWdlID0gIWlzR0xFUzJDb21wbGlhbnQgfHwgZXh0ZW5zaW9uc1N0cmlu
Zy5jb250YWlucyhBU0NJSUxpdGVyYWwoIkdMX0VYVF91bnBhY2tfc3ViaW1hZ2UiKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg4ODk4MzY2NWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckNvbnRleHRBdHRyaWJ1dGVzLmgKQEAgLTAsMCArMSwxOSBAQAorI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcyB7CisgICAgdm9pZCBpbml0aWFsaXpl
KCk7CisKKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQgeyBmYWxzZSB9OworCisgICAgYm9vbCBz
dXBwb3J0c05QT1RUZXh0dXJlcyB7IGZhbHNlIH07CisgICAgYm9vbCBzdXBwb3J0c0JHUkE4ODg4
IHsgZmFsc2UgfTsKKyAgICBib29sIHN1cHBvcnRzVW5wYWNrU3ViaW1hZ2UgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNw
cAppbmRleCBmN2ExNTRlNDk0Yi4uMTlkN2FjZmQ4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0yMiwzOCArMjIsMjcgQEAKIAogI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xf
RVNfMikKLSNkZWZpbmUgR0xfR0xFWFRfUFJPVE9UWVBFUyAxCi0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgIkJpdG1h
cFRleHR1cmVHTC5oIgogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTEhlYWRlcnMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZv
cm1MYXllcjo6VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dDNE
JiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fcmVuZGVyU3R5bGUocmVuZGVyU3R5bGUp
CiB7CiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlck9mZnNjcmVlbjoKICAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGlmIChtX3JlbmRlclN0eWxlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pCi0gICAgICAgIG1fcGxhdGZvcm1MYXllclBy
b3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSk7Cisg
ICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eSgpKTsKICNlbmRpZgogfQogCkBAIC02NywxMiArNTYsMTQgQEAgVGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVy
KCkKIAogYm9vbCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpIDogZmFsc2U7CisgICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICByZXR1
cm4gbV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCiBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGxhdGZvcm1Db250
ZXh0KCkKIHsKLSAgICByZXR1cm4gbV9nbENvbnRleHQgPyBtX2dsQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkgOiBHTENvbnRleHQ6OmN1cnJlbnQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
QVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICByZXR1cm4gbV9nbENvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQpAQCAt
ODMsNyArNzQsNiBAQCBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwcm94eSgpCiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdDM0RQbGF0Zm9ybUxheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKIHsKLSAgICBBU1NFUlQo
bV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKTsKICAg
ICBpZiAobV9jb250ZXh0LmxheWVyQ29tcG9zaXRlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEwMSwxMCArOTEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6c3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpCiAjZWxzZQogdm9pZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAoIW1fZ2xDb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOwogCiAgICAgbV9j
b250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllci5oCmluZGV4IGRkM2Y3NGZjZTRlLi5mYTI4MGQzNTA5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaApAQCAtMzksNyAr
MzksNiBAQCBwdWJsaWM6CiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKCkgeyByZXR1cm4gbV9yZW5kZXJTdHls
ZTsgfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRl
OwpAQCAtNTEsNyArNTAsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dDNEJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gbV9nbENvbnRl
eHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAppbmRleCBkMDc5YzdlYjUwNS4uODExY2JkYWRmYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgor
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCkBAIC01MywzNiAr
NTQsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGV4dHVyZU1hcHBlckdMRGF0YSB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4
dHVyZU1hcHBlckdMRGF0YShHcmFwaGljc0NvbnRleHQzRCYpOworICAgIGV4cGxpY2l0IFRleHR1
cmVNYXBwZXJHTERhdGEodm9pZCopOwogICAgIH5UZXh0dXJlTWFwcGVyR0xEYXRhKCk7CiAKICAg
ICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTdGF0
aWNWQk8oR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOwor
ICAgIEdMdWludCBnZXRTdGF0aWNWQk8oR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciwgY29uc3Qg
dm9pZCogZGF0YSk7CiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFk
ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zKTsKIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgVGV4dHVyZU1hcHBlcjo6
UGFpbnRGbGFncyBQYWludEZsYWdzIHsgMCB9OwotICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFt
IHsgMCB9OwotICAgIEdDM0RpbnQgdGFyZ2V0RnJhbWVCdWZmZXIgeyAwIH07CisgICAgR0xpbnQg
cHJldmlvdXNQcm9ncmFtIHsgMCB9OworICAgIEdMaW50IHRhcmdldEZyYW1lQnVmZmVyIHsgMCB9
OwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbCB7IGZhbHNlIH07Ci0gICAgR0MzRGludCBwcmV2
aW91c1NjaXNzb3JTdGF0ZSB7IDAgfTsKLSAgICBHQzNEaW50IHByZXZpb3VzRGVwdGhTdGF0ZSB7
IDAgfTsKLSAgICBHQzNEaW50IHZpZXdwb3J0WzRdIHsgMCwgfTsKLSAgICBHQzNEaW50IHByZXZp
b3VzU2Npc3Nvcls0XSB7IDAsIH07CisgICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGUgeyAw
IH07CisgICAgR0xpbnQgcHJldmlvdXNEZXB0aFN0YXRlIHsgMCB9OworICAgIEdMaW50IHZpZXdw
b3J0WzRdIHsgMCwgfTsKKyAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF0geyAwLCB9OwogICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKICAgICBjb25zdCBCaXRtYXBU
ZXh0dXJlR0w6OkZpbHRlckluZm8qIGZpbHRlckluZm8geyBudWxscHRyIH07CiAKIHByaXZhdGU6
CiAgICAgY2xhc3MgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkR0xEYXRh
PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPFNoYXJlZEdMRGF0YT4gY3VycmVu
dFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKKyAgICAgICAgc3RhdGlj
IFJlZjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERhdGEodm9pZCogcGxhdGZvcm1Db250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ID0gY29udGV4dERhdGFNYXAoKS5m
aW5kKGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgICAgIGF1
dG8gaXQgPSBjb250ZXh0RGF0YU1hcCgpLmZpbmQocGxhdGZvcm1Db250ZXh0KTsKICAgICAgICAg
ICAgIGlmIChpdCAhPSBjb250ZXh0RGF0YU1hcCgpLmVuZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAqaXQtPnZhbHVlOwogCi0gICAgICAgICAgICBSZWY8U2hhcmVkR0xEYXRhPiBkYXRhID0g
YWRvcHRSZWYoKm5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwotICAgICAgICAgICAgY29udGV4
dERhdGFNYXAoKS5hZGQoY29udGV4dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIGRhdGEu
cHRyKCkpOworICAgICAgICAgICAgUmVmPFNoYXJlZEdMRGF0YT4gZGF0YSA9IGFkb3B0UmVmKCpu
ZXcgU2hhcmVkR0xEYXRhKTsKKyAgICAgICAgICAgIGNvbnRleHREYXRhTWFwKCkuYWRkKHBsYXRm
b3JtQ29udGV4dCwgZGF0YS5wdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YTsKICAgICAg
ICAgfQogCkBAIC05NiwzNiArOTcsMzEgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdMRGF0YTsKIAotICAgICAgICB1c2luZyBHTENv
bnRleHREYXRhTWFwID0gSGFzaE1hcDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBTaGFyZWRH
TERhdGEqPjsKKyAgICAgICAgdXNpbmcgR0xDb250ZXh0RGF0YU1hcCA9IEhhc2hNYXA8dm9pZCos
IFNoYXJlZEdMRGF0YSo+OwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCYgY29udGV4
dERhdGFNYXAoKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
R0xDb250ZXh0RGF0YU1hcD4gbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAg
fQogCi0gICAgICAgIGV4cGxpY2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCYgY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4
dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIHRoaXMpOwotICAgICAgICB9CisgICAgICAg
IFNoYXJlZEdMRGF0YSgpID0gZGVmYXVsdDsKIAogICAgICAgICBIYXNoTWFwPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+PiBtX3Byb2dyYW1zOwogICAgIH07CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCYgbV9jb250
ZXh0OwogICAgIFJlZjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwotICAgIEhhc2hNYXA8
Y29uc3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+IG1fdmJvczsKKyAgICBIYXNoTWFwPGNvbnN0
IHZvaWQqLCBHTHVpbnQ+IG1fdmJvczsKIH07CiAKLVRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1
cmVNYXBwZXJHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQpCi0gICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fc2hhcmVkR0xEYXRhKFNoYXJlZEdMRGF0YTo6Y3VycmVudFNo
YXJlZEdMRGF0YShtX2NvbnRleHQpKQorVGV4dHVyZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBl
ckdMRGF0YSh2b2lkKiBwbGF0Zm9ybUNvbnRleHQpCisgICAgOiBtX3NoYXJlZEdMRGF0YShTaGFy
ZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEocGxhdGZvcm1Db250ZXh0KSkKIHsKIH0KIAog
VGV4dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJHTERhdGEoKQogewogICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3Zib3MpCi0gICAgICAgIG1fY29udGV4dC5kZWxldGVCdWZmZXIoZW50
cnkudmFsdWUpOworICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmVudHJ5LnZhbHVlKTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgpCkBAIC0xMzgs
MTggKzEzNCwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2ls
KCkKICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9j
b250ZXh0LmNsZWFyU3RlbmNpbCgwKTsKLSAgICBtX2NvbnRleHQuY2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CisgICAg
Z2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0
cnVlOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0YXRp
Y1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KQorR0x1aW50IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0YXRpY1ZCTyhHTGVudW0gdGFyZ2V0
LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3Zib3MuZW5zdXJlKGRhdGEsCiAgICAgICAgIFt0aGlzLCB0YXJnZXQsIHNpemUsIGRh
dGFdIHsKLSAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgdmJvID0gbV9jb250ZXh0LmNyZWF0
ZUJ1ZmZlcigpOwotICAgICAgICAgICAgbV9jb250ZXh0LmJpbmRCdWZmZXIodGFyZ2V0LCB2Ym8p
OwotICAgICAgICAgICAgbV9jb250ZXh0LmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgICAgICAgICAgR0x1aW50IHZibyA9
IDA7CisgICAgICAgICAgICBnbEdlbkJ1ZmZlcnMoMSwgJnZibyk7CisgICAgICAgICAgICBnbEJp
bmRCdWZmZXIodGFyZ2V0LCB2Ym8pOworICAgICAgICAgICAgZ2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgZGF0YSwgR0xfU1RBVElDX0RSQVcpOwogICAgICAgICAgICAgcmV0dXJuIHZibzsKICAg
ICAgICAgfSk7CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC0xNTgs
MTkgKzE1NSwyMSBAQCBQbGF0Zm9ybTNET2JqZWN0IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0
YXRpY1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0cgogUmVmPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3NoYXJlZEdMRGF0YS0+bV9wcm9ncmFtcy5lbnN1cmUob3B0aW9ucywKLSAgICAg
ICAgW3RoaXMsIG9wdGlvbnNdIHsgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpj
cmVhdGUoUmVmPEdyYXBoaWNzQ29udGV4dDNEPihtX2NvbnRleHQpLCBvcHRpb25zKTsgfSk7Cisg
ICAgICAgIFtvcHRpb25zXSB7IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3Jl
YXRlKG9wdGlvbnMpOyB9KTsKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKIFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZW5hYmxl
RWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGZhbHNlKQogewotICAgIG1fY29udGV4dDNEID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQoKTsKLSAgICBBU1NFUlQo
bV9jb250ZXh0M0QpOworICAgIG1fY29udGV4dEF0dHJpYnV0ZXMuaW5pdGlhbGl6ZSgpOworCisg
ICAgdm9pZCogcGxhdGZvcm1Db250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCktPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQpOwogCi0gICAgbV9kYXRhID0g
bmV3IFRleHR1cmVNYXBwZXJHTERhdGEoKm1fY29udGV4dDNEKTsKKyAgICBtX2RhdGEgPSBuZXcg
VGV4dHVyZU1hcHBlckdMRGF0YShwbGF0Zm9ybUNvbnRleHQpOwogI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLSAgICBtX3RleHR1cmVQb29sID0gc3RkOjptYWtlX3VuaXF1ZTxCaXRtYXBUZXh0
dXJlUG9vbD4obV9jb250ZXh0M0QuY29weVJlZigpKTsKKyAgICBtX3RleHR1cmVQb29sID0gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBUZXh0dXJlUG9vbD4obV9jb250ZXh0QXR0cmlidXRlcyk7CiAj
ZW5kaWYKIH0KIApAQCAtMTgxLDE3ICsxODAsMTcgQEAgQ2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVy
R0w6OmNsaXBTdGFjaygpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBh
aW50RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKLSAg
ICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGRhdGEoKS5wcmV2aW91c0RlcHRo
U3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9U
RVNUKTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVCk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5w
cmV2aW91c1Byb2dyYW0pOworICAgIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSA9IGdsSXNF
bmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9
IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOworICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNU
KTsKKyAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogICAgIGRhdGEoKS5kaWRNb2RpZnlT
dGVuY2lsID0gZmFsc2U7Ci0gICAgbV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKLSAgICBtX2Nv
bnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBkYXRhKCku
dmlld3BvcnQpOwotICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOworICAgIGdsRGVwdGhNYXNr
KDApOworICAgIGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7Cisg
ICAgZ2xHZXRJbnRlZ2VydihHTF9TQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Npc3Nvcik7
CiAgICAgbV9jbGlwU3RhY2sucmVzZXQoSW50UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0s
IGRhdGEoKS52aWV3cG9ydFszXSksIGZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCA/IENsaXBTdGFj
azo6WUF4aXNNb2RlOjpEZWZhdWx0IDogQ2xpcFN0YWNrOjpZQXhpc01vZGU6OkludmVydGVkKTsK
LSAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOworICAgIGdsR2V0SW50ZWdl
cnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAg
ICAgZGF0YSgpLlBhaW50RmxhZ3MgPSBmbGFnczsKICAgICBiaW5kU3VyZmFjZSgwKTsKIH0KQEAg
LTE5OSwyMiArMTk4LDIyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBh
aW50RmxhZ3MgZmxhZ3MpCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogewog
ICAgIGlmIChkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCkgewotICAgICAgICBtX2NvbnRleHQzRC0+
Y2xlYXJTdGVuY2lsKDEpOwotICAgICAgICBtX2NvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgICAgIGdsQ2xlYXJTdGVuY2lsKDEpOwor
ICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgfQogCi0gICAgbV9j
b250ZXh0M0QtPnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZ2xVc2VQ
cm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOwogCi0gICAgbV9jb250ZXh0M0QtPnNjaXNz
b3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwg
ZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7Cisg
ICAgZ2xTY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91c1Nj
aXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1NjaXNz
b3JbM10pOwogICAgIGlmIChkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUpCi0gICAgICAgIG1f
Y29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAg
ICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAg
Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CiAKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzRGVw
dGhTdGF0ZSkKLSAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfVEVTVCk7CisgICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOwogICAgIGVsc2UK
LSAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RF
U1QpOworICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CiB9CiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCkKQEAgLTIyMywxNCArMjIyLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0
UmVjCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpTb2xpZENvbG9yKTsKLSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5wcm9ncmFtSUQoKSk7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAogICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29sb3IpKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgIG1fY29udGV4dDNELT51bmlm
b3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKLSAgICBtX2NvbnRl
eHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKKyAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRy
YXcodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORV9MT09QLCAhY29sb3IuaXNPcGFxdWUoKSA/IFNob3VsZEJsZW5kIDogMCk7
CisgICAgZHJhdyh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdM
X0xJTkVfTE9PUCwgIWNvbG9yLmlzT3BhcXVlKCkgPyBTaG91bGRCbGVuZCA6IDApOwogfQogCiAv
LyBGSVhNRTogZHJhd051bWJlcigpIHNob3VsZCBzYXZlIGEgbnVtYmVyIHRleHR1cmUtYXRsYXMg
YW5kIHJlLXVzZSB3aGVuZXZlciBwb3NzaWJsZS4KQEAgLTM1MCwyMyArMzQ5LDIyIEBAIHN0YXRp
YyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQogICAgIHJldHVybiBrZXJuZWw7CiB9CiAKLXN0YXRp
YyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBw
cm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCitzdGF0aWMgdm9p
ZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3Jh
bSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0
IEludFNpemUmIHNpemUsIEdMdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBSZWY8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBwcm9ncmFtLmNvbnRleHQoKTsKLSAgICBjb250ZXh0LT51
c2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkpOworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFt
LnByb2dyYW1JRCgpKTsKIAogICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUoKSkgewogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHBy
b2dyYW0uZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBn
bFVuaWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAg
ICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihv
cGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5maWx0ZXJB
bW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgIGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9u
Jj4ob3BlcmF0aW9uKTsKQEAgLTM3OCwyOSArMzc2LDI5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBG
aWx0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRo
KCkpOwogCi0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2Nh
dGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgY29udGV4
dC0+dW5pZm9ybTFmdihwcm9ncmFtLmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR2F1c3NpYW5L
ZXJuZWxIYWxmV2lkdGgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBnbFVuaWZvcm0yZihw
cm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxMb2NhdGlv
bigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsK
ICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAg
ICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCks
IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgZ2xV
bmlmb3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5l
bEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFzcykgewog
ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFk
aXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgp
KSwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZz
ZXRMb2NhdGlvbigpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0
KCkpKTsKKyAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9u
KCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOworICAg
ICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9h
dChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hh
ZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2Ug
bmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3Np
dGluZy4KICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgICAgICAgICBDb2xvcihw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihzaGFkb3cuY29sb3IoKSkpLmdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0
aW9uKCksIHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dy
YW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0
KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFt
LnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwotICAgICAgICAgICAgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwotICAgICAgICAgICAgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRU
ZXh0dXJlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLmNvbnRlbnRU
ZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNv
bG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9n
cmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9h
dChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRv
d09mZnNldExvY2F0aW9uKCksIDAsIDApOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUxKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgY29u
dGVudFRleHR1cmUpOworICAgICAgICAgICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS5jb250ZW50VGV4
dHVyZUxvY2F0aW9uKCksIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC00MzYsMTcgKzQzNCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAg
ICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6
IFNob3VsZEJsZW5kLCB0ZXh0dXJlR0wuc2l6ZSgpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNp
dHksIGV4cG9zZWRFZGdlcyk7CiB9CiAKLXN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzTlBPVFRl
eHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KQotewotICAgIGlmIChjb250ZXh0Lmlz
R0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c05QT1RUZXh0
dXJlcyA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9u
cG90Iik7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0c05QT1RUZXh0dXJlczsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRF
ZGdlcykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShHTHVpbnQgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKICAgICBib29sIHVzZVJl
Y3QgPSBmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0OwogICAgIGJvb2wgdXNlQW50aWFs
aWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKQEAgLTQ2MiwxMSArNDUw
LDExIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OkFudGlhbGlhc2luZzsKICAgICAgICAgZmxhZ3MgfD0gU2hv
dWxkQW50aWFsaWFzOwogICAgIH0KLSAgICBpZiAod3JhcE1vZGUoKSA9PSBSZXBlYXRXcmFwICYm
ICFkcml2ZXJTdXBwb3J0c05QT1RUZXh0dXJlcygqbV9jb250ZXh0M0QpKQorICAgIGlmICh3cmFw
TW9kZSgpID09IFJlcGVhdFdyYXAgJiYgIW1fY29udGV4dEF0dHJpYnV0ZXMuc3VwcG9ydHNOUE9U
VGV4dHVyZXMpCiAgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
Ok1hbnVhbFJlcGVhdDsKIAogICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlciA9IGRh
dGEoKS5maWx0ZXJJbmZvID8gZGF0YSgpLmZpbHRlckluZm8tPmZpbHRlcjogMDsKLSAgICBHQzNE
dWludCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEID0gMDsKKyAgICBHTHVpbnQgZmlsdGVyQ29udGVu
dFRleHR1cmVJRCA9IDA7CiAKICAgICBpZiAoZmlsdGVyKSB7CiAgICAgICAgIGlmIChkYXRhKCku
ZmlsdGVySW5mby0+Y29udGVudFRleHR1cmUpCkBAIC00OTcsMjQgKzQ4NSwzMCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbgogICAgIH0KIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwotICAgIG1f
Y29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbFVzZVBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAg
ICBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9u
KCksIHIsIGcsIGIsIGEpOworICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24o
KSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRC
bGVuZDsKIAotICAgIGRyYXcocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6VFJJQU5HTEVfRkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgZmxhZ3MpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgZ2xDbGVhckNv
bG9yKGNvbG9yLnJlZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xvci5i
bHVlKCkgLyAyNTUuMGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGdsQ2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRy
aWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKLSAgICBjb25z
dCBHQzNEZmxvYXQgbGVmdCA9IDA7Ci0gICAgY29uc3QgR0MzRGZsb2F0IHRvcCA9IDA7Ci0gICAg
Y29uc3QgR0MzRGZsb2F0IHJpZ2h0ID0gMTsKLSAgICBjb25zdCBHQzNEZmxvYXQgYm90dG9tID0g
MTsKLSAgICBjb25zdCBHQzNEZmxvYXQgY2VudGVyID0gMC41OworICAgIGNvbnN0IEdMZmxvYXQg
bGVmdCA9IDA7CisgICAgY29uc3QgR0xmbG9hdCB0b3AgPSAwOworICAgIGNvbnN0IEdMZmxvYXQg
cmlnaHQgPSAxOworICAgIGNvbnN0IEdMZmxvYXQgYm90dG9tID0gMTsKKyAgICBjb25zdCBHTGZs
b2F0IGNlbnRlciA9IDAuNTsKIAogLy8gRWFjaCA0ZCB0cmlhbmdsZSBjb25zaXN0cyBvZiBhIGNl
bnRlciBwb2ludCBhbmQgdHdvIGVkZ2UgcG9pbnRzLCB3aGVyZSB0aGUgencgY29vcmRpbmF0ZXMK
IC8vIG9mIGVhY2ggdmVydGV4IGVxdWFscyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgdmVydGV4
IG9uIHRoZSBlZGdlLgpAQCAtNTIzLDcgKzUxNyw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSkKICAg
ICB4MiwgeTIsIHgyLCB5MiwgXAogICAgIGNlbnRlciwgY2VudGVyLCAoeDEgKyB4MikgLyAyLCAo
eTEgKyB5MikgLyAyCiAKLSAgICBzdGF0aWMgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0U2lkZVRy
aWFuZ2xlc1tdID0geworICAgIHN0YXRpYyBjb25zdCBHTGZsb2F0IHVuaXRSZWN0U2lkZVRyaWFu
Z2xlc1tdID0gewogICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEobGVmdCwgdG9wLCByaWdodCwg
dG9wKSwKICAgICAgICAgU0lERV9UUklBTkdMRV9EQVRBKGxlZnQsIHRvcCwgbGVmdCwgYm90dG9t
KSwKICAgICAgICAgU0lERV9UUklBTkdMRV9EQVRBKHJpZ2h0LCB0b3AsIHJpZ2h0LCBib3R0b20p
LApAQCAtNTMxLDQxICs1MjUsNDEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdlVHJp
YW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtKQogICAgIH07CiAjdW5k
ZWYgU0lERV9UUklBTkdMRV9EQVRBCiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZibyA9IGRhdGEo
KS5nZXRTdGF0aWNWQk8oR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKEdD
M0RmbG9hdCkgKiA0OCwgdW5pdFJlY3RTaWRlVHJpYW5nbGVzKTsKLSAgICBtX2NvbnRleHQzRC0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCB2Ym8pOwotICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udmVydGV4TG9jYXRpb24oKSwg
NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0gICAgbV9jb250ZXh0
M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgMCwgMTIpOwotICAg
IG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IDApOworICAgIEdMdWludCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdMX0FSUkFZX0JVRkZF
Uiwgc2l6ZW9mKEdMZmxvYXQpICogNDgsIHVuaXRSZWN0U2lkZVRyaWFuZ2xlcyk7CisgICAgZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwor
ICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDEyKTsKKyAgICBnbEJpbmRCdWZmZXIo
R0xfQVJSQVlfQlVGRkVSLCAwKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0
UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0MzRGVudW0gZHJhd2lu
Z01vZGUpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1VuaXRSZWN0KFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUpCiB7Ci0gICAgc3RhdGlj
IGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3Qp
OwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIHZibyk7Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3Jh
bS52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAw
LCAwKTsKLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7Ci0g
ICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgMCk7CisgICAgc3RhdGljIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHsgMCwgMCwgMSwg
MCwgMSwgMSwgMCwgMSB9OworICAgIEdMdWludCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdM
X0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEdMZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIGdsQmlu
ZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KHByb2dyYW0udmVydGV4TG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAg
ICBnbERyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOworICAgIGdsQmluZEJ1ZmZlcihHTF9B
UlJBWV9CVUZGRVIsIDApOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5n
TW9kZSwgRmxhZ3MgZmxhZ3MpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUs
IEZsYWdzIGZsYWdzKQogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChtb2RlbFZp
ZXdNYXRyaXgpOwogICAgIG1hdHJpeC5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVj
dFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSksIHJlY3QpKTsKIAotICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnZlcnRleExvY2F0aW9uKCkpOworICAg
IGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsKICAg
ICBwcm9ncmFtLnNldE1hdHJpeChwcm9ncmFtLm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIG1h
dHJpeCk7CiAgICAgcHJvZ3JhbS5zZXRNYXRyaXgocHJvZ3JhbS5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpOwogCiAgICAgaWYgKGlzSW5NYXNrTW9k
ZSgpKSB7Ci0gICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBtX2NvbnRleHQz
RC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIGdsQmxlbmRGdW5j
KEdMX1pFUk8sIEdMX1NSQ19BTFBIQSk7CisgICAgICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRCbGVuZCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQz
RC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgICAgICBnbEJsZW5k
RnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICAgICAgZ2xFbmFi
bGUoR0xfQkxFTkQpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dDNELT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgICAgICBnbERpc2FibGUo
R0xfQkxFTkQpOwogICAgIH0KIAogICAgIGlmIChmbGFncyAmIFNob3VsZEFudGlhbGlhcykKQEAg
LTU3MywyMSArNTY3LDIxIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vCiAgICAgZWxzZQogICAg
ICAgICBkcmF3VW5pdFJlY3QocHJvZ3JhbSwgZHJhd2luZ01vZGUpOwogCi0gICAgbV9jb250ZXh0
M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLnZlcnRleExvY2F0aW9uKCkpOwot
ICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgIG1fY29udGV4dDNELT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLnZlcnRleExvY2F0aW9uKCkpOworICAgIGdsQmxlbmRGdW5jKEdMX09ORSwg
R0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgZ2xFbmFibGUoR0xfQkxFTkQpOwogfQogCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5KQogewotICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkpOwotICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAg
R0MzRGVudW0gdGFyZ2V0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdDM0Rl
bnVtKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCKSA6IEdDM0RlbnVtKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0uc2Ft
cGxlckxvY2F0aW9uKCksIDApOwotICAgIGlmICh3cmFwTW9kZSgpID09IFJlcGVhdFdyYXAgJiYg
ZHJpdmVyU3VwcG9ydHNOUE9UVGV4dHVyZXMoKm1fY29udGV4dDNEKSkgewotICAgICAgICBtX2Nv
bnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFU
KTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCk7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkp
OworICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgR0xlbnVtIHRhcmdldCA9
IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QgPyBHTGVudW0oR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQVJCKSA6IEdMZW51bShHTF9URVhUVVJFXzJEKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRh
cmdldCwgdGV4dHVyZSk7CisgICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS5zYW1wbGVyTG9jYXRpb24o
KSwgMCk7CisgICAgaWYgKHdyYXBNb2RlKCkgPT0gUmVwZWF0V3JhcCAmJiBtX2NvbnRleHRBdHRy
aWJ1dGVzLnN1cHBvcnRzTlBPVFRleHR1cmVzKSB7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfUkVQRUFUKTsKKyAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9SRVBFQVQp
OwogICAgIH0KIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhdHRlcm5UcmFuc2Zvcm0gPSB0
aGlzLT5wYXR0ZXJuVHJhbnNmb3JtKCk7CkBAIC02MTIsMTQgKzYwNiwxNCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtJiBwcgogCiAgICAgcHJvZ3JhbS5zZXRNYXRyaXgocHJvZ3JhbS50ZXh0dXJlU3Bh
Y2VNYXRyaXhMb2NhdGlvbigpLCBwYXR0ZXJuVHJhbnNmb3JtKTsKICAgICBwcm9ncmFtLnNldE1h
dHJpeChwcm9ncmFtLnRleHR1cmVDb2xvclNwYWNlTWF0cml4TG9jYXRpb24oKSwgY29sb3JTcGFj
ZU1hdHJpeEZvckZsYWdzKGZsYWdzKSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9n
cmFtLm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKKyAgICBnbFVuaWZvcm0xZihwcm9ncmFt
Lm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAgIGlmIChvcGFjaXR5IDwgMSkKICAg
ICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKLSAgICBkcmF3KHJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgZmxhZ3MpOwot
ICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZHJhdyhyZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIHByb2dyYW0sIEdMX1RSSUFOR0xFX0ZBTiwgZmxhZ3MpOworICAgIGdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdG
aWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNz
KQpAQCAtNjUxLDExICs2NDUsMTEgQEAgVGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdM
KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAg
bV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgYXV0byYgdmlld3Bv
cnQgPSBkYXRhKCkudmlld3BvcnQ7CiAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVh
dGVQcm9qZWN0aW9uTWF0cml4KEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSwgZGF0
YSgpLlBhaW50RmxhZ3MgJiBQYWludGluZ01pcnJvcmVkKTsKLSAgICBtX2NvbnRleHQzRC0+dmll
d3BvcnQodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10p
OwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCptX2NvbnRleHQzRCk7CisgICAgZ2xWaWV3cG9ydCh2
aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSk7CisgICAg
bV9jbGlwU3RhY2suYXBwbHkoKTsKICAgICBkYXRhKCkuY3VycmVudFN1cmZhY2UgPSBudWxscHRy
OwogfQogCkBAIC02NjYsNyArNjYwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlKS0+YmluZEFzU3VyZmFjZSht
X2NvbnRleHQzRC5nZXQoKSk7CisgICAgc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3Vy
ZmFjZSktPmJpbmRBc1N1cmZhY2UoKTsKICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNy
ZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6ZSgpLCB0cnVlIC8qIG1pcnJvcmVkICov
KTsKICAgICBkYXRhKCkuY3VycmVudFN1cmZhY2UgPSBzdXJmYWNlOwogfQpAQCAtNjkxLDcgKzY4
NSw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGNsaXBTdGFjaygpLmludGVyc2VjdChyZWN0KTsKLSAgICBjbGlwU3RhY2soKS5hcHBseUlm
TmVlZGVkKCptX2NvbnRleHQzRCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHlJZk5lZWRlZCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03MDUsMTIgKzY5OSwxMiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGNvbgogCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNv
bGlkQ29sb3IpOwogCi0gICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHsw
LCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZibyA9IGRhdGEo
KS5nZXRTdGF0aWNWQk8oR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKEdD
M0RmbG9hdCkgKiA4LCB1bml0UmVjdCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmJvKTsKLSAgICBtX2NvbnRleHQzRC0+dmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OworICAgIEdMdWludCB2Ym8gPSBkYXRhKCkuZ2V0U3RhdGljVkJPKEdM
X0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEdMZmxvYXQpICogOCwgdW5pdFJlY3QpOworICAgIGdsQmlu
ZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CiAK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobW9kZWxWaWV3TWF0cml4KTsKICAgICBt
YXRyaXgubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0
KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7CkBAIC03MTksNDAgKzcxMyw0MCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbgogCiAgICAgaW50IHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmdl
dFN0ZW5jaWxJbmRleCgpOwogCi0gICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9URVNUKTsKKyAgICBnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpOwogCiAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2luZy4KLSAgICBtX2Nv
bnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSLCBzdGVuY2lsSW5k
ZXgsIHN0ZW5jaWxJbmRleCk7CisgICAgZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbElu
ZGV4LCBzdGVuY2lsSW5kZXgpOwogCiAgICAgLy8gT3BlcmF0ZSBvbmx5IG9uIHRoZSBzdGVuY2ls
SW5kZXggYW5kIGFib3ZlLgotICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihz
dGVuY2lsSW5kZXggLSAxKSk7CisgICAgZ2xTdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5k
ZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUg
Y3VycmVudCBpbmRleC4KICAgICBwcm9ncmFtLT5zZXRNYXRyaXgocHJvZ3JhbS0+cHJvamVjdGlv
bk1hdHJpeExvY2F0aW9uKCksIGZ1bGxQcm9qZWN0aW9uTWF0cml4KTsKICAgICBwcm9ncmFtLT5z
ZXRNYXRyaXgocHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRpb24oKSwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7Ci0gICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQz
RDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJP
KTsKLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVfRkFOLCAwLCA0KTsKKyAgICBnbFN0ZW5jaWxPcChHTF9aRVJPLCBHTF9aRVJPLCBHTF9aRVJP
KTsKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5v
dyBhcHBseSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCi0gICAgbV9jb250ZXh0
M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFKTsKKyAgICBnbFN0ZW5jaWxP
cChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKTsKICAgICBwcm9ncmFtLT5zZXRN
YXRyaXgocHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIGRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4KTsKICAgICBwcm9ncmFtLT5zZXRNYXRyaXgocHJvZ3JhbS0+bW9kZWxWaWV3TWF0
cml4TG9jYXRpb24oKSwgbWF0cml4KTsKLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBtX2Nv
bnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsK
LSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRl
eExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsKKyAgICBnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKTsKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBnbFN0ZW5jaWxNYXNrKDApOwog
CiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3Rpbmcu
CiAgICAgY2xpcFN0YWNrKCkuc2V0U3RlbmNpbEluZGV4KHN0ZW5jaWxJbmRleCAqIDIpOwotICAg
IGNsaXBTdGFjaygpLmFwcGx5SWZOZWVkZWQoKm1fY29udGV4dDNEKTsKKyAgICBjbGlwU3RhY2so
KS5hcHBseUlmTmVlZGVkKCk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkK
IHsKICAgICBjbGlwU3RhY2soKS5wb3AoKTsKLSAgICBjbGlwU3RhY2soKS5hcHBseUlmTmVlZGVk
KCptX2NvbnRleHQzRCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHlJZk5lZWRlZCgpOwogfQogCiBJ
bnRSZWN0IFRleHR1cmVNYXBwZXJHTDo6Y2xpcEJvdW5kcygpCkBAIC03NjAsOSArNzU0LDkgQEAg
SW50UmVjdCBUZXh0dXJlTWFwcGVyR0w6OmNsaXBCb3VuZHMoKQogICAgIHJldHVybiBjbGlwU3Rh
Y2soKS5jdXJyZW50KCkuc2Npc3NvckJveDsKIH0KIAotUmVmPEJpdG1hcFRleHR1cmU+IFRleHR1
cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZShHQzNEaW50IGludGVybmFsRm9ybWF0KQorUmVmPEJp
dG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZShHTGludCBpbnRlcm5h
bEZvcm1hdCkKIHsKLSAgICByZXR1cm4gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoKm1fY29udGV4
dDNELCBpbnRlcm5hbEZvcm1hdCk7CisgICAgcmV0dXJuIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRl
KG1fY29udGV4dEF0dHJpYnV0ZXMsIGludGVybmFsRm9ybWF0KTsKIH0KIAogc3RkOjp1bmlxdWVf
cHRyPFRleHR1cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDhmMDQ0NmMzMjUwLi4zNjkxYWFhOWUwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI2luY2x1ZGUgIkNsaXBTdGFj
ay5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJzLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAsOCArNjEsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkcmF3TnVtYmVyKGludCBudW1iZXIsIGNvbnN0IENvbG9yJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0
cml4LCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBBbGxFZGdlcyk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKEdMdWludCB0ZXh0dXJlLCBGbGFncywgY29uc3Qg
SW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgdW5z
aWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMpOwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBDb2xv
ciYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJDb2xvcihjb25zdCBDb2xvciYpIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSBvdmVycmlk
ZTsKICAgICBCaXRtYXBUZXh0dXJlKiBjdXJyZW50U3VyZmFjZSgpOwpAQCAtNzEsOSArNzMsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBlbmRDbGlwKCkgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBjbGlw
Qm91bmRzKCkgb3ZlcnJpZGU7CiAgICAgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KLSAgICBSZWY8Qml0bWFwVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRPTlRfQ0FSRSk7IH0KLSAgICBSZWY8Qml0bWFwVGV4dHVyZT4gY3Jl
YXRlVGV4dHVyZShHQzNEaW50IGludGVybmFsRm9ybWF0KSBvdmVycmlkZTsKLSAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0M0QuZ2V0KCk7IH0KKyAgICBSZWY8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgp
IG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0ZVRleHR1cmUoR0xfRE9OVF9DQVJFKTsgfQorICAgIFJl
ZjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKEdMaW50IGludGVybmFsRm9ybWF0KSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJj
ZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUqIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb24mLCBpbnQgcGFzcyk7CiAKQEAgLTgxLDE2ICs4MiwxNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0mLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHkpOwotICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSYsIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBGbGFncyk7CisgICAgdm9p
ZCBkcmF3KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiwgR0xlbnVtIGRyYXdpbmdN
b2RlLCBGbGFncyk7CiAKLSAgICB2b2lkIGRyYXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSYsIEdDM0RlbnVtIGRyYXdpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdVbml0UmVjdChU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYsIEdMZW51bSBkcmF3aW5nTW9kZSk7CiAgICAgdm9p
ZCBkcmF3RWRnZVRyaWFuZ2xlcyhUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYpOwogCiAgICAg
Ym9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3Qg
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBDbGlwU3Rh
Y2smIGNsaXBTdGFjaygpOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkg
eyByZXR1cm4gKm1fZGF0YTsgfQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0M0Q7CisKKyAgICBUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMgbV9jb250ZXh0QXR0
cmlidXRlczsKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNr
IG1fY2xpcFN0YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMSGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTEhlYWRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNGJhZmI1Yjg3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMSGVhZGVycy5oCkBA
IC0wLDAgKzEsOSBAQAorI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVk
ZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNlbHNlCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKaW5kZXggMWZkMDlh
NWVkMzQuLmE1YTA4ZTg2MzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJCdWZmZXI6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyKFJlZlB0cjxC
aXRtYXAKIHsKIH0KIAotVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyKEdMdWludCB0ZXh0dXJlSUQsIGNvbnN0IEludFNpemUm
IHNpemUsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MsIEdDM0RpbnQgaW50ZXJuYWxGb3Jt
YXQpCitUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJCdWZmZXIoR0x1aW50IHRleHR1cmVJRCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgVGV4
dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncywgR0xpbnQgaW50ZXJuYWxGb3JtYXQpCiAgICAgOiBt
X3RleHR1cmVJRCh0ZXh0dXJlSUQpCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1faW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQpCkBAIC00Nyw5ICs0Nyw5IEBAIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyQnVmZmVyOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcihHTHVp
bnQgdGV4dHVyCiB7CiB9CiAKLWJvb2wgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6
OmNhblJldXNlV2l0aG91dFJlc2V0KGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RpbnQgaW50ZXJu
YWxGb3JtYXQpCitib29sIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOjpjYW5SZXVz
ZVdpdGhvdXRSZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBHTGludCBpbnRlcm5hbEZvcm1hdCkK
IHsKLSAgICByZXR1cm4gbV90ZXh0dXJlICYmIChtX3RleHR1cmUtPnNpemUoKSA9PSBzaXplKSAm
JiAoc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4obV90ZXh0dXJlLmdldCgpKS0+aW50ZXJu
YWxGb3JtYXQoKSA9PSBpbnRlcm5hbEZvcm1hdCB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RE9OVF9DQVJFKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlICYmIChtX3RleHR1
cmUtPnNpemUoKSA9PSBzaXplKSAmJiAoc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4obV90
ZXh0dXJlLmdldCgpKS0+aW50ZXJuYWxGb3JtYXQoKSA9PSBpbnRlcm5hbEZvcm1hdCB8fCBpbnRl
cm5hbEZvcm1hdCA9PSBHTF9ET05UX0NBUkUpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyOjpjbG9uZShUZXh0dXJlTWFwcGVyR0wmIHRleG1hcEdMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaAppbmRleCA5NjRmNDAwZGI4My4uNjA2NmRm
NWU3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJpdG1hcFRl
eHR1cmVHTC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTEhlYWRlcnMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC0zOSwxMyArMzksMTMgQEAg
Y2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CiBwdWJs
aWM6CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIoUmVmUHRyPEJpdG1hcFRl
eHR1cmU+JiYsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgPSAwKTsKLSAgICBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlcihHTHVpbnQgdGV4dHVyZUlELCBjb25zdCBJbnRTaXplJiwgVGV4
dHVyZU1hcHBlckdMOjpGbGFncywgR0MzRGludCBpbnRlcm5hbEZvcm1hdCk7CisgICAgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIoR0x1aW50IHRleHR1cmVJRCwgY29uc3QgSW50U2l6
ZSYsIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MsIEdMaW50IGludGVybmFsRm9ybWF0KTsKIAogICAg
IHZpcnR1YWwgflRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyKCkgPSBkZWZhdWx0Owog
CiAgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjApIGZpbmFsOwogCi0gICAg
Ym9vbCBjYW5SZXVzZVdpdGhvdXRSZXNldChjb25zdCBJbnRTaXplJiwgR0MzRGludCBpbnRlcm5h
bEZvcm1hdCk7CisgICAgYm9vbCBjYW5SZXVzZVdpdGhvdXRSZXNldChjb25zdCBJbnRTaXplJiwg
R0xpbnQgaW50ZXJuYWxGb3JtYXQpOwogICAgIEJpdG1hcFRleHR1cmVHTCYgdGV4dHVyZUdMKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMJj4oKm1fdGV4dHVyZSk7IH0KIAog
ICAgIGlubGluZSB2b2lkIG1hcmtVc2VkKCkgeyBtX3RpbWVMYXN0VXNlZCA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOyB9CkBAIC03Miw3ICs3Miw3IEBAIHByaXZhdGU6CiAKICAgICBH
THVpbnQgbV90ZXh0dXJlSUQ7CiAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgR0MzRGludCBtX2lu
dGVybmFsRm9ybWF0OworICAgIEdMaW50IG1faW50ZXJuYWxGb3JtYXQ7CiAgICAgVGV4dHVyZU1h
cHBlckdMOjpGbGFncyBtX2V4dHJhRmxhZ3M7CiAgICAgYm9vbCBtX2hhc01hbmFnZWRUZXh0dXJl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm1hbmFnZWRCdWZmZXJEYXRhSG9sZGVyPiBtX3VubWFu
YWdlZEJ1ZmZlckRhdGFIb2xkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eS5jcHAKaW5kZXggYmVmZDk4Y2FlZDQuLjFjY2EwY2NkYTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpwdXNoTmV4
dEJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHAKICAgICAgICAgbV9jb21wb3NpdG9y
LT5vbk5ld0J1ZmZlckF2YWlsYWJsZSgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk6
OmdldEF2YWlsYWJsZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEaW50IGludGVybmFs
Rm9ybWF0KQorc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVy
PiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OjpnZXRBdmFpbGFibGVCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0xpbnQgaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CiAgICAgQVNTRVJUKG1fY29tcG9zaXRvclRocmVhZElEID09IFdURjo6
Y3VycmVudFRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eS5oCmluZGV4IDYwZDQ5YmU5ZGIzLi43MGJlYmNjZmJiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAKLSNpbmNsdWRlICJHcmFw
aGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJzLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGltcGxl
bWVudGF0aW9uIG9mIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlciBzaG91
bGQKICAgICAvLyBhcXVpcmUgLyByZWxlYXNlIHRoZSBsb2NrIGV4cGxpY2l0bHkgdG8gdXNlIGJl
bG93IG1ldGhvZHMuCiAgICAgTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gZ2V0QXZhaWxh
YmxlQnVmZmVyKGNvbnN0IEludFNpemUmLCBHQzNEaW50IGludGVybmFsRm9ybWF0KTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGdldEF2YWls
YWJsZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgR0xpbnQgaW50ZXJuYWxGb3JtYXQpOwogICAgIHZv
aWQgcHVzaE5leHRCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyPik7CiAgICAgYm9vbCBpc0FjdGl2ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcAppbmRleCA2Y2I1OTJkMDQ2Ny4uY2E1NmUwYmY3ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcApAQCAtMzA1LDcgKzMw
NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KICAgICAgICAgfQog
ICAgICk7CiAKLVJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmNyZWF0ZShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucykKK1JlZjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zKQogewogI2RlZmluZSBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoQXBwbGllcikgXAogICAgIG9wdGlvbnNBcHBsaWVyQnVpbGRl
ci5hcHBlbmQoXApAQCAtMzM4LDM3ICszMzgsNjggQEAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFJlZjxHcmFwaGljc0MK
ICAgICBmcmFnbWVudFNoYWRlckJ1aWxkZXIuYXBwZW5kKG9wdGlvbnNBcHBsaWVyQnVpbGRlci50
b1N0cmluZygpKTsKICAgICBmcmFnbWVudFNoYWRlckJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50VGVt
cGxhdGUpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0oV1RGTW92ZShjb250ZXh0KSwgdmVydGV4U2hhZGVyQnVpbGRlci50b1N0cmluZygpLCBm
cmFnbWVudFNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlckJ1aWxkZXIudG9TdHJp
bmcoKSwgZnJhZ21lbnRTaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpKTsKIH0KIAotVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFJlZjxHcmFwaGlj
c0NvbnRleHQzRD4mJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5n
JiBmcmFnbWVudCkKLSAgICA6IG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IFN0cmlu
ZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQogewotICAgIG1fdmVydGV4U2hhZGVy
ID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFE
RVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgp
OworICAgIG1fdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7
CisgICAgeworICAgICAgICBhdXRvIHZlcnRleENTdHJpbmcgPSB2ZXJ0ZXgudXRmOCgpOworICAg
ICAgICBjb25zdCBjaGFyKiBkYXRhID0gdmVydGV4Q1N0cmluZy5kYXRhKCk7CisgICAgICAgIGlu
dCBsZW5ndGggPSB2ZXJ0ZXhDU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBnbFNoYWRlclNvdXJj
ZShtX3ZlcnRleFNoYWRlciwgMSwgJmRhdGEsICZsZW5ndGgpOworICAgIH0KKyAgICBnbENvbXBp
bGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworCisgICAgbV9mcmFnbWVudFNoYWRlciA9IGdsQ3Jl
YXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgeworICAgICAgICBhdXRvIGZyYWdt
ZW50Q1N0cmluZyA9IGZyYWdtZW50LnV0ZjgoKTsKKyAgICAgICAgY29uc3QgY2hhciogZGF0YSA9
IGZyYWdtZW50Q1N0cmluZy5kYXRhKCk7CisgICAgICAgIGludCBsZW5ndGggPSBmcmFnbWVudENT
dHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGdsU2hhZGVyU291cmNlKG1fZnJhZ21lbnRTaGFkZXIs
IDEsICZkYXRhLCAmbGVuZ3RoKTsKKyAgICB9CisgICAgZ2xDb21waWxlU2hhZGVyKG1fZnJhZ21l
bnRTaGFkZXIpOworCisgICAgbV9pZCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOworICAgIGdsQXR0YWNo
U2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBnbEF0dGFjaFNoYWRlcihtX2lkLCBt
X2ZyYWdtZW50U2hhZGVyKTsKKyAgICBnbExpbmtQcm9ncmFtKG1faWQpOwogCi0gICAgbV9mcmFn
bWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21lbnRT
aGFkZXIsIGZyYWdtZW50KTsKLQotICAgIG1faWQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0o
KTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1f
Y29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQt
PmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJv
Z3JhbShtX2lkKTsKLQotICAgIGlmICghY29tcG9zaXRpbmdMb2dFbmFibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKQorI2lmICFMT0dfRElTQUJMRUQKKyAgICBpZiAoIWNvbXBvc2l0aW5n
TG9nRW5hYmxlZCgpIHx8IGdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU3RyaW5nIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3Zl
cnRleFNoYWRlcik7Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiVmVydGV4IHNoYWRlciBsb2c6ICVz
XG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJ
bmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50
IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250
ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lkKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9n
cmFtIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIGdldFNoYWRlckxv
ZyA9CisgICAgICAgIFtdKEdMdWludCBzaGFkZXIpIC0+IENTdHJpbmcKKyAgICAgICAgeworICAg
ICAgICAgICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOworICAgICAgICAgICAgaWYg
KCFsb2dMZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgICAg
ICAgICAgYXV0byBpbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxHTGNoYXJbXT4obG9nTGVuZ3RoKTsK
KyAgICAgICAgICAgIEdMc2l6ZWkgaW5mb0xlbmd0aCA9IDA7CisgICAgICAgICAgICBnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgsICZpbmZvTGVuZ3RoLCBpbmZvLmdldCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBDU3RyaW5nKGluZm8uZ2V0KCksIGluZm9MZW5ndGgpOworICAg
ICAgICB9OworCisKKyAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzogJXNc
biIsIGdldFNoYWRlckxvZyhtX3ZlcnRleFNoYWRlcikuZGF0YSgpKTsKKyAgICBMT0coQ29tcG9z
aXRpbmcsICJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwgZ2V0U2hhZGVyTG9nKG1fZnJhZ21l
bnRTaGFkZXIpLmRhdGEoKSk7CisKKyAgICB7CisgICAgICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7
CisgICAgICAgIGdsR2V0UHJvZ3JhbWl2KG1faWQsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xl
bmd0aCk7CisgICAgICAgIGlmIChsb2dMZW5ndGgpIHsKKyAgICAgICAgICAgIGF1dG8gaW5mbyA9
IHN0ZDo6bWFrZV91bmlxdWU8R0xjaGFyW10+KGxvZ0xlbmd0aCk7CisgICAgICAgICAgICBHTHNp
emVpIGluZm9MZW5ndGggPSAwOworICAgICAgICAgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhtX2lk
LCBsb2dMZW5ndGgsICZpbmZvTGVuZ3RoLCBpbmZvLmdldCgpKTsKKworICAgICAgICAgICAgTE9H
KENvbXBvc2l0aW5nLCAiUHJvZ3JhbSBsb2c6ICVzXG4iLCBDU3RyaW5nKGluZm8uZ2V0KCksIGlu
Zm9MZW5ndGgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKIH0KIAogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCkBAIC0z
NzYsMjkgKzQwNywyOSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKCkKICAgICBpZiAoIW1faWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
aWQpOworICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBnbERl
bGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9m
cmFnbWVudFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Cisg
ICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRy
aXgoR0x1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQog
ewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpGbG9hdE1hdHJpeDQgZmxvYXRNYXRyaXg7CiAg
ICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGZsb2F0TWF0cml4KTsKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBmbG9hdE1hdHJpeCk7
CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgZmxvYXRNYXRyaXgp
OwogfQogCi1HQzNEdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24o
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKK0dMdWludCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFi
bGVzLmVuc3VyZShuYW1lLAogICAgICAgICBbdGhpcywgJm5hbWUsIHR5cGVdIHsKICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSBVbmlmb3JtVmFyaWFibGU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQs
IG5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lk
LCBuYW1lLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgY2FzZSBBdHRyaWJW
YXJpYWJsZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2Nh
dGlvbihtX2lkLCBuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xHZXRBdHRyaWJMb2Nh
dGlvbihtX2lkLCBuYW1lLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKaW5kZXggZGE1MjU2YjgzMDku
LjhkYTFlNDI4MTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaApA
QCAtMjMsNyArMjMsNyBAQAogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0xIZWFkZXJz
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzMsNyArMzMsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxF
KEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBcCi0gICAgR0MzRHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9u
KCkgeyBcCisgICAgR0x1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigpIHsgXAogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBuYW1lKE5hbWUsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOyBcCiAgICAgICAgIHJldHVybiBnZXRMb2NhdGlv
bihuYW1lLmdldCgpLCBUeXBlKTsgXAogICAgIH0KQEAgLTY2LDExICs2NiwxMCBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIHVuc2lnbmVkIE9wdGlvbnM7CiAKLSAgICBzdGF0aWMgUmVmPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUoUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBP
cHRpb25zKTsKKyAgICBzdGF0aWMgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVh
dGUoT3B0aW9ucyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsK
IAotICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQotICAgIEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9
CisgICAgR0x1aW50IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgIFRF
WE1BUF9ERUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCiAKQEAgLTkwLDIwICs4OSwxOSBAQCBwdWJs
aWM6CiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCiAgICAgVEVYTUFQ
X0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKIAotICAgIHZvaWQgc2V0TWF0cml4KEdD
M0R1aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0TWF0cml4
KEdMdWludCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogcHJpdmF0ZToKLSAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIGNvbnN0
IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVy
U291cmNlKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBTdHJpbmcmIHZl
cnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7CisgICAgR0x1
aW50IG1fZnJhZ21lbnRTaGFkZXI7CiAKICAgICBlbnVtIFZhcmlhYmxlVHlwZSB7IFVuaWZvcm1W
YXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsKLSAgICBHQzNEdWludCBnZXRMb2NhdGlvbihjb25z
dCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOworICAgIEdMdWludCBnZXRMb2NhdGlvbihj
b25zdCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOwogCi0gICAgUmVmPEdyYXBoaWNzQ29u
dGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwotICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD4gbV92YXJpYWJsZXM7CisgICAgR0x1aW50IG1faWQ7
CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdMdWludD4gbV92YXJpYWJsZXM7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKaW5kZXggMzFjYTBmOGMz
NWUuLjM1ZTEyZDc4MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
Y3BwCkBAIC0xMDYsMTEgKzEwNiw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpCiAgICAgICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgYmFja2dyb3VuZENvbG9yLmJsdWUoKSwKICAg
ICAgICAgICAgIGJhY2tncm91bmRDb2xvci5hbHBoYSgpICogb3BhY2l0eSk7CiAgICAgICAgIG1f
dGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIENvbG9yKHJnYmEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1h
cHBlci5nZXQoKSktPmdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIGNvbnRleHQtPmNsZWFy
Q29sb3IobV92aWV3QmFja2dyb3VuZENvbG9yLnJlZCgpIC8gMjU1LjBmLCBtX3ZpZXdCYWNrZ3Jv
dW5kQ29sb3IuZ3JlZW4oKSAvIDI1NS4wZiwgbV92aWV3QmFja2dyb3VuZENvbG9yLmJsdWUoKSAv
IDI1NS4wZiwgbV92aWV3QmFja2dyb3VuZENvbG9yLmFscGhhKCkgLyAyNTUuMGYpOwotICAgICAg
ICBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0g
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX3RleHR1cmVNYXBwZXItPmNsZWFyQ29sb3IobV92
aWV3QmFja2dyb3VuZENvbG9yKTsKIAogICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5
KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgp
IHsKICAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326982</attachid>
            <date>2017-11-15 07:26:09 -0800</date>
            <delta_ts>2017-11-16 01:24:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174860-20171115162607.patch</filename>
            <type>text/plain</type>
            <size>50611</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0ODc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRmNTgwMTY5ZWFjNzc2
ZjNiYzlhY2IxZTE3MTMzZWI4MzBmYjU0ZS4uODVjNDk2NzZmZDhiNjkzZmM1YmY2MjNmYmU3N2I2
YmFiZWU3NjE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE3LTExLTE1ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1RleE1hcF0gUmVtb3Zl
IHVzZSBvZiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyB1c2VzIG9mIEdDM0QgdGhhdCBhcmUg
bm90IFdlYkdMIHJlbGF0ZWQ6CisgICAgICAgIC0gUmVtb3ZlIHRoZSBvcHRpb24gdG8gY3JlYXRl
IGEgR0MzRCB0byByZW5kZXIgdG8gdGhlIGN1cnJlbiBPcGVuR0wgY29udGV4dC4KKyAgICAgICAg
LSBSZW1vdmUgdGhlIHJlbWFpbmluZyB1c2FnZSBvZiBHQzNEIGluc2lkZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLgorICAgICAgICAtIFJlcGxhY2UgdGhlIHVzYWdlIGluc2lkZSBU
ZXh0dXJlTWFwcGVyIHdpdGggZGlyZWN0IE9wZW5HTCBjYWxscywgYW5kIHVzZSBhCisgICAgICAg
IFZBTyB3aGVuIHRoZSBPcGVuR0wgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAzLjIuCisKKyAgICAg
ICAgVGhpcyBhbHNvIG1vZGlmaWVzIFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcyBzbyBh
bGwgdGhlIHRlc3RlZCBmZWF0dXJlcyBhcmUKKyAgICAgICAgc3VwcG9ydGVkIHdoZW4gdXNpbmcg
T3BlbkdMLCBhbmQgd2Ugb25seSBjaGVjayBmb3IgdGhlIGV4dGVuc2lvbnMgd2hlbiB1c2luZyBH
TEVTMi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhlcmUncyBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4dHVyZVRvQ29tcG9z
aXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6bWFrZUNvbnRl
eHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1M
YXllcjo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFy
ZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjp+VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0VkFPKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTERhdGE6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBhcmVGaWx0ZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
aW5kRGVmYXVsdFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
ZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
Lmg6CisKIDIwMTctMTEtMTUgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtDYWlyb10gR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygpIGhh
cyB0byB1cGRhdGUgc3RhdGUncyBzaGFkb3cgb2Zmc2V0IHdoZW4gaWdub3JpbmcgdHJhbnNmb3Jt
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKaW5kZXggZGZjYzM2NDMzODExYWI4YTQ2ZTRhNDIxZjdhYWMwMzBjZTYyOGRlYy4u
NjU5YzQ0YzRlZjIwNzM5YTI0MDk3YmUwOWJiODY5Zjg3NGEyOGExMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC03
MjUsNyArNzI1LDYgQEAgcHVibGljOgogICAgIGVudW0gUmVuZGVyU3R5bGUgewogICAgICAgICBS
ZW5kZXJPZmZzY3JlZW4sCiAgICAgICAgIFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LAotICAg
ICAgICBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQKICAgICB9OwogCiAgICAgY2xhc3MgQ29udGV4
dExvc3RDYWxsYmFjayB7CkBAIC03NDQsNyArNzQzLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9yTWVzc2FnZUNhbGxiYWNr
Pik7CiAKICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0RBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJP
ZmZzY3JlZW4pOwotICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUZv
ckN1cnJlbnRHTENvbnRleHQoKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0QoKTsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggMzgzMmU0ODQ2N2Rl
MTYyY2UzZTczM2E5Y2NkMzBlYmYzNGUwYzQxNy4uY2UzNzAzYmJlYmM5MTdhYjE1MTA0ZDRlOGJj
NjBkNjQ0M2ZlODFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC00MCwxNCArNDAs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250
ZXh0M0QqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCi0gICAg
OiBtX3JlbmRlclN0eWxlKHJlbmRlclN0eWxlKQogewogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUp
IHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CiAgICAgICAg
IG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0Ogot
ICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAppbmRleCA3MThiYWVlMTViNDI0YmQ5MDkxOWI3Zjhj
ZmMyNzI3MzIyODY1NDgxLi4xYjQyMjg2ZGRmNDY1YzBlMmIxMjRkOGFmZGYwZjdjZDY0NzdjYmI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApAQCAtMzQsMTEgKzM0LDggQEAgcHVibGljOgogICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSgpIHsgcmV0dXJuIG1fcmVuZGVyU3R5bGU7IH0KLQogcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyU3R5bGUgbV9yZW5kZXJTdHlsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggZjMwMzkwZmY0ZTU5NmI4MWVkNzRlMDNlYzY1M2Vm
N2IwMWJhZDJlZi4uNGJkODg0NjdlYzhiMWU2ZWNhOWYzZjc3Yjk5ZWEzZmQ3Y2Q2OTVkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTIyMCwxNCArMjIwLDYgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyBhdHRyaWJ1dGVzLCBIb3MKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmIChtX3RleG1hcExheWVy
LT5yZW5kZXJTdHlsZSgpID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuOwotI2Vsc2UKLSAgICBpZiAobV9wcml2YXRlLT5yZW5kZXJTdHlsZSgpID09IFJlbmRlclRv
Q3VycmVudEdMQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV90ZXh0dXJlKQogICAgICAgICA6OmdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKaW5kZXggNTMwMzliMjI1ODVmZmYwMTdiYjMyOWI3YTg0
MmRiZGRmZDBiMjU3OS4uNzA0MDA3MzBkMzgzMjBjNDNlMjA2YWRmZmZjNTA2ZTc4OGI1ZTFmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcApAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5o
IgogI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTcxNywxMSArNzE2LDggQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgc2l6ZSA9IEludFNpemUoR1NUX1ZJREVPX0lO
Rk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKSk7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBi
dWZmZXIgPSBtX3BsYXRmb3JtTGF5ZXJQcm94eS0+Z2V0QXZhaWxhYmxlQnVmZmVyKHNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpET05UX0NBUkUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gYnVmZmVyID0gbV9wbGF0Zm9ybUxheWVyUHJveHkt
PmdldEF2YWlsYWJsZUJ1ZmZlcihzaXplLCBHTF9ET05UX0NBUkUpOwogICAgIGlmIChVTkxJS0VM
WSghYnVmZmVyKSkgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fY29udGV4dDNEKSkKLSAgICAg
ICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzREF0dHJpYnV0ZXMoKSwgbnVsbHB0ciwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRv
Q3VycmVudEdMQ29udGV4dCk7Ci0KICAgICAgICAgVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1
dGVzIGNvbnRleHRBdHRyaWJ1dGVzOwogICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5pbml0aWFs
aXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5oCmluZGV4IDgxZDc0NGE4ZGQzOWNjMzQwMzk2Y2UxZGExNjg0ZDQ1NGIxOWQ3Y2EuLmRk
NzE2ZGI2MGRiNTNkMzEyNTViYTc4NTI5Nzk5ODk2YjI1N2FkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtMjM0LDcgKzIzNCw2
IEBAIHByb3RlY3RlZDoKICAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlPiBtX2RyYXdUaW1lcjsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwogICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRl
eCBkYTZkZmNmYjgxNDNkMWUzZTgzY2MxYzA5OTE0ODYyZTU3MmZlYWM2Li5kZjI1ZjU5M2RlYzgz
Mzk4MDk1NGYyNmJiYjBiYmRmYzZlMDU5YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEzMiwxOSArMTMyLDYgQEAgc3RhdGljIHVpbnQ2
NF90IG5hbWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgYXV0byBjb250
ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHQzRCh7IH0sIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpKTsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCi0gICAgaWYgKCFjb250ZXh0LT5tX3RleG1hcExheWVyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSNlbHNlCi0gICAgaWYgKCFjb250ZXh0LT5tX3ByaXZhdGUpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIFdURk1vdmUoY29udGV4dCk7Ci19Ci0KIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lv
bnMgPSBnZXRFeHRlbnNpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAppbmRleCBiN2U2NTgwNzIzMTE3Yjlh
MWY4YjlhNWEwY2E0Y2Y1YTZmM2E4MDhkLi41YWQwNGJlMTg0MWI1OTEyNzkzN2UzYmQ1MDNlNmNi
ZjU0YzA2ZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUg
IkJpdG1hcFRleHR1cmUuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTgwLDcgKzc5LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwQm91bmRzKCkgPSAwOwogICAgIHZpcnR1YWwgUmVmPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWY8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVy
ZShHQzNEaW50IGludGVybmFsRm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBSZWY8Qml0bWFwVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZShpbnQgaW50ZXJuYWxGb3JtYXQpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCBiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgPSAwKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZW5kUGFpbnRpbmcoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0
QXR0cmlidXRlcy5jcHAKaW5kZXggZTVhZjIzZWVmYjk5NWE3NDVlYWI1NjlkNTZmN2YxMTQ4YmJl
ODU3OS4uZjAzY2YwNjljNGM0MjM5ZTllZTcxZjk3YmYyZjA1ODExMTg1ZmNhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJD
b250ZXh0QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5jcHAKQEAgLTM3LDEzICsz
NywxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6aW5pdGlhbGl6ZSgp
CiB7CiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgIGlzR0xFUzJDb21wbGlhbnQgPSB0cnVlOwot
I2VuZGlmCiAKICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotCi0gICAgc3VwcG9ydHNO
UE9UVGV4dHVyZXMgPSAhaXNHTEVTMkNvbXBsaWFudCB8fCBleHRlbnNpb25zU3RyaW5nLmNvbnRh
aW5zKEFTQ0lJTGl0ZXJhbCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpKTsKKyAgICBzdXBwb3J0c05Q
T1RUZXh0dXJlcyA9IGV4dGVuc2lvbnNTdHJpbmcuY29udGFpbnMoQVNDSUlMaXRlcmFsKCJHTF9P
RVNfdGV4dHVyZV9ucG90IikpOwogICAgIHN1cHBvcnRzQkdSQTg4ODggPSBleHRlbnNpb25zU3Ry
aW5nLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
IikpOwotICAgIHN1cHBvcnRzVW5wYWNrU3ViaW1hZ2UgPSAhaXNHTEVTMkNvbXBsaWFudCB8fCBl
eHRlbnNpb25zU3RyaW5nLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiR0xfRVhUX3VucGFja19zdWJp
bWFnZSIpKTsKKyAgICBzdXBwb3J0c1VucGFja1N1YmltYWdlID0gZXh0ZW5zaW9uc1N0cmluZy5j
b250YWlucyhBU0NJSUxpdGVyYWwoIkdMX0VYVF91bnBhY2tfc3ViaW1hZ2UiKSk7CisjZWxzZQor
ICAgIGlzR0xFUzJDb21wbGlhbnQgPSBmYWxzZTsKKyAgICBzdXBwb3J0c05QT1RUZXh0dXJlcyA9
IHRydWU7CisgICAgc3VwcG9ydHNCR1JBODg4OCA9IHRydWU7CisgICAgc3VwcG9ydHNVbnBhY2tT
dWJpbWFnZSA9IHRydWU7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJDb250ZXh0QXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5oCmluZGV4IDAwYzdiOTkw
MjQzZTA4MjVjYTFmMTk1ZjI2MTVlZDY4NzQzOWFiMDEuLjJiNjY4ZTlkYjdlNmI4YjM3NmEyYjA5
ZWIzYTY4NzJjYjA0OWU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbnRleHRB
dHRyaWJ1dGVzLmgKQEAgLTMzLDcgKzMzLDYgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJDb250ZXh0
QXR0cmlidXRlcyB7CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQgeyBmYWxzZSB9OwotCiAgICAgYm9vbCBzdXBwb3J0c05QT1RUZXh0dXJlcyB7IGZh
bHNlIH07CiAgICAgYm9vbCBzdXBwb3J0c0JHUkE4ODg4IHsgZmFsc2UgfTsKICAgICBib29sIHN1
cHBvcnRzVW5wYWNrU3ViaW1hZ2UgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcAppbmRleCA2ZWRmMTg2YTI5ZjE4ZjcwNDYyZDJlODc2
NWFjMzUzZDAzYzNmMDI4Li42YzU2OGU0NTQ0YzNkNzQ3NjgzMmQyYzViMjRlOGFlNGJjMDExYThi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcApA
QCAtMjIsMTYgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCiAKLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkv
Z2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVNfMikKLSNkZWZpbmUgR0xfR0xFWFRfUFJPVE9UWVBF
UyAxCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0j
ZW5kaWYKLQogI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgogI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkuaCIKIApAQCAtMzksMjIgKzMyLDE4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQot
ICAgICwgbV9yZW5kZXJTdHlsZShyZW5kZXJTdHlsZSkKIHsKICAgICBzd2l0Y2ggKHJlbmRlclN0
eWxlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgogICAg
ICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4
dDoKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3c6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQp
Ci0gICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNj
cmVlbikKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSgpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpOwogI2VuZGlm
CiB9CiAKQEAgLTY4LDEyICs1NywxNCBAQCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6
On5UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoKQogCiBib29sIFRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICByZXR1cm4gbV9n
bENvbnRleHQgPyBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkgOiBmYWxzZTsKKyAg
ICBBU1NFUlQobV9nbENvbnRleHQpOworICAgIHJldHVybiBtX2dsQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgVGV4dHVyZU1hcHBl
ckdDM0RQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKQogewotICAgIHJldHVybiBtX2ds
Q29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29udGV4dDo6Y3Vy
cmVudCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOworICAg
IHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCkBAIC04NCw3ICs3NSw2IEBAIFJlZlB0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXI6OnByb3h5KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnN3YXBC
dWZmZXJzSWZOZWVkZWQoKQogewotICAgIEFTU0VSVChtX3JlbmRlclN0eWxlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pOwogICAgIGlmIChtX2NvbnRleHQubGF5ZXJDb21w
b3NpdGVkKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAyLDEwICs5Miw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICNlbHNl
CiB2b2lkIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQog
ewotICAgIGlmICghbV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pOworICAg
IEFTU0VSVChtX2dsQ29udGV4dCk7CiAKICAgICBtX2NvbnRleHQubWFya0xheWVyQ29tcG9zaXRl
ZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgKaW5k
ZXggOWEyNWQxNzAyOGI0MWQ0ZmEyNTk0OTRiNWViYTg3OWRjNGEyNWU1My4uMjJkNjY2ZTM5Zjgy
N2ZkZmU4ZDQyM2ZkMDQxNTg3Y2RiOTA5MjFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXIuaApAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6CiAKICAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJl
bmRlclN0eWxlKCkgeyByZXR1cm4gbV9yZW5kZXJTdHlsZTsgfQogCiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNTEsNyArNTAsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dDNEJiBtX2NvbnRleHQ7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBlMmQ0
NDk4ODAzNzc5ZGJkMGZhOTkyNDAxMmM5NmU4YTcxZTQwYTM3Li43ODllMGMyYTUwZDM3MTYwY2E3
OThiODUwNDJkMGUxNTQyNDc4MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHTENvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgpAQCAtNTMsMzYgKzU0LDM4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVNYXBwZXJHTERhdGEoR3JhcGhp
Y3NDb250ZXh0M0QmKTsKKyAgICBleHBsaWNpdCBUZXh0dXJlTWFwcGVyR0xEYXRhKHZvaWQqKTsK
ICAgICB+VGV4dHVyZU1hcHBlckdMRGF0YSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNp
bCgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgZ2V0U3RhdGljVkJPKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICBHTHVpbnQgZ2V0U3RhdGljVkJP
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgIEdMdWlu
dCBnZXRWQU8oKTsKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMpOwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQ
YWludEZsYWdzIFBhaW50RmxhZ3MgeyAwIH07Ci0gICAgR0MzRGludCBwcmV2aW91c1Byb2dyYW0g
eyAwIH07Ci0gICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlciB7IDAgfTsKKyAgICBHTGludCBw
cmV2aW91c1Byb2dyYW0geyAwIH07CisgICAgR0xpbnQgcHJldmlvdXNWQU8geyAwIH07CisgICAg
R0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXIgeyAwIH07CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2ls
IHsgZmFsc2UgfTsKLSAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0YXRlIHsgMCB9OwotICAg
IEdDM0RpbnQgcHJldmlvdXNEZXB0aFN0YXRlIHsgMCB9OwotICAgIEdDM0RpbnQgdmlld3BvcnRb
NF0geyAwLCB9OwotICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29yWzRdIHsgMCwgfTsKKyAgICBH
TGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZSB7IDAgfTsKKyAgICBHTGludCBwcmV2aW91c0RlcHRo
U3RhdGUgeyAwIH07CisgICAgR0xpbnQgdmlld3BvcnRbNF0geyAwLCB9OworICAgIEdMaW50IHBy
ZXZpb3VzU2Npc3Nvcls0XSB7IDAsIH07CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJl
bnRTdXJmYWNlOwogICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTDo6RmlsdGVySW5mbyogZmlsdGVy
SW5mbyB7IG51bGxwdHIgfTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBTaGFyZWRHTERhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBSZWY8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4
dDNEJiBjb250ZXh0KQorICAgICAgICBzdGF0aWMgUmVmPFNoYXJlZEdMRGF0YT4gY3VycmVudFNo
YXJlZEdMRGF0YSh2b2lkKiBwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8gaXQgPSBjb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC5wbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkpOworICAgICAgICAgICAgYXV0byBpdCA9IGNvbnRleHREYXRhTWFwKCkuZmlu
ZChwbGF0Zm9ybUNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGNvbnRleHREYXRhTWFw
KCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICppdC0+dmFsdWU7CiAKLSAgICAgICAg
ICAgIFJlZjxTaGFyZWRHTERhdGE+IGRhdGEgPSBhZG9wdFJlZigqbmV3IFNoYXJlZEdMRGF0YShj
b250ZXh0KSk7Ci0gICAgICAgICAgICBjb250ZXh0RGF0YU1hcCgpLmFkZChjb250ZXh0LnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgZGF0YS5wdHIoKSk7CisgICAgICAgICAgICBSZWY8U2hh
cmVkR0xEYXRhPiBkYXRhID0gYWRvcHRSZWYoKm5ldyBTaGFyZWRHTERhdGEpOworICAgICAgICAg
ICAgY29udGV4dERhdGFNYXAoKS5hZGQocGxhdGZvcm1Db250ZXh0LCBkYXRhLnB0cigpKTsKICAg
ICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICB9CiAKQEAgLTk2LDM2ICs5OSwzNSBAQCBw
cml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVy
R0xEYXRhOwogCi0gICAgICAgIHVzaW5nIEdMQ29udGV4dERhdGFNYXAgPSBIYXNoTWFwPFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdMRGF0YSo+OworICAgICAgICB1c2luZyBHTENv
bnRleHREYXRhTWFwID0gSGFzaE1hcDx2b2lkKiwgU2hhcmVkR0xEYXRhKj47CiAgICAgICAgIHN0
YXRpYyBHTENvbnRleHREYXRhTWFwJiBjb250ZXh0RGF0YU1hcCgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHTENvbnRleHREYXRhTWFwPiBtYXA7CiAgICAg
ICAgICAgICByZXR1cm4gbWFwOwogICAgICAgICB9CiAKLSAgICAgICAgZXhwbGljaXQgU2hhcmVk
R0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0RGF0YU1hcCgpLmFkZChjb250ZXh0LnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSwgdGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgU2hhcmVkR0xEYXRhKCkgPSBkZWZhdWx0Owog
CiAgICAgICAgIEhhc2hNYXA8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMsIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4+IG1fcHJvZ3JhbXM7CiAgICAgfTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dDNEJiBtX2NvbnRleHQ7CiAgICAgUmVmPFNoYXJlZEdMRGF0YT4g
bV9zaGFyZWRHTERhdGE7Ci0gICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVj
dD4gbV92Ym9zOworICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIEdMdWludD4gbV92Ym9zOworICAg
IEdMdWludCBtX3ZhbyB7IDAgfTsKIH07CiAKLVRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVN
YXBwZXJHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKLSAgICAsIG1fc2hhcmVkR0xEYXRhKFNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJl
ZEdMRGF0YShtX2NvbnRleHQpKQorVGV4dHVyZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdM
RGF0YSh2b2lkKiBwbGF0Zm9ybUNvbnRleHQpCisgICAgOiBtX3NoYXJlZEdMRGF0YShTaGFyZWRH
TERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEocGxhdGZvcm1Db250ZXh0KSkKIHsKIH0KIAogVGV4
dHVyZU1hcHBlckdMRGF0YTo6flRleHR1cmVNYXBwZXJHTERhdGEoKQogewogICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX3Zib3MpCi0gICAgICAgIG1fY29udGV4dC5kZWxldGVCdWZmZXIoZW50cnku
dmFsdWUpOworICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmVudHJ5LnZhbHVlKTsKKworICAg
IGlmIChtX3ZhbykKKyAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJm1fdmFvKTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgpCkBAIC0xMzgs
MjcgKzE0MCwzNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2ls
KCkKICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9j
b250ZXh0LmNsZWFyU3RlbmNpbCgwKTsKLSAgICBtX2NvbnRleHQuY2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CisgICAg
Z2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0
cnVlOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0YXRp
Y1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KQorR0x1aW50IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0YXRpY1ZCTyhHTGVudW0gdGFyZ2V0
LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3Zib3MuZW5zdXJlKGRhdGEsCiAgICAgICAgIFt0aGlzLCB0YXJnZXQsIHNpemUsIGRh
dGFdIHsKLSAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgdmJvID0gbV9jb250ZXh0LmNyZWF0
ZUJ1ZmZlcigpOwotICAgICAgICAgICAgbV9jb250ZXh0LmJpbmRCdWZmZXIodGFyZ2V0LCB2Ym8p
OwotICAgICAgICAgICAgbV9jb250ZXh0LmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgICAgICAgICAgR0x1aW50IHZibyA9
IDA7CisgICAgICAgICAgICBnbEdlbkJ1ZmZlcnMoMSwgJnZibyk7CisgICAgICAgICAgICBnbEJp
bmRCdWZmZXIodGFyZ2V0LCB2Ym8pOworICAgICAgICAgICAgZ2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgZGF0YSwgR0xfU1RBVElDX0RSQVcpOwogICAgICAgICAgICAgcmV0dXJuIHZibzsKICAg
ICAgICAgfSk7CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKK0dM
dWludCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRWQU8oKQoreworICAgIGlmICghbV92YW8pCisg
ICAgICAgIGdsR2VuVmVydGV4QXJyYXlzKDEsICZtX3Zhbyk7CisKKyAgICByZXR1cm4gbV92YW87
Cit9CisKIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlckdMRGF0
YTo6Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBv
cHRpb25zKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaGFyZWRHTERhdGEtPm1fcHJvZ3Jh
bXMuZW5zdXJlKG9wdGlvbnMsCi0gICAgICAgIFt0aGlzLCBvcHRpb25zXSB7IHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG9wdGlvbnMpOyB9KTsKKyAgICAgICAgW29w
dGlvbnNdIHsgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUob3B0aW9u
cyk7IH0pOwogICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIApAQCAt
MTY3LDEwICsxNzgsMTAgQEAgVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogewog
ICAgIG1fY29udGV4dEF0dHJpYnV0ZXMuaW5pdGlhbGl6ZSgpOwogCi0gICAgbV9jb250ZXh0M0Qg
PSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpOwotICAgIEFT
U0VSVChtX2NvbnRleHQzRCk7CisgICAgdm9pZCogcGxhdGZvcm1Db250ZXh0ID0gR0xDb250ZXh0
OjpjdXJyZW50KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRl
eHQpOwogCi0gICAgbV9kYXRhID0gbmV3IFRleHR1cmVNYXBwZXJHTERhdGEoKm1fY29udGV4dDNE
KTsKKyAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YShwbGF0Zm9ybUNvbnRleHQp
OwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBtX3RleHR1cmVQb29sID0gc3RkOjpt
YWtlX3VuaXF1ZTxCaXRtYXBUZXh0dXJlUG9vbD4obV9jb250ZXh0QXR0cmlidXRlcyk7CiAjZW5k
aWYKQEAgLTE4Myw0MCArMTk0LDUyIEBAIENsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlw
U3RhY2soKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdz
IGZsYWdzKQogewotICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Ci0gICAgZGF0YSgp
LnByZXZpb3VzU2Npc3NvclN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0g
bV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7Ci0g
ICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwot
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7
CisgICAgZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQ
cm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChH
TF9TQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5h
YmxlZChHTF9ERVBUSF9URVNUKTsKKyAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAg
Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCA9
IGZhbHNlOwotICAgIG1fY29udGV4dDNELT5kZXB0aE1hc2soMCk7Ci0gICAgbV9jb250ZXh0M0Qt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0
KTsKLSAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKTsKKyAgICBnbERlcHRoTWFzaygwKTsKKyAg
ICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOworICAgIGdsR2V0
SW50ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOwogICAgIG1f
Y2xpcFN0YWNrLnJlc2V0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCku
dmlld3BvcnRbM10pLCBmbGFncyAmIFBhaW50aW5nTWlycm9yZWQgPyBDbGlwU3RhY2s6OllBeGlz
TW9kZTo6RGVmYXVsdCA6IENsaXBTdGFjazo6WUF4aXNNb2RlOjpJbnZlcnRlZCk7Ci0gICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIGRhdGEo
KS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2UoMCk7CisKKyNpZiAhVVNFKE9Q
RU5HTF9FU18yKQorICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMy
MCkgeworICAgICAgICBnbEdldEludGVnZXJ2KEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HLCAmZGF0
YSgpLnByZXZpb3VzVkFPKTsKKyAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoZGF0YSgpLmdldFZB
TygpKTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50
aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgbV9j
b250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyKEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBnbENsZWFyU3Rl
bmNpbCgxKTsKKyAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0K
IAotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOwor
ICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAgIG1fY29udGV4
dDNELT5zY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91c1Nj
aXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1NjaXNz
b3JbM10pOworICAgIGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCku
cHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJl
dmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQot
ICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpOworICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7
CisgICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogCiAgICAgaWYgKGRhdGEoKS5w
cmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1RFU1QpOworICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9URVNUKTsKKyAgICAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOworCisjaWYg
IVVTRShPUEVOR0xfRVNfMikKKyAgICBpZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24o
KSA+PSAzMjApCisgICAgICAgIGdsQmluZFZlcnRleEFycmF5KGRhdGEoKS5wcmV2aW91c1ZBTyk7
CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29s
b3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMjI1LDE0ICsyNDgs
MTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9y
LCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwotICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbFVzZVByb2dy
YW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBD
b2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwg
YSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCks
IHIsIGcsIGIsIGEpOwotICAgIG1fY29udGV4dDNELT5saW5lV2lkdGgod2lkdGgpOworICAgIGds
VW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgZ2xM
aW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhdyh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsICFjb2xvci5pc09w
YXF1ZSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKKyAgICBkcmF3KHRhcmdldFJlY3QsIG1vZGVsVmll
d01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfTElORV9MT09QLCAhY29sb3IuaXNPcGFxdWUoKSA/
IFNob3VsZEJsZW5kIDogMCk7CiB9CiAKIC8vIEZJWE1FOiBkcmF3TnVtYmVyKCkgc2hvdWxkIHNh
dmUgYSBudW1iZXIgdGV4dHVyZS1hdGxhcyBhbmQgcmUtdXNlIHdoZW5ldmVyIHBvc3NpYmxlLgpA
QCAtMzUyLDIyICszNzUsMjIgQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAg
cmV0dXJuIGtlcm5lbDsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9n
cmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCitzdGF0aWMgdm9pZCBw
cmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IElu
dFNpemUmIHNpemUsIEdMdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBjb250ZXh0LT51c2VQ
cm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkpOworICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLnBy
b2dyYW1JRCgpKTsKIAogICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUoKSkgewogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dy
YW0uZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBnbFVu
aWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5maWx0ZXJBbW91
bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJP
cGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4o
b3BlcmF0aW9uKTsKQEAgLTM3OSwyOSArNDAyLDI5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0
ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlTWFwcGVyU2hhZGVy
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9y
TGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkp
OwogCi0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlv
bigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmdihwcm9ncmFtLmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR2F1c3NpYW5LZXJu
ZWxIYWxmV2lkdGgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBnbFVuaWZvcm0yZihwcm9n
cmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgp
KTsKKyAgICAgICAgZ2xVbmlmb3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxMb2NhdGlvbigp
LCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKICAg
ICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdh
dXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgZ2xVbmlm
b3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhh
bGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAg
ICAgICBjYXNlIDA6CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhh
IGJsdXIuCi0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVz
TG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwg
MCk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRM
b2NhdGlvbigpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCks
IHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOworICAgICAg
ICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93
LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgICAgICAgICBDb2xvcihwcmVt
dWx0aXBsaWVkQVJHQkZyb21Db2xvcihzaGFkb3cuY29sb3IoKSkpLmdldFJHQkEociwgZywgYiwg
YSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0aW9u
KCksIHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0u
Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLnNo
YWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwotICAgICAgICAgICAgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwotICAgICAgICAgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0
dXJlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLmNvbnRlbnRUZXh0
dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9y
TG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChz
aXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09m
ZnNldExvY2F0aW9uKCksIDAsIDApOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUxKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgY29udGVu
dFRleHR1cmUpOworICAgICAgICAgICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS5jb250ZW50VGV4dHVy
ZUxvY2F0aW9uKCksIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC00MzcsNyArNDYwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBk
cmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3BhcXVlKCkgPyAwIDogU2hv
dWxkQmxlbmQsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwg
ZXhwb3NlZEVkZ2VzKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRF
ZGdlcykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShHTHVpbnQgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKICAgICBib29sIHVzZVJl
Y3QgPSBmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0OwogICAgIGJvb2wgdXNlQW50aWFs
aWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKQEAgLTQ1Nyw3ICs0ODAs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQogICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpNYW51YWxSZXBlYXQ7CiAKICAgICBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBmaWx0ZXIgPSBkYXRhKCkuZmlsdGVySW5mbyA/IGRhdGEoKS5maWx0ZXJJbmZvLT5m
aWx0ZXI6IDA7Ci0gICAgR0MzRHVpbnQgZmlsdGVyQ29udGVudFRleHR1cmVJRCA9IDA7CisgICAg
R0x1aW50IGZpbHRlckNvbnRlbnRUZXh0dXJlSUQgPSAwOwogCiAgICAgaWYgKGZpbHRlcikgewog
ICAgICAgICBpZiAoZGF0YSgpLmZpbHRlckluZm8tPmNvbnRlbnRUZXh0dXJlKQpAQCAtNDczLDcg
KzQ5Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgUmVmPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7
CiAKICAgICBpZiAoZmlsdGVyKQotICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShtX2NvbnRl
eHQzRC5nZXQoKSwgcHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgpLmZpbHRlcklu
Zm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsKKyAgICAgICAg
cHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgp
LmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsK
IAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJl
LCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0
eSk7CiB9CkBAIC00ODgsMzAgKzUxMSwzMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Nv
bGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbgogICAg
IH0KIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEo
KS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBDb2xvcihwcmVtdWx0aXBsaWVk
QVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgbV9jb250ZXh0
M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAg
IGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAg
aWYgKGEgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAotICAgIGRyYXcocmVj
dCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFO
LCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX1RSSUFO
R0xFX0ZBTiwgZmxhZ3MpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmNsZWFyQ29sb3IoY29sb3Iu
cmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMGYsIGNvbG9yLmJsdWUoKSAvIDI1
NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1NS4wZik7Ci0gICAgbV9jb250ZXh0M0QtPmNsZWFyKEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbENsZWFyQ29sb3IoY29s
b3IucmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMGYsIGNvbG9yLmJsdWUoKSAv
IDI1NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1NS4wZik7CisgICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdlVHJpYW5nbGVz
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtKQogewotICAgIGNvbnN0IEdDM0Rm
bG9hdCBsZWZ0ID0gMDsKLSAgICBjb25zdCBHQzNEZmxvYXQgdG9wID0gMDsKLSAgICBjb25zdCBH
QzNEZmxvYXQgcmlnaHQgPSAxOwotICAgIGNvbnN0IEdDM0RmbG9hdCBib3R0b20gPSAxOwotICAg
IGNvbnN0IEdDM0RmbG9hdCBjZW50ZXIgPSAwLjU7CisgICAgY29uc3QgR0xmbG9hdCBsZWZ0ID0g
MDsKKyAgICBjb25zdCBHTGZsb2F0IHRvcCA9IDA7CisgICAgY29uc3QgR0xmbG9hdCByaWdodCA9
IDE7CisgICAgY29uc3QgR0xmbG9hdCBib3R0b20gPSAxOworICAgIGNvbnN0IEdMZmxvYXQgY2Vu
dGVyID0gMC41OwogCiAvLyBFYWNoIDRkIHRyaWFuZ2xlIGNvbnNpc3RzIG9mIGEgY2VudGVyIHBv
aW50IGFuZCB0d28gZWRnZSBwb2ludHMsIHdoZXJlIHRoZSB6dyBjb29yZGluYXRlcwogLy8gb2Yg
ZWFjaCB2ZXJ0ZXggZXF1YWxzIHRoZSBuZWFyZXN0IHBvaW50IHRvIHRoZSB2ZXJ0ZXggb24gdGhl
IGVkZ2UuCkBAIC01MjAsNyArNTQzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdl
VHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtKQogICAgIHgyLCB5
MiwgeDIsIHkyLCBcCiAgICAgY2VudGVyLCBjZW50ZXIsICh4MSArIHgyKSAvIDIsICh5MSArIHky
KSAvIDIKIAotICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RTaWRlVHJpYW5nbGVz
W10gPSB7CisgICAgc3RhdGljIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RTaWRlVHJpYW5nbGVzW10g
PSB7CiAgICAgICAgIFNJREVfVFJJQU5HTEVfREFUQShsZWZ0LCB0b3AsIHJpZ2h0LCB0b3ApLAog
ICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEobGVmdCwgdG9wLCBsZWZ0LCBib3R0b20pLAogICAg
ICAgICBTSURFX1RSSUFOR0xFX0RBVEEocmlnaHQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCkBAIC01
MjgsNDEgKzU1MSw0MSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VUcmlhbmdsZXMo
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0pCiAgICAgfTsKICN1bmRlZiBTSURF
X1RSSUFOR0xFX0RBVEEKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgdmJvID0gZGF0YSgpLmdldFN0
YXRpY1ZCTyhHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZsb2F0
KSAqIDQ4LCB1bml0UmVjdFNpZGVUcmlhbmdsZXMpOwotICAgIG1fY29udGV4dDNELT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7Ci0gICAgbV9jb250ZXh0
M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpLCA0LCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBtX2NvbnRleHQzRC0+ZHJh
d0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7Ci0gICAgbV9jb250
ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7Cisg
ICAgR0x1aW50IHZibyA9IGRhdGEoKS5nZXRTdGF0aWNWQk8oR0xfQVJSQVlfQlVGRkVSLCBzaXpl
b2YoR0MzRGZsb2F0KSAqIDQ4LCB1bml0UmVjdFNpZGVUcmlhbmdsZXMpOworICAgIGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0udmVydGV4TG9jYXRpb24oKSwgNCwgR0xfRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCAxMik7CisgICAgZ2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgMCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VW5pdFJlY3Qo
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2Rl
KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdChUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSYgcHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdNb2RlKQogewotICAgIHN0YXRpYyBjb25z
dCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHsgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSB9OwotICAg
IFBsYXRmb3JtM0RPYmplY3QgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZCTyhHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZsb2F0KSAqIDgsIHVuaXRSZWN0KTsKLSAg
ICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCB2Ym8pOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udmVy
dGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7
Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwotICAgIG1f
Y29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAp
OworICAgIHN0YXRpYyBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7IDAsIDAsIDEsIDAsIDEs
IDEsIDAsIDEgfTsKKyAgICBHTHVpbnQgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZCTyhHTF9BUlJB
WV9CVUZGRVIsIHNpemVvZihHTGZsb2F0KSAqIDgsIHVuaXRSZWN0KTsKKyAgICBnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9n
cmFtLnZlcnRleExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2xE
cmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBnbEJpbmRCdWZmZXIoR0xfQVJSQVlf
QlVGRkVSLCAwKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXcoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUs
IEZsYWdzIGZsYWdzKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXcoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdNb2RlLCBGbGFn
cyBmbGFncykKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobW9kZWxWaWV3TWF0
cml4KTsKICAgICBtYXRyaXgubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1Jl
Y3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCByZWN0KSk7CiAKLSAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0udmVydGV4TG9jYXRpb24oKSk7CiAgICAgcHJv
Z3JhbS5zZXRNYXRyaXgocHJvZ3JhbS5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgp
OwogICAgIHByb2dyYW0uc2V0TWF0cml4KHByb2dyYW0ucHJvamVjdGlvbk1hdHJpeExvY2F0aW9u
KCksIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KTsKIAogICAgIGlmIChpc0luTWFza01vZGUoKSkg
ewotICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJP
LCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBnbEJsZW5kRnVuYyhHTF9a
RVJPLCBHTF9TUkNfQUxQSEEpOworICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQmxlbmQpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICAgICAgbV9jb250ZXh0M0QtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICAgICAgZ2xCbGVuZEZ1bmMo
R0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGdsRW5hYmxlKEdM
X0JMRU5EKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICAgICAgZ2xEaXNhYmxlKEdMX0JM
RU5EKTsKICAgICB9CiAKICAgICBpZiAoZmxhZ3MgJiBTaG91bGRBbnRpYWxpYXMpCkBAIC01NzAs
MjEgKzU5MywyMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtbwogICAgIGVsc2UKICAgICAgICAg
ZHJhd1VuaXRSZWN0KHByb2dyYW0sIGRyYXdpbmdNb2RlKTsKIAotICAgIG1fY29udGV4dDNELT5k
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBt
X2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09O
RV9NSU5VU19TUkNfQUxQSEEpOworICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKIH0KIAogdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNv
bnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBtX2Nv
bnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW1JRCgpKTsKLSAgICBtX2NvbnRleHQz
RC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgIEdDM0Rl
bnVtIHRhcmdldCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QgPyBHQzNEZW51bShF
eHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikgOiBHQzNEZW51bShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKHRhcmdl
dCwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLnNhbXBsZXJM
b2NhdGlvbigpLCAwKTsKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS5wcm9ncmFtSUQoKSk7Cisg
ICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBHTGVudW0gdGFyZ2V0ID0gZmxh
Z3MgJiBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdMZW51bShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BUkIpIDogR0xlbnVtKEdMX1RFWFRVUkVfMkQpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0
LCB0ZXh0dXJlKTsKKyAgICBnbFVuaWZvcm0xaShwcm9ncmFtLnNhbXBsZXJMb2NhdGlvbigpLCAw
KTsKICAgICBpZiAod3JhcE1vZGUoKSA9PSBSZXBlYXRXcmFwICYmIG1fY29udGV4dEF0dHJpYnV0
ZXMuc3VwcG9ydHNOUE9UVGV4dHVyZXMpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCk7Ci0gICAgICAgIG1fY29u
dGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQp
OworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX1JFUEVBVCk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfUkVQRUFUKTsKICAgICB9CiAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0gdGhpcy0+cGF0dGVyblRyYW5zZm9ybSgpOwpAQCAt
NjA5LDE0ICs2MzIsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHIKIAogICAgIHByb2dyYW0u
c2V0TWF0cml4KHByb2dyYW0udGV4dHVyZVNwYWNlTWF0cml4TG9jYXRpb24oKSwgcGF0dGVyblRy
YW5zZm9ybSk7CiAgICAgcHJvZ3JhbS5zZXRNYXRyaXgocHJvZ3JhbS50ZXh0dXJlQ29sb3JTcGFj
ZU1hdHJpeExvY2F0aW9uKCksIGNvbG9yU3BhY2VNYXRyaXhGb3JGbGFncyhmbGFncykpOwotICAg
IG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0
eSk7CisgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7
CiAKICAgICBpZiAob3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwog
Ci0gICAgZHJhdyhyZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250
ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOworICAgIGRyYXcocmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9UUklB
TkdMRV9GQU4sIGZsYWdzKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CiB9CiAK
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYg
c2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSogY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKQEAgLTYyNSw3ICs2NDgsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIs
IGNvbnN0IEJpdG1hcFRleAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25z
IG9wdGlvbnMgPSBvcHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXIudHlwZSgpLCBwYXNzKTsKICAg
ICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKIAotICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKG1fY29udGV4
dDNELmdldCgpLCBwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNp
emUoKSwgY29udGVudFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wq
Pihjb250ZW50VGV4dHVyZSktPmlkKCkgOiAwKTsKKyAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgY29udGVu
dFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihjb250ZW50VGV4
dHVyZSktPmlkKCkgOiAwKTsKICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChJbnRQb2ludDo6emVy
bygpLCBzYW1wbGVyLmNvbnRlbnRTaXplKCkpOwogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJv
Z3JhbShwcm9ncmFtLmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihz
YW1wbGVyKS5pZCgpLCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCAxKTsKIH0KQEAgLTY1MSw3ICs2NzQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmluZERlZmF1bHRTdXJmYWNlKCkKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBhdXRvJiB2aWV3cG9ydCA9IGRh
dGEoKS52aWV3cG9ydDsKICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pLCBkYXRhKCkuUGFp
bnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIG1fY29udGV4dDNELT52aWV3cG9ydCh2
aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFszXSk7CisgICAg
Z2xWaWV3cG9ydCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9y
dFszXSk7CiAgICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKICAgICBkYXRhKCkuY3VycmVudFN1cmZh
Y2UgPSBudWxscHRyOwogfQpAQCAtNzAyLDEyICs3MjUsMTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4
LCBjb24KIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRh
dGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENv
bG9yKTsKIAotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgp
KTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7Ci0gICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwg
MSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBkYXRhKCkuZ2V0
U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxv
YXQpICogOCwgdW5pdFJlY3QpOwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKKyAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCkpOworICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAx
LCAxLCAwLCAxfTsKKyAgICBHTHVpbnQgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZCTyhHTF9BUlJB
WV9CVUZGRVIsIHNpemVvZihHTGZsb2F0KSAqIDgsIHVuaXRSZWN0KTsKKyAgICBnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9n
cmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDApOwogCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG1vZGVsVmlld01hdHJpeCk7CiAgICAgbWF0cml4
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdCgwLCAw
LCAxLCAxKSwgdGFyZ2V0UmVjdCkpOwpAQCAtNzE2LDMwICs3MzksMzAgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBjb24KIAogICAgIGludCBzdGVuY2lsSW5kZXggPSBjbGlwU3RhY2soKS5nZXRTdGVu
Y2lsSW5kZXgoKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCk7CisgICAgZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0gICAgbV9jb250ZXh0
M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwgc3RlbmNpbEluZGV4LCBz
dGVuY2lsSW5kZXgpOworICAgIGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJbmRleCwg
c3RlbmNpbEluZGV4KTsKIAogICAgIC8vIE9wZXJhdGUgb25seSBvbiB0aGUgc3RlbmNpbEluZGV4
IGFuZCBhYm92ZS4KLSAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMHhmZiAmIH4oc3RlbmNp
bEluZGV4IC0gMSkpOworICAgIGdsU3RlbmNpbE1hc2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0g
MSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhlIGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJl
bnQgaW5kZXguCiAgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRy
aXhMb2NhdGlvbigpLCBmdWxsUHJvamVjdGlvbk1hdHJpeCk7CiAgICAgcHJvZ3JhbS0+c2V0TWF0
cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpOwotICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpF
Uk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Ci0g
ICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZB
TiwgMCwgNCk7CisgICAgZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVSTyk7Cisg
ICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBOb3cgYXBw
bHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFkLgotICAgIG1fY29udGV4dDNELT5z
dGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSk7CisgICAgZ2xTdGVuY2lsT3AoR0xf
UkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSk7CiAgICAgcHJvZ3JhbS0+c2V0TWF0cml4
KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJvamVjdGlvbk1h
dHJpeCk7CiAgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExv
Y2F0aW9uKCksIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3ND
b250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFO
R0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAgbV9jb250ZXh0
M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7Ci0gICAg
bV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CisgICAgZ2xCaW5kQnVm
ZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgZ2xTdGVuY2lsTWFzaygwKTsKIAogICAg
IC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgogICAg
IGNsaXBTdGFjaygpLnNldFN0ZW5jaWxJbmRleChzdGVuY2lsSW5kZXggKiAyKTsKQEAgLTc1Nyw3
ICs3ODAsNyBAQCBJbnRSZWN0IFRleHR1cmVNYXBwZXJHTDo6Y2xpcEJvdW5kcygpCiAgICAgcmV0
dXJuIGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94OwogfQogCi1SZWY8Qml0bWFwVGV4
dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKEdDM0RpbnQgaW50ZXJuYWxGb3Jt
YXQpCitSZWY8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKEdM
aW50IGludGVybmFsRm9ybWF0KQogewogICAgIHJldHVybiBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0
ZShtX2NvbnRleHRBdHRyaWJ1dGVzLCBpbnRlcm5hbEZvcm1hdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmgKaW5kZXggMWM4ODk5NjU2MDhlMjIwYzk0NTkxYTJmNjYyZTdlOWUxNzZkYjA2ZC4uMzY5MWFh
YTllMGY2YzAxZWMxZTgwNjkzMWMxZDFiOTIxYjA0YjcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApA
QCAtMjUsMTAgKzI1LDEwIEBACiAKICNpbmNsdWRlICJDbGlwU3RhY2suaCIKICNpbmNsdWRlICJG
aWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdM
SGVhZGVycy5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0JvcmRl
cihjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd051bWJlcihp
bnQgbnVtYmVyLCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0
bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncywg
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0
eSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dHVyZShHTHVpbnQgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVT
aXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdl
cyA9IEFsbEVkZ2VzKTsKICAgICB2b2lkIGRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAg
ICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIApAQCAtNzMsOCArNzMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRDbGlwKCkgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgb3ZlcnJpZGU7CiAgICAgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KLSAgICBSZWY8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OkRPTlRfQ0FSRSk7IH0KLSAgICBSZWY8Qml0bWFwVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZShHQzNEaW50IGludGVybmFsRm9ybWF0KSBvdmVycmlkZTsKKyAgICBSZWY8
Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0ZVRl
eHR1cmUoR0xfRE9OVF9DQVJFKTsgfQorICAgIFJlZjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKEdMaW50IGludGVybmFsRm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0ZpbHRl
cmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1
cmUqIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCBpbnQgcGFzcyk7CiAK
QEAgLTgyLDkgKzgyLDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1RleHR1
cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiwgdWludDMyX3Qg
dGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5KTsKLSAg
ICB2b2lkIGRyYXcoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSwgRmxhZ3MpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSYsIEdMZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MpOwogCi0gICAgdm9pZCBkcmF3
VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mLCBHQzNEZW51bSBkcmF3aW5nTW9k
ZSk7CisgICAgdm9pZCBkcmF3VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mLCBH
TGVudW0gZHJhd2luZ01vZGUpOwogICAgIHZvaWQgZHJhd0VkZ2VUcmlhbmdsZXMoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0mKTsKIAogICAgIGJvb2wgYmVnaW5TY2lzc29yQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtOTMsNyArOTMsNiBA
QCBwcml2YXRlOgogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1
cm4gKm1fZGF0YTsgfQogCiAgICAgVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzIG1fY29u
dGV4dEF0dHJpYnV0ZXM7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQz
RDsKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNrIG1fY2xp
cFN0YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327052</attachid>
            <date>2017-11-16 01:24:24 -0800</date>
            <delta_ts>2017-11-16 04:22:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174860-20171116102422.patch</filename>
            <type>text/plain</type>
            <size>50734</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwODVhOWU3ODU3NjZm
N2E0MjEwMDRlYmJmYTcyYWUzNzYwN2UzOS4uZDk3OGY5MGM4MTVkMmRhNmRlYTJkNWYzZjY5ZDQ3
M2ZmMDU4NjQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE3LTExLTE2ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1RleE1hcF0gUmVtb3Zl
IHVzZSBvZiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyB1c2VzIG9mIEdDM0QgdGhhdCBhcmUg
bm90IFdlYkdMIHJlbGF0ZWQ6CisgICAgICAgIC0gUmVtb3ZlIHRoZSBvcHRpb24gdG8gY3JlYXRl
IGEgR0MzRCB0byByZW5kZXIgdG8gdGhlIGN1cnJlbiBPcGVuR0wgY29udGV4dC4KKyAgICAgICAg
LSBSZW1vdmUgdGhlIHJlbWFpbmluZyB1c2FnZSBvZiBHQzNEIGluc2lkZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLgorICAgICAgICAtIFJlcGxhY2UgdGhlIHVzYWdlIGluc2lkZSBU
ZXh0dXJlTWFwcGVyIHdpdGggZGlyZWN0IE9wZW5HTCBjYWxscywgYW5kIHVzZSBhCisgICAgICAg
IFZBTyB3aGVuIHRoZSBPcGVuR0wgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAzLjIuCisKKyAgICAg
ICAgVGhpcyBhbHNvIG1vZGlmaWVzIFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcyBzbyBh
bGwgdGhlIHRlc3RlZCBmZWF0dXJlcyBhcmUKKyAgICAgICAgc3VwcG9ydGVkIHdoZW4gdXNpbmcg
T3BlbkdMLCBhbmQgd2Ugb25seSBjaGVjayBmb3IgdGhlIGV4dGVuc2lvbnMgd2hlbiB1c2luZyBH
TEVTMi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhlcmUncyBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4dHVyZVRvQ29tcG9z
aXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6bWFrZUNvbnRl
eHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1M
YXllcjo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFy
ZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjp+VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpnZXRTdGF0aWNWQk8pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0VkFPKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTERhdGE6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBhcmVGaWx0ZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3RWRnZVRyaWFuZ2xlcyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
aW5kRGVmYXVsdFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
ZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
Lmg6CisKIDIwMTctMTEtMTYgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6ICFpc0Fub255bW91cygpIGluIFdlYkNvcmU6OlJlbmRl
ck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVUb2tlbkNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRmY2MzNjQz
MzgxMWFiOGE0NmU0YTQyMWY3YWFjMDMwY2U2MjhkZWMuLjY1OWM0NGM0ZWYyMDczOWEyNDA5N2Jl
MDliYjg2OWY4NzRhMjhhMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzI1LDcgKzcyNSw2IEBAIHB1YmxpYzoK
ICAgICBlbnVtIFJlbmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAogICAgICAg
ICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKLSAgICAgICAgUmVuZGVyVG9DdXJyZW50R0xD
b250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNzQ0
LDcgKzc0Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6dW5pcXVlX3B0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pOwogCiAgICAgc3RhdGljIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcywg
SG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLSAgICBzdGF0aWMg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0KCk7CiAg
ICAgfkdyYXBoaWNzQ29udGV4dDNEKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuY3BwCmluZGV4IDM4MzJlNDg0NjdkZTE2MmNlM2U3MzNhOWNjZDMwZWJmMzRl
MGM0MTcuLmNlMzcwM2JiZWJjOTE3YWIxNTEwNGQ0ZThiYzYwZDY0NDNmZTgxYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcApAQCAtNDAsMTQgKzQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotICAgIDogbV9yZW5kZXJTdHlsZShyZW5kZXJT
dHlsZSkKIHsKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgogICAgICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dDoKLSAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3c6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgKaW5kZXggNzE4YmFlZTE1YjQyNGJkOTA5MTliN2Y4Y2ZjMjcyNzMyMjg2NTQ4MS4uMWI0MjI4
NmRkZjQ2NWMwZTJiMTI0ZDhhZmRmMGY3Y2Q2NDc3Y2JiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgKQEAgLTM0LDExICszNCw4IEBAIHB1YmxpYzoKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUoKSB7IHJldHVy
biBtX3JlbmRlclN0eWxlOyB9Ci0KIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29u
dGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIG1f
cmVuZGVyU3R5bGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmlu
ZGV4IGYzMDM5MGZmNGU1OTZiODFlZDc0ZTAzZWM2NTNlZjdiMDFiYWQyZWYuLjRiZDg4NDY3ZWM4
YjFlNmVjYTlmM2Y3N2I5OWVhM2ZkN2NkNjk1ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCkBAIC0yMjAsMTQgKzIyMCw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zCiAK
IEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotI2lmIFVTRShURVhU
VVJFX01BUFBFUikKLSAgICBpZiAobV90ZXhtYXBMYXllci0+cmVuZGVyU3R5bGUoKSA9PSBSZW5k
ZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgaWYgKG1f
cHJpdmF0ZS0+cmVuZGVyU3R5bGUoKSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKLSNlbmRpZgotCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYg
KG1fdGV4dHVyZSkKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3Bw
CmluZGV4IDUzMDM5YjIyNTg1ZmZmMDE3YmIzMjliN2E4NDJkYmRkZmQwYjI1NzkuLjcwNDAwNzMw
ZDM4MzIwYzQzZTIwNmFkZmZmYzUwNmU3ODhiNWUxZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAK
IAogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZUdTdHJl
YW1lci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCkBAIC03MTcsMTEgKzcxNiw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBJ
bnRTaXplIHNpemUgPSBJbnRTaXplKEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pLCBH
U1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbykpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gYnVmZmVyID0gbV9wbGF0Zm9ybUxheWVy
UHJveHktPmdldEF2YWlsYWJsZUJ1ZmZlcihzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6RE9OVF9D
QVJFKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXI+IGJ1ZmZlciA9IG1fcGxhdGZvcm1MYXllclByb3h5LT5nZXRBdmFpbGFibGVCdWZmZXIoc2l6
ZSwgR0xfRE9OVF9DQVJFKTsKICAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFtX2NvbnRleHQzRCkpCi0gICAgICAgICAgICBtX2NvbnRleHQzRCA9IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKCksIG51
bGxwdHIsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpOwotCiAg
ICAgICAgIFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcyBjb250ZXh0QXR0cmlidXRlczsK
ICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuaW5pdGlhbGl6ZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAppbmRleCA4MWQ3NDRhOGRk
MzljYzM0MDM5NmNlMWRhMTY4NGQ0NTRiMTlkN2NhLi5kZDcxNmRiNjBkYjUzZDMxMjU1YmE3ODUy
OTc5OTg5NmIyNTdhZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgKQEAgLTIzNCw3ICsyMzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUnVu
TG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZT4gbV9kcmF3VGltZXI7
CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQzRDsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZGE2ZGZjZmI4MTQzZDFlM2U4M2Nj
MWMwOTkxNDg2MmU1NzJmZWFjNi4uZGYyNWY1OTNkZWM4MzM5ODA5NTRmMjZiYmIwYmJkZmM2ZTA1
OWMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CkBAIC0xMzIsMTkgKzEzMiw2IEBAIHN0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihj
b25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LVJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1
cnJlbnRHTENvbnRleHQoKQotewotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoeyB9LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50
R0xDb250ZXh0KSk7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmICghY29udGV4dC0+
bV90ZXhtYXBMYXllcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZWxzZQotICAgIGlmICgh
Y29udGV4dC0+bV9wcml2YXRlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotICAg
IHJldHVybiBXVEZNb3ZlKGNvbnRleHQpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b24pCiB7CiAgICAgRXh0ZW5zaW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmgKaW5kZXggYjdlNjU4MDcyMzExN2I5YTFmOGI5YTVhMGNhNGNmNWE2ZjNhODA4
ZC4uNWFkMDRiZTE4NDFiNTkxMjc5MzdlM2JkNTAzZTZjYmY1NGMwNmU0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlLmgiCiAjaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCkBAIC04MCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZW5k
Q2xpcCgpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKICAgICB2
aXJ0dWFsIFJlZjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1
YWwgUmVmPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoR0MzRGludCBpbnRlcm5hbEZvcm1h
dCkgPSAwOworICAgIHZpcnR1YWwgUmVmPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoaW50
IGludGVybmFsRm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZyhQ
YWludEZsYWdzID0gMCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgeyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuY3BwCmluZGV4IGU1
YWYyM2VlZmI5OTVhNzQ1ZWFiNTY5ZDU2ZjdmMTE0OGJiZTg1NzkuLmYwM2NmMDY5YzRjNDIzOWU5
ZWU3MWY5N2JmMmYwNTgxMTE4NWZjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Q29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0zNywxMyArMzcsMTcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyQ29udGV4dEF0dHJpYnV0ZXM6OmluaXRpYWxpemUoKQogewogI2lmIFVTRShPUEVOR0xfRVNf
MikKICAgICBpc0dMRVMyQ29tcGxpYW50ID0gdHJ1ZTsKLSNlbmRpZgogCiAgICAgU3RyaW5nIGV4
dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmco
R0xfRVhURU5TSU9OUykpKTsKLQotICAgIHN1cHBvcnRzTlBPVFRleHR1cmVzID0gIWlzR0xFUzJD
b21wbGlhbnQgfHwgZXh0ZW5zaW9uc1N0cmluZy5jb250YWlucyhBU0NJSUxpdGVyYWwoIkdMX09F
U190ZXh0dXJlX25wb3QiKSk7CisgICAgc3VwcG9ydHNOUE9UVGV4dHVyZXMgPSBleHRlbnNpb25z
U3RyaW5nLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpKTsKICAg
ICBzdXBwb3J0c0JHUkE4ODg4ID0gZXh0ZW5zaW9uc1N0cmluZy5jb250YWlucyhBU0NJSUxpdGVy
YWwoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpKTsKLSAgICBzdXBwb3J0c1VucGFj
a1N1YmltYWdlID0gIWlzR0xFUzJDb21wbGlhbnQgfHwgZXh0ZW5zaW9uc1N0cmluZy5jb250YWlu
cyhBU0NJSUxpdGVyYWwoIkdMX0VYVF91bnBhY2tfc3ViaW1hZ2UiKSk7CisgICAgc3VwcG9ydHNV
bnBhY2tTdWJpbWFnZSA9IGV4dGVuc2lvbnNTdHJpbmcuY29udGFpbnMoQVNDSUlMaXRlcmFsKCJH
TF9FWFRfdW5wYWNrX3N1YmltYWdlIikpOworI2Vsc2UKKyAgICBpc0dMRVMyQ29tcGxpYW50ID0g
ZmFsc2U7CisgICAgc3VwcG9ydHNOUE9UVGV4dHVyZXMgPSB0cnVlOworICAgIHN1cHBvcnRzQkdS
QTg4ODggPSB0cnVlOworICAgIHN1cHBvcnRzVW5wYWNrU3ViaW1hZ2UgPSB0cnVlOworI2VuZGlm
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Q29udGV4dEF0dHJpYnV0ZXMuaAppbmRleCAwMGM3Yjk5MDI0M2UwODI1Y2ExZjE5NWYyNjE1ZWQ2
ODc0MzlhYjAxLi4yYjY2OGU5ZGI3ZTZiOGIzNzZhMmIwOWViM2E2ODcyY2IwNDllNGZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckNvbnRleHRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5oCkBAIC0zMyw3ICsz
Myw2IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMgewogICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOwogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50IHsgZmFsc2UgfTsKLQog
ICAgIGJvb2wgc3VwcG9ydHNOUE9UVGV4dHVyZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgc3VwcG9y
dHNCR1JBODg4OCB7IGZhbHNlIH07CiAgICAgYm9vbCBzdXBwb3J0c1VucGFja1N1YmltYWdlIHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5j
cHAKaW5kZXggNmVkZjE4NmEyOWYxOGY3MDQ2MmQyZTg3NjVhYzM1M2QwM2MzZjAyOC4uNmM1Njhl
NDU0NGMzZDc0NzY4MzJkMmM1YjI0ZThhZTRiYzAxMWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1M
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKQEAgLTIyLDE2ICsyMiw5IEBACiAKICNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCi0j
aWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdM
X0VTXzIpCi0jZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMgMQotI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJCaXRt
YXBUZXh0dXJlR0wuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0xIZWFkZXJzLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJC
dWZmZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCiAK
QEAgLTM5LDIyICszMiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjo6VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKEdyYXBoaWNz
Q29udGV4dDNEJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVy
U3R5bGUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fcmVuZGVyU3R5bGUocmVu
ZGVyU3R5bGUpCiB7CiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZSkgewogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbjoKICAgICAgICAgbV9nbENvbnRleHQgPSBHTENv
bnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQ6Ci0gICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGlmIChtX3JlbmRlclN0eWxl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pCi0gICAgICAgIG1fcGxhdGZv
cm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkoKSk7CisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eSgpKTsKICNlbmRpZgogfQogCkBAIC02OCwxMiArNTcsMTQg
QEAgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyKCkKIAogYm9vbCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpIDogZmFsc2U7CisgICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsK
KyAgICByZXR1cm4gbV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCiBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGxh
dGZvcm1Db250ZXh0KCkKIHsKLSAgICByZXR1cm4gbV9nbENvbnRleHQgPyBtX2dsQ29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCkgOiBHTENvbnRleHQ6OmN1cnJlbnQoKS0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICByZXR1cm4gbV9nbENvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwogfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVB
REVEKQpAQCAtODQsNyArNzUsNiBAQCBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eT4gVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwcm94eSgpCiAKIHZvaWQgVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKIHsKLSAg
ICBBU1NFUlQobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2Ny
ZWVuKTsKICAgICBpZiAobV9jb250ZXh0LmxheWVyQ29tcG9zaXRlZCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTEwMiwxMCArOTIsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1M
YXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAjZWxzZQogdm9pZCBUZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAoIW1fZ2xDb250ZXh0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9yZW5kZXJTdHlsZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOwog
CiAgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxh
dGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCmluZGV4IDlhMjVkMTcwMjhiNDFkNGZhMjU5
NDk0YjVlYmE4NzlkYzRhMjVlNTMuLjIyZDY2NmUzOWY4MjdmZGZlOGQ0MjNmZDA0MTU4N2NkYjkw
OTIxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgK
QEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSgpIHsgcmV0dXJuIG1f
cmVuZGVyU3R5bGU7IH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25z
dCBvdmVycmlkZTsKQEAgLTUxLDcgKzUwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFw
aGljc0NvbnRleHQzRCYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+
IG1fZ2xDb250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBtX3JlbmRl
clN0eWxlOwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZTJkNDQ5ODgwMzc3OWRiZDBmYTk5MjQwMTJj
OTZlOGE3MWU0MGEzNy4uNWVkZGFmMzRhYjNiNzU4ODU5ZmQyNjgwNjhjZTFiZmE3NGQ0MjU3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIK
QEAgLTUzLDM2ICs1NCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZXh0dXJlTWFw
cGVyR0xEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEJik7CisgICAgZXhw
bGljaXQgVGV4dHVyZU1hcHBlckdMRGF0YSh2b2lkKik7CiAgICAgflRleHR1cmVNYXBwZXJHTERh
dGEoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGdldFN0YXRpY1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9p
ZCogZGF0YSk7CisgICAgR0x1aW50IGdldFN0YXRpY1ZCTyhHTGVudW0gdGFyZ2V0LCBHTHNpemVp
cHRyLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICBHTHVpbnQgZ2V0VkFPKCk7CiAgICAgUmVmPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpPcHRpb25zKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2pl
Y3Rpb25NYXRyaXg7CiAgICAgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzIHsg
MCB9OwotICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtIHsgMCB9OwotICAgIEdDM0RpbnQgdGFy
Z2V0RnJhbWVCdWZmZXIgeyAwIH07CisgICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtIHsgMCB9Owor
ICAgIEdMaW50IHByZXZpb3VzVkFPIHsgMCB9OworICAgIEdMaW50IHRhcmdldEZyYW1lQnVmZmVy
IHsgMCB9OwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbCB7IGZhbHNlIH07Ci0gICAgR0MzRGlu
dCBwcmV2aW91c1NjaXNzb3JTdGF0ZSB7IDAgfTsKLSAgICBHQzNEaW50IHByZXZpb3VzRGVwdGhT
dGF0ZSB7IDAgfTsKLSAgICBHQzNEaW50IHZpZXdwb3J0WzRdIHsgMCwgfTsKLSAgICBHQzNEaW50
IHByZXZpb3VzU2Npc3Nvcls0XSB7IDAsIH07CisgICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3Rh
dGUgeyAwIH07CisgICAgR0xpbnQgcHJldmlvdXNEZXB0aFN0YXRlIHsgMCB9OworICAgIEdMaW50
IHZpZXdwb3J0WzRdIHsgMCwgfTsKKyAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF0geyAwLCB9
OwogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKICAgICBjb25zdCBC
aXRtYXBUZXh0dXJlR0w6OkZpbHRlckluZm8qIGZpbHRlckluZm8geyBudWxscHRyIH07CiAKIHBy
aXZhdGU6CiAgICAgY2xhc3MgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVk
R0xEYXRhPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPFNoYXJlZEdMRGF0YT4g
Y3VycmVudFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKKyAgICAgICAg
c3RhdGljIFJlZjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERhdGEodm9pZCogcGxhdGZv
cm1Db250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ID0gY29udGV4dERhdGFN
YXAoKS5maW5kKGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gaXQgPSBjb250ZXh0RGF0YU1hcCgpLmZpbmQocGxhdGZvcm1Db250ZXh0KTsKICAg
ICAgICAgICAgIGlmIChpdCAhPSBjb250ZXh0RGF0YU1hcCgpLmVuZCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiAqaXQtPnZhbHVlOwogCi0gICAgICAgICAgICBSZWY8U2hhcmVkR0xEYXRhPiBk
YXRhID0gYWRvcHRSZWYoKm5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwotICAgICAgICAgICAg
Y29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCks
IGRhdGEucHRyKCkpOworICAgICAgICAgICAgUmVmPFNoYXJlZEdMRGF0YT4gZGF0YSA9IGFkb3B0
UmVmKCpuZXcgU2hhcmVkR0xEYXRhKTsKKyAgICAgICAgICAgIGNvbnRleHREYXRhTWFwKCkuYWRk
KHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YTsK
ICAgICAgICAgfQogCkBAIC05NiwzNiArOTksMzcgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdMRGF0YTsKIAotICAgICAgICB1c2lu
ZyBHTENvbnRleHREYXRhTWFwID0gSGFzaE1hcDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBT
aGFyZWRHTERhdGEqPjsKKyAgICAgICAgdXNpbmcgR0xDb250ZXh0RGF0YU1hcCA9IEhhc2hNYXA8
dm9pZCosIFNoYXJlZEdMRGF0YSo+OwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCYg
Y29udGV4dERhdGFNYXAoKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8R0xDb250ZXh0RGF0YU1hcD4gbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAg
ICAgICAgfQogCi0gICAgICAgIGV4cGxpY2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQz
RCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dERhdGFNYXAoKS5hZGQo
Y29udGV4dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIHRoaXMpOwotICAgICAgICB9Cisg
ICAgICAgIFNoYXJlZEdMRGF0YSgpID0gZGVmYXVsdDsKIAogICAgICAgICBIYXNoTWFwPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+PiBtX3Byb2dyYW1zOwogICAgIH07CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCYg
bV9jb250ZXh0OwogICAgIFJlZjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwotICAgIEhh
c2hNYXA8Y29uc3Qgdm9pZCosIFBsYXRmb3JtM0RPYmplY3Q+IG1fdmJvczsKKyAgICBIYXNoTWFw
PGNvbnN0IHZvaWQqLCBHTHVpbnQ+IG1fdmJvczsKKyAgICBHTHVpbnQgbV92YW8geyAwIH07CiB9
OwogCi1UZXh0dXJlTWFwcGVyR0xEYXRhOjpUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEJiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NoYXJl
ZEdMRGF0YShTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEobV9jb250ZXh0KSkKK1Rl
eHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERhdGEodm9pZCogcGxhdGZvcm1Db250
ZXh0KQorICAgIDogbV9zaGFyZWRHTERhdGEoU2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xE
YXRhKHBsYXRmb3JtQ29udGV4dCkpCiB7CiB9CiAKIFRleHR1cmVNYXBwZXJHTERhdGE6On5UZXh0
dXJlTWFwcGVyR0xEYXRhKCkKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV92Ym9zKQotICAg
ICAgICBtX2NvbnRleHQuZGVsZXRlQnVmZmVyKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZ2xEZWxl
dGVCdWZmZXJzKDEsICZlbnRyeS52YWx1ZSk7CisKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAg
IGlmIChHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCAmJiBtX3ZhbykKKyAg
ICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJm1fdmFvKTsKKyNlbmRpZgogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKQEAgLTEzOCwyNyArMTQy
LDM4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAg
IGlmIChkaWRNb2RpZnlTdGVuY2lsKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRleHQu
Y2xlYXJTdGVuY2lsKDApOwotICAgIG1fY29udGV4dC5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICBnbENsZWFyU3RlbmNpbCgwKTsKKyAgICBnbENsZWFy
KEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9
CiAKLVBsYXRmb3JtM0RPYmplY3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCitHTHVp
bnQgVGV4dHVyZU1hcHBlckdMRGF0YTo6Z2V0U3RhdGljVkJPKEdMZW51bSB0YXJnZXQsIEdMc2l6
ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dmJvcy5lbnN1cmUoZGF0YSwKICAgICAgICAgW3RoaXMsIHRhcmdldCwgc2l6ZSwgZGF0YV0gewot
ICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBtX2NvbnRleHQuY3JlYXRlQnVmZmVy
KCk7Ci0gICAgICAgICAgICBtX2NvbnRleHQuYmluZEJ1ZmZlcih0YXJnZXQsIHZibyk7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQuYnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgICAgICAgICBHTHVpbnQgdmJvID0gMDsKKyAg
ICAgICAgICAgIGdsR2VuQnVmZmVycygxLCAmdmJvKTsKKyAgICAgICAgICAgIGdsQmluZEJ1ZmZl
cih0YXJnZXQsIHZibyk7CisgICAgICAgICAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBk
YXRhLCBHTF9TVEFUSUNfRFJBVyk7CiAgICAgICAgICAgICByZXR1cm4gdmJvOwogICAgICAgICB9
KTsKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorR0x1aW50IFRl
eHR1cmVNYXBwZXJHTERhdGE6OmdldFZBTygpCit7CisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAg
ICBpZiAoR0xDb250ZXh0OjpjdXJyZW50KCktPnZlcnNpb24oKSA+PSAzMjAgJiYgIW1fdmFvKQor
ICAgICAgICBnbEdlblZlcnRleEFycmF5cygxLCAmbV92YW8pOworI2VuZGlmCisKKyAgICByZXR1
cm4gbV92YW87Cit9CisKIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1h
cHBlckdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
T3B0aW9ucyBvcHRpb25zKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaGFyZWRHTERhdGEt
Pm1fcHJvZ3JhbXMuZW5zdXJlKG9wdGlvbnMsCi0gICAgICAgIFt0aGlzLCBvcHRpb25zXSB7IHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG9wdGlvbnMpOyB9KTsKKyAg
ICAgICAgW29wdGlvbnNdIHsgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVh
dGUob3B0aW9ucyk7IH0pOwogICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIApAQCAtMTY3LDEwICsxODIsMTAgQEAgVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVy
R0woKQogewogICAgIG1fY29udGV4dEF0dHJpYnV0ZXMuaW5pdGlhbGl6ZSgpOwogCi0gICAgbV9j
b250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgp
OwotICAgIEFTU0VSVChtX2NvbnRleHQzRCk7CisgICAgdm9pZCogcGxhdGZvcm1Db250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChwbGF0
Zm9ybUNvbnRleHQpOwogCi0gICAgbV9kYXRhID0gbmV3IFRleHR1cmVNYXBwZXJHTERhdGEoKm1f
Y29udGV4dDNEKTsKKyAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YShwbGF0Zm9y
bUNvbnRleHQpOwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBtX3RleHR1cmVQb29s
ID0gc3RkOjptYWtlX3VuaXF1ZTxCaXRtYXBUZXh0dXJlUG9vbD4obV9jb250ZXh0QXR0cmlidXRl
cyk7CiAjZW5kaWYKQEAgLTE4Myw0MCArMTk4LDUyIEBAIENsaXBTdGFjayYgVGV4dHVyZU1hcHBl
ckdMOjpjbGlwU3RhY2soKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQ
YWludEZsYWdzIGZsYWdzKQogewotICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Ci0g
ICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNEZXB0
aFN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVCk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1QpOwotICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCku
cHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElz
RW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUg
PSBnbElzRW5hYmxlZChHTF9ERVBUSF9URVNUKTsKKyAgICBnbERpc2FibGUoR0xfREVQVEhfVEVT
VCk7CisgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5
U3RlbmNpbCA9IGZhbHNlOwotICAgIG1fY29udGV4dDNELT5kZXB0aE1hc2soMCk7Ci0gICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgZGF0YSgp
LnZpZXdwb3J0KTsKLSAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKTsKKyAgICBnbERlcHRoTWFz
aygwKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwor
ICAgIGdsR2V0SW50ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3Ip
OwogICAgIG1fY2xpcFN0YWNrLnJlc2V0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJd
LCBkYXRhKCkudmlld3BvcnRbM10pLCBmbGFncyAmIFBhaW50aW5nTWlycm9yZWQgPyBDbGlwU3Rh
Y2s6OllBeGlzTW9kZTo6RGVmYXVsdCA6IENsaXBTdGFjazo6WUF4aXNNb2RlOjpJbnZlcnRlZCk7
Ci0gICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBnbEdldEludGVn
ZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwog
ICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2UoMCk7CisKKyNp
ZiAhVVNFKE9QRU5HTF9FU18yKQorICAgIGlmIChHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lv
bigpID49IDMyMCkgeworICAgICAgICBnbEdldEludGVnZXJ2KEdMX1ZFUlRFWF9BUlJBWV9CSU5E
SU5HLCAmZGF0YSgpLnByZXZpb3VzVkFPKTsKKyAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoZGF0
YSgpLmdldFZBTygpKTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmVuZFBhaW50aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKLSAgICAgICAgbV9jb250ZXh0M0Qt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBn
bENsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
OwogICAgIH0KIAotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1By
b2dyYW0pOworICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAg
IG1fY29udGV4dDNELT5zY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2
aW91c1NjaXNzb3JbM10pOworICAgIGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBd
LCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBk
YXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3Nv
clN0YXRlKQotICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogICAgIGVs
c2UKLSAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CisgICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogCiAgICAgaWYg
KGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIG1fY29udGV4dDNELT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOworICAgICAgICBnbEVuYWJsZShHTF9ERVBU
SF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9URVNUKTsKKyAgICAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1Qp
OworCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBpZiAoR0xDb250ZXh0OjpjdXJyZW50KCkt
PnZlcnNpb24oKSA+PSAzMjApCisgICAgICAgIGdsQmluZFZlcnRleEFycmF5KGRhdGEoKS5wcmV2
aW91c1ZBTyk7CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIo
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMjI1
LDE0ICsyNTIsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29s
b3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwot
ICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBn
bFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwg
YTsKICAgICBDb2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEo
ciwgZywgYiwgYSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwotICAgIG1fY29udGV4dDNELT5saW5lV2lkdGgod2lkdGgp
OworICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7
CisgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhdyh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsICFj
b2xvci5pc09wYXF1ZSgpID8gU2hvdWxkQmxlbmQgOiAwKTsKKyAgICBkcmF3KHRhcmdldFJlY3Qs
IG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfTElORV9MT09QLCAhY29sb3IuaXNP
cGFxdWUoKSA/IFNob3VsZEJsZW5kIDogMCk7CiB9CiAKIC8vIEZJWE1FOiBkcmF3TnVtYmVyKCkg
c2hvdWxkIHNhdmUgYSBudW1iZXIgdGV4dHVyZS1hdGxhcyBhbmQgcmUtdXNlIHdoZW5ldmVyIHBv
c3NpYmxlLgpAQCAtMzUyLDIyICszNzksMjIgQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5l
bCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclBy
b2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtJiBwcm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQg
cGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCitzdGF0
aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYg
cHJvZ3JhbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3Ms
IGNvbnN0IEludFNpemUmIHNpemUsIEdMdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBjb250
ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbUlEKCkpOworICAgIGdsVXNlUHJvZ3JhbShw
cm9ncmFtLnByb2dyYW1JRCgpKTsKIAogICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUoKSkgewog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0uZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAg
ICAgICBnbFVuaWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19j
YXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFt
b3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
Ci0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLmZpbHRlckFtb3VudExvY2F0aW9u
KCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5m
aWx0ZXJBbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgIGNvbnN0IEJs
dXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTM3OSwyOSArNDA2LDI5IEBAIHN0YXRpYyB2b2lkIHBy
ZXBhcmVGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlTWFw
cGVyU2hhZGVyCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXpl
LndpZHRoKCkpOwogCi0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRp
dXNMb2NhdGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTFmdihwcm9ncmFtLmdhdXNzaWFuS2VybmVsTG9jYXRpb24oKSwgR2F1
c3NpYW5LZXJuZWxIYWxmV2lkdGgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBnbFVuaWZv
cm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKTsKKyAgICAgICAgZ2xVbmlmb3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxM
b2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7
Ci0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS5nYXVzc2lhbktlcm5lbExvY2F0
aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAg
ICAgZ2xVbmlmb3JtMWZ2KHByb2dyYW0uZ2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lh
bktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFz
cykgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9u
dGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5i
bHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS5zaGFk
b3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQo
c2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUu
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xv
Y2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDAp
OworICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigp
LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxv
YXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFz
czogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBj
b21wb3NpdGluZy4KICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgICAgICAgICBD
b2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihzaGFkb3cuY29sb3IoKSkpLmdldFJHQkEo
ciwgZywgYiwgYSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJm
KHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAv
IGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihw
cm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwotICAgICAgICAgICAgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwotICAgICAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNv
bnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLmNv
bnRlbnRUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBnbFVuaWZvcm0y
Zihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUxKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS5jb250
ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC00MzcsNyArNDY0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVj
dCYKICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3BhcXVlKCkg
PyAwIDogU2hvdWxkQmxlbmQsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwg
b3BhY2l0eSwgZXhwb3NlZEVkZ2VzKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNp
emUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVk
IGV4cG9zZWRFZGdlcykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShHTHVpbnQg
dGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKICAgICBi
b29sIHVzZVJlY3QgPSBmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0OwogICAgIGJvb2wg
dXNlQW50aWFsaWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcKQEAgLTQ1
Nyw3ICs0ODQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQogICAgICAgICBvcHRpb25zIHw9
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpNYW51YWxSZXBlYXQ7CiAKICAgICBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXIgPSBkYXRhKCkuZmlsdGVySW5mbyA/IGRhdGEoKS5maWx0
ZXJJbmZvLT5maWx0ZXI6IDA7Ci0gICAgR0MzRHVpbnQgZmlsdGVyQ29udGVudFRleHR1cmVJRCA9
IDA7CisgICAgR0x1aW50IGZpbHRlckNvbnRlbnRUZXh0dXJlSUQgPSAwOwogCiAgICAgaWYgKGZp
bHRlcikgewogICAgICAgICBpZiAoZGF0YSgpLmZpbHRlckluZm8tPmNvbnRlbnRUZXh0dXJlKQpA
QCAtNDczLDcgKzUwMCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgUmVmPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0o
b3B0aW9ucyk7CiAKICAgICBpZiAoZmlsdGVyKQotICAgICAgICBwcmVwYXJlRmlsdGVyUHJvZ3Jh
bShtX2NvbnRleHQzRC5nZXQoKSwgcHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQoKSwgZGF0YSgp
LmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4dHVyZUlEKTsK
KyAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5nZXQo
KSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50VGV4
dHVyZUlEKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgp
LCB0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSk7CiB9CkBAIC00ODgsMzAgKzUxNSwzMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbgogICAgIH0KIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3Jh
bSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwotICAgIG1fY29udGV4dDNELT51
c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICBDb2xvcihwcmVt
dWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAg
bV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIs
IGEpOworICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwg
YSk7CiAgICAgaWYgKGEgPCAxKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAotICAg
IGRyYXcocmVjdCwgbWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCBmbGFncyk7CisgICAgZHJhdyhyZWN0LCBtYXRyaXgsIHByb2dyYW0uZ2V0KCks
IEdMX1RSSUFOR0xFX0ZBTiwgZmxhZ3MpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xl
YXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9jb250ZXh0M0QtPmNsZWFyQ29s
b3IoY29sb3IucmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMGYsIGNvbG9yLmJs
dWUoKSAvIDI1NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1NS4wZik7Ci0gICAgbV9jb250ZXh0M0Qt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICBnbENsZWFy
Q29sb3IoY29sb3IucmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdyZWVuKCkgLyAyNTUuMGYsIGNvbG9y
LmJsdWUoKSAvIDI1NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1NS4wZik7CisgICAgZ2xDbGVhcihH
TF9DT0xPUl9CVUZGRVJfQklUKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdFZGdl
VHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtKQogewotICAgIGNv
bnN0IEdDM0RmbG9hdCBsZWZ0ID0gMDsKLSAgICBjb25zdCBHQzNEZmxvYXQgdG9wID0gMDsKLSAg
ICBjb25zdCBHQzNEZmxvYXQgcmlnaHQgPSAxOwotICAgIGNvbnN0IEdDM0RmbG9hdCBib3R0b20g
PSAxOwotICAgIGNvbnN0IEdDM0RmbG9hdCBjZW50ZXIgPSAwLjU7CisgICAgY29uc3QgR0xmbG9h
dCBsZWZ0ID0gMDsKKyAgICBjb25zdCBHTGZsb2F0IHRvcCA9IDA7CisgICAgY29uc3QgR0xmbG9h
dCByaWdodCA9IDE7CisgICAgY29uc3QgR0xmbG9hdCBib3R0b20gPSAxOworICAgIGNvbnN0IEdM
ZmxvYXQgY2VudGVyID0gMC41OwogCiAvLyBFYWNoIDRkIHRyaWFuZ2xlIGNvbnNpc3RzIG9mIGEg
Y2VudGVyIHBvaW50IGFuZCB0d28gZWRnZSBwb2ludHMsIHdoZXJlIHRoZSB6dyBjb29yZGluYXRl
cwogLy8gb2YgZWFjaCB2ZXJ0ZXggZXF1YWxzIHRoZSBuZWFyZXN0IHBvaW50IHRvIHRoZSB2ZXJ0
ZXggb24gdGhlIGVkZ2UuCkBAIC01MjAsNyArNTQ3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdFZGdlVHJpYW5nbGVzKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiBwcm9ncmFtKQog
ICAgIHgyLCB5MiwgeDIsIHkyLCBcCiAgICAgY2VudGVyLCBjZW50ZXIsICh4MSArIHgyKSAvIDIs
ICh5MSArIHkyKSAvIDIKIAotICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RTaWRl
VHJpYW5nbGVzW10gPSB7CisgICAgc3RhdGljIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RTaWRlVHJp
YW5nbGVzW10gPSB7CiAgICAgICAgIFNJREVfVFJJQU5HTEVfREFUQShsZWZ0LCB0b3AsIHJpZ2h0
LCB0b3ApLAogICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEobGVmdCwgdG9wLCBsZWZ0LCBib3R0
b20pLAogICAgICAgICBTSURFX1RSSUFOR0xFX0RBVEEocmlnaHQsIHRvcCwgcmlnaHQsIGJvdHRv
bSksCkBAIC01MjgsNDEgKzU1NSw0MSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0VkZ2VU
cmlhbmdsZXMoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0pCiAgICAgfTsKICN1
bmRlZiBTSURFX1RSSUFOR0xFX0RBVEEKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgdmJvID0gZGF0
YSgpLmdldFN0YXRpY1ZCTyhHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2Yo
R0MzRGZsb2F0KSAqIDQ4LCB1bml0UmVjdFNpZGVUcmlhbmdsZXMpOwotICAgIG1fY29udGV4dDNE
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7Ci0gICAg
bV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigp
LCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBtX2NvbnRl
eHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCAxMik7Ci0g
ICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgMCk7CisgICAgR0x1aW50IHZibyA9IGRhdGEoKS5nZXRTdGF0aWNWQk8oR0xfQVJSQVlfQlVG
RkVSLCBzaXplb2YoR0MzRGZsb2F0KSAqIDQ4LCB1bml0UmVjdFNpZGVUcmlhbmdsZXMpOworICAg
IGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKHByb2dyYW0udmVydGV4TG9jYXRpb24oKSwgNCwgR0xfRkxPQVQsIGZhbHNlLCAwLCAw
KTsKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCAxMik7CisgICAgZ2xCaW5kQnVm
ZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mIHByb2dyYW0sIEdDM0RlbnVtIGRy
YXdpbmdNb2RlKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVbml0UmVjdChUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdNb2RlKQogewotICAgIHN0
YXRpYyBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHsgMCwgMCwgMSwgMCwgMSwgMSwgMCwg
MSB9OwotICAgIFBsYXRmb3JtM0RPYmplY3QgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZCTyhHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZsb2F0KSAqIDgsIHVuaXRS
ZWN0KTsKLSAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCB2Ym8pOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0udmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxz
ZSwgMCwgMCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQp
OwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDApOworICAgIHN0YXRpYyBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7IDAsIDAs
IDEsIDAsIDEsIDEsIDAsIDEgfTsKKyAgICBHTHVpbnQgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZC
TyhHTF9BUlJBWV9CVUZGRVIsIHNpemVvZihHTGZsb2F0KSAqIDgsIHVuaXRSZWN0KTsKKyAgICBn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLnZlcnRleExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7
CisgICAgZ2xEcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBnbEJpbmRCdWZmZXIo
R0xfQVJSQVlfQlVGRkVSLCAwKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXcoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0MzRGVudW0gZHJh
d2luZ01vZGUsIEZsYWdzIGZsYWdzKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXcoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0
cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdN
b2RlLCBGbGFncyBmbGFncykKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobW9k
ZWxWaWV3TWF0cml4KTsKICAgICBtYXRyaXgubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCByZWN0KSk7CiAKLSAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsK
KyAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0udmVydGV4TG9jYXRpb24oKSk7
CiAgICAgcHJvZ3JhbS5zZXRNYXRyaXgocHJvZ3JhbS5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigp
LCBtYXRyaXgpOwogICAgIHByb2dyYW0uc2V0TWF0cml4KHByb2dyYW0ucHJvamVjdGlvbk1hdHJp
eExvY2F0aW9uKCksIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KTsKIAogICAgIGlmIChpc0luTWFz
a01vZGUoKSkgewotICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgbV9jb250
ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBnbEJsZW5k
RnVuYyhHTF9aRVJPLCBHTF9TUkNfQUxQSEEpOworICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQmxlbmQpIHsKLSAgICAg
ICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICAgICAgbV9jb250
ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICAgICAgZ2xC
bGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgICAgIGds
RW5hYmxlKEdMX0JMRU5EKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICAgICAgZ2xEaXNh
YmxlKEdMX0JMRU5EKTsKICAgICB9CiAKICAgICBpZiAoZmxhZ3MgJiBTaG91bGRBbnRpYWxpYXMp
CkBAIC01NzAsMjEgKzU5NywyMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhdyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtbwogICAgIGVsc2UK
ICAgICAgICAgZHJhd1VuaXRSZWN0KHByb2dyYW0sIGRyYXdpbmdNb2RlKTsKIAotICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigp
KTsKLSAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICBnbEJsZW5kRnVuYyhHTF9P
TkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOworICAgIGdsRW5hYmxlKEdMX0JMRU5EKTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsK
LSAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLnByb2dyYW1JRCgpKTsKLSAgICBt
X2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwot
ICAgIEdDM0RlbnVtIHRhcmdldCA9IGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QgPyBH
QzNEZW51bShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikgOiBHQzNEZW51bShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKKyAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS5wcm9ncmFt
SUQoKSk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBHTGVudW0gdGFy
Z2V0ID0gZmxhZ3MgJiBTaG91bGRVc2VBUkJUZXh0dXJlUmVjdCA/IEdMZW51bShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIpIDogR0xlbnVtKEdMX1RFWFRVUkVfMkQpOworICAgIGdsQmluZFRleHR1
cmUodGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICBnbFVuaWZvcm0xaShwcm9ncmFtLnNhbXBsZXJMb2Nh
dGlvbigpLCAwKTsKICAgICBpZiAod3JhcE1vZGUoKSA9PSBSZXBlYXRXcmFwICYmIG1fY29udGV4
dEF0dHJpYnV0ZXMuc3VwcG9ydHNOUE9UVGV4dHVyZXMpIHsKLSAgICAgICAgbV9jb250ZXh0M0Qt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCk7Ci0gICAg
ICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRVBFQVQpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX1JFUEVBVCk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfUkVQRUFUKTsKICAgICB9CiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtID0gdGhpcy0+cGF0dGVyblRyYW5zZm9y
bSgpOwpAQCAtNjA5LDE0ICs2MzYsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSYgcHIKIAogICAg
IHByb2dyYW0uc2V0TWF0cml4KHByb2dyYW0udGV4dHVyZVNwYWNlTWF0cml4TG9jYXRpb24oKSwg
cGF0dGVyblRyYW5zZm9ybSk7CiAgICAgcHJvZ3JhbS5zZXRNYXRyaXgocHJvZ3JhbS50ZXh0dXJl
Q29sb3JTcGFjZU1hdHJpeExvY2F0aW9uKCksIGNvbG9yU3BhY2VNYXRyaXhGb3JGbGFncyhmbGFn
cykpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24o
KSwgb3BhY2l0eSk7CisgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwg
b3BhY2l0eSk7CiAKICAgICBpZiAob3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3Vs
ZEJsZW5kOwogCi0gICAgZHJhdyhyZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIGZsYWdzKTsKLSAgICBtX2NvbnRleHQzRC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0g
ICAgbV9jb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOworICAgIGRyYXcocmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFt
LCBHTF9UUklBTkdMRV9GQU4sIGZsYWdzKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFw
VGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSogY29udGVudFRleHR1cmUsIGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKQEAgLTYyNSw3ICs2NTIsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleAogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpPcHRpb25zIG9wdGlvbnMgPSBvcHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXIudHlwZSgpLCBw
YXNzKTsKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRh
KCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKIAotICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KG1fY29udGV4dDNELmdldCgpLCBwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIu
Y29udGVudFNpemUoKSwgY29udGVudFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBU
ZXh0dXJlR0wqPihjb250ZW50VGV4dHVyZSktPmlkKCkgOiAwKTsKKyAgICBwcmVwYXJlRmlsdGVy
UHJvZ3JhbShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUo
KSwgY29udGVudFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihj
b250ZW50VGV4dHVyZSktPmlkKCkgOiAwKTsKICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChJbnRQ
b2ludDo6emVybygpLCBzYW1wbGVyLmNvbnRlbnRTaXplKCkpOwogICAgIGRyYXdUZXh0dXJlZFF1
YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wmPihzYW1wbGVyKS5pZCgpLCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCAxKTsKIH0KQEAgLTY1MSw3ICs2NzgsNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKCkKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBhdXRvJiB2aWV3
cG9ydCA9IGRhdGEoKS52aWV3cG9ydDsKICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNy
ZWF0ZVByb2plY3Rpb25NYXRyaXgoSW50U2l6ZSh2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pLCBk
YXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIG1fY29udGV4dDNELT52
aWV3cG9ydCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJdLCB2aWV3cG9ydFsz
XSk7CisgICAgZ2xWaWV3cG9ydCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIHZpZXdwb3J0WzJd
LCB2aWV3cG9ydFszXSk7CiAgICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKICAgICBkYXRhKCkuY3Vy
cmVudFN1cmZhY2UgPSBudWxscHRyOwogfQpAQCAtNzAyLDEyICs3MjksMTIgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBjb24KIAogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpTb2xpZENvbG9yKTsKIAotICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW1JRCgpKTsKLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Ci0gICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10g
PSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB2Ym8gPSBk
YXRhKCkuZ2V0U3RhdGljVkJPKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVv
ZihHQzNEZmxvYXQpICogOCwgdW5pdFJlY3QpOwotICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZibyk7Ci0gICAgbV9jb250ZXh0M0Qt
PnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2xVc2VQcm9ncmFtKHByb2dy
YW0tPnByb2dyYW1JRCgpKTsKKyAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOworICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAw
LCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTHVpbnQgdmJvID0gZGF0YSgpLmdldFN0YXRpY1ZC
TyhHTF9BUlJBWV9CVUZGRVIsIHNpemVvZihHTGZsb2F0KSAqIDgsIHVuaXRSZWN0KTsKKyAgICBn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgZmFsc2UsIDAsIDAp
OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG1vZGVsVmlld01hdHJpeCk7CiAg
ICAgbWF0cml4Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0
UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOwpAQCAtNzE2LDMwICs3NDMsMzAgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGludCBzdGVuY2lsSW5kZXggPSBjbGlwU3RhY2so
KS5nZXRTdGVuY2lsSW5kZXgoKTsKIAotICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CisgICAgZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0gICAg
bV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwgc3RlbmNp
bEluZGV4LCBzdGVuY2lsSW5kZXgpOworICAgIGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5j
aWxJbmRleCwgc3RlbmNpbEluZGV4KTsKIAogICAgIC8vIE9wZXJhdGUgb25seSBvbiB0aGUgc3Rl
bmNpbEluZGV4IGFuZCBhYm92ZS4KLSAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMHhmZiAm
IH4oc3RlbmNpbEluZGV4IC0gMSkpOworICAgIGdsU3RlbmNpbE1hc2soMHhmZiAmIH4oc3RlbmNp
bEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhlIGVudGlyZSBidWZmZXIgYXQg
dGhlIGN1cnJlbnQgaW5kZXguCiAgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPnByb2pl
Y3Rpb25NYXRyaXhMb2NhdGlvbigpLCBmdWxsUHJvamVjdGlvbk1hdHJpeCk7CiAgICAgcHJvZ3Jh
bS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpOwotICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250
ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6
WkVSTyk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRS
SUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xf
WkVSTyk7CisgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAv
LyBOb3cgYXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFkLgotICAgIG1fY29u
dGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSk7CisgICAgZ2xTdGVu
Y2lsT3AoR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSk7CiAgICAgcHJvZ3JhbS0+
c2V0TWF0cml4KHByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCk7CiAgICAgcHJvZ3JhbS0+c2V0TWF0cml4KHByb2dyYW0tPm1vZGVsVmll
d01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAg
bV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
MCk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52
ZXJ0ZXhMb2NhdGlvbigpKTsKLSAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CisgICAg
Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgZ2xTdGVuY2lsTWFzaygw
KTsKIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0
aW5nLgogICAgIGNsaXBTdGFjaygpLnNldFN0ZW5jaWxJbmRleChzdGVuY2lsSW5kZXggKiAyKTsK
QEAgLTc1Nyw3ICs3ODQsNyBAQCBJbnRSZWN0IFRleHR1cmVNYXBwZXJHTDo6Y2xpcEJvdW5kcygp
CiAgICAgcmV0dXJuIGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94OwogfQogCi1SZWY8
Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKEdDM0RpbnQgaW50
ZXJuYWxGb3JtYXQpCitSZWY8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVU
ZXh0dXJlKEdMaW50IGludGVybmFsRm9ybWF0KQogewogICAgIHJldHVybiBCaXRtYXBUZXh0dXJl
R0w6OmNyZWF0ZShtX2NvbnRleHRBdHRyaWJ1dGVzLCBpbnRlcm5hbEZvcm1hdCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmgKaW5kZXggMWM4ODk5NjU2MDhlMjIwYzk0NTkxYTJmNjYyZTdlOWUxNzZkYjA2
ZC4uMzY5MWFhYTllMGY2YzAxZWMxZTgwNjkzMWMxZDFiOTIxYjA0YjcwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuaApAQCAtMjUsMTAgKzI1LDEwIEBACiAKICNpbmNsdWRlICJDbGlwU3RhY2suaCIKICNp
bmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMSGVhZGVycy5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZHJhd0JvcmRlcihjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJh
d051bWJlcihpbnQgbnVtYmVyLCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1RleHR1cmUo
Y29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxv
YXQgb3BhY2l0eSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZShHTHVpbnQgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUm
IHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4
cG9zZWRFZGdlcyA9IEFsbEVkZ2VzKTsKICAgICB2b2lkIGRyYXdTb2xpZENvbG9yKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgQ29sb3ImKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIApAQCAt
NzMsOCArNzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRDbGlwKCkgb3ZlcnJpZGU7CiAgICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CiAgICAgSW50U2l6ZSBtYXhUZXh0dXJlU2l6
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KLSAgICBS
ZWY8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OkRPTlRfQ0FSRSk7IH0KLSAgICBSZWY8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShHQzNEaW50IGludGVybmFsRm9ybWF0KSBvdmVycmlkZTsK
KyAgICBSZWY8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJu
IGNyZWF0ZVRleHR1cmUoR0xfRE9OVF9DQVJFKTsgfQorICAgIFJlZjxCaXRtYXBUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKEdMaW50IGludGVybmFsRm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJp
dG1hcFRleHR1cmUqIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCBpbnQg
cGFzcyk7CiAKQEAgLTgyLDkgKzgyLDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQg
ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtJiwg
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFj
aXR5KTsKLSAgICB2b2lkIGRyYXcoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mLCBH
QzNEZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MpOworICAgIHZvaWQgZHJhdyhjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSYsIEdMZW51bSBkcmF3aW5nTW9kZSwgRmxhZ3MpOwogCi0gICAg
dm9pZCBkcmF3VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSk7CisgICAgdm9pZCBkcmF3VW5pdFJlY3QoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0mLCBHTGVudW0gZHJhd2luZ01vZGUpOwogICAgIHZvaWQgZHJhd0VkZ2VUcmlhbmdsZXMo
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0mKTsKIAogICAgIGJvb2wgYmVnaW5TY2lzc29yQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtOTMs
NyArOTMsNiBAQCBwcml2YXRlOgogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRh
KCkgeyByZXR1cm4gKm1fZGF0YTsgfQogCiAgICAgVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1
dGVzIG1fY29udGV4dEF0dHJpYnV0ZXM7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQzRDsKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0
YWNrIG1fY2xpcFN0YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNp
bmc7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>