<?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>230912</bug_id>
          
          <creation_ts>2021-09-28 14:01:40 -0700</creation_ts>
          <short_desc>Move `DrawGlyphsRecorder` outside of `DisplayList`</short_desc>
          <delta_ts>2021-09-28 15:23:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>230781</blocked>
    
    <blocked>230913</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1798027</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-09-28 14:01:40 -0700</bug_when>
    <thetext>there&apos;s really nothing about `DrawGlyphsRecorder` that&apos;s specific to display lists other than it only being used by `DisplayList::Recorder`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798038</commentid>
    <comment_count>1</comment_count>
      <attachid>439517</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-09-28 14:31:50 -0700</bug_when>
    <thetext>Created attachment 439517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798042</commentid>
    <comment_count>2</comment_count>
      <attachid>439518</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-09-28 14:37:07 -0700</bug_when>
    <thetext>Created attachment 439518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798066</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-28 15:19:22 -0700</bug_when>
    <thetext>Committed r283199 (242246@main): &lt;https://commits.webkit.org/242246@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439518.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798068</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-28 15:20:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/83643268&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439517</attachid>
            <date>2021-09-28 14:31:50 -0700</date>
            <delta_ts>2021-09-28 15:23:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230912-20210928143149.patch</filename>
            <type>text/plain</type>
            <size>76046</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmU2YWYwYjZmOWIyMDYyNjA5NGZmM2U1ZDk3ZTBiOGRlM2M1OWZkLi4w
MGI3YTMxYmFmY2ZiY2Y2MmQ0MGVmZWIzZjRmODg3MmI5NDI5MmQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzMgQEAKKzIwMjEtMDktMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgYERyYXdHbHlwaHNSZWNvcmRlcmAgb3V0c2lkZSBvZiBgRGlzcGxh
eUxpc3RgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzA5MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGVyZSdzIHJlYWxseSBub3RoaW5nIGFib3V0IGBEcmF3R2x5cGhzUmVjb3JkZXJgIHRoYXQncyBz
cGVjaWZpYyB0byBkaXNwbGF5IGxpc3RzIG90aGVyCisgICAgICAgIHRoYW4gaXQncyBjdXJyZW50
bHkgb25seSBiZWluZyB1c2VkIGJ5IGBEaXNwbGF5TGlzdDo6UmVjb3JkZXJgLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgYERyYXdHbHlwaHNSZWNvcmRlcmAgb3V0c2lkZSBvZiBgbmFtZXNw
YWNlIERpc3BsYXlMaXN0YCAoYW5kIHRoZSByZWxhdGVkCisgICAgICAgIGZvbGRlciBpbiB0aGUg
c291cmNlIHRyZWUpLiBUaGUgbmV4dCBwYXRjaCAoPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMDkx
Mz4pIHdpbGwgZ2VuZXJhbGl6ZQorICAgICAgICBpdCB0byBhbGxvdyBhbnkgYEdyYXBoaWNzQ29u
dGV4dGAgaW5zdGVhZCBvZiBqdXN0IGBEaXNwbGF5TGlzdDo6UmVjb3JkZXJgLiBUaGlzIGlzIGJl
aW5nCisgICAgICAgIGRvbmUgdG8gbWFrZSBgPGF0dGFjaG1lbnQ+YCBkcmF3aW5nIHdvcmsgaW4g
dGhlIEdQVVByb2Nlc3MgKDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzA3ODE+KS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyQ29yZVRleHQuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
cldpbi5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oOgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L0ZyZWVUeXBlLmNtYWtlOgorCiAyMDIxLTA5LTI3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIENTU0ZvbnRQYWxldHRl
VmFsdWVzUnVsZS5uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBlYzA1MDE0MmE1ZmM2NjEzZDc3
MzVmNjVmOTQ5Zjc4MWQ4Y2UwZmM2Li45ZDllOTkyNGFjOTc2NDQ3YzNlNDZkYTY4ZjZmYjgxOWNm
YWJmODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEyNDMsNiArMTI0Myw3IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JGYWN0b3J5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5VXBk
YXRlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRMaW5lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTEzNzQsNyAr
MTM3NSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmgKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
Rmx1c2hJZGVudGlmaWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpp
bmRleCA1NjUwOWJjNDc1NTExNTA0OWRlZDI0Njk0YzM3MTZkZmM0ZWJhOGNhLi5jZjgxMjA3MzYy
NGE5NTFlOGY1NjM0NDk1ZjYyMmE4M2Y1YzI4MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKQEAgLTMwLDggKzMwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbkNGLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9j
Zi9XZWJDb3JlQVZDRlJlc291cmNlTG9hZGVyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAotCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKIAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DRi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDZjNGNmMDc0NjBiYWRlYmMzMzE3MTY5MDgzOWE1N2IwZDA5YTRmOTEuLjQ1MWQzODQ0
MmQ4NzFiYTZiMjZhMDVkNjVkODc3YjcwZmU2NmMwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMzg3LDYgKzM4Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVDQUxh
eWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21wcmVzc2lv
blNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKQEAgLTM5Niw3ICszOTcsNiBAQCBwbGF0Zm9y
bS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCi1wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0lj
b25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAyNWMxMTQ2NjJkYmRiMzQ4OGVmYmJkOTM5MTEwYWQzMGFmNWJjMThmLi5k
NWVjYzQzZmEzYWEwY2Q0YjMxMjJhMzdhMGExNmFmNDcxZTg3ZTMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDcsNyArNjQ3
LDcgQEAKIAkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBRjM0N0UwQTZD
NDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDQUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBX
ZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICov
OyB9OwogCQkxQ0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBRjM0
ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQ0FGNTZEQjI1MzAxQUM4
MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3
MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTFDQUY1NkRCMjUzMDFBQzgwMDE3QjQ3MiAv
KiBEcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3MiAvKiBEcmF3R2x5cGhzUmVjb3Jk
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
Q0NEODE1MDIyMzFGODNFMDA2NUZDMkIgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRp
b25RdWV1ZURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE1MjU1MTQxNkZEMjM0RjAwM0Q3QURCIC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRs
ZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbSAqLzsgfTsKIAkJMUNDREY1QkUxOTkwMzMyNDAw
QkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQ0RGNUJDMTk5MDMzMjQwMEJDRUJBRCAvKiBTVkdU
b09URkZvbnRDb252ZXJzaW9uLmggKi87IH07CiAJCTFDRTg4NjQxMjYxMDVCRjIwMDBDODE2QyAv
KiBJbk1lbW9yeURpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQ0U4ODYzRjI2MTA1QTVGMDAwQzgxNkMgLyogSW5NZW1vcnlEaXNwbGF5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC03MDE2LDggKzcwMTYsOCBAQAogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2Ny
aXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBB
QkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3
MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQ0FGNTZERTI1MzAyNDVBMDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdHbHlwaHNS
ZWNvcmRlckNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBRjU2
RDgyNTMwMTQ1NzAwMTdCNDcyIC8qIERyYXdHbHlwaHNSZWNvcmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEcmF3R2x5cGhzUmVjb3JkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNB
RjU2REUyNTMwMjQ1QTAwMTdCNDcyIC8qIERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5MzAwOTNCOUNEIC8qIFRleHRE
ZWNvcmF0aW9uVGhpY2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEZCMjE3QjgzOTQwMDkz
QjlDRCAvKiBUZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRVbmRlcmxp
bmVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkIxOTkwMzMy
NDAwQkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODEwNCw4ICsxODEwNCw2IEBACiAJCQljaGlsZHJlbiA9
ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAog
CQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAotCQkJCTFD
QUY1NkQ4MjUzMDE0NTcwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5o
ICovLAotCQkJCTFDQUY1NkRFMjUzMDI0NUEwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckNvcmVUZXh0LmNwcCAqLywKIAkJCQk1NUMwQTI5NTIzRkUyQ0UwMDBGMkNCOTMg
LyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNzJFQTA5RjkyM0ZDQ0M2
QTAwODUwNEE1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJCQk3MjQyQUM5
NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaCAqLywKQEAg
LTE4OTQ5LDYgKzE4OTQ3LDcgQEAKIAkJMUM2RkQ5MjAyNTBDQ0E2NDAwRDZFOTIwIC8qIGNvcmV0
ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQ0FG
NTZERTI1MzAyNDVBMDAxN0I0NzIgLyogRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwICov
LAogCQkJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2FzY2FkZUNvcmVUZXh0LmNw
cCAqLywKIAkJCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyogRm9udENvcmVUZXh0LmNwcCAq
LywKIAkJCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9udFBsYXRmb3JtRGF0YUNvcmVU
ZXh0LmNwcCAqLywKQEAgLTI2OTUwLDYgKzI2OTQ5LDcgQEAKIAkJCQkyRDI5RUNDNDE5MkVDQzgz
MDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oICovLAogCQkJCTBGQkI1
RkM5MjYwRTlCNDMwMDU0NTcyQyAvKiBEaXNwbGF5VXBkYXRlLmNwcCAqLywKIAkJCQkwRkJCNUZD
QjI2MEU5QjQ0MDA1NDU3MkMgLyogRGlzcGxheVVwZGF0ZS5oICovLAorCQkJCTFDQUY1NkQ4MjUz
MDE0NTcwMDE3QjQ3MiAvKiBEcmF3R2x5cGhzUmVjb3JkZXIuaCAqLywKIAkJCQk2RTY3RDJBODEy
ODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJMkU4ODhDQTkyNUY2QTQx
MTAwNTc5MTRBIC8qIEZsb2F0TGluZS5jcHAgKi8sCiAJCQkJMkU4ODhDQTgyNUY2QTQxMTAwNTc5
MTRBIC8qIEZsb2F0TGluZS5oICovLApAQCAtMzIxOTMsNyArMzIxOTMsNiBAQAogCQkJCUY0N0Ew
OUQxMjBBOTNBOTcwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3RURBQUZDOTE5QTJDQ0RDMDAzNERGRDEgLyogRGlza0NhY2hlTW9uaXRvckNvY29h
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTFDQUY1NkRCMjUzMDFBQzgwMDE3QjQ3MiAvKiBE
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5
NDAyNDA4OTY0MDAwREU0RDJGIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcyNDJBQzk3MjU3NThGRTEwMDVBOUNGMSAvKiBEaXNwbGF5TGlzdEZsdXNo
SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5M0UyNDA4OTYzNTAwREU0RDJG
IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzIzMDIsNiAr
MzIzMDEsNyBAQAogCQkJCUE3Q0ZCM0QyMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRjVFNEQ5MUU1Njc3QTkwMDRBMUYwMSAvKiBEcmFnSXRlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJEIC8qIERyYWdTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUNBRjU2REIyNTMwMUFDODAwMTdCNDcyIC8qIERyYXdH
bHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQTkxRjYyNEQzMkREQzAwQkZE
ODlDIC8qIER1YWxzaG9jazNISURHYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2QjdB
ODI1NTFENDFGMDA1OEREM0EgLyogRHVtbXlTcGVlY2hSZWNvZ25pdGlvblByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzA4NURGODI2RTgyMkM3MDAwRUM2QTcgLyogRHVtbXlTdG9yYWdl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRnJlZVR5cGUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmVlVHlwZS5j
bWFrZQppbmRleCBmMzhiNTRlMTdjOTMxNTY1MTU0Y2FiOTUzYTgxZTBlOTZmNTc0OWE0Li43NmRl
ZTFlZjMxMTM0ZjY4MTkzYTQ5NmY1ZDU4MmQwY2ZjOWM1M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GcmVlVHlwZS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GcmVlVHlwZS5jbWFrZQpAQCAtNSw4ICs1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9Q
UklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVySGFyZkJ1enouY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMTUsNiArMTMsNyBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udERlc2NyaXB0aW9uSGFyZkJ1enouY3BwCiApCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29y
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjc5ZDA0OTg2ZDQ2YjI5N2ZiNWUwZGE2MDBjNmZlNGZhM2I1MDg1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGll
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgi
CisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCisj
aWYgVVNFKENPUkVfVEVYVCkKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGb250OworY2xhc3Mg
R2x5cGhCdWZmZXI7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK25hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7CitjbGFzcyBSZWNvcmRlcjsKK30KKworY2xhc3MgRHJhd0dseXBoc1JlY29yZGVyIHsK
K3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiB7CisgICAg
ICAgIERlY29uc3RydWN0LAorICAgICAgICBEb250RGVjb25zdHJ1Y3QKKyAgICB9OworICAgIGV4
cGxpY2l0IERyYXdHbHlwaHNSZWNvcmRlcihEaXNwbGF5TGlzdDo6UmVjb3JkZXImLCBEcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb24pOworCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGlu
Z01vZGUpOworCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICB2b2lk
IHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVj
dCk7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGhbXSwgY29u
c3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERy
YXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0LCBDR0ltYWdl
UmVmKTsKKyNlbmRpZgorCisgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNE
ZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9u
OyB9CisKK3ByaXZhdGU6CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAg
ICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNl
bmRpZgorCisgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKTsKKyAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJik7CisgICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0
IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29u
dGV4dCgpOworCisgICAgdm9pZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVu
dCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlU3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxw
dHIpOworICAgIHZvaWQgdXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIGVu
dW0gY2xhc3MgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgeworICAgICAgICBVbnNwZWNpZmllZCwK
KyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgdm9pZCB1cGRhdGVTaGFkb3co
Y29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworCisjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxl
UmVmKTsKKyNlbmRpZgorCisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyJiBtX293bmVyOworICAg
IERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKKwor
I2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBo
aWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKworICAgIGNvbnN0IEZvbnQq
IG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OworICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21v
b3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CisgICAgQWZm
aW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OworCisgICAgc3RydWN0IFN0YXRlIHsK
KyAgICAgICAgc3RydWN0IFN0eWxlIHsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yOworICAgICAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKKyAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtOworICAgICAgICAgICAgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm47CisgICAgICAgIH07CisgICAgICAgIFN0eWxlIGZpbGxTdHlsZTsKKyAgICAgICAg
U3R5bGUgc3Ryb2tlU3R5bGU7CisKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKKworICAg
ICAgICBzdHJ1Y3QgU2hhZG93U3RhdGUgeworICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsK
KyAgICAgICAgICAgIGZsb2F0IGJsdXIgeyAwIH07CisgICAgICAgICAgICBDb2xvciBjb2xvcjsK
KyAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgICAgIH07
CisgICAgICAgIFNoYWRvd1N0YXRlIHNoYWRvdzsKKyAgICB9OworICAgIFN0YXRlIG1fb3JpZ2lu
YWxTdGF0ZTsKKyAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcAppbmRleCBmYjkwZWYxNWZhNWEwNmQ5ZmUxMzBlNzFlY2I0NjU1YmM5MDA1MmYwLi41
MzU2MTk3YTM0NGE2OTllYzg5MDhiMTgwNmMxNzU2OTkzODBiYTZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0yMTMsNyArMjEz
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBG
b250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0
PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxp
c3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIHJlY29yZGluZ0NvbnRleHQoKmRpc3Bs
YXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwg
bnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29u
c3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBy
ZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3Qo
KSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwogICAgIAogICAgIEZsb2F0UG9p
bnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmlu
aXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwg
Z2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5
cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjEw
YTU2YWZhOWY1OGNkNGUzZjQxOWM5NWMwODI5M2E2ZWFmYmU4YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNv
cmRlckNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKworI2luY2x1ZGUgPENvcmVU
ZXh0L0NvcmVUZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5M
YXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiBy
c3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwg
Q0dDb250ZXh0RGVsZWdhdGVSZWYpCit7CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRl
ciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdl
dEluZm8oZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwg
Z3N0YXRlLCByZWN0KTsKKyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisKK3N0YXRpYyBDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkKK3sKKyAgICBEcmF3
R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRl
cio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVyLnJl
Y29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisK
K3N0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUs
IENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENH
QWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2lu
dCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQoreworICAgIGlmIChDR0dTdGF0ZUdldEFscGhh
KGdzdGF0ZSkgPiAwKSB7CisgICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAq
c3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZv
KGRlbGVnYXRlKSk7CisgICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0YXRlLCBn
c3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOworICAgIH0KKyAgICByZXR1cm4g
a0NHRXJyb3JTdWNjZXNzOworfQorCitzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0
RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0
ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQoreworICAgIERyYXdH
bHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVy
Kj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7CisgICAgcmVjb3JkZXIucmVj
b3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmV0dXJuIGtD
R0Vycm9yU3VjY2VzczsKK30KKworVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQoreworICAgIGF1dG8gY29udGV4dERl
bGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgQ0dD
b250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5M
YXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5M
YXllcikpOworICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRl
LmdldCgpLCBkZUVuZExheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2Fs
bGJhY2s+KCZlbmRMYXllcikpOworICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29u
dGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250
ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OmRyYXdHbHlwaHMpKTsKKyAgICBDR0NvbnRl
eHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3SW1hZ2Us
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmRyYXdJbWFnZSkp
OworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dDb250ZXh0Q3JlYXRlV2l0aERlbGVnYXRl
KGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwga0NHQ29udGV4dFR5cGVVbmtub3duLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0Q0c+KGNv
bnRleHQuZ2V0KCkpOworfQorCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRl
cihEaXNwbGF5TGlzdDo6UmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24g
ZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1f
ZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKKyAgICAs
IG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgpKQoreworfQorCit2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCit7CisgICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7CisgICAgbV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnQ7CisgICAgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOworICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKKworICAgIG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJva2VDb2xvcjsKKyAg
ICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisgICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsK
KyAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5z
dHJva2VQYXR0ZXJuOworCisgICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1fb3duZXIuY3VycmVu
dFN0YXRlKCkuY3RtOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2UgQ1RNLgorCisgICAgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUuc2hhZG93T2Zmc2V0OworICAg
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dCbHVyOwor
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250ZXh0U3RhdGUuc2hhZG93Q29s
b3I7CisgICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gY29udGV4
dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisgICAgbV9jdXJyZW50U3RhdGUgPSBt
X29yaWdpbmFsU3RhdGU7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQor
eworICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKKyAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmNvbG9yKTsKKyAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50KQorICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybikKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICB9
CisKKyAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5jb2xvcik7CisgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmdyYWRpZW50KQorICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3Jh
ZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOworICAgICAg
ICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCisgICAgICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLnBhdHRlcm4pOworICAgIH0KKworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0o
bV9vcmlnaW5hbFN0YXRlLmN0bSk7CisKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKKworICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7
CisgICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgo
Zm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKKworICAgIG1fb3JpZ2luYWxGb250ID0g
JmZvbnQ7CisgICAgbV9zbW9vdGhpbmdNb2RlID0gc21vb3RoaW5nTW9kZTsKKworICAgIG1fb3Jp
Z2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOworICAgIGlm
IChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpW
ZXJ0aWNhbCkKKyAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlVmVydGljYWxU
ZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKKworICAgIGF1dG8mIGNvbnRl
eHRTdGF0ZSA9IG1fb3duZXIuY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKKyAg
ICBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29udGV4dFN0YXRlKTsKKyAgICBwb3B1bGF0ZUludGVy
bmFsQ29udGV4dChjb250ZXh0U3RhdGUpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKQoreworICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3Rh
dGUuY3RtKTsKKyAgICB1cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5j
b2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdldCgpKTsKKyAgICB1cGRhdGVTdHJva2VDb2xvciht
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4u
Z2V0KCkpOworICAgIHVwZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwg
bV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9y
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKK30KKwordm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29s
b3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3sKKyAgICAv
LyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBs
aW1pdGVkIHVzZS4KKyAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlk
IGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KKyAgICAvLyBJbiBj
b25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9y
aWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCisgICAg
aWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7CisgICAgbmV3U3Rh
dGUuZmlsbENvbG9yID0gbmV3Q29sb3I7CisgICAgaWYgKG5ld0dyYWRpZW50KQorICAgICAgICBu
ZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKKyAgICBpZiAobmV3UGF0dGVybikK
KyAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4gPSBuZXdQYXR0ZXJuOworICAgIG1fb3duZXIu
dXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSB9KTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsK
K30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJu
KQoreworICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0
LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgorICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlz
IHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgor
ICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hh
dCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9y
IHRvby4KKyAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29s
b3IpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRl
OworICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7CisgICAgaWYgKG5ld0dyYWRp
ZW50KQorICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9IG5ld0dyYWRpZW50OworICAg
IGlmIChuZXdQYXR0ZXJuKQorICAgICAgICBuZXdTdGF0ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0
dGVybjsKKyAgICBtX293bmVyLnVwZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5zdHJva2VT
dHlsZS5jb2xvciA9IG5ld0NvbG9yOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBk
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQoreworICAgIGlmIChjdG0gPT0gbV9j
dXJyZW50U3RhdGUuY3RtKQorICAgICAgICByZXR1cm47CisKKyAgICBtX293bmVyLnNldENUTShj
dG0pOworICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsKK30KKworc3RhdGljIGJvb2wgc2hh
ZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dC
bHVyKQoreworICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkgJiYgIXNoYWRv
d0JsdXI7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCit7CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgorICAgIGlmIChzaGFkb3dJc0NsZWFy
ZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQobV9jdXJyZW50
U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZsYWdzOworCisg
ICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0IHx8IHNo
YWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93Q29sb3IgIT0g
bV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7CisgICAgICAgIG5ld1N0YXRlLnNoYWRvd09m
ZnNldCA9IHNoYWRvd09mZnNldDsKKyAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1ciA9IHNoYWRv
d0JsdXI7CisgICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7CisgICAg
ICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOworICAgIH0KKyAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0gU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
aWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czo6WWVzKTsKKyAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKKyAgICB9CisgICAgaWYgKHN0YXRl
Q2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9vd25lci51cGRh
dGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OworICAgIG1fY3VycmVudFN0YXRlLnNoYWRv
dy5ibHVyID0gc2hhZG93Qmx1cjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IgPSBz
aGFkb3dDb2xvcjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9
IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVz
KTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVm
IHN0eWxlKQoreworICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVTaGFk
b3cpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBvZiBDR1N0eWxlcy4K
KyAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bnN0IGF1dG8mIHNoYWRvd1N0eWxlID0gKnN0YXRpY19jYXN0PGNvbnN0IENHU2hhZG93U3R5bGUq
PihDR1N0eWxlR2V0RGF0YShzdHlsZSkpOworICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dT
dHlsZS5hemltdXRoIC0gMTgwKTsKKyAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShz
dGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKKyAgICBh
dXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKKyAgICB1cGRhdGVTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVz
ZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVz
KTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCit7CisgICAgdXBkYXRl
Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVH
ZXRBbHBoYShnc3RhdGUpOworICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBo
YSk7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCit7CisgICAgdXBkYXRlQ1RNKCpDR0dT
dGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
Cit9CisKK3N0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25z
KGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCwgY29uc3QgQ0dBZmZpbmVU
cmFuc2Zvcm0mIHRleHRNYXRyaXgpCit7CisgICAgVmVjdG9yPENHU2l6ZT4gcmVzdWx0OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kpIHsKKyAgICAgICAgYXV0byBu
ZXh0UG9zaXRpb24gPSBwb3NpdGlvbnNbaSArIDFdOworICAgICAgICBhdXRvIGN1cnJlbnRQb3Np
dGlvbiA9IHBvc2l0aW9uc1tpXTsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gQ0dTaXplTWFrZShu
ZXh0UG9zaXRpb24ueCAtIGN1cnJlbnRQb3NpdGlvbi54LCBuZXh0UG9zaXRpb24ueSAtIGN1cnJl
bnRQb3NpdGlvbi55KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDR1NpemVBcHBseUFmZmluZVRy
YW5zZm9ybShhZHZhbmNlLCB0ZXh0TWF0cml4KSk7CisgICAgfQorICAgIHJlc3VsdC5jb25zdHJ1
Y3RBbmRBcHBlbmQoQ0dTaXplTWFrZSgwLCAwKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0
IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCkKK3sKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR0ZvbnRSZWYg
dXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKKyAgICBpZiAodXNlZEZvbnQgIT0g
YWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2luYWxGb250LT5wbGF0Zm9ybURh
dGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBv
c2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQVNTRVJU
KCF0ZXh0UG9zaXRpb24ueCk7CisgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueSk7CisjZW5kaWYK
KworICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisKKyAgICAvLyBXZSB3
YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXggdG8gbWF0Y2ggdGhlIGN1cnJl
bnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KKyAgICAvLyBUaGUgY3VycmVudCB0ZXh0IG1hdHJpeCBp
cyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNldHMgaXQgdG8gYW5kIHdoYXRl
dmVyCisgICAgLy8gQ29yZSBUZXh0IGFwcGVuZHMgdG8gaXQuIFNvLCB3ZSBoYXZlCisgICAgLy8g
Q1RNICogbV9vcmlnaW5hbFRleHRNYXRyaXggKiBDb3JlIFRleHQncyB0ZXh0IG1hdHJpeC4KKyAg
ICAvLyBIb3dldmVyLCBDR0NvbnRleHRHZXRUZXh0TWF0cml4KCkganVzdCB0ZWxscyB1cyB3aGF0
IHRoZSB3aG9sZSB0ZXh0IG1hdHJpeCBpcywgc28KKyAgICAvLyBtX29yaWdpbmFsVGV4dE1hdHJp
eCAqIENvcmUgVGV4dCdzIHRleHQgbWF0cml4ID0gY3VycmVudFRleHRNYXRyaXguCisgICAgLy8g
VGhlIG9ubHkgd2F5IHdlIGNhbiBlbXVsYXRlIENvcmUgVGV4dCdzIHRleHQgbWF0cml4IGlzIGJ5
IG1vZGlmeWluZyB0aGUgQ1RNIGhlcmUuCisgICAgLy8gU28sIGlmIHdlIGRvIHRoYXQsIHRoZSBH
UFUgcHJvY2VzcyB3aWxsIGhhdmUKKyAgICAvLyBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRy
aXgKKyAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNoIG90aGVyLCBhbmQg
c29sdmUgZm9yIFgsIHlvdSBnZXQKKyAgICAvLyBDVE0gKiBjdXJyZW50VGV4dE1hdHJpeCA9IENU
TSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAorICAgIC8vIGN1cnJlbnRUZXh0TWF0cml4ICog
aW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCisgICAgQWZmaW5lVHJhbnNmb3JtIGN1
cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKKyAg
ICBpZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0
cml4LmludmVyc2UoKSkKKyAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGlu
dmVydGVkT3JpZ2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGlu
dmVyc2VDVE1GaXh1cDsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gY3RtRml4dXAuaW52ZXJzZSgp
KQorICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7CisgICAgZWxzZQor
ICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOworICAgIG1fb3duZXIuY29uY2F0
Q1RNKGN0bUZpeHVwKTsKKworICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29s
b3IoZ3N0YXRlKTsKKyAgICBhdXRvIHN0cm9rZUNvbG9yID0gQ0dHU3RhdGVHZXRTdHJva2VDb2xv
cihnc3RhdGUpOworICAgIHVwZGF0ZUZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVD
b2xvclNwYWNlKGZpbGxDb2xvcikpOworICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENvbG9yOjpjcmVh
dGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKyAgICB1cGRhdGVTaGFkb3co
Q0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKworICAgIG1fb3duZXIuYXBwZW5kRHJhd0dseXBo
c0l0ZW1XaXRoQ2FjaGVkRm9udCgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFu
Y2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0
YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9z
bW9vdGhpbmdNb2RlKTsKKworICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1cCk7
Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBj
Z0ltYWdlKQoreworICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAg
dXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisKKyAgICAvLyBDb3JlIEdy
YXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1dCBpbiBXZWJLaXQs
IHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZyb20gQ29yZSBHcmFw
aGljcydzIHBvaW50IG9mIHZpZXcuCisgICAgLy8gKFRoZXJlJ3MgYSB5LWZsaXAgaW5zaWRlIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpLikKKyAgICAv
LyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQgdG8gdHJhbnNmb3Jt
IGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBwZXJmb3JtaW5nIG91
ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNpZGUtdXAuCisgICAg
Ly8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdvIEFQSXMsIHdoaWNo
IGlzIHJpZ2h0IGhlcmUuCisgICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdo
dCArIDIgKiByZWN0Lm9yaWdpbi55KTsKKyAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworCisgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Cisg
ICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJl
Y3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09w
dGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOworCisgICAgLy8gVW5k
byB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCisgICAgbV9vd25lci5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Qu
c2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworfQorCitzdHJ1Y3QgR2x5cGhzQW5k
QWR2YW5jZXNTdG9yYWdlIHsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaD4gZ2x5cGhzOwor
ICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2U+IGFkdmFuY2VzOworfTsKKworc3RydWN0IEds
eXBoc0FuZEFkdmFuY2VzIHsKKyAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHM7Cisg
ICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlczsKKyAgICB1bnNpZ25lZCBudW1H
bHlwaHM7CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlOworICAgIHN0ZDo6
b3B0aW9uYWw8R2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlPiBzdG9yYWdlOworfTsKKworc3RhdGlj
IEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91dE9UU1ZHR2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzKQoreworICAgIGF1dG8gb3RzdmdHbHlwaHMg
PSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7CisgICAgaWYgKCFvdHN2
Z0dseXBocykKKyAgICAgICAgcmV0dXJuIHsgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBt
YWtlR2x5cGhCdWZmZXJBZHZhbmNlKCksIHsgfX07CisKKyAgICBBU1NFUlQob3RzdmdHbHlwaHMt
PnNpemUoKSA+PSBudW1HbHlwaHMpOworCisgICAgR2x5cGhzQW5kQWR2YW5jZXMgcmVzdWx0Owor
ICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2UoKTsKKyAg
ICByZXN1bHQuc3RvcmFnZSA9IEdseXBoc0FuZEFkdmFuY2VzU3RvcmFnZSgpOworCisgICAgcmVz
dWx0LnN0b3JhZ2UtPmdseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7Cisg
ICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtR2x5
cGhzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewor
ICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3JhZ2UtPmdseXBocy5zaXplKCkgPT0gcmVzdWx0LnN0
b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7CisgICAgICAgIGlmIChvdHN2Z0dseXBocy0+cXVpY2tH
ZXQoaSkpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1
ZmZlckFkdmFuY2Uoc2l6ZShyZXN1bHQuaW5pdGlhbEFkdmFuY2UpICsgc2l6ZShhZHZhbmNlc1tp
XSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yYWdlLT5h
ZHZhbmNlcy5sYXN0KCkgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKHNpemUocmVzdWx0LnN0b3Jh
Z2UtPmFkdmFuY2VzLmxhc3QoKSkgKyBzaXplKGFkdmFuY2VzW2ldKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnVuY2hlY2tlZEFwcGVuZChn
bHlwaHNbaV0pOworICAgICAgICAgICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnVuY2hlY2tl
ZEFwcGVuZChhZHZhbmNlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJlc3VsdC5z
dG9yYWdlLT5nbHlwaHMuc2l6ZSgpID09IHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5zaXplKCkp
OworICAgIH0KKworICAgIHJlc3VsdC5nbHlwaHMgPSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLmRh
dGEoKTsKKyAgICByZXN1bHQuYWR2YW5jZXMgPSByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuZGF0
YSgpOworICAgIHJlc3VsdC5udW1HbHlwaHMgPSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnNpemUo
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQoreworICAgIGlmIChtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9PSBEcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCkgeworICAgICAgICBtX293bmVyLmFw
cGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9PSBEcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKKworICAgIC8vIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vNzAxNjY1NTI+IFJlY29yZCBPVFNWRyBnbHlwaHMuCisgICAgR2x5cGhzQW5kQWR2
YW5jZXMgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMgPSBmaWx0ZXJPdXRPVFNW
R0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOworICAgIEFTU0VSVChn
bHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5nbHlwaHMgPT0gZ2x5cGhzIHx8IGds
eXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocyA9PSBnbHlwaHNBbmRBZHZh
bmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5nbHlwaHMuZGF0YSgpKTsKKyAgICBBU1NF
UlQoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gYWR2YW5j
ZXMgfHwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gZ2x5
cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuc3RvcmFnZS0+YWR2YW5jZXMuZGF0YSgp
KTsKKworICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Cisg
ICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBo
c0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocywgZ2x5cGhzQW5kQWR2YW5jZXNX
aXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZH
R2x5cGhzLm51bUdseXBocywgc3RhcnRQb2ludCArIHNpemUoZ2x5cGhzQW5kQWR2YW5jZXNXaXRo
b3V0T1RTVkdHbHlwaHMuaW5pdGlhbEFkdmFuY2UpLCBzbW9vdGhpbmdNb2RlKTsKKyAgICBjb25j
bHVkZUludGVybmFsQ29udGV4dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzdmNzQxNmRkNTY1YzNkM2Y5YjQ1NTg4NjMwOGI2
YTM5YjVlZjkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKLSNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+Ci0KLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLWNs
YXNzIEZvbnQ7Ci1jbGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLQot
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLQotY2xhc3MgUmVjb3JkZXI7Ci0KLWNsYXNzIERyYXdH
bHlwaHNSZWNvcmRlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBEcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb24gewotICAgICAgICBEZWNvbnN0cnVjdCwKLSAgICAgICAgRG9udERlY29uc3RydWN0
Ci0gICAgfTsKLSAgICBleHBsaWNpdCBEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImLCBEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24pOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICB2
b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENH
UmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dT
dGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYs
IENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGhbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKLSAgICB2b2lkIHJlY29y
ZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0LCBDR0lt
YWdlUmVmKTsKLSNlbmRpZgotCi0gICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlw
aHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uOyB9Ci0KLXByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikK
LSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsK
LSNlbmRpZgotCi0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNv
bnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFs
Q29udGV4dCgpOwotCi0gICAgdm9pZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFk
aWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlU3Ry
b2tlQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51
bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAg
IGVudW0gY2xhc3MgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgewotICAgICAgICBVbnNwZWNpZmll
ZCwKLSAgICAgICAgWWVzLAotICAgICAgICBObwotICAgIH07Ci0gICAgdm9pZCB1cGRhdGVTaGFk
b3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotCi0jaWYgVVNF
KENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0
eWxlUmVmKTsKLSNlbmRpZgotCi0gICAgUmVjb3JkZXImIG1fb3duZXI7Ci0gICAgRHJhd0dseXBo
c0RlY29uc3RydWN0aW9uIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOwotCi0jaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0
PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCi0gICAgY29uc3QgRm9udCogbV9vcmlnaW5h
bEZvbnQgeyBudWxscHRyIH07Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2Rl
IHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7Ci0KLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBz
dHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsK
LSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAgICBTdHlsZSBzdHJv
a2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAgICAgIHN0cnVj
dCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAg
ICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAg
ICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAgfTsKLSAgICAgICAg
U2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmlnaW5hbFN0YXRlOwot
ICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOwotfTsKLQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYmUzY2RiOTNhYjQwYmRjZWIwZTk5
ZWI4YmFkYTM1YmE3NzQ1Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdH
bHlwaHNSZWNvcmRlci5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKLSNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlY29yZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLQotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2lu
Y2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1zdGF0aWMgQ0dDb250ZXh0
RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3Qs
IENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCi17Ci0gICAgRHJhd0dseXBo
c1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihD
R0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRC
ZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKLSAgICByZXR1cm4gZGVsZWdhdGU7Ci19
Ci0KLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0
ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdz
dGF0ZSkKLXsKLSAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0
PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkp
OwotICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKLSAgICByZXR1
cm4gZGVsZWdhdGU7Ci19Ci0KLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVs
ZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJl
ZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlw
aHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQotewotICAgIGlm
IChDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNv
cmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250
ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERy
YXdHbHlwaHMocnN0YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwot
ICAgIH0KLSAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwotfQotCi1zdGF0aWMgQ0dFcnJvciBk
cmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVS
ZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGlt
YWdlKQotewotICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8
RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7
Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFn
ZSk7Ci0gICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKLX0KLQotVW5pcXVlUmVmPEdyYXBoaWNz
Q29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQotewot
ICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0
ZSh0aGlzKSk7Ci0gICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdh
dGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0
ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwotICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJh
Y2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVyLCByZWludGVycHJldF9jYXN0PENH
Q29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikpOwotICAgIENHQ29udGV4dERlbGVn
YXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OkRpc3BsYXlM
aXN0OjpkcmF3R2x5cGhzKSk7Ci0gICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250
ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9jYXN0PENHQ29udGV4
dERlbGVnYXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQ29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGtD
R0NvbnRleHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKLX0KLQotRHJhd0ds
eXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQotICAgIDogbV9vd25l
cihvd25lcikKLSAgICAsIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKGRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbikKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4
dCgpKQotewotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7Ci0g
ICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxs
R3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJh
bnNmb3JtID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVy
bjsKLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0
ZS5zdHJva2VDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQg
PSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVy
biA9IGNvbnRleHRTdGF0ZS5zdHJva2VQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLmN0
bSA9IG1fb3duZXIuY3VycmVudFN0YXRlKCkuY3RtOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2Ug
Q1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRT
dGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250
ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVU
cmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAg
bV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvciht
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAg
ICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCi17Ci0gICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0
eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKLQotICAg
IG1fb3JpZ2luYWxGb250ID0gJmZvbnQ7Ci0gICAgbV9zbW9vdGhpbmdNb2RlID0gc21vb3RoaW5n
TW9kZTsKLQotICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0
cml4KGZvbnQpOwotICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKLSAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXgg
PSBjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsK
LQotICAgIGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuY3VycmVudFN0YXRlKCkuc3RhdGVD
aGFuZ2UubV9zdGF0ZTsKLSAgICBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29udGV4dFN0YXRlKTsK
LSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3RhdGUpOwotfQotCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKQotewotICAgIHVwZGF0
ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVu
dC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1
cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IsIG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3Rh
dGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9y
bXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM6Ok5vKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihj
b25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3
UGF0dGVybikKLXsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxs
eSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBz
ZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNr
IGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNr
IHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVj
dGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLmZpbGxTdHls
ZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3
U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dy
YWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAg
ICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4gPSBuZXdQYXR0
ZXJuOwotICAgIG1fb3duZXIudXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUu
Y29sb3IgPSBuZXdDb2xvcjsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0
cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQ
YXR0ZXJuKiBuZXdQYXR0ZXJuKQotewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0
IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwg
b25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNv
cnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ug
c2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3
b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3Rh
dGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9
IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLnVwZGF0ZVN0YXRlKG5ld1N0YXRl
LCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1
cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOwotfQotCi12b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewot
ICAgIGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsKLX0K
LQotc3RhdGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zm
c2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxv
YXRTaXplKCkgJiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1
cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0Js
dXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRl
ciBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAg
IGlmIChzaGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJ
c0NsZWFyZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hh
ZG93LmJsdXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBu
ZXdTdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0
ZUNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cub2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIg
fHwgc2hhZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAg
IG5ld1N0YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUu
c2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0g
c2hhZG93Q29sb3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgIT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAg
ICB9Ci0gICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9vd25lci51cGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0K
LSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1f
Y3VycmVudFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
aWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0
ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQotewotICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHls
ZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBr
aW5kcyBvZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3Io
KSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNvbnN0IGF1dG8mIHNoYWRvd1N0eWxlID0gKnN0YXRpY19jYXN0PGNv
bnN0IENHU2hhZG93U3R5bGUqPihDR1N0eWxlR2V0RGF0YShzdHlsZSkpOwotICAgIGF1dG8gcmFk
ID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKLSAgICBhdXRvIHNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0
eWxlLmhlaWdodDsKLSAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9yKHN0eWxl
KTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENv
bG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1Jl
Y3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBhdXRv
IGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOwotICAgIG1fb3duZXIuYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0g
ICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBtX293bmVyLmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCi17Ci0gICAgVmVjdG9yPENH
U2l6ZT4gcmVzdWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kp
IHsKLSAgICAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbnNbaSArIDFdOwotICAgICAg
ICBhdXRvIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uc1tpXTsKLSAgICAgICAgYXV0byBhZHZh
bmNlID0gQ0dTaXplTWFrZShuZXh0UG9zaXRpb24ueCAtIGN1cnJlbnRQb3NpdGlvbi54LCBuZXh0
UG9zaXRpb24ueSAtIGN1cnJlbnRQb3NpdGlvbi55KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChD
R1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlLCB0ZXh0TWF0cml4KSk7Ci0gICAgfQot
ICAgIHJlc3VsdC5jb25zdHJ1Y3RBbmRBcHBlbmQoQ0dTaXplTWFrZSgwLCAwKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmlu
ZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRp
b25zW10sIHNpemVfdCBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKLSAg
ICBpZiAodXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2lu
YWxGb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGF1dG8gdGV4dFBvc2l0aW9uID0g
Q0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7Ci0gICAgQVNTRVJUKCF0ZXh0UG9z
aXRpb24ueSk7Ci0jZW5kaWYKLQotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRl
KSk7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXgg
dG8gbWF0Y2ggdGhlIGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KLSAgICAvLyBUaGUgY3Vy
cmVudCB0ZXh0IG1hdHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNl
dHMgaXQgdG8gYW5kIHdoYXRldmVyCi0gICAgLy8gQ29yZSBUZXh0IGFwcGVuZHMgdG8gaXQuIFNv
LCB3ZSBoYXZlCi0gICAgLy8gQ1RNICogbV9vcmlnaW5hbFRleHRNYXRyaXggKiBDb3JlIFRleHQn
cyB0ZXh0IG1hdHJpeC4KLSAgICAvLyBIb3dldmVyLCBDR0NvbnRleHRHZXRUZXh0TWF0cml4KCkg
anVzdCB0ZWxscyB1cyB3aGF0IHRoZSB3aG9sZSB0ZXh0IG1hdHJpeCBpcywgc28KLSAgICAvLyBt
X29yaWdpbmFsVGV4dE1hdHJpeCAqIENvcmUgVGV4dCdzIHRleHQgbWF0cml4ID0gY3VycmVudFRl
eHRNYXRyaXguCi0gICAgLy8gVGhlIG9ubHkgd2F5IHdlIGNhbiBlbXVsYXRlIENvcmUgVGV4dCdz
IHRleHQgbWF0cml4IGlzIGJ5IG1vZGlmeWluZyB0aGUgQ1RNIGhlcmUuCi0gICAgLy8gU28sIGlm
IHdlIGRvIHRoYXQsIHRoZSBHUFUgcHJvY2VzcyB3aWxsIGhhdmUKLSAgICAvLyBDVE0gKiBYICog
bV9vcmlnaW5hbFRleHRNYXRyaXgKLSAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0
byBlYWNoIG90aGVyLCBhbmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKLSAgICAvLyBDVE0gKiBjdXJy
ZW50VGV4dE1hdHJpeCA9IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAotICAgIC8vIGN1
cnJlbnRUZXh0TWF0cml4ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJp
eChtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG1GaXh1cDsKLSAgICBpZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9
IG1fb3JpZ2luYWxUZXh0TWF0cml4LmludmVyc2UoKSkKLSAgICAgICAgY3RtRml4dXAgPSBjdXJy
ZW50VGV4dE1hdHJpeCAqIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4LnZhbHVlKCk7Ci0gICAg
QWZmaW5lVHJhbnNmb3JtIGludmVyc2VDVE1GaXh1cDsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0g
Y3RtRml4dXAuaW52ZXJzZSgpKQotICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZh
bHVlKCk7Ci0gICAgZWxzZQotICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOwot
ICAgIG1fb3duZXIuY29uY2F0Q1RNKGN0bUZpeHVwKTsKLQotICAgIGF1dG8gZmlsbENvbG9yID0g
Q0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKLSAgICBhdXRvIHN0cm9rZUNvbG9yID0gQ0dH
U3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZpbGxDb2xvcihDb2xvcjo6
Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwotICAgIHVwZGF0ZVN0cm9r
ZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsK
LSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKLQotICAgIG1fb3du
ZXIuYXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2FjaGVkRm9udCgqbV9vcmlnaW5hbEZvbnQsIGds
eXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJy
ZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQo
cG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3duZXIuY29uY2F0Q1RN
KGludmVyc2VDVE1GaXh1cCk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qg
cmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQotewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRD
VE0oZ3N0YXRlKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7
Ci0KLSAgICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0
ZW0sIGJ1dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgot
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1k
b3duIGZyb20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCi0gICAgLy8gKFRoZXJlJ3Mg
YSB5LWZsaXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZSgpLikKLSAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdl
IG5lZWQgdG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQn
cyBieSBwZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJp
Z2h0LXNpZGUtdXAuCi0gICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0
aGUgdHdvIEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUo
MCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNj
YWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotCi0gICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpj
cmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFn
ZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgp
fSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0
IH0pOwotCi0gICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRl
eHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOwotfQot
Ci1zdHJ1Y3QgR2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlIHsKLSAgICBWZWN0b3I8R2x5cGhCdWZm
ZXJHbHlwaD4gZ2x5cGhzOwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2U+IGFkdmFuY2Vz
OwotfTsKLQotc3RydWN0IEdseXBoc0FuZEFkdmFuY2VzIHsKLSAgICBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHM7Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlczsK
LSAgICB1bnNpZ25lZCBudW1HbHlwaHM7Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxB
ZHZhbmNlOwotICAgIHN0ZDo6b3B0aW9uYWw8R2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlPiBzdG9y
YWdlOwotfTsKLQotc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91dE9UU1ZHR2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzKQotewotICAg
IGF1dG8gb3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBo
cyk7Ci0gICAgaWYgKCFvdHN2Z0dseXBocykKLSAgICAgICAgcmV0dXJuIHsgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzLCBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCksIHsgfX07Ci0KLSAgICBB
U1NFUlQob3RzdmdHbHlwaHMtPnNpemUoKSA+PSBudW1HbHlwaHMpOwotCi0gICAgR2x5cGhzQW5k
QWR2YW5jZXMgcmVzdWx0OwotICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1
ZmZlckFkdmFuY2UoKTsKLSAgICByZXN1bHQuc3RvcmFnZSA9IEdseXBoc0FuZEFkdmFuY2VzU3Rv
cmFnZSgpOwotCi0gICAgcmVzdWx0LnN0b3JhZ2UtPmdseXBocy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG51bUdseXBocyk7Ci0gICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgewotICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3JhZ2UtPmdseXBocy5z
aXplKCkgPT0gcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7Ci0gICAgICAgIGlmIChv
dHN2Z0dseXBocy0+cXVpY2tHZXQoaSkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuc3RvcmFn
ZS0+YWR2YW5jZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5pbml0aWFsQWR2
YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uoc2l6ZShyZXN1bHQuaW5pdGlhbEFkdmFuY2Up
ICsgc2l6ZShhZHZhbmNlc1tpXSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5sYXN0KCkgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNl
KHNpemUocmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSkgKyBzaXplKGFkdmFuY2VzW2ld
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhz
LnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICAgICAgcmVzdWx0LnN0b3JhZ2Ut
PmFkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMuc2l6ZSgpID09IHJlc3VsdC5zdG9yYWdl
LT5hZHZhbmNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIHJlc3VsdC5nbHlwaHMgPSByZXN1bHQu
c3RvcmFnZS0+Z2x5cGhzLmRhdGEoKTsKLSAgICByZXN1bHQuYWR2YW5jZXMgPSByZXN1bHQuc3Rv
cmFnZS0+YWR2YW5jZXMuZGF0YSgpOwotICAgIHJlc3VsdC5udW1HbHlwaHMgPSByZXN1bHQuc3Rv
cmFnZS0+Z2x5cGhzLnNpemUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGlmIChtX2RyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCkgewot
ICAgICAgICBtX293bmVyLmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX2RyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKLQotICAg
IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzAxNjY1NTI+IFJlY29yZCBPVFNWRyBnbHlwaHMu
Ci0gICAgR2x5cGhzQW5kQWR2YW5jZXMgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlw
aHMgPSBmaWx0ZXJPdXRPVFNWR0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMpOwotICAgIEFTU0VSVChnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5nbHlw
aHMgPT0gZ2x5cGhzIHx8IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBo
cyA9PSBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5nbHlwaHMu
ZGF0YSgpKTsKLSAgICBBU1NFUlQoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMu
YWR2YW5jZXMgPT0gYWR2YW5jZXMgfHwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlw
aHMuYWR2YW5jZXMgPT0gZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuc3RvcmFn
ZS0+YWR2YW5jZXMuZGF0YSgpKTsKLQotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwg
c21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENv
bnRleHQsIGZvbnQsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocywg
Z2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMsIGdseXBoc0FuZEFk
dmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLm51bUdseXBocywgc3RhcnRQb2ludCArIHNpemUoZ2x5
cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuaW5pdGlhbEFkdmFuY2UpLCBzbW9vdGhp
bmdNb2RlKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBEaXNwbGF5TGlzdAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNjczYjYxNTljOTBjYTk3YWE0
MjA3NmVkYjMwYzJkZWQ5NTYwOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVyLmgiCi0KLSNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0jaW5j
bHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNp
bmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1EcmF3R2x5cGhzUmVjb3JkZXI6
OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKLSAgICA6IG1fb3duZXIob3duZXIpCi17Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIG1fb3duZXIuYXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2Fj
aGVkRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNt
b290aGluZ01vZGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzVkNDFkY2E4YWNiMDEyYWMyOWJjYzZiZTQ1Zjk3ZmZhMjg2NzBmYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCi0KLSNpbmNsdWRlICJEaXNwbGF5TGlz
dEl0ZW1zLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1EcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IG1fb3duZXIob3duZXIpCi17Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIG1fb3duZXIuYXBwZW5kRHJhd0ds
eXBoc0l0ZW1XaXRoQ2FjaGVkRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMs
IHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIERpc3Bs
YXlMaXN0Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCmluZGV4IDMxYTUyMjg5MGI3ZWU0ZTY1MGY1YmE1YmIxYjdlNTI0NjJhZjE2
MTAuLmQyNjhlZDQyZDNhY2ViMTQ3ZjVkNmY1MzNkM2QwNWYzOWY2OTRlY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjYsOCArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1
ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4
dEZsYWdzLmgiCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoQ29udGV4
dChGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgeyBhcHBlbmQ8Rmx1c2hDb250ZXh0PihpZGVu
dGlmaWVyKTsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhzUmVjb3Jk
ZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKICAgICBS
ZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSk7CiAKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTAwOGMzODA2NmQxNDZiNWFhYTM1MDY1YTNiNjc3NWY5YjcxY2ZmMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCisKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNSZWNvcmRlcihEaXNwbGF5TGlzdDo6UmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhz
RGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX293bmVyKG93bmVyKQoreworfQorCit2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX293bmVyLmFwcGVuZERyYXdHbHlwaHNJ
dGVtV2l0aENhY2hlZEZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJh
d0dseXBoc1JlY29yZGVyV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDAwOTFmODhhM2ZjNjAxZjFkMGY0
ZTM2YzAwMjdlZTRjMTY5MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgorCisj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3Jk
ZXIuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRHJhd0dseXBoc1Jl
Y29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoRGlzcGxheUxpc3Q6OlJlY29yZGVyJiBvd25lciwg
RHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9vd25lcihvd25lcikKK3sKK30KKwor
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgbV9vd25lci5hcHBlbmRE
cmF3R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="463189"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439518</attachid>
            <date>2021-09-28 14:37:07 -0700</date>
            <delta_ts>2021-09-28 15:19:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230912-20210928143706.patch</filename>
            <type>text/plain</type>
            <size>76742</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmU2YWYwYjZmOWIyMDYyNjA5NGZmM2U1ZDk3ZTBiOGRlM2M1OWZkLi4w
Njc3YTA5NWNlZWNmNDI4ZThiMDI2ZmVlYjk2YTFkM2E2YmM4NGE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMjEtMDktMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgYERyYXdHbHlwaHNSZWNvcmRlcmAgb3V0c2lkZSBvZiBgRGlzcGxh
eUxpc3RgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzA5MTIKKworICAgICAgICBSZXZpZXdlZCBieSBNeWxlcyBNYXhmaWVsZC4KKworICAgICAgICBU
aGVyZSdzIHJlYWxseSBub3RoaW5nIGFib3V0IGBEcmF3R2x5cGhzUmVjb3JkZXJgIHRoYXQncyBz
cGVjaWZpYyB0byBkaXNwbGF5IGxpc3RzIG90aGVyCisgICAgICAgIHRoYW4gaXQncyBjdXJyZW50
bHkgb25seSBiZWluZyB1c2VkIGJ5IGBEaXNwbGF5TGlzdDo6UmVjb3JkZXJgLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgYERyYXdHbHlwaHNSZWNvcmRlcmAgb3V0c2lkZSBvZiBgbmFtZXNw
YWNlIERpc3BsYXlMaXN0YCAoYW5kIHRoZSByZWxhdGVkCisgICAgICAgIGZvbGRlciBpbiB0aGUg
c291cmNlIHRyZWUpLiBUaGUgbmV4dCBwYXRjaCAoPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMDkx
Mz4pIHdpbGwgZ2VuZXJhbGl6ZQorICAgICAgICBpdCB0byBhbGxvdyBhbnkgYEdyYXBoaWNzQ29u
dGV4dGAgaW5zdGVhZCBvZiBqdXN0IGBEaXNwbGF5TGlzdDo6UmVjb3JkZXJgLiBUaGlzIGlzIGJl
aW5nCisgICAgICAgIGRvbmUgdG8gbWFrZSBgPGF0dGFjaG1lbnQ+YCBkcmF3aW5nIHdvcmsgaW4g
dGhlIEdQVVByb2Nlc3MgKDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzA3ODE+KS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyQ29yZVRleHQuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
cldpbi5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oOgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6Cisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRnJlZVR5cGUuY21ha2U6CisKIDIw
MjEtMDktMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgQ1NTRm9udFBhbGV0dGVWYWx1ZXNSdWxlLm5hbWUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IGVjMDUwMTQyYTVmYzY2MTNkNzczNWY2NWY5NDlmNzgxZDhjZTBmYzYu
LjlkOWU5OTI0YWM5NzY0NDdjM2U0NmRhNjhmNmZiODE5Y2ZhYmY4MjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtMTI0Myw2ICsxMjQzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckZhY3Rv
cnkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlVcGRhdGUuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5z
aW9uc0dMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaApAQCAtMTM3NCw3ICsxMzc1LDYgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDU2NTA5YmM0NzU1MTE1MDQ5
ZGVkMjQ2OTRjMzcxNmRmYzRlYmE4Y2EuLmNmODEyMDczNjI0YTk1MWU4ZjU2MzQ0OTVmNjIyYTgz
ZjVjMjgwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMzAsOCAr
MzAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL1dlYkNvcmVBVkNGUmVzb3VyY2VM
b2FkZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCi0KKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50
aWNhdGlvbkNGLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWly
by5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggZDE1
NTI1Mzk4YjBhMDkwZjU3YTEyMzA3YzAyYmQzNzVhZjZjZWY5Zi4uZDIyNTY5MGY1ZTA0YzY2MWYw
NWU2ZjA1NjVjYTZmZTcyMGQ3YjMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCkBAIC0yMiw3ICsyMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IDZjNGNmMDc0NjBiYWRlYmMzMzE3MTY5MDgzOWE1N2IwZDA5YTRm
OTEuLjQ1MWQzODQ0MmQ4NzFiYTZiMjZhMDVkNjVkODc3YjcwZmU2NmMwNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dApAQCAtMzg3LDYgKzM4Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkNvcmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3Jl
RGVjb21wcmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKQEAgLTM5Niw3ICszOTcs
NiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCi1wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNWMxMTQ2NjJkYmRiMzQ4OGVmYmJkOTM5MTEwYWQz
MGFmNWJjMThmLi5kNWVjYzQzZmEzYWEwY2Q0YjMxMjJhMzdhMGExNmFmNDcxZTg3ZTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC02NDcsNyArNjQ3LDcgQEAKIAkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlw
dE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDQUYzNDgyMEE2QzQwNTIw
MEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0
T2JqZWN0Lm1tICovOyB9OwogCQkxQ0FGMzQ4MzBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0
T2JqZWN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQ0FG
NTZEQjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUY1NkQ4MjUz
MDE0NTcwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTFDQUY1NkRCMjUzMDFB
QzgwMDE3QjQ3MiAvKiBEcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3MiAvKiBEcmF3
R2x5cGhzUmVjb3JkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQ0NEODE1MDIyMzFGODNFMDA2NUZDMkIgLyogV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MjU1MTQxNkZEMjM0RjAwM0Q3QURCIC8qIFdlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVEZWxlZ2F0ZS5tbSAqLzsgfTsKIAkJMUNDREY1
QkUxOTkwMzMyNDAwQkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQ0RGNUJDMTk5MDMzMjQwMEJD
RUJBRCAvKiBTVkdUb09URkZvbnRDb252ZXJzaW9uLmggKi87IH07CiAJCTFDRTg4NjQxMjYxMDVC
RjIwMDBDODE2QyAvKiBJbk1lbW9yeURpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0U4ODYzRjI2MTA1QTVGMDAwQzgxNkMgLyogSW5N
ZW1vcnlEaXNwbGF5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC03MDE2LDggKzcwMTYsOCBAQAogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUw
NkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3
RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRP
YmplY3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQUY1NkQ4MjUz
MDE0NTcwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQ0FGNTZERTI1MzAyNDVBMDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNBRjU2RDgyNTMwMTQ1NzAwMTdCNDcyIC8qIERyYXdHbHlwaHNSZWNvcmRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmF3R2x5cGhzUmVjb3JkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNBRjU2REUyNTMwMjQ1QTAwMTdCNDcyIC8qIERyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5MzAwOTNC
OUNEIC8qIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEZC
MjE3QjgzOTQwMDkzQjlDRCAvKiBUZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRVbmRlcmxpbmVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUND
REY1QkIxOTkwMzMyNDAwQkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODEwNCw4ICsxODEwNCw2IEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
ICovLAotCQkJCTFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlci5oICovLAotCQkJCTFDQUY1NkRFMjUzMDI0NUEwMDE3QjQ3MiAvKiBEaXNwbGF5
TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCAqLywKIAkJCQk1NUMwQTI5NTIzRkUy
Q0UwMDBGMkNCOTMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNzJF
QTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywK
IAkJCQk3MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIuaCAqLywKQEAgLTE4OTQ5LDYgKzE4OTQ3LDcgQEAKIAkJMUM2RkQ5MjAyNTBDQ0E2NDAwRDZF
OTIwIC8qIGNvcmV0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQ0FGNTZERTI1MzAyNDVBMDAxN0I0NzIgLyogRHJhd0dseXBoc1JlY29yZGVyQ29y
ZVRleHQuY3BwICovLAogCQkJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcCAqLywKIAkJCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyogRm9udENv
cmVUZXh0LmNwcCAqLywKIAkJCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9udFBsYXRm
b3JtRGF0YUNvcmVUZXh0LmNwcCAqLywKQEAgLTI2OTUwLDYgKzI2OTQ5LDcgQEAKIAkJCQkyRDI5
RUNDNDE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oICov
LAogCQkJCTBGQkI1RkM5MjYwRTlCNDMwMDU0NTcyQyAvKiBEaXNwbGF5VXBkYXRlLmNwcCAqLywK
IAkJCQkwRkJCNUZDQjI2MEU5QjQ0MDA1NDU3MkMgLyogRGlzcGxheVVwZGF0ZS5oICovLAorCQkJ
CTFDQUY1NkQ4MjUzMDE0NTcwMDE3QjQ3MiAvKiBEcmF3R2x5cGhzUmVjb3JkZXIuaCAqLywKIAkJ
CQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJMkU4
ODhDQTkyNUY2QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGluZS5jcHAgKi8sCiAJCQkJMkU4ODhDQTgy
NUY2QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGluZS5oICovLApAQCAtMzIxOTMsNyArMzIxOTMsNiBA
QAogCQkJCUY0N0EwOUQxMjBBOTNBOTcwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3RURBQUZDOTE5QTJDQ0RDMDAzNERGRDEgLyogRGlza0NhY2hl
TW9uaXRvckNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTFDQUY1NkRCMjUzMDFBQzgw
MDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTVBRDA5NDAyNDA4OTY0MDAwREU0RDJGIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNDJBQzk3MjU3NThGRTEwMDVBOUNGMSAvKiBEaXNw
bGF5TGlzdEZsdXNoSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5M0UyNDA4
OTYzNTAwREU0RDJGIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzIzMDIsNiArMzIzMDEsNyBAQAogCQkJCUE3Q0ZCM0QyMEI3RUQxMEEwMDcwQzMyRCAvKiBE
cmFnSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjVFNEQ5MUU1Njc3QTkwMDRBMUYwMSAv
KiBEcmFnSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFGNjVGRjYxMzc4OEZBQTAwRkY2RjJE
IC8qIERyYWdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUNBRjU2REIyNTMwMUFDODAwMTdC
NDcyIC8qIERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQTkxRjYy
NEQzMkREQzAwQkZEODlDIC8qIER1YWxzaG9jazNISURHYW1lcGFkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0Q2QjdBODI1NTFENDFGMDA1OEREM0EgLyogRHVtbXlTcGVlY2hSZWNvZ25pdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA4NURGODI2RTgyMkM3MDAwRUM2QTcgLyog
RHVtbXlTdG9yYWdlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRnJlZVR5cGUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GcmVlVHlwZS5jbWFrZQppbmRleCBmMzhiNTRlMTdjOTMxNTY1MTU0Y2FiOTUzYTgxZTBlOTZm
NTc0OWE0Li43NmRlZTFlZjMxMTM0ZjY4MTkzYTQ5NmY1ZDU4MmQwY2ZjOWM1M2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmVlVHlwZS5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GcmVlVHlwZS5jbWFrZQpAQCAtNSw4ICs1LDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICkKIAogbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMTUs
NiArMTMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAogCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udERlc2NyaXB0aW9uSGFyZkJ1enou
Y3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJh
d0dseXBoc1JlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc5ZDA0OTg2ZDQ2YjI5N2ZiNWUwZGE2MDBj
NmZlNGZhM2I1MDg1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgorCisjaWYgVVNFKENPUkVfVEVYVCkKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBG
b250OworY2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBSZWNvcmRlcjsKK30KKworY2xhc3MgRHJhd0dseXBo
c1JlY29yZGVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIERyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiB7CisgICAgICAgIERlY29uc3RydWN0LAorICAgICAgICBEb250RGVjb25zdHJ1Y3QKKyAg
ICB9OworICAgIGV4cGxpY2l0IERyYXdHbHlwaHNSZWNvcmRlcihEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXImLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pOworCisgICAgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUpOworCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYsIENHUmVjdCk7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENH
R2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2
b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dS
ZWN0LCBDR0ltYWdlUmVmKTsKKyNlbmRpZgorCisgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9u
IGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uOyB9CisKK3ByaXZhdGU6CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRG
T1JNKFdJTikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENv
bnRleHQoKTsKKyNlbmRpZgorCisgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBjb25jbHVk
ZUludGVybmFsQ29udGV4dCgpOworCisgICAgdm9pZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29s
b3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOworICAgIHZvaWQg
dXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0
ZXJuKiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOworICAgIGVudW0gY2xhc3MgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgeworICAgICAgICBV
bnNwZWNpZmllZCwKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgdm9pZCB1
cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0Js
dXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwor
CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICB2b2lkIHVwZGF0ZVNo
YWRvdyhDR1N0eWxlUmVmKTsKKyNlbmRpZgorCisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyJiBt
X293bmVyOworICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbjsKKworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5p
cXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKworICAg
IGNvbnN0IEZvbnQqIG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OworICAgIEZvbnRTbW9vdGhp
bmdNb2RlIG1fc21vb3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
IH07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OworCisgICAgc3Ry
dWN0IFN0YXRlIHsKKyAgICAgICAgc3RydWN0IFN0eWxlIHsKKyAgICAgICAgICAgIENvbG9yIGNv
bG9yOworICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKKyAgICAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtOworICAgICAgICAgICAgUmVm
UHRyPFBhdHRlcm4+IHBhdHRlcm47CisgICAgICAgIH07CisgICAgICAgIFN0eWxlIGZpbGxTdHls
ZTsKKyAgICAgICAgU3R5bGUgc3Ryb2tlU3R5bGU7CisKKyAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGN0bTsKKworICAgICAgICBzdHJ1Y3QgU2hhZG93U3RhdGUgeworICAgICAgICAgICAgRmxvYXRT
aXplIG9mZnNldDsKKyAgICAgICAgICAgIGZsb2F0IGJsdXIgeyAwIH07CisgICAgICAgICAgICBD
b2xvciBjb2xvcjsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07
CisgICAgICAgIH07CisgICAgICAgIFNoYWRvd1N0YXRlIHNoYWRvdzsKKyAgICB9OworICAgIFN0
YXRlIG1fb3JpZ2luYWxTdGF0ZTsKKyAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCBmYjkwZWYxNWZhNWEwNmQ5ZmUxMzBlNzFlY2I0NjU1
YmM5MDA1MmYwLi41MzU2MTk3YTM0NGE2OTllYzg5MDhiMTgwNmMxNzU2OTkzODBiYTZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBA
IC0yMTMsNyArMjEzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURp
c3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9y
eURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVt
b3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIHJlY29yZGluZ0Nv
bnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVU
cmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOworICAgIERpc3BsYXlMaXN0
OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgp
LCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwogICAgIAog
ICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGds
eXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3Jk
aW5nQ29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjEwYTU2YWZhOWY1OGNkNGUzZjQxOWM5NWMwODI5M2E2ZWFmYmU4YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Ry
YXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgorCisjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMu
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKworI2lu
Y2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisj
aWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdh
dGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJp
bmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGlj
dGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCit7CisgICAgRHJhd0dseXBoc1JlY29y
ZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRl
eHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxh
eWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZXR1cm4gZGVsZWdhdGU7Cit9CisKK3N0
YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBk
ZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkK
K3sKKyAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdH
bHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAg
IHJlY29yZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZXR1cm4gZGVs
ZWdhdGU7Cit9CisKK3N0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVS
ZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQoreworICAgIGlmIChDR0dT
dGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAwKSB7CisgICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYg
cmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVs
ZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7CisgICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlw
aHMocnN0YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOworICAgIH0K
KyAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOworfQorCitzdGF0aWMgQ0dFcnJvciBkcmF3SW1h
Z2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0
YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQor
eworICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0ds
eXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7CisgICAg
cmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7Cisg
ICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKK30KKworVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQoreworICAgIGF1
dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlz
KSk7CisgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0
KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxi
YWNrPigmYmVnaW5MYXllcikpOworICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29u
dGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4
dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikpOworICAgIENHQ29udGV4dERlbGVnYXRlU2V0
Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OmRyYXdHbHlwaHMpKTsK
KyAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwg
ZGVEcmF3SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4o
JmRyYXdJbWFnZSkpOworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dDb250ZXh0Q3JlYXRl
V2l0aERlbGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwga0NHQ29udGV4dFR5cGVVbmtub3du
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkpOworfQorCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNSZWNvcmRlcihEaXNwbGF5TGlzdDo6UmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9vd25lcihvd25l
cikKKyAgICAsIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKGRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKKyAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgpKQor
eworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCit7CisgICAgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7CisgICAgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGll
bnQ7CisgICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOworICAgIG1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKKwor
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJv
a2VDb2xvcjsKKyAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250
ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnQ7CisgICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKKyAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNv
bnRleHRTdGF0ZS5zdHJva2VQYXR0ZXJuOworCisgICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1f
b3duZXIuY3VycmVudFN0YXRlKCkuY3RtOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2UgQ1RNLgor
CisgICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUuc2hhZG93
T2Zmc2V0OworICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRTdGF0ZS5z
aGFkb3dCbHVyOworICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250ZXh0U3Rh
dGUuc2hhZG93Q29sb3I7CisgICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zv
cm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisgICAgbV9jdXJy
ZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
Ojpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29u
dGV4dFN0YXRlKQoreworICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKKyAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50KQorICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbEdy
YWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgaWYg
KG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKKyAgICAgICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0
ZXJuKTsKKyAgICB9CisKKyAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9y
LmlzVmFsaWQoKSkKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CisgICAgZWxzZSBpZiAobV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQorICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwg
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAg
IGVsc2UgeworICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pOworICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCisg
ICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOworICAgIH0KKworICAgIG1faW50ZXJuYWxDb250
ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CisKKyAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25v
cmVUcmFuc2Zvcm1zKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsK
KworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRl
LnRleHREcmF3aW5nTW9kZSk7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJl
SW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUpCit7CisgICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZv
bnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKKworICAgIG1fb3Jp
Z2luYWxGb250ID0gJmZvbnQ7CisgICAgbV9zbW9vdGhpbmdNb2RlID0gc21vb3RoaW5nTW9kZTsK
KworICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZv
bnQpOworICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCkKKyAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21w
dXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKKworICAg
IGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2Uu
bV9zdGF0ZTsKKyAgICBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29udGV4dFN0YXRlKTsKKyAgICBw
b3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3RhdGUpOworfQorCit2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKQoreworICAgIHVwZGF0ZUNUTSht
X29yaWdpbmFsU3RhdGUuY3RtKTsKKyAgICB1cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQo
KSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdldCgpKTsKKyAgICB1cGRhdGVT
dHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4uZ2V0KCkpOworICAgIHVwZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hh
ZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5v
KTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihjb25zdCBD
b2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVy
bikKK3sKKyAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24n
dCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KKyAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhp
cyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4K
KyAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdo
YXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZv
ciB0b28uCisgICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xv
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7
CisgICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7CisgICAgaWYgKG5ld0dyYWRpZW50
KQorICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKKyAgICBpZiAo
bmV3UGF0dGVybikKKyAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4gPSBuZXdQYXR0ZXJuOwor
ICAgIG1fb3duZXIudXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSB9KTsKKyAgICBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3Ig
PSBuZXdDb2xvcjsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJu
KiBuZXdQYXR0ZXJuKQoreworICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFj
dHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgorICAgIC8vIENUIHdpbGwgb25seSBl
dmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3Qg
Y2hlY2sgZm9yLgorICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0
IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBj
b3JyZWN0bHkgZm9yIHRvby4KKyAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlIG5ld1N0YXRlOworICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7CisgICAg
aWYgKG5ld0dyYWRpZW50KQorICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9IG5ld0dy
YWRpZW50OworICAgIGlmIChuZXdQYXR0ZXJuKQorICAgICAgICBuZXdTdGF0ZS5zdHJva2VQYXR0
ZXJuID0gbmV3UGF0dGVybjsKKyAgICBtX293bmVyLnVwZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKKyAgICBtX2N1cnJlbnRT
dGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworfQorCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQoreworICAgIGlm
IChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQorICAgICAgICByZXR1cm47CisKKyAgICBtX293
bmVyLnNldENUTShjdG0pOworICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsKK30KKworc3Rh
dGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyKQoreworICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXpl
KCkgJiYgIXNoYWRvd0JsdXI7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVT
aGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpCit7CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgorICAgIGlmIChz
aGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFy
ZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJs
dXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0
ZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5n
ZUZsYWdzOworCisgICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
b2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hh
ZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7CisgICAgICAgIG5ld1N0
YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKKyAgICAgICAgbmV3U3RhdGUuc2hhZG93
Qmx1ciA9IHNoYWRvd0JsdXI7CisgICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93
Q29sb3I7CisgICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dDaGFuZ2UpOworICAgIH0KKyAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
IT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICBuZXdTdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6WWVzKTsKKyAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKKyAgICB9Cisg
ICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9vd25lci51cGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OworICAgIG1fY3VycmVu
dFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKKyAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3Jl
VHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtczo6WWVzKTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRv
dyhDR1N0eWxlUmVmIHN0eWxlKQoreworICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0g
a0NHU3R5bGVTaGFkb3cpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBv
ZiBDR1N0eWxlcy4KKyAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IGF1dG8mIHNoYWRvd1N0eWxlID0gKnN0YXRpY19jYXN0PGNvbnN0IENH
U2hhZG93U3R5bGUqPihDR1N0eWxlR2V0RGF0YShzdHlsZSkpOworICAgIGF1dG8gcmFkID0gZGVn
MnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKKyAgICBhdXRvIHNoYWRvd09mZnNldCA9
IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhl
aWdodDsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKKyAg
ICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpj
cmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtczo6WWVzKTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2lu
TGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCit7
CisgICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBhdXRvIGFscGhh
ID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOworICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihhbHBoYSk7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRM
YXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCit7CisgICAgdXBk
YXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX293bmVyLmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNG
cm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCwgY29u
c3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCit7CisgICAgVmVjdG9yPENHU2l6ZT4g
cmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kpIHsKKyAg
ICAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbnNbaSArIDFdOworICAgICAgICBhdXRv
IGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uc1tpXTsKKyAgICAgICAgYXV0byBhZHZhbmNlID0g
Q0dTaXplTWFrZShuZXh0UG9zaXRpb24ueCAtIGN1cnJlbnRQb3NpdGlvbi54LCBuZXh0UG9zaXRp
b24ueSAtIGN1cnJlbnRQb3NpdGlvbi55KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDR1NpemVB
cHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlLCB0ZXh0TWF0cml4KSk7CisgICAgfQorICAgIHJl
c3VsdC5jb25zdHJ1Y3RBbmRBcHBlbmQoQ0dTaXplTWFrZSgwLCAwKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5z
Zm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpemVfdCBjb3VudCkKK3sKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKKyAgICBpZiAo
dXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2luYWxGb250
LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQorICAgICAgICByZXR1
cm47CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250
ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7CisgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24u
eSk7CisjZW5kaWYKKworICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisK
KyAgICAvLyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXggdG8gbWF0
Y2ggdGhlIGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KKyAgICAvLyBUaGUgY3VycmVudCB0
ZXh0IG1hdHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNldHMgaXQg
dG8gYW5kIHdoYXRldmVyCisgICAgLy8gQ29yZSBUZXh0IGFwcGVuZHMgdG8gaXQuIFNvLCB3ZSBo
YXZlCisgICAgLy8gQ1RNICogbV9vcmlnaW5hbFRleHRNYXRyaXggKiBDb3JlIFRleHQncyB0ZXh0
IG1hdHJpeC4KKyAgICAvLyBIb3dldmVyLCBDR0NvbnRleHRHZXRUZXh0TWF0cml4KCkganVzdCB0
ZWxscyB1cyB3aGF0IHRoZSB3aG9sZSB0ZXh0IG1hdHJpeCBpcywgc28KKyAgICAvLyBtX29yaWdp
bmFsVGV4dE1hdHJpeCAqIENvcmUgVGV4dCdzIHRleHQgbWF0cml4ID0gY3VycmVudFRleHRNYXRy
aXguCisgICAgLy8gVGhlIG9ubHkgd2F5IHdlIGNhbiBlbXVsYXRlIENvcmUgVGV4dCdzIHRleHQg
bWF0cml4IGlzIGJ5IG1vZGlmeWluZyB0aGUgQ1RNIGhlcmUuCisgICAgLy8gU28sIGlmIHdlIGRv
IHRoYXQsIHRoZSBHUFUgcHJvY2VzcyB3aWxsIGhhdmUKKyAgICAvLyBDVE0gKiBYICogbV9vcmln
aW5hbFRleHRNYXRyaXgKKyAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNo
IG90aGVyLCBhbmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKKyAgICAvLyBDVE0gKiBjdXJyZW50VGV4
dE1hdHJpeCA9IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAorICAgIC8vIGN1cnJlbnRU
ZXh0TWF0cml4ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCisgICAgQWZmaW5l
VHJhbnNmb3JtIGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2lu
dGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBj
dG1GaXh1cDsKKyAgICBpZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3Jp
Z2luYWxUZXh0TWF0cml4LmludmVyc2UoKSkKKyAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4
dE1hdHJpeCAqIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGludmVyc2VDVE1GaXh1cDsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gY3RtRml4
dXAuaW52ZXJzZSgpKQorICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7
CisgICAgZWxzZQorICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOworICAgIG1f
b3duZXIuY29uY2F0Q1RNKGN0bUZpeHVwKTsKKworICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3Rh
dGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAgICBhdXRvIHN0cm9rZUNvbG9yID0gQ0dHU3RhdGVH
ZXRTdHJva2VDb2xvcihnc3RhdGUpOworICAgIHVwZGF0ZUZpbGxDb2xvcihDb2xvcjo6Y3JlYXRl
QW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOworICAgIHVwZGF0ZVN0cm9rZUNvbG9y
KENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKyAgICB1
cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKworICAgIG1fb3duZXIuYXBw
ZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2FjaGVkRm9udCgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywg
Y29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4
dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRp
b25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKworICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVy
c2VDVE1GaXh1cCk7Cit9CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1h
Z2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwg
Q0dJbWFnZVJlZiBjZ0ltYWdlKQoreworICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0
YXRlKSk7CisgICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisKKyAg
ICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1
dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZy
b20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCisgICAgLy8gKFRoZXJlJ3MgYSB5LWZs
aXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZSgpLikKKyAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQg
dG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBw
ZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNp
ZGUtdXAuCisgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdv
IEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCisgICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVj
dC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKKyAgICBtX293bmVyLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworCisgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUo
Y2dJbWFnZSk7CisgICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6
ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1h
Z2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwor
CisgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCisg
ICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX293bmVyLnRyYW5zbGF0
ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworfQorCitzdHJ1
Y3QgR2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlIHsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlw
aD4gZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2U+IGFkdmFuY2VzOworfTsK
Kworc3RydWN0IEdseXBoc0FuZEFkdmFuY2VzIHsKKyAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHM7CisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlczsKKyAgICB1
bnNpZ25lZCBudW1HbHlwaHM7CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNl
OworICAgIHN0ZDo6b3B0aW9uYWw8R2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlPiBzdG9yYWdlOwor
fTsKKworc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91dE9UU1ZHR2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzKQoreworICAgIGF1dG8g
b3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7Cisg
ICAgaWYgKCFvdHN2Z0dseXBocykKKyAgICAgICAgcmV0dXJuIHsgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCksIHsgfX07CisKKyAgICBBU1NFUlQo
b3RzdmdHbHlwaHMtPnNpemUoKSA+PSBudW1HbHlwaHMpOworCisgICAgR2x5cGhzQW5kQWR2YW5j
ZXMgcmVzdWx0OworICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFk
dmFuY2UoKTsKKyAgICByZXN1bHQuc3RvcmFnZSA9IEdseXBoc0FuZEFkdmFuY2VzU3RvcmFnZSgp
OworCisgICAgcmVzdWx0LnN0b3JhZ2UtPmdseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51
bUdseXBocyk7CisgICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtR2x5cGhzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgeworICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3JhZ2UtPmdseXBocy5zaXplKCkg
PT0gcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7CisgICAgICAgIGlmIChvdHN2Z0ds
eXBocy0+cXVpY2tHZXQoaSkpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc3RvcmFnZS0+YWR2
YW5jZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9
IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uoc2l6ZShyZXN1bHQuaW5pdGlhbEFkdmFuY2UpICsgc2l6
ZShhZHZhbmNlc1tpXSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5zdG9yYWdlLT5hZHZhbmNlcy5sYXN0KCkgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKHNpemUo
cmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSkgKyBzaXplKGFkdmFuY2VzW2ldKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnVuY2hl
Y2tlZEFwcGVuZChnbHlwaHNbaV0pOworICAgICAgICAgICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFu
Y2VzLnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMuc2l6ZSgpID09IHJlc3VsdC5zdG9yYWdlLT5hZHZh
bmNlcy5zaXplKCkpOworICAgIH0KKworICAgIHJlc3VsdC5nbHlwaHMgPSByZXN1bHQuc3RvcmFn
ZS0+Z2x5cGhzLmRhdGEoKTsKKyAgICByZXN1bHQuYWR2YW5jZXMgPSByZXN1bHQuc3RvcmFnZS0+
YWR2YW5jZXMuZGF0YSgpOworICAgIHJlc3VsdC5udW1HbHlwaHMgPSByZXN1bHQuc3RvcmFnZS0+
Z2x5cGhzLnNpemUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGlmIChtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCkgeworICAgICAg
ICBtX293bmVyLmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKKworICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vNzAxNjY1NTI+IFJlY29yZCBPVFNWRyBnbHlwaHMuCisgICAg
R2x5cGhzQW5kQWR2YW5jZXMgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMgPSBm
aWx0ZXJPdXRPVFNWR0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwor
ICAgIEFTU0VSVChnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5nbHlwaHMgPT0g
Z2x5cGhzIHx8IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocyA9PSBn
bHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5nbHlwaHMuZGF0YSgp
KTsKKyAgICBBU1NFUlQoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5j
ZXMgPT0gYWR2YW5jZXMgfHwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2
YW5jZXMgPT0gZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuc3RvcmFnZS0+YWR2
YW5jZXMuZGF0YSgpKTsKKworICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21vb3Ro
aW5nTW9kZSk7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQs
IGZvbnQsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocywgZ2x5cGhz
QW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMsIGdseXBoc0FuZEFkdmFuY2Vz
V2l0aG91dE9UU1ZHR2x5cGhzLm51bUdseXBocywgc3RhcnRQb2ludCArIHNpemUoZ2x5cGhzQW5k
QWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuaW5pdGlhbEFkdmFuY2UpLCBzbW9vdGhpbmdNb2Rl
KTsKKyAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzdmNzQxNmRkNTY1YzNkM2Y5
YjQ1NTg4NjMwOGI2YTM5YjVlZjkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0KLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxv
YXRQb2ludDsKLWNsYXNzIEZvbnQ7Ci1jbGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLQotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLQotY2xhc3MgUmVjb3JkZXI7Ci0K
LWNsYXNzIERyYXdHbHlwaHNSZWNvcmRlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gewotICAgICAgICBEZWNvbnN0cnVjdCwKLSAgICAgICAgRG9u
dERlY29uc3RydWN0Ci0gICAgfTsKLSAgICBleHBsaWNpdCBEcmF3R2x5cGhzUmVjb3JkZXIoUmVj
b3JkZXImLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pOwotCi0gICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2lu
dCwgRm9udFNtb290aGluZ01vZGUpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYsIENHUmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0
IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKLSAg
ICB2b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwg
Q0dSZWN0LCBDR0ltYWdlUmVmKTsKLSNlbmRpZgotCi0gICAgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uOyB9Ci0KLXByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBM
QVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5h
bENvbnRleHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJu
YWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25j
bHVkZUludGVybmFsQ29udGV4dCgpOwotCi0gICAgdm9pZCB1cGRhdGVGaWxsQ29sb3IoY29uc3Qg
Q29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZv
aWQgdXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQ
YXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwotICAgIGVudW0gY2xhc3MgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgewotICAgICAg
ICBVbnNwZWNpZmllZCwKLSAgICAgICAgWWVzLAotICAgICAgICBObwotICAgIH07Ci0gICAgdm9p
ZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRv
d0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHVwZGF0
ZVNoYWRvdyhDR1N0eWxlUmVmKTsKLSNlbmRpZgotCi0gICAgUmVjb3JkZXImIG1fb3duZXI7Ci0g
ICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOwot
Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3Jh
cGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCi0gICAgY29uc3QgRm9u
dCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9z
bW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7Ci0KLSAgICBzdHJ1Y3QgU3RhdGUg
ewotICAgICAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAg
ICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVy
bj4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAg
ICBTdHlsZSBzdHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0g
ICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0
OwotICAgICAgICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9y
OwotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAg
fTsKLSAgICAgICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmln
aW5hbFN0YXRlOwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOwotfTsKLQotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYmUzY2RiOTNh
YjQwYmRjZWIwZTk5ZWI4YmFkYTM1YmE3NzQ1Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKLSNpbmNs
dWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLQotI2luY2x1ZGUgPENv
cmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1zdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBk
ZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwg
Q0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCi17Ci0g
ICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhz
UmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNv
cmRlci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKLSAgICByZXR1cm4g
ZGVsZWdhdGU7Ci19Ci0KLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRMYXllcihDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENH
R1N0YXRlUmVmIGdzdGF0ZSkKLXsKLSAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0g
KnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5m
byhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRl
KTsKLSAgICByZXR1cm4gZGVsZWdhdGU7Ci19Ci0KLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMo
Q0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRl
LCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3Qg
Q0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50
KQotewotICAgIGlmIChDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERy
YXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29y
ZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29y
ZGVyLnJlY29yZERyYXdHbHlwaHMocnN0YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9u
cywgY291bnQpOwotICAgIH0KLSAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwotfQotCi1zdGF0
aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBD
R0ltYWdlUmVmIGltYWdlKQotewotICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAq
c3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZv
KGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRl
LCByZWN0LCBpbWFnZSk7Ci0gICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKLX0KLQotVW5pcXVl
UmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENv
bnRleHQoKQotewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHRE
ZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7Ci0gICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhj
b250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0Nv
bnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwotICAgIENHQ29udGV4dERlbGVn
YXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVyLCByZWludGVy
cHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikpOwotICAgIENH
Q29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdH
bHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNv
cmU6OkRpc3BsYXlMaXN0OjpkcmF3R2x5cGhzKSk7Ci0gICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRD
YWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9j
YXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKLSAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQ29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdh
dGUuZ2V0KCksIGtDR0NvbnRleHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsK
LX0KLQotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93
bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQot
ICAgIDogbV9vd25lcihvd25lcikKLSAgICAsIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKGRy
YXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUlu
dGVybmFsQ29udGV4dCgpKQotewotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxh
dGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUp
Ci17Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5m
aWxsQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRl
eHRTdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNm
b3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0
ZS5maWxsUGF0dGVybjsKLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9
IGNvbnRleHRTdGF0ZS5zdHJva2VDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUu
c3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5zdHJva2VQYXR0ZXJuOwotCi0gICAgbV9vcmln
aW5hbFN0YXRlLmN0bSA9IG1fb3duZXIuY3VycmVudFN0YXRlKCkuY3RtOyAvLyBGSVhNRTogRGVh
bCB3aXRoIGJhc2UgQ1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBj
b250ZXh0U3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1
ciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Y29sb3IgPSBjb250ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwotCi0gICAgbV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNl
dEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlm
IChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRp
ZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwot
ICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0
ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAg
ICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAg
ZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJv
a2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tl
UGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQot
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAg
ICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2lu
Z01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgQVNTRVJUKENHQWZmaW5lVHJhbnNm
b3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQo
KSkpKTsKLQotICAgIG1fb3JpZ2luYWxGb250ID0gJmZvbnQ7Ci0gICAgbV9zbW9vdGhpbmdNb2Rl
ID0gc21vb3RoaW5nTW9kZTsKLQotICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92
ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwotICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKLSAgICAgICAgbV9vcmlnaW5h
bFRleHRNYXRyaXggPSBjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxU
ZXh0TWF0cml4KTsKLQotICAgIGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuY3VycmVudFN0
YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLSAgICBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29u
dGV4dFN0YXRlKTsKLSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3RhdGUpOwot
fQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKQot
ewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRhdGVGaWxsQ29s
b3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdl
dCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Y29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmln
aW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVNoYWRvdyht
X29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVy
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmln
bm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6Ok5vKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0
ZUZpbGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwg
UGF0dGVybiogbmV3UGF0dGVybikKLXsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1
dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxs
IG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBj
b3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdl
IHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sg
d29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0
YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7Ci0g
ICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdH
cmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRl
cm4gPSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIudXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0
ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5l
d0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQotewotICAgIC8vIFRoaXMgY2hlY2sgbG9v
a3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAg
IC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRo
aXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxD
b250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2gg
dGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0g
bV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9y
ID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJv
a2VHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBu
ZXdTdGF0ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLnVwZGF0ZVN0
YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9
KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOwotfQot
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtKQotewotICAgIGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0
bSA9IGN0bTsKLX0KLQotc3RhdGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6
ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dP
ZmZzZXQgPT0gRmxvYXRTaXplKCkgJiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjp1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZs
b2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBjb25zaWRlciBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBz
aGFkb3dzLgotICAgIGlmIChzaGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
KSAmJiBzaGFkb3dJc0NsZWFyZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJy
ZW50U3RhdGUuc2hhZG93LmJsdXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBzdGF0ZUNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUu
c2hhZG93LmJsdXIgfHwgc2hhZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9y
KSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAg
ICAgbmV3U3RhdGUuc2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNo
YWRvd0NvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgIT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVk
ICYmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
WWVzKSAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAg
ICBuZXdTdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFu
Z2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
Q2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9vd25lci51cGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFu
Z2VGbGFncyk7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zm
c2V0OwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQotewotICAgIGlmIChDR1N0eWxl
R2V0VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgbW9yZSBraW5kcyBvZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAw
fSwgMCwgQ29sb3IoKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IGF1dG8mIHNoYWRvd1N0eWxlID0gKnN0
YXRpY19jYXN0PGNvbnN0IENHU2hhZG93U3R5bGUqPihDR1N0eWxlR2V0RGF0YShzdHlsZSkpOwot
ICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKLSAgICBh
dXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQp
KSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKLSAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdl
dENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHls
ZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3Ip
LCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUp
KTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOwotICAgIG1fb3du
ZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBt
X293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8Q0dTaXpl
PiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpemVfdCBjb3VudCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCi17Ci0g
ICAgVmVjdG9yPENHU2l6ZT4gcmVzdWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQgLSAxOyArK2kpIHsKLSAgICAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbnNbaSAr
IDFdOwotICAgICAgICBhdXRvIGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uc1tpXTsKLSAgICAg
ICAgYXV0byBhZHZhbmNlID0gQ0dTaXplTWFrZShuZXh0UG9zaXRpb24ueCAtIGN1cnJlbnRQb3Np
dGlvbi54LCBuZXh0UG9zaXRpb24ueSAtIGN1cnJlbnRQb3NpdGlvbi55KTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlLCB0ZXh0TWF0cml4
KSk7Ci0gICAgfQotICAgIHJlc3VsdC5jb25zdHJ1Y3RBbmRBcHBlbmQoQ0dTaXplTWFrZSgwLCAw
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBj
b25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENH
UG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQo
Z3N0YXRlKTsKLSAgICBpZiAodXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NG
b250KG1fb3JpZ2luYWxGb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdl
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGF1dG8gdGV4
dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7Ci0gICAgQVNT
RVJUKCF0ZXh0UG9zaXRpb24ueSk7Ci0jZW5kaWYKLQotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVH
ZXRDVE0oZ3N0YXRlKSk7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQg
dGV4dCBtYXRyaXggdG8gbWF0Y2ggdGhlIGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KLSAg
ICAvLyBUaGUgY3VycmVudCB0ZXh0IG1hdHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2
ZXIgV2ViS2l0IHNldHMgaXQgdG8gYW5kIHdoYXRldmVyCi0gICAgLy8gQ29yZSBUZXh0IGFwcGVu
ZHMgdG8gaXQuIFNvLCB3ZSBoYXZlCi0gICAgLy8gQ1RNICogbV9vcmlnaW5hbFRleHRNYXRyaXgg
KiBDb3JlIFRleHQncyB0ZXh0IG1hdHJpeC4KLSAgICAvLyBIb3dldmVyLCBDR0NvbnRleHRHZXRU
ZXh0TWF0cml4KCkganVzdCB0ZWxscyB1cyB3aGF0IHRoZSB3aG9sZSB0ZXh0IG1hdHJpeCBpcywg
c28KLSAgICAvLyBtX29yaWdpbmFsVGV4dE1hdHJpeCAqIENvcmUgVGV4dCdzIHRleHQgbWF0cml4
ID0gY3VycmVudFRleHRNYXRyaXguCi0gICAgLy8gVGhlIG9ubHkgd2F5IHdlIGNhbiBlbXVsYXRl
IENvcmUgVGV4dCdzIHRleHQgbWF0cml4IGlzIGJ5IG1vZGlmeWluZyB0aGUgQ1RNIGhlcmUuCi0g
ICAgLy8gU28sIGlmIHdlIGRvIHRoYXQsIHRoZSBHUFUgcHJvY2VzcyB3aWxsIGhhdmUKLSAgICAv
LyBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKLSAgICAvLyBJZiB5b3Ugc2V0IHRoZXNl
IHR3byBlcXVhbCB0byBlYWNoIG90aGVyLCBhbmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKLSAgICAv
LyBDVE0gKiBjdXJyZW50VGV4dE1hdHJpeCA9IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJp
eAotICAgIC8vIGN1cnJlbnRUZXh0TWF0cml4ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJp
eCkgPSBYCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0
R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAg
IEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKLSAgICBpZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFs
VGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0cml4LmludmVyc2UoKSkKLSAgICAgICAgY3Rt
Rml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4LnZh
bHVlKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VDVE1GaXh1cDsKLSAgICBpZiAoYXV0
byBpbnZlcnNlID0gY3RtRml4dXAuaW52ZXJzZSgpKQotICAgICAgICBpbnZlcnNlQ1RNRml4dXAg
PSBpbnZlcnNlLnZhbHVlKCk7Ci0gICAgZWxzZQotICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRy
YW5zZm9ybSgpOwotICAgIG1fb3duZXIuY29uY2F0Q1RNKGN0bUZpeHVwKTsKLQotICAgIGF1dG8g
ZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKLSAgICBhdXRvIHN0cm9r
ZUNvbG9yID0gQ0dHU3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZpbGxD
b2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwotICAg
IHVwZGF0ZVN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ry
b2tlQ29sb3IpKTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsK
LQotICAgIG1fb3duZXIuYXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2FjaGVkRm9udCgqbV9vcmln
aW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMs
IGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRy
aXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3du
ZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1cCk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0
YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQotewotICAgIHVwZGF0ZUNUTSgq
Q0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5
bGUoZ3N0YXRlKSk7Ci0KLSAgICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29v
cmRpbmF0ZSBzeXN0ZW0sIGJ1dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5h
dGUgc3lzdGVtLgotICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRp
bmVzIChHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1h
Z2VzIHVwc2lkZS1kb3duIGZyb20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCi0gICAg
Ly8gKFRoZXJlJ3MgYSB5LWZsaXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSgpLikKLSAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJv
dW5kcywgYnV0IHdlIG5lZWQgdG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3Rl
bSB0byBXZWJLaXQncyBieSBwZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUg
ZHJhd24gdGhlIHJpZ2h0LXNpZGUtdXAuCi0gICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRh
cnkgYmV0d2VlbiB0aGUgdHdvIEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25l
ci50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAg
ICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotCi0gICAgYXV0byBpbWFnZSA9IE5h
dGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2Uo
KmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBp
bWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Ub3BMZWZ0IH0pOwotCi0gICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3Rv
cmUgdGhlIGNvbnRleHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAg
ICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmln
aW4ueSkpOwotfQotCi1zdHJ1Y3QgR2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdlIHsKLSAgICBWZWN0
b3I8R2x5cGhCdWZmZXJHbHlwaD4gZ2x5cGhzOwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFu
Y2U+IGFkdmFuY2VzOwotfTsKLQotc3RydWN0IEdseXBoc0FuZEFkdmFuY2VzIHsKLSAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHM7Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlczsKLSAgICB1bnNpZ25lZCBudW1HbHlwaHM7Ci0gICAgR2x5cGhCdWZmZXJBZHZh
bmNlIGluaXRpYWxBZHZhbmNlOwotICAgIHN0ZDo6b3B0aW9uYWw8R2x5cGhzQW5kQWR2YW5jZXNT
dG9yYWdlPiBzdG9yYWdlOwotfTsKLQotc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91
dE9UU1ZHR2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzKQotewotICAgIGF1dG8gb3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlw
aHMsIG51bUdseXBocyk7Ci0gICAgaWYgKCFvdHN2Z0dseXBocykKLSAgICAgICAgcmV0dXJuIHsg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCksIHsg
fX07Ci0KLSAgICBBU1NFUlQob3RzdmdHbHlwaHMtPnNpemUoKSA+PSBudW1HbHlwaHMpOwotCi0g
ICAgR2x5cGhzQW5kQWR2YW5jZXMgcmVzdWx0OwotICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9
IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2UoKTsKLSAgICByZXN1bHQuc3RvcmFnZSA9IEdseXBoc0Fu
ZEFkdmFuY2VzU3RvcmFnZSgpOwotCi0gICAgcmVzdWx0LnN0b3JhZ2UtPmdseXBocy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7Ci0gICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2Vz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3Jh
Z2UtPmdseXBocy5zaXplKCkgPT0gcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7Ci0g
ICAgICAgIGlmIChvdHN2Z0dseXBocy0+cXVpY2tHZXQoaSkpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlc3Vs
dC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uoc2l6ZShyZXN1bHQuaW5p
dGlhbEFkdmFuY2UpICsgc2l6ZShhZHZhbmNlc1tpXSkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5sYXN0KCkgPSBtYWtlR2x5cGhC
dWZmZXJBZHZhbmNlKHNpemUocmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSkgKyBzaXpl
KGFkdmFuY2VzW2ldKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQuc3Rv
cmFnZS0+Z2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICAgICAgcmVz
dWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMuc2l6ZSgpID09IHJl
c3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIHJlc3VsdC5nbHlw
aHMgPSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLmRhdGEoKTsKLSAgICByZXN1bHQuYWR2YW5jZXMg
PSByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuZGF0YSgpOwotICAgIHJlc3VsdC5udW1HbHlwaHMg
PSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnNpemUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGlmIChtX2RyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbiA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNv
bnN0cnVjdCkgewotICAgICAgICBtX293bmVyLmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hl
ZEZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9v
dGhpbmdNb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX2RyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbiA9PSBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3Ry
dWN0KTsKLQotICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzAxNjY1NTI+IFJlY29yZCBP
VFNWRyBnbHlwaHMuCi0gICAgR2x5cGhzQW5kQWR2YW5jZXMgZ2x5cGhzQW5kQWR2YW5jZXNXaXRo
b3V0T1RTVkdHbHlwaHMgPSBmaWx0ZXJPdXRPVFNWR0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMpOwotICAgIEFTU0VSVChnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNW
R0dseXBocy5nbHlwaHMgPT0gZ2x5cGhzIHx8IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZH
R2x5cGhzLmdseXBocyA9PSBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9y
YWdlLT5nbHlwaHMuZGF0YSgpKTsKLSAgICBBU1NFUlQoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0
T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gYWR2YW5jZXMgfHwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRo
b3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdH
bHlwaHMuc3RvcmFnZS0+YWR2YW5jZXMuZGF0YSgpKTsKLQotICAgIHByZXBhcmVJbnRlcm5hbENv
bnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
bV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5
cGhzLmdseXBocywgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMs
IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLm51bUdseXBocywgc3RhcnRQb2lu
dCArIHNpemUoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuaW5pdGlhbEFkdmFu
Y2UpLCBzbW9vdGhpbmdNb2RlKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJIYXJmQnV6ei5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNjczYjYx
NTljOTBjYTk3YWE0MjA3NmVkYjMwYzJkZWQ5NTYwOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCi0KLSNpbmNsdWRlICJEaXNwbGF5TGlzdEl0
ZW1zLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotCi1EcmF3R2x5
cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlw
aHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IG1fb3duZXIob3duZXIpCi17Ci19Ci0KLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIG1fb3duZXIuYXBwZW5kRHJhd0dseXBo
c0l0ZW1XaXRoQ2FjaGVkRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlz
dAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzVkNDFkY2E4YWNiMDEyYWMyOWJjYzZiZTQ1Zjk3ZmZhMjg2NzBmYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCi0KLSNpbmNsdWRl
ICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0jaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgRGlzcGxheUxp
c3QgewotCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYg
b3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IG1fb3duZXIob3duZXIpCi17
Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIG1fb3duZXIu
YXBwZW5kRHJhd0dseXBoc0l0ZW1XaXRoQ2FjaGVkRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIERpc3BsYXlMaXN0Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDMxYTUyMjg5MGI3ZWU0ZTY1MGY1YmE1YmIx
YjdlNTI0NjJhZjE2MTAuLmQyNjhlZDQyZDNhY2ViMTQ3ZjVkNmY1MzNkM2QwNWYzOWY2OTRlY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjYsOCArMjYsOCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgotI2luY2x1ZGUgIkRp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVt
cy5oIgorI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAj
aW5jbHVkZSAiVGV4dEZsYWdzLmgiCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGZsdXNoQ29udGV4dChGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgeyBhcHBlbmQ8Rmx1c2hD
b250ZXh0PihpZGVudGlmaWVyKTsgfQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBEcmF3
R2x5cGhzUmVjb3JkZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjsKICAgICBSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSk7CiAKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3Jk
ZXJIYXJmQnV6ei5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAwOGMzODA2NmQxNDZiNWFhYTM1MDY1YTNiNjc3
NWY5YjcxY2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCisK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNv
cmRlci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihEaXNwbGF5TGlzdDo6UmVjb3JkZXImIG93bmVy
LCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX293bmVyKG93bmVyKQoreworfQor
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX293bmVyLmFwcGVu
ZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDAwOTFmODhh
M2ZjNjAxZjFkMGY0ZTM2YzAwMjdlZTRjMTY5MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNv
cmRlci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoRGlzcGxheUxpc3Q6OlJlY29y
ZGVyJiBvd25lciwgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9vd25lcihvd25l
cikKK3sKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgbV9v
d25lci5hcHBlbmREcmF3R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>