<?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>114881</bug_id>
          
          <creation_ts>2013-04-19 11:00:07 -0700</creation_ts>
          <short_desc>Remove the OpenVG backend</short_desc>
          <delta_ts>2013-04-19 11:59:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>krit</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>878574</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-19 11:00:07 -0700</bug_when>
    <thetext>See: https://lists.webkit.org/pipermail/webkit-dev/2013-April/024555.html

The OpenVG backend appears to be totally unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878581</commentid>
    <comment_count>1</comment_count>
      <attachid>198901</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-19 11:05:54 -0700</bug_when>
    <thetext>Created attachment 198901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878601</commentid>
    <comment_count>2</comment_count>
      <attachid>198901</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-19 11:59:00 -0700</bug_when>
    <thetext>Comment on attachment 198901
Patch

Clearing flags on attachment: 198901

Committed r148757: &lt;http://trac.webkit.org/changeset/148757&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878602</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-19 11:59:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198901</attachid>
            <date>2013-04-19 11:05:54 -0700</date>
            <delta_ts>2013-04-19 11:59:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114881-20130419110523.patch</filename>
            <type>text/plain</type>
            <size>152977</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI3OWQ1MmY1MGFjODc3
OWU0MDgwMWM3ZmRmMTBmMmU5ZjllNGNkYi4uMjhlNDE0ZWQwNTg2YTE4MmU3NDk5ODRmYzNlY2Fi
NjZiNGNkMzgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTA0LTE5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhl
IE9wZW5WRyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTQ4ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAoRmxvYXRS
ZWN0KTogUmVtb3ZlICNpZmRlZnMgZm9yIE9wZW5WRyBiYWNrZW5kLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5
T3BlblZHLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VH
TFV0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dy
YXBoaWNzQ29udGV4dE9wZW5WRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BsYXRmb3JtUGF0aE9wZW5WRy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9TaGFyZWRSZXNvdXJj
ZU9wZW5WRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L1NoYXJlZFJlc291cmNlT3BlblZHLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL1N1cmZhY2VPcGVuVkcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW52Zy9TdXJmYWNlT3BlblZHLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVuVkcuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0aWxzLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uaDoKKyAgICAgICAgKEFmZmluZVRyYW5zZm9ybSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAg
ICAgKFRyYW5zZm9ybWF0aW9uTWF0cml4KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5WRy5jcHA6IFJlbW92ZWQuCisKIDIw
MTMtMDQtMTkgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAgICAgQ29u
dGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4gc2hvdWxkIGZpcnN0IGRldGFjaCB0aGUgY2hpbGRy
ZW4gdGhlbiByZW1vdmUgdGhlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAppbmRleCAyYjdhZDQ3ZmNhMTJiNDM2MjhiMjhhYzY1NmRmMTIyZjEwOTczMzA0
Li43OGJhMGE5NGI0MmQzMDQyY2FkYWQwMDQyYjZhYzBmNjE1ODYzYWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtNzAsMTAgKzcwLDYgQEAg
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZWN0YW5nbGVfdDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgUExBVEZPUk0oT1BFTlZHKQotY2xhc3MgVkdSZWN0Owot
I2VuZGlmCi0KIGNsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9p
bnQ7CkBAIC0yMjEsMTAgKzIxNyw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBTa1JlY3QoKSBj
b25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oT1BFTlZHKQotICAgIG9wZXJhdG9yIFZHUmVj
dCgpIGNvbnN0OwotI2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAgICAgRmxvYXRSZWN0KGNvbnN0
IGNhaXJvX3JlY3RhbmdsZV90Jik7CiAgICAgb3BlcmF0b3IgY2Fpcm9fcmVjdGFuZ2xlX3QoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IGNmOTU2NjExYjIzNmZlY2U1NzRlOWRhNmE5NmFmNmMwOWU3MzM5
MTQuLmQwYjlhOWM3YTk1MmYwMDgyOTAzOTA3NmUwNjJhZDUxMGEwZDkyMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNzQ1LDcgKzc0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHRE
cmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRG
T1JNKFFUKSAmJiAhVVNFKENBSVJPKSAmJiAhVVNFKFNLSUEpICYmICFQTEFURk9STShPUEVOVkcp
CisjaWYgIVBMQVRGT1JNKFFUKSAmJiAhVVNFKENBSVJPKSAmJiAhVVNFKFNLSUEpCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKaW5kZXggMDg2MzkxYjdmYWE2MmJhOWFkMjEyYmFjOTNmZjgyZDkyYTUyMjM3ZS4uMDIzNGZj
YjcwMTkxMjNmZThmNTlmYjY0NzM3NWY3NWZjMDA0NGUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQ2LDExICs0Niw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwogfQog
dHlwZWRlZiBXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRDYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDsKLSNlbGlmIFBMQVRGT1JNKE9QRU5WRykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFN1cmZhY2VPcGVuVkc7Ci19Ci10eXBlZGVmIGNsYXNzIFdlYkNvcmU6OlN1cmZhY2VPcGVuVkcg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
UGFpbnRlcj4KIHR5cGVkZWYgUVBhaW50ZXIgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAppbmRl
eCBiNzIxOTkxNzczYzUxMzNmZTQ1M2FmY2YyMzhhOTQ2YTU3ZWFjNmM2Li5kMDNiZjhmNmRhZjhm
Y2RhZDAwNDg0MjMxNDJlZDAyODhiYmQ3ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAgLTYyLDkgKzYyLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdlUHRyOwogI2VsaWYg
UExBVEZPUk0oUVQpCiB0eXBlZGVmIFFQaXhtYXAqIE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgUExB
VEZPUk0oT1BFTlZHKQotY2xhc3MgVGlsZWRJbWFnZU9wZW5WRzsKLXR5cGVkZWYgVGlsZWRJbWFn
ZU9wZW5WRyogTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBQTEFURk9STShXWCkKICNpZiBVU0UoV1hH
QykKIHR5cGVkZWYgd3hHcmFwaGljc0JpdG1hcCogTmF0aXZlSW1hZ2VQdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IGZhZTBlNzYwNjYzZWY2ZDBkNmQ2
OGU3YjRkZWM5NzUzYWVjYWYxZWEuLmE4MWIwNDAxNmI0OWM0Y2E0NDZjODM5NzE4NWNhMWI3YWE1
MmVmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCkBAIC0z
OCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFQTEFURk9STShPUEVO
VkcpICYmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpCiBzdGF0aWMgdm9pZCBwYXRo
TGVuZ3RoQXBwbGllckZ1bmN0aW9uKHZvaWQqIGluZm8sIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIFBhdGhUcmF2ZXJzYWxTdGF0ZSYgdHJhdmVyc2FsU3RhdGUgPSAqc3RhdGlj
X2Nhc3Q8UGF0aFRyYXZlcnNhbFN0YXRlKj4oaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmgKaW5kZXggN2UwYTQ1NDg1NGJiZWFlNzEyMDJlNmFkZjMyZDMzNWI3YTAz
ZWVmNi4uYTAxMTk0NDkyYTNkZThlYWM4NThjYjAzY2RkYjI0MzlmZmM4ZjdhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApAQCAtMzQsMTEgKzM0LDYgQEAKIAogI2lm
IFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0aCBQbGF0Zm9ybVBhdGg7Ci0jZWxpZiBQTEFU
Rk9STShPUEVOVkcpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBQbGF0Zm9ybVBhdGhPcGVu
Vkc7Ci19Ci10eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtUGF0aE9wZW5WRyBQbGF0Zm9ybVBhdGg7
CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxcGFpbnRlcnBhdGguaD4KIHR5cGVkZWYg
UVBhaW50ZXJQYXRoIFBsYXRmb3JtUGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2OGFlZmY4Y2M4YzlmNTQ3NmI0ZjA1MzU2NjIwZmUx
OTE0MWM0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRUdMRGlzcGxheU9wZW5WRy5oIgotCi0j
aW5jbHVkZSAiRUdMVXRpbHMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiU3Vy
ZmFjZU9wZW5WRy5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTmVlZCB0byB0
eXBlZGVmIHRoaXMsIG90aGVyd2lzZSBERUZJTkVfU1RBVElDX0xPQ0FMKCkgZG9lc24ndCBzd2Fs
bG93IGl0LgotdHlwZWRlZiBIYXNoTWFwPEVHTERpc3BsYXksIEVHTERpc3BsYXlPcGVuVkcqPiBF
R0xEaXNwbGF5TWFuYWdlck1hcDsKLQotLy8gRmlsZS1zdGF0aWMgdmFyaWFibGVzLgotc3RhdGlj
IEVHTERpc3BsYXlNYW5hZ2VyTWFwJiBkaXNwbGF5TWFuYWdlcnMoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoRUdMRGlzcGxheU1hbmFnZXJNYXAsIG1hbmFnZXJzLCAoKSk7Ci0gICAgcmV0
dXJuIG1hbmFnZXJzOwotfQotCi1zdGF0aWMgRUdMRGlzcGxheU9wZW5WRyogc19jdXJyZW50ID0g
MDsKLQotLy8gU3RhdGljIGNsYXNzIG1lbWJlcnMuCi0KLVN1cmZhY2VPcGVuVkcqIEVHTERpc3Bs
YXlPcGVuVkc6OmN1cnJlbnRTdXJmYWNlKCkKLXsKLSAgICBFR0xEaXNwbGF5TWFuYWdlck1hcCYg
bWFuYWdlcnMgPSBkaXNwbGF5TWFuYWdlcnMoKTsKLSAgICBFR0xEaXNwbGF5IGN1cnJlbnREaXNw
bGF5ID0gZWdsR2V0Q3VycmVudERpc3BsYXkoKTsKLQotICAgIGlmIChjdXJyZW50RGlzcGxheSA9
PSBFR0xfTk9fRElTUExBWSB8fCAhbWFuYWdlcnMuY29udGFpbnMoY3VycmVudERpc3BsYXkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEVHTERpc3BsYXlPcGVuVkcqIGRpc3BsYXlNYW5hZ2Vy
ID0gbWFuYWdlcnMuZ2V0KGN1cnJlbnREaXNwbGF5KTsKLSAgICBFR0xTdXJmYWNlIGN1cnJlbnRT
dXJmYWNlID0gZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpOwotCi0gICAgaWYgKGN1cnJl
bnRTdXJmYWNlID09IEVHTF9OT19TVVJGQUNFIHx8ICFkaXNwbGF5TWFuYWdlci0+bV9wbGF0Zm9y
bVN1cmZhY2VzLmNvbnRhaW5zKGN1cnJlbnRTdXJmYWNlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gZGlzcGxheU1hbmFnZXItPm1fcGxhdGZvcm1TdXJmYWNlcy5nZXQoY3VycmVu
dFN1cmZhY2UpOwotfQotCi12b2lkIEVHTERpc3BsYXlPcGVuVkc6OnJlZ2lzdGVyUGxhdGZvcm1T
dXJmYWNlKFN1cmZhY2VPcGVuVkcqIHBsYXRmb3JtU3VyZmFjZSkKLXsKLSAgICBFR0xEaXNwbGF5
T3BlblZHKiBkaXNwbGF5TWFuYWdlciA9IEVHTERpc3BsYXlPcGVuVkc6OmZvckRpc3BsYXkocGxh
dGZvcm1TdXJmYWNlLT5lZ2xEaXNwbGF5KCkpOwotICAgIGRpc3BsYXlNYW5hZ2VyLT5tX3BsYXRm
b3JtU3VyZmFjZXMuc2V0KHBsYXRmb3JtU3VyZmFjZS0+ZWdsU3VyZmFjZSgpLCBwbGF0Zm9ybVN1
cmZhY2UpOwotfQotCi12b2lkIEVHTERpc3BsYXlPcGVuVkc6OnVucmVnaXN0ZXJQbGF0Zm9ybVN1
cmZhY2UoU3VyZmFjZU9wZW5WRyogcGxhdGZvcm1TdXJmYWNlKQotewotICAgIEVHTERpc3BsYXlP
cGVuVkcqIGRpc3BsYXlNYW5hZ2VyID0gRUdMRGlzcGxheU9wZW5WRzo6Zm9yRGlzcGxheShwbGF0
Zm9ybVN1cmZhY2UtPmVnbERpc3BsYXkoKSk7Ci0gICAgZGlzcGxheU1hbmFnZXItPm1fcGxhdGZv
cm1TdXJmYWNlcy5yZW1vdmUocGxhdGZvcm1TdXJmYWNlLT5lZ2xTdXJmYWNlKCkpOwotfQotCi12
b2lkIEVHTERpc3BsYXlPcGVuVkc6OnNldEN1cnJlbnREaXNwbGF5KGNvbnN0IEVHTERpc3BsYXkm
IGRpc3BsYXkpCi17Ci0gICAgc19jdXJyZW50ID0gRUdMRGlzcGxheU9wZW5WRzo6Zm9yRGlzcGxh
eShkaXNwbGF5KTsKLX0KLQotRUdMRGlzcGxheU9wZW5WRyogRUdMRGlzcGxheU9wZW5WRzo6Y3Vy
cmVudCgpCi17Ci0gICAgaWYgKCFzX2N1cnJlbnQpIHsKLSAgICAgICAgRUdMRGlzcGxheSBkaXNw
bGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICAgICAgZWdsSW5p
dGlhbGl6ZShkaXNwbGF5LCAwLCAwKTsKLSAgICAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwot
Ci0gICAgICAgIHNfY3VycmVudCA9IEVHTERpc3BsYXlPcGVuVkc6OmZvckRpc3BsYXkoZGlzcGxh
eSk7Ci0gICAgfQotICAgIHJldHVybiBzX2N1cnJlbnQ7Ci19Ci0KLUVHTERpc3BsYXlPcGVuVkcq
IEVHTERpc3BsYXlPcGVuVkc6OmZvckRpc3BsYXkoY29uc3QgRUdMRGlzcGxheSYgZGlzcGxheSkK
LXsKLSAgICBFR0xEaXNwbGF5TWFuYWdlck1hcCYgbWFuYWdlcnMgPSBkaXNwbGF5TWFuYWdlcnMo
KTsKLQotICAgIGlmICghbWFuYWdlcnMuY29udGFpbnMoZGlzcGxheSkpCi0gICAgICAgIG1hbmFn
ZXJzLnNldChkaXNwbGF5LCBuZXcgRUdMRGlzcGxheU9wZW5WRyhkaXNwbGF5KSk7Ci0KLSAgICBy
ZXR1cm4gbWFuYWdlcnMuZ2V0KGRpc3BsYXkpOwotfQotCi0KLS8vIE9iamVjdC9pbnN0YW5jZSBt
ZW1iZXJzLgotCi1FR0xEaXNwbGF5T3BlblZHOjpFR0xEaXNwbGF5T3BlblZHKGNvbnN0IEVHTERp
c3BsYXkmIGRpc3BsYXkpCi0gICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKLSAgICAsIG1fc2hhcmVk
UGxhdGZvcm1TdXJmYWNlKDApCi0gICAgLCBtX3BidWZmZXJDb25maWdJZCgwKQotICAgICwgbV93
aW5kb3dDb25maWdJZCgwKQotewotICAgIGVnbEJpbmRBUEkoRUdMX09QRU5WR19BUEkpOwotICAg
IEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLX0KLQotRUdMRGlzcGxheU9wZW5WRzo6fkVHTERpc3Bs
YXlPcGVuVkcoKQotewotICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgQVNTRVJUX0VHTF9OT19F
UlJPUigpOwotCi0gICAgZGVsZXRlIG1fc2hhcmVkUGxhdGZvcm1TdXJmYWNlOwotCi0gICAgSGFz
aE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N1cmZhY2VD
b25maWdJZHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVHTGludD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgZGVzdHJveVN1cmZhY2UoKCppdCkua2V5KTsKLQotICAgIGVnbFRlcm1p
bmF0ZShtX2Rpc3BsYXkpOwotICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBF
R0xEaXNwbGF5T3BlblZHOjpzZXREZWZhdWx0UGJ1ZmZlckNvbmZpZyhjb25zdCBFR0xDb25maWcm
IGNvbmZpZykKLXsKLSAgICBFR0xpbnQgY29uZmlnSWQ7Ci0gICAgRUdMQm9vbGVhbiBzdWNjZXNz
ID0gZWdsR2V0Q29uZmlnQXR0cmliKG1fZGlzcGxheSwgY29uZmlnLCBFR0xfQ09ORklHX0lELCAm
Y29uZmlnSWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IEVHTF9UUlVFKTsKLSAgICBBU1NFUlQo
Y29uZmlnSWQgIT0gRUdMX0JBRF9BVFRSSUJVVEUpOwotCi0gICAgbV9wYnVmZmVyQ29uZmlnSWQg
PSBjb25maWdJZDsKLX0KLQotRUdMQ29uZmlnIEVHTERpc3BsYXlPcGVuVkc6OmRlZmF1bHRQYnVm
ZmVyQ29uZmlnKCkKLXsKLSAgICBFR0xDb25maWcgY29uZmlnOwotICAgIEVHTGludCBudW1Db25m
aWdzOwotCi0gICAgLy8gSG9wZWZ1bGx5IHRoZSBjbGllbnQgd2lsbCBoYXZlIHNldCB0aGUgcGJ1
ZmZlciBjb25maWcgb2YgaXRzIGNob2ljZQotICAgIC8vIGJ5IG5vdyAtIGlmIG5vdCwgdXNlIGEg
MzItYml0IGdlbmVyaWMgb25lIGFzIGRlZmF1bHQuCi0gICAgaWYgKCFtX3BidWZmZXJDb25maWdJ
ZCkgewotICAgICAgICBzdGF0aWMgY29uc3QgRUdMaW50IGNvbmZpZ0F0dHJpYnNbXSA9IHsKLSAg
ICAgICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4
LAotICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICAgICAgICAgIEVHTF9BTFBIQV9T
SVpFLCA4LAotICAgICAgICAgICAgRUdMX0FMUEhBX01BU0tfU0laRSwgMSwKLSAgICAgICAgICAg
IEVHTF9MVU1JTkFOQ0VfU0laRSwgRUdMX0RPTlRfQ0FSRSwKLSAgICAgICAgICAgIEVHTF9TVVJG
QUNFX1RZUEUsIEVHTF9QQlVGRkVSX0JJVCwKLSAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZ
UEUsIEVHTF9PUEVOVkdfQklULAotICAgICAgICAgICAgRUdMX05PTkUKLSAgICAgICAgfTsKLSAg
ICAgICAgZWdsQ2hvb3NlQ29uZmlnKG1fZGlzcGxheSwgY29uZmlnQXR0cmlicywgJmNvbmZpZywg
MSwgJm51bUNvbmZpZ3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IEVHTGludCBjb25m
aWdBdHRyaWJzW10gPSB7Ci0gICAgICAgICAgICBFR0xfQ09ORklHX0lELCBtX3BidWZmZXJDb25m
aWdJZCwKLSAgICAgICAgICAgIEVHTF9OT05FCi0gICAgICAgIH07Ci0gICAgICAgIGVnbENob29z
ZUNvbmZpZyhtX2Rpc3BsYXksIGNvbmZpZ0F0dHJpYnMsICZjb25maWcsIDEsICZudW1Db25maWdz
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfRUdMX05PX0VSUk9SKCk7Ci0gICAgQVNTRVJUKG51bUNv
bmZpZ3MgPT0gMSk7Ci0gICAgcmV0dXJuIGNvbmZpZzsKLX0KLQotdm9pZCBFR0xEaXNwbGF5T3Bl
blZHOjpzZXREZWZhdWx0V2luZG93Q29uZmlnKGNvbnN0IEVHTENvbmZpZyYgY29uZmlnKQotewot
ICAgIEVHTGludCBjb25maWdJZDsKLSAgICBFR0xCb29sZWFuIHN1Y2Nlc3MgPSBlZ2xHZXRDb25m
aWdBdHRyaWIobV9kaXNwbGF5LCBjb25maWcsIEVHTF9DT05GSUdfSUQsICZjb25maWdJZCk7Ci0g
ICAgQVNTRVJUKHN1Y2Nlc3MgPT0gRUdMX1RSVUUpOwotICAgIEFTU0VSVChjb25maWdJZCAhPSBF
R0xfQkFEX0FUVFJJQlVURSk7Ci0KLSAgICBtX3dpbmRvd0NvbmZpZ0lkID0gY29uZmlnSWQ7Ci19
Ci0KLUVHTENvbmZpZyBFR0xEaXNwbGF5T3BlblZHOjpkZWZhdWx0V2luZG93Q29uZmlnKCkKLXsK
LSAgICBFR0xDb25maWcgY29uZmlnOwotICAgIEVHTGludCBudW1Db25maWdzOwotCi0gICAgLy8g
SG9wZWZ1bGx5IHRoZSBjbGllbnQgd2lsbCBoYXZlIHNldCB0aGUgd2luZG93IGNvbmZpZyBvZiBp
dHMgY2hvaWNlCi0gICAgLy8gYnkgbm93IC0gaWYgbm90LCB1c2UgYSAzMi1iaXQgZ2VuZXJpYyBv
bmUgYXMgZGVmYXVsdC4KLSAgICBpZiAoIW1fd2luZG93Q29uZmlnSWQpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IEVHTGludCBjb25maWdBdHRyaWJzW10gPSB7Ci0gICAgICAgICAgICBFR0xfUkVE
X1NJWkUsIDgsCi0gICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICAgICAgICAgIEVH
TF9CTFVFX1NJWkUsIDgsCi0gICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKLSAgICAgICAg
ICAgIEVHTF9BTFBIQV9NQVNLX1NJWkUsIDEsCi0gICAgICAgICAgICBFR0xfTFVNSU5BTkNFX1NJ
WkUsIEVHTF9ET05UX0NBUkUsCi0gICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfV0lO
RE9XX0JJVCwKLSAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOVkdfQklU
LAotICAgICAgICAgICAgRUdMX05PTkUKLSAgICAgICAgfTsKLSAgICAgICAgZWdsQ2hvb3NlQ29u
ZmlnKG1fZGlzcGxheSwgY29uZmlnQXR0cmlicywgJmNvbmZpZywgMSwgJm51bUNvbmZpZ3MpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IEVHTGludCBjb25maWdBdHRyaWJzW10gPSB7Ci0g
ICAgICAgICAgICBFR0xfQ09ORklHX0lELCBtX3dpbmRvd0NvbmZpZ0lkLAotICAgICAgICAgICAg
RUdMX05PTkUKLSAgICAgICAgfTsKLSAgICAgICAgZWdsQ2hvb3NlQ29uZmlnKG1fZGlzcGxheSwg
Y29uZmlnQXR0cmlicywgJmNvbmZpZywgMSwgJm51bUNvbmZpZ3MpOwotICAgIH0KLQotICAgIEFT
U0VSVF9FR0xfTk9fRVJST1IoKTsKLSAgICBBU1NFUlQobnVtQ29uZmlncyA9PSAxKTsKLSAgICBy
ZXR1cm4gY29uZmlnOwotfQotCi1TdXJmYWNlT3BlblZHKiBFR0xEaXNwbGF5T3BlblZHOjpzaGFy
ZWRQbGF0Zm9ybVN1cmZhY2UoKQotewotICAgIGlmICghbV9zaGFyZWRQbGF0Zm9ybVN1cmZhY2Up
IHsKLSAgICAgICAgLy8gVGhlIHNoYXJlZCBzdXJmYWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBkcmF3
biBvbiwgaXQganVzdCBleGlzdHMgc28KLSAgICAgICAgLy8gdGhhdCB3ZSBjYW4gYWx3YXlzIG1h
a2UgdGhlIHNoYXJlZCBjb250ZXh0IGN1cnJlbnQgKHdoaWNoIGluIHR1cm4gaXMKLSAgICAgICAg
Ly8gdGhlIG93bmVyIG9mIGxvbmctbGl2aW5nIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcywgcGF0
aHMgYW5kIGZvbnRzKS4KLSAgICAgICAgLy8gV2UnbGwganVzdCBtYWtlIHRoZSBzaGFyZWQgc3Vy
ZmFjZSBhcyBzbWFsbCBhcyBwb3NzaWJsZTogMXgxIHBpeGVsLgotICAgICAgICBFR0xDb25maWcg
Y29uZmlnID0gZGVmYXVsdFBidWZmZXJDb25maWcoKTsKLSAgICAgICAgRUdMU3VyZmFjZSBzdXJm
YWNlID0gY3JlYXRlUGJ1ZmZlclN1cmZhY2UoSW50U2l6ZSgxLCAxKSwgY29uZmlnKTsKLQotICAg
ICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29u
ZmlnLCBFR0xfTk9fQ09OVEVYVCwgMCk7Ci0gICAgICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsK
LSAgICAgICAgbV9jb250ZXh0cy5zZXQobV9zdXJmYWNlQ29uZmlnSWRzLmdldChzdXJmYWNlKSwg
Y29udGV4dCk7Ci0KLSAgICAgICAgbV9zaGFyZWRQbGF0Zm9ybVN1cmZhY2UgPSBuZXcgU3VyZmFj
ZU9wZW5WRzsKLSAgICAgICAgbV9zaGFyZWRQbGF0Zm9ybVN1cmZhY2UtPm1fZWdsRGlzcGxheSA9
IG1fZGlzcGxheTsKLSAgICAgICAgbV9zaGFyZWRQbGF0Zm9ybVN1cmZhY2UtPm1fZWdsU3VyZmFj
ZSA9IHN1cmZhY2U7Ci0gICAgICAgIG1fc2hhcmVkUGxhdGZvcm1TdXJmYWNlLT5tX2VnbENvbnRl
eHQgPSBjb250ZXh0OwotICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZXMuc2V0KHN1cmZhY2UsIG1f
c2hhcmVkUGxhdGZvcm1TdXJmYWNlKTsgLy8gYS5rLmEuIHJlZ2lzdGVyUGxhdGZvcm1TdXJmYWNl
KCkKLSAgICB9Ci0gICAgcmV0dXJuIG1fc2hhcmVkUGxhdGZvcm1TdXJmYWNlOwotfQotCi1FR0xT
dXJmYWNlIEVHTERpc3BsYXlPcGVuVkc6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEVHTENvbmZpZyYgY29uZmlnLCBFR0xpbnQqIGVycm9yQ29kZSkKLXsK
LSAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlzdFtdID0gewotICAgICAgICBFR0xfV0lEVEgsIHNp
emUud2lkdGgoKSwKLSAgICAgICAgRUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAg
RUdMX05PTkUKLSAgICB9OwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbENyZWF0ZVBidWZm
ZXJTdXJmYWNlKG1fZGlzcGxheSwgY29uZmlnLCBhdHRyaWJMaXN0KTsKLQotICAgIGlmIChlcnJv
ckNvZGUpCi0gICAgICAgICplcnJvckNvZGUgPSBlZ2xHZXRFcnJvcigpOwotICAgIGVsc2UKLSAg
ICAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwotCi0gICAgaWYgKHN1cmZhY2UgPT0gRUdMX05P
X1NVUkZBQ0UpCi0gICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLQotICAgIEVHTGludCBz
dXJmYWNlQ29uZmlnSWQ7Ci0gICAgRUdMQm9vbGVhbiBzdWNjZXNzID0gZWdsR2V0Q29uZmlnQXR0
cmliKG1fZGlzcGxheSwgY29uZmlnLCBFR0xfQ09ORklHX0lELCAmc3VyZmFjZUNvbmZpZ0lkKTsK
LSAgICBBU1NFUlQoc3VjY2VzcyA9PSBFR0xfVFJVRSk7Ci0gICAgQVNTRVJUKHN1cmZhY2VDb25m
aWdJZCAhPSBFR0xfQkFEX0FUVFJJQlVURSk7Ci0KLSAgICBBU1NFUlQoIW1fc3VyZmFjZUNvbmZp
Z0lkcy5jb250YWlucyhzdXJmYWNlKSk7Ci0gICAgbV9zdXJmYWNlQ29uZmlnSWRzLnNldChzdXJm
YWNlLCBzdXJmYWNlQ29uZmlnSWQpOwotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1FR0xTdXJm
YWNlIEVHTERpc3BsYXlPcGVuVkc6OmNyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKAotICAg
IEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsIEVHTGVudW0gYnVmZmVyVHlwZSwgY29uc3Qg
RUdMQ29uZmlnJiBjb25maWcsIEVHTGludCogZXJyb3JDb2RlKQotewotICAgIEVHTFN1cmZhY2Ug
c3VyZmFjZSA9IGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKG1fZGlzcGxheSwKLSAg
ICAgICAgYnVmZmVyVHlwZSwgY2xpZW50QnVmZmVyLCBjb25maWcsIDAgLyogYXR0cmliTGlzdCAq
Lyk7Ci0KLSAgICBpZiAoZXJyb3JDb2RlKQotICAgICAgICAqZXJyb3JDb2RlID0gZWdsR2V0RXJy
b3IoKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLQotICAgIGlm
IChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZB
Q0U7Ci0KLSAgICBFR0xpbnQgc3VyZmFjZUNvbmZpZ0lkOwotICAgIEVHTEJvb2xlYW4gc3VjY2Vz
cyA9IGVnbEdldENvbmZpZ0F0dHJpYihtX2Rpc3BsYXksIGNvbmZpZywgRUdMX0NPTkZJR19JRCwg
JnN1cmZhY2VDb25maWdJZCk7Ci0gICAgQVNTRVJUKHN1Y2Nlc3MgPT0gRUdMX1RSVUUpOwotICAg
IEFTU0VSVChzdXJmYWNlQ29uZmlnSWQgIT0gRUdMX0JBRF9BVFRSSUJVVEUpOwotCi0gICAgQVNT
RVJUKCFtX3N1cmZhY2VDb25maWdJZHMuY29udGFpbnMoc3VyZmFjZSkpOwotICAgIG1fc3VyZmFj
ZUNvbmZpZ0lkcy5zZXQoc3VyZmFjZSwgc3VyZmFjZUNvbmZpZ0lkKTsKLSAgICByZXR1cm4gc3Vy
ZmFjZTsKLX0KLQotRUdMU3VyZmFjZSBFR0xEaXNwbGF5T3BlblZHOjpzdXJmYWNlRm9yV2luZG93
KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd0lkLCBjb25zdCBFR0xDb25maWcmIGNvbmZpZykKLXsKLSAg
ICBpZiAobV93aW5kb3dTdXJmYWNlcy5jb250YWlucyh3SWQpKQotICAgICAgICByZXR1cm4gbV93
aW5kb3dTdXJmYWNlcy5nZXQod0lkKTsKLQotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbENy
ZWF0ZVdpbmRvd1N1cmZhY2UobV9kaXNwbGF5LCBjb25maWcsIHdJZCwgMCk7Ci0gICAgQVNTRVJU
X0VHTF9OT19FUlJPUigpOwotCi0gICAgRUdMaW50IHN1cmZhY2VDb25maWdJZDsKLSAgICBFR0xC
b29sZWFuIHN1Y2Nlc3MgPSBlZ2xHZXRDb25maWdBdHRyaWIobV9kaXNwbGF5LCBjb25maWcsIEVH
TF9DT05GSUdfSUQsICZzdXJmYWNlQ29uZmlnSWQpOwotICAgIEFTU0VSVChzdWNjZXNzID09IEVH
TF9UUlVFKTsKLSAgICBBU1NFUlQoc3VyZmFjZUNvbmZpZ0lkICE9IEVHTF9CQURfQVRUUklCVVRF
KTsKLQotICAgIEFTU0VSVCghbV9zdXJmYWNlQ29uZmlnSWRzLmNvbnRhaW5zKHN1cmZhY2UpKTsK
LSAgICBtX3N1cmZhY2VDb25maWdJZHMuc2V0KHN1cmZhY2UsIHN1cmZhY2VDb25maWdJZCk7Ci0g
ICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLWJvb2wgRUdMRGlzcGxheU9wZW5WRzo6c3VyZmFjZXND
b21wYXRpYmxlKGNvbnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UsIGNvbnN0IEVHTFN1cmZhY2UmIG90
aGVyU3VyZmFjZSkKLXsKLSAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSB8fCBvdGhl
clN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEN1cnJlbnRseSwgd2UgYXNzdW1lIHRoYXQgYWxsIHN1cmZhY2VzIGtub3duIHRvIHRoaXMg
b2JqZWN0IGFyZQotICAgIC8vIGNvbnRleHQtY29tcGF0aWJsZSB0byBlYWNoIG90aGVyICh3aGlj
aCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZSwKLSAgICAvLyBvdGhlcndpc2UgZWdsQ3JlYXRlQ29u
dGV4dCgpIHdvdWxkIGZhaWwgd2l0aCBFR0xfQkFEX01BVENIIGZvciBzaGFyZWQKLSAgICAvLyBj
b250ZXh0IGNvbXBhdGliaWxpdHkgYW55d2F5cy4KLSAgICByZXR1cm4gbV9zdXJmYWNlQ29uZmln
SWRzLmNvbnRhaW5zKHN1cmZhY2UpICYmIG1fc3VyZmFjZUNvbmZpZ0lkcy5jb250YWlucyhvdGhl
clN1cmZhY2UpOwotfQotCi12b2lkIEVHTERpc3BsYXlPcGVuVkc6OmRlc3Ryb3lTdXJmYWNlKGNv
bnN0IEVHTFN1cmZhY2UmIHN1cmZhY2UpCi17Ci0gICAgQVNTRVJUKHN1cmZhY2UgIT0gRUdMX05P
X1NVUkZBQ0UpOwotCi0gICAgaWYgKGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSA9PSBz
dXJmYWNlKSB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIEFTU0VSVF9FR0xf
Tk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95IHRoZSBjb250ZXh0IGFzc29jaWF0
ZWQgdG8gdGhlIHN1cmZhY2UsIGlmIHdlIGFscmVhZHkgY3JlYXRlZCBvbmUuCi0gICAgaWYgKG1f
c3VyZmFjZUNvbmZpZ0lkcy5jb250YWlucyhzdXJmYWNlKSkgewotICAgICAgICBFR0xpbnQgc3Vy
ZmFjZUNvbmZpZ0lkID0gbV9zdXJmYWNlQ29uZmlnSWRzLnRha2Uoc3VyZmFjZSk7IC8vIHRha2Ug
PSBnZXQgYW5kIHJlbW92ZQotICAgICAgICBib29sIGlzQ29udGV4dFJlZmVyZW5jZWQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAobV9jb21wYXRpYmxlQ29uZmlnSWRzLmNvbnRhaW5zKHN1cmZhY2VD
b25maWdJZCkpCi0gICAgICAgICAgICBzdXJmYWNlQ29uZmlnSWQgPSBtX2NvbXBhdGlibGVDb25m
aWdJZHMuZ2V0KHN1cmZhY2VDb25maWdJZCk7Ci0KLSAgICAgICAgSGFzaE1hcDxFR0xTdXJmYWNl
LCBFR0xpbnQ+OjppdGVyYXRvciBlbmQgPSBtX3N1cmZhY2VDb25maWdJZHMuZW5kKCk7Ci0KLSAg
ICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhlcmUncyBubyBvdGhlciBzdXJmYWNlcyBhc3NvY2lh
dGVkIHRvIHRoYXQgY29udGV4dC4KLSAgICAgICAgZm9yIChIYXNoTWFwPEVHTFN1cmZhY2UsIEVH
TGludD46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQ29uZmlnSWRzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLnZhbHVlID09IHN1cmZhY2VDb25maWdJ
ZCkgewotICAgICAgICAgICAgICAgIGlzQ29udGV4dFJlZmVyZW5jZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgh
aXNDb250ZXh0UmVmZXJlbmNlZCAmJiBtX2NvbnRleHRzLmNvbnRhaW5zKHN1cmZhY2VDb25maWdJ
ZCkpIHsKLSAgICAgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IG1fY29udGV4dHMudGFrZShz
dXJmYWNlQ29uZmlnSWQpOwotICAgICAgICAgICAgZWdsRGVzdHJveUNvbnRleHQobV9kaXNwbGF5
LCBjb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fcGxhdGZvcm1TdXJmYWNlcy5yZW1vdmUoc3VyZmFjZSk7Ci0KLSAg
ICBIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+OjppdGVyYXRvciBlbmQg
PSBtX3dpbmRvd1N1cmZhY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxFR0xOYXRpdmVXaW5k
b3dUeXBlLCBFR0xTdXJmYWNlPjo6aXRlcmF0b3IgaXQgPSBtX3dpbmRvd1N1cmZhY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkudmFsdWUgPT0gc3VyZmFj
ZSkgewotICAgICAgICAgICAgbV93aW5kb3dTdXJmYWNlcy5yZW1vdmUoaXQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlZ2xEZXN0cm95U3VyZmFjZShtX2Rp
c3BsYXksIHN1cmZhY2UpOwotICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLX0KLQotRUdMQ29u
dGV4dCBFR0xEaXNwbGF5T3BlblZHOjpjb250ZXh0Rm9yU3VyZmFjZShjb25zdCBFR0xTdXJmYWNl
JiBzdXJmYWNlKQotewotICAgIEFTU0VSVChzdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKTsKLQot
ICAgIGlmIChtX3BsYXRmb3JtU3VyZmFjZXMuY29udGFpbnMoc3VyZmFjZSkpCi0gICAgICAgIHJl
dHVybiBtX3BsYXRmb3JtU3VyZmFjZXMuZ2V0KHN1cmZhY2UpLT5lZ2xDb250ZXh0KCk7Ci0KLSAg
ICBlZ2xCaW5kQVBJKEVHTF9PUEVOVkdfQVBJKTsKLSAgICBBU1NFUlRfRUdMX05PX0VSUk9SKCk7
Ci0KLSAgICBFR0xpbnQgc3VyZmFjZUNvbmZpZ0lkOwotCi0gICAgaWYgKG1fc3VyZmFjZUNvbmZp
Z0lkcy5jb250YWlucyhzdXJmYWNlKSkKLSAgICAgICAgc3VyZmFjZUNvbmZpZ0lkID0gbV9zdXJm
YWNlQ29uZmlnSWRzLmdldChzdXJmYWNlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gUmV0cmll
dmUgdGhlIHNhbWUgRUdMIGNvbmZpZyBmb3IgY29udGV4dCBjcmVhdGlvbiB0aGF0IHdhcyB1c2Vk
IHRvCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgdGhlIEVHTCBzdXJmYWNlLgotICAgICAgICBFR0xC
b29sZWFuIHN1Y2Nlc3MgPSBlZ2xRdWVyeVN1cmZhY2UobV9kaXNwbGF5LCBzdXJmYWNlLCBFR0xf
Q09ORklHX0lELCAmc3VyZmFjZUNvbmZpZ0lkKTsKLSAgICAgICAgQVNTRVJUKHN1Y2Nlc3MgPT0g
RUdMX1RSVUUpOwotICAgICAgICBBU1NFUlQoc3VyZmFjZUNvbmZpZ0lkICE9IEVHTF9CQURfQVRU
UklCVVRFKTsKLQotICAgICAgICBtX3N1cmZhY2VDb25maWdJZHMuc2V0KHN1cmZhY2UsIHN1cmZh
Y2VDb25maWdJZCk7Ci0gICAgfQotCi0gICAgaWYgKG1fY29tcGF0aWJsZUNvbmZpZ0lkcy5jb250
YWlucyhzdXJmYWNlQ29uZmlnSWQpKQotICAgICAgICBzdXJmYWNlQ29uZmlnSWQgPSBtX2NvbXBh
dGlibGVDb25maWdJZHMuZ2V0KHN1cmZhY2VDb25maWdJZCk7Ci0KLSAgICBpZiAobV9jb250ZXh0
cy5jb250YWlucyhzdXJmYWNlQ29uZmlnSWQpKQotICAgICAgICByZXR1cm4gbV9jb250ZXh0cy5n
ZXQoc3VyZmFjZUNvbmZpZ0lkKTsKLQotICAgIGlmICghbV9zaGFyZWRQbGF0Zm9ybVN1cmZhY2Up
IC8vIHNoYXJlZCBjb250ZXh0IGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldAotICAgICAgICBzaGFy
ZWRQbGF0Zm9ybVN1cmZhY2UoKTsgLy8gY3JlYXRlcyB0aGUgc2hhcmVkIHN1cmZhY2UgJiBjb250
ZXh0Ci0KLSAgICBFR0xEaXNwbGF5IGN1cnJlbnREaXNwbGF5ID0gZWdsR2V0Q3VycmVudERpc3Bs
YXkoKTsKLSAgICBFR0xTdXJmYWNlIGN1cnJlbnRSZWFkU3VyZmFjZSA9IGVnbEdldEN1cnJlbnRT
dXJmYWNlKEVHTF9SRUFEKTsKLSAgICBFR0xTdXJmYWNlIGN1cnJlbnREcmF3U3VyZmFjZSA9IGVn
bEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKLSAgICBFR0xDb250ZXh0IGN1cnJlbnRDb250
ZXh0ID0gZWdsR2V0Q3VycmVudENvbnRleHQoKTsKLQotICAgIC8vIEJlZm9yZSBjcmVhdGluZyBh
IG5ldyBjb250ZXh0LCBsZXQncyB0cnkgd2hldGhlciBhbiBleGlzdGluZyBvbmUKLSAgICAvLyBp
cyBjb21wYXRpYmxlIHdpdGggdGhlIHN1cmZhY2UuIEVHTCBkb2Vzbid0IGdpdmUgdXMgYSBkaWZm
ZXJlbnQgd2F5Ci0gICAgLy8gdG8gY2hlY2sgY29udGV4dC9zdXJmYWNlIGNvbXBhdGliaWxpdHkg
dGhhbiB0cnlpbmcgaXQgb3V0LCBzbyBsZXQncwotICAgIC8vIGRvIGp1c3QgdGhhdC4KLSAgICBI
YXNoTWFwPEVHTGludCwgRUdMQ29udGV4dD46Oml0ZXJhdG9yIGVuZCA9IG1fY29udGV4dHMuZW5k
KCk7Ci0KLSAgICBmb3IgKEhhc2hNYXA8RUdMaW50LCBFR0xDb250ZXh0Pjo6aXRlcmF0b3IgaXQg
PSBtX2NvbnRleHRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBlZ2xNYWtl
Q3VycmVudChtX2Rpc3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsICgqaXQpLnZhbHVlKTsKLSAgICAg
ICAgaWYgKGVnbEdldEVycm9yKCkgPT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIC8vIFJl
c3RvcmUgcHJldmlvdXMgc3VyZmFjZS9jb250ZXh0LgotICAgICAgICAgICAgaWYgKGN1cnJlbnRD
b250ZXh0ICE9IEVHTF9OT19DT05URVhUKSB7Ci0gICAgICAgICAgICAgICAgZWdsTWFrZUN1cnJl
bnQoY3VycmVudERpc3BsYXksIGN1cnJlbnRSZWFkU3VyZmFjZSwgY3VycmVudERyYXdTdXJmYWNl
LCBjdXJyZW50Q29udGV4dCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX0VHTF9OT19FUlJPUigp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gQ29vbCwgc3VyZmFjZSBpcyBjb21wYXRp
YmxlIHRvIG9uZSBvZiBvdXIgZXhpc3RpbmcgY29udGV4dHMuCi0gICAgICAgICAgICBtX2NvbXBh
dGlibGVDb25maWdJZHMuc2V0KHN1cmZhY2VDb25maWdJZCwgKCppdCkua2V5KTsKLSAgICAgICAg
ICAgIHJldHVybiAoKml0KS52YWx1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBSZXN0b3Jl
IHByZXZpb3VzIHN1cmZhY2UvY29udGV4dC4KLSAgICBpZiAoY3VycmVudENvbnRleHQgIT0gRUdM
X05PX0NPTlRFWFQpIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQoY3VycmVudERpc3BsYXksIGN1
cnJlbnRSZWFkU3VyZmFjZSwgY3VycmVudERyYXdTdXJmYWNlLCBjdXJyZW50Q29udGV4dCk7Ci0g
ICAgICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICBFR0xDb25maWcgY29u
ZmlnOwotICAgIEVHTGludCBudW1Db25maWdzOwotCi0gICAgY29uc3QgRUdMaW50IGNvbmZpZ0F0
dHJpYnNbXSA9IHsKLSAgICAgICAgRUdMX0NPTkZJR19JRCwgc3VyZmFjZUNvbmZpZ0lkLAotICAg
ICAgICBFR0xfTk9ORQotICAgIH07Ci0KLSAgICBlZ2xDaG9vc2VDb25maWcobV9kaXNwbGF5LCBj
b25maWdBdHRyaWJzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncyk7Ci0gICAgQVNTRVJUX0VHTF9O
T19FUlJPUigpOwotICAgIEFTU0VSVChudW1Db25maWdzID09IDEpOwotCi0gICAgLy8gV2Ugc2hh
cmUgYWxsIG9mIHRoZSBpbWFnZXMgYW5kIHBhdGhzIGFtb25nc3QgdGhlIGRpZmZlcmVudCBjb250
ZXh0cywKLSAgICAvLyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgaW4gYWxsIG9mIHRoZW0uIFJl
c291cmNlcyB0aGF0IGFyZSBjcmVhdGVkCi0gICAgLy8gd2hpbGUgbV9zaGFyZWRQbGF0Zm9ybVN1
cmZhY2UtPmNvbnRleHQoKSBpcyBjdXJyZW50IHdpbGwgYmUKLSAgICAvLyBhY2Nlc3NpYmxlIGZy
b20gYWxsIG90aGVyIGNvbnRleHRzLCBidXQgYXJlIG5vdCByZXN0cmljdGVkIHRvIHRoZQotICAg
IC8vIGxpZmV0aW1lIG9mIHRob3NlIGNvbnRleHRzLgotICAgIEVHTENvbnRleHQgY29udGV4dCA9
IGVnbENyZWF0ZUNvbnRleHQobV9kaXNwbGF5LCBjb25maWcsIG1fc2hhcmVkUGxhdGZvcm1TdXJm
YWNlLT5lZ2xDb250ZXh0KCksIDApOwotICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLQotICAg
IEFTU0VSVCghbV9jb250ZXh0cy5jb250YWlucyhzdXJmYWNlQ29uZmlnSWQpKTsKLSAgICBtX2Nv
bnRleHRzLnNldChzdXJmYWNlQ29uZmlnSWQsIGNvbnRleHQpOwotICAgIHJldHVybiBjb250ZXh0
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvRUdMRGlzcGxheU9wZW5WRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGRmZjZjOTM4NzczZWQ5MjcwZjIzNjE2NjBkMmE5NGRmNjc3NGUzZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxheU9wZW5WRy5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEVHTERpc3BsYXlPcGVu
VkdfaAotI2RlZmluZSBFR0xEaXNwbGF5T3BlblZHX2gKLQotI2luY2x1ZGUgPGVnbC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50
U2l6ZTsKLWNsYXNzIFN1cmZhY2VPcGVuVkc7Ci0KLWNsYXNzIEVHTERpc3BsYXlPcGVuVkcgewot
cHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBTdXJmYWNlT3BlblZHOwotCi0gICAgc3RhdGljIFN1
cmZhY2VPcGVuVkcqIGN1cnJlbnRTdXJmYWNlKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q3VycmVu
dERpc3BsYXkoY29uc3QgRUdMRGlzcGxheSYpOwotICAgIHN0YXRpYyBFR0xEaXNwbGF5T3BlblZH
KiBjdXJyZW50KCk7Ci0gICAgc3RhdGljIEVHTERpc3BsYXlPcGVuVkcqIGZvckRpc3BsYXkoY29u
c3QgRUdMRGlzcGxheSYpOwotCi0gICAgdm9pZCBzZXREZWZhdWx0UGJ1ZmZlckNvbmZpZyhjb25z
dCBFR0xDb25maWcmKTsKLSAgICBFR0xDb25maWcgZGVmYXVsdFBidWZmZXJDb25maWcoKTsKLSAg
ICB2b2lkIHNldERlZmF1bHRXaW5kb3dDb25maWcoY29uc3QgRUdMQ29uZmlnJik7Ci0gICAgRUdM
Q29uZmlnIGRlZmF1bHRXaW5kb3dDb25maWcoKTsKLQotICAgIEVHTERpc3BsYXkgZGlzcGxheSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheTsgfQotICAgIFN1cmZhY2VPcGVuVkcqIHNoYXJlZFBs
YXRmb3JtU3VyZmFjZSgpOwotCi0gICAgLyoqIENyZWF0ZXMgYSBwYnVmZmVyIHN1cmZhY2UgdXNp
bmcgdGhlIGdpdmVuIGNvbmZpZy4gSWYgbm8gc3VyZmFjZQotICAgICAqIGNvdWxkIGJlIGNyZWF0
ZWQsIEVHTF9OT19TVVJGQUNFIGlzIHJldHVybmVkIGFuZCBlcnJvcnMgY2FuIGJlCi0gICAgICog
Y2hlY2tlZCB3aXRoIHRoZSB2YWx1ZSB0aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIGVycm9yQ29kZSBw
YXJhbWV0ZXIKLSAgICAgKiBJZiBubyBzdXJmYWNlIGNvdWxkIGJlIGNyZWF0ZWQgYW5kIGVycm9y
Q29kZSBpcyB6ZXJvLCB0aGlzIG1ldGhvZAotICAgICAqIHdpbGwgdHJpZ2dlciBhbiBhc3NlcnRp
b24gYnkgaXRzZWxmLiAqLwotICAgIEVHTFN1cmZhY2UgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEVHTENvbmZpZyYsIEVHTGludCogZXJyb3JDb2RlID0gMCk7Ci0g
ICAgRUdMU3VyZmFjZSBjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihFR0xDbGllbnRCdWZm
ZXIsIEVHTGVudW0gYnVmZmVyVHlwZSwgY29uc3QgRUdMQ29uZmlnJiwgRUdMaW50KiBlcnJvckNv
ZGUgPSAwKTsKLQotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZUZvcldpbmRvdyhFR0xOYXRpdmVXaW5k
b3dUeXBlLCBjb25zdCBFR0xDb25maWcmKTsKLQotICAgIGJvb2wgc3VyZmFjZXNDb21wYXRpYmxl
KGNvbnN0IEVHTFN1cmZhY2UmLCBjb25zdCBFR0xTdXJmYWNlJik7Ci0KLSAgICAvKiogRGVzdHJv
eSB0aGUgc3VyZmFjZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgY29udGV4dCAodW5sZXNzIGFub3Ro
ZXIKLSAgICAgKiBzdXJmYWNlIGlzIHN0aWxsIHVzaW5nIHRoZSBzYW1lIGNvbnRleHQsIGluIHdo
aWNoIGNhc2UgdGhlIGNvbnRleHQKLSAgICAgKiBpcyBub3QgZGVzdHJveWVkKS4gKi8KLSAgICB2
b2lkIGRlc3Ryb3lTdXJmYWNlKGNvbnN0IEVHTFN1cmZhY2UmKTsKLQotICAgIC8qKiBSZXR1cm4g
dGhlIGNvbnRleHQgY29ycmVzcG9uZGluZyB0byB0aGUgc3VyZmFjZS4KLSAgICAgKiBJZiBubyBj
b3JyZXNwb25kaW5nIGNvbnRleHQgZXhpc3RzLCBvbmUgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5
LiAqLwotICAgIEVHTENvbnRleHQgY29udGV4dEZvclN1cmZhY2UoY29uc3QgRUdMU3VyZmFjZSYp
OwotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUGxhdGZvcm1TdXJmYWNlKFN1
cmZhY2VPcGVuVkcqKTsKLSAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyUGxhdGZvcm1TdXJmYWNl
KFN1cmZhY2VPcGVuVkcqKTsKLQotICAgIEVHTERpc3BsYXlPcGVuVkcoY29uc3QgRUdMRGlzcGxh
eSYgZGlzcGxheSk7Ci0gICAgfkVHTERpc3BsYXlPcGVuVkcoKTsKLQotICAgIEVHTERpc3BsYXkg
bV9kaXNwbGF5OwotICAgIFN1cmZhY2VPcGVuVkcqIG1fc2hhcmVkUGxhdGZvcm1TdXJmYWNlOwot
ICAgIEVHTGludCBtX3BidWZmZXJDb25maWdJZDsKLSAgICBFR0xpbnQgbV93aW5kb3dDb25maWdJ
ZDsKLQotICAgIEhhc2hNYXA8RUdMU3VyZmFjZSwgU3VyZmFjZU9wZW5WRyo+IG1fcGxhdGZvcm1T
dXJmYWNlczsKLSAgICBIYXNoTWFwPEVHTE5hdGl2ZVdpbmRvd1R5cGUsIEVHTFN1cmZhY2U+IG1f
d2luZG93U3VyZmFjZXM7Ci0gICAgSGFzaE1hcDxFR0xTdXJmYWNlLCBFR0xpbnQ+IG1fc3VyZmFj
ZUNvbmZpZ0lkczsKLSAgICBIYXNoTWFwPEVHTGludCwgRUdMaW50PiBtX2NvbXBhdGlibGVDb25m
aWdJZHM7Ci0gICAgSGFzaE1hcDxFR0xpbnQsIEVHTENvbnRleHQ+IG1fY29udGV4dHM7Ci19Owot
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL0VHTFV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvRUdMVXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1ZDc5M2Mw
ZDFmNjNjY2RkNDU0ZjViNjA4MDY2Mjk4NGJkODBlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvRUdMVXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBFR0xVdGlsc19oCi0jZGVmaW5lIEVHTFV0aWxzX2gKLQot
I2luY2x1ZGUgPGVnbC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXN0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogdG9FR0xFcnJvckNvbnN0YW50KEVHTGludCBlcnJvcikKLXsKLSAg
ICBzd2l0Y2ggKGVycm9yKSB7Ci0gICAgY2FzZSBFR0xfTk9UX0lOSVRJQUxJWkVEOgotICAgICAg
ICByZXR1cm4gIkVHTF9OT1RfSU5JVElBTElaRUQiOwotICAgIGNhc2UgRUdMX0JBRF9BQ0NFU1M6
Ci0gICAgICAgIHJldHVybiAiRUdMX0JBRF9BQ0NFU1MiOwotICAgIGNhc2UgRUdMX0JBRF9BTExP
QzoKLSAgICAgICAgcmV0dXJuICJFR0xfQkFEX0FMTE9DIjsKLSAgICBjYXNlIEVHTF9CQURfQVRU
UklCVVRFOgotICAgICAgICByZXR1cm4gIkVHTF9CQURfQVRUUklCVVRFIjsKLSAgICBjYXNlIEVH
TF9CQURfQ09OVEVYVDoKLSAgICAgICAgcmV0dXJuICJFR0xfQkFEX0NPTlRFWFQiOwotICAgIGNh
c2UgRUdMX0JBRF9DT05GSUc6Ci0gICAgICAgIHJldHVybiAiRUdMX0JBRF9DT05GSUciOwotICAg
IGNhc2UgRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0U6Ci0gICAgICAgIHJldHVybiAiRUdMX0JBRF9D
VVJSRU5UX1NVUkZBQ0UiOwotICAgIGNhc2UgRUdMX0JBRF9ESVNQTEFZOgotICAgICAgICByZXR1
cm4gIkVHTF9CQURfRElTUExBWSI7Ci0gICAgY2FzZSBFR0xfQkFEX1NVUkZBQ0U6Ci0gICAgICAg
IHJldHVybiAiRUdMX0JBRF9TVVJGQUNFIjsKLSAgICBjYXNlIEVHTF9CQURfTUFUQ0g6Ci0gICAg
ICAgIHJldHVybiAiRUdMX0JBRF9NQVRDSCI7Ci0gICAgY2FzZSBFR0xfQkFEX1BBUkFNRVRFUjoK
LSAgICAgICAgcmV0dXJuICJFR0xfQkFEX1BBUkFNRVRFUiI7Ci0gICAgY2FzZSBFR0xfQkFEX05B
VElWRV9QSVhNQVA6Ci0gICAgICAgIHJldHVybiAiRUdMX0JBRF9OQVRJVkVfUElYTUFQIjsKLSAg
ICBjYXNlIEVHTF9CQURfTkFUSVZFX1dJTkRPVzoKLSAgICAgICAgcmV0dXJuICJFR0xfQkFEX05B
VElWRV9XSU5ET1ciOwotICAgIGNhc2UgRUdMX0NPTlRFWFRfTE9TVDoKLSAgICAgICAgcmV0dXJu
ICJFR0xfQ09OVEVYVF9MT1NUIjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIlVOS05P
V05fRVJST1IiOwotICAgIH0KLX0KLQotI2lmIEFTU0VSVF9ESVNBQkxFRAotI2RlZmluZSBBU1NF
UlRfRUdMX05PX0VSUk9SKCkgKCh2b2lkKTApCi0jZWxzZQotI2RlZmluZSBBU1NFUlRfRUdMX05P
X0VSUk9SKCkgZG8geyBcCi0gICAgRUdMaW50IGVnbEVycm9yQ29kZSA9IGVnbEdldEVycm9yKCk7
IFwKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGVnbEVycm9yQ29kZSA9PSBFR0xfU1VDQ0VTUywg
IkZvdW5kICVzIiwgdG9FR0xFcnJvckNvbnN0YW50KGVnbEVycm9yQ29kZSkpOyBcCi19IHdoaWxl
ICgwKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JhYjI3Zjc1Yjk2MWNhZTRlMTlkNWVmN2I1
NWRhMTE2MTU3ODFlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250
ZXh0T3BlblZHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIktVUkwuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhaW50ZXJPcGVuVkcuaCIK
LSNpbmNsdWRlICJTdXJmYWNlT3BlblZHLmgiCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oRUdMKQotI2luY2x1
ZGUgIkVHTERpc3BsYXlPcGVuVkcuaCIKLSNpbmNsdWRlICJFR0xVdGlscy5oIgotI2luY2x1ZGUg
PGVnbC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gdHlwZWRlZidpbmcg
ZG9lc24ndCB3b3JrLCBsZXQncyBpbmhlcml0IGZyb20gUGFpbnRlck9wZW5WRyBpbnN0ZWFkCi1j
bGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgOiBwdWJsaWMgUGFpbnRlck9wZW5W
RyB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFN1cmZhY2VP
cGVuVkcqIHN1cmZhY2UpCi0gICAgICAgIDogUGFpbnRlck9wZW5WRyhzdXJmYWNlKQotICAgIHsK
LSAgICB9Ci19OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFN1cmZhY2VP
cGVuVkcqIHN1cmZhY2UpCi17Ci0gICAgbV9kYXRhID0gc3VyZmFjZSA/IG5ldyBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUoc3VyZmFjZSkgOiAwOwotICAgIHNldFBhaW50aW5nRGlzYWJs
ZWQoIXN1cmZhY2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95
KCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+
YmFzZVN1cmZhY2UoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICByZXR1cm4gbV9k
YXRhLT50cmFuc2Zvcm1hdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBs
YXRmb3JtU3RhdGUoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YS0+c2F2ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+cmVzdG9yZSgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIXJlY3QuaXNF
bXB0eSgpKTsKLQotICAgIG1fZGF0YS0+ZHJhd1JlY3QocmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgZnJvbSwgY29uc3QgSW50UG9pbnQm
IHRvKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZGF0YS0+ZHJhd0xpbmUoZnJvbSwgdG8pOwotfQotCi0vKioKLSAqIERyYXcgdGhlIGxh
cmdlc3QgZWxsaXBzZSB0aGF0IGZpdHMgaW50byB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgotICovCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEtPmRyYXdFbGxpcHNlKHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
QXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGF0YS0+ZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIFZHX1NUUk9LRV9QQVRI
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9kYXRhLT5kcmF3UG9seWdvbihudW1Qb2ludHMsIHBvaW50cyk7Ci0KLSAgICBVTlVTRURfUEFS
QU0oc2hvdWxkQW50aWFsaWFzKTsgLy8gRklYTUUKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5kcmF3UGF0aChwYXRoLCBWR19GSUxM
X1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfU1RST0tF
X1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+ZHJhd1JlY3QocmVjdCwgVkdfRklM
TF9QQVRIKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29s
b3Igb2xkQ29sb3IgPSBtX2RhdGEtPmZpbGxDb2xvcigpOwotICAgIG1fZGF0YS0+c2V0RmlsbENv
bG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPmRyYXdSZWN0KHJlY3QsIFZHX0ZJTExfUEFUSCk7Ci0g
ICAgbV9kYXRhLT5zZXRGaWxsQ29sb3Iob2xkQ29sb3IpOwotCi0gICAgVU5VU0VEX1BBUkFNKGNv
bG9yU3BhY2UpOyAvLyBGSVhNRQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0
IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRT
aXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPmZpbGxDb2xvcigpOwotICAgIG1fZGF0YS0+c2V0
RmlsbENvbG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPmRyYXdSb3VuZGVkUmVjdChyZWN0LCB0b3BM
ZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIFZHX0ZJTExfUEFUSCk7Ci0g
ICAgbV9kYXRhLT5zZXRGaWxsQ29sb3Iob2xkQ29sb3IpOwotCi0gICAgVU5VU0VEX1BBUkFNKGNv
bG9yU3BhY2UpOyAvLyBGSVhNRQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5pbnRlcnNlY3RDbGlwUmVjdChyZWN0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IGNsaXBSdWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0
Q2xpcCwgY2xpcFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBGSVhNRTogV2UganVzdCB1bml0ZSBhbGwgZm9jdXMgcmluZyByZWN0cyBpbnRvIG9u
ZSBmb3Igbm93LgotICAgIC8vIFdlIHNob3VsZCBvdXRsaW5lIHRoZSBlZGdlIG9mIHRoZSBmdWxs
IHJlZ2lvbi4KLSAgICBvZmZzZXQgKz0gKHdpZHRoIC0gMSkgLyAyOwotICAgIEludFJlY3QgZmlu
YWxGb2N1c1JlY3Q7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QgPSByZWN0c1tpXTsKLSAgICAgICAg
Zm9jdXNSZWN0LmluZmxhdGUob2Zmc2V0KTsKLSAgICAgICAgZmluYWxGb2N1c1JlY3QudW5pdGUo
Zm9jdXNSZWN0KTsKLSAgICB9Ci0KLSAgICBTdHJva2VTdHlsZSBvbGRTdHlsZSA9IG1fZGF0YS0+
c3Ryb2tlU3R5bGUoKTsKLSAgICBDb2xvciBvbGRTdHJva2VDb2xvciA9IG1fZGF0YS0+c3Ryb2tl
Q29sb3IoKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7Ci0gICAg
bV9kYXRhLT5zZXRTdHJva2VDb2xvcihjb2xvcik7Ci0gICAgc3Ryb2tlUmVjdChGbG9hdFJlY3Qo
ZmluYWxGb2N1c1JlY3QpLCAxLmYpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlU3R5bGUob2xkU3R5
bGUpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiBvcmln
aW4sIGludCB3aWR0aCwgYm9vbCBwcmludGluZykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAod2lkdGggPD0gMCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgU3Ryb2tlU3R5bGUgb2xkU3R5bGUgPSBtX2RhdGEtPnN0cm9rZVN0eWxlKCk7
Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgZHJhd0xpbmUo
b3JpZ2luLCBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7Ci0gICAgbV9kYXRhLT5zZXRTdHJv
a2VTdHlsZShvbGRTdHlsZSk7Ci0KLSAgICBVTlVTRURfUEFSQU0ocHJpbnRpbmcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBJbnRQ
b2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7Ci0gICAgVU5VU0VEX1BB
UkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIHJldHVybiBGbG9hdFJlY3QoZW5jbG9zaW5nSW50UmVj
dChtX2RhdGEtPnRyYW5zZm9ybWF0aW9uKCkubWFwUmVjdChyZWN0KSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICBVTlVTRURfUEFSQU0o
Ymx1cik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsKLSAgICBVTlVTRURfUEFSQU0oY29sb3JT
cGFjZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBV
TlVTRURfUEFSQU0ob3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgPSBtX2RhdGEtPmNvbXBvc2l0ZU9wZXJhdGlv
bigpOwotICAgIG1fZGF0YS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNsZWFyKTsK
LSAgICBtX2RhdGEtPmRyYXdSZWN0KHJlY3QsIFZHX0ZJTExfUEFUSCk7Ci0gICAgbV9kYXRhLT5z
ZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBvbGRU
aGlja25lc3MgPSBtX2RhdGEtPnN0cm9rZVRoaWNrbmVzcygpOwotICAgIG1fZGF0YS0+c2V0U3Ry
b2tlVGhpY2tuZXNzKGxpbmVXaWR0aCk7Ci0gICAgbV9kYXRhLT5kcmF3UmVjdChyZWN0LCBWR19T
VFJPS0VfUEFUSCk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlja25lc3Mob2xkVGhpY2tuZXNz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEtPnNldExpbmVDYXAobGMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5zZXRM
aW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5zZXRMaW5lSm9pbihsaik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+c2V0
TWl0ZXJMaW1pdChsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShm
bG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZGF0YS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLX0KLQotLy8gRklYTUU6
IGRvbid0IGlnbm9yZSB0aGUgd2luZGluZyBydWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA3MDY0Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6
OkludGVyc2VjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsK
LSAgICBjbGlwKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVu
Vkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9ycykKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPnNjYWxl
KHNjYWxlRmFjdG9ycyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQg
cmFkaWFucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2RhdGEtPnJvdGF0ZShyYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnRyYW5zbGF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT50cmFuc2xhdGUoZHgsIGR5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+Y2xpcFBh
dGgocGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotICAgIFVOVVNFRF9QQVJBTShpbWFnZUJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmNvbmNhdFRyYW5zZm9ybWF0aW9uKHRyYW5z
Zm9ybWF0aW9uKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+c2V0VHJhbnNmb3JtYXRpb24odHJh
bnNmb3JtYXRpb24pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIFVOVVNFRF9QQVJBTShsaW5rKTsKLSAgICBVTlVTRURfUEFSQU0oZGVz
dFJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xv
cihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPnNldFN0
cm9rZUNvbG9yKGNvbG9yKTsKLQotICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsgLy8gRklY
TUUKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5zZXRTdHJva2VTdHlsZShzdHJva2VTdHlsZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhm
bG9hdCB0aGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+c2V0RmlsbENvbG9yKGNvbG9y
KTsKLQotICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsgLy8gRklYTUUKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGF0YS0+c2V0QW50aWFsaWFzaW5nRW5hYmxlZChlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JbnRlcnBvbGF0aW9uUXVhbGl0eSBH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludGVycG9sYXRpb25EZWZhdWx0OwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
SW1hZ2VPcGVuVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L0ltYWdlT3BlblZHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxMDg4MmNj
ODU0NDA2NTRhOWRlMGJhMThkZDdmNGExOWYyMGYwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvSW1hZ2VPcGVuVkcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdl
LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJQYWludGVyT3BlblZHLmgiCi0jaW5jbHVkZSAiU3VyZmFjZU9wZW5WRy5oIgotI2luY2x1
ZGUgIlRpbGVkSW1hZ2VPcGVuVkcuaCIKLSNpbmNsdWRlICJWR1V0aWxzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgRnJhbWVE
YXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEp
Ci0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBpZiAobV9mcmFtZSkgewot
ICAgICAgICBkZWxldGUgbV9mcmFtZTsKLSAgICAgICAgbV9mcmFtZSA9IDA7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlLCBJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKLSAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9zaXplKHRpbGVkSW1hZ2Ut
PnNpemUoKSkKLSAgICAsIG1fY3VycmVudEZyYW1lKDApCi0gICAgLCBtX2ZyYW1lcygxKQotICAg
ICwgbV9mcmFtZVRpbWVyKDApCi0gICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9u
ZSkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCi0gICAgLCBtX3JlcGV0
aXRpb25zQ29tcGxldGUoMCkKLSAgICAsIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKDApCi0gICAg
LCBtX2ZyYW1lQ291bnQoMSkKLSAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQotICAgICwgbV9j
aGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWQoZmFs
c2UpCi0gICAgLCBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKLSAgICAsIG1faGF2ZVNpemUodHJ1
ZSkKLSAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQotICAgICwgbV9oYXNVbmlmb3JtRnJhbWVT
aXplKHRydWUpCi0gICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCi17Ci0gICAgQVNTRVJUKG1f
c2l6ZS53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKG1fc2l6ZS5oZWlnaHQoKSA+IDApOwotCi0g
ICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsK
LQotICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSB0aWxlZEltYWdlOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faXNDb21wbGV0ZSA9IHRydWU7
Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIGNoZWNrRm9yU29s
aWRDb2xvcigpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQot
ewotICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSAwOwotCi0gICAgaWYgKG1fZnJh
bWVDb3VudCA9PSAxICYmIG1fc2l6ZS53aWR0aCgpID09IDEgJiYgbV9zaXplLmhlaWdodCgpID09
IDEpCi0gICAgICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwot
Ci0gICAgaWYgKHRpbGVkSW1hZ2UpIHsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwot
ICAgICAgICBSR0JBMzIgcGl4ZWw7Ci0gICAgICAgIHZnR2V0SW1hZ2VTdWJEYXRhKHRpbGVkSW1h
Z2UtPnRpbGUoMCwgMCksICZwaXhlbCwgMCwgVkdfc0FSR0JfODg4OCwgMCwgMCwgMSwgMSk7Ci0g
ICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotICAgICAgICBtX3NvbGlkQ29sb3Iuc2V0UkdC
KHBpeGVsKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKLQot
ICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotfQotCi12b2lkIEJpdG1hcEltYWdl
OjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKLXsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQotewotICAgIGlmIChkc3QuaXNFbXB0eSgpIHx8IHNyYy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
dGFydEFuaW1hdGlvbigpOwotCi0gICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0g
ICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgc3R5
bGVDb2xvclNwYWNlLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0
LT5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KLSAgICBp
ZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9j
dXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlQ29weSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3ApOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAg
ICBGbG9hdFJlY3Qgc3JjUmVjdExvY2FsID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGlu
ZyhzcmMsIGltYWdlLT5zaXplKCkpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdExvY2Fs
KHNyYyk7Ci0jZW5kaWYKLQotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5hY3RpdmVQ
YWludGVyKCktPmRyYXdJbWFnZShpbWFnZSwgZHN0LCBzcmNSZWN0TG9jYWwpOwotICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdl
T2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybWF0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0KQotewotICAgIGlmIChkc3QuaXNF
bXB0eSgpIHx8IHNyYy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5hdGl2ZUlt
YWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgaWYg
KG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
b250ZXh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgaWYgKGltYWdl
T2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQot
Ci1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY2hhciBjb25z
dCogbmFtZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFp
bnRlck9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
UGFpbnRlck9wZW5WRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyM2EyZmNi
ZmFjZGExNzA3YmIwMjZmZDgxZjkzYmViZTI3NDk5N2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnZnL1BhaW50ZXJPcGVuVkcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI0MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
YWludGVyT3BlblZHLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1QYXRoT3BlblZHLmgiCi0jaW5jbHVkZSAiU3Vy
ZmFjZU9wZW5WRy5oIgotI2luY2x1ZGUgIlRpbGVkSW1hZ2VPcGVuVkcuaCIKLSNpbmNsdWRlICJW
R1V0aWxzLmgiCi0KLSNpZiBQTEFURk9STShFR0wpCi0jaW5jbHVkZSAiRUdMVXRpbHMuaCIKLSNl
bmRpZgotCi0jaW5jbHVkZSA8dmd1Lmg+Ci0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGJvb2wgaXNOb25Sb3RhdGVkQWZmaW5lVHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0KQotewotICAgIHJldHVybiB0LmIoKSA8PSBGTFRfRVBTSUxPTiAmJiB0LmMoKSA8
PSBGTFRfRVBTSUxPTjsKLX0KLQotc3RhdGljIFZHQ2FwU3R5bGUgdG9WR0NhcFN0eWxlKExpbmVD
YXAgbGluZUNhcCkKLXsKLSAgICBzd2l0Y2ggKGxpbmVDYXApIHsKLSAgICBjYXNlIFJvdW5kQ2Fw
OgotICAgICAgICByZXR1cm4gVkdfQ0FQX1JPVU5EOwotICAgIGNhc2UgU3F1YXJlQ2FwOgotICAg
ICAgICByZXR1cm4gVkdfQ0FQX1NRVUFSRTsKLSAgICBjYXNlIEJ1dHRDYXA6Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIFZHX0NBUF9CVVRUOwotICAgIH0KLX0KLQotc3RhdGljIFZHSm9p
blN0eWxlIHRvVkdKb2luU3R5bGUoTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc3dpdGNoIChs
aW5lSm9pbikgewotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICByZXR1cm4gVkdfSk9JTl9S
T1VORDsKLSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgcmV0dXJuIFZHX0pPSU5fQkVWRUw7
Ci0gICAgY2FzZSBNaXRlckpvaW46Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFZHX0pP
SU5fTUlURVI7Ci0gICAgfQotfQotCi1zdGF0aWMgVkdGaWxsUnVsZSB0b1ZHRmlsbFJ1bGUoV2lu
ZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgcmV0dXJuIGZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCA/
IFZHX0VWRU5fT0REIDogVkdfTk9OX1pFUk87Ci19Ci0KLXN0YXRpYyBWR3VpbnQgY29sb3JUb1ZH
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFZHdWludCB2Z0NvbG9yID0gY29sb3Iu
cmVkKCk7Ci0gICAgdmdDb2xvciA9ICh2Z0NvbG9yIDw8IDgpIHwgY29sb3IuZ3JlZW4oKTsKLSAg
ICB2Z0NvbG9yID0gKHZnQ29sb3IgPDwgOCkgfCBjb2xvci5ibHVlKCk7Ci0gICAgdmdDb2xvciA9
ICh2Z0NvbG9yIDw8IDgpIHwgY29sb3IuYWxwaGEoKTsKLSAgICByZXR1cm4gdmdDb2xvcjsKLX0K
LQotc3RhdGljIHZvaWQgc2V0VkdTb2xpZENvbG9yKFZHUGFpbnRNb2RlIHBhaW50TW9kZSwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIFZHUGFpbnQgcGFpbnQgPSB2Z0NyZWF0ZVBhaW50KCk7
Ci0gICAgdmdTZXRQYXJhbWV0ZXJpKHBhaW50LCBWR19QQUlOVF9UWVBFLCBWR19QQUlOVF9UWVBF
X0NPTE9SKTsKLSAgICB2Z1NldENvbG9yKHBhaW50LCBjb2xvclRvVkdDb2xvcihjb2xvcikpOwot
ICAgIHZnU2V0UGFpbnQocGFpbnQsIHBhaW50TW9kZSk7Ci0gICAgdmdEZXN0cm95UGFpbnQocGFp
bnQpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotfQotCi0KLXN0cnVjdCBQbGF0Zm9ybVBh
aW50ZXJTdGF0ZSB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHN1cmZhY2VUcmFuc2Zvcm1hdGlvbjsK
LSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb247Ci0gICAgZmxvYXQgb3Bh
Y2l0eTsKLQotICAgIGJvb2wgc2Npc3NvcmluZ0VuYWJsZWQ7Ci0gICAgRmxvYXRSZWN0IHNjaXNz
b3JSZWN0OwotI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQotICAgIGJvb2wgbWFza2luZ0NoYW5n
ZWRBbmRFbmFibGVkOwotICAgIFZHTWFza0xheWVyIG1hc2s7Ci0jZW5kaWYKLQotICAgIENvbG9y
IGZpbGxDb2xvcjsKLSAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICBDb2xvciBzdHJv
a2VDb2xvcjsKLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7Ci0gICAgTGluZUNhcCBzdHJva2VM
aW5lQ2FwOwotICAgIExpbmVKb2luIHN0cm9rZUxpbmVKb2luOwotICAgIGZsb2F0IHN0cm9rZU1p
dGVyTGltaXQ7Ci0gICAgRGFzaEFycmF5IHN0cm9rZURhc2hBcnJheTsKLSAgICBmbG9hdCBzdHJv
a2VEYXNoT2Zmc2V0OwotCi0gICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2Rl
OwotICAgIGJvb2wgYW50aWFsaWFzaW5nRW5hYmxlZDsKLQotICAgIFBsYXRmb3JtUGFpbnRlclN0
YXRlKCkKLSAgICAgICAgOiBjb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3ZlcikK
LSAgICAgICAgLCBvcGFjaXR5KDEuMCkKLSAgICAgICAgLCBzY2lzc29yaW5nRW5hYmxlZChmYWxz
ZSkKLSNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLSAgICAgICAgLCBtYXNraW5nQ2hhbmdlZEFu
ZEVuYWJsZWQoZmFsc2UpCi0gICAgICAgICwgbWFzayhWR19JTlZBTElEX0hBTkRMRSkKLSNlbmRp
ZgotICAgICAgICAsIGZpbGxDb2xvcihDb2xvcjo6YmxhY2spCi0gICAgICAgICwgc3Ryb2tlU3R5
bGUoTm9TdHJva2UpCi0gICAgICAgICwgc3Ryb2tlVGhpY2tuZXNzKDAuMCkKLSAgICAgICAgLCBz
dHJva2VMaW5lQ2FwKEJ1dHRDYXApCi0gICAgICAgICwgc3Ryb2tlTGluZUpvaW4oTWl0ZXJKb2lu
KQotICAgICAgICAsIHN0cm9rZU1pdGVyTGltaXQoNC4wKQotICAgICAgICAsIHN0cm9rZURhc2hP
ZmZzZXQoMC4wKQotICAgICAgICAsIHRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpCi0gICAg
ICAgICwgYW50aWFsaWFzaW5nRW5hYmxlZCh0cnVlKQotICAgIHsKLSAgICB9Ci0KLSAgICB+UGxh
dGZvcm1QYWludGVyU3RhdGUoKQotICAgIHsKLSNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLSAg
ICAgICAgaWYgKG1hc2tpbmdDaGFuZ2VkQW5kRW5hYmxlZCAmJiBtYXNrICE9IFZHX0lOVkFMSURf
SEFORExFKSB7Ci0gICAgICAgICAgICB2Z0Rlc3Ryb3lNYXNrTGF5ZXIobWFzayk7Ci0gICAgICAg
ICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICAgICAgICAgIG1hc2sgPSBWR19JTlZBTElE
X0hBTkRMRTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAgUGxhdGZvcm1QYWludGVy
U3RhdGUoY29uc3QgUGxhdGZvcm1QYWludGVyU3RhdGUmIHN0YXRlKQotICAgIHsKLSAgICAgICAg
c3VyZmFjZVRyYW5zZm9ybWF0aW9uID0gc3RhdGUuc3VyZmFjZVRyYW5zZm9ybWF0aW9uOwotCi0g
ICAgICAgIHNjaXNzb3JpbmdFbmFibGVkID0gc3RhdGUuc2Npc3NvcmluZ0VuYWJsZWQ7Ci0gICAg
ICAgIHNjaXNzb3JSZWN0ID0gc3RhdGUuc2Npc3NvclJlY3Q7Ci0jaWZkZWYgT1BFTlZHX1ZFUlNJ
T05fMV8xCi0gICAgICAgIG1hc2tpbmdDaGFuZ2VkQW5kRW5hYmxlZCA9IGZhbHNlOwotICAgICAg
ICBtYXNrID0gc3RhdGUubWFzazsKLSNlbmRpZgotICAgICAgICBjb3B5UGFpbnRTdGF0ZSgmc3Rh
dGUpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIG1hc2tpbmdFbmFibGVkKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtYXNraW5nQ2hhbmdlZEFuZEVuYWJsZWQgfHwgbWFzayAhPSBWR19JTlZB
TElEX0hBTkRMRTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlQYWludFN0YXRlKGNvbnN0IFBsYXRm
b3JtUGFpbnRlclN0YXRlKiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGNvbXBvc2l0ZU9wZXJhdGlv
biA9IG90aGVyLT5jb21wb3NpdGVPcGVyYXRpb247Ci0gICAgICAgIG9wYWNpdHkgPSBvdGhlci0+
b3BhY2l0eTsKLQotICAgICAgICBmaWxsQ29sb3IgPSBvdGhlci0+ZmlsbENvbG9yOwotICAgICAg
ICBzdHJva2VTdHlsZSA9IG90aGVyLT5zdHJva2VTdHlsZTsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBvdGhlci0+c3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IG90aGVyLT5z
dHJva2VUaGlja25lc3M7Ci0gICAgICAgIHN0cm9rZUxpbmVDYXAgPSBvdGhlci0+c3Ryb2tlTGlu
ZUNhcDsKLSAgICAgICAgc3Ryb2tlTGluZUpvaW4gPSBvdGhlci0+c3Ryb2tlTGluZUpvaW47Ci0g
ICAgICAgIHN0cm9rZU1pdGVyTGltaXQgPSBvdGhlci0+c3Ryb2tlTWl0ZXJMaW1pdDsKLSAgICAg
ICAgc3Ryb2tlRGFzaEFycmF5ID0gb3RoZXItPnN0cm9rZURhc2hBcnJheTsKLSAgICAgICAgc3Ry
b2tlRGFzaE9mZnNldCA9IG90aGVyLT5zdHJva2VEYXNoT2Zmc2V0OwotCi0gICAgICAgIHRleHRE
cmF3aW5nTW9kZSA9IG90aGVyLT50ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGFudGlhbGlhc2lu
Z0VuYWJsZWQgPSBvdGhlci0+YW50aWFsaWFzaW5nRW5hYmxlZDsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGx5U3RhdGUoUGFpbnRlck9wZW5WRyogcGFpbnRlcikKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChwYWludGVyKTsKLQotICAgICAgICBzZXRWR1NvbGlkQ29sb3IoVkdfRklMTF9QQVRILCBmaWxs
Q29sb3IpOwotICAgICAgICBzZXRWR1NvbGlkQ29sb3IoVkdfU1RST0tFX1BBVEgsIHN0cm9rZUNv
bG9yKTsKLQotICAgICAgICB2Z1NldGYoVkdfU1RST0tFX0xJTkVfV0lEVEgsIHN0cm9rZVRoaWNr
bmVzcyk7Ci0gICAgICAgIHZnU2V0aShWR19TVFJPS0VfQ0FQX1NUWUxFLCB0b1ZHQ2FwU3R5bGUo
c3Ryb2tlTGluZUNhcCkpOwotICAgICAgICB2Z1NldGkoVkdfU1RST0tFX0pPSU5fU1RZTEUsIHRv
VkdKb2luU3R5bGUoc3Ryb2tlTGluZUpvaW4pKTsKLSAgICAgICAgdmdTZXRmKFZHX1NUUk9LRV9N
SVRFUl9MSU1JVCwgc3Ryb2tlTWl0ZXJMaW1pdCk7Ci0KLSAgICAgICAgaWYgKGFudGlhbGlhc2lu
Z0VuYWJsZWQpCi0gICAgICAgICAgICB2Z1NldGkoVkdfUkVOREVSSU5HX1FVQUxJVFksIFZHX1JF
TkRFUklOR19RVUFMSVRZX0ZBU1RFUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZnU2V0
aShWR19SRU5ERVJJTkdfUVVBTElUWSwgVkdfUkVOREVSSU5HX1FVQUxJVFlfTk9OQU5USUFMSUFT
RUQpOwotCi0gICAgICAgIGFwcGx5QmxlbmRpbmcocGFpbnRlcik7Ci0gICAgICAgIGFwcGx5U3Ry
b2tlU3R5bGUoKTsKLQotICAgICAgICBhcHBseVRyYW5zZm9ybWF0aW9uKHBhaW50ZXIpOwotICAg
ICAgICBhcHBseVNjaXNzb3JSZWN0KCk7Ci0KLSNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLSAg
ICAgICAgaWYgKG1hc2tpbmdFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHZnU2V0aShWR19NQVNL
SU5HLCBWR19UUlVFKTsKLSAgICAgICAgICAgIGlmIChtYXNrICE9IFZHX0lOVkFMSURfSEFORExF
KQotICAgICAgICAgICAgICAgIHZnTWFzayhtYXNrLCBWR19TRVRfTUFTSywgMCwgMCwgcGFpbnRl
ci0+c3VyZmFjZSgpLT53aWR0aCgpLCBwYWludGVyLT5zdXJmYWNlKCktPmhlaWdodCgpKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2Z1NldGkoVkdfTUFTS0lORywgVkdfRkFMU0UpOwot
I2VuZGlmCi0gICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotICAgIH0KLQotICAgIHZvaWQg
YXBwbHlCbGVuZGluZyhQYWludGVyT3BlblZHKiBwYWludGVyKQotICAgIHsKLSAgICAgICAgVkdC
bGVuZE1vZGUgYmxlbmRNb2RlID0gVkdfQkxFTkRfU1JDX09WRVI7Ci0KLSAgICAgICAgc3dpdGNo
IChjb21wb3NpdGVPcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVDbGVhcjogewot
ICAgICAgICAgICAgLy8gQ2xlYXIgbWVhbnMgInNldCB0byBmdWxseSB0cmFuc3BhcmVudCByZWdh
cmRsZXNzIG9mIFNSQyIuCi0gICAgICAgICAgICAvLyBXZSBpbXBsZW1lbnQgdGhhdCBieSBtdWx0
aXBseWluZyBEU1Qgd2l0aCB3aGl0ZSBjb2xvcgotICAgICAgICAgICAgLy8gKD0gbm8gY2hhbmdl
cykgYW5kIGFuIGFscGhhIG9mIDEuMCAtIG9wYWNpdHksIHNvIHRoZSBkZXN0aW5hdGlvbgotICAg
ICAgICAgICAgLy8gcGl4ZWxzIHdpbGwgYmUgZnVsbHkgdHJhbnNwYXJlbnQgd2hlbiBvcGFjaXR5
ID09IDEuMCBhbmQKLSAgICAgICAgICAgIC8vIHVuY2hhbmdlZCB3aGVuIG9wYWNpdHkgPT0gMC4w
LgotICAgICAgICAgICAgYmxlbmRNb2RlID0gVkdfQkxFTkRfRFNUX0lOOwotICAgICAgICAgICAg
Y29uc3QgVkdmbG9hdCB2YWx1ZXNbXSA9IHsgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDEuMCwg
MS4wLCAxLjAgLSBvcGFjaXR5IH07Ci0gICAgICAgICAgICB2Z1NldGZ2KFZHX0NPTE9SX1RSQU5T
Rk9STV9WQUxVRVMsIDgsIHZhbHVlcyk7Ci0gICAgICAgICAgICB2Z1NldGkoVkdfQ09MT1JfVFJB
TlNGT1JNLCBWR19UUlVFKTsKLSAgICAgICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb21wb3NpdGVDb3B5Ogot
ICAgICAgICAgICAgYmxlbmRNb2RlID0gVkdfQkxFTkRfU1JDOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKLSAgICAgICAgICAgIGJsZW5kTW9k
ZSA9IFZHX0JMRU5EX1NSQ19PVkVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcG9zaXRlU291cmNlSW46Ci0gICAgICAgICAgICBibGVuZE1vZGUgPSBWR19CTEVORF9TUkNf
SU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6
Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRvcDoKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlv
bk92ZXI6Ci0gICAgICAgICAgICBibGVuZE1vZGUgPSBWR19CTEVORF9EU1RfT1ZFUjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46Ci0gICAg
ICAgICAgICBibGVuZE1vZGUgPSBWR19CTEVORF9EU1RfSU47Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVE
ZXN0aW5hdGlvbkF0b3A6Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlWE9SOgotICAgICAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBvc2l0ZVBs
dXNEYXJrZXI6Ci0gICAgICAgICAgICBibGVuZE1vZGUgPSBWR19CTEVORF9EQVJLRU47Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKLSAgICAg
ICAgICAgIGJsZW5kTW9kZSA9IFZHX0JMRU5EX0xJR0hURU47Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT0gQ29tcG9zaXRl
Q2xlYXIpIHsKLSAgICAgICAgICAgIGlmIChvcGFjaXR5ID49ICgxLjAgLSBGTFRfRVBTSUxPTikp
Ci0gICAgICAgICAgICAgICAgdmdTZXRpKFZHX0NPTE9SX1RSQU5TRk9STSwgVkdfRkFMU0UpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoYmxlbmRNb2RlID09IFZHX0JMRU5EX1NSQykgewotICAgICAg
ICAgICAgICAgIGJsZW5kTW9kZSA9IFZHX0JMRU5EX1NSQ19PVkVSOwotICAgICAgICAgICAgICAg
IFZHZmxvYXQgdmFsdWVzW10gPSB7IDEuMCwgMS4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
b3BhY2l0eSB9OwotICAgICAgICAgICAgICAgIHZnU2V0ZnYoVkdfQ09MT1JfVFJBTlNGT1JNX1ZB
TFVFUywgOCwgdmFsdWVzKTsKLSAgICAgICAgICAgICAgICB2Z1NldGkoVkdfQ09MT1JfVFJBTlNG
T1JNLCBWR19UUlVFKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVkdm
bG9hdCB2YWx1ZXNbXSA9IHsgMS4wLCAxLjAsIDEuMCwgb3BhY2l0eSwgMC4wLCAwLjAsIDAuMCwg
MC4wIH07Ci0gICAgICAgICAgICAgICAgdmdTZXRmdihWR19DT0xPUl9UUkFOU0ZPUk1fVkFMVUVT
LCA4LCB2YWx1ZXMpOwotICAgICAgICAgICAgICAgIHZnU2V0aShWR19DT0xPUl9UUkFOU0ZPUk0s
IFZHX1RSVUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9S
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2Z1NldGkoVkdfQkxFTkRfTU9ERSwgYmxlbmRNb2Rl
KTsKLSAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBs
eVRyYW5zZm9ybWF0aW9uKFBhaW50ZXJPcGVuVkcqIHBhaW50ZXIpCi0gICAgewotICAgICAgICAv
LyBUaGVyZSBhcmUgKmZpdmUqIHNlcGFyYXRlIHRyYW5zZm9ybXMgdGhhdCBjYW4gYmUgYXBwbGll
ZCB0byBPcGVuVkcgYXMgb2YgMS4xCi0gICAgICAgIC8vIGJ1dCBpdCBpcyBub3QgY2xlYXIgdGhh
dCB3ZSBuZWVkIHRvIHNldCB0aGVtIHNlcGFyYXRlbHkuICBJbnN0ZWFkIHdlIHNldCB0aGVtCi0g
ICAgICAgIC8vIGFsbCByaWdodCBoZXJlIGFuZCBsZXQgdGhpcyBiZSBhIGNhbGwgdG8gZXNzZW50
aWFsbHkgc2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm1hdGlvbiEKLSAgICAgICAgVkdNYXRyaXggdmdN
YXRyaXgoc3VyZmFjZVRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAgY29uc3QgVkdmbG9hdCogdmdG
bG9hdEFycmF5ID0gdmdNYXRyaXgudG9WR2Zsb2F0KCk7Ci0KLSAgICAgICAgdmdTZXRpKFZHX01B
VFJJWF9NT0RFLCBWR19NQVRSSVhfUEFUSF9VU0VSX1RPX1NVUkZBQ0UpOwotICAgICAgICB2Z0xv
YWRNYXRyaXgodmdGbG9hdEFycmF5KTsKLSAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0K
LSAgICAgICAgdmdTZXRpKFZHX01BVFJJWF9NT0RFLCBWR19NQVRSSVhfSU1BR0VfVVNFUl9UT19T
VVJGQUNFKTsKLSAgICAgICAgdmdMb2FkTWF0cml4KHZnRmxvYXRBcnJheSk7Ci0gICAgICAgIEFT
U0VSVF9WR19OT19FUlJPUigpOwotCi0jaWZkZWYgT1BFTlZHX1ZFUlNJT05fMV8xCi0gICAgICAg
IHZnU2V0aShWR19NQVRSSVhfTU9ERSwgVkdfTUFUUklYX0dMWVBIX1VTRVJfVE9fU1VSRkFDRSk7
Ci0gICAgICAgIHZnTG9hZE1hdHJpeCh2Z0Zsb2F0QXJyYXkpOwotICAgICAgICBBU1NFUlRfVkdf
Tk9fRVJST1IoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQgYXBwbHlTY2lzc29yUmVjdCgp
Ci0gICAgewotICAgICAgICBpZiAoc2Npc3NvcmluZ0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHZn
U2V0aShWR19TQ0lTU09SSU5HLCBWR19UUlVFKTsKLSAgICAgICAgICAgIHZnU2V0ZnYoVkdfU0NJ
U1NPUl9SRUNUUywgNCwgVkdSZWN0KHNjaXNzb3JSZWN0KS50b1ZHZmxvYXQoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgdmdTZXRpKFZHX1NDSVNTT1JJTkcsIFZHX0ZBTFNFKTsKLQot
ICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5U3Ry
b2tlU3R5bGUoKQotICAgIHsKLSAgICAgICAgaWYgKHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9r
ZSkgewotICAgICAgICAgICAgVkdmbG9hdCB2Z0Zsb2F0QXJyYXlbMl0gPSB7IDEuMCwgMS4wIH07
Ci0gICAgICAgICAgICB2Z1NldGZ2KFZHX1NUUk9LRV9EQVNIX1BBVFRFUk4sIDIsIHZnRmxvYXRB
cnJheSk7Ci0gICAgICAgICAgICB2Z1NldGYoVkdfU1RST0tFX0RBU0hfUEhBU0UsIDAuMCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc3Ryb2tlU3R5bGUgPT0gRGFzaGVkU3Ryb2tlKSB7Ci0gICAgICAg
ICAgICBpZiAoIXN0cm9rZURhc2hBcnJheS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBWR2Zs
b2F0IHZnRmxvYXRBcnJheVsyXSA9IHsgNC4wLCAzLjAgfTsKLSAgICAgICAgICAgICAgICB2Z1Nl
dGZ2KFZHX1NUUk9LRV9EQVNIX1BBVFRFUk4sIDIsIHZnRmxvYXRBcnJheSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFZlY3RvcjxWR2Zsb2F0PiB2Z0Zsb2F0QXJyYXko
c3Ryb2tlRGFzaEFycmF5LnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzdHJva2VEYXNoQXJyYXkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHZn
RmxvYXRBcnJheVtpXSA9IHN0cm9rZURhc2hBcnJheVtpXTsKLQotICAgICAgICAgICAgICAgIHZn
U2V0ZnYoVkdfU1RST0tFX0RBU0hfUEFUVEVSTiwgdmdGbG9hdEFycmF5LnNpemUoKSwgdmdGbG9h
dEFycmF5LmRhdGEoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2Z1NldGYoVkdfU1RS
T0tFX0RBU0hfUEhBU0UsIHN0cm9rZURhc2hPZmZzZXQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdmdTZXRmdihWR19TVFJPS0VfREFTSF9QQVRURVJOLCAwLCAwKTsKLSAgICAgICAg
ICAgIHZnU2V0ZihWR19TVFJPS0VfREFTSF9QSEFTRSwgMC4wKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIHN0cm9r
ZURpc2FibGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY29tcG9zaXRlT3BlcmF0
aW9uID09IENvbXBvc2l0ZVNvdXJjZU92ZXIKLSAgICAgICAgICAgICYmIChzdHJva2VTdHlsZSA9
PSBOb1N0cm9rZSB8fCAhc3Ryb2tlQ29sb3IuYWxwaGEoKSkpOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIGZpbGxEaXNhYmxlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGNvbXBv
c2l0ZU9wZXJhdGlvbiA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmICFmaWxsQ29sb3IuYWxwaGEo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYXZlTWFza0lmTmVjZXNzYXJ5KFBhaW50ZXJPcGVuVkcq
IHBhaW50ZXIpCi0gICAgewotI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQotICAgICAgICBpZiAo
bWFza2luZ0NoYW5nZWRBbmRFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAobWFzayAhPSBWR19J
TlZBTElEX0hBTkRMRSkgewotICAgICAgICAgICAgICAgIHZnRGVzdHJveU1hc2tMYXllcihtYXNr
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1hc2sgPSB2Z0NyZWF0ZU1hc2tMYXllcihwYWludGVyLT5zdXJmYWNlKCkt
PndpZHRoKCksIHBhaW50ZXItPnN1cmZhY2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKG1hc2sgIT0gVkdfSU5WQUxJRF9IQU5ETEUpOwotICAgICAgICAgICAgdmdDb3B5TWFzayht
YXNrLCAwLCAwLCAwLCAwLCBwYWludGVyLT5zdXJmYWNlKCktPndpZHRoKCksIHBhaW50ZXItPnN1
cmZhY2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLX07Ci0KLQotUGFpbnRlck9wZW5WRzo6UGFpbnRlck9w
ZW5WRygpCi0gICAgOiBtX3N0YXRlKDApCi0gICAgLCBtX3N1cmZhY2UoMCkKLXsKLX0KLQotUGFp
bnRlck9wZW5WRzo6UGFpbnRlck9wZW5WRyhTdXJmYWNlT3BlblZHKiBzdXJmYWNlKQotICAgIDog
bV9zdGF0ZSgwKQotICAgICwgbV9zdXJmYWNlKDApCi17Ci0gICAgQVNTRVJUKHN1cmZhY2UpOwot
ICAgIGJlZ2luKHN1cmZhY2UpOwotfQotCi1QYWludGVyT3BlblZHOjp+UGFpbnRlck9wZW5WRygp
Ci17Ci0gICAgZW5kKCk7Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6YmVnaW4oU3VyZmFjZU9w
ZW5WRyogc3VyZmFjZSkKLXsKLSAgICBpZiAoc3VyZmFjZSA9PSBtX3N1cmZhY2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChzdXJmYWNlKTsKLSAgICBBU1NFUlQoIW1fc3RhdGUpOwot
Ci0gICAgbV9zdXJmYWNlID0gc3VyZmFjZTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobmV3
IFBsYXRmb3JtUGFpbnRlclN0YXRlKCkpOwotICAgIG1fc3RhdGUgPSBtX3N0YXRlU3RhY2subGFz
dCgpOwotCi0gICAgbV9zdXJmYWNlLT5zZXRBY3RpdmVQYWludGVyKHRoaXMpOwotICAgIG1fc3Vy
ZmFjZS0+bWFrZUN1cnJlbnQoKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjplbmQoKQotewot
ICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UtPnNl
dEFjdGl2ZVBhaW50ZXIoMCk7Ci0gICAgbV9zdXJmYWNlID0gMDsKLQotICAgIGRlc3Ryb3lQYWlu
dGVyU3RhdGVzKCk7Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6ZGVzdHJveVBhaW50ZXJTdGF0
ZXMoKQotewotICAgIFBsYXRmb3JtUGFpbnRlclN0YXRlKiBzdGF0ZSA9IDA7Ci0gICAgd2hpbGUg
KCFtX3N0YXRlU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRlID0gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKLSAgICAgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZGVs
ZXRlIHN0YXRlOwotICAgIH0KLSAgICBtX3N0YXRlID0gMDsKLX0KLQotLy8gQ2FsbGVkIGJ5IGZy
aWVuZCBTdXJmYWNlT3BlblZHLCBwcml2YXRlIG90aGVyd2lzZS4KLXZvaWQgUGFpbnRlck9wZW5W
Rzo6YXBwbHlTdGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3RhdGUtPmFw
cGx5U3RhdGUodGhpcyk7Ci19Ci0KLS8qKgotICogQ29weSB0aGUgY3VycmVudCBiYWNrIGJ1ZmZl
ciBpbWFnZSBvbnRvIHRoZSBzdXJmYWNlLgotICoKLSAqIENhbGwgdGhpcyBtZXRob2Qgd2hlbiBh
bGwgcGFpbnRpbmcgb3BlcmF0aW9ucyBoYXZlIGJlZW4gY29tcGxldGVkLAotICogb3RoZXJ3aXNl
IHRoZSBzdXJmYWNlIHdvbid0IHZpc2libHkgY2hhbmdlLgotICovCi12b2lkIFBhaW50ZXJPcGVu
Vkc6OmJsaXRUb1N1cmZhY2UoKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsgLy8gaW1wbGllcyBt
X3N1cmZhY2UKLSAgICBtX3N1cmZhY2UtPmZsdXNoKCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBQ
YWludGVyT3BlblZHOjp0cmFuc2Zvcm1hdGlvbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc3Rh
dGUpOwotICAgIHJldHVybiBtX3N0YXRlLT5zdXJmYWNlVHJhbnNmb3JtYXRpb247Ci19Ci0KLXZv
aWQgUGFpbnRlck9wZW5WRzo6Y29uY2F0VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSk7Ci0gICAgbV9zdXJm
YWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAgLy8gV2UgZG8gdGhlIG11bHRpcGxpY2F0aW9uIG91
cnNlbGYgdXNpbmcgV2ViQ29yZSdzIEFmZmluZVRyYW5zZm9ybSByYXRoZXIKLSAgICAvLyB0aGFu
IG9mZmxvYWRpbmcgdGhpcyB0byBWRyB2aWEgdmdNdWx0TWF0cml4KCkgdG8ga2VlcCB0aGluZ3Mg
c2ltcGxlIGFuZAotICAgIC8vIHNvIHdlIGNhbiBtYWludGFpbiBzdGF0ZSBvdXJzZWx2ZXMuCi0g
ICAgbV9zdGF0ZS0+c3VyZmFjZVRyYW5zZm9ybWF0aW9uLm11bHRMZWZ0KHRyYW5zZm9ybWF0aW9u
KTsKLSAgICBtX3N0YXRlLT5hcHBseVRyYW5zZm9ybWF0aW9uKHRoaXMpOwotfQotCi12b2lkIFBh
aW50ZXJPcGVuVkc6OnNldFRyYW5zZm9ybWF0aW9uKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3VyZmFjZS0+bWFr
ZUN1cnJlbnQoKTsKLQotICAgIG1fc3RhdGUtPnN1cmZhY2VUcmFuc2Zvcm1hdGlvbiA9IHRyYW5z
Zm9ybWF0aW9uOwotICAgIG1fc3RhdGUtPmFwcGx5VHJhbnNmb3JtYXRpb24odGhpcyk7Ci19Ci0K
LXZvaWQgUGFpbnRlck9wZW5WRzo6dHJhbnNmb3JtUGF0aChWR1BhdGggZHN0LCBWR1BhdGggc3Jj
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybWF0aW9uKQotewotICAgIHZnU2V0aShW
R19NQVRSSVhfTU9ERSwgVkdfTUFUUklYX1BBVEhfVVNFUl9UT19TVVJGQUNFKTsKLQotICAgIC8v
IFNhdmUgdGhlIHRyYW5zZm9ybSBzdGF0ZQotICAgIFZHZmxvYXQgY3VycmVudE1hdHJpeFs5XTsK
LSAgICB2Z0dldE1hdHJpeChjdXJyZW50TWF0cml4KTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1Io
KTsKLQotICAgIC8vIExvYWQgdGhlIG5ldyB0cmFuc2Zvcm0KLSAgICB2Z0xvYWRNYXRyaXgoVkdN
YXRyaXgodHJhbnNmb3JtYXRpb24pLnRvVkdmbG9hdCgpKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJS
T1IoKTsKLQotICAgIC8vIEFwcGx5IHRoZSBuZXcgdHJhbnNmb3JtCi0gICAgdmdUcmFuc2Zvcm1Q
YXRoKGRzdCwgc3JjKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIC8vIFJlc3Rv
cmUgdGhlIHRyYW5zZm9ybSBzdGF0ZQotICAgIHZnTG9hZE1hdHJpeChjdXJyZW50TWF0cml4KTsK
LSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLX0KLQotQ29tcG9zaXRlT3BlcmF0b3IgUGFpbnRl
ck9wZW5WRzo6Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zdGF0
ZSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUtPmNvbXBvc2l0ZU9wZXJhdGlvbjsKLX0KLQotdm9pZCBQ
YWludGVyT3BlblZHOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsK
LQotICAgIG1fc3RhdGUtPmNvbXBvc2l0ZU9wZXJhdGlvbiA9IG9wOwotICAgIG1fc3RhdGUtPmFw
cGx5QmxlbmRpbmcodGhpcyk7Ci19Ci0KLWZsb2F0IFBhaW50ZXJPcGVuVkc6Om9wYWNpdHkoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICByZXR1cm4gbV9zdGF0ZS0+b3BhY2l0
eTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCi17
Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQot
ICAgIG1fc3RhdGUtPm9wYWNpdHkgPSBvcGFjaXR5OwotICAgIG1fc3RhdGUtPmFwcGx5QmxlbmRp
bmcodGhpcyk7Ci19Ci0KLWZsb2F0IFBhaW50ZXJPcGVuVkc6OnN0cm9rZVRoaWNrbmVzcygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIHJldHVybiBtX3N0YXRlLT5zdHJva2VU
aGlja25lc3M7Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSk7Ci0gICAgbV9zdXJmYWNlLT5t
YWtlQ3VycmVudCgpOwotCi0gICAgbV9zdGF0ZS0+c3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNz
OwotICAgIHZnU2V0ZihWR19TVFJPS0VfTElORV9XSURUSCwgdGhpY2tuZXNzKTsKLSAgICBBU1NF
UlRfVkdfTk9fRVJST1IoKTsKLX0KLQotU3Ryb2tlU3R5bGUgUGFpbnRlck9wZW5WRzo6c3Ryb2tl
U3R5bGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICByZXR1cm4gbV9zdGF0
ZS0+c3Ryb2tlU3R5bGU7Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6c2V0U3Ryb2tlU3R5bGUo
U3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3VyZmFj
ZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIG1fc3RhdGUtPnN0cm9rZVN0eWxlID0gc3R5bGU7Ci0g
ICAgbV9zdGF0ZS0+YXBwbHlTdHJva2VTdHlsZSgpOwotfQotCi12b2lkIFBhaW50ZXJPcGVuVkc6
OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7
Ci0KLSAgICBtX3N0YXRlLT5zdHJva2VEYXNoQXJyYXkgPSBkYXNoQXJyYXk7Ci0gICAgbV9zdGF0
ZS0+c3Ryb2tlRGFzaE9mZnNldCA9IGRhc2hPZmZzZXQ7Ci0gICAgbV9zdGF0ZS0+YXBwbHlTdHJv
a2VTdHlsZSgpOwotfQotCi12b2lkIFBhaW50ZXJPcGVuVkc6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJy
ZW50KCk7Ci0KLSAgICBtX3N0YXRlLT5zdHJva2VMaW5lQ2FwID0gbGluZUNhcDsKLSAgICB2Z1Nl
dGkoVkdfU1RST0tFX0NBUF9TVFlMRSwgdG9WR0NhcFN0eWxlKGxpbmVDYXApKTsKLSAgICBBU1NF
UlRfVkdfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSk7Ci0gICAgbV9zdXJmYWNl
LT5tYWtlQ3VycmVudCgpOwotCi0gICAgbV9zdGF0ZS0+c3Ryb2tlTGluZUpvaW4gPSBsaW5lSm9p
bjsKLSAgICB2Z1NldGkoVkdfU1RST0tFX0pPSU5fU1RZTEUsIHRvVkdKb2luU3R5bGUobGluZUpv
aW4pKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZH
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUp
OwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIG1fc3RhdGUtPnN0cm9rZU1p
dGVyTGltaXQgPSBtaXRlckxpbWl0OwotICAgIHZnU2V0ZihWR19TVFJPS0VfTUlURVJfTElNSVQs
IG1pdGVyTGltaXQpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotfQotCi1Db2xvciBQYWlu
dGVyT3BlblZHOjpzdHJva2VDb2xvcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwot
ICAgIHJldHVybiBtX3N0YXRlLT5zdHJva2VDb2xvcjsKLX0KLQotdm9pZCBQYWludGVyT3BlblZH
OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGUpOwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIG1fc3RhdGUtPnN0cm9r
ZUNvbG9yID0gY29sb3I7Ci0gICAgc2V0VkdTb2xpZENvbG9yKFZHX1NUUk9LRV9QQVRILCBjb2xv
cik7Ci19Ci0KLUNvbG9yIFBhaW50ZXJPcGVuVkc6OmZpbGxDb2xvcigpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fc3RhdGUpOwotICAgIHJldHVybiBtX3N0YXRlLT5maWxsQ29sb3I7Ci19Ci0KLXZv
aWQgUGFpbnRlck9wZW5WRzo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBBU1NFUlQobV9zdGF0ZSk7Ci0gICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAg
bV9zdGF0ZS0+ZmlsbENvbG9yID0gY29sb3I7Ci0gICAgc2V0VkdTb2xpZENvbG9yKFZHX0ZJTExf
UEFUSCwgY29sb3IpOwotfQotCi1UZXh0RHJhd2luZ01vZGVGbGFncyBQYWludGVyT3BlblZHOjp0
ZXh0RHJhd2luZ01vZGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICByZXR1
cm4gbV9zdGF0ZS0+dGV4dERyYXdpbmdNb2RlOwotfQotCi12b2lkIFBhaW50ZXJPcGVuVkc6OnNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIEFTU0VS
VChtX3N0YXRlKTsKLSAgICBtX3N0YXRlLT50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOwotfQotCi1i
b29sIFBhaW50ZXJPcGVuVkc6OmFudGlhbGlhc2luZ0VuYWJsZWQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX3N0YXRlKTsKLSAgICByZXR1cm4gbV9zdGF0ZS0+YW50aWFsaWFzaW5nRW5hYmxlZDsK
LX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpzZXRBbnRpYWxpYXNpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSk7Ci0gICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVu
dCgpOwotCi0gICAgbV9zdGF0ZS0+YW50aWFsaWFzaW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAg
ICBpZiAoZW5hYmxlZCkKLSAgICAgICAgdmdTZXRpKFZHX1JFTkRFUklOR19RVUFMSVRZLCBWR19S
RU5ERVJJTkdfUVVBTElUWV9GQVNURVIpOwotICAgIGVsc2UKLSAgICAgICAgdmdTZXRpKFZHX1JF
TkRFUklOR19RVUFMSVRZLCBWR19SRU5ERVJJTkdfUVVBTElUWV9OT05BTlRJQUxJQVNFRCk7Ci19
Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3Rv
cnMpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUpOwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQo
KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbiA9IG1fc3RhdGUtPnN1cmZh
Y2VUcmFuc2Zvcm1hdGlvbjsKLSAgICB0cmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0oc2Nh
bGVGYWN0b3JzLndpZHRoKCksIHNjYWxlRmFjdG9ycy5oZWlnaHQoKSk7Ci0gICAgc2V0VHJhbnNm
b3JtYXRpb24odHJhbnNmb3JtYXRpb24pOwotfQotCi12b2lkIFBhaW50ZXJPcGVuVkc6OnJvdGF0
ZShmbG9hdCByYWRpYW5zKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2Ut
Pm1ha2VDdXJyZW50KCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBt
X3N0YXRlLT5zdXJmYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgdHJhbnNmb3JtYXRpb24ucm90YXRl
KHJhZDJkZWcocmFkaWFucykpOwotICAgIHNldFRyYW5zZm9ybWF0aW9uKHRyYW5zZm9ybWF0aW9u
KTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjp0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5
KQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7
Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBtX3N0YXRlLT5zdXJmYWNl
VHJhbnNmb3JtYXRpb247Ci0gICAgdHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKGR4LCBkeSk7Ci0g
ICAgc2V0VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtYXRpb24pOwotfQotCi12b2lkIFBhaW50ZXJP
cGVuVkc6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFp
bnRNb2RlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0YXRlKTsKLQotICAgIFZHYml0ZmllbGQg
cGFpbnRNb2RlcyA9IDA7Ci0gICAgaWYgKCFtX3N0YXRlLT5zdHJva2VEaXNhYmxlZCgpKQotICAg
ICAgICBwYWludE1vZGVzIHw9IFZHX1NUUk9LRV9QQVRIOwotICAgIGlmICghbV9zdGF0ZS0+Zmls
bERpc2FibGVkKCkpCi0gICAgICAgIHBhaW50TW9kZXMgfD0gVkdfRklMTF9QQVRIOwotCi0gICAg
cGFpbnRNb2RlcyAmPSBzcGVjaWZpZWRQYWludE1vZGVzOwotCi0gICAgaWYgKCFwYWludE1vZGVz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7Ci0KLSAg
ICB2Z1NldGkoVkdfRklMTF9SVUxFLCB0b1ZHRmlsbFJ1bGUoZmlsbFJ1bGUpKTsKLSAgICB2Z0Ry
YXdQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCktPnZnUGF0aCgpLCBwYWludE1vZGVzKTsKLSAgICBB
U1NFUlRfVkdfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjppbnRlcnNlY3RT
Y2lzc29yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gU2Npc3NvciByZWN0
YW5nbGVzIGFyZSBkZWZpbmVkIGJ5IGZsb2F0IHZhbHVlcywgYnV0IGUuZy4gcGFpbnRpbmcKLSAg
ICAvLyBzb21ldGhpbmcgcmVkIHRvIGEgZmxvYXQtY2xpcHBlZCByZWN0YW5nbGUgYW5kIHRoZW4g
cGFpbnRpbmcgc29tZXRoaW5nCi0gICAgLy8gd2hpdGUgdG8gdGhlIHNhbWUgcmVjdGFuZ2xlIHdp
bGwgbGVhdmUgc29tZSByZWQgcmVtbmFudHMgYXMgaXQgaXMKLSAgICAvLyByZW5kZXJlZCB0byBm
dWxsIHBpeGVscyBpbiBiZXR3ZWVuLiBBbHNvLCBzb21lIE9wZW5WRyBpbXBsZW1lbnRhdGlvbnMK
LSAgICAvLyBhcmUgbGlrZWx5IHRvIGNsaXAgdG8gaW50ZWdlciBjb29yZGluYXRlcyBhbnl3YXlz
IGJlY2F1c2Ugb2YgdGhlIGFib3ZlCi0gICAgLy8gZWZmZWN0LiBTbyBjb25zaWRlcmluZyB0aGUg
YWJvdmUgKGFuZCBjb25maXJtaW5nIHRocm91Z2ggdGVzdHMpIHRoZQotICAgIC8vIHZpc3VhbCBy
ZXN1bHQgaXMgYmV0dGVyIGlmIHdlIGNsaXAgdG8gdGhlIGVuY2xvc2luZyBpbnRlZ2VyIHJlY3Rh
bmdsZQotICAgIC8vIHJhdGhlciB0aGFuIHRoZSBleGFjdCBmbG9hdCByZWN0YW5nbGUgZm9yIHNj
aXNzb3JpbmcuCi0gICAgaWYgKG1fc3RhdGUtPnNjaXNzb3JpbmdFbmFibGVkKQotICAgICAgICBt
X3N0YXRlLT5zY2lzc29yUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
cmVjdCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9zdGF0ZS0+c2Npc3NvcmluZ0VuYWJsZWQg
PSB0cnVlOwotICAgICAgICBtX3N0YXRlLT5zY2lzc29yUmVjdCA9IEZsb2F0UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpKTsKLSAgICB9Ci0KLSAgICBtX3N0YXRlLT5hcHBseVNjaXNzb3JSZWN0
KCk7Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0Q2xpcFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPm1h
a2VDdXJyZW50KCk7Ci0KLSAgICBpZiAobV9zdGF0ZS0+c3VyZmFjZVRyYW5zZm9ybWF0aW9uLmlz
SWRlbnRpdHkoKSkgewotICAgICAgICAvLyBObyB0cmFuc2Zvcm1hdGlvbiByZXF1aXJlZCwgc2tp
cCBhbGwgdGhlIGNvbXBsZXggc3R1ZmYuCi0gICAgICAgIGludGVyc2VjdFNjaXNzb3JSZWN0KHJl
Y3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGFjdHVh
bCBkZXN0aW5hdGlvbiByZWN0YW5nbGUgaXMgc3RpbGwgcmVjdGlsaW5lYXIgKGNhbiBiZQotICAg
IC8vIHJlcHJlc2VudGVkIGFzIEZsb2F0UmVjdCkgc28gd2UgY291bGQgYXBwbHkgc2Npc3Nvcmlu
ZyBpbnN0ZWFkIG9mCi0gICAgLy8gKHBvdGVudGlhbGx5IG1vcmUgZXhwZW5zaXZlKSBwYXRoIGNs
aXBwaW5nLiBOb3RlIHRoYXQgc2Npc3NvcmluZyBpcyBub3QKLSAgICAvLyBzdWJqZWN0IHRvIHRy
YW5zZm9ybWF0aW9ucywgc28gd2UgbmVlZCB0byBkbyB0aGUgdHJhbnNmb3JtYXRpb24gdG8KLSAg
ICAvLyBzdXJmYWNlIGNvb3JkaW5hdGVzIGJ5IG91cnNlbHZlcy4KLSAgICBGbG9hdFF1YWQgZWZm
ZWN0aXZlU2Npc3NvclF1YWQgPSBtX3N0YXRlLT5zdXJmYWNlVHJhbnNmb3JtYXRpb24ubWFwUXVh
ZChGbG9hdFF1YWQocmVjdCkpOwotCi0gICAgaWYgKGVmZmVjdGl2ZVNjaXNzb3JRdWFkLmlzUmVj
dGlsaW5lYXIoKSkKLSAgICAgICAgaW50ZXJzZWN0U2Npc3NvclJlY3QoZWZmZWN0aXZlU2Npc3Nv
clF1YWQuYm91bmRpbmdCb3goKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoZSB0cmFuc2Zv
cm1lZCBzY2lzc29yUmVjdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgRmxvYXRSZWN0Ci0gICAg
ICAgIC8vIGFueW1vcmUsIHNvIHdlIG5lZWQgdG8gcGVyZm9ybSBtYXNraW5nIGluc3RlYWQuCi0g
ICAgICAgIFBhdGggc2Npc3NvclJlY3RQYXRoOwotICAgICAgICBzY2lzc29yUmVjdFBhdGguYWRk
UmVjdChyZWN0KTsKLSAgICAgICAgY2xpcFBhdGgoc2Npc3NvclJlY3RQYXRoLCBQYWludGVyT3Bl
blZHOjpJbnRlcnNlY3RDbGlwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgUGFpbnRlck9wZW5WRzo6Q2xpcE9wZXJhdGlvbiBtYXNr
T3AsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQotICAg
IEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7Ci0KLSAgICBp
ZiAobV9zdGF0ZS0+bWFzayAhPSBWR19JTlZBTElEX0hBTkRMRSAmJiAhbV9zdGF0ZS0+bWFza2lu
Z0NoYW5nZWRBbmRFbmFibGVkKSB7Ci0gICAgICAgIC8vIFRoZSBwYXJlbnQncyBtYXNrIGhhcyBi
ZWVuIGluaGVyaXRlZCAtIGRpc3Bvc2UgdGhlIGhhbmRsZSBzbyB0aGF0Ci0gICAgICAgIC8vIGl0
IHdvbid0IGJlIG92ZXJ3cml0dGVuLgotICAgICAgICBtX3N0YXRlLT5tYXNraW5nQ2hhbmdlZEFu
ZEVuYWJsZWQgPSB0cnVlOwotICAgICAgICBtX3N0YXRlLT5tYXNrID0gVkdfSU5WQUxJRF9IQU5E
TEU7Ci0gICAgfSBlbHNlIGlmICghbV9zdGF0ZS0+bWFza2luZ0VuYWJsZWQoKSkgewotICAgICAg
ICAvLyBOb25lIG9mIHRoZSBwYXJlbnQgcGFpbnRlciBzdGF0ZXMgaGFkIGEgbWFzayBlbmFibGVk
IHlldC4KLSAgICAgICAgbV9zdGF0ZS0+bWFza2luZ0NoYW5nZWRBbmRFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgdmdTZXRpKFZHX01BU0tJTkcsIFZHX1RSVUUpOwotICAgICAgICAvLyBNYWtlIHN1
cmUgbm90IHRvIGluaGVyaXQgcHJldmlvdXMgbWFzayBzdGF0ZSBmcm9tIHByZXZpb3VzbHkgd3Jp
dHRlbgotICAgICAgICAvLyAoYnV0IGRpc2FibGVkKSBtYXNrcy4gRm9yIFZHX0ZJTExfTUFTSyB0
aGUgZmlyc3QgYXJndW1lbnQgaXMgaWdub3JlZCwKLSAgICAgICAgLy8gd2UgcGFzcyBWR19JTlZB
TElEX0hBTkRMRSB3aGljaCBpcyB3aGF0IHRoZSBPcGVuVkcgc3BlYyBzdWdnZXN0cy4KLSAgICAg
ICAgdmdNYXNrKFZHX0lOVkFMSURfSEFORExFLCBWR19GSUxMX01BU0ssIDAsIDAsIG1fc3VyZmFj
ZS0+d2lkdGgoKSwgbV9zdXJmYWNlLT5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgLy8gSW50ZXJz
ZWN0IHRoZSBwYXRoIGZyb20gdGhlIG1hc2ssIG9yIHN1YnRyYWN0IGl0IGZyb20gdGhlcmUuCi0g
ICAgLy8gKEluIGVpdGhlciBjYXNlIHdlIGFsd2F5cyBkZWNyZWFzZSB0aGUgdmlzaWJsZSBhcmVh
LCBuZXZlciBpbmNyZWFzZSBpdCwKLSAgICAvLyB3aGljaCBtZWFucyBtYXNraW5nIG5ldmVyIGhh
cyB0byBtb2RpZnkgc2Npc3NvciByZWN0YW5nbGVzLikKLSAgICB2Z1NldGkoVkdfRklMTF9SVUxF
LCB0b1ZHRmlsbFJ1bGUoY2xpcFJ1bGUpKTsKLSAgICB2Z1JlbmRlclRvTWFzayhwYXRoLnBsYXRm
b3JtUGF0aCgpLT52Z1BhdGgoKSwgVkdfRklMTF9QQVRILCAoVkdNYXNrT3BlcmF0aW9uKSBtYXNr
T3ApOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBWR2JpdGZpZWxkIHNwZWNpZmllZFBhaW50TW9kZXMpCi17Ci0gICAgQVNT
RVJUKG1fc3RhdGUpOwotCi0gICAgVkdiaXRmaWVsZCBwYWludE1vZGVzID0gMDsKLSAgICBpZiAo
IW1fc3RhdGUtPnN0cm9rZURpc2FibGVkKCkpCi0gICAgICAgIHBhaW50TW9kZXMgfD0gVkdfU1RS
T0tFX1BBVEg7Ci0gICAgaWYgKCFtX3N0YXRlLT5maWxsRGlzYWJsZWQoKSkKLSAgICAgICAgcGFp
bnRNb2RlcyB8PSBWR19GSUxMX1BBVEg7Ci0KLSAgICBwYWludE1vZGVzICY9IHNwZWNpZmllZFBh
aW50TW9kZXM7Ci0KLSAgICBpZiAoIXBhaW50TW9kZXMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIFZHUGF0aCBwYXRoID0gdmdDcmVhdGVQ
YXRoKAotICAgICAgICBWR19QQVRIX0ZPUk1BVF9TVEFOREFSRCwgVkdfUEFUSF9EQVRBVFlQRV9G
LAotICAgICAgICAxLjAgLyogc2NhbGUgKi8sIDAuMCAvKiBiaWFzICovLAotICAgICAgICA1IC8q
IGV4cGVjdGVkIG51bWJlciBvZiBzZWdtZW50cyAqLywKLSAgICAgICAgNSAvKiBleHBlY3RlZCBu
dW1iZXIgb2YgdG90YWwgY29vcmRpbmF0ZXMgKi8sCi0gICAgICAgIFZHX1BBVEhfQ0FQQUJJTElU
WV9BUFBFTkRfVE8pOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotCi0gICAgaWYgKHZndVJl
Y3QocGF0aCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
ID09IFZHVV9OT19FUlJPUikgewotICAgICAgICB2Z0RyYXdQYXRoKHBhdGgsIHBhaW50TW9kZXMp
OwotICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICB2Z0Rlc3Ryb3lQ
YXRoKHBhdGgpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotfQotCi12b2lkIFBhaW50ZXJP
cGVuVkc6OmRyYXdSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0
b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgVkdiaXRmaWVsZCBzcGVjaWZpZWRQ
YWludE1vZGVzKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLQotICAgIFZHYml0ZmllbGQgcGFp
bnRNb2RlcyA9IDA7Ci0gICAgaWYgKCFtX3N0YXRlLT5zdHJva2VEaXNhYmxlZCgpKQotICAgICAg
ICBwYWludE1vZGVzIHw9IFZHX1NUUk9LRV9QQVRIOwotICAgIGlmICghbV9zdGF0ZS0+ZmlsbERp
c2FibGVkKCkpCi0gICAgICAgIHBhaW50TW9kZXMgfD0gVkdfRklMTF9QQVRIOwotCi0gICAgcGFp
bnRNb2RlcyAmPSBzcGVjaWZpZWRQYWludE1vZGVzOwotCi0gICAgaWYgKCFwYWludE1vZGVzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7Ci0KLSAgICBW
R1BhdGggcGF0aCA9IHZnQ3JlYXRlUGF0aCgKLSAgICAgICAgVkdfUEFUSF9GT1JNQVRfU1RBTkRB
UkQsIFZHX1BBVEhfREFUQVRZUEVfRiwKLSAgICAgICAgMS4wIC8qIHNjYWxlICovLCAwLjAgLyog
YmlhcyAqLywKLSAgICAgICAgMTAgLyogZXhwZWN0ZWQgbnVtYmVyIG9mIHNlZ21lbnRzICovLAot
ICAgICAgICAyNSAvKiBleHBlY3RlZCBudW1iZXIgb2YgdG90YWwgY29vcmRpbmF0ZXMgKi8sCi0g
ICAgICAgIFZHX1BBVEhfQ0FQQUJJTElUWV9BUFBFTkRfVE8pOwotICAgIEFTU0VSVF9WR19OT19F
UlJPUigpOwotCi0gICAgLy8gY2xhbXAgY29ybmVyIGFyYyBzaXplcwotICAgIEZsb2F0U2l6ZSBj
bGFtcGVkVG9wTGVmdCA9IEZsb2F0U2l6ZSh0b3BMZWZ0KS5zaHJ1bmtUbyhyZWN0LnNpemUoKSku
ZXhwYW5kZWRUbyhGbG9hdFNpemUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRUb3BSaWdodCA9
IEZsb2F0U2l6ZSh0b3BSaWdodCkuc2hydW5rVG8ocmVjdC5zaXplKCkpLmV4cGFuZGVkVG8oRmxv
YXRTaXplKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkQm90dG9tTGVmdCA9IEZsb2F0U2l6ZShi
b3R0b21MZWZ0KS5zaHJ1bmtUbyhyZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhGbG9hdFNpemUoKSk7
Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRCb3R0b21SaWdodCA9IEZsb2F0U2l6ZShib3R0b21SaWdo
dCkuc2hydW5rVG8ocmVjdC5zaXplKCkpLmV4cGFuZGVkVG8oRmxvYXRTaXplKCkpOwotCi0gICAg
Ly8gQXMgT3BlblZHJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgZmxpcHBlZCBpbiBjb21wYXJpc29u
IHRvIFdlYktpdCdzLAotICAgIC8vIHdlIGhhdmUgdG8gc3BlY2lmeSB0aGUgb3Bwb3NpdGUgdmFs
dWUgZm9yIHRoZSAiY2xvY2t3aXNlIiB2YWx1ZS4KLSAgICBzdGF0aWMgY29uc3QgVkd1Ynl0ZSBw
YXRoU2VnbWVudHNbXSA9IHsKLSAgICAgICAgVkdfTU9WRV9UT19BQlMsCi0gICAgICAgIFZHX0hM
SU5FX1RPX1JFTCwKLSAgICAgICAgVkdfU0NDV0FSQ19UT19SRUwsCi0gICAgICAgIFZHX1ZMSU5F
X1RPX1JFTCwKLSAgICAgICAgVkdfU0NDV0FSQ19UT19SRUwsCi0gICAgICAgIFZHX0hMSU5FX1RP
X1JFTCwKLSAgICAgICAgVkdfU0NDV0FSQ19UT19SRUwsCi0gICAgICAgIFZHX1ZMSU5FX1RPX1JF
TCwKLSAgICAgICAgVkdfU0NDV0FSQ19UT19SRUwsCi0gICAgICAgIFZHX0NMT1NFX1BBVEgKLSAg
ICB9OwotICAgIC8vIEFsc28sIHRoZSByb3VuZGVkIHJlY3RhbmdsZSBwYXRoIHByb2NlZWRzIGZy
b20gdGhlIHRvcCB0byB0aGUgYm90dG9tLAotICAgIC8vIHJlcXVpcmluZyBoZWlnaHQgZGlzdGFu
Y2VzIGFuZCBjbGFtcGVkIHJhZGl1cyBzaXplcyB0byBiZSBmbGlwcGVkLgotICAgIGNvbnN0IFZH
ZmxvYXQgcGF0aERhdGFbXSA9IHsKLSAgICAgICAgcmVjdC54KCkgKyBjbGFtcGVkVG9wTGVmdC53
aWR0aCgpLCByZWN0LnkoKSwKLSAgICAgICAgcmVjdC53aWR0aCgpIC0gY2xhbXBlZFRvcExlZnQu
d2lkdGgoKSAtIGNsYW1wZWRUb3BSaWdodC53aWR0aCgpLAotICAgICAgICBjbGFtcGVkVG9wUmln
aHQud2lkdGgoKSwgY2xhbXBlZFRvcFJpZ2h0LmhlaWdodCgpLCAwLCBjbGFtcGVkVG9wUmlnaHQu
d2lkdGgoKSwgY2xhbXBlZFRvcFJpZ2h0LmhlaWdodCgpLAotICAgICAgICByZWN0LmhlaWdodCgp
IC0gY2xhbXBlZFRvcFJpZ2h0LmhlaWdodCgpIC0gY2xhbXBlZEJvdHRvbVJpZ2h0LmhlaWdodCgp
LAotICAgICAgICBjbGFtcGVkQm90dG9tUmlnaHQud2lkdGgoKSwgY2xhbXBlZEJvdHRvbVJpZ2h0
LmhlaWdodCgpLCAwLCAtY2xhbXBlZEJvdHRvbVJpZ2h0LndpZHRoKCksIGNsYW1wZWRCb3R0b21S
aWdodC5oZWlnaHQoKSwKLSAgICAgICAgLShyZWN0LndpZHRoKCkgLSBjbGFtcGVkQm90dG9tTGVm
dC53aWR0aCgpIC0gY2xhbXBlZEJvdHRvbVJpZ2h0LndpZHRoKCkpLAotICAgICAgICBjbGFtcGVk
Qm90dG9tTGVmdC53aWR0aCgpLCBjbGFtcGVkQm90dG9tTGVmdC5oZWlnaHQoKSwgMCwgLWNsYW1w
ZWRCb3R0b21MZWZ0LndpZHRoKCksIC1jbGFtcGVkQm90dG9tTGVmdC5oZWlnaHQoKSwKLSAgICAg
ICAgLShyZWN0LmhlaWdodCgpIC0gY2xhbXBlZFRvcExlZnQuaGVpZ2h0KCkgLSBjbGFtcGVkQm90
dG9tTGVmdC5oZWlnaHQoKSksCi0gICAgICAgIGNsYW1wZWRUb3BMZWZ0LndpZHRoKCksIGNsYW1w
ZWRUb3BMZWZ0LmhlaWdodCgpLCAwLCBjbGFtcGVkVG9wTGVmdC53aWR0aCgpLCAtY2xhbXBlZFRv
cExlZnQuaGVpZ2h0KCksCi0gICAgfTsKLQotICAgIHZnQXBwZW5kUGF0aERhdGEocGF0aCwgMTAs
IHBhdGhTZWdtZW50cywgcGF0aERhdGEpOwotICAgIHZnRHJhd1BhdGgocGF0aCwgcGFpbnRNb2Rl
cyk7Ci0gICAgdmdEZXN0cm95UGF0aChwYXRoKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsK
LX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgZnJvbSwg
Y29uc3QgSW50UG9pbnQmIHRvKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLQotICAgIGlmICht
X3N0YXRlLT5zdHJva2VEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1cmZh
Y2UtPm1ha2VDdXJyZW50KCk7Ci0KLSAgICBWR1BhdGggcGF0aCA9IHZnQ3JlYXRlUGF0aCgKLSAg
ICAgICAgVkdfUEFUSF9GT1JNQVRfU1RBTkRBUkQsIFZHX1BBVEhfREFUQVRZUEVfRiwKLSAgICAg
ICAgMS4wIC8qIHNjYWxlICovLCAwLjAgLyogYmlhcyAqLywKLSAgICAgICAgMiAvKiBleHBlY3Rl
ZCBudW1iZXIgb2Ygc2VnbWVudHMgKi8sCi0gICAgICAgIDQgLyogZXhwZWN0ZWQgbnVtYmVyIG9m
IHRvdGFsIGNvb3JkaW5hdGVzICovLAotICAgICAgICBWR19QQVRIX0NBUEFCSUxJVFlfQVBQRU5E
X1RPKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIFZHVUVycm9yQ29kZSBlcnJv
ckNvZGU7Ci0KLSAgICAvLyBUcnkgdG8gYWxpZ24gbGluZXMgdG8gcGl4ZWxzLCBjZW50ZXJpbmcg
dGhlbSBiZXR3ZWVuIHBpeGVscyBmb3Igb2RkIHRoaWNrbmVzcyB2YWx1ZXMuCi0gICAgaWYgKGZt
b2QobV9zdGF0ZS0+c3Ryb2tlVGhpY2tuZXNzICsgMC41LCAyLjApIDwgMS4wKQotICAgICAgICBl
cnJvckNvZGUgPSB2Z3VMaW5lKHBhdGgsIGZyb20ueCgpLCBmcm9tLnkoKSwgdG8ueCgpLCB0by55
KCkpOwotICAgIGVsc2UgaWYgKCh0by55KCkgLSBmcm9tLnkoKSkgPiAodG8ueCgpIC0gZnJvbS54
KCkpKSAvLyBtb3JlIHZlcnRpY2FsIHRoYW4gaG9yaXpvbnRhbAotICAgICAgICBlcnJvckNvZGUg
PSB2Z3VMaW5lKHBhdGgsIGZyb20ueCgpICsgMC41LCBmcm9tLnkoKSwgdG8ueCgpICsgMC41LCB0
by55KCkpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3JDb2RlID0gdmd1TGluZShwYXRoLCBmcm9t
LngoKSwgZnJvbS55KCkgKyAwLjUsIHRvLngoKSwgdG8ueSgpICsgMC41KTsKLQotICAgIGlmIChl
cnJvckNvZGUgPT0gVkdVX05PX0VSUk9SKSB7Ci0gICAgICAgIHZnRHJhd1BhdGgocGF0aCwgVkdf
U1RST0tFX1BBVEgpOwotICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICB9Ci0KLSAg
ICB2Z0Rlc3Ryb3lQYXRoKHBhdGgpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotfQotCi12
b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0
QW5nbGUsIGludCBhbmdsZVNwYW4sIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKLXsK
LSAgICBBU1NFUlQobV9zdGF0ZSk7Ci0KLSAgICBWR2JpdGZpZWxkIHBhaW50TW9kZXMgPSAwOwot
ICAgIGlmICghbV9zdGF0ZS0+c3Ryb2tlRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRNb2RlcyB8
PSBWR19TVFJPS0VfUEFUSDsKLSAgICBpZiAoIW1fc3RhdGUtPmZpbGxEaXNhYmxlZCgpKQotICAg
ICAgICBwYWludE1vZGVzIHw9IFZHX0ZJTExfUEFUSDsKLQotICAgIHBhaW50TW9kZXMgJj0gc3Bl
Y2lmaWVkUGFpbnRNb2RlczsKLQotICAgIGlmICghcGFpbnRNb2RlcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAgVkdQYXRoIHBhdGggPSB2
Z0NyZWF0ZVBhdGgoCi0gICAgICAgIFZHX1BBVEhfRk9STUFUX1NUQU5EQVJELCBWR19QQVRIX0RB
VEFUWVBFX0YsCi0gICAgICAgIDEuMCAvKiBzY2FsZSAqLywgMC4wIC8qIGJpYXMgKi8sCi0gICAg
ICAgIDIgLyogZXhwZWN0ZWQgbnVtYmVyIG9mIHNlZ21lbnRzICovLAotICAgICAgICA0IC8qIGV4
cGVjdGVkIG51bWJlciBvZiB0b3RhbCBjb29yZGluYXRlcyAqLywKLSAgICAgICAgVkdfUEFUSF9D
QVBBQklMSVRZX0FQUEVORF9UTyk7Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICBp
ZiAodmd1QXJjKHBhdGgsIHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMi4wLCByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkgLyAyLjAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgLXN0YXJ0
QW5nbGUsIC1hbmdsZVNwYW4sIFZHVV9BUkNfT1BFTikgPT0gVkdVX05PX0VSUk9SKSB7Ci0gICAg
ICAgIHZnRHJhd1BhdGgocGF0aCwgVkdfU1RST0tFX1BBVEgpOwotICAgICAgICBBU1NFUlRfVkdf
Tk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICB2Z0Rlc3Ryb3lQYXRoKHBhdGgpOwotICAgIEFTU0VS
VF9WR19OT19FUlJPUigpOwotfQotCi12b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdFbGxpcHNlKGNv
bnN0IEludFJlY3QmIHJlY3QsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKLXsKLSAg
ICBBU1NFUlQobV9zdGF0ZSk7Ci0KLSAgICBWR2JpdGZpZWxkIHBhaW50TW9kZXMgPSAwOwotICAg
IGlmICghbV9zdGF0ZS0+c3Ryb2tlRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRNb2RlcyB8PSBW
R19TVFJPS0VfUEFUSDsKLSAgICBpZiAoIW1fc3RhdGUtPmZpbGxEaXNhYmxlZCgpKQotICAgICAg
ICBwYWludE1vZGVzIHw9IFZHX0ZJTExfUEFUSDsKLQotICAgIHBhaW50TW9kZXMgJj0gc3BlY2lm
aWVkUGFpbnRNb2RlczsKLQotICAgIGlmICghcGFpbnRNb2RlcykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAgVkdQYXRoIHBhdGggPSB2Z0Ny
ZWF0ZVBhdGgoCi0gICAgICAgIFZHX1BBVEhfRk9STUFUX1NUQU5EQVJELCBWR19QQVRIX0RBVEFU
WVBFX0YsCi0gICAgICAgIDEuMCAvKiBzY2FsZSAqLywgMC4wIC8qIGJpYXMgKi8sCi0gICAgICAg
IDQgLyogZXhwZWN0ZWQgbnVtYmVyIG9mIHNlZ21lbnRzICovLAotICAgICAgICAxMiAvKiBleHBl
Y3RlZCBudW1iZXIgb2YgdG90YWwgY29vcmRpbmF0ZXMgKi8sCi0gICAgICAgIFZHX1BBVEhfQ0FQ
QUJJTElUWV9BUFBFTkRfVE8pOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotCi0gICAgaWYg
KHZndUVsbGlwc2UocGF0aCwgcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyLjAsIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSAvIDIuMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSA9PSBW
R1VfTk9fRVJST1IpIHsKLSAgICAgICAgdmdEcmF3UGF0aChwYXRoLCBwYWludE1vZGVzKTsKLSAg
ICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0gICAgfQotCi0gICAgdmdEZXN0cm95UGF0aChw
YXRoKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZH
OjpkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMs
IFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKLXsKLSAgICBBU1NFUlQobV9zdGF0ZSk7
Ci0KLSAgICBWR2JpdGZpZWxkIHBhaW50TW9kZXMgPSAwOwotICAgIGlmICghbV9zdGF0ZS0+c3Ry
b2tlRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRNb2RlcyB8PSBWR19TVFJPS0VfUEFUSDsKLSAg
ICBpZiAoIW1fc3RhdGUtPmZpbGxEaXNhYmxlZCgpKQotICAgICAgICBwYWludE1vZGVzIHw9IFZH
X0ZJTExfUEFUSDsKLQotICAgIHBhaW50TW9kZXMgJj0gc3BlY2lmaWVkUGFpbnRNb2RlczsKLQot
ICAgIGlmICghcGFpbnRNb2RlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdXJmYWNlLT5t
YWtlQ3VycmVudCgpOwotCi0gICAgLy8gUGF0aCBzZWdtZW50czogYWxsIHBvaW50cyArICJjbG9z
ZSBwYXRoIi4KLSAgICBjb25zdCBWR2ludCBudW1TZWdtZW50cyA9IG51bVBvaW50cyArIDE7Ci0g
ICAgY29uc3QgVkdpbnQgbnVtQ29vcmRpbmF0ZXMgPSBudW1Qb2ludHMgKiAyOwotCi0gICAgVkdQ
YXRoIHBhdGggPSB2Z0NyZWF0ZVBhdGgoCi0gICAgICAgIFZHX1BBVEhfRk9STUFUX1NUQU5EQVJE
LCBWR19QQVRIX0RBVEFUWVBFX0YsCi0gICAgICAgIDEuMCAvKiBzY2FsZSAqLywgMC4wIC8qIGJp
YXMgKi8sCi0gICAgICAgIG51bVNlZ21lbnRzIC8qIGV4cGVjdGVkIG51bWJlciBvZiBzZWdtZW50
cyAqLywKLSAgICAgICAgbnVtQ29vcmRpbmF0ZXMgLyogZXhwZWN0ZWQgbnVtYmVyIG9mIHRvdGFs
IGNvb3JkaW5hdGVzICovLAotICAgICAgICBWR19QQVRIX0NBUEFCSUxJVFlfQVBQRU5EX1RPKTsK
LSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIFZlY3RvcjxWR2Zsb2F0PiB2Z1BvaW50
cyhudW1Db29yZGluYXRlcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHM7ICsr
aSkgewotICAgICAgICB2Z1BvaW50c1tpKjJdICAgICA9IHBvaW50c1tpXS54KCk7Ci0gICAgICAg
IHZnUG9pbnRzW2kqMiArIDFdID0gcG9pbnRzW2ldLnkoKTsKLSAgICB9Ci0KLSAgICBpZiAodmd1
UG9seWdvbihwYXRoLCB2Z1BvaW50cy5kYXRhKCksIG51bVBvaW50cywgVkdfVFJVRSAvKiBjbG9z
ZWQgKi8pID09IFZHVV9OT19FUlJPUikgewotICAgICAgICB2Z0RyYXdQYXRoKHBhdGgsIHBhaW50
TW9kZXMpOwotICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLSAgICB9Ci0KLSAgICB2Z0Rl
c3Ryb3lQYXRoKHBhdGgpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotfQotCi12b2lkIFBh
aW50ZXJPcGVuVkc6OmRyYXdJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMpCi17Ci0gICAgQVNTRVJUKG1f
c3RhdGUpOwotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIC8vIElmIGJ1ZmZl
cnMgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIE9wZW5WRyBpbWFnZSBzaXplcywKLSAg
ICAvLyB3ZSBzcGxpdCB0aGVtIGludG8gdGlsZXMuCi0gICAgSW50UmVjdCBkcmF3blRpbGVzID0g
dGlsZWRJbWFnZS0+dGlsZXNJblJlY3Qoc3JjKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3JjVG9E
c3RUcmFuc2Zvcm1hdGlvbiA9IG1ha2VNYXBCZXR3ZWVuUmVjdHMoCi0gICAgICAgIEZsb2F0UmVj
dChGbG9hdFBvaW50KDAuMCwgMC4wKSwgc3JjLnNpemUoKSksIGRzdCk7Ci0gICAgc3JjVG9Ec3RU
cmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUoLXNyYy54KCksIC1zcmMueSgpKTsKLQotICAgIGZvciAo
aW50IHlJbmRleCA9IGRyYXduVGlsZXMueSgpOyB5SW5kZXggPCBkcmF3blRpbGVzLmJvdHRvbSgp
OyArK3lJbmRleCkgewotICAgICAgICBmb3IgKGludCB4SW5kZXggPSBkcmF3blRpbGVzLngoKTsg
eEluZGV4IDwgZHJhd25UaWxlcy5yaWdodCgpOyArK3hJbmRleCkgewotICAgICAgICAgICAgLy8g
VGhlIHNyY1RpbGUgcmVjdGFuZ2xlIGlzIGFuIGFsaWduZWQgdGlsZSBjcm9wcGVkIGJ5IHRoZSBz
cmMgcmVjdGFuZ2xlLgotICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGUodGlsZWRJbWFnZS0+dGls
ZVJlY3QoeEluZGV4LCB5SW5kZXgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNUaWxlID0g
aW50ZXJzZWN0aW9uKHNyYywgdGlsZSk7Ci0KLSAgICAgICAgICAgIHNhdmUoKTsKLQotICAgICAg
ICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGRyYXduIGluIGZ1bGwsIGFsbCB3ZSBuZWVkIGlzIHRo
ZSBwcm9wZXIgdHJhbnNmb3JtYXRpb24KLSAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGdldCBp
dCBkcmF3biBhdCB0aGUgcmlnaHQgc3BvdCBvbiB0aGUgc3VyZmFjZS4KLSAgICAgICAgICAgIGNv
bmNhdFRyYW5zZm9ybWF0aW9uKEFmZmluZVRyYW5zZm9ybShzcmNUb0RzdFRyYW5zZm9ybWF0aW9u
KS50cmFuc2xhdGUodGlsZS54KCksIHRpbGUueSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIElmIG9u
bHkgYSBwYXJ0IG9mIHRoZSB0aWxlIGlzIGRyYXduLCB3ZSBhbHNvIG5lZWQgdG8gY2xpcCB0aGUg
c3VyZmFjZS4KLSAgICAgICAgICAgIGlmIChzcmNUaWxlICE9IHRpbGUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBQdXQgYm91bmRhcmllcyByZWxhdGl2ZSB0byB0aWxlIG9yaWdpbiwgYXMgd2UgYWxy
ZWFkeQotICAgICAgICAgICAgICAgIC8vIHRyYW5zbGF0ZWQgdG8gKHgsIHkpIHdpdGggdGhlIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeC4KLSAgICAgICAgICAgICAgICBzcmNUaWxlLm1vdmUoLXRpbGUu
eCgpLCAtdGlsZS55KCkpOwotICAgICAgICAgICAgICAgIGludGVyc2VjdENsaXBSZWN0KHNyY1Rp
bGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWR0ltYWdlIGltYWdlID0gdGlsZWRJ
bWFnZS0+dGlsZSh4SW5kZXgsIHlJbmRleCk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2UgIT0gVkdf
SU5WQUxJRF9IQU5ETEUpIHsKLSAgICAgICAgICAgICAgICB2Z0RyYXdJbWFnZShpbWFnZSk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmZGVmIE9QRU5W
R19WRVJTSU9OXzFfMQotdm9pZCBQYWludGVyT3BlblZHOjpkcmF3VGV4dChWR0ZvbnQgdmdGb250
LCBWZWN0b3I8Vkd1aW50PiYgY2hhcmFjdGVycywgVkdmbG9hdCogYWRqdXN0bWVudHNYLCBWR2Zs
b2F0KiBhZGp1c3RtZW50c1ksIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIEFTU0VS
VChtX3N0YXRlKTsKLQotICAgIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IDA7Ci0KLSAgICBpZiAo
bV9zdGF0ZS0+dGV4dERyYXdpbmdNb2RlICYgVGV4dE1vZGVGaWxsICYmICFtX3N0YXRlLT5maWxs
RGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRNb2RlcyB8PSBWR19GSUxMX1BBVEg7Ci0gICAgaWYg
KG1fc3RhdGUtPnRleHREcmF3aW5nTW9kZSAmIFRleHRNb2RlU3Ryb2tlICYmICFtX3N0YXRlLT5z
dHJva2VEaXNhYmxlZCgpKQotICAgICAgICBwYWludE1vZGVzIHw9IFZHX1NUUk9LRV9QQVRIOwot
Ci0gICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAgRmxvYXRQb2ludCBlZmZlY3Rp
dmVQb2ludCA9IG1fc3RhdGUtPnN1cmZhY2VUcmFuc2Zvcm1hdGlvbi5tYXBQb2ludChwb2ludCk7
Ci0gICAgRmxvYXRQb2ludCBwID0gcG9pbnQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtKiBvcmlnaW5h
bFRyYW5zZm9ybWF0aW9uID0gMDsKLQotICAgIC8vIEluIGNhc2UgdGhlIGZvbnQgaXNuJ3QgZHJh
d24gYXQgYSBwaXhlbC1leGFjdCBiYXNlbGluZSBhbmQgd2UgY2FuIGVhc2lseQotICAgIC8vIGZp
eCB0aGF0ICh3aGljaCBpcyB0aGUgY2FzZSBmb3Igbm9uLXJvdGF0ZWQgYWZmaW5lIHRyYW5zZm9y
bXMpLCBsZXQncwotICAgIC8vIGFsaWduIHRoZSBzdGFydGluZyBwb2ludCB0byB0aGUgcGl4ZWwg
Ym91bmRhcnkgaW4gb3JkZXIgdG8gcHJldmVudAotICAgIC8vIGZvbnQgcmVuZGVyaW5nIGlzc3Vl
cyBzdWNoIGFzIGdseXBocyB0aGF0IGFwcGVhciBvZmYgYnkgYSBwaXhlbC4KLSAgICAvLyBUaGlz
IGNhdXNlcyB1cyB0byBoYXZlIGluY29uc2lzdGVudCBzcGFjaW5nIGJldHdlZW4gYmFzZWxpbmVz
IGluIGEKLSAgICAvLyBsYXJnZXIgcGFyYWdyYXBoLCBidXQgdGhhdCBzZWVtcyB0byBiZSB0aGUg
bGVhc3Qgb2YgYWxsIGV2aWxzLgotICAgIGlmICgoZm1vZChlZmZlY3RpdmVQb2ludC54KCkgKyAw
LjAxLCAxLjApID4gMC4wMiB8fCBmbW9kKGVmZmVjdGl2ZVBvaW50LnkoKSArIDAuMDEsIDEuMCkg
PiAwLjAyKQotICAgICAgICAmJiBpc05vblJvdGF0ZWRBZmZpbmVUcmFuc2Zvcm1hdGlvbihtX3N0
YXRlLT5zdXJmYWNlVHJhbnNmb3JtYXRpb24pKQotICAgIHsKLSAgICAgICAgb3JpZ2luYWxUcmFu
c2Zvcm1hdGlvbiA9IG5ldyBBZmZpbmVUcmFuc2Zvcm0obV9zdGF0ZS0+c3VyZmFjZVRyYW5zZm9y
bWF0aW9uKTsKLSAgICAgICAgc2V0VHJhbnNmb3JtYXRpb24oQWZmaW5lVHJhbnNmb3JtKAotICAg
ICAgICAgICAgbV9zdGF0ZS0+c3VyZmFjZVRyYW5zZm9ybWF0aW9uLmEoKSwgMCwKLSAgICAgICAg
ICAgIDAsIG1fc3RhdGUtPnN1cmZhY2VUcmFuc2Zvcm1hdGlvbi5kKCksCi0gICAgICAgICAgICBy
b3VuZGYoZWZmZWN0aXZlUG9pbnQueCgpKSwgcm91bmRmKGVmZmVjdGl2ZVBvaW50LnkoKSkpKTsK
LSAgICAgICAgcCA9IEZsb2F0UG9pbnQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBWR2Zsb2F0IHZn
UG9pbnRbMl0gPSB7IHAueCgpLCBwLnkoKSB9OwotICAgIHZnU2V0ZnYoVkdfR0xZUEhfT1JJR0lO
LCAyLCB2Z1BvaW50KTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIHZnRHJhd0ds
eXBocyh2Z0ZvbnQsIGNoYXJhY3RlcnMuc2l6ZSgpLCBjaGFyYWN0ZXJzLmRhdGEoKSwKLSAgICAg
ICAgYWRqdXN0bWVudHNYLCBhZGp1c3RtZW50c1ksIHBhaW50TW9kZXMsIFZHX1RSVUUgLyogYWxs
b3cgYXV0b2hpbnRpbmcgKi8pOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotCi0gICAgaWYg
KG9yaWdpbmFsVHJhbnNmb3JtYXRpb24pIHsKLSAgICAgICAgc2V0VHJhbnNmb3JtYXRpb24oKm9y
aWdpbmFsVHJhbnNmb3JtYXRpb24pOwotICAgICAgICBkZWxldGUgb3JpZ2luYWxUcmFuc2Zvcm1h
dGlvbjsKLSAgICB9Ci19Ci0jZW5kaWYKLQotVGlsZWRJbWFnZU9wZW5WRyogUGFpbnRlck9wZW5W
Rzo6YXNOZXdOYXRpdmVJbWFnZShjb25zdCBJbnRSZWN0JiBzcmMsIFZHSW1hZ2VGb3JtYXQgZm9y
bWF0KQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICBtX3N1cmZhY2UtPnNoYXJlZFN1cmZh
Y2UoKS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIGNvbnN0IEludFNpemUgdmdNYXhJbWFnZVNpemUo
dmdHZXRpKFZHX01BWF9JTUFHRV9XSURUSCksIHZnR2V0aShWR19NQVhfSU1BR0VfSEVJR0hUKSk7
Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBp
bnRlcnNlY3Rpb24oc3JjLCBJbnRSZWN0KDAsIDAsIG1fc3VyZmFjZS0+d2lkdGgoKSwgbV9zdXJm
YWNlLT5oZWlnaHQoKSkpOwotICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSBuZXcg
VGlsZWRJbWFnZU9wZW5WRyhyZWN0LnNpemUoKSwgdmdNYXhJbWFnZVNpemUpOwotCi0gICAgY29u
c3QgaW50IG51bUNvbHVtbnMgPSB0aWxlZEltYWdlLT5udW1Db2x1bW5zKCk7Ci0gICAgY29uc3Qg
aW50IG51bVJvd3MgPSB0aWxlZEltYWdlLT5udW1Sb3dzKCk7Ci0KLSAgICAvLyBDcmVhdGUgdGhl
IGltYWdlcyBhcyByZXNvdXJjZXMgb2YgdGhlIHNoYXJlZCBzdXJmYWNlL2NvbnRleHQuCi0gICAg
Zm9yIChpbnQgeUluZGV4ID0gMDsgeUluZGV4IDwgbnVtUm93czsgKyt5SW5kZXgpIHsKLSAgICAg
ICAgZm9yIChpbnQgeEluZGV4ID0gMDsgeEluZGV4IDwgbnVtQ29sdW1uczsgKyt4SW5kZXgpIHsK
LSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlZEltYWdlLT50aWxlUmVjdCh4SW5k
ZXgsIHlJbmRleCk7Ci0gICAgICAgICAgICBWR0ltYWdlIGltYWdlID0gdmdDcmVhdGVJbWFnZShm
b3JtYXQsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBWR19JTUFHRV9RVUFM
SVRZX0ZBU1RFUik7Ci0gICAgICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgICAg
ICAgICAgdGlsZWRJbWFnZS0+c2V0VGlsZSh4SW5kZXgsIHlJbmRleCwgaW1hZ2UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gRmlsbCB0aGUgaW1hZ2UgY29udGVudHMgd2l0aCBvdXIgb3du
IHN1cmZhY2UvY29udGV4dCBiZWluZyBjdXJyZW50LgotICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJl
bnQoKTsKLQotICAgIGZvciAoaW50IHlJbmRleCA9IDA7IHlJbmRleCA8IG51bVJvd3M7ICsreUlu
ZGV4KSB7Ci0gICAgICAgIGZvciAoaW50IHhJbmRleCA9IDA7IHhJbmRleCA8IG51bUNvbHVtbnM7
ICsreEluZGV4KSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZWRJbWFnZS0+
dGlsZVJlY3QoeEluZGV4LCB5SW5kZXgpOwotCi0gICAgICAgICAgICB2Z0dldFBpeGVscyh0aWxl
ZEltYWdlLT50aWxlKHhJbmRleCwgeUluZGV4KSwgMCwgMCwKLSAgICAgICAgICAgICAgICByZWN0
LngoKSArIHRpbGVSZWN0LngoKSwgcmVjdC55KCkgKyB0aWxlUmVjdC55KCksCi0gICAgICAgICAg
ICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
QVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGls
ZWRJbWFnZTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpzYXZlKFBhaW50ZXJPcGVuVkc6OlNh
dmVNb2RlIHNhdmVNb2RlKQotewotICAgIEFTU0VSVChtX3N0YXRlKTsKLQotICAgIC8vIElmIHRo
ZSB1bmRlcmx5aW5nIGNvbnRleHQvc3VyZmFjZSB3YXMgc3dpdGNoZWQgYXdheSBieSBzb21lb25l
IHdpdGhvdXQKLSAgICAvLyB0ZWxsaW5nIHVzLCBpdCBtaWdodCBub3QgY29ycmVzcG9uZCB0byB0
aGUgb25lIGFzc2lnbmVkIHRvIHRoaXMgcGFpbnRlci4KLSAgICAvLyBTd2l0Y2ggYmFjayBzbyB3
ZSBjYW4gc2F2ZSB0aGUgc3RhdGUgcHJvcGVybHkuIChTaG91bGQgaGFwcGVuIHJhcmVseS4pCi0g
ICAgLy8gVXNlIERvbnRTYXZlT3JBcHBseVBhaW50ZXJTdGF0ZSBtb2RlIGluIG9yZGVyIHRvIGF2
b2lkIHJlY3Vyc2lvbi4KLSAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KFN1cmZhY2VPcGVuVkc6
OkRvbnRTYXZlT3JBcHBseVBhaW50ZXJTdGF0ZSk7Ci0KLSAgICBpZiAoc2F2ZU1vZGUgPT0gUGFp
bnRlck9wZW5WRzo6Q3JlYXRlTmV3U3RhdGUpIHsKLSAgICAgICAgbV9zdGF0ZS0+c2F2ZU1hc2tJ
Zk5lY2Vzc2FyeSh0aGlzKTsKLSAgICAgICAgUGxhdGZvcm1QYWludGVyU3RhdGUqIHN0YXRlID0g
bmV3IFBsYXRmb3JtUGFpbnRlclN0YXRlKCptX3N0YXRlKTsKLSAgICAgICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZChzdGF0ZSk7Ci0gICAgICAgIG1fc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwot
ICAgIH0gZWxzZSBpZiAoc2F2ZU1vZGUgPT0gUGFpbnRlck9wZW5WRzo6Q3JlYXRlTmV3U3RhdGVX
aXRoUGFpbnRTdGF0ZU9ubHkpIHsKLSAgICAgICAgbV9zdGF0ZS0+c2F2ZU1hc2tJZk5lY2Vzc2Fy
eSh0aGlzKTsKLSAgICAgICAgUGxhdGZvcm1QYWludGVyU3RhdGUqIHN0YXRlID0gbmV3IFBsYXRm
b3JtUGFpbnRlclN0YXRlKCk7Ci0gICAgICAgIHN0YXRlLT5jb3B5UGFpbnRTdGF0ZShtX3N0YXRl
KTsKLSAgICAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChzdGF0ZSk7Ci0gICAgICAgIG1fc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIH0gZWxzZSAvLyBpZiAoc2F2ZU1vZGUgPT0gUGFp
bnRlck9wZW5WRzo6S2VlcEN1cnJlbnRTdGF0ZSkKLSAgICAgICAgbV9zdGF0ZS0+c2F2ZU1hc2tJ
Zk5lY2Vzc2FyeSh0aGlzKTsKLX0KLQotdm9pZCBQYWludGVyT3BlblZHOjpyZXN0b3JlKCkKLXsK
LSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAyKTsKLSAgICBtX3N1cmZhY2UtPm1h
a2VDdXJyZW50KFN1cmZhY2VPcGVuVkc6OkRvbnRBcHBseVBhaW50ZXJTdGF0ZSk7Ci0KLSAgICBQ
bGF0Zm9ybVBhaW50ZXJTdGF0ZSogc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIG1f
c3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgZGVsZXRlIHN0YXRlOwotCi0gICAgbV9zdGF0
ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgbV9zdGF0ZS0+YXBwbHlTdGF0ZSh0aGlzKTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL1BhaW50ZXJPcGVuVkcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9QYWludGVyT3BlblZHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMTQ5
NGU1YTgzNTE0MzlkZjdkYzM2ODIzZTgyYzVjMWRkNzFiNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUGFpbnRlck9wZW5WR19oCi0jZGVmaW5l
IFBhaW50ZXJPcGVuVkdfaAotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPG9wZW52Zy5oPgotCi0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9h
dFJlY3Q7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFBhdGg7Ci1jbGFz
cyBTdXJmYWNlT3BlblZHOwotY2xhc3MgVGlsZWRJbWFnZU9wZW5WRzsKLQotc3RydWN0IFBsYXRm
b3JtUGFpbnRlclN0YXRlOwotCi1jbGFzcyBQYWludGVyT3BlblZHIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQYWludGVyT3BlblZHKTsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgU3Vy
ZmFjZU9wZW5WRzsKLSAgICBmcmllbmQgc3RydWN0IFBsYXRmb3JtUGFpbnRlclN0YXRlOwotCi0g
ICAgZW51bSBTYXZlTW9kZSB7Ci0gICAgICAgIENyZWF0ZU5ld1N0YXRlLAotICAgICAgICBLZWVw
Q3VycmVudFN0YXRlLAotICAgICAgICBDcmVhdGVOZXdTdGF0ZVdpdGhQYWludFN0YXRlT25seSAv
LyBpbnRlcm5hbCB1c2FnZSBvbmx5LCBkbyBub3QgdXNlIG91dHNpZGUgUGFpbnRlck9wZW5WRwot
ICAgIH07Ci0gICAgZW51bSBDbGlwT3BlcmF0aW9uIHsKLSAgICAgICAgSW50ZXJzZWN0Q2xpcCA9
IFZHX0lOVEVSU0VDVF9NQVNLLAotICAgICAgICBTdWJ0cmFjdENsaXAgPSBWR19TVUJUUkFDVF9N
QVNLCi0gICAgfTsKLQotICAgIFBhaW50ZXJPcGVuVkcoKTsKLSAgICBQYWludGVyT3BlblZHKFN1
cmZhY2VPcGVuVkcqKTsKLSAgICB+UGFpbnRlck9wZW5WRygpOwotCi0gICAgdm9pZCBiZWdpbihT
dXJmYWNlT3BlblZHKik7Ci0gICAgdm9pZCBlbmQoKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm1hdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0VHJhbnNmb3JtYXRpb24oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBjb25jYXRUcmFuc2Zvcm1hdGlvbihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zZm9ybVBhdGgoVkdQYXRo
IGRzdCwgVkdQYXRoIHNyYywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgZmxvYXQgb3BhY2l0eSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlj
a25lc3MoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0gICAg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlKTsKLQotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5Jiwg
ZmxvYXQgZGFzaE9mZnNldCk7Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOwotICAgIHZv
aWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7
Ci0KLSAgICBDb2xvciBzdHJva2VDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0U3Ryb2tlQ29s
b3IoY29uc3QgQ29sb3ImKTsKLQotICAgIENvbG9yIGZpbGxDb2xvcigpIGNvbnN0OwotICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICBpbnQgdGV4dERyYXdpbmdNb2Rl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpOwotCi0gICAg
Ym9vbCBhbnRpYWxpYXNpbmdFbmFibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbnRpYWxpYXNp
bmdFbmFibGVkKGJvb2wpOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBW
R2JpdGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsK
LSAgICB2b2lkIGRyYXdSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbnRTaXpl
JiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9t
TGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9
IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwotICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IEludFBvaW50JiB0byk7Ci0gICAgdm9pZCBkcmF3QXJj
KGNvbnN0IEludFJlY3QmIGVsbGlwc2VCb3VuZHMsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVT
cGFuLCBWR2JpdGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BB
VEgpKTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGJvdW5kcywgVkdiaXRm
aWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7Ci0gICAg
dm9pZCBkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFU
SCkpOwotICAgIHZvaWQgZHJhd0ltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMpOwotI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFf
MQotICAgIHZvaWQgZHJhd1RleHQoVkdGb250LCBWZWN0b3I8Vkd1aW50PiYgY2hhcmFjdGVycywg
VkdmbG9hdCogYWRqdXN0bWVudHNYLCBWR2Zsb2F0KiBhZGp1c3RtZW50c1ksIGNvbnN0IEZsb2F0
UG9pbnQmKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxl
RmFjdG9ycyk7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgcmFkaWFucyk7Ci0gICAgdm9pZCB0cmFu
c2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KTsKLQotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFU
SCksIFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsKLQotICAgIHZvaWQgaW50ZXJz
ZWN0Q2xpcFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQ
YXRoJiwgUGFpbnRlck9wZW5WRzo6Q2xpcE9wZXJhdGlvbiwgV2luZFJ1bGUgY2xpcFJ1bGUgPSBS
VUxFX05PTlpFUk8pOwotCi0gICAgVGlsZWRJbWFnZU9wZW5WRyogYXNOZXdOYXRpdmVJbWFnZShj
b25zdCBJbnRSZWN0JiBzcmMsIFZHSW1hZ2VGb3JtYXQpOwotCi0gICAgdm9pZCBzYXZlKFBhaW50
ZXJPcGVuVkc6OlNhdmVNb2RlIHNhdmVNb2RlID0gQ3JlYXRlTmV3U3RhdGUpOwotICAgIHZvaWQg
cmVzdG9yZSgpOwotCi0gICAgU3VyZmFjZU9wZW5WRyogc3VyZmFjZSgpIHsgcmV0dXJuIG1fc3Vy
ZmFjZTsgfQotICAgIHZvaWQgYmxpdFRvU3VyZmFjZSgpOwotCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVzdHJveVBhaW50ZXJTdGF0ZXMoKTsKLSAgICB2b2lkIGFwcGx5U3RhdGUoKTsKLQotICAgIHZv
aWQgaW50ZXJzZWN0U2Npc3NvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0g
ICAgVmVjdG9yPFBsYXRmb3JtUGFpbnRlclN0YXRlKj4gbV9zdGF0ZVN0YWNrOwotICAgIFBsYXRm
b3JtUGFpbnRlclN0YXRlKiBtX3N0YXRlOwotICAgIFN1cmZhY2VPcGVuVkcqIG1fc3VyZmFjZTsK
LX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkzMTRiYTc4NjVjN2YyNzY5MzNjNDE0NTVhNDM5MGExYTcwYjgwOGIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1BhdGhPcGVuVkcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDk3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBhdGguaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFpbnRlck9wZW5WRy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtUGF0aE9wZW5WRy5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2lu
Y2x1ZGUgIlZHVXRpbHMuaCIKLQotI2luY2x1ZGUgPG9wZW52Zy5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNkZWZpbmUg
V0VCS0lUX1ZHX1BBVEhfQ0FQQUJJTElUSUVTIFZHX1BBVEhfQ0FQQUJJTElUWV9BTEwKLQotI2Rl
ZmluZSBGVVpaWV9DT01QQVJFKG51bWJlciwgcmVmZXJlbmNlLCBkZWx0YSkgXAotICAgIChudW1i
ZXIgPj0gKHJlZmVyZW5jZSAtIGRlbHRhKSAmJiBudW1iZXIgPD0gKHJlZmVyZW5jZSArIGRlbHRh
KSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbGF0Zm9ybVBhdGhPcGVuVkc6OlBsYXRmb3Jt
UGF0aE9wZW5WRygpCi0gICAgOiBTaGFyZWRSZXNvdXJjZU9wZW5WRygpCi17Ci0gICAgY3JlYXRl
UGF0aCgpOwotfQotCi1QbGF0Zm9ybVBhdGhPcGVuVkc6OlBsYXRmb3JtUGF0aE9wZW5WRyhjb25z
dCBQbGF0Zm9ybVBhdGhPcGVuVkcmIG90aGVyKQotICAgIDogU2hhcmVkUmVzb3VyY2VPcGVuVkco
KQotICAgICwgbV9jdXJyZW50UG9pbnQob3RoZXIubV9jdXJyZW50UG9pbnQpCi0gICAgLCBtX3N1
YnBhdGhTdGFydFBvaW50KG90aGVyLm1fc3VicGF0aFN0YXJ0UG9pbnQpCi17Ci0gICAgY3JlYXRl
UGF0aCgpOwotICAgIC8vIG1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKSBpcyBjYWxsZWQg
YnkgY3JlYXRlUGF0aCgpLCBzbyBub3QgbmVjZXNzYXJ5IGhlcmUuCi0gICAgdmdBcHBlbmRQYXRo
KG1fdmdQYXRoLCBvdGhlci5tX3ZnUGF0aCk7Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci19
Ci0KLVBsYXRmb3JtUGF0aE9wZW5WRyYgUGxhdGZvcm1QYXRoT3BlblZHOjpvcGVyYXRvcj0oY29u
c3QgUGxhdGZvcm1QYXRoT3BlblZHJiBvdGhlcikKLXsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMp
IHsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgLy8gbWFrZUNvbXBhdGlibGVDb250ZXh0Q3Vy
cmVudCgpIGlzIGNhbGxlZCBieSBjbGVhcigpLCBzbyBub3QgbmVjZXNzYXJ5IGhlcmUuCi0gICAg
ICAgIHZnQXBwZW5kUGF0aChtX3ZnUGF0aCwgb3RoZXIubV92Z1BhdGgpOwotICAgICAgICBBU1NF
UlRfVkdfTk9fRVJST1IoKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1QbGF0Zm9y
bVBhdGhPcGVuVkc6On5QbGF0Zm9ybVBhdGhPcGVuVkcoKQotewotICAgIG1ha2VDb21wYXRpYmxl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZnRGVzdHJveVBhdGgobV92Z1BhdGgpOwotICAgIEFT
U0VSVF9WR19OT19FUlJPUigpOwotfQotCi12b2lkIFBsYXRmb3JtUGF0aE9wZW5WRzo6Y2xlYXIo
KQotewotICAgIG1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZnQ2xlYXJQ
YXRoKG1fdmdQYXRoLCBXRUJLSVRfVkdfUEFUSF9DQVBBQklMSVRJRVMpOwotICAgIEFTU0VSVF9W
R19OT19FUlJPUigpOwotCi0gICAgbV9zdWJwYXRoU3RhcnRQb2ludC5zZXRYKDApOwotICAgIG1f
c3VicGF0aFN0YXJ0UG9pbnQuc2V0WSgwKTsKLSAgICBtX2N1cnJlbnRQb2ludCA9IG1fc3VicGF0
aFN0YXJ0UG9pbnQ7Ci19Ci0KLXZvaWQgUGxhdGZvcm1QYXRoT3BlblZHOjpjcmVhdGVQYXRoKCkK
LXsKLSAgICBtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIG1fdmdQYXRoID0gdmdD
cmVhdGVQYXRoKAotICAgICAgICBWR19QQVRIX0ZPUk1BVF9TVEFOREFSRCwgVkdfUEFUSF9EQVRB
VFlQRV9GLAotICAgICAgICAxLjAgLyogc2NhbGUgKi8sIDAuMCAvKiBiaWFzICovLAotICAgICAg
ICAwIC8qIGV4cGVjdGVkIG51bWJlciBvZiBzZWdtZW50cyAqLywKLSAgICAgICAgMCAvKiBleHBl
Y3RlZCBudW1iZXIgb2YgdG90YWwgY29vcmRpbmF0ZXMgKi8sCi0gICAgICAgIFdFQktJVF9WR19Q
QVRIX0NBUEFCSUxJVElFUyk7Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci19Ci0KLQotUGF0
aDo6UGF0aCgpCi17Ci0gICAgbV9wYXRoID0gbmV3IFBsYXRmb3JtUGF0aE9wZW5WRygpOwotfQot
Ci1QYXRoOjp+UGF0aCgpCi17Ci0gICAgZGVsZXRlIG1fcGF0aDsKLX0KLQotUGF0aDo6UGF0aChj
b25zdCBQYXRoJiBvdGhlcikKLXsKLSAgICBtX3BhdGggPSBuZXcgUGxhdGZvcm1QYXRoT3BlblZH
KCoob3RoZXIubV9wYXRoKSk7Ci19Ci0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRo
JiBvdGhlcikKLXsKLSAgICAqbV9wYXRoID0gKihvdGhlci5tX3BhdGgpOwotICAgIHJldHVybiAq
dGhpczsKLX0KLQotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKLXsKLSAg
ICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgd2F5IHRvIHJldHVybiB0aGUgY3VycmVudCBwb2ludCBv
ZiB0aGUgc3VicGF0aD8KLSAgICByZXR1cm4gbV9jdXJyZW50UG9pbnQ7Ci19Ci0KLQotYm9vbCBQ
YXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgLy8gT3BlblZHIGhhcyBubyBwYXRo
LWNvbnRhaW5zIGZ1bmN0aW9uLCBzbyBmb3Igbm93IHdlIGFwcHJveGltYXRlIGJ5Ci0gICAgLy8g
dXNpbmcgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIHBhdGguCi0gICAgcmV0dXJuIGJvdW5kaW5n
UmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKLX0KLQotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhT
dHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICAvLyBPcGVuVkcgaGFzIG5vIHBhdGgt
Y29udGFpbnMgZnVuY3Rpb24sIHNvIGZvciBub3cgd2UgYXBwcm94aW1hdGUgYnkKLSAgICAvLyB1
c2luZyB0aGUgc3Ryb2tlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIHBhdGguCi0gICAgcmV0dXJuIChj
b25zdF9jYXN0PFBhdGgqPih0aGlzKSktPnN0cm9rZUJvdW5kaW5nUmVjdCgpLmNvbnRhaW5zKHBv
aW50KTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQot
ewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1hdGlvbjsKLSAgICB0cmFuc2Zvcm1hdGlv
bi50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICB0cmFuc2Zvcm0o
dHJhbnNmb3JtYXRpb24pOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29u
c3QKLXsKLSAgICBWR2Zsb2F0IG1pblg7Ci0gICAgVkdmbG9hdCBtaW5ZOwotICAgIFZHZmxvYXQg
d2lkdGg7Ci0gICAgVkdmbG9hdCBoZWlnaHQ7Ci0KLSAgICBtX3BhdGgtPm1ha2VDb21wYXRpYmxl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICB2Z1BhdGhCb3VuZHMobV9wYXRoLT52Z1BhdGgoKSwgJm1p
blgsICZtaW5ZLCAmd2lkdGgsICZoZWlnaHQpOwotICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwot
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50KG1pblgsIG1pblkpLCBGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCkpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotCi0gICAgLy8gdmdQYXRoQm91bmRzKCkgaWdub3JlcyBzdHJva2UgcGFyYW1ldGVycywg
YW5kIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlCi0gICAgLy8gYW4gYXBwcm94aW1hdGlvbiB0aGF0
IHRha2VzIHN0cm9rZSBwYXJhbWV0ZXJzIGludG8gYWNjb3VudC4KLSAgICByZXR1cm4gYm91bmRp
bmdSZWN0KCk7Ci19Ci0KLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdtZW50c1tdID0geyBWR19NT1ZF
X1RPX0FCUyB9OwotICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsgcG9pbnQueCgpLCBw
b2ludC55KCkgfTsKLQotICAgIG1fcGF0aC0+bWFrZUNvbXBhdGlibGVDb250ZXh0Q3VycmVudCgp
OwotICAgIHZnQXBwZW5kUGF0aERhdGEobV9wYXRoLT52Z1BhdGgoKSwgMSwgcGF0aFNlZ21lbnRz
LCBwYXRoRGF0YSk7Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICBtX3BhdGgtPm1f
Y3VycmVudFBvaW50ID0gbV9wYXRoLT5tX3N1YnBhdGhTdGFydFBvaW50ID0gcG9pbnQ7Ci19Ci0K
LXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIHN0
YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdtZW50c1tdID0geyBWR19MSU5FX1RPX0FCUyB9Owot
ICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfTsK
LQotICAgIG1fcGF0aC0+bWFrZUNvbXBhdGlibGVDb250ZXh0Q3VycmVudCgpOwotICAgIHZnQXBw
ZW5kUGF0aERhdGEobV9wYXRoLT52Z1BhdGgoKSwgMSwgcGF0aFNlZ21lbnRzLCBwYXRoRGF0YSk7
Ci0gICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50
ID0gcG9pbnQ7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsgVkdfUVVBRF9UT19BQlMgfTsKLSAg
ICBjb25zdCBWR2Zsb2F0IHBhdGhEYXRhW10gPSB7IGNvbnRyb2xQb2ludC54KCksIGNvbnRyb2xQ
b2ludC55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpIH07Ci0KLSAgICBtX3BhdGgtPm1h
a2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2Z0FwcGVuZFBhdGhEYXRhKG1fcGF0
aC0+dmdQYXRoKCksIDEsIHBhdGhTZWdtZW50cywgcGF0aERhdGEpOwotICAgIEFTU0VSVF9WR19O
T19FUlJPUigpOwotCi0gICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9IGVuZFBvaW50OwotfQot
Ci12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYg
ZW5kUG9pbnQpCi17Ci0gICAgc3RhdGljIGNvbnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7
IFZHX0NVQklDX1RPX0FCUyB9OwotICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsgY29u
dHJvbFBvaW50MS54KCksIGNvbnRyb2xQb2ludDEueSgpLCBjb250cm9sUG9pbnQyLngoKSwgY29u
dHJvbFBvaW50Mi55KCksIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpIH07Ci0KLSAgICBtX3Bh
dGgtPm1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2Z0FwcGVuZFBhdGhEYXRh
KG1fcGF0aC0+dmdQYXRoKCksIDEsIHBhdGhTZWdtZW50cywgcGF0aERhdGEpOwotICAgIEFTU0VS
VF9WR19OT19FUlJPUigpOwotCi0gICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9IGVuZFBvaW50
OwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgLy8gU2VlIGh0dHA6
Ly9waGlsaXAuaHRtbDUub3JnL3Rlc3RzL2NhbnZhcy9zdWl0ZS90ZXN0cy9zcGVjLmh0bWwjYXJj
dG8uCi0KLSAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludDAgPSBtX3BhdGgtPm1fY3VycmVudFBv
aW50OwotICAgIGlmICghcmFkaXVzIHx8IHBvaW50MCA9PSBwb2ludDEgfHwgcG9pbnQxID09IHBv
aW50MikgewotICAgICAgICBhZGRMaW5lVG8ocG9pbnQxKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEZsb2F0U2l6ZSB2MDEgPSBwb2ludDAgLSBwb2ludDE7Ci0gICAgRmxvYXRTaXpl
IHYyMSA9IHBvaW50MiAtIHBvaW50MTsKLQotICAgIC8vIHNpbihBIC0gQikgPSBzaW4oQSkgKiBj
b3MoQikgLSBzaW4oQikgKiBjb3MoQSkKLSAgICBkb3VibGUgY3Jvc3MgPSB2MDEud2lkdGgoKSAq
IHYyMS5oZWlnaHQoKSAtIHYwMS5oZWlnaHQoKSAqIHYyMS53aWR0aCgpOwotCi0gICAgaWYgKGZh
YnMoY3Jvc3MpIDwgMUUtMTApIHsKLSAgICAgICAgLy8gb24gb25lIGxpbmUKLSAgICAgICAgYWRk
TGluZVRvKHBvaW50MSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZDAx
ID0gaHlwb3QodjAxLndpZHRoKCksIHYwMS5oZWlnaHQoKSk7Ci0gICAgZG91YmxlIGQyMSA9IGh5
cG90KHYyMS53aWR0aCgpLCB2MjEuaGVpZ2h0KCkpOwotICAgIGRvdWJsZSBhbmdsZSA9IChwaURv
dWJsZSAtIGZhYnMoYXNpbihjcm9zcyAvIChkMDEgKiBkMjEpKSkpICogMC41OwotICAgIGRvdWJs
ZSBzcGFuID0gcmFkaXVzICogdGFuKGFuZ2xlKTsKLSAgICBkb3VibGUgcmF0ZSA9IHNwYW4gLyBk
MDE7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2ludChwb2ludDEueCgpICsg
djAxLndpZHRoKCkgKiByYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9pbnQxLnkoKSArIHYwMS5oZWlnaHQoKSAqIHJhdGUpOwotICAgIHJhdGUgPSBzcGFuIC8g
ZDIxOwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBGbG9hdFBvaW50KHBvaW50MS54KCkgKyB2
MjEud2lkdGgoKSAqIHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9pbnQxLnkoKSArIHYyMS5oZWlnaHQoKSAqIHJhdGUpOwotCi0gICAgLy8gRmE6IGxhcmdlIGFy
YyBmbGFnLCBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNDV0FSQ19UTyBhbmQgTENXQVJD
X1RPCi0gICAgLy8gICAgIHJlc3BlY3RpdmVseSBTQ0NXQVJDX1RPIGFuZCBMQ0NXQVJDX1RPIGFy
Y3MuIFdlIGFsd2F5cyB1c2Ugc21hbGwKLSAgICAvLyAgICAgYXJjcyBmb3IgYXJjVG8oKSwgYXMg
dGhlIGFyYyBpcyBkZWZpbmVkIGFzIHRoZSAic2hvcnRlc3QgYXJjIiBvZiB0aGUKLSAgICAvLyAg
ICAgY2lyY2xlIHNwZWNpZmllZCBpbiBIVE1MIDUuCi0KLSAgICAvLyBGczogc3dlZXAgZmxhZywg
c3BlY2lmeWluZyB3aGV0aGVyIHRoZSBhcmMgaXMgZHJhd24gaW4gaW5jcmVhc2luZyAodHJ1ZSkK
LSAgICAvLyAgICAgb3IgZGVjcmVhc2luZyAoMCkgZGlyZWN0aW9uLgotICAgIGNvbnN0IGJvb2wg
YW50aWNsb2Nrd2lzZSA9IGNyb3NzIDwgMDsKLQotICAgIC8vIFRyYW5zbGF0ZSB0aGUgbGFyZ2Ug
YXJjIGFuZCBzd2VlcCBmbGFncyBpbnRvIGFuIE9wZW5WRyBzZWdtZW50IGNvbW1hbmQuCi0gICAg
Y29uc3QgVkd1Ynl0ZSBzZWdtZW50Q29tbWFuZCA9IGFudGljbG9ja3dpc2UgPyBWR19TQ0NXQVJD
X1RPX0FCUyA6IFZHX1NDV0FSQ19UT19BQlM7Ci0KLSAgICBjb25zdCBWR3VieXRlIHBhdGhTZWdt
ZW50c1tdID0gewotICAgICAgICBWR19MSU5FX1RPX0FCUywKLSAgICAgICAgc2VnbWVudENvbW1h
bmQKLSAgICB9OwotICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsKLSAgICAgICAgc3Rh
cnRQb2ludC54KCksIHN0YXJ0UG9pbnQueSgpLAotICAgICAgICByYWRpdXMsIHJhZGl1cywgMCwg
ZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkKLSAgICB9OwotCi0gICAgbV9wYXRoLT5tYWtlQ29t
cGF0aWJsZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmdBcHBlbmRQYXRoRGF0YShtX3BhdGgtPnZn
UGF0aCgpLCAyLCBwYXRoU2VnbWVudHMsIHBhdGhEYXRhKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJS
T1IoKTsKLQotICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQgPSBlbmRQb2ludDsKLX0KLQotdm9p
ZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQotewotICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhT
ZWdtZW50c1tdID0geyBWR19DTE9TRV9QQVRIIH07Ci0gICAgLy8gcGF0aERhdGEgbXVzdCBub3Qg
YmUgMCwgYnV0IGNlcnRhaW4gY29tcGlsZXJzIGFsc28gZG9uJ3QgY3JlYXRlCi0gICAgLy8gemVy
by1zaXplIGFycmF5cy4gU28gbGV0J3MgdXNlIGEgcmFuZG9tIGFsaWduZWQgdmFsdWUgKHNpemVv
ZihWR2Zsb2F0KSksCi0gICAgLy8gaXQgd29uJ3QgYmUgYWNjZXNzZWQgYW55d2F5cyBhcyBWR19D
TE9TRV9QQVRIIGRvZXNuJ3QgdGFrZSBjb29yZGluYXRlcy4KLSAgICBzdGF0aWMgY29uc3QgVkdm
bG9hdCogcGF0aERhdGEgPSByZWludGVycHJldF9jYXN0PFZHZmxvYXQqPihzaXplb2YoVkdmbG9h
dCkpOwotCi0gICAgbV9wYXRoLT5tYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
dmdBcHBlbmRQYXRoRGF0YShtX3BhdGgtPnZnUGF0aCgpLCAxLCBwYXRoU2VnbWVudHMsIHBhdGhE
YXRhKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIG1fcGF0aC0+bV9jdXJyZW50
UG9pbnQgPSBtX3BhdGgtPm1fc3VicGF0aFN0YXJ0UG9pbnQ7Ci19Ci0KLXZvaWQgUGF0aDo6YWRk
QXJjKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFu
Z2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQotewotICAgIC8vIFRoZSBP
cGVuVkcgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgaW5mIGFzIHJhZGl1cyBvciBzdGFydC9lbmQg
YW5nbGUuCi0gICAgLy8gV2ViS2l0IHNlZW1zIHRvIHBhc3MgdGhvc2UgKGUuZy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQ5KSwKLSAgICAvLyBzbyBhYm9ydCBp
bnN0ZWFkIG9mIHJpc2tpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLgotICAgIGlmICghc3RkOjppc2Zp
bml0ZShyYWRpdXMpIHx8ICFzdGQ6OmlzZmluaXRlKHN0YXJ0QW5nbGUpIHx8ICFzdGQ6OmlzZmlu
aXRlKGVuZEFuZ2xlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIHNvbWUgcmVhc29u
LCB0aGUgSFRNTCA1IHNwZWMgZGVmaW5lcyB0aGUgYW5nbGUgYXMgZ29pbmcgY2xvY2t3aXNlCi0g
ICAgLy8gZnJvbSB0aGUgcG9zaXRpdmUgWCBheGlzIGluc3RlYWQgb2YgZ29pbmcgc3RhbmRhcmQg
YW50aWNsb2Nrd2lzZS4KLSAgICAvLyBTbyBsZXQncyBtYWtlIGl0IGEgcHJvcGVyIGFuZ2xlIGlu
IG9yZGVyIHRvIGtlZXAgc2FuaXR5LgotICAgIHN0YXJ0QW5nbGUgPSBmbW9kKCgyLjAgKiBwaURv
dWJsZSkgLSBzdGFydEFuZ2xlLCAyLjAgKiBwaURvdWJsZSk7Ci0gICAgZW5kQW5nbGUgPSBmbW9k
KCgyLjAgKiBwaURvdWJsZSkgLSBlbmRBbmdsZSwgMi4wICogcGlEb3VibGUpOwotCi0gICAgLy8g
TWFrZSBpdCBzbyB0aGF0IGVuZEFuZ2xlID4gc3RhcnRBbmdsZS4gZm1vZCgpIGFib3ZlIHRha2Vz
IGNhcmUgb2YKLSAgICAvLyBrZWVwaW5nIHRoZSBkaWZmZXJlbmNlIGJlbG93IDM2MCBkZWdyZWVz
LgotICAgIGlmIChlbmRBbmdsZSA8PSBzdGFydEFuZ2xlKQotICAgICAgICBlbmRBbmdsZSArPSAy
LjAgKiBwaURvdWJsZTsKLQotICAgIGNvbnN0IFZHZmxvYXQgYW5nbGVEZWx0YSA9IGFudGljbG9j
a3dpc2UKLSAgICAgICAgPyAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKQotICAgICAgICA6IChzdGFy
dEFuZ2xlIC0gZW5kQW5nbGUgKyAoMi4wICogcGlEb3VibGUpKTsKLQotICAgIC8vIE9wZW5WRyB1
c2VzIGVuZHBvaW50IHBhcmFtZXRlcml6YXRpb24gd2hpbGUgdGhpcyBtZXRob2QgcmVjZWl2ZXMg
aXRzCi0gICAgLy8gdmFsdWVzIGluIGNlbnRlciBwYXJhbWV0ZXJpemF0aW9uLiBJdCBsYWNrcyBh
biBlbGxpcHNlIHJvdGF0aW9uCi0gICAgLy8gcGFyYW1ldGVyIHNvIHdlIHVzZSAwIGZvciB0aGF0
LCBhbmQgYWxzbyB0aGUgcmFkaXVzIGlzIG9ubHkgYSBzaW5nbGUKLSAgICAvLyB2YWx1ZSB3aGlj
aCBtYWtlcyBmb3IgcmggPT0gcnYuIEluIG9yZGVyIHRvIGNvbnZlcnQgZnJvbSBlbmRwb2ludCB0
bwotICAgIC8vIGNlbnRlciBwYXJhbWV0ZXJpemF0aW9uLCB3ZSB1c2UgdGhlIGZvcm11bGFzIGZy
b20gdGhlIE9wZW5WRy9TVkcgc3BlY3M6Ci0KLSAgICAvLyAoeCx5KSA9IChjb3Mgcm90LCAtc2lu
IHJvdDsgc2luIHJvdCwgLWNvcyByb3QpICogKHJoICogY29zIGFuZ2xlLCBydiAqIHNpbiBhbmds
ZSkgKyAoY2VudGVyLngsIGNlbnRlci55KQotICAgIC8vIHJvdCBpcyAwLCB3aGljaCBzaW1wbGlm
aWVzIHRoaXMgYSBiaXQ6Ci0gICAgLy8gKHgseSkgPSAoMSwgMDsgMCwgLTEpICogKHJoICogY29z
IGFuZ2xlLCBydiAqIHNpbiBhbmdsZSkgKyAoY2VudGVyLngsIGNlbnRlci55KQotICAgIC8vICAg
ICAgID0gKDEgKiByaCAqIGNvcyBhbmdsZSArIDAgKiBydiAqIHNpbiBhbmdsZSwgMCAqIHJoICog
Y29zIGFuZ2xlICsgLTEgKiBydiAqIHNpbiBhbmdsZSkgKyAoY2VudGVyLngsIGNlbnRlci55KQot
ICAgIC8vICAgICAgID0gKHJoICogY29zIGFuZ2xlLCAtcnYgKiBzaW4gYW5nbGUpICsgKGNlbnRl
ci54LCBjZW50ZXIueSkKLSAgICAvLyAoU2V0IGFuZ2xlID0ge3N0YXJ0QW5nbGUsIGVuZEFuZ2xl
fSB0byByZXRyaWV2ZSB0aGUgcmVzcGVjdGl2ZSBlbmRwb2ludHMuKQotCi0gICAgY29uc3QgVkdm
bG9hdCBzdGFydFggPSByYWRpdXMgKiBjb3Moc3RhcnRBbmdsZSkgKyBjZW50ZXIueCgpOwotICAg
IGNvbnN0IFZHZmxvYXQgc3RhcnRZID0gLXJhZGl1cyAqIHNpbihzdGFydEFuZ2xlKSArIGNlbnRl
ci55KCk7Ci0gICAgY29uc3QgVkdmbG9hdCBlbmRYID0gcmFkaXVzICogY29zKGVuZEFuZ2xlKSAr
IGNlbnRlci54KCk7Ci0gICAgY29uc3QgVkdmbG9hdCBlbmRZID0gLXJhZGl1cyAqIHNpbihlbmRB
bmdsZSkgKyBjZW50ZXIueSgpOwotCi0gICAgLy8gRmE6IGxhcmdlIGFyYyBmbGFnLCBtYWtlcyB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNDV0FSQ19UTyBhbmQgTENXQVJDX1RPCi0gICAgLy8gICAg
IHJlc3BlY3RpdmVseSBTQ0NXQVJDX1RPIGFuZCBMQ0NXQVJDX1RPIGFyY3MuCi0gICAgY29uc3Qg
Ym9vbCBsYXJnZUFyYyA9IChhbmdsZURlbHRhID4gcGlEb3VibGUpOwotCi0gICAgLy8gRnM6IHN3
ZWVwIGZsYWcsIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgYXJjIGlzIGRyYXduIGluIGluY3JlYXNp
bmcgKHRydWUpCi0gICAgLy8gICAgIG9yIGRlY3JlYXNpbmcgKDApIGRpcmVjdGlvbi4gTm8gbmVl
ZCB0byBjYWxjdWxhdGUgdGhpcyB2YWx1ZSwgYXMgaXQKLSAgICAvLyAgICAgd2UgYWxyZWFkeSBn
ZXQgaXQgcGFzc2VkIGFzIGEgcGFyYW1ldGVyIChGcyA9PSAhYW50aWNsb2Nrd2lzZSkuCi0KLSAg
ICAvLyBUcmFuc2xhdGUgdGhlIGxhcmdlIGFyYyBhbmQgc3dlZXAgZmxhZ3MgaW50byBhbiBPcGVu
Vkcgc2VnbWVudCBjb21tYW5kLgotICAgIC8vIEFzIE9wZW5WRyB0aGlua3Mgb2YgZXZlcnl0aGlu
ZyB1cHNpZGUgZG93biwgd2UgbmVlZCB0byByZXZlcnNlIHRoZQotICAgIC8vIGFudGljbG9ja3dp
c2UgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGdldCB0aGUgc3BlY2lmaWVkIHJvdGF0aW9uLgotICAg
IGNvbnN0IFZHdWJ5dGUgc2VnbWVudENvbW1hbmQgPSAhYW50aWNsb2Nrd2lzZQotICAgICAgICA/
IChsYXJnZUFyYyA/IFZHX0xDQ1dBUkNfVE9fQUJTIDogVkdfU0NDV0FSQ19UT19BQlMpCi0gICAg
ICAgIDogKGxhcmdlQXJjID8gVkdfTENXQVJDX1RPX0FCUyA6IFZHX1NDV0FSQ19UT19BQlMpOwot
Ci0gICAgLy8gU28gbm93LCB3ZSd2ZSBnb3QgYWxsIHRoZSBwYXJhbWV0ZXJzIGluIGVuZHBvaW50
IHBhcmFtZXRlcml6YXRpb24gZm9ybWF0Ci0gICAgLy8gYXMgT3BlblZHIHJlcXVpcmVzIGl0LiBX
aGljaCBtZWFucyB3ZSBjYW4ganVzdCBwYXNzIGl0IGxpa2UgdGhpcy4KLSAgICBjb25zdCBWR3Vi
eXRlIHBhdGhTZWdtZW50c1tdID0gewotICAgICAgICBoYXNDdXJyZW50UG9pbnQoKSA/IFZHX0xJ
TkVfVE9fQUJTIDogVkdfTU9WRV9UT19BQlMsCi0gICAgICAgIHNlZ21lbnRDb21tYW5kCi0gICAg
fTsKLSAgICBjb25zdCBWR2Zsb2F0IHBhdGhEYXRhW10gPSB7Ci0gICAgICAgIHN0YXJ0WCwgc3Rh
cnRZLAotICAgICAgICByYWRpdXMsIHJhZGl1cywgMCwgZW5kWCwgZW5kWQotICAgIH07Ci0KLSAg
ICBtX3BhdGgtPm1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2Z0FwcGVuZFBh
dGhEYXRhKG1fcGF0aC0+dmdQYXRoKCksIDIsIHBhdGhTZWdtZW50cywgcGF0aERhdGEpOwotICAg
IEFTU0VSVF9WR19OT19FUlJPUigpOwotCi0gICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludC5zZXRY
KGVuZFgpOwotICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQuc2V0WShlbmRZKTsKLX0KLQotdm9p
ZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdGF0aWMgY29u
c3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsKLSAgICAgICAgVkdfTU9WRV9UT19BQlMsCi0g
ICAgICAgIFZHX0hMSU5FX1RPX1JFTCwKLSAgICAgICAgVkdfVkxJTkVfVE9fUkVMLAotICAgICAg
ICBWR19ITElORV9UT19SRUwsCi0gICAgICAgIFZHX0NMT1NFX1BBVEgKLSAgICB9OwotICAgIGNv
bnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsKLSAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLAot
ICAgICAgICByZWN0LndpZHRoKCksCi0gICAgICAgIHJlY3QuaGVpZ2h0KCksCi0gICAgICAgIC1y
ZWN0LndpZHRoKCkKLSAgICB9OwotCi0gICAgbV9wYXRoLT5tYWtlQ29tcGF0aWJsZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgdmdBcHBlbmRQYXRoRGF0YShtX3BhdGgtPnZnUGF0aCgpLCA1LCBwYXRo
U2VnbWVudHMsIHBhdGhEYXRhKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgIG1f
cGF0aC0+bV9jdXJyZW50UG9pbnQgPSBtX3BhdGgtPm1fc3VicGF0aFN0YXJ0UG9pbnQgPSByZWN0
LmxvY2F0aW9uKCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgc3RhdGljIGNvbnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7Ci0g
ICAgICAgIFZHX01PVkVfVE9fQUJTLAotICAgICAgICBWR19TQ0NXQVJDX1RPX1JFTCwKLSAgICAg
ICAgVkdfU0NDV0FSQ19UT19SRUwsCi0gICAgICAgIFZHX0NMT1NFX1BBVEgKLSAgICB9OwotICAg
IGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsKLSAgICAgICAgcmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLyAyLjAsIHJlY3QueSgpLAotICAgICAgICByZWN0LndpZHRoKCkgLyAyLjAsIHJlY3Qu
aGVpZ2h0KCkgLyAyLjAsIDAsIDAsIHJlY3QuaGVpZ2h0KCksCi0gICAgICAgIHJlY3Qud2lkdGgo
KSAvIDIuMCwgcmVjdC5oZWlnaHQoKSAvIDIuMCwgMCwgMCwgLXJlY3QuaGVpZ2h0KCkKLSAgICB9
OwotCi0gICAgbV9wYXRoLT5tYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmdB
cHBlbmRQYXRoRGF0YShtX3BhdGgtPnZnUGF0aCgpLCA0LCBwYXRoU2VnbWVudHMsIHBhdGhEYXRh
KTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLX0KLQotdm9pZCBQYXRoOjpjbGVhcigpCi17
Ci0gICAgbV9wYXRoLT5jbGVhcigpOwotfQotCi1ib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAot
ewotICAgIG1fcGF0aC0+bWFrZUNvbXBhdGlibGVDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biAhdmdHZXRQYXJhbWV0ZXJpKG1fcGF0aC0+dmdQYXRoKCksIFZHX1BBVEhfTlVNX1NFR01FTlRT
KTsKLX0KLQotYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAotewotICAgIG1fcGF0
aC0+bWFrZUNvbXBhdGlibGVDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiB2Z0dldFBhcmFt
ZXRlcmkobV9wYXRoLT52Z1BhdGgoKSwgVkdfUEFUSF9OVU1fU0VHTUVOVFMpID4gMDsKLX0KLQot
dm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9u
KSBjb25zdAotewotICAgIC8vIE9wZW5WRyBwcm92aWRlcyBubyBtZWFucyB0byByZXRyaWV2ZSBw
YXRoIHNlZ21lbnQgaW5mb3JtYXRpb24uCi0gICAgLy8gVGhpcyBpcyAqdmVyeSogdW5mb3J0dW5h
dGUsIHdlIG1pZ2h0IG5lZWQgdG8gc3RvcmUgdGhlIHNlZ21lbnRzIGluCi0gICAgLy8gbWVtb3J5
IGlmIHdlIHdhbnQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gcHJvcGVybHkuCi0gICAgLy8g
U2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvbWVzc2FnZV9ib2FyZHMvdmlld3RvcGljLnBocD9m
PTYmdD0xODg3Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBQbGF0Zm9y
bVBhdGhPcGVuVkcqIGRzdCA9IG5ldyBQbGF0Zm9ybVBhdGhPcGVuVkcoKTsKLSAgICAvLyBkc3Qt
Pm1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKSBpcyBjYWxsZWQgYnkgdGhlIHBsYXRmb3Jt
IHBhdGgKLSAgICAvLyBjb25zdHJ1Y3RvciwgdGhlcmVmb3JlIG5vdCBuZWNlc3NhcnkgdG8gY2Fs
bCBpdCBhZ2FpbiBoZXJlLgotICAgIFBhaW50ZXJPcGVuVkc6OnRyYW5zZm9ybVBhdGgoZHN0LT52
Z1BhdGgoKSwgbV9wYXRoLT52Z1BhdGgoKSwgdHJhbnNmb3JtYXRpb24pOwotICAgIGRlbGV0ZSBt
X3BhdGg7Ci0gICAgbV9wYXRoID0gZHN0OwotCi0gICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9
IHRyYW5zZm9ybWF0aW9uLm1hcFBvaW50KG1fcGF0aC0+bV9jdXJyZW50UG9pbnQpOwotICAgIG1f
cGF0aC0+bV9zdWJwYXRoU3RhcnRQb2ludCA9IHRyYW5zZm9ybWF0aW9uLm1hcFBvaW50KG1fcGF0
aC0+bV9zdWJwYXRoU3RhcnRQb2ludCk7Ci19Ci0KLQotLy8gUGF0aDo6bGVuZ3RoKCksIFBhdGg6
OnBvaW50QXRMZW5ndGgoKSBhbmQgUGF0aDo6bm9ybWFsQW5nbGVBdExlbmd0aCgpIGFyZQotLy8g
cmVpbXBsZW1lbnRlZCBoZXJlIGluc3RlYWQgb2YgaW4gUGF0aC5jcHAsIGJlY2F1c2UgT3BlblZH
IGhhcyBpdHMgb3duCi0vLyBmdW5jdGlvbnMgYW5kIFBhdGg6OmFwcGx5KCkgZG9lc24ndCByZWFs
bHkgd29yayBhcyBsb25nIGFzIHdlIHJlbHkgb24gVkdQYXRoCi0vLyBhcyBwcmltYXJ5IHBhdGgg
c3RvcmFnZS4KLQotZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBtX3BhdGgtPm1h
a2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBWR2Zsb2F0IGxlbmd0aCA9IHZnUGF0
aExlbmd0aChtX3BhdGgtPnZnUGF0aCgpLCAwLCB2Z0dldFBhcmFtZXRlcmkobV9wYXRoLT52Z1Bh
dGgoKSwgVkdfUEFUSF9OVU1fU0VHTUVOVFMpKTsKLSAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsK
LSAgICByZXR1cm4gbGVuZ3RoOwotfQotCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgo
ZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKLXsKLSAgICBWR2Zsb2F0IHggPSAwLCB5ID0g
MDsKLSAgICBtX3BhdGgtPm1ha2VDb21wYXRpYmxlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZn
UG9pbnRBbG9uZ1BhdGgobV9wYXRoLT52Z1BhdGgoKSwgMCwgdmdHZXRQYXJhbWV0ZXJpKG1fcGF0
aC0+dmdQYXRoKCksIFZHX1BBVEhfTlVNX1NFR01FTlRTKSwKLSAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCwgJngsICZ5LCAwLCAwKTsKLSAgICBvayA9ICh2Z0dldEVycm9yKCkgPT0gVkdfTk9f
RVJST1IpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHgsIHkpOwotfQotCi1mbG9hdCBQYXRoOjpu
b3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0Ci17Ci0gICAg
VkdmbG9hdCB0YW5nZW50WCwgdGFuZ2VudFk7Ci0gICAgbV9wYXRoLT5tYWtlQ29tcGF0aWJsZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICB2Z1BvaW50QWxvbmdQYXRoKG1fcGF0aC0+dmdQYXRoKCks
IDAsIHZnR2V0UGFyYW1ldGVyaShtX3BhdGgtPnZnUGF0aCgpLCBWR19QQVRIX05VTV9TRUdNRU5U
UyksCi0gICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIDAsIDAsICZ0YW5nZW50WCwgJnRhbmdl
bnRZKTsKLSAgICBvayA9ICh2Z0dldEVycm9yKCkgPT0gVkdfTk9fRVJST1IpOwotICAgIHJldHVy
biBhdGFuMmYodGFuZ2VudFksIHRhbmdlbnRYKSAqIDE4MC4wIC8gcGlGbG9hdDsgLy8gY29udmVy
dCB0byBkZWdyZWVzCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9QbGF0Zm9ybVBhdGhPcGVuVkcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QbGF0Zm9ybVBhdGhPcGVuVkcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjg2ZGE1M2U0MTEzZjUyMDUwODE3MGE0MGQyNjI0NDVlYThjMzcw
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGxhdGZvcm1QYXRoT3BlblZHLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgUGxhdGZvcm1QYXRoT3BlblZHX2gKLSNkZWZpbmUgUGxhdGZvcm1QYXRoT3BlblZHX2gKLQot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJTaGFyZWRSZXNvdXJjZU9wZW5WRy5o
IgotCi0jaW5jbHVkZSA8b3BlbnZnLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UGxhdGZvcm1QYXRoT3BlblZHIDogcHVibGljIFNoYXJlZFJlc291cmNlT3BlblZHIHsKLXB1Ymxp
YzoKLSAgICBQbGF0Zm9ybVBhdGhPcGVuVkcoKTsKLSAgICBQbGF0Zm9ybVBhdGhPcGVuVkcoY29u
c3QgUGxhdGZvcm1QYXRoT3BlblZHJik7Ci0gICAgflBsYXRmb3JtUGF0aE9wZW5WRygpOwotCi0g
ICAgUGxhdGZvcm1QYXRoT3BlblZHJiBvcGVyYXRvcj0oY29uc3QgUGxhdGZvcm1QYXRoT3BlblZH
Jik7Ci0KLSAgICBWR1BhdGggdmdQYXRoKCkgeyByZXR1cm4gbV92Z1BhdGg7IH0KLSAgICB2b2lk
IGNsZWFyKCk7Ci0KLXB1YmxpYzoKLSAgICBGbG9hdFBvaW50IG1fY3VycmVudFBvaW50OwotICAg
IEZsb2F0UG9pbnQgbV9zdWJwYXRoU3RhcnRQb2ludDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNy
ZWF0ZVBhdGgoKTsKLQotICAgIFZHUGF0aCBtX3ZnUGF0aDsKLX07Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvU2hhcmVk
UmVzb3VyY2VPcGVuVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL1NoYXJlZFJlc291cmNlT3BlblZHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTg0M2RiNTM4ZWE3MDBkODM2MjQyYTcyZTI4NGU0Njg5MDY2MzQwYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvU2hhcmVkUmVzb3VyY2VPcGVuVkcuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNoYXJlZFJlc291cmNlT3BlblZHLmgiCi0KLSNpbmNsdWRlICJTdXJmYWNlT3Bl
blZHLmgiCi0KLSNpZiBQTEFURk9STShFR0wpCi0jaW5jbHVkZSAiRUdMRGlzcGxheU9wZW5WRy5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBTaGFyZWRSZXNvdXJjZU9w
ZW5WRzo6bWFrZVNoYXJlZENvbnRleHRDdXJyZW50KCkKLXsKLSNpZiBQTEFURk9STShFR0wpCi0g
ICAgRUdMRGlzcGxheU9wZW5WRzo6Y3VycmVudCgpLT5zaGFyZWRQbGF0Zm9ybVN1cmZhY2UoKS0+
bWFrZUN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi12b2lkIFNoYXJlZFJlc291cmNlT3BlblZHOjpt
YWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCkKLXsKLSNpZiBQTEFURk9STShFR0wpCi0gICAg
RUdMRGlzcGxheU9wZW5WRzo6Y3VycmVudCgpLT5zaGFyZWRQbGF0Zm9ybVN1cmZhY2UoKS0+bWFr
ZUNvbXBhdGlibGVDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1NoYXJlZFJlc291cmNlT3BlblZHLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvU2hhcmVkUmVzb3VyY2VP
cGVuVkcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2YWU5MGMzOGZhMTdlNDg1
MzBhZjQ1MjAxN2RmMGI1ZGJlNTdkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvU2hh
cmVkUmVzb3VyY2VPcGVuVkcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZm5kZWYgU2hhcmVkUmVzb3VyY2VPcGVuVkdfaAotI2RlZmluZSBTaGFy
ZWRSZXNvdXJjZU9wZW5WR19oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVk
UmVzb3VyY2VPcGVuVkcgewotcHVibGljOgotICAgIHZvaWQgbWFrZVNoYXJlZENvbnRleHRDdXJy
ZW50KCk7Ci0gICAgdm9pZCBtYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCk7Ci19OwotCi19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnZnL1N1cmZhY2VPcGVuVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1N1cmZhY2VPcGVuVkcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2NzAwYzZmZmEwZmI5ZGI1OTMzNWMxMzMxOTk5M2E2NzZhZjIwMDEzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9TdXJmYWNlT3BlblZHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTdXJmYWNlT3BlblZHLmgiCi0KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiUGFpbnRlck9wZW5WRy5oIgotCi0jaWYgUExBVEZPUk0oRUdMKQotI2luY2x1ZGUgIkVHTERp
c3BsYXlPcGVuVkcuaCIKLSNpbmNsdWRlICJFR0xVdGlscy5oIgotI2VuZGlmCi0KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhaW50ZXJPcGVu
VkcqIFN1cmZhY2VPcGVuVkc6OnNfY3VycmVudFBhaW50ZXIgPSAwOwotCi1TdXJmYWNlT3BlblZH
KiBTdXJmYWNlT3BlblZHOjpjdXJyZW50U3VyZmFjZSgpCi17Ci0jaWYgUExBVEZPUk0oRUdMKQot
ICAgIHJldHVybiBFR0xEaXNwbGF5T3BlblZHOjpjdXJyZW50U3VyZmFjZSgpOwotI2Vsc2UKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi0jaWYg
UExBVEZPUk0oRUdMKQotU3VyZmFjZU9wZW5WRzo6U3VyZmFjZU9wZW5WRyhjb25zdCBJbnRTaXpl
JiBzaXplLCBjb25zdCBFR0xEaXNwbGF5JiBkaXNwbGF5LCBFR0xDb25maWcqIGNvbmZQdHIsIEVH
TGludCogZXJyb3JDb2RlKQotICAgIDogbV9hY3RpdmVQYWludGVyKDApCi0gICAgLCBtX2VnbERp
c3BsYXkoZGlzcGxheSkKLSAgICAsIG1fZWdsU3VyZmFjZShFR0xfTk9fU1VSRkFDRSkKLSAgICAs
IG1fZWdsQ29udGV4dChFR0xfTk9fQ09OVEVYVCkKLXsKLSAgICBBU1NFUlQobV9lZ2xEaXNwbGF5
ICE9IEVHTF9OT19ESVNQTEFZKTsKLQotICAgIEVHTERpc3BsYXlPcGVuVkcqIGRpc3BsYXlNYW5h
Z2VyID0gRUdMRGlzcGxheU9wZW5WRzo6Zm9yRGlzcGxheShtX2VnbERpc3BsYXkpOwotICAgIEVH
TENvbmZpZyBjb25maWcgPSBjb25mUHRyID8gKCpjb25mUHRyKSA6IGRpc3BsYXlNYW5hZ2VyLT5k
ZWZhdWx0UGJ1ZmZlckNvbmZpZygpOwotICAgIG1fZWdsU3VyZmFjZSA9IGRpc3BsYXlNYW5hZ2Vy
LT5jcmVhdGVQYnVmZmVyU3VyZmFjZShzaXplLCBjb25maWcsIGVycm9yQ29kZSk7Ci0KLSAgICBp
ZiAobV9lZ2xTdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2VnbENvbnRleHQgPSBkaXNwbGF5TWFuYWdlci0+Y29udGV4dEZvclN1cmZhY2UobV9lZ2xT
dXJmYWNlKTsKLSAgICBFR0xEaXNwbGF5T3BlblZHOjpyZWdpc3RlclBsYXRmb3JtU3VyZmFjZSh0
aGlzKTsKLX0KLQotU3VyZmFjZU9wZW5WRzo6U3VyZmFjZU9wZW5WRyhFR0xDbGllbnRCdWZmZXIg
YnVmZmVyLCBFR0xlbnVtIGJ1ZmZlclR5cGUsIGNvbnN0IEVHTERpc3BsYXkmIGRpc3BsYXksIEVH
TENvbmZpZyogY29uZlB0ciwgRUdMaW50KiBlcnJvckNvZGUpCi0gICAgOiBtX2FjdGl2ZVBhaW50
ZXIoMCkKLSAgICAsIG1fZWdsRGlzcGxheShkaXNwbGF5KQotICAgICwgbV9lZ2xTdXJmYWNlKEVH
TF9OT19TVVJGQUNFKQotICAgICwgbV9lZ2xDb250ZXh0KEVHTF9OT19DT05URVhUKQotewotICAg
IEFTU0VSVChtX2VnbERpc3BsYXkgIT0gRUdMX05PX0RJU1BMQVkpOwotCi0gICAgRUdMRGlzcGxh
eU9wZW5WRyogZGlzcGxheU1hbmFnZXIgPSBFR0xEaXNwbGF5T3BlblZHOjpmb3JEaXNwbGF5KG1f
ZWdsRGlzcGxheSk7Ci0gICAgRUdMQ29uZmlnIGNvbmZpZyA9IGNvbmZQdHIgPyAoKmNvbmZQdHIp
IDogZGlzcGxheU1hbmFnZXItPmRlZmF1bHRQYnVmZmVyQ29uZmlnKCk7Ci0gICAgbV9lZ2xTdXJm
YWNlID0gZGlzcGxheU1hbmFnZXItPmNyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKGJ1ZmZl
ciwgYnVmZmVyVHlwZSwgY29uZmlnLCBlcnJvckNvZGUpOwotCi0gICAgaWYgKG1fZWdsU3VyZmFj
ZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9lZ2xDb250ZXh0
ID0gZGlzcGxheU1hbmFnZXItPmNvbnRleHRGb3JTdXJmYWNlKG1fZWdsU3VyZmFjZSk7Ci0gICAg
RUdMRGlzcGxheU9wZW5WRzo6cmVnaXN0ZXJQbGF0Zm9ybVN1cmZhY2UodGhpcyk7Ci19Ci0KLVN1
cmZhY2VPcGVuVkc6OlN1cmZhY2VPcGVuVkcoRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csIGNv
bnN0IEVHTERpc3BsYXkmIGRpc3BsYXksIEVHTENvbmZpZyogY29uZlB0cikKLSAgICA6IG1fYWN0
aXZlUGFpbnRlcigwKQotICAgICwgbV9lZ2xEaXNwbGF5KGRpc3BsYXkpCi0gICAgLCBtX2VnbFN1
cmZhY2UoRUdMX05PX1NVUkZBQ0UpCi0gICAgLCBtX2VnbENvbnRleHQoRUdMX05PX0NPTlRFWFQp
Ci17Ci0gICAgQVNTRVJUKG1fZWdsRGlzcGxheSAhPSBFR0xfTk9fRElTUExBWSk7Ci0KLSAgICBF
R0xEaXNwbGF5T3BlblZHKiBkaXNwbGF5TWFuYWdlciA9IEVHTERpc3BsYXlPcGVuVkc6OmZvckRp
c3BsYXkobV9lZ2xEaXNwbGF5KTsKLSAgICBFR0xDb25maWcgY29uZmlnID0gY29uZlB0ciA/ICgq
Y29uZlB0cikgOiBkaXNwbGF5TWFuYWdlci0+ZGVmYXVsdFdpbmRvd0NvbmZpZygpOwotICAgIG1f
ZWdsU3VyZmFjZSA9IGRpc3BsYXlNYW5hZ2VyLT5zdXJmYWNlRm9yV2luZG93KHdpbmRvdywgY29u
ZmlnKTsKLSAgICBBU1NFUlQobV9lZ2xTdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKTsKLQotICAg
IG1fZWdsQ29udGV4dCA9IGRpc3BsYXlNYW5hZ2VyLT5jb250ZXh0Rm9yU3VyZmFjZShtX2VnbFN1
cmZhY2UpOwotICAgIEVHTERpc3BsYXlPcGVuVkc6OnJlZ2lzdGVyUGxhdGZvcm1TdXJmYWNlKHRo
aXMpOwotfQotCi0vLyBDb25zdHJ1Y3RvciBvbmx5IGFjY2Vzc2libGUgdG8gRUdMRGlzcGxheU9w
ZW5WRyBmb3Igc2hhcmVkIGNvbnRleHQKLS8vIGluaXRpYWxpemF0aW9uLiBUaGUgcGFyYW1ldGVy
IHR5cGVzIG1pZ2h0IGRlZmluZSB0byB2b2lkKiBsaWtlIGluIHRoZQotLy8gd2luZG93IHN1cmZh
Y2UgY29uc3RydWN0b3IsIHNvIGl0IGNhbid0IGJlIG92ZXJsb2FkZWQgd2l0aCBhbGwgdGhlIHJl
cXVpcmVkCi0vLyBhcmd1bWVudHMgYW5kIEVHTERpc3BsYXlPcGVuVkcgYmFzaWNhbGx5IGltcGxl
bWVudHMgdGhlIGNvbnN0cnVjdG9yCi0vLyBieSBpdHNlbGYuCi1TdXJmYWNlT3BlblZHOjpTdXJm
YWNlT3BlblZHKCkKLSAgICA6IG1fYWN0aXZlUGFpbnRlcigwKQotICAgICwgbV9lZ2xEaXNwbGF5
KEVHTF9OT19ESVNQTEFZKQotICAgICwgbV9lZ2xTdXJmYWNlKEVHTF9OT19TVVJGQUNFKQotICAg
ICwgbV9lZ2xDb250ZXh0KEVHTF9OT19DT05URVhUKQotewotfQotI2VuZGlmCi0KLVN1cmZhY2VP
cGVuVkc6On5TdXJmYWNlT3BlblZHKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fYWN0aXZlUGFpbnRlciAmJiB0aGlzID09IG1fYWN0aXZlUGFp
bnRlci0+YmFzZVN1cmZhY2UoKSkKLSAgICAgICAgbV9hY3RpdmVQYWludGVyLT5lbmQoKTsKLQot
I2lmIFBMQVRGT1JNKEVHTCkKLSAgICBFR0xEaXNwbGF5T3BlblZHOjpmb3JEaXNwbGF5KG1fZWds
RGlzcGxheSktPmRlc3Ryb3lTdXJmYWNlKG1fZWdsU3VyZmFjZSk7Ci0gICAgRUdMRGlzcGxheU9w
ZW5WRzo6dW5yZWdpc3RlclBsYXRmb3JtU3VyZmFjZSh0aGlzKTsKLSNlbHNlCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBTdXJmYWNlT3BlblZHOjppc1ZhbGlk
KCkgY29uc3QKLXsKLSNpZiBQTEFURk9STShFR0wpCi0gICAgcmV0dXJuIChtX2VnbFN1cmZhY2Ug
IT0gRUdMX05PX1NVUkZBQ0UpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW50IFN1cmZhY2VPcGVuVkc6OndpZHRoKCkg
Y29uc3QKLXsKLSNpZiBQTEFURk9STShFR0wpCi0gICAgQVNTRVJUKG1fZWdsU3VyZmFjZSAhPSBF
R0xfTk9fU1VSRkFDRSk7Ci0KLSAgICBFR0xpbnQgd2lkdGg7Ci0gICAgZWdsUXVlcnlTdXJmYWNl
KG1fZWdsRGlzcGxheSwgbV9lZ2xTdXJmYWNlLCBFR0xfV0lEVEgsICZ3aWR0aCk7Ci0gICAgQVNT
RVJUX0VHTF9OT19FUlJPUigpOwotICAgIHJldHVybiB3aWR0aDsKLSNlbHNlCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotaW50IFN1cmZhY2VP
cGVuVkc6OmhlaWdodCgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oRUdMKQotICAgIEFTU0VSVCht
X2VnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpOwotCi0gICAgRUdMaW50IGhlaWdodDsKLSAg
ICBlZ2xRdWVyeVN1cmZhY2UobV9lZ2xEaXNwbGF5LCBtX2VnbFN1cmZhY2UsIEVHTF9IRUlHSFQs
ICZoZWlnaHQpOwotICAgIEFTU0VSVF9FR0xfTk9fRVJST1IoKTsKLSAgICByZXR1cm4gaGVpZ2h0
OwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRp
ZgotfQotCi1TdXJmYWNlT3BlblZHKiBTdXJmYWNlT3BlblZHOjpzaGFyZWRTdXJmYWNlKCkgY29u
c3QKLXsKLSNpZiBQTEFURk9STShFR0wpCi0gICAgQVNTRVJUKG1fZWdsU3VyZmFjZSAhPSBFR0xf
Tk9fU1VSRkFDRSk7Ci0gICAgcmV0dXJuIEVHTERpc3BsYXlPcGVuVkc6OmZvckRpc3BsYXkobV9l
Z2xEaXNwbGF5KS0+c2hhcmVkUGxhdGZvcm1TdXJmYWNlKCk7Ci0jZWxzZQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLXZvaWQgU3VyZmFjZU9w
ZW5WRzo6bWFrZUN1cnJlbnQoTWFrZUN1cnJlbnRNb2RlIG1vZGUpCi17Ci0jaWYgUExBVEZPUk0o
RUdMKQotICAgIEFTU0VSVChtX2VnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpOwotCi0gICAg
ZWdsQmluZEFQSShFR0xfT1BFTlZHX0FQSSk7Ci0gICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwot
ICAgIEVHTFN1cmZhY2UgY3VycmVudFN1cmZhY2UgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xf
RFJBVyk7Ci0gICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwotCi0gICAgaWYgKGN1cnJlbnRTdXJm
YWNlICE9IG1fZWdsU3VyZmFjZSkgewotICAgICAgICAvLyBTYXZlIG90aGVyIGNvbnRleHQgYmVm
b3JlIHN3aXRjaGluZyBvdmVyLgotICAgICAgICBpZiAoc19jdXJyZW50UGFpbnRlciAmJiBtb2Rl
ICE9IERvbnRTYXZlT3JBcHBseVBhaW50ZXJTdGF0ZQotICAgICAgICAgICAgJiYgc19jdXJyZW50
UGFpbnRlci0+c3VyZmFjZSgpLT5tX2VnbFN1cmZhY2UgPT0gY3VycmVudFN1cmZhY2UpCi0gICAg
ICAgICAgICBzX2N1cnJlbnRQYWludGVyLT5zYXZlKFBhaW50ZXJPcGVuVkc6OktlZXBDdXJyZW50
U3RhdGUpOwotCi0gICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZWdsRGlzcGxheSwgbV9lZ2xTdXJm
YWNlLCBtX2VnbFN1cmZhY2UsIG1fZWdsQ29udGV4dCk7Ci0gICAgICAgIEFTU0VSVF9FR0xfTk9f
RVJST1IoKTsKLSAgICAgICAgc19jdXJyZW50UGFpbnRlciA9IDA7Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBpZiAobV9hY3RpdmVQYWludGVyICYmIG1vZGUgPT0gQXBwbHlQYWludGVyU3RhdGVPblN1
cmZhY2VTd2l0Y2gKLSAgICAgICAgJiYgc19jdXJyZW50UGFpbnRlciAhPSBtX2FjdGl2ZVBhaW50
ZXIpIHsKLSAgICAgICAgbV9hY3RpdmVQYWludGVyLT5hcHBseVN0YXRlKCk7Ci0gICAgICAgIHNf
Y3VycmVudFBhaW50ZXIgPSBtX2FjdGl2ZVBhaW50ZXI7Ci0gICAgfQotfQotCi12b2lkIFN1cmZh
Y2VPcGVuVkc6Om1ha2VDb21wYXRpYmxlQ3VycmVudCgpCi17Ci0jaWYgUExBVEZPUk0oRUdMKQot
ICAgIEFTU0VSVChtX2VnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpOwotCi0gICAgZWdsQmlu
ZEFQSShFR0xfT1BFTlZHX0FQSSk7Ci0gICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwotICAgIEVH
TFN1cmZhY2UgY3VycmVudFN1cmZhY2UgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVyk7
Ci0gICAgQVNTRVJUX0VHTF9OT19FUlJPUigpOwotCi0gICAgaWYgKGN1cnJlbnRTdXJmYWNlID09
IG1fZWdsU3VyZmFjZSkgewotICAgICAgICBpZiAobV9hY3RpdmVQYWludGVyICYmIHNfY3VycmVu
dFBhaW50ZXIgIT0gbV9hY3RpdmVQYWludGVyKSB7Ci0gICAgICAgICAgICBtX2FjdGl2ZVBhaW50
ZXItPmFwcGx5U3RhdGUoKTsKLSAgICAgICAgICAgIHNfY3VycmVudFBhaW50ZXIgPSBtX2FjdGl2
ZVBhaW50ZXI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFFR0xEaXNwbGF5T3BlblZHOjpm
b3JEaXNwbGF5KG1fZWdsRGlzcGxheSktPnN1cmZhY2VzQ29tcGF0aWJsZShjdXJyZW50U3VyZmFj
ZSwgbV9lZ2xTdXJmYWNlKSkgewotICAgICAgICAvLyBTYXZlIG90aGVyIGNvbnRleHQgYmVmb3Jl
IHN3aXRjaGluZyBvdmVyLgotICAgICAgICBpZiAoc19jdXJyZW50UGFpbnRlciAmJiBzX2N1cnJl
bnRQYWludGVyLT5zdXJmYWNlKCktPm1fZWdsU3VyZmFjZSA9PSBjdXJyZW50U3VyZmFjZSkKLSAg
ICAgICAgICAgIHNfY3VycmVudFBhaW50ZXItPnNhdmUoUGFpbnRlck9wZW5WRzo6S2VlcEN1cnJl
bnRTdGF0ZSk7Ci0KLSAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBtX2VnbFN1
cmZhY2UsIG1fZWdsU3VyZmFjZSwgbV9lZ2xDb250ZXh0KTsKLSAgICAgICAgQVNTRVJUX0VHTF9O
T19FUlJPUigpOwotICAgICAgICBzX2N1cnJlbnRQYWludGVyID0gMDsKLSAgICB9Ci0gICAgLy8g
ZWxzZTogc3VyZmFjZXMgY29tcGF0aWJsZSwgbm8gbmVlZCB0byBzd2l0Y2ggY29udGV4dHMKLSNl
bmRpZgotfQotCi12b2lkIFN1cmZhY2VPcGVuVkc6OmZsdXNoKCkKLXsKLSNpZiBQTEFURk9STShF
R0wpCi0gICAgQVNTRVJUKG1fZWdsU3VyZmFjZSAhPSBFR0xfTk9fU1VSRkFDRSk7Ci0KLSAgICBl
Z2xTd2FwQnVmZmVycyhtX2VnbERpc3BsYXksIG1fZWdsU3VyZmFjZSk7Ci0gICAgQVNTRVJUX0VH
TF9OT19FUlJPUigpOwotI2VuZGlmCi19Ci0KLXZvaWQgU3VyZmFjZU9wZW5WRzo6c2V0QWN0aXZl
UGFpbnRlcihQYWludGVyT3BlblZHKiBwYWludGVyKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkp
OwotCi0gICAgLy8gSWYgcGFpbnRlciBpcyBub24temVybywgd2Ugd2FudCB0byBtYWtlIHN1cmUg
dGhlcmUgd2FzIG5vIHByZXZpb3VzIHBhaW50ZXIgc2V0LgotICAgIEFTU0VSVCghcGFpbnRlciB8
fCAhbV9hY3RpdmVQYWludGVyKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhIGRpc2FibGVkIHBhaW50
ZXIgaXNuJ3QgbWFya2VkIGFzIGdsb2JhbCBjdXJyZW50IHBhaW50ZXIgYW55bW9yZS4KLSAgICBp
ZiAoIXBhaW50ZXIgJiYgc19jdXJyZW50UGFpbnRlciA9PSBtX2FjdGl2ZVBhaW50ZXIpCi0gICAg
ICAgIHNfY3VycmVudFBhaW50ZXIgPSAwOwotCi0gICAgbV9hY3RpdmVQYWludGVyID0gcGFpbnRl
cjsKLX0KLQotUGFpbnRlck9wZW5WRyogU3VyZmFjZU9wZW5WRzo6YWN0aXZlUGFpbnRlcigpCi17
Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1fYWN0aXZlUGFpbnRlcjsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L1N1cmZhY2VPcGVuVkcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52
Zy9TdXJmYWNlT3BlblZHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDk1ZDg3
NWI2MjIwOTYxNDQ0ZjQ2YmI3MDYzZTYzNWYyMmY4ZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnZnL1N1cmZhY2VPcGVuVkcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU3VyZmFjZU9wZW5WR19oCi0jZGVmaW5lIFN1
cmZhY2VPcGVuVkdfaAotCi0jaWYgUExBVEZPUk0oRUdMKQotI2luY2x1ZGUgPGVnbC5oPgotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0jaWYgUExBVEZPUk0oRUdMKQotY2xhc3MgRUdMRGlzcGxheU9wZW5WRzsKLSNlbmRpZgot
Y2xhc3MgUGFpbnRlck9wZW5WRzsKLWNsYXNzIEludFNpemU7Ci0KLS8qKgotICogU3VyZmFjZU9w
ZW5WRyBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBzdXJmYWNlcyBhbmQgY29udGV4dHMg
dGhhdCBhcmUKLSAqIHVuZGVybHlpbmcgdGhlIE9wZW5WRyBpbXBsZW1lbnRhdGlvbi4gSW4gdGhl
IHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMsIHRoYXQKLSAqIHVuZGVybHlpbmcgdGVjaG5vbG9neSBp
cyBFR0wsIGJ1dCBPcGVuVkcgZG9lc24ndCBkZXBlbmQgb24gRUdMIHBlciBzZS4KLSAqIFdyYXBw
aW5nIHN1cmZhY2UvY29udGV4dCBmdW5jdGlvbmFsaXR5IGludG8gYSBzZXBhcmF0ZSBjbGFzcyBh
dm9pZHMgbG90cwotICogb2YgI2lmZGVmcyBhbmQgc2hvdWxkIG1ha2UgaXQgZWFzeSB0byBhZGQg
ZGlmZmVyZW50IHN1cmZhY2UvY29udGV4dAotICogaW1wbGVtZW50YXRpb25zIHRoYW4gRUdMLgot
ICovCi1jbGFzcyBTdXJmYWNlT3BlblZHIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJm
YWNlT3BlblZHKTsKLXB1YmxpYzoKLSAgICBlbnVtIE1ha2VDdXJyZW50TW9kZSB7Ci0gICAgICAg
IEFwcGx5UGFpbnRlclN0YXRlT25TdXJmYWNlU3dpdGNoLAotICAgICAgICBEb250QXBwbHlQYWlu
dGVyU3RhdGUsCi0gICAgICAgIERvbnRTYXZlT3JBcHBseVBhaW50ZXJTdGF0ZQotICAgIH07Ci0K
LSAgICBzdGF0aWMgU3VyZmFjZU9wZW5WRyogY3VycmVudFN1cmZhY2UoKTsKLQotI2lmIFBMQVRG
T1JNKEVHTCkKLSAgICBmcmllbmQgY2xhc3MgRUdMRGlzcGxheU9wZW5WRzsKLQotICAgIC8qKgot
ICAgICAqIENyZWF0ZSBhIG5ldyBFR0wgcGJ1ZmZlciBzdXJmYWNlIHdpdGggdGhlIHNwZWNpZmll
ZCBzaXplIGFuZCBjb25maWcgb24KLSAgICAgKiB0aGUgZ2l2ZW4gZGlzcGxheS4gSWYgY29uZmln
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkaXNwbGF5J3MgZGVmYXVsdAotICAgICAqIHBidWZmZXIg
Y29uZmlnIGlzIHVzZWQuCi0gICAgICoKLSAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgdHJp
Z2dlciBhbiBhc3NlcnRpb24gaWYgY3JlYXRpb24gb2YgdGhlIHN1cmZhY2UKLSAgICAgKiBmYWls
cywgdW5sZXNzIHlvdSBwbGVkZ2UgdG8gbWFudWFsbHkgcHJvY2VzcyB0aGUgZXJyb3IgY29kZSBi
eSBwYXNzaW5nCi0gICAgICogYSBub24temVybyBwb2ludGVyIGFzIGVycm9yQ29kZSBwYXJhbWV0
ZXIuIFRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5Ci0gICAgICogZWdsR2V0RXJyb3IoKSB3aWxs
IGJlIHdyaXR0ZW4gdG8gdGhhdCB2YXJpYWJsZS4KLSAgICAgKi8KLSAgICBTdXJmYWNlT3BlblZH
KGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEVHTERpc3BsYXkmIGRpc3BsYXksIEVHTENvbmZp
ZyogY29uZmlnID0gMCwgRUdMaW50KiBlcnJvckNvZGUgPSAwKTsKLQotICAgIC8qKgotICAgICAq
IENyZWF0ZSBhIG5ldyBFR0wgcGJ1ZmZlciBzdXJmYWNlIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0
aGUgZ2l2ZW4KLSAgICAgKiBjbGllbnQgYnVmZmVyIChyZWFkOiBWR0ltYWdlKSwgd2l0aCB0aGUg
c3BlY2lmaWVkIGNvbmZpZyBvbiB0aGUKLSAgICAgKiBnaXZlbiBkaXNwbGF5LiBJZiBjb25maWcg
aXMgbm90IHNwZWNpZmllZCwgdGhlIGRpc3BsYXkncyBkZWZhdWx0Ci0gICAgICogcGJ1ZmZlciBj
b25maWcgaXMgdXNlZC4KLSAgICAgKgotICAgICAqIEFmdGVyIHRoZSBzdXJmYWNlIGlzIGNyZWF0
ZWQsIHlvdSB3aWxsIG9ubHkgYmUgYWJsZSB0byBhY2Nlc3MgdGhlCi0gICAgICogY2xpZW50IGJ1
ZmZlciBpbWFnZSBpZiB0aGUgc3VyZmFjZSBpcyBub3QgY3VycmVudC4gVGhlIHJlY29tbWVuZGVk
IHdheQotICAgICAqIHRvIGVuc3VyZSB0aGlzIGlzIHRvIGNhbGwgc3VyZmFjZS0+c2hhcmVkU3Vy
ZmFjZSgpLT5tYWtlQ3VycmVudCgpIGlmIHlvdQotICAgICAqIHNpbXBseSB3YW50IHRvIGFjY2Vz
cyB0aGUgaW1hZ2UncyBwaXhlbCBjb250ZW50cywgb3IgaWYgeW91IGludGVuZCB0bwotICAgICAq
IGRyYXcgdGhlIGltYWdlIGRpcmVjdGx5LCBtYWtpbmcgdGhlIGRyYXcgdGFyZ2V0IHN1cmZhY2Ug
Y3VycmVudC4KLSAgICAgKgotICAgICAqIFRoaXMgY29uc3RydWN0b3Igd2lsbCB0cmlnZ2VyIGFu
IGFzc2VydGlvbiBpZiBjcmVhdGlvbiBvZiB0aGUgc3VyZmFjZQotICAgICAqIGZhaWxzLCB1bmxl
c3MgeW91IHBsZWRnZSB0byBtYW51YWxseSBwcm9jZXNzIHRoZSBlcnJvciBjb2RlIGJ5IHBhc3Np
bmcKLSAgICAgKiBhIG5vbi16ZXJvIHBvaW50ZXIgYXMgZXJyb3JDb2RlIHBhcmFtZXRlci4gVGhl
IGVycm9yIGNvZGUgcmV0dXJuZWQgYnkKLSAgICAgKiBlZ2xHZXRFcnJvcigpIHdpbGwgYmUgd3Jp
dHRlbiB0byB0aGF0IHZhcmlhYmxlLgotICAgICAqLwotICAgIFN1cmZhY2VPcGVuVkcoRUdMQ2xp
ZW50QnVmZmVyIGJ1ZmZlciwgRUdMZW51bSBidWZmZXJUeXBlLAotICAgICAgICBjb25zdCBFR0xE
aXNwbGF5JiBkaXNwbGF5LCBFR0xDb25maWcqIGNvbmZpZyA9IDAsIEVHTGludCogZXJyb3JDb2Rl
ID0gMCk7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBuZXcgRUdMIHdpbmRvdyBzdXJmYWNl
IHdpdGggdGhlIHNwZWNpZmllZCBuYXRpdmUgd2luZG93IGhhbmRsZQotICAgICAqIGFuZCBjb25m
aWcgb24gdGhlIGdpdmVuIGRpc3BsYXkuIElmIGNvbmZpZyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUK
LSAgICAgKiBkaXNwbGF5J3MgZGVmYXVsdCB3aW5kb3cgY29uZmlnIGlzIHVzZWQuCi0gICAgICov
Ci0gICAgU3VyZmFjZU9wZW5WRyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdywgY29uc3QgRUdM
RGlzcGxheSYgZGlzcGxheSwgRUdMQ29uZmlnKiBjb25maWcgPSAwKTsKLQotICAgIEVHTERpc3Bs
YXkgZWdsRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZWdsRGlzcGxheTsgfQotICAgIEVHTFN1
cmZhY2UgZWdsU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWdsU3VyZmFjZTsgfQotICAgIEVH
TENvbnRleHQgZWdsQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWdsQ29udGV4dDsgfQotI2Vu
ZGlmCi0KLSAgICB+U3VyZmFjZU9wZW5WRygpOwotCi0gICAgLyoqCi0gICAgICogSWYgYSBzdXJm
YWNlIGlzIGludmFsaWQgKGNvdWxkIG5vdCBiZSBjcmVhdGVkKSwgYWxsIG1ldGhvZCBjYWxscyB3
aWxsCi0gICAgICogY3Jhc2ggaG9ycmlibHkuCi0gICAgICovCi0gICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7Ci0KLSAgICBpbnQgd2lkdGgoKSBjb25zdDsKLSAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7
Ci0KLSAgICBTdXJmYWNlT3BlblZHKiBzaGFyZWRTdXJmYWNlKCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBNYWtlIHRoZSBhc3NvY2lhdGVkIEdML0VHTCBjb250ZXh0IHRoZSBjdXJyZW50IG9u
ZSwgc28gdGhhdCBzdWJzZXF1ZW50Ci0gICAgICogT3BlblZHIGNvbW1hbmRzIGFwcGx5IHRvIGl0
LgotICAgICAqLwotICAgIHZvaWQgbWFrZUN1cnJlbnQoTWFrZUN1cnJlbnRNb2RlIG1vZGUgPSBB
cHBseVBhaW50ZXJTdGF0ZU9uU3VyZmFjZVN3aXRjaCk7Ci0KLSAgICAvKioKLSAgICAgKiBNYWtl
IGEgc3VyZmFjZS9jb250ZXh0IGNvbWJpbmF0aW9uIGN1cnJlbnQgdGhhdCBpcyAiY29tcGF0aWJs
ZSIKLSAgICAgKiAoaS5lLiBjYW4gYWNjZXNzIGl0cyBzaGFyZWQgcmVzb3VyY2VzKSB0byB0aGUg
Z2l2ZW4gb25lLiBJZiBubwotICAgICAqIHN1cmZhY2UvY29udGV4dCBpcyBjdXJyZW50LCB0aGUg
Z2l2ZW4gb25lIGlzIG1hZGUgY3VycmVudC4KLSAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGlz
IG1lYW50IHRvIGF2b2lkIGNvbnRleHQgY2hhbmdlcyBpZiB0aGV5J3JlIG5vdAotICAgICAqIG5l
Y2Vzc2FyeSwgcGFydGljdWxhcmx5IHRhaWxvcmVkIGZvciB0aGUgY2FzZSB3aGVyZSBzb21ldGhp
bmcKLSAgICAgKiBjb21wYXRpYmxlIHRvIHRoZSBzaGFyZWQgc3VyZmFjZSBpcyByZXF1ZXN0ZWQg
d2hpbGUgYWN0dWFsIHBhaW50aW5nCi0gICAgICogaGFwcGVucyBvbiBhbm90aGVyIHN1cmZhY2Uu
Ci0gICAgICovCi0gICAgdm9pZCBtYWtlQ29tcGF0aWJsZUN1cnJlbnQoKTsKLQotICAgIC8qKgot
ICAgICAqIEVtcHR5IHRoZSBPcGVuVkcgcGlwZWxpbmUgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIHBl
cmZvcm1lZCBwYWludAotICAgICAqIG9wZXJhdGlvbnMgc2hvdyB1cCBvbiB0aGUgc3VyZmFjZSBh
cyBhY3R1YWwgZHJhd24gcGl4ZWxzLgotICAgICAqLwotICAgIHZvaWQgZmx1c2goKTsKLQotICAg
IHZvaWQgc2V0QWN0aXZlUGFpbnRlcihQYWludGVyT3BlblZHKik7Ci0gICAgUGFpbnRlck9wZW5W
RyogYWN0aXZlUGFpbnRlcigpOwotCi1wcml2YXRlOgotICAgIFBhaW50ZXJPcGVuVkcqIG1fYWN0
aXZlUGFpbnRlcjsKLSAgICBzdGF0aWMgUGFpbnRlck9wZW5WRyogc19jdXJyZW50UGFpbnRlcjsg
Ly8gZ2xvYmFsIGN1cnJlbnRseSBhY3RpdmUgcGFpbnRlcgotCi0jaWYgUExBVEZPUk0oRUdMKQot
ICAgIFN1cmZhY2VPcGVuVkcoKTsgLy8gZm9yIEVHTERpc3BsYXlPcGVuVkcKLQotICAgIEVHTERp
c3BsYXkgbV9lZ2xEaXNwbGF5OwotICAgIEVHTFN1cmZhY2UgbV9lZ2xTdXJmYWNlOwotICAgIEVH
TENvbnRleHQgbV9lZ2xDb250ZXh0OwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VP
cGVuVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVk
SW1hZ2VPcGVuVkcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTI5ZTIyZDRm
MjU4M2Y2ODUxODhiYzAxOGIzYTdiMmVhNWM0OGVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9UaWxlZEltYWdlT3BlblZHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
aWxlZEltYWdlT3BlblZHLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiVkdVdGlscy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVRpbGVkSW1hZ2VPcGVuVkc6OlRpbGVkSW1hZ2VPcGVuVkcoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCi0gICAgOiBTaGFyZWRSZXNvdXJjZU9wZW5WRygpCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fbWF4VGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBt
X251bUNvbHVtbnMoKG1fc2l6ZS53aWR0aCgpIC0gMSkgLyBtX21heFRpbGVTaXplLndpZHRoKCkg
KyAxKQotICAgICwgbV90aWxlcygoKG1fc2l6ZS5oZWlnaHQoKSAtIDEpIC8gbV9tYXhUaWxlU2l6
ZS5oZWlnaHQoKSArIDEpICogbV9udW1Db2x1bW5zLCBWR19JTlZBTElEX0hBTkRMRSkKLXsKLX0K
LQotVGlsZWRJbWFnZU9wZW5WRzo6VGlsZWRJbWFnZU9wZW5WRyhjb25zdCBUaWxlZEltYWdlT3Bl
blZHJiBvdGhlcikKLSAgICA6IFNoYXJlZFJlc291cmNlT3BlblZHKCkKLSAgICAsIG1fc2l6ZShv
dGhlci5tX3NpemUpCi0gICAgLCBtX21heFRpbGVTaXplKG90aGVyLm1fbWF4VGlsZVNpemUpCi0g
ICAgLCBtX251bUNvbHVtbnMob3RoZXIubV9udW1Db2x1bW5zKQotICAgICwgbV90aWxlcyhvdGhl
ci5tX3RpbGVzKQotewotICAgIGRldGFjaFRpbGVzKCk7Ci19Ci0KLVRpbGVkSW1hZ2VPcGVuVkcm
IFRpbGVkSW1hZ2VPcGVuVkc6Om9wZXJhdG9yPShjb25zdCBUaWxlZEltYWdlT3BlblZHJiBvdGhl
cikKLXsKLSAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKLSAgICAgICAgZGVzdHJveVRpbGVzKCk7
Ci0KLSAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgICAgICBtX21heFRpbGVTaXpl
ID0gb3RoZXIubV9tYXhUaWxlU2l6ZTsKLSAgICAgICAgbV9udW1Db2x1bW5zID0gb3RoZXIubV9u
dW1Db2x1bW5zOwotICAgICAgICBtX3RpbGVzID0gb3RoZXIubV90aWxlczsKLQotICAgICAgICBk
ZXRhY2hUaWxlcygpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRpbGVkSW1hZ2VP
cGVuVkc6On5UaWxlZEltYWdlT3BlblZHKCkKLXsKLSAgICBkZXN0cm95VGlsZXMoKTsKLX0KLQot
aW50IFRpbGVkSW1hZ2VPcGVuVkc6Om51bVRpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
aWxlcy5zaXplKCk7Ci19Ci0KLWludCBUaWxlZEltYWdlT3BlblZHOjpudW1Db2x1bW5zKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9udW1Db2x1bW5zOwotfQotCi1pbnQgVGlsZWRJbWFnZU9wZW5W
Rzo6bnVtUm93cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGlsZXMuc2l6ZSgpIC8gbV9udW1D
b2x1bW5zOwotfQotCi12b2lkIFRpbGVkSW1hZ2VPcGVuVkc6OnNldFRpbGUoaW50IHhJbmRleCwg
aW50IHlJbmRleCwgVkdJbWFnZSBpbWFnZSkKLXsKLSAgICBBU1NFUlQoeEluZGV4IDwgbV9udW1D
b2x1bW5zKTsKLSAgICBpbnQgaSA9ICh5SW5kZXggKiBtX251bUNvbHVtbnMpICsgeEluZGV4Owot
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RpbGVzLnNpemUoKSk7
Ci0gICAgbV90aWxlcy5hdChpKSA9IGltYWdlOwotfQotCi1JbnRSZWN0IFRpbGVkSW1hZ2VPcGVu
Vkc6OnRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LngoKSkgLyBtX21heFRpbGVTaXplLndp
ZHRoKCk7Ci0gICAgaW50IHRvcEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LnkoKSkgLyBt
X21heFRpbGVTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGxlZnRJbmRleCA8IDApCi0gICAgICAg
IGxlZnRJbmRleCA9IDA7Ci0gICAgaWYgKHRvcEluZGV4IDwgMCkKLSAgICAgICAgdG9wSW5kZXgg
PSAwOwotCi0gICAgLy8gUm91bmQgcmVjdCBlZGdlcyB1cCB0byBnZXQgdGhlIG91dGVyIHBpeGVs
IGJvdW5kYXJpZXMuCi0gICAgaW50IHJpZ2h0SW5kZXggPSAoc3RhdGljX2Nhc3Q8aW50PihjZWls
KHJlY3QucmlnaHQoKSkpIC0gMSkgLyBtX21heFRpbGVTaXplLndpZHRoKCk7Ci0gICAgaW50IGJv
dHRvbUluZGV4ID0gKHN0YXRpY19jYXN0PGludD4oY2VpbChyZWN0LmJvdHRvbSgpKSkgLSAxKSAv
IG1fbWF4VGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IGNvbHVtbnMgPSAocmlnaHRJbmRleCAt
IGxlZnRJbmRleCkgKyAxOwotICAgIGludCByb3dzID0gKGJvdHRvbUluZGV4IC0gdG9wSW5kZXgp
ICsgMTsKLQotICAgIHJldHVybiBJbnRSZWN0KGxlZnRJbmRleCwgdG9wSW5kZXgsCi0gICAgICAg
IChjb2x1bW5zIDw9IG1fbnVtQ29sdW1ucykgPyBjb2x1bW5zIDogbV9udW1Db2x1bW5zLAotICAg
ICAgICAocm93cyA8PSAobV90aWxlcy5zaXplKCkgLyBtX251bUNvbHVtbnMpKSA/IHJvd3MgOiAo
bV90aWxlcy5zaXplKCkgLyBtX251bUNvbHVtbnMpKTsKLX0KLQotVkdJbWFnZSBUaWxlZEltYWdl
T3BlblZHOjp0aWxlKGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHhJbmRleCA8IG1fbnVtQ29sdW1ucyk7Ci0gICAgaW50IGkgPSAoeUluZGV4ICogbV9udW1Db2x1
bW5zKSArIHhJbmRleDsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwg
bV90aWxlcy5zaXplKCkpOwotICAgIHJldHVybiBtX3RpbGVzLmF0KGkpOwotfQotCi1JbnRSZWN0
IFRpbGVkSW1hZ2VPcGVuVkc6OnRpbGVSZWN0KGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHhJbmRleCA8IG1fbnVtQ29sdW1ucyk7Ci0gICAgQVNTRVJUKCh5SW5k
ZXggKiBtX251bUNvbHVtbnMpICsgeEluZGV4IDwgbV90aWxlcy5zaXplKCkpOwotCi0gICAgaW50
IHggPSB4SW5kZXggKiBtX21heFRpbGVTaXplLndpZHRoKCk7Ci0gICAgaW50IHkgPSB5SW5kZXgg
KiBtX21heFRpbGVTaXplLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIEludFJlY3QoeCwgeSwKLSAg
ICAgICAgKChtX21heFRpbGVTaXplLndpZHRoKCkgPCBtX3NpemUud2lkdGgoKSAtIHgpID8gbV9t
YXhUaWxlU2l6ZS53aWR0aCgpIDogKG1fc2l6ZS53aWR0aCgpIC0geCkpLAotICAgICAgICAoKG1f
bWF4VGlsZVNpemUuaGVpZ2h0KCkgPCBtX3NpemUuaGVpZ2h0KCkgLSB5KSA/IG1fbWF4VGlsZVNp
emUuaGVpZ2h0KCkgOiAobV9zaXplLmhlaWdodCgpIC0geSkpKTsKLX0KLQotdm9pZCBUaWxlZElt
YWdlT3BlblZHOjpkZXRhY2hUaWxlcygpCi17Ci0gICAgbWFrZVNoYXJlZENvbnRleHRDdXJyZW50
KCk7IC8vIGJlY2F1c2Ugd2UgY3JlYXRlIG5ldyBpbWFnZXMKLQotICAgIGludCBudW1UaWxlcyA9
IG1fdGlsZXMuc2l6ZSgpOwotICAgIFZHSW1hZ2UgbmV3VGlsZSwgb3JpZ2luYWxUaWxlOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlczsgKytpKSB7Ci0gICAgICAgIG9yaWdpbmFs
VGlsZSA9IG1fdGlsZXMuYXQoaSk7Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFsVGlsZSA9PSBWR19J
TlZBTElEX0hBTkRMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFZHSW1hZ2VG
b3JtYXQgZm9ybWF0ID0gKFZHSW1hZ2VGb3JtYXQpIHZnR2V0UGFyYW1ldGVyaShvcmlnaW5hbFRp
bGUsIFZHX0lNQUdFX0ZPUk1BVCk7Ci0gICAgICAgIFZHaW50IHdpZHRoID0gdmdHZXRQYXJhbWV0
ZXJpKG9yaWdpbmFsVGlsZSwgVkdfSU1BR0VfV0lEVEgpOwotICAgICAgICBWR2ludCBoZWlnaHQg
PSB2Z0dldFBhcmFtZXRlcmkob3JpZ2luYWxUaWxlLCBWR19JTUFHRV9IRUlHSFQpOwotICAgICAg
ICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgICAgICBuZXdUaWxlID0gdmdDcmVhdGVJbWFn
ZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIFZHX0lNQUdFX1FVQUxJVFlfRkFTVEVSKTsKLSAgICAg
ICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICAgICAgdmdDb3B5SW1hZ2UobmV3VGlsZSwg
MCwgMCwgb3JpZ2luYWxUaWxlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBWR19GQUxTRSAvKiBkaXRo
ZXIgKi8pOwotICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKLQotICAgICAgICBtX3RpbGVz
LmF0KGkpID0gbmV3VGlsZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGlsZWRJbWFnZU9wZW5WRzo6ZGVz
dHJveVRpbGVzKCkKLXsKLSAgICBtYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBWZWN0b3I8VkdJbWFnZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOwot
ICAgIFZlY3RvcjxWR0ltYWdlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsK
LQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCppdCAhPSBWR19J
TlZBTElEX0hBTkRMRSkKLSAgICAgICAgICAgIHZnRGVzdHJveUltYWdlKCppdCk7Ci0gICAgfQot
ICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwotCi0gICAgbV90aWxlcy5maWxsKFZHX0lOVkFMSURf
SEFORExFKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVuVkcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGM4ZjU1ZDI4M2UyYjQxYjIwMjFmMzA2ZDI1YjczZWRiMTYzYTEyOTcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVuVkcuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUaWxlZElt
YWdlT3BlblZHX2gKLSNkZWZpbmUgVGlsZWRJbWFnZU9wZW5WR19oCi0KLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNoYXJlZFJlc291cmNlT3Bl
blZHLmgiCi0KLSNpbmNsdWRlIDxvcGVudmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotCi1jbGFzcyBUaWxlZElt
YWdlT3BlblZHIDogcHVibGljIFNoYXJlZFJlc291cmNlT3BlblZHIHsKLXB1YmxpYzoKLSAgICBU
aWxlZEltYWdlT3BlblZHKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHRpbGVT
aXplKTsKLSAgICBUaWxlZEltYWdlT3BlblZHKGNvbnN0IFRpbGVkSW1hZ2VPcGVuVkcmKTsKLSAg
ICB+VGlsZWRJbWFnZU9wZW5WRygpOwotCi0gICAgVGlsZWRJbWFnZU9wZW5WRyYgb3BlcmF0b3I9
KGNvbnN0IFRpbGVkSW1hZ2VPcGVuVkcmKTsKLQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBtYXhUaWxlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4VGlsZVNpemU7IH0KLQotICAgIGludCBudW1UaWxlcygpIGNv
bnN0OwotICAgIGludCBudW1Db2x1bW5zKCkgY29uc3Q7Ci0gICAgaW50IG51bVJvd3MoKSBjb25z
dDsKLQotICAgIEludFJlY3QgdGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFRpbGUoaW50IHhJbmRleCwgaW50IHlJbmRleCwgVkdJbWFnZSk7Ci0gICAg
VkdJbWFnZSB0aWxlKGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0OwotICAgIEludFJlY3Qg
dGlsZVJlY3QoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBkZXRhY2hUaWxlcygpOwotICAgIHZvaWQgZGVzdHJveVRpbGVzKCk7Ci0KLSAgICBJbnRT
aXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbWF4VGlsZVNpemU7Ci0KLSAgICBpbnQgbV9udW1D
b2x1bW5zOwotCi0gICAgVmVjdG9yPFZHSW1hZ2U+IG1fdGlsZXM7Ci19OwotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZH
VXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRp
bHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTU5YWFmZWE1YWZkNmRjNzlm
MGY1MTg1NDJlNGFjNjYyMzhmMTJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0
aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVkdVdGlscy5oIgotCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1WR01hdHJpeDo6
VkdNYXRyaXgoY29uc3QgVkdmbG9hdCBkYXRhWzldKQotewotICAgIG1fZGF0YVswXSA9IGRhdGFb
MF07Ci0gICAgbV9kYXRhWzFdID0gZGF0YVsxXTsKLSAgICBtX2RhdGFbMl0gPSBkYXRhWzJdOwot
ICAgIG1fZGF0YVszXSA9IGRhdGFbM107Ci0gICAgbV9kYXRhWzRdID0gZGF0YVs0XTsKLSAgICBt
X2RhdGFbNV0gPSBkYXRhWzVdOwotICAgIG1fZGF0YVs2XSA9IGRhdGFbNl07Ci0gICAgbV9kYXRh
WzddID0gZGF0YVs3XTsKLSAgICBtX2RhdGFbOF0gPSBkYXRhWzhdOwotfQotCi1WR01hdHJpeDo6
VkdNYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm1hdGlvbikKLXsKLSAgICBt
X2RhdGFbMF0gPSB0cmFuc2Zvcm1hdGlvbi5hKCk7Ci0gICAgbV9kYXRhWzFdID0gdHJhbnNmb3Jt
YXRpb24uYigpOwotICAgIG1fZGF0YVsyXSA9IDA7Ci0gICAgbV9kYXRhWzNdID0gdHJhbnNmb3Jt
YXRpb24uYygpOwotICAgIG1fZGF0YVs0XSA9IHRyYW5zZm9ybWF0aW9uLmQoKTsKLSAgICBtX2Rh
dGFbNV0gPSAwOwotICAgIG1fZGF0YVs2XSA9IHRyYW5zZm9ybWF0aW9uLmUoKTsKLSAgICBtX2Rh
dGFbN10gPSB0cmFuc2Zvcm1hdGlvbi5mKCk7Ci0gICAgbV9kYXRhWzhdID0gMTsKLX0KLQotVkdN
YXRyaXg6OlZHTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCi17Ci0g
ICAgbV9kYXRhWzBdID0gbWF0cml4Lm0xMSgpOwotICAgIG1fZGF0YVsxXSA9IG1hdHJpeC5tMTIo
KTsKLSAgICBtX2RhdGFbMl0gPSBtYXRyaXgubTE0KCk7Ci0gICAgbV9kYXRhWzNdID0gbWF0cml4
Lm0yMSgpOwotICAgIG1fZGF0YVs0XSA9IG1hdHJpeC5tMjIoKTsKLSAgICBtX2RhdGFbNV0gPSBt
YXRyaXgubTI0KCk7Ci0gICAgbV9kYXRhWzZdID0gbWF0cml4Lm00MSgpOwotICAgIG1fZGF0YVs3
XSA9IG1hdHJpeC5tNDIoKTsKLSAgICBtX2RhdGFbOF0gPSBtYXRyaXgubTQ0KCk7Ci19Ci0KLVZH
TWF0cml4OjpvcGVyYXRvciBBZmZpbmVUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm1hdGlvbigKLSAgICAgICAgbV9kYXRhWzBdLCBtX2RhdGFbMV0sCi0g
ICAgICAgIG1fZGF0YVszXSwgbV9kYXRhWzRdLAotICAgICAgICBtX2RhdGFbNl0sIG1fZGF0YVs3
XSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWF0aW9uOwotfQotCi1WR01hdHJpeDo6b3BlcmF0b3Ig
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeCgKLSAgICAgICAgbV9kYXRhWzBdLCBtX2RhdGFbMV0sIDAsIG1fZGF0YVsyXSwKLSAg
ICAgICAgbV9kYXRhWzNdLCBtX2RhdGFbNF0sIDAsIG1fZGF0YVs1XSwKLSAgICAgICAgMCwgICAg
ICAgICAwLCAgICAgICAgIDEsIDAsCi0gICAgICAgIG1fZGF0YVs2XSwgbV9kYXRhWzddLCAwLCBt
X2RhdGFbOF0pOwotICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3Bl
cmF0b3IgVkdNYXRyaXgoKSBjb25zdAotewotICAgIHJldHVybiBWR01hdHJpeCgqdGhpcyk7Ci19
Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBWR01hdHJpeCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFZHTWF0cml4KCp0aGlzKTsKLX0KLQotVkdSZWN0OjpWR1JlY3QoY29uc3QgVkdm
bG9hdCBkYXRhWzRdKQotewotICAgIG1fZGF0YVswXSA9IGRhdGFbMF07Ci0gICAgbV9kYXRhWzFd
ID0gZGF0YVsxXTsKLSAgICBtX2RhdGFbMl0gPSBkYXRhWzJdOwotICAgIG1fZGF0YVszXSA9IGRh
dGFbM107Ci19Ci0KLVZHUmVjdDo6VkdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBtX2RhdGFbMF0gPSByZWN0LngoKTsKLSAgICBtX2RhdGFbMV0gPSByZWN0LnkoKTsKLSAgICBt
X2RhdGFbMl0gPSByZWN0LndpZHRoKCk7Ci0gICAgbV9kYXRhWzNdID0gcmVjdC5oZWlnaHQoKTsK
LX0KLQotVkdSZWN0OjpvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBG
bG9hdFJlY3QobV9kYXRhWzBdLCBtX2RhdGFbMV0sIG1fZGF0YVsyXSwgbV9kYXRhWzNdKTsKLX0K
LQotRmxvYXRSZWN0OjpvcGVyYXRvciBWR1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBWR1Jl
Y3QoKnRoaXMpOwotfQotCi1pbnQgVkdVdGlsczo6Ynl0ZXNGb3JJbWFnZShWR0ltYWdlRm9ybWF0
IGZvcm1hdCwgVkdpbnQgd2lkdGgsIFZHaW50IGhlaWdodCkKLXsKLSAgICByZXR1cm4gd2lkdGgg
KiBoZWlnaHQgKiBpbWFnZUZvcm1hdEJpdHNQZXJQaXhlbChmb3JtYXQpIC8gODsKLX0KLQotaW50
IFZHVXRpbHM6OmJ5dGVzRm9ySW1hZ2VTY2FubGluZShWR0ltYWdlRm9ybWF0IGZvcm1hdCwgVkdp
bnQgd2lkdGgpCi17Ci0gICAgaW50IGJpdHMgPSB3aWR0aCAqIGltYWdlRm9ybWF0Qml0c1BlclBp
eGVsKGZvcm1hdCk7Ci0gICAgaWYgKGJpdHMgJSA4ID4gMSkgLy8gSWYgdW5hbGlnbmVkLCByb3Vu
ZCB1cCB0byB0aGUgbmV4dCBieXRlLgotICAgICAgICBiaXRzICs9IDggLSAoYml0cyAlIDgpOwot
Ci0gICAgcmV0dXJuIGJpdHMgLyA4OwotfQotCi1pbnQgVkdVdGlsczo6aW1hZ2VGb3JtYXRCaXRz
UGVyUGl4ZWwoVkdJbWFnZUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsK
LSAgICBjYXNlIFZHX3NSR0JYXzg4ODg6Ci0gICAgY2FzZSBWR19zUkdCQV84ODg4OgotICAgIGNh
c2UgVkdfc1JHQkFfODg4OF9QUkU6Ci0gICAgY2FzZSBWR19sUkdCWF84ODg4OgotICAgIGNhc2Ug
VkdfbFJHQkFfODg4ODoKLSAgICBjYXNlIFZHX2xSR0JBXzg4ODhfUFJFOgotICAgIGNhc2UgVkdf
c1hSR0JfODg4ODoKLSAgICBjYXNlIFZHX3NBUkdCXzg4ODg6Ci0gICAgY2FzZSBWR19zQVJHQl84
ODg4X1BSRToKLSAgICBjYXNlIFZHX2xYUkdCXzg4ODg6Ci0gICAgY2FzZSBWR19sQVJHQl84ODg4
OgotICAgIGNhc2UgVkdfbEFSR0JfODg4OF9QUkU6Ci0gICAgY2FzZSBWR19zQkdSWF84ODg4Ogot
ICAgIGNhc2UgVkdfc0JHUkFfODg4ODoKLSAgICBjYXNlIFZHX3NCR1JBXzg4ODhfUFJFOgotICAg
IGNhc2UgVkdfbEJHUlhfODg4ODoKLSAgICBjYXNlIFZHX2xCR1JBXzg4ODg6Ci0gICAgY2FzZSBW
R19sQkdSQV84ODg4X1BSRToKLSAgICBjYXNlIFZHX3NYQkdSXzg4ODg6Ci0gICAgY2FzZSBWR19z
QUJHUl84ODg4OgotICAgIGNhc2UgVkdfc0FCR1JfODg4OF9QUkU6Ci0gICAgY2FzZSBWR19sWEJH
Ul84ODg4OgotICAgIGNhc2UgVkdfbEFCR1JfODg4ODoKLSAgICBjYXNlIFZHX2xBQkdSXzg4ODhf
UFJFOgotICAgICAgICByZXR1cm4gMzI7Ci0KLSAgICBjYXNlIFZHX3NSR0JfNTY1OgotICAgIGNh
c2UgVkdfc1JHQkFfNTU1MToKLSAgICBjYXNlIFZHX3NSR0JBXzQ0NDQ6Ci0gICAgY2FzZSBWR19z
QVJHQl8xNTU1OgotICAgIGNhc2UgVkdfc0FSR0JfNDQ0NDoKLSAgICBjYXNlIFZHX3NCR1JfNTY1
OgotICAgIGNhc2UgVkdfc0JHUkFfNTU1MToKLSAgICBjYXNlIFZHX3NCR1JBXzQ0NDQ6Ci0gICAg
Y2FzZSBWR19zQUJHUl8xNTU1OgotICAgIGNhc2UgVkdfc0FCR1JfNDQ0NDoKLSAgICAgICAgcmV0
dXJuIDE2OwotCi0gICAgY2FzZSBWR19zTF84OgotICAgIGNhc2UgVkdfbExfODoKLSAgICBjYXNl
IFZHX0FfODoKLSAgICAgICAgcmV0dXJuIDg7Ci0KLSAgICBjYXNlIFZHX0FfNDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0KLSAgICBjYXNlIFZHX0JXXzE6Ci0gICAgY2FzZSBWR19BXzE6Ci0gICAgICAg
IHJldHVybiAxOwotCi0gICAgZGVmYXVsdDogLy8gV2lsbCBvbmx5IGhhcHBlbiB3aGVuIE9wZW5W
RyBleHRlbmRzIHRoZSBlbnVtIGFuZCB3ZSBkb24ndC4KLSAgICAgICAgQVNTRVJUKGZhbHNlKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi0jaWZuZGVmIFdURl9QTEFURk9STV9CSUdf
RU5ESUFOCi1WR0ltYWdlRm9ybWF0IFZHVXRpbHM6OmVuZGlhbkF3YXJlSW1hZ2VGb3JtYXQoVkdJ
bWFnZUZvcm1hdCBiaWdFbmRpYW5Gb3JtYXQpCi17Ci0gICAgc3dpdGNoIChiaWdFbmRpYW5Gb3Jt
YXQpIHsKLSAgICBjYXNlIFZHX3NSR0JYXzg4ODg6ICAgICByZXR1cm4gVkdfc1hCR1JfODg4ODsK
LSAgICBjYXNlIFZHX3NSR0JBXzg4ODg6ICAgICByZXR1cm4gVkdfc0FCR1JfODg4ODsKLSAgICBj
YXNlIFZHX3NSR0JBXzg4ODhfUFJFOiByZXR1cm4gVkdfc0FCR1JfODg4OF9QUkU7Ci0gICAgY2Fz
ZSBWR19sUkdCWF84ODg4OiAgICAgcmV0dXJuIFZHX2xYQkdSXzg4ODg7Ci0gICAgY2FzZSBWR19s
UkdCQV84ODg4OiAgICAgcmV0dXJuIFZHX2xBQkdSXzg4ODg7Ci0gICAgY2FzZSBWR19sUkdCQV84
ODg4X1BSRTogcmV0dXJuIFZHX2xBQkdSXzg4ODhfUFJFOwotICAgIGNhc2UgVkdfc1hSR0JfODg4
ODogICAgIHJldHVybiBWR19zQkdSWF84ODg4OwotICAgIGNhc2UgVkdfc0FSR0JfODg4ODogICAg
IHJldHVybiBWR19zQkdSQV84ODg4OwotICAgIGNhc2UgVkdfc0FSR0JfODg4OF9QUkU6IHJldHVy
biBWR19zQkdSQV84ODg4X1BSRTsKLSAgICBjYXNlIFZHX2xYUkdCXzg4ODg6ICAgICByZXR1cm4g
VkdfbEJHUlhfODg4ODsKLSAgICBjYXNlIFZHX2xBUkdCXzg4ODg6ICAgICByZXR1cm4gVkdfbEJH
UkFfODg4ODsKLSAgICBjYXNlIFZHX2xBUkdCXzg4ODhfUFJFOiByZXR1cm4gVkdfbEJHUkFfODg4
OF9QUkU7Ci0gICAgY2FzZSBWR19zQkdSWF84ODg4OiAgICAgcmV0dXJuIFZHX3NYUkdCXzg4ODg7
Ci0gICAgY2FzZSBWR19zQkdSQV84ODg4OiAgICAgcmV0dXJuIFZHX3NBUkdCXzg4ODg7Ci0gICAg
Y2FzZSBWR19zQkdSQV84ODg4X1BSRTogcmV0dXJuIFZHX3NBUkdCXzg4ODhfUFJFOwotICAgIGNh
c2UgVkdfbEJHUlhfODg4ODogICAgIHJldHVybiBWR19sWFJHQl84ODg4OwotICAgIGNhc2UgVkdf
bEJHUkFfODg4ODogICAgIHJldHVybiBWR19sQVJHQl84ODg4OwotICAgIGNhc2UgVkdfbEJHUkFf
ODg4OF9QUkU6IHJldHVybiBWR19sQVJHQl84ODg4X1BSRTsKLSAgICBjYXNlIFZHX3NYQkdSXzg4
ODg6ICAgICByZXR1cm4gVkdfc1JHQlhfODg4ODsKLSAgICBjYXNlIFZHX3NBQkdSXzg4ODg6ICAg
ICByZXR1cm4gVkdfc1JHQkFfODg4ODsKLSAgICBjYXNlIFZHX3NBQkdSXzg4ODhfUFJFOiByZXR1
cm4gVkdfc1JHQkFfODg4OF9QUkU7Ci0gICAgY2FzZSBWR19sWEJHUl84ODg4OiAgICAgcmV0dXJu
IFZHX2xSR0JYXzg4ODg7Ci0gICAgY2FzZSBWR19sQUJHUl84ODg4OiAgICAgcmV0dXJuIFZHX2xS
R0JBXzg4ODg7Ci0gICAgY2FzZSBWR19sQUJHUl84ODg4X1BSRTogcmV0dXJuIFZHX2xSR0JBXzg4
ODhfUFJFOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChWR0ltYWdlRm9ybWF0KSAwOwotICAgIH0K
LX0KLSNlbHNlCi1WR0ltYWdlRm9ybWF0IFZHVXRpbHM6OmVuZGlhbkF3YXJlSW1hZ2VGb3JtYXQo
VkdJbWFnZUZvcm1hdCBiaWdFbmRpYW5Gb3JtYXQpCi17Ci0gICAgcmV0dXJuIGJpZ0VuZGlhbkZv
cm1hdDsKLX0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZk
NWZlYWUxYjQyYjQ4NGZjNWIzMzc2OGM0YTg4ZDk2YjllYWI5MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvVkdVdGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBWR1V0aWxzX2gKLSNkZWZpbmUgVkdVdGlsc19o
Ci0KLSNpbmNsdWRlIDxvcGVudmcuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHRvVkdFcnJvckNvbnN0YW50KFZHRXJyb3JDb2RlIGVy
cm9yKQotewotICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICBjYXNlIFZHX0JBRF9IQU5ETEVfRVJS
T1I6Ci0gICAgICAgIHJldHVybiAiVkdfQkFEX0hBTkRMRV9FUlJPUiI7Ci0gICAgY2FzZSBWR19J
TExFR0FMX0FSR1VNRU5UX0VSUk9SOgotICAgICAgICByZXR1cm4gIlZHX0lMTEVHQUxfQVJHVU1F
TlRfRVJST1IiOwotICAgIGNhc2UgVkdfT1VUX09GX01FTU9SWV9FUlJPUjoKLSAgICAgICAgcmV0
dXJuICJWR19PVVRfT0ZfTUVNT1JZX0VSUk9SIjsKLSAgICBjYXNlIFZHX1BBVEhfQ0FQQUJJTElU
WV9FUlJPUjoKLSAgICAgICAgcmV0dXJuICJWR19QQVRIX0NBUEFCSUxJVFlfRVJST1IiOwotICAg
IGNhc2UgVkdfVU5TVVBQT1JURURfSU1BR0VfRk9STUFUX0VSUk9SOgotICAgICAgICByZXR1cm4g
IlZHX1VOU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVF9FUlJPUiI7Ci0gICAgY2FzZSBWR19VTlNVUFBP
UlRFRF9QQVRIX0ZPUk1BVF9FUlJPUjoKLSAgICAgICAgcmV0dXJuICJWR19VTlNVUFBPUlRFRF9Q
QVRIX0ZPUk1BVF9FUlJPUiI7Ci0gICAgY2FzZSBWR19JTUFHRV9JTl9VU0VfRVJST1I6Ci0gICAg
ICAgIHJldHVybiAiVkdfSU1BR0VfSU5fVVNFX0VSUk9SIjsKLSAgICBjYXNlIFZHX05PX0NPTlRF
WFRfRVJST1I6Ci0gICAgICAgIHJldHVybiAiVkdfTk9fQ09OVEVYVF9FUlJPUiI7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuICJVTktOT1dOX0VSUk9SIjsKLSAgICB9Ci19Ci0KLSNpZiBB
U1NFUlRfRElTQUJMRUQKLSNkZWZpbmUgQVNTRVJUX1ZHX05PX0VSUk9SKCkgKCh2b2lkKTApCi0j
ZWxzZQotI2RlZmluZSBBU1NFUlRfVkdfTk9fRVJST1IoKSBkbyB7IFwKLSAgICBWR0Vycm9yQ29k
ZSB2Z0Vycm9yQ29kZSA9IHZnR2V0RXJyb3IoKTsgXAotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
dmdFcnJvckNvZGUgPT0gVkdfTk9fRVJST1IsICJGb3VuZCAlcyIsIHRvVkdFcnJvckNvbnN0YW50
KHZnRXJyb3JDb2RlKSk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNz
IFRyYW5zZm9ybWF0aW9uTWF0cml4OwotCi1jbGFzcyBWR01hdHJpeCB7Ci1wdWJsaWM6Ci0gICAg
VkdNYXRyaXgoY29uc3QgVkdmbG9hdCBkYXRhWzldKTsKLSAgICBWR01hdHJpeChjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKLSAgICBWR01hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwotICAgIGNvbnN0IFZHZmxvYXQqIHRvVkdmbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQotICAgIG9wZXJhdG9yIEFmZmluZVRyYW5zZm9ybSgpIGNvbnN0OwotICAgIG9wZXJhdG9yIFRy
YW5zZm9ybWF0aW9uTWF0cml4KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFZHZmxvYXQgbV9kYXRh
WzldOwotfTsKLQotY2xhc3MgVkdSZWN0IHsKLXB1YmxpYzoKLSAgICBWR1JlY3QoY29uc3QgVkdm
bG9hdCBkYXRhWzRdKTsKLSAgICBWR1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgY29uc3Qg
VkdmbG9hdCogdG9WR2Zsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgb3BlcmF0
b3IgRmxvYXRSZWN0KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFZHZmxvYXQgbV9kYXRhWzRdOwot
fTsKLQotY2xhc3MgVkdVdGlscyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGludCBieXRlc0Zvcklt
YWdlKFZHSW1hZ2VGb3JtYXQsIFZHaW50IHdpZHRoLCBWR2ludCBoZWlnaHQpOwotICAgIHN0YXRp
YyBpbnQgYnl0ZXNGb3JJbWFnZVNjYW5saW5lKFZHSW1hZ2VGb3JtYXQsIFZHaW50IHdpZHRoKTsK
LSAgICBzdGF0aWMgaW50IGltYWdlRm9ybWF0Qml0c1BlclBpeGVsKFZHSW1hZ2VGb3JtYXQpOwot
Ci0gICAgLyoqCi0gICAgICogUmV0dXJuIGEgZmxpcHBlZCBWR0ltYWdlRm9ybWF0IGlmIHRoZSBw
bGF0Zm9ybSBpcyBsaXR0bGUgZW5kaWFuCi0gICAgICogKGUuZy4gVkdfQUJHUl84ODg4IGZvciBh
IGdpdmVuIFZHX1JHQkFfODg4OCksIG9yIHJldHVybiB0aGUgaW1hZ2UgZm9ybWF0Ci0gICAgICog
YXMgaXMgaWYgdGhlIHBsYXRmb3JtIGlzIGJpZyBlbmRpYW4uCi0gICAgICoKLSAgICAgKiBPcGVu
VkcgaXRzZWxmIGlzIGluZGlmZmVyZW50IHRvIGVuZGlhbm5lc3MsIGl0IHdpbGwgYWx3YXlzIHdv
cmsgb24gYQotICAgICAqIHNpbmdsZSBtYWNoaW5lIHdvcmQgd2l0aCB0aGUgYnl0ZXMgZ29pbmcg
ZnJvbSBsZWZ0IHRvIHJpZ2h0IGFzIHNwZWNpZmllZAotICAgICAqIGluIHRoZSBpbWFnZSBmb3Jt
YXQsIG5vIG1hdHRlciB3aGljaCBvbmUgb2YgdGhlIGJ5dGVzIGlzIG1vc3Qgb3IgbGVhc3QKLSAg
ICAgKiBzaWduaWZpY2FudC4KLSAgICAgKgotICAgICAqIEhvd2V2ZXIsIGlmIHlvdSBpbnRlcmZh
Y2Ugd2l0aCB2Z0ltYWdlU3ViRGF0YSgpL3ZnR2V0SW1hZ2VTdWJEYXRhKCkKLSAgICAgKiB1c2lu
ZyBhIGJ5dGUgYXJyYXkgdGhlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGJ5dGUgb3JkZXIg
aXMKLSAgICAgKiBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtIChvdGhlcndpc2Ug
dGhlIGJ5dGUgaW5kZXhlcyBuZWVkCi0gICAgICogdG8gYmUgc3dhcHBlZCBkZXBlbmRpbmcgb24g
ZW5kaWFubmVzcykuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiB3aGVuCi0gICAgICogaW50ZXJmYWNp
bmcgd2l0aCBieXRlIGFycmF5cywgYW5kIGRvbid0IHVzZSBpdCBvdGhlcndpc2UuCi0gICAgICov
Ci0gICAgc3RhdGljIFZHSW1hZ2VGb3JtYXQgZW5kaWFuQXdhcmVJbWFnZUZvcm1hdChWR0ltYWdl
Rm9ybWF0IGJpZ0VuZGlhbkZvcm1hdCk7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zv
cm0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5l
VHJhbnNmb3JtLmgKaW5kZXggYWJiYzIxNDBmMDFkZjk5ZWRkYmEyZDFmMTY2ODQ5MjhmYjk0Yzdk
ZC4uNzE3MGZlNTMzZjNiODkzZWY1ZDdkOTRjMjNiMTEyOTJmZmI0OWM3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zv
cm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oCkBAIC0zNCw4ICszNCw2IEBACiB0eXBlZGVmIHN0cnVjdCBDR0FmZmlu
ZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybTsKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRl
IDxjYWlyby5oPgotI2VsaWYgUExBVEZPUk0oT1BFTlZHKQotI2luY2x1ZGUgIlZHVXRpbHMuaCIK
ICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAjZWxpZiBVU0UoU0tJ
QSkKQEAgLTE3NCw4ICsxNzIsNiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dBZmZpbmVUcmFu
c2Zvcm0oKSBjb25zdDsKICNlbGlmIFVTRShDQUlSTykKICAgICBvcGVyYXRvciBjYWlyb19tYXRy
aXhfdCgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oT1BFTlZHKQotICAgIG9wZXJhdG9yIFZHTWF0
cml4KCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBvcGVyYXRvciBRVHJhbnNmb3Jt
KCkgY29uc3Q7CiAjZWxpZiBVU0UoU0tJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguaAppbmRleCBiMWU1NjY1NWNkZmEzN2ZmYzI2NWQ5MWY3MTJkMTNjNzNlNmQyMTU3Li5iMjZm
M2FhZjk4Y2FlYzYxZDU1NzQwMjk4ODc5OWYzNWIzZGM5NTliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC00Miw4ICs0Miw2IEBAIHR5cGVkZWYgc3RydWN0IF9Db2ds
TWF0cml4IENvZ2xNYXRyaXg7CiB0eXBlZGVmIHN0cnVjdCBDR0FmZmluZVRyYW5zZm9ybSBDR0Fm
ZmluZVRyYW5zZm9ybTsKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlIDxjYWlyby5oPgotI2Vs
aWYgUExBVEZPUk0oT1BFTlZHKQotI2luY2x1ZGUgIlZHVXRpbHMuaCIKICNlbGlmIFBMQVRGT1JN
KFFUKQogI2luY2x1ZGUgPFFNYXRyaXg0eDQ+CiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KQEAgLTM0
OSw4ICszNDcsNiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dBZmZpbmVUcmFuc2Zvcm0oKSBj
b25zdDsKICNlbGlmIFVTRShDQUlSTykKICAgICBvcGVyYXRvciBjYWlyb19tYXRyaXhfdCgpIGNv
bnN0OwotI2VsaWYgUExBVEZPUk0oT1BFTlZHKQotICAgIG9wZXJhdG9yIFZHTWF0cml4KCkgY29u
c3Q7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBvcGVyYXRvciBRVHJhbnNmb3JtKCkgY29uc3Q7
CiAgICAgb3BlcmF0b3IgUU1hdHJpeDR4NCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5WRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VE
ZWNvZGVyT3BlblZHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzZTUyNzMx
MTY0NmU3OTMyYWMwMzdjYTRkNTFjYmJmMDA0MzA4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKLSNpbmNsdWRlICJTdXJmYWNlT3BlblZHLmgiCi0jaW5jbHVkZSAiVGlsZWRJ
bWFnZU9wZW5WRy5oIgotI2luY2x1ZGUgIlZHVXRpbHMuaCIKLQotI2lmIFBMQVRGT1JNKEVHTCkK
LSNpbmNsdWRlICJFR0xEaXNwbGF5T3BlblZHLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG9wZW52
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NOYXRpdmVJbWFnZVB0ciBJbWFnZUZy
YW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgVkdJbWFn
ZUZvcm1hdCBidWZmZXJGb3JtYXQgPSBWR19zQVJHQl84ODg4X1BSRTsKLSAgICAvLyBTYXZlIG1l
bW9yeSBieSB1c2luZyAxNi1iaXQgaW1hZ2VzIGZvciBmdWxseSBvcGFxdWUgaW1hZ2VzLgotICAg
IGNvbnN0IFZHSW1hZ2VGb3JtYXQgaW1hZ2VGb3JtYXQgPSBoYXNBbHBoYSgpID8gYnVmZmVyRm9y
bWF0IDogVkdfc1JHQl81NjU7Ci0KLSNpZiBQTEFURk9STShFR0wpCi0gICAgRUdMRGlzcGxheU9w
ZW5WRzo6Y3VycmVudCgpLT5zaGFyZWRQbGF0Zm9ybVN1cmZhY2UoKS0+bWFrZUN1cnJlbnQoKTsK
LSNlbmRpZgotCi0gICAgY29uc3QgSW50U2l6ZSB2Z01heEltYWdlU2l6ZSh2Z0dldGkoVkdfTUFY
X0lNQUdFX1dJRFRIKSwgdmdHZXRpKFZHX01BWF9JTUFHRV9IRUlHSFQpKTsKLSAgICBBU1NFUlRf
VkdfTk9fRVJST1IoKTsKLQotICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSBuZXcg
VGlsZWRJbWFnZU9wZW5WRyhJbnRTaXplKHdpZHRoKCksIGhlaWdodCgpKSwgdmdNYXhJbWFnZVNp
emUpOwotCi0gICAgY29uc3QgaW50IG51bUNvbHVtbnMgPSB0aWxlZEltYWdlLT5udW1Db2x1bW5z
KCk7Ci0gICAgY29uc3QgaW50IG51bVJvd3MgPSB0aWxlZEltYWdlLT5udW1Sb3dzKCk7Ci0KLSAg
ICBmb3IgKGludCB5SW5kZXggPSAwOyB5SW5kZXggPCBudW1Sb3dzOyArK3lJbmRleCkgewotICAg
ICAgICBmb3IgKGludCB4SW5kZXggPSAwOyB4SW5kZXggPCBudW1Db2x1bW5zOyArK3hJbmRleCkg
ewotICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVkSW1hZ2UtPnRpbGVSZWN0KHhJ
bmRleCwgeUluZGV4KTsKLSAgICAgICAgICAgIFZHSW1hZ2UgaW1hZ2UgPSB2Z0NyZWF0ZUltYWdl
KGltYWdlRm9ybWF0LAotICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0
LmhlaWdodCgpLCBWR19JTUFHRV9RVUFMSVRZX0ZBU1RFUik7Ci0gICAgICAgICAgICBBU1NFUlRf
VkdfTk9fRVJST1IoKTsKLQotICAgICAgICAgICAgUGl4ZWxEYXRhKiBwaXhlbERhdGEgPSBjb25z
dF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9ICh0
aWxlUmVjdC55KCkgKiB3aWR0aCgpKSArIHRpbGVSZWN0LngoKTsKLQotICAgICAgICAgICAgdmdJ
bWFnZVN1YkRhdGEoaW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVs
RGF0YSksCi0gICAgICAgICAgICAgICAgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpLCBidWZm
ZXJGb3JtYXQsCi0gICAgICAgICAgICAgICAgMCwgMCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJl
Y3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7Ci0KLSAgICAg
ICAgICAgIHRpbGVkSW1hZ2UtPnNldFRpbGUoeEluZGV4LCB5SW5kZXgsIGltYWdlKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aWxlZEltYWdlOwotfQotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>