<?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>134065</bug_id>
          
          <creation_ts>2014-06-19 10:58:00 -0700</creation_ts>
          <short_desc>Removing dead code in platform/graphics/gpu</short_desc>
          <delta_ts>2014-06-20 14:21:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>roger_fong</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016700</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-19 10:58:00 -0700</bug_when>
    <thetext>Removing dead code in platform/graphics/gpu</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016701</commentid>
    <comment_count>1</comment_count>
      <attachid>233366</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-19 10:59:18 -0700</bug_when>
    <thetext>Created attachment 233366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016702</commentid>
    <comment_count>2</comment_count>
      <attachid>233367</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-19 11:03:52 -0700</bug_when>
    <thetext>Created attachment 233367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016703</commentid>
    <comment_count>3</comment_count>
      <attachid>233367</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-19 11:06:11 -0700</bug_when>
    <thetext>Comment on attachment 233367
Patch

Whoops. Messed this one up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016729</commentid>
    <comment_count>4</comment_count>
      <attachid>233374</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-19 12:54:38 -0700</bug_when>
    <thetext>Created attachment 233374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017042</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-20 14:21:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170208</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233366</attachid>
            <date>2014-06-19 10:59:18 -0700</date>
            <delta_ts>2014-06-19 11:03:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134065-20140619105856.patch</filename>
            <type>text/plain</type>
            <size>106559</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjlhZGE5NDFhYWJmMjE0
YjJiM2JiMWFlY2Y5NWYyMTE0NWFjYjdiNC4uNmNjZjg2ZDU0MjQ3YWI4MWZhYzc2YzM4ZjNjZjdk
NzczYzgyZDBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTA2LTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zpbmcg
ZGVhZCBjb2RlIGluIHBsYXRmb3JtL2dyYXBoaWNzL2dwdQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnM6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5D
bGFzc2lmaWVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlubkNvbnN0YW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1h
dGhVdGlscy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5QYXRoQ2FjaGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU29saWRGaWxsU2hhZGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
U29saWRGaWxsU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmg6IFJlbW92ZWQuCisKIDIw
MTQtMDYtMTggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2ssIEZpbGVUaHJlYWQ6OlRhc2sgcGFyYW1ldGVy
cyBzaG91bGQgYmUgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagppbmRleCAxOTU1YWVjNDI2MmE5NDlmN2NlZjNiZmQ2YzIyNzliODBlYTBh
NzQwLi5lY2MyMjhiZDQ2MTk4MzIyN2VjNTA4MDA2MDI1ODIzOWUxZWMxNGMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTcyNjUsMTgg
KzcyNjUsNiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xlZ2xcR0xDb250ZXh0RUdMLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxEcmF3aW5nQnVmZmVyLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29w
Qmxpbm5DbGFzc2lmaWVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uTWF0
aFV0aWxzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGdwdVxMb29wQmxpbm5QYXRoQ2FjaGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublNoYWRlci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uU29s
aWRGaWxsU2hhZGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGdwdVxMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFkZXIuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGdwdVxUZXh0dXJlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxUaWxpbmdEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvcm1hdENvbnZlcnRlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHcmFwaGljc0NvbnRl
eHQzRC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xHcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCIgLz4KQEAgLTE5MTc5LDIwICsxOTE2Nyw2IEBA
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGVnbFxHTENvbnRleHRFR0wuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxEcmF3aW5nQnVmZmVyLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uQ2xhc3NpZmll
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1
XExvb3BCbGlubkNvbnN0YW50cy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uTWF0
aFV0aWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xncHVcTG9vcEJsaW5uUGF0aENhY2hlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublNo
YWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Z3B1XExvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublRleHR1cmVDb29yZHMuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFkZXIu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxT
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRleHR1cmUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxUaWxpbmdEYXRhLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb3JtYXRDb252ZXJ0ZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzQ29u
dGV4dDNELmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiIC8+CkBAIC0yMTE5NSw0ICsyMTE2OSw0IEBACiAg
IDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAv
PgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA4YTQ5YTM1ZDJjOTU2NjBmZTVjMTA2OTdj
NTAyYTdiODY0NjRkM2ExLi4yMDZmZjc0ZmFiNmUwNGFhYmE2MzAwZGFiMDJjZGQ0YWNlZmViNDNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCkBAIC02NjY3LDQyICs2NjY3LDYgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXE9wZW5HTFNoaW1zLmNwcCI+CiAgICAgICA8Rmls
dGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcRHJhd2luZ0J1ZmZlci5j
cHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGdwdVxMb29wQmxpbm5DbGFzc2lmaWVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdy
YXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9y
LmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1XExvb3BCbGlubk1hdGhVdGlscy5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5QYXRoQ2FjaGUuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
TG9vcEJsaW5uU2hhZGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdw
dTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAiPgotICAg
ICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29w
Qmxpbm5UZXh0dXJlQ29vcmRzLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNz
XGdwdTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNoYWRlci5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0
Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGdwdVxUZXh0dXJlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNz
XGdwdTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRpbGluZ0RhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVuZ2xcRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXG9wZW5nbDwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTQ1MjEsNDggKzE0NDg1LDYgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXE9wZW5HTFNoaW1zLmgiPgogICAg
ICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XERyYXdpbmdC
dWZmZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZ3B1XExvb3BCbGlubkNsYXNzaWZpZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3Jt
XGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubkNvbnN0YW50cy5oIj4K
LSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdy
YXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubk1hdGhVdGlscy5oIj4KLSAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9v
cEJsaW5uUGF0aENhY2hlLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5QYXRoUHJvY2Vzc29yLmgiPgotICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5T
aGFkZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZ3B1XExvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+cGxh
dGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uVGV4dHVyZUNv
b3Jkcy5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xncHVcU2hhZGVyLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIj4KLSAgICAgIDxG
aWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcVGV4dHVyZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xn
cHVcVGlsaW5nRGF0YS5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xvcGVuZ2xcRXh0ZW5zaW9uczNET3BlbkdMLmgiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljc1xvcGVuZ2w8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAg
LTE1MjMyLDQgKzE1MTU0LDQgQEAKICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+
CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MmI0ZDczYWE2YmEzMzkwYTRlM2QzN2E3MWNhNDMyYTFi
NzdmMzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotCi0jaW5jbHVkZSAiTG9v
cEJsaW5uQ2xhc3NpZmllci5oIgotCi0jaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjphcHByb3hF
cXVhbDsKLXVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6cm91bmRUb1plcm87Ci0KLUxvb3BCbGlu
bkNsYXNzaWZpZXI6OlJlc3VsdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpjbGFzc2lmeShjb25zdCBG
bG9hdFBvaW50JiBjMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMykKLXsKLSAgICAvLyBDb25zdWx0IHRoZSBjaGFw
dGVyIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGZvbGxvd2luZwotICAgIC8vICh0ZXJzZSkg
dmFyaWFibGUgbmFtZXMuIE5vdGUgdGhhdCB0aGUgYjAuLmIzIGNvb3JkaW5hdGVzIGFyZQotICAg
IC8vIGhvbW9nZW5lb3VzLCBzbyB0aGUgInoiIHZhbHVlIChhY3R1YWxseSB0aGUgdyBjb29yZGlu
YXRlKSBtdXN0Ci0gICAgLy8gYmUgMS4wLgotICAgIEZsb2F0UG9pbnQzRCBiMChjMC54KCksIGMw
LnkoKSwgMS4wZik7Ci0gICAgRmxvYXRQb2ludDNEIGIxKGMxLngoKSwgYzEueSgpLCAxLjBmKTsK
LSAgICBGbG9hdFBvaW50M0QgYjIoYzIueCgpLCBjMi55KCksIDEuMGYpOwotICAgIEZsb2F0UG9p
bnQzRCBiMyhjMy54KCksIGMzLnkoKSwgMS4wZik7Ci0KLSAgICAvLyBDb21wdXRlIGExLi5hMy4K
LSAgICBmbG9hdCBhMSA9IGIwICogYjMuY3Jvc3MoYjIpOwotICAgIGZsb2F0IGEyID0gYjEgKiBi
MC5jcm9zcyhiMyk7Ci0gICAgZmxvYXQgYTMgPSBiMiAqIGIxLmNyb3NzKGIwKTsKLQotICAgIC8v
IENvbXB1dGUgZDEuLmQzLgotICAgIGZsb2F0IGQxID0gYTEgLSAyICogYTIgKyAzICogYTM7Ci0g
ICAgZmxvYXQgZDIgPSAtYTIgKyAzICogYTM7Ci0gICAgZmxvYXQgZDMgPSAzICogYTM7Ci0KLSAg
ICAvLyBFeHBlcmltZW50YXRpb24gaGFzIHNob3duIHRoYXQgdGhlIHRleHR1cmUgY29vcmRpbmF0
ZXMgY29tcHV0ZWQKLSAgICAvLyBmcm9tIHRoZXNlIHZhbHVlcyBxdWlja2x5IGJlY29tZSBodWdl
LCBsZWFkaW5nIHRvIHJvdW5kb2ZmIGVycm9ycwotICAgIC8vIGFuZCBhcnRpZmFjdHMgaW4gdGhl
IHNoYWRlci4gSXQgdHVybnMgb3V0IHRoYXQgaWYgd2Ugbm9ybWFsaXplCi0gICAgLy8gdGhlIHZl
Y3RvciBkZWZpbmVkIGJ5IChkMSwgZDIsIGQzKSwgdGhpcyBmaXhlcyB0aGUgcHJvYmxlbSBvZiB0
aGUKLSAgICAvLyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGdldHRpbmcgdG9vIGxhcmdlIHdpdGhvdXQg
YWZmZWN0aW5nIHRoZQotICAgIC8vIGNsYXNzaWZpY2F0aW9uIHJlc3VsdHMuCi0gICAgRmxvYXRQ
b2ludDNEIG5kKGQxLCBkMiwgZDMpOwotICAgIG5kLm5vcm1hbGl6ZSgpOwotICAgIGQxID0gbmQu
eCgpOwotICAgIGQyID0gbmQueSgpOwotICAgIGQzID0gbmQueigpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgZGlzY3JpbWluYW50LgotICAgIC8vIHRlcm0wIGlzIGEgY29tbW9uIHRlcm0gaW4gdGhl
IGNvbXB1dGF0aW9uIHdoaWNoIGhlbHBzIGRlY2lkZQotICAgIC8vIHdoaWNoIHdheSB0byBjbGFz
c2lmeSB0aGUgY3VzcCBjYXNlOiBhcyBzZXJwZW50aW5lIG9yIGxvb3AuCi0gICAgZmxvYXQgdGVy
bTAgPSAoMyAqIGQyICogZDIgLSA0ICogZDEgKiBkMyk7Ci0gICAgZmxvYXQgZGlzY3JpbWluYW50
ID0gZDEgKiBkMSAqIHRlcm0wOwotCi0gICAgLy8gRXhwZXJpbWVudGF0aW9uIGhhcyBhbHNvIHNo
b3duIHRoYXQgd2hlbiB0aGUgY2xhc3NpZmljYXRpb24gaXMKLSAgICAvLyBuZWFyIHRoZSBib3Vu
ZGFyeSBiZXR3ZWVuIG9uZSBjdXJ2ZSB0eXBlIGFuZCBhbm90aGVyLCB0aGUgc2hhZGVyCi0gICAg
Ly8gYmVjb21lcyBudW1lcmljYWxseSB1bnN0YWJsZSwgcGFydGljdWxhcmx5IHdpdGggdGhlIGN1
c3AgY2FzZS4KLSAgICAvLyBDb3JyZWN0IGZvciB0aGlzIGJ5IHJvdW5kaW5nIGQxLi5kMyBhbmQg
dGhlIGRpc2NyaW1pbmFudCB0byB6ZXJvCi0gICAgLy8gd2hlbiB0aGV5IGdldCBuZWFyIGl0Lgot
ICAgIGQxID0gcm91bmRUb1plcm8oZDEpOwotICAgIGQyID0gcm91bmRUb1plcm8oZDIpOwotICAg
IGQzID0gcm91bmRUb1plcm8oZDMpOwotICAgIGRpc2NyaW1pbmFudCA9IHJvdW5kVG9aZXJvKGRp
c2NyaW1pbmFudCk7Ci0KLSAgICAvLyBEbyB0aGUgY2xhc3NpZmljYXRpb24uCi0gICAgaWYgKGFw
cHJveEVxdWFsKGIwLCBiMSkgJiYgYXBwcm94RXF1YWwoYjAsIGIyKSAmJiBhcHByb3hFcXVhbChi
MCwgYjMpKQotICAgICAgICByZXR1cm4gUmVzdWx0KGtQb2ludCwgZDEsIGQyLCBkMyk7Ci0KLSAg
ICBpZiAoIWRpc2NyaW1pbmFudCkgewotICAgICAgICBpZiAoIWQxICYmICFkMikgewotICAgICAg
ICAgICAgaWYgKCFkMykKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0KGtMaW5lLCBkMSwg
ZDIsIGQzKTsKLSAgICAgICAgICAgIHJldHVybiBSZXN1bHQoa1F1YWRyYXRpYywgZDEsIGQyLCBk
Myk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWQxKQotICAgICAgICAgICAgcmV0dXJuIFJl
c3VsdChrQ3VzcCwgZDEsIGQyLCBkMyk7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgYm91bmRh
cnkgY2FzZSBkZXNjcmliZWQgaW4gTG9vcCBhbmQgQmxpbm4ncwotICAgICAgICAvLyBTSUdHUkFQ
SCAnMDUgcGFwZXIgb2YgYSBjdXNwIHdpdGggaW5mbGVjdGlvbiBhdCBpbmZpbml0eS4KLSAgICAg
ICAgLy8gQmVjYXVzZSB0ZXJtMCBtaWdodCBub3QgYmUgZXhhY3RseSAwLCB3ZSBkZWNpZGUgYmV0
d2VlbiB1c2luZwotICAgICAgICAvLyB0aGUgc2VycGVudGluZSBhbmQgbG9vcCBjYXNlcyBkZXBl
bmRpbmcgb24gaXRzIHNpZ24gdG8gYXZvaWQKLSAgICAgICAgLy8gdGFraW5nIHRoZSBzcXVhcmUg
cm9vdCBvZiBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIGNvbXB1dGluZyB0aGUKLSAgICAgICAgLy8g
Y3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKHRlcm0wIDwgMCkKLSAgICAg
ICAgICAgIHJldHVybiBSZXN1bHQoa0xvb3AsIGQxLCBkMiwgZDMpOwotCi0gICAgICAgIHJldHVy
biBSZXN1bHQoa1NlcnBlbnRpbmUsIGQxLCBkMiwgZDMpOwotICAgIH0KLQotICAgIGlmIChkaXNj
cmltaW5hbnQgPiAwKQotICAgICAgICByZXR1cm4gUmVzdWx0KGtTZXJwZW50aW5lLCBkMSwgZDIs
IGQzKTsKLQotICAgIC8vIGRpc2NyaW1pbmFudCA8IDAKLSAgICByZXR1cm4gUmVzdWx0KGtMb29w
LCBkMSwgZDIsIGQzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5D
bGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uQ2xhc3NpZmllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjcxODFiNGJk
MDM4ZDJkZTY5YjBkNWNhZTQ4MTcyZGI0Zjg0Yzc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gQ3ViaWMgY3VydmUgY2xhc3NpZmljYXRpb24gYWxnb3JpdGhtIGZyb20gIlJlbmRl
cmluZyBWZWN0b3IgQXJ0IG9uCi0vLyB0aGUgR1BVIiBieSBMb29wIGFuZCBCbGlubiwgR1BVIEdl
bXMgMywgQ2hhcHRlciAyNToKLS8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQ
VUdlbXMzL2dwdWdlbXMzX2NoMjUuaHRtbCAuCi0KLSNpZm5kZWYgTG9vcEJsaW5uQ2xhc3NpZmll
cl9oCi0jZGVmaW5lIExvb3BCbGlubkNsYXNzaWZpZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQb2ludDsKLQot
Ly8gQ2xhc3NpZmllcyBjdWJpYyBjdXJ2ZXMgaW50byBzcGVjaWZpYyB0eXBlcy4KLWNsYXNzIExv
b3BCbGlubkNsYXNzaWZpZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvb3BCbGlubkNs
YXNzaWZpZXIpOwotcHVibGljOgotICAgIC8vIFRoZSB0eXBlcyBvZiBjdWJpYyBjdXJ2ZXMuCi0g
ICAgZW51bSBDdXJ2ZVR5cGUgewotICAgICAgICBrU2VycGVudGluZSwKLSAgICAgICAga0N1c3As
Ci0gICAgICAgIGtMb29wLAotICAgICAgICBrUXVhZHJhdGljLAotICAgICAgICBrTGluZSwKLSAg
ICAgICAga1BvaW50Ci0gICAgfTsKLQotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhlIGNsYXNzaWZp
ZXIuCi0gICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXN1bHQoQ3Vy
dmVUeXBlIGlucHV0Q3VydmVUeXBlLCBmbG9hdCBpbnB1dEQxLCBmbG9hdCBpbnB1dEQyLCBmbG9h
dCBpbnB1dEQzKQotICAgICAgICAgICAgOiBjdXJ2ZVR5cGUoaW5wdXRDdXJ2ZVR5cGUpCi0gICAg
ICAgICAgICAsIGQxKGlucHV0RDEpCi0gICAgICAgICAgICAsIGQyKGlucHV0RDIpCi0gICAgICAg
ICAgICAsIGQzKGlucHV0RDMpIHsgfQotCi0gICAgICAgIEN1cnZlVHlwZSBjdXJ2ZVR5cGU7Ci0K
LSAgICAgICAgLy8gVGhlc2UgYXJlIGNvZWZmaWNpZW50cyB1c2VkIGxhdGVyIGluIHRoZSBjb21w
dXRhdGlvbiBvZgotICAgICAgICAvLyB0ZXh0dXJlIGNvb3JkaW5hdGVzIHBlciB2ZXJ0ZXguCi0g
ICAgICAgIGZsb2F0IGQxOwotICAgICAgICBmbG9hdCBkMjsKLSAgICAgICAgZmxvYXQgZDM7Ci0g
ICAgfTsKLQotICAgIC8vIENsYXNzaWZpZXMgdGhlIGdpdmVuIGN1YmljIGJlemllciBjdXJ2ZSBz
dGFydGluZyBhdCBjMCwgZW5kaW5nCi0gICAgLy8gYXQgYzMsIGFuZCBhZmZlY3RlZCBieSBjb250
cm9sIHBvaW50cyBjMSBhbmQgYzIuCi0gICAgc3RhdGljIFJlc3VsdCBjbGFzc2lmeShjb25zdCBG
bG9hdFBvaW50JiBjMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMyk7Ci0KLXBy
aXZhdGU6Ci0gICAgLy8gVGhpcyBjbGFzcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGluc3RhbnRpYXRl
ZC4KLSAgICBMb29wQmxpbm5DbGFzc2lmaWVyKCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5DbGFzc2lmaWVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25zdGFudHMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25zdGFudHMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk5N2Q5ZjM4YWM3NGExMDRhNTY1MDYx
YzQzNTczODc4ZjE5NGFmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29u
c3RhbnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBM
b29wQmxpbm5Db25zdGFudHNfaAotI2RlZmluZSBMb29wQmxpbm5Db25zdGFudHNfaAotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTG9vcEJsaW5uQ29uc3RhbnRzIHsKLQotZW51bSBG
aWxsU2lkZSB7Ci0gICAgTGVmdFNpZGUsCi0gICAgUmlnaHRTaWRlCi19OwotCi19IC8vIG5hbWVz
cGFjZSBMb29wQmxpbm5Db25zdGFudHMKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIExvb3BCbGlubkNvbnN0YW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9y
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxN2E2NzJmMDJjNWZiN2Y2OWIx
MTYwODlmNGVkOTgyOTljYmEyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
TG9jYWxUcmlhbmd1bGF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotCi0jaW5jbHVkZSAiTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaCIKLQotI2luY2x1
ZGUgIkxvb3BCbGlubk1hdGhVdGlscy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmFwcHJveEVxdWFsOwot
dXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpsaW5lc0ludGVyc2VjdDsKLXVzaW5nIExvb3BCbGlu
bk1hdGhVdGlsczo6cG9pbnRJblRyaWFuZ2xlOwotCi1ib29sIExvb3BCbGlubkxvY2FsVHJpYW5n
dWxhdG9yOjpUcmlhbmdsZTo6Y29udGFpbnMoTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlZl
cnRleCogdikKLXsKLSAgICByZXR1cm4gaW5kZXhGb3JWZXJ0ZXgodikgPj0gMDsKLX0KLQotTG9v
cEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlZlcnRleCogTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0
b3I6OlRyaWFuZ2xlOjpuZXh0VmVydGV4KExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpWZXJ0
ZXgqIGN1cnJlbnQsIGJvb2wgdHJhdmVyc2VDb3VudGVyQ2xvY2t3aXNlKQotewotICAgIGludCBp
bmRleCA9IGluZGV4Rm9yVmVydGV4KGN1cnJlbnQpOwotICAgIEFTU0VSVChpbmRleCA+PSAwKTsK
LSAgICBpZiAodHJhdmVyc2VDb3VudGVyQ2xvY2t3aXNlKQotICAgICAgICArK2luZGV4OwotICAg
IGVsc2UKLSAgICAgICAgLS1pbmRleDsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRl
eCArPSAzOwotICAgIGVsc2UKLSAgICAgICAgaW5kZXggPSBpbmRleCAlIDM7Ci0gICAgcmV0dXJu
IG1fdmVydGljZXNbaW5kZXhdOwotfQotCi1pbnQgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6
OlRyaWFuZ2xlOjppbmRleEZvclZlcnRleChMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VmVy
dGV4KiB2ZXJ0ZXgpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAg
IGlmIChtX3ZlcnRpY2VzW2ldID09IHZlcnRleCkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAg
IHJldHVybiAtMTsKLX0KLQotdm9pZCBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VHJpYW5n
bGU6Om1ha2VDb3VudGVyQ2xvY2t3aXNlKCkKLXsKLSAgICAvLyBQb3NzaWJseSBzd2FwcyB0d28g
dmVydGljZXMgc28gdGhhdCB0aGUgdHJpYW5nbGUncyB2ZXJ0aWNlcyBhcmUKLSAgICAvLyBhbHdh
eXMgc3BlY2lmaWVkIGluIGNvdW50ZXJjbG9ja3dpc2Ugb3JkZXIuIFRoaXMgb3JkZXJzIHRoZQot
ICAgIC8vIHZlcnRpY2VzIGNhbm9uaWNhbGx5IHdoZW4gd2Fsa2luZyB0aGUgaW50ZXJpb3IgZWRn
ZXMgZnJvbSB0aGUKLSAgICAvLyBzdGFydCB0byB0aGUgZW5kIHZlcnRleC4KLSAgICBGbG9hdFBv
aW50M0QgcG9pbnQwKG1fdmVydGljZXNbMF0tPnh5Q29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRQ
b2ludDNEIHBvaW50MShtX3ZlcnRpY2VzWzFdLT54eUNvb3JkaW5hdGVzKCkpOwotICAgIEZsb2F0
UG9pbnQzRCBwb2ludDIobV92ZXJ0aWNlc1syXS0+eHlDb29yZGluYXRlcygpKTsKLSAgICBGbG9h
dFBvaW50M0QgY3Jvc3NQcm9kdWN0ID0gKHBvaW50MSAtIHBvaW50MCkuY3Jvc3MocG9pbnQyIC0g
cG9pbnQwKTsKLSAgICBpZiAoY3Jvc3NQcm9kdWN0LnooKSA8IDApCi0gICAgICAgIHN0ZDo6c3dh
cChtX3ZlcnRpY2VzWzFdLCBtX3ZlcnRpY2VzWzJdKTsKLX0KLQotTG9vcEJsaW5uTG9jYWxUcmlh
bmd1bGF0b3I6Okxvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yKCkKLXsKLSAgICByZXNldCgpOwot
fQotCi12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpyZXNldCgpCi17Ci0gICAgbV9u
dW1iZXJPZlRyaWFuZ2xlcyA9IDA7Ci0gICAgbV9udW1iZXJPZkludGVyaW9yVmVydGljZXMgPSAw
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIG1faW50ZXJpb3JW
ZXJ0aWNlc1tpXSA9IDA7Ci0gICAgICAgIG1fdmVydGljZXNbaV0ucmVzZXRGbGFncygpOwotICAg
IH0KLX0KLQotdm9pZCBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6dHJpYW5ndWxhdGUoSW5z
aWRlRWRnZUNvbXB1dGF0aW9uIGNvbXB1dGVJbnNpZGVFZGdlcywgTG9vcEJsaW5uQ29uc3RhbnRz
OjpGaWxsU2lkZSBzaWRlVG9GaWxsKQotewotICAgIHRyaWFuZ3VsYXRlSGVscGVyKHNpZGVUb0Zp
bGwpOwotCi0gICAgaWYgKGNvbXB1dGVJbnNpZGVFZGdlcyA9PSBDb21wdXRlSW5zaWRlRWRnZXMp
IHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHdoaWNoIHZlcnRpY2VzIGRlc2NyaWJl
IHRoZSBwYXRoIGFsb25nIHRoZQotICAgICAgICAvLyBpbnRlcmlvciBwb3J0aW9uIG9mIHRoZSBz
aGFwZSwgdG8gZmVlZCB0aGVzZSB2ZXJ0aWNlcyB0byB0aGUKLSAgICAgICAgLy8gbW9yZSBnZW5l
cmFsIHRlc3NlbGxhdGlvbiBhbGdvcml0aG0uIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UKLSAgICAg
ICAgLy8gY291bGQgZGV0ZXJtaW5lIHRoaXMgZGlyZWN0bHkgd2hpbGUgcHJvZHVjaW5nIHRyaWFu
Z2xlcyBhYm92ZS4KLSAgICAgICAgLy8gSGVyZSB3ZSB0cnkgdG8gZG8gaXQgZ2VuZXJhbGx5IGp1
c3QgYnkgZXhhbWluaW5nIHRoZSB0cmlhbmdsZXMKLSAgICAgICAgLy8gdGhhdCBoYXZlIGFscmVh
ZHkgYmVlbiBwcm9kdWNlZC4gV2Ugd2FsayBhcm91bmQgdGhlbSBpbiBhCi0gICAgICAgIC8vIHNw
ZWNpZmljIGRpcmVjdGlvbiBkZXRlcm1pbmVkIGJ5IHdoaWNoIHNpZGUgb2YgdGhlIGN1cnZlIGlz
Ci0gICAgICAgIC8vIGJlaW5nIGZpbGxlZC4gV2UgaWdub3JlIHRoZSBpbnRlcmlvciB2ZXJ0ZXgg
dW5sZXNzIGl0IGlzIGFsc28KLSAgICAgICAgLy8gdGhlIGVuZGluZyB2ZXJ0ZXgsIGFuZCBza2lw
IHRoZSBlZGdlcyBzaGFyZWQgYmV0d2VlbiB0d28KLSAgICAgICAgLy8gdHJpYW5nbGVzLgotICAg
ICAgICBWZXJ0ZXgqIHYgPSAmbV92ZXJ0aWNlc1swXTsKLSAgICAgICAgYWRkSW50ZXJpb3JWZXJ0
ZXgodik7Ci0gICAgICAgIGludCBudW1TdGVwcyA9IDA7Ci0gICAgICAgIHdoaWxlICghdi0+ZW5k
KCkgJiYgbnVtU3RlcHMgPCA0KSB7Ci0gICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHZlcnRl
eCBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHJ1bGVzCi0gICAgICAgICAgICBib29sIGdvdE5leHQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZUcmlhbmds
ZXMoKSAmJiAhZ290TmV4dDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVHJpYW5nbGUqIHRyaSA9
IGdldFRyaWFuZ2xlKGkpOwotICAgICAgICAgICAgICAgIGlmICh0cmktPmNvbnRhaW5zKHYpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFZlcnRleCogbmV4dCA9IHRyaS0+bmV4dFZlcnRleCh2LCBz
aWRlVG9GaWxsID09IExvb3BCbGlubkNvbnN0YW50czo6UmlnaHRTaWRlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuZXh0LT5tYXJrZWQoKSAmJiAhaXNTaGFyZWRFZGdlKHYsIG5leHQpICYm
ICghbmV4dC0+aW50ZXJpb3IoKSB8fCBuZXh0LT5lbmQoKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZEludGVyaW9yVmVydGV4KG5leHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
diA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBCcmVhayBvdXQgb2YgZm9yIGxv
b3AKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdE5leHQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
KytudW1TdGVwczsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXYtPmVuZCgpKSB7Ci0gICAgICAg
ICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBhYm92ZSBhbGdvcml0aG07IGFk
ZCB0aGUgbGFzdAotICAgICAgICAgICAgLy8gdmVydGV4IHRvIHRoZSBpbnRlcmlvciB2ZXJ0aWNl
cyBhbnl3YXkuIChGSVhNRTogc2hvdWxkIHdlCi0gICAgICAgICAgICAvLyBhZGQgYW4gYXNzZXJ0
IGhlcmUgYW5kIGRvIG1vcmUgZXh0ZW5zaXZlIHRlc3Rpbmc/KQotICAgICAgICAgICAgYWRkSW50
ZXJpb3JWZXJ0ZXgoJm1fdmVydGljZXNbM10pOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjp0cmlhbmd1bGF0ZUhlbHBlcihMb29wQmxpbm5D
b25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpCi17Ci0gICAgcmVzZXQoKTsKLQotICAgIG1f
dmVydGljZXNbM10uc2V0RW5kKHRydWUpOwotCi0gICAgLy8gRmlyc3QgdGVzdCBmb3IgZGVnZW5l
cmF0ZSBjYXNlcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBm
b3IgKGludCBqID0gaSArIDE7IGogPCA0OyArK2opIHsKLSAgICAgICAgICAgIGlmIChhcHByb3hF
cXVhbChtX3ZlcnRpY2VzW2ldLnh5Q29vcmRpbmF0ZXMoKSwgbV92ZXJ0aWNlc1tqXS54eUNvb3Jk
aW5hdGVzKCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdvIG9mIHRoZSB2ZXJ0aWNlcyBhcmUg
Y29pbmNpZGVudCwgc28gd2UgY2FuIGVsaW1pbmF0ZSBhdAotICAgICAgICAgICAgICAgIC8vIGxl
YXN0IG9uZSB0cmlhbmdsZS4gV2UgbWlnaHQgYmUgYWJsZSB0byBlbGltaW5hdGUgdGhlIG90aGVy
Ci0gICAgICAgICAgICAgICAgLy8gYXMgd2VsbCwgYnV0IHRoaXMgc2VlbXMgc3VmZmljaWVudCB0
byBhdm9pZCBkZWdlbmVyYXRlCi0gICAgICAgICAgICAgICAgLy8gdHJpYW5ndWxhdGlvbnMuCi0g
ICAgICAgICAgICAgICAgaW50IGluZGljZXNbM10gPSB7IDAgfTsKLSAgICAgICAgICAgICAgICBp
bnQgaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytr
KQotICAgICAgICAgICAgICAgICAgICBpZiAoayAhPSBqKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlc1tpbmRleCsrXSA9IGs7Ci0gICAgICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1f
dmVydGljZXNbaW5kaWNlc1swXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fdmVy
dGljZXNbaW5kaWNlc1sxXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fdmVydGlj
ZXNbaW5kaWNlc1syXV0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFNlZSB3aGV0aGVyIGFueSBvZiB0aGUgcG9pbnRz
IGFyZSBmdWxseSBjb250YWluZWQgaW4gdGhlCi0gICAgLy8gdHJpYW5nbGUgZGVmaW5lZCBieSB0
aGUgb3RoZXIgdGhyZWUuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAg
ICAgaW50IGluZGljZXNbM10gPSB7IDAgfTsKLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opCi0gICAgICAgICAgICBpZiAoaSAhPSBqKQot
ICAgICAgICAgICAgICAgIGluZGljZXNbaW5kZXgrK10gPSBqOwotICAgICAgICBpZiAocG9pbnRJ
blRyaWFuZ2xlKG1fdmVydGljZXNbaV0ueHlDb29yZGluYXRlcygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmVydGljZXNbaW5kaWNlc1swXV0ueHlDb29yZGluYXRlcygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljZXNbaW5kaWNlc1sxXV0ueHlDb29yZGlu
YXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljZXNbaW5kaWNlc1sy
XV0ueHlDb29yZGluYXRlcygpKSkgewotICAgICAgICAgICAgLy8gUHJvZHVjZSB0aHJlZSB0cmlh
bmdsZXMgc3Vycm91bmRpbmcgdGhpcyBpbnRlcmlvciB2ZXJ0ZXguCi0gICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDM7ICsraikKLSAgICAgICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92
ZXJ0aWNlc1tpbmRpY2VzW2ogJSAzXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1f
dmVydGljZXNbaW5kaWNlc1soaiArIDEpICUgM11dLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtX3ZlcnRpY2VzW2ldKTsKLSAgICAgICAgICAgIC8vIE1hcmsgdGhlIGludGVyaW9yIHZl
cnRleCBzbyB3ZSBpZ25vcmUgaXQgaWYgdHJ5aW5nIHRvIHRyYWNlCi0gICAgICAgICAgICAvLyB0
aGUgaW50ZXJpb3IgZWRnZS4KLSAgICAgICAgICAgIG1fdmVydGljZXNbaV0uc2V0SW50ZXJpb3Io
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
aGVyZSBhcmUgb25seSBhIGZldyBwZXJtdXRhdGlvbnMgb2YgdGhlIHZlcnRpY2VzLCBpZ25vcmlu
ZwotICAgIC8vIHJvdGF0aW9ucywgd2hpY2ggYXJlIGlycmVsZXZhbnQ6Ci0gICAgLy8KLSAgICAv
LyAgMC0tMyAgMC0tMiAgMC0tMyAgMC0tMSAgMC0tMiAgMC0tMQotICAgIC8vICB8ICB8ICB8ICB8
ICB8ICB8ICB8ICB8ICB8ICB8ICB8ICB8Ci0gICAgLy8gIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwg
IHwgIHwgIHwgIHwKLSAgICAvLyAgMS0tMiAgMS0tMyAgMi0tMSAgMi0tMyAgMy0tMSAgMy0tMgot
ICAgIC8vCi0gICAgLy8gTm90ZSB0aGF0IHRocmVlIG9mIHRoZXNlIGFyZSByZWZsZWN0aW9ucyBv
ZiBlYWNoIG90aGVyLgotICAgIC8vIFRoZXJlZm9yZSB0aGVyZSBhcmUgb25seSB0aHJlZSBwb3Nz
aWJsZSB0cmlhbmd1bGF0aW9uczoKLSAgICAvLwotICAgIC8vICAwLS0zICAwLS0yICAwLS0zCi0g
ICAgLy8gIHxcIHwgIHxcIHwgIHxcIHwKLSAgICAvLyAgfCBcfCAgfCBcfCAgfCBcfAotICAgIC8v
ICAxLS0yICAxLS0zICAyLS0xCi0gICAgLy8KLSAgICAvLyBGcm9tIHdoaWNoIHdlIGNhbiBjaG9v
c2UgYnkgc2VlaW5nIHdoaWNoIG9mIHRoZSBwb3RlbnRpYWwKLSAgICAvLyBkaWFnb25hbHMgaW50
ZXJzZWN0LiBOb3RlIHRoYXQgd2UgY2hvb3NlIHRoZSBzaG9ydGVzdCBkaWFnb25hbAotICAgIC8v
IHRvIHNwbGl0IHRoZSBxdWFkLgotICAgIGlmIChsaW5lc0ludGVyc2VjdChtX3ZlcnRpY2VzWzBd
Lnh5Q29vcmRpbmF0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1syXS54
eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljZXNbMV0ueHlD
b29yZGluYXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2VzWzNdLnh5Q29v
cmRpbmF0ZXMoKSkpIHsKLSAgICAgICAgaWYgKChtX3ZlcnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMo
KSAtIG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KSA8Ci0gICAgICAgICAgICAobV92ZXJ0aWNlc1szXS54eUNvb3JkaW5hdGVzKCkgLSBtX3ZlcnRp
Y2VzWzFdLnh5Q29vcmRpbmF0ZXMoKSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpIHsKLSAgICAg
ICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVy
dGljZXNbMl0pOwotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3Zl
cnRpY2VzWzJdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNbMV0sICZtX3ZlcnRpY2Vz
WzNdKTsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0aWNl
c1syXSwgJm1fdmVydGljZXNbM10pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChsaW5lc0lu
dGVyc2VjdChtX3ZlcnRpY2VzWzBdLnh5Q29vcmRpbmF0ZXMoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmVydGljZXNbM10ueHlDb29yZGluYXRlcygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1sxXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSkpIHsK
LSAgICAgICAgaWYgKChtX3ZlcnRpY2VzWzNdLnh5Q29vcmRpbmF0ZXMoKSAtIG1fdmVydGljZXNb
MF0ueHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSA8Ci0gICAgICAgICAg
ICAobV92ZXJ0aWNlc1syXS54eUNvb3JkaW5hdGVzKCkgLSBtX3ZlcnRpY2VzWzFdLnh5Q29vcmRp
bmF0ZXMoKSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpIHsKLSAgICAgICAgICAgIGFkZFRyaWFu
Z2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGljZXNbM10pOwotICAg
ICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzNdLCAmbV92
ZXJ0aWNlc1syXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgm
bV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNbMV0sICZtX3ZlcnRpY2VzWzJdKTsKLSAgICAgICAg
ICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzJdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGlj
ZXNbM10pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTGluZXMgKDAtPjEp
LCAoMi0+MykgaW50ZXJzZWN0IC0tIG9yIHNob3VsZCwgbW9kdWxvIG51bWVyaWNhbAotICAgICAg
ICAvLyBwcmVjaXNpb24gaXNzdWVzCi0gICAgICAgIGlmICgobV92ZXJ0aWNlc1sxXS54eUNvb3Jk
aW5hdGVzKCkgLSBtX3ZlcnRpY2VzWzBdLnh5Q29vcmRpbmF0ZXMoKSkuZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCkgPAotICAgICAgICAgICAgKG1fdmVydGljZXNbM10ueHlDb29yZGluYXRlcygpIC0g
bV92ZXJ0aWNlc1syXS54eUNvb3JkaW5hdGVzKCkpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpKSB7
Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNbMl0s
ICZtX3ZlcnRpY2VzWzFdKTsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBd
LCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGljZXNbM10pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzJdLCAmbV92
ZXJ0aWNlc1szXSk7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1szXSwgJm1f
dmVydGljZXNbMl0sICZtX3ZlcnRpY2VzWzFdKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6YWRkVHJpYW5nbGUoVmVydGV4KiB2MCwgVmVy
dGV4KiB2MSwgVmVydGV4KiB2MikKLXsKLSAgICBBU1NFUlQobV9udW1iZXJPZlRyaWFuZ2xlcyA8
IDMpOwotICAgIG1fdHJpYW5nbGVzW21fbnVtYmVyT2ZUcmlhbmdsZXMrK10uc2V0VmVydGljZXMo
djAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OmFkZElu
dGVyaW9yVmVydGV4KFZlcnRleCogdikKLXsKLSAgICBBU1NFUlQobV9udW1iZXJPZkludGVyaW9y
VmVydGljZXMgPCA0KTsKLSAgICBtX2ludGVyaW9yVmVydGljZXNbbV9udW1iZXJPZkludGVyaW9y
VmVydGljZXMrK10gPSB2OwotICAgIHYtPnNldE1hcmtlZCh0cnVlKTsKLX0KLQotYm9vbCBMb29w
Qmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6aXNTaGFyZWRFZGdlKFZlcnRleCogdjAsIFZlcnRleCog
djEpCi17Ci0gICAgYm9vbCBoYXZlRWRnZTAxID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlRWRnZTEw
ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlRyaWFuZ2xlcygpOyAr
K2kpIHsKLSAgICAgICAgVHJpYW5nbGUqIHRyaSA9IGdldFRyaWFuZ2xlKGkpOwotICAgICAgICBp
ZiAodHJpLT5jb250YWlucyh2MCkgJiYgdHJpLT5uZXh0VmVydGV4KHYwLCB0cnVlKSA9PSB2MSkK
LSAgICAgICAgICAgIGhhdmVFZGdlMDEgPSB0cnVlOwotICAgICAgICBpZiAodHJpLT5jb250YWlu
cyh2MSkgJiYgdHJpLT5uZXh0VmVydGV4KHYxLCB0cnVlKSA9PSB2MCkKLSAgICAgICAgICAgIGhh
dmVFZGdlMTAgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gaGF2ZUVkZ2UwMSAmJiBoYXZlRWRn
ZTEwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5n
dWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
TG9jYWxUcmlhbmd1bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyMjk0
ZTY0NjgxMGIxYjQwOWE1ZTVlMWJjNjhkOTg3N2E5OGJhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcl9oCi0j
ZGVmaW5lIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5Db25z
dGFudHMuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFBlcmZvcm1zIGEgbG9jYWxp
emVkIHRyaWFuZ3VsYXRpb24gb2YgdGhlIHRyaWFuZ2xlIG1lc2gKLS8vIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIGZvdXIgY29udHJvbCBwb2ludCB2ZXJ0aWNlcyBvZiBhIGN1YmljIGN1cnZlCi0vLyBz
ZWdtZW50LgotY2xhc3MgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yKTsKLXB1YmxpYzoKLSAgICAv
LyBUaGUgdmVydGljZXMgdGhhdCB0aGUgdHJpYW5ndWxhdG9yIG9wZXJhdGVzIHVwb24sIGNvbnRh
aW5pbmcgYm90aAotICAgIC8vIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBhcyB3ZWxsIGFzIHRo
ZSBjdWJpYyB0ZXh0dXJlCi0gICAgLy8gY29vcmRpbmF0ZXMuCi0gICAgY2xhc3MgVmVydGV4IHsK
LSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmVydGV4KTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFZlcnRleCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0RmxhZ3MoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHh5Q29vcmRpbmF0ZXMoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV94eUNvb3JkaW5hdGVzOwotICAgICAgICB9
Ci0KLSAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEJiBrbG1Db29yZGluYXRlcygpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tsbUNvb3JkaW5hdGVzOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0cyB0aGUgcG9zaXRpb24gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMg
b2YgdGhlIHZlcnRleC4KLSAgICAgICAgdm9pZCBzZXQoZmxvYXQgeCwgZmxvYXQgeSwKLSAgICAg
ICAgICAgICAgICAgZmxvYXQgaywgZmxvYXQgbCwgZmxvYXQgbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV94eUNvb3JkaW5hdGVzLnNldCh4LCB5KTsKLSAgICAgICAgICAgIG1fa2xtQ29vcmRp
bmF0ZXMuc2V0KGssIGwsIG0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmxhZ3MgZm9yIHdh
bGtpbmcgZnJvbSB0aGUgc3RhcnQgdmVydGV4IHRvIHRoZSBlbmQgdmVydGV4LgotICAgICAgICBi
b29sIGVuZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2VuZDsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0RW5kKGJvb2wgZW5kKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2VuZCA9IGVuZDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbWFya2VkKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fbWFya2VkOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXRNYXJrZWQoYm9vbCBtYXJrZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbWFy
a2VkID0gbWFya2VkOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpbnRlcmlvcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ludGVyaW9yOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRJbnRlcmlvcihib29sIGludGVyaW9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ludGVyaW9yID0gaW50ZXJpb3I7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlc2V0
RmxhZ3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2VuZCA9IGZhbHNlOwotICAgICAgICAg
ICAgbV9tYXJrZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1faW50ZXJpb3IgPSBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gMkQgY29vcmRpbmF0ZXMgb2YgdGhl
IHZlcnRleCBpbiB0aGUgcGxhbmUuCi0gICAgICAgIEZsb2F0UG9pbnQgbV94eUNvb3JkaW5hdGVz
OwotICAgICAgICAvLyBDdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciByZW5kZXJpbmcgdGhl
IGN1cnZlLgotICAgICAgICBGbG9hdFBvaW50M0QgbV9rbG1Db29yZGluYXRlczsKLQotICAgICAg
ICAvLyBGbGFncyBmb3Igd2Fsa2luZyBmcm9tIHRoZSBzdGFydCB2ZXJ0ZXggdG8gdGhlIGVuZCB2
ZXJ0ZXguCi0gICAgICAgIGJvb2wgbV9lbmQ7Ci0gICAgICAgIGJvb2wgbV9tYXJrZWQ7Ci0gICAg
ICAgIGJvb2wgbV9pbnRlcmlvcjsKLSAgICB9OwotCi0gICAgLy8gVGhlIHRyaWFuZ2xlcyB0aGUg
VHJpYW5ndWxhdG9yIHByb2R1Y2VzLgotICAgIGNsYXNzIFRyaWFuZ2xlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIFRyaWFuZ2xlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV92ZXJ0aWNlc1sw
XSA9IDA7Ci0gICAgICAgICAgICBtX3ZlcnRpY2VzWzFdID0gMDsKLSAgICAgICAgICAgIG1fdmVy
dGljZXNbMl0gPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0cyB0aGUgdmVydGV4IGF0
IHRoZSBnaXZlbiBpbmRleCwgMCA8PSBpbmRleCA8IDMuCi0gICAgICAgIFZlcnRleCogZ2V0VmVy
dGV4KGludCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IDAg
JiYgaW5kZXggPCAzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3ZlcnRpY2VzW2luZGV4XTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRyaWFuZ2xlIGNvbnRh
aW5zIHRoZSBnaXZlbiB2ZXJ0ZXggKGJ5Ci0gICAgICAgIC8vIGlkZW50aXR5LCBub3QgZ2VvbWV0
cmljYWxseSkuCi0gICAgICAgIGJvb2wgY29udGFpbnMoVmVydGV4KiB2KTsKLQotICAgICAgICAv
LyBSZXR1cm5zIHRoZSB2ZXJ0ZXggZm9sbG93aW5nIHRoZSBjdXJyZW50IG9uZSBpbiB0aGUgc3Bl
Y2lmaWVkCi0gICAgICAgIC8vIGRpcmVjdGlvbiwgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dp
c2UuCi0gICAgICAgIFZlcnRleCogbmV4dFZlcnRleChWZXJ0ZXgqIGN1cnJlbnQsIGJvb2wgdHJh
dmVyc2VDb3VudGVyQ2xvY2t3aXNlKTsKLQotICAgICAgICAvLyBTZXRzIHRoZSB2ZXJ0aWNlcyBv
ZiB0aGlzIHRyaWFuZ2xlLCBwb3RlbnRpYWxseSByZW9yZGVyaW5nIHRoZW0KLSAgICAgICAgLy8g
dG8gcHJvZHVjZSBhIGNhbm9uaWNhbCBvcmllbnRhdGlvbi4KLSAgICAgICAgdm9pZCBzZXRWZXJ0
aWNlcyhWZXJ0ZXgqIHYwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleCogdjEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgVmVydGV4KiB2MikKLSAgICAgICAgewotICAgICAgICAg
ICAgbV92ZXJ0aWNlc1swXSA9IHYwOwotICAgICAgICAgICAgbV92ZXJ0aWNlc1sxXSA9IHYxOwot
ICAgICAgICAgICAgbV92ZXJ0aWNlc1syXSA9IHYyOwotICAgICAgICAgICAgbWFrZUNvdW50ZXJD
bG9ja3dpc2UoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gUmV0dXJu
cyB0aGUgaW5kZXggWzAuLjJdIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdmVydGV4LCBvcgot
ICAgICAgICAvLyAtMSBpZiBub3QgZm91bmQuCi0gICAgICAgIGludCBpbmRleEZvclZlcnRleChW
ZXJ0ZXgqIHZlcnRleCk7Ci0KLSAgICAgICAgLy8gUmVvcmRlcnMgdGhlIHZlcnRpY2VzIGluIHRo
aXMgdHJpYW5nbGUgdG8gbWFrZSB0aGVtCi0gICAgICAgIC8vIGNvdW50ZXJjbG9ja3dpc2Ugd2hl
biB2aWV3ZWQgaW4gdGhlIDJEIHBsYW5lLCBpbiBvcmRlciB0bwotICAgICAgICAvLyBhY2hpZXZl
IGEgY2Fub25pY2FsIG9yZGVyaW5nLgotICAgICAgICB2b2lkIG1ha2VDb3VudGVyQ2xvY2t3aXNl
KCk7Ci0KLSAgICAgICAgLy8gTm90ZTogdGhlc2UgYXJlIHJhdyBwb2ludGVycyBiZWNhdXNlIHRo
ZXkgcG9pbnQgdG8gdGhlCi0gICAgICAgIC8vIG1fdmVydGljZXMgY29udGFpbmVkIGluIHRoZSBz
dXJyb3VuZGluZyB0cmlhbmd1bGF0b3IuCi0gICAgICAgIFZlcnRleCogbV92ZXJ0aWNlc1szXTsK
LSAgICB9OwotCi0gICAgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IoKTsKLQotICAgIC8vIFJl
c2V0cyB0aGUgdHJpYW5ndWxhdG9yJ3Mgc3RhdGUuIEFmdGVyIGVhY2ggdHJpYW5ndWxhdGlvbiBh
bmQKLSAgICAvLyBiZWZvcmUgdGhlIG5leHQsIGNhbGwgdGhpcyB0byByZS1pbml0aWFsaXplIHRo
ZSBpbnRlcm5hbAotICAgIC8vIHZlcnRpY2VzJyBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0K
LSAgICAvLyBSZXR1cm5zIGEgbXV0YWJsZSB2ZXJ0ZXggc3RvcmVkIGluIHRoZSB0cmlhbmd1bGF0
b3IuIFVzZSB0aGlzIHRvCi0gICAgLy8gc2V0IHVwIHRoZSB2ZXJ0aWNlcyBiZWZvcmUgYSB0cmlh
bmd1bGF0aW9uLgotICAgIFZlcnRleCogZ2V0VmVydGV4KGludCBpbmRleCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCA+PSAwICYmIGluZGV4IDwgNCk7Ci0gICAgICAgIHJldHVybiAmbV92
ZXJ0aWNlc1tpbmRleF07Ci0gICAgfQotCi0gICAgZW51bSBJbnNpZGVFZGdlQ29tcHV0YXRpb24g
ewotICAgICAgICBDb21wdXRlSW5zaWRlRWRnZXMsCi0gICAgICAgIERvbnRDb21wdXRlSW5zaWRl
RWRnZXMKLSAgICB9OwotCi0gICAgLy8gT25jZSB0aGUgdmVydGljZXMnIGNvbnRlbnRzIGhhdmUg
YmVlbiBzZXQgdXAsIGNhbGwgdHJpYW5ndWxhdGUoKQotICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUg
dHJpYW5nbGVzLgotICAgIC8vCi0gICAgLy8gSWYgY29tcHV0ZUluc2lkZUVkZ2VzIGlzIENvbXB1
dGVJbnNpZGVFZGdlcywgdGhlbiBzaWRlVG9GaWxsCi0gICAgLy8gd2lsbCBiZSB1c2VkIHRvIGRl
dGVybWluZSB3aGljaCBzaWRlIG9mIHRoZSBjdWJpYyBjdXJ2ZSBkZWZpbmVkCi0gICAgLy8gYnkg
dGhlIGZvdXIgY29udHJvbCBwb2ludHMgaXMgdG8gYmUgZmlsbGVkLgotICAgIC8vCi0gICAgLy8g
VGhlIHRyaWFuZ3VsYXRpb24gb2JleXMgdGhlIGZvbGxvd2luZyBndWFyYW50ZWVzOgotICAgIC8v
ICAgLSBJZiB0aGUgY29udmV4IGh1bGwgaXMgYSBxdWFkcmlsYXRlcmFsLCB0aGVuIHRoZSBzaG9y
dGVzdCBlZGdlCi0gICAgLy8gICAgIHdpbGwgYmUgY2hvc2VuIGZvciB0aGUgY3V0IGludG8gdHdv
IHRyaWFuZ2xlcy4KLSAgICAvLyAgIC0gSWYgb25lIG9mIHRoZSB2ZXJ0aWNlcyBpcyBjb250YWlu
ZWQgaW4gdGhlIHRyaWFuZ2xlIHNwYW5uZWQKLSAgICAvLyAgICAgYnkgdGhlIG90aGVyIHRocmVl
LCB0aHJlZSB0cmlhbmdsZXMgd2lsbCBiZSBwcm9kdWNlZC4KLSAgICB2b2lkIHRyaWFuZ3VsYXRl
KEluc2lkZUVkZ2VDb21wdXRhdGlvbiBjb21wdXRlSW5zaWRlRWRnZXMsCi0gICAgICAgICAgICAg
ICAgICAgICBMb29wQmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOwotCi0gICAg
Ly8gTnVtYmVyIG9mIHRyaWFuZ2xlcyBjb21wdXRlZCBieSB0cmlhbmd1bGF0ZSgpLgotICAgIGlu
dCBudW1iZXJPZlRyaWFuZ2xlcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9udW1i
ZXJPZlRyaWFuZ2xlczsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBjb21wdXRlZCB0cmlh
bmdsZSBhdCBpbmRleCwgMCA8PSBpbmRleCA8IG51bWJlck9mVHJpYW5nbGVzKCkuCi0gICAgVHJp
YW5nbGUqIGdldFRyaWFuZ2xlKGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRl
eCA+PSAwICYmIGluZGV4IDwgbV9udW1iZXJPZlRyaWFuZ2xlcyk7Ci0gICAgICAgIHJldHVybiAm
bV90cmlhbmdsZXNbaW5kZXhdOwotICAgIH0KLQotICAgIC8vIE51bWJlciBvZiB2ZXJ0aWNlcyBm
YWNpbmcgdGhlIGluc2lkZSBvZiB0aGUgc2hhcGUsIGlmCi0gICAgLy8gQ29tcHV0ZUluc2lkZUVk
Z2VzIHdhcyBwYXNzZWQgd2hlbiB0cmlhbmd1bGF0ZSgpIHdhcyBjYWxsZWQuCi0gICAgaW50IG51
bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9u
dW1iZXJPZkludGVyaW9yVmVydGljZXM7Ci0gICAgfQotCi0gICAgLy8gRmV0Y2hlcyB0aGUgZ2l2
ZW4gaW50ZXJpb3IgdmVydGV4LCAwIDw9IGluZGV4IDwgbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2Vz
KCkuCi0gICAgVmVydGV4KiBnZXRJbnRlcmlvclZlcnRleChpbnQgaW5kZXgpCi0gICAgewotICAg
ICAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBpbmRleCA8IG1fbnVtYmVyT2ZJbnRlcmlvclZlcnRp
Y2VzKTsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJpb3JWZXJ0aWNlc1tpbmRleF07Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIHZvaWQgdHJpYW5ndWxhdGVIZWxwZXIoTG9vcEJsaW5uQ29uc3RhbnRz
OjpGaWxsU2lkZSBzaWRlVG9GaWxsKTsKLQotICAgIC8vIEFkZHMgYSB0cmlhbmdsZSB0byB0aGUg
dHJpYW5ndWxhdGlvbi4KLSAgICB2b2lkIGFkZFRyaWFuZ2xlKFZlcnRleCogdjAsIFZlcnRleCog
djEsIFZlcnRleCogdjIpOwotCi0gICAgLy8gQWRkcyBhIHZlcnRleCB0byB0aGUgbGlzdCBvZiBp
bnRlcmlvciB2ZXJ0aWNlcy4KLSAgICB2b2lkIGFkZEludGVyaW9yVmVydGV4KFZlcnRleCogdik7
Ci0KLSAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWRnZSBiZXR3ZWVuIHZlcnRleCB2MCBh
bmQgdjEgaXMgc2hhcmVkCi0gICAgLy8gYmV0d2VlbiB0d28gb3IgbW9yZSB0cmlhbmdsZXMuCi0g
ICAgYm9vbCBpc1NoYXJlZEVkZ2UoVmVydGV4KiB2MCwgVmVydGV4KiB2MSk7Ci0KLSAgICAvLyBU
aGUgdmVydGljZXMgYmVpbmcgdHJpYW5ndWxhdGVkLgotICAgIFZlcnRleCBtX3ZlcnRpY2VzWzRd
OwotCi0gICAgLy8gVGhlIHZlcnRpY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVkZ2VzIGZhY2lu
ZyB0aGUgaW5zaWRlIG9mIHRoZQotICAgIC8vIHNoYXBlLCBpbiBvcmRlciBmcm9tIHRoZSBzdGFy
dCB2ZXJ0ZXggdG8gdGhlIGVuZCB2ZXJ0ZXguIFRoZSBtb3JlCi0gICAgLy8gZ2VuZXJhbCB0cmlh
bmd1bGF0aW9uIGFsZ29yaXRobSB0ZXNzZWxsYXRlcyB0aGlzIGludGVyaW9yIHJlZ2lvbi4KLSAg
ICBWZXJ0ZXgqIG1faW50ZXJpb3JWZXJ0aWNlc1s0XTsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIGlu
dGVyaW9yIHZlcnRpY2VzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgY3VycmVudAotICAgIC8vIHRy
aWFuZ3VsYXRpb24uCi0gICAgaW50IG1fbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzOwotCi0gICAg
Ly8gVGhlcmUgY2FuIGJlIGF0IG1vc3QgdGhyZWUgdHJpYW5nbGVzIGNvbXB1dGVkIGJ5IHRoaXMg
bG9jYWwKLSAgICAvLyBhbGdvcml0aG0sIHdoaWNoIG9jY3VycyB3aGVuIG9uZSBvZiB0aGUgdmVy
dGljZXMgaXMgY29udGFpbmVkIGluCi0gICAgLy8gdGhlIHRyaWFuZ2xlIHNwYW5uZWQgYnkgdGhl
IG90aGVyIHRocmVlLiBNb3N0IG9mIHRoZSB0aW1lIHRoZQotICAgIC8vIGFsZ29yaXRobSBjb21w
dXRlcyB0d28gdHJpYW5nbGVzLgotICAgIFRyaWFuZ2xlIG1fdHJpYW5nbGVzWzNdOwotICAgIGlu
dCBtX251bWJlck9mVHJpYW5nbGVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkNzJkZmY0OThkODk1NWU5NDhmMzJm
Yjc0NmZmYThlZTJkYjM1NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0
aFV0aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCi0KLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMb29wQmxpbm5N
YXRoVXRpbHMgewotCi1uYW1lc3BhY2UgewotCi0vLyBVdGlsaXR5IGZ1bmN0aW9ucyBsb2NhbCB0
byB0aGlzIGZpbGUuCi1pbnQgb3JpZW50YXRpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsCi0gICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDIsCi0gICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcDMpCi17Ci0gICAgZmxvYXQgY3Jvc3NQcm9kdWN0ID0gKHAyLnkoKSAtIHAx
LnkoKSkgKiAocDMueCgpIC0gcDIueCgpKSAtIChwMy55KCkgLSBwMi55KCkpICogKHAyLngoKSAt
IHAxLngoKSk7Ci0gICAgcmV0dXJuIChjcm9zc1Byb2R1Y3QgPCAwLjBmKSA/IC0xIDogKChjcm9z
c1Byb2R1Y3QgPiAwLjBmKSA/IDEgOiAwKTsKLX0KLQotYm9vbCBlZGdlRWRnZVRlc3QoY29uc3Qg
RmxvYXRTaXplJiB2MERlbHRhLAotICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
djAsCi0gICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB1MCwKLSAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUxKQotewotICAgIC8vIFRoaXMgZWRnZSB0byBlZGdl
IHRlc3QgaXMgYmFzZWQgb24gRnJhbmxpbiBBbnRvbmlvJ3MgZ2VtOiAiRmFzdGVyCi0gICAgLy8g
TGluZSBTZWdtZW50IEludGVyc2VjdGlvbiIsIGluIEdyYXBoaWNzIEdlbXMgSUlJLCBwcC4gMTk5
LTIwMi4KLSAgICBmbG9hdCBheCA9IHYwRGVsdGEud2lkdGgoKTsKLSAgICBmbG9hdCBheSA9IHYw
RGVsdGEuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgYnggPSB1MC54KCkgLSB1MS54KCk7Ci0gICAgZmxv
YXQgYnkgPSB1MC55KCkgLSB1MS55KCk7Ci0gICAgZmxvYXQgY3ggPSB2MC54KCkgLSB1MC54KCk7
Ci0gICAgZmxvYXQgY3kgPSB2MC55KCkgLSB1MC55KCk7Ci0gICAgZmxvYXQgZiA9IGF5ICogYngg
LSBheCAqIGJ5OwotICAgIGZsb2F0IGQgPSBieSAqIGN4IC0gYnggKiBjeTsKLSAgICBpZiAoKGYg
PiAwICYmIGQgPj0gMCAmJiBkIDw9IGYpIHx8IChmIDwgMCAmJiBkIDw9IDAgJiYgZCA+PSBmKSkg
ewotICAgICAgICBmbG9hdCBlID0gYXggKiBjeSAtIGF5ICogY3g7Ci0KLSAgICAgICAgLy8gVGhp
cyBhZGRpdGlvbmFsIHRlc3QgYXZvaWRzIHJlcG9ydGluZyBjb2luY2lkZW50IGVkZ2VzLCB3aGlj
aAotICAgICAgICAvLyBpcyB0aGUgYmVoYXZpb3Igd2Ugd2FudC4KLSAgICAgICAgaWYgKGFwcHJv
eEVxdWFsKGUsIDApIHx8IGFwcHJveEVxdWFsKGYsIDApIHx8IGFwcHJveEVxdWFsKGUsIGYpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmID4gMCkKLSAgICAgICAg
ICAgIHJldHVybiBlID49IDAgJiYgZSA8PSBmOwotCi0gICAgICAgIHJldHVybiBlIDw9IDAgJiYg
ZSA+PSBmOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZWRnZUFnYWluc3RU
cmlhbmdsZUVkZ2VzKGNvbnN0IEZsb2F0UG9pbnQmIHYwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiB1MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgdTIpCi17Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gdjEgLSB2MDsKLSAg
ICAvLyBUZXN0IGVkZ2UgdTAsIHUxIGFnYWluc3QgdjAsIHYxLgotICAgIGlmIChlZGdlRWRnZVRl
c3QoZGVsdGEsIHYwLCB1MCwgdTEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBUZXN0
IGVkZ2UgdTEsIHUyIGFnYWluc3QgdjAsIHYxLgotICAgIGlmIChlZGdlRWRnZVRlc3QoZGVsdGEs
IHYwLCB1MSwgdTIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBUZXN0IGVkZ2UgdTIs
IHUxIGFnYWluc3QgdjAsIHYxLgotICAgIGlmIChlZGdlRWRnZVRlc3QoZGVsdGEsIHYwLCB1Miwg
dTApKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIEEg
cm91bmRvZmYgZmFjdG9yIGluIHRoZSBjdWJpYyBjbGFzc2lmaWNhdGlvbiBhbmQgdGV4dHVyZSBj
b29yZGluYXRlCi0vLyBnZW5lcmF0aW9uIGFsZ29yaXRobXMuIEl0IHByaW1hcmlseSBkZXRlcm1p
bmVzIHRoZSBoYW5kbGluZyBvZiBjb3JuZXIKLS8vIGNhc2VzIGR1cmluZyB0aGUgY2xhc3NpZmlj
YXRpb24gcHJvY2Vzcy4gQmUgY2FyZWZ1bCB3aGVuIGFkanVzdGluZyBpdDsKLS8vIGl0IGhhcyBi
ZWVuIGRldGVybWluZWQgZW1waXJpY2FsbHkgdG8gd29yayB3ZWxsLiBXaGVuIGNoYW5naW5nIGl0
LCB5b3UKLS8vIHNob3VsZCBsb29rIGluIHBhcnRpY3VsYXIgYXQgc2hhcGVzIHRoYXQgY29udGFp
biBxdWFkcmF0aWMgY3VydmVzIGFuZAotLy8gZW5zdXJlIHRoZXkgc3RpbGwgbG9vayBzbW9vdGgu
IE9uY2UgcGl4ZWwgdGVzdHMgYXJlIHJ1bm5pbmcgYWdhaW5zdCB0aGlzCi0vLyBhbGdvcml0aG0s
IHRoZXkgc2hvdWxkIHByb3ZpZGUgc3VmZmljaWVudCBjb3ZlcmFnZSB0byBlbnN1cmUgdGhhdAot
Ly8gYWRqdXN0aW5nIHRoZSBjb25zdGFudCB3b24ndCBicmVhayBhbnl0aGluZy4KLWNvbnN0IGZs
b2F0IEVwc2lsb24gPSA1LjBlLTRmOwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotLy8g
RXhwb3J0ZWQgcm91dGluZXMKLQotZmxvYXQgcm91bmRUb1plcm8oZmxvYXQgdmFsKQotewotICAg
IGlmICh2YWwgPCBFcHNpbG9uICYmIHZhbCA+IC1FcHNpbG9uKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gdmFsOwotfQotCi1ib29sIGFwcHJveEVxdWFsKGNvbnN0IEZsb2F0UG9pbnQm
IHYwLCBjb25zdCBGbG9hdFBvaW50JiB2MSkKLXsKLSAgICByZXR1cm4gKHYwIC0gdjEpLmRpYWdv
bmFsTGVuZ3RoU3F1YXJlZCgpIDwgRXBzaWxvbiAqIEVwc2lsb247Ci19Ci0KLWJvb2wgYXBwcm94
RXF1YWwoY29uc3QgRmxvYXRQb2ludDNEJiB2MCwgY29uc3QgRmxvYXRQb2ludDNEJiB2MSkKLXsK
LSAgICByZXR1cm4gKHYwIC0gdjEpLmxlbmd0aFNxdWFyZWQoKSA8IEVwc2lsb24gKiBFcHNpbG9u
OwotfQotCi1ib29sIGFwcHJveEVxdWFsKGZsb2F0IGYwLCBmbG9hdCBmMSkKLXsKLSAgICByZXR1
cm4gZmFic2YoZjAgLSBmMSkgPCBFcHNpbG9uOwotfQotCi1ib29sIGxpbmVzSW50ZXJzZWN0KGNv
bnN0IEZsb2F0UG9pbnQmIHAxLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBxMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDIsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHEyKQotewotICAgIHJldHVybiAob3JpZW50
YXRpb24ocDEsIHExLCBwMikgIT0gb3JpZW50YXRpb24ocDEsIHExLCBxMikKLSAgICAgICAgICAg
ICYmIG9yaWVudGF0aW9uKHAyLCBxMiwgcDEpICE9IG9yaWVudGF0aW9uKHAyLCBxMiwgcTEpKTsK
LX0KLQotYm9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhLAotICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgYiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGMpCi17Ci0gICAgLy8gQWxnb3JpdGhtIGZyb20gaHR0cDovL3d3dy5ibGFja3Bhd24u
Y29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1bHQuaHRtbAotICAgIGZsb2F0IHgwID0gYy54KCkg
LSBhLngoKTsKLSAgICBmbG9hdCB5MCA9IGMueSgpIC0gYS55KCk7Ci0gICAgZmxvYXQgeDEgPSBi
LngoKSAtIGEueCgpOwotICAgIGZsb2F0IHkxID0gYi55KCkgLSBhLnkoKTsKLSAgICBmbG9hdCB4
MiA9IHBvaW50LngoKSAtIGEueCgpOwotICAgIGZsb2F0IHkyID0gcG9pbnQueSgpIC0gYS55KCk7
Ci0KLSAgICBmbG9hdCBkb3QwMCA9IHgwICogeDAgKyB5MCAqIHkwOwotICAgIGZsb2F0IGRvdDAx
ID0geDAgKiB4MSArIHkwICogeTE7Ci0gICAgZmxvYXQgZG90MDIgPSB4MCAqIHgyICsgeTAgKiB5
MjsKLSAgICBmbG9hdCBkb3QxMSA9IHgxICogeDEgKyB5MSAqIHkxOwotICAgIGZsb2F0IGRvdDEy
ID0geDEgKiB4MiArIHkxICogeTI7Ci0gICAgZmxvYXQgZGVub21pbmF0b3IgPSBkb3QwMCAqIGRv
dDExIC0gZG90MDEgKiBkb3QwMTsKLSAgICBpZiAoIWRlbm9taW5hdG9yKQotICAgICAgICAvLyBU
cmlhbmdsZSBpcyB6ZXJvLWFyZWEuIFRyZWF0IHF1ZXJ5IHBvaW50IGFzIG5vdCBiZWluZyBpbnNp
ZGUuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBDb21wdXRlCi0gICAgZmxvYXQgaW52
ZXJzZURlbm9taW5hdG9yID0gMS4wZiAvIGRlbm9taW5hdG9yOwotICAgIGZsb2F0IHUgPSAoZG90
MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIpICogaW52ZXJzZURlbm9taW5hdG9yOwotICAgIGZs
b2F0IHYgPSAoZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIpICogaW52ZXJzZURlbm9taW5h
dG9yOwotCi0gICAgcmV0dXJuICh1ID4gMC4wZikgJiYgKHYgPiAwLjBmKSAmJiAodSArIHYgPCAx
LjBmKTsKLX0KLQotYm9vbCB0cmlhbmdsZXNPdmVybGFwKGNvbnN0IEZsb2F0UG9pbnQmIGExLAot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIxLAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGEyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGIyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyKQotewot
ICAgIC8vIERlcml2ZWQgZnJvbSBjb3BsYW5hcl90cmlfdHJpKCkgYXQKLSAgICAvLyBodHRwOi8v
amd0LmFrcGV0ZXJzLmNvbS9wYXBlcnMvU2hlbkhlbmdUYW5nMDMvdHJpX3RyaS5odG1sICwKLSAg
ICAvLyBzaW1wbGlmaWVkIGZvciB0aGUgMkQgY2FzZSBhbmQgbW9kaWZpZWQgc28gdGhhdCBvdmVy
bGFwcGluZyBlZGdlcwotICAgIC8vIGRvIG5vdCByZXBvcnQgb3ZlcmxhcHBpbmcgdHJpYW5nbGVz
LgotCi0gICAgLy8gVGVzdCBhbGwgZWRnZXMgb2YgdHJpYW5nbGUgMSBhZ2FpbnN0IHRoZSBlZGdl
cyBvZiB0cmlhbmdsZSAyLgotICAgIGlmIChlZGdlQWdhaW5zdFRyaWFuZ2xlRWRnZXMoYTEsIGIx
LCBhMiwgYjIsIGMyKQotICAgICAgICB8fCBlZGdlQWdhaW5zdFRyaWFuZ2xlRWRnZXMoYjEsIGMx
LCBhMiwgYjIsIGMyKQotICAgICAgICB8fCBlZGdlQWdhaW5zdFRyaWFuZ2xlRWRnZXMoYzEsIGEx
LCBhMiwgYjIsIGMyKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gRmluYWxseSwgdGVz
dCBpZiB0cmkxIGlzIHRvdGFsbHkgY29udGFpbmVkIGluIHRyaTIgb3IgdmljZSB2ZXJzYS4KLSAg
ICAvLyBUaGUgcGFwZXIgYWJvdmUgb25seSBwZXJmb3JtcyB0aGUgZmlyc3QgdHdvIHBvaW50LWlu
LXRyaWFuZ2xlIHRlc3RzLgotICAgIC8vIEJlY2F1c2Ugd2UgZGVmaW5lIHRoYXQgdHJpYW5nbGVz
IHNoYXJpbmcgYSB2ZXJ0ZXggb3IgZWRnZSBkb24ndAotICAgIC8vIG92ZXJsYXAsIHdlIG11c3Qg
cGVyZm9ybSBhZGRpdGlvbmFsIHRlc3RzIHRvIHNlZSB3aGV0aGVyIG9uZQotICAgIC8vIHRyaWFu
Z2xlIGlzIGNvbnRhaW5lZCBpbiB0aGUgb3RoZXIuCi0gICAgaWYgKHBvaW50SW5UcmlhbmdsZShh
MSwgYTIsIGIyLCBjMikKLSAgICAgICAgfHwgcG9pbnRJblRyaWFuZ2xlKGEyLCBhMSwgYjEsIGMx
KQotICAgICAgICB8fCBwb2ludEluVHJpYW5nbGUoYjEsIGEyLCBiMiwgYzIpCi0gICAgICAgIHx8
IHBvaW50SW5UcmlhbmdsZShiMiwgYTEsIGIxLCBjMSkKLSAgICAgICAgfHwgcG9pbnRJblRyaWFu
Z2xlKGMxLCBhMiwgYjIsIGMyKQotICAgICAgICB8fCBwb2ludEluVHJpYW5nbGUoYzIsIGExLCBi
MSwgYzEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLW5h
bWVzcGFjZSB7Ci0KLS8vIEhlbHBlciByb3V0aW5lcyBmb3IgcHVibGljIFhSYXkgcXVlcmllcyBi
ZWxvdy4gQWxsIG9mIHRoaXMgY29kZQotLy8gb3JpZ2luYXRlZCBpbiBTa2lhOyBzZWUgaW5jbHVk
ZS9jb3JlLyBhbmQgc3JjL2NvcmUvLCBTa1NjYWxhci5oIGFuZAotLy8gU2tHZW9tZXRyeS57Y3Bw
LGh9LgotCi1jb25zdCBmbG9hdCBOZWFybHlaZXJvQ29uc3RhbnQgPSAoMS4wZiAvICgxIDw8IDEy
KSk7Ci0KLWJvb2wgbmVhcmx5WmVybyhmbG9hdCB4LCBmbG9hdCB0b2xlcmFuY2UgPSBOZWFybHla
ZXJvQ29uc3RhbnQpCi17Ci0gICAgQVNTRVJUKHRvbGVyYW5jZSA+IDAuMGYpOwotICAgIHJldHVy
biA6OmZhYnNmKHgpIDwgdG9sZXJhbmNlOwotfQotCi0vLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBi
ZXR3ZWVuIGEgYW5kIGIsIGJhc2VkIG9uIHQuCi0vLyBJZiB0IGlzIDAsIHJldHVybiBhOyBpZiB0
IGlzIDEsIHJldHVybiBiOyBlbHNlIGludGVycG9sYXRlLgotLy8gdCBtdXN0IGJlIFswLi4xXS4K
LWZsb2F0IGludGVycG9sYXRlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHQpCi17Ci0gICAgQVNT
RVJUKHQgPj0gMCAmJiB0IDw9IDEpOwotICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHQ7Ci19Ci0K
LWZsb2F0IGV2YWx1YXRlQ3ViaWMoZmxvYXQgY29udHJvbFBvaW50MCwgZmxvYXQgY29udHJvbFBv
aW50MSwgZmxvYXQgY29udHJvbFBvaW50MiwgZmxvYXQgY29udHJvbFBvaW50MywgZmxvYXQgdCkK
LXsKLSAgICBBU1NFUlQodCA+PSAwICYmIHQgPD0gMSk7Ci0KLSAgICBpZiAoIXQpCi0gICAgICAg
IHJldHVybiBjb250cm9sUG9pbnQwOwotCi0gICAgZmxvYXQgYWIgPSBpbnRlcnBvbGF0ZShjb250
cm9sUG9pbnQwLCBjb250cm9sUG9pbnQxLCB0KTsKLSAgICBmbG9hdCBiYyA9IGludGVycG9sYXRl
KGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIHQpOwotICAgIGZsb2F0IGNkID0gaW50ZXJw
b2xhdGUoY29udHJvbFBvaW50MiwgY29udHJvbFBvaW50MywgdCk7Ci0gICAgZmxvYXQgYWJjID0g
aW50ZXJwb2xhdGUoYWIsIGJjLCB0KTsKLSAgICBmbG9hdCBiY2QgPSBpbnRlcnBvbGF0ZShiYywg
Y2QsIHQpOwotICAgIHJldHVybiBpbnRlcnBvbGF0ZShhYmMsIGJjZCwgdCk7Ci19Ci0KLS8vIEV2
YWx1YXRlcyB0aGUgcG9pbnQgb24gdGhlIHNvdXJjZSBjdWJpYyBzcGVjaWZpZWQgYnkgdCwgMCA8
PSB0IDw9IDEuMC4KLUZsb2F0UG9pbnQgZXZhbHVhdGVDdWJpY0F0KGNvbnN0IEZsb2F0UG9pbnQg
Y3ViaWNbNF0sIGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoZXZhbHVhdGVDdWJp
YyhjdWJpY1swXS54KCksIGN1YmljWzFdLngoKSwgY3ViaWNbMl0ueCgpLCBjdWJpY1szXS54KCks
IHQpLAotICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQ3ViaWMoY3ViaWNbMF0ueSgpLCBj
dWJpY1sxXS55KCksIGN1YmljWzJdLnkoKSwgY3ViaWNbM10ueSgpLCB0KSk7Ci19Ci0KLWJvb2wg
eFJheUNyb3NzZXNNb25vdG9uaWNDdWJpYyhjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBv
aW50IGN1YmljWzRdLCBib29sJiBhbWJpZ3VvdXMpCi17Ci0gICAgYW1iaWd1b3VzID0gZmFsc2U7
Ci0KLSAgICAvLyBGaW5kIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHkgb2YgdGhlIGV4dHJlbWEs
IHdoaWNoIGFyZSB0aGUKLSAgICAvLyBmaXJzdCBhbmQgbGFzdCBwb2ludHMgc2luY2UgdGhpcyBj
dWJpYyBpcyBtb25vdG9uaWMKLSAgICBmbG9hdCBtaW5ZID0gc3RkOjptaW4oY3ViaWNbMF0ueSgp
LCBjdWJpY1szXS55KCkpOwotICAgIGZsb2F0IG1heFkgPSBzdGQ6Om1heChjdWJpY1swXS55KCks
IGN1YmljWzNdLnkoKSk7Ci0KLSAgICBpZiAoeFJheS55KCkgPT0gY3ViaWNbMF0ueSgpCi0gICAg
ICAgIHx8IHhSYXkueSgpIDwgbWluWQotICAgICAgICB8fCB4UmF5LnkoKSA+IG1heFkpIHsKLSAg
ICAgICAgLy8gVGhlIHF1ZXJ5IGxpbmUgZGVmaW5pdGVseSBkb2VzIG5vdCBjcm9zcyB0aGUgY3Vy
dmUKLSAgICAgICAgYW1iaWd1b3VzID0gKHhSYXkueSgpID09IGN1YmljWzBdLnkoKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBib29sIHBvaW50QXRFeHRyZW11
bSA9ICh4UmF5LnkoKSA9PSBjdWJpY1szXS55KCkpOwotCi0gICAgZmxvYXQgbWluWCA9IHN0ZDo6
bWluKHN0ZDo6bWluKHN0ZDo6bWluKGN1YmljWzBdLngoKSwgY3ViaWNbMV0ueCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViaWNbMl0ueCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3ViaWNbM10ueCgpKTsKLSAgICBpZiAoeFJheS54KCkgPCBtaW5YKSB7
Ci0gICAgICAgIC8vIFRoZSBxdWVyeSBsaW5lIGRlZmluaXRlbHkgY3Jvc3NlcyB0aGUgY3VydmUK
LSAgICAgICAgYW1iaWd1b3VzID0gcG9pbnRBdEV4dHJlbXVtOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBmbG9hdCBtYXhYID0gc3RkOjptYXgoc3RkOjptYXgoc3RkOjptYXgo
Y3ViaWNbMF0ueCgpLCBjdWJpY1sxXS54KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdWJpY1syXS54KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJpY1sz
XS54KCkpOwotICAgIGlmICh4UmF5LngoKSA+IG1heFgpCi0gICAgICAgIC8vIFRoZSBxdWVyeSBs
aW5lIGRlZmluaXRlbHkgZG9lcyBub3QgY3Jvc3MgdGhlIGN1cnZlCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBwYXJhbWV0ZXIg
dmFsdWUgd2hpY2ggbWFrZXMgeSBhcwotICAgIC8vIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBx
dWVyeSBwb2ludC4gU2VlIHdoZXRoZXIgdGhlIHF1ZXJ5Ci0gICAgLy8gbGluZSdzIG9yaWdpbiBp
cyB0byB0aGUgbGVmdCBvZiB0aGUgYXNzb2NpYXRlZCB4IGNvb3JkaW5hdGUuCi0KLSAgICAvLyBN
YXhJdGVyYXRpb25zIGlzIGNob3NlbiBhcyB0aGUgbnVtYmVyIG9mIG1hbnRpc3NhIGJpdHMgZm9y
IGEgZmxvYXQsCi0gICAgLy8gc2luY2UgdGhlcmUncyBubyB3YXkgd2UgYXJlIGdvaW5nIHRvIGdl
dCBtb3JlIHByZWNpc2lvbiBieQotICAgIC8vIGl0ZXJhdGluZyBtb3JlIHRpbWVzIHRoYW4gdGhh
dC4KLSAgICBjb25zdCBpbnQgTWF4SXRlcmF0aW9ucyA9IDIzOwotICAgIEZsb2F0UG9pbnQgZXZh
bHVhdGVkUG9pbnQ7Ci0gICAgaW50IGl0ZXIgPSAwOwotICAgIGZsb2F0IHVwcGVyVDsKLSAgICBm
bG9hdCBsb3dlclQ7Ci0gICAgLy8gTmVlZCB0byBpbnZlcnQgZGlyZWN0aW9uIG9mIHQgcGFyYW1l
dGVyIGlmIGN1YmljIGdvZXMgdXAKLSAgICAvLyBpbnN0ZWFkIG9mIGRvd24KLSAgICBpZiAoY3Vi
aWNbM10ueSgpID4gY3ViaWNbMF0ueSgpKSB7Ci0gICAgICAgIHVwcGVyVCA9IDE7Ci0gICAgICAg
IGxvd2VyVCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdXBwZXJUID0gMDsKLSAgICAgICAg
bG93ZXJUID0gMTsKLSAgICB9Ci0gICAgZG8gewotICAgICAgICBmbG9hdCB0ID0gMC41ZiAqICh1
cHBlclQgKyBsb3dlclQpOwotICAgICAgICBldmFsdWF0ZWRQb2ludCA9IGV2YWx1YXRlQ3ViaWNB
dChjdWJpYywgdCk7Ci0gICAgICAgIGlmICh4UmF5LnkoKSA+IGV2YWx1YXRlZFBvaW50LnkoKSkK
LSAgICAgICAgICAgIGxvd2VyVCA9IHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwcGVy
VCA9IHQ7Ci0gICAgfSB3aGlsZSAoKytpdGVyIDwgTWF4SXRlcmF0aW9ucyAmJiAhbmVhcmx5WmVy
byhldmFsdWF0ZWRQb2ludC55KCkgLSB4UmF5LnkoKSkpOwotCi0gICAgLy8gRklYTUU6IG9uY2Ug
d2UgaGF2ZSBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoaXMgY29kZSwKLSAgICAvLyBkZXRl
cm1pbmUgd2hldGhlciB0aGlzIHNob3VsZCBiZSB1c2luZyBhIGZ1enp5IHRlc3QuCi0gICAgaWYg
KHhSYXkueCgpIDw9IGV2YWx1YXRlZFBvaW50LngoKSkgewotICAgICAgICBhbWJpZ3VvdXMgPSBw
b2ludEF0RXh0cmVtdW07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8vIERpdmlkZXMgdGhlIG51bWVyYXRvciBieSB0aGUgZGVub21pbmF0b3Ig
c2FmZWx5IGZvciB0aGUgY2FzZSB3aGVyZQotLy8gdGhlIHJlc3VsdCBtdXN0IGxpZSBpbiB0aGUg
cmFuZ2UgKDAuLjEpLiBSZXN1bHQgaW5kaWNhdGVzIHdoZXRoZXIKLS8vIHRoZSByZXN1bHQgaXMg
dmFsaWQuCi1ib29sIHNhZmVVbml0RGl2aWRlKGZsb2F0IG51bWVyYXRvciwgZmxvYXQgZGVub21p
bmF0b3IsIGZsb2F0JiByYXRpbykKLXsKLSAgICBpZiAobnVtZXJhdG9yIDwgMCkgewotICAgICAg
ICAvLyBNYWtlIHRoZSAibnVtZXJhdG9yID49IGRlbm9taW5hdG9yIiBjaGVjayBiZWxvdyB3b3Jr
LgotICAgICAgICBudW1lcmF0b3IgPSAtbnVtZXJhdG9yOwotICAgICAgICBkZW5vbWluYXRvciA9
IC1kZW5vbWluYXRvcjsKLSAgICB9Ci0gICAgaWYgKCFudW1lcmF0b3IgfHwgIWRlbm9taW5hdG9y
IHx8IG51bWVyYXRvciA+PSBkZW5vbWluYXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGZsb2F0IHIgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKLSAgICBpZiAoc3RkOjppc25hbihy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChyID49IDAgJiYgciA8IDEpOwot
ICAgIGlmICghcikgLy8gY2F0Y2ggdW5kZXJmbG93IGlmIG51bWVyYXRvciA8PDw8IGRlbm9taW5h
dG9yCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByYXRpbyA9IHI7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIEZyb20gTnVtZXJpY2FsIFJlY2lwZXMgaW4gQy4KLS8vCi0vLyAgIHEgPSAt
MS8yIChiICsgc2lnbihiKSBzcXJ0W2IqYiAtIDQqYSpjXSkKLS8vICAgeDEgPSBxIC8gYQotLy8g
ICB4MiA9IGMgLyBxCi0vLwotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlYWwgcm9vdHMgb2Yg
dGhlIGVxdWF0aW9uIFswLi4yXS4gUm9vdHMgYXJlCi0vLyByZXR1cm5lZCBpbiBzb3J0ZWQgb3Jk
ZXIsIHNtYWxsZXIgcm9vdCBmaXJzdC4KLWludCBmaW5kVW5pdFF1YWRSb290cyhmbG9hdCBhLCBm
bG9hdCBiLCBmbG9hdCBjLCBmbG9hdCByb290c1syXSkKLXsKLSAgICBpZiAoIWEpCi0gICAgICAg
IHJldHVybiBzYWZlVW5pdERpdmlkZSgtYywgYiwgcm9vdHNbMF0pID8gMSA6IDA7Ci0KLSAgICBm
bG9hdCBkaXNjcmltaW5hbnQgPSBiKmIgLSA0KmEqYzsKLSAgICBpZiAoZGlzY3JpbWluYW50IDwg
MCB8fCBzdGQ6OmlzbmFuKGRpc2NyaW1pbmFudCkpIC8vIGNvbXBsZXggcm9vdHMKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgZGlzY3JpbWluYW50ID0gc3FydGYoZGlzY3JpbWluYW50KTsKLQotICAg
IGZsb2F0IHEgPSAoYiA8IDApID8gLShiIC0gZGlzY3JpbWluYW50KSAvIDIgOiAtKGIgKyBkaXNj
cmltaW5hbnQpIC8gMjsKLSAgICBpbnQgbnVtYmVyT2ZSb290cyA9IDA7Ci0gICAgaWYgKHNhZmVV
bml0RGl2aWRlKHEsIGEsIHJvb3RzW251bWJlck9mUm9vdHNdKSkKLSAgICAgICAgKytudW1iZXJP
ZlJvb3RzOwotICAgIGlmIChzYWZlVW5pdERpdmlkZShjLCBxLCByb290c1tudW1iZXJPZlJvb3Rz
XSkpCi0gICAgICAgICsrbnVtYmVyT2ZSb290czsKLSAgICBpZiAobnVtYmVyT2ZSb290cyA9PSAy
KSB7Ci0gICAgICAgIC8vIFNlZW1pbmdseSBoYXZlIHR3byByb290cy4gQ2hlY2sgZm9yIGVxdWFs
aXR5IGFuZCBzb3J0LgotICAgICAgICBpZiAocm9vdHNbMF0gPT0gcm9vdHNbMV0pCi0gICAgICAg
ICAgICByZXR1cm4gMTsKLSAgICAgICAgaWYgKHJvb3RzWzBdID4gcm9vdHNbMV0pCi0gICAgICAg
ICAgICBzdGQ6OnN3YXAocm9vdHNbMF0sIHJvb3RzWzFdKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51
bWJlck9mUm9vdHM7Ci19Ci0KLS8vIEN1YmljJyh0KSA9IHB0XjIgKyBxdCArIHIsIHdoZXJlCi0v
LyAgIHAgPSAzKC1hICsgMyhiIC0gYykgKyBkKQotLy8gICBxID0gNihhIC0gMmIgKyBjKQotLy8g
ICByID0gMyhiIC0gYSkKLS8vIFNvbHZlIGZvciB0LCBrZWVwaW5nIG9ubHkgdGhvc2UgdGhhdCBm
aXQgYmV0d2VlbiAwIDwgdCA8IDEuCi1pbnQgZmluZEN1YmljRXh0cmVtYShmbG9hdCBhLCBmbG9h
dCBiLCBmbG9hdCBjLCBmbG9hdCBkLCBmbG9hdCB0VmFsdWVzWzJdKQotewotICAgIC8vIERpdmlk
ZSBwLCBxLCBhbmQgciBieSAzIHRvIHNpbXBsaWZ5IHRoZSBlcXVhdGlvbnMuCi0gICAgZmxvYXQg
cCA9IGQgLSBhICsgMyooYiAtIGMpOwotICAgIGZsb2F0IHEgPSAyKihhIC0gYiAtIGIgKyBjKTsK
LSAgICBmbG9hdCByID0gYiAtIGE7Ci0KLSAgICByZXR1cm4gZmluZFVuaXRRdWFkUm9vdHMocCwg
cSwgciwgdFZhbHVlcyk7Ci19Ci0KLXZvaWQgaW50ZXJwb2xhdGVDdWJpY0Nvb3JkcyhmbG9hdCBj
b250cm9sUG9pbnQwLCBmbG9hdCBjb250cm9sUG9pbnQxLCBmbG9hdCBjb250cm9sUG9pbnQyLCBm
bG9hdCBjb250cm9sUG9pbnQzLCBmbG9hdCogZHN0LCBmbG9hdCB0KQotewotICAgIGZsb2F0IGFi
ID0gaW50ZXJwb2xhdGUoY29udHJvbFBvaW50MCwgY29udHJvbFBvaW50MSwgdCk7Ci0gICAgZmxv
YXQgYmMgPSBpbnRlcnBvbGF0ZShjb250cm9sUG9pbnQxLCBjb250cm9sUG9pbnQyLCB0KTsKLSAg
ICBmbG9hdCBjZCA9IGludGVycG9sYXRlKGNvbnRyb2xQb2ludDIsIGNvbnRyb2xQb2ludDMsIHQp
OwotICAgIGZsb2F0IGFiYyA9IGludGVycG9sYXRlKGFiLCBiYywgdCk7Ci0gICAgZmxvYXQgYmNk
ID0gaW50ZXJwb2xhdGUoYmMsIGNkLCB0KTsKLSAgICBmbG9hdCBhYmNkID0gaW50ZXJwb2xhdGUo
YWJjLCBiY2QsIHQpOwotCi0gICAgZHN0WzBdID0gY29udHJvbFBvaW50MDsKLSAgICBkc3RbMl0g
PSBhYjsKLSAgICBkc3RbNF0gPSBhYmM7Ci0gICAgZHN0WzZdID0gYWJjZDsKLSAgICBkc3RbOF0g
PSBiY2Q7Ci0gICAgZHN0WzEwXSA9IGNkOwotICAgIGRzdFsxMl0gPSBjb250cm9sUG9pbnQzOwot
fQotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBpc1VuaXRJbnRlcnZhbChmbG9hdCB4KQotewotICAg
IHJldHVybiB4ID4gMCAmJiB4IDwgMTsKLX0KLSNlbmRpZgotCi12b2lkIGNob3BDdWJpY0F0VFZh
bHVlcyhjb25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBkc3RbXSwgY29uc3QgZmxv
YXQgdFZhbHVlc1tdLCBpbnQgcm9vdHMpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcm9vdHMgLSAxOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKGlzVW5pdEludGVy
dmFsKHRWYWx1ZXNbaV0pKTsKLSAgICAgICAgQVNTRVJUKGlzVW5pdEludGVydmFsKHRWYWx1ZXNb
aSsxXSkpOwotICAgICAgICBBU1NFUlQodFZhbHVlc1tpXSA8IHRWYWx1ZXNbaSsxXSk7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpZiAoIXJvb3RzKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gY2hv
cAotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKLSAgICAgICAgICAgIGRzdFtq
XSA9IHNyY1tqXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsb2F0IHQgPSB0VmFs
dWVzWzBdOwotICAgIEZsb2F0UG9pbnQgdG1wWzRdOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwg
NDsgKytqKQotICAgICAgICB0bXBbal0gPSBzcmNbal07Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJvb3RzOyArK2kpIHsKLSAgICAgICAgY2hvcEN1YmljQXQodG1wLCBkc3QsIHQpOwotICAg
ICAgICBpZiAoaSA9PSByb290cyAtIDEpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBk
c3QgKz0gMzsKLSAgICAgICAgLy8gTWFrZSB0bXAgY29udGFpbiB0aGUgcmVtYWluaW5nIGN1Ymlj
IChhZnRlciB0aGUgZmlyc3QgY2hvcCkuCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsg
KytqKQotICAgICAgICAgICAgdG1wW2pdID0gZHN0W2pdOwotCi0gICAgICAgIC8vIFdhdGNoIG91
dCBmb3IgdGhlIGNhc2UgdGhhdCB0aGUgcmVub3JtYWxpemVkIHQgaXNuJ3QgaW4gcmFuZ2UuCi0g
ICAgICAgIGlmICghc2FmZVVuaXREaXZpZGUodFZhbHVlc1tpKzFdIC0gdFZhbHVlc1tpXSwgMS4w
ZiAtIHRWYWx1ZXNbaV0sIHQpKSB7Ci0gICAgICAgICAgICAvLyBJZiBpdCBpc24ndCwganVzdCBj
cmVhdGUgYSBkZWdlbmVyYXRlIGN1YmljLgotICAgICAgICAgICAgZHN0WzRdID0gZHN0WzVdID0g
ZHN0WzZdID0gdG1wWzNdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgZmxhdHRlbkRvdWJsZUN1YmljWUV4dHJlbWEoRmxvYXRQb2ludCBjb29yZHNbN10p
Ci17Ci0gICAgY29vcmRzWzJdLnNldFkoY29vcmRzWzNdLnkoKSk7Ci0gICAgY29vcmRzWzRdLnNl
dFkoY29vcmRzWzNdLnkoKSk7Ci19Ci0KLWludCBjaG9wQ3ViaWNBdFlFeHRyZW1hKGNvbnN0IEZs
b2F0UG9pbnQgc3JjWzRdLCBGbG9hdFBvaW50IGRzdFsxMF0pCi17Ci0gICAgZmxvYXQgdFZhbHVl
c1syXTsKLSAgICBpbnQgcm9vdHMgPSBmaW5kQ3ViaWNFeHRyZW1hKHNyY1swXS55KCksIHNyY1sx
XS55KCksIHNyY1syXS55KCksIHNyY1szXS55KCksIHRWYWx1ZXMpOwotCi0gICAgY2hvcEN1Ymlj
QXRUVmFsdWVzKHNyYywgZHN0LCB0VmFsdWVzLCByb290cyk7Ci0gICAgaWYgKHJvb3RzKSB7Ci0g
ICAgICAgIC8vIHdlIGRvIHNvbWUgY2xlYW51cCB0byBlbnN1cmUgb3VyIFkgZXh0cmVtYSBhcmUg
ZmxhdAotICAgICAgICBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVtYSgmZHN0WzBdKTsKLSAgICAg
ICAgaWYgKHJvb3RzID09IDIpCi0gICAgICAgICAgICBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVt
YSgmZHN0WzNdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJvb3RzOwotfQotCi19IC8vIGFub255bW91
cyBuYW1lc3BhY2UKLQotLy8gUHVibGljIGN1YmljIG9wZXJhdGlvbnMuCi0KLXZvaWQgY2hvcEN1
YmljQXQoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzddLCBmbG9hdCB0
KQotewotICAgIEFTU0VSVCh0ID49IDAgJiYgdCA8PSAxKTsKLQotICAgIGZsb2F0IG91dHB1dFsx
NF07Ci0gICAgaW50ZXJwb2xhdGVDdWJpY0Nvb3JkcyhzcmNbMF0ueCgpLCBzcmNbMV0ueCgpLCBz
cmNbMl0ueCgpLCBzcmNbM10ueCgpLCAmb3V0cHV0WzBdLCB0KTsKLSAgICBpbnRlcnBvbGF0ZUN1
YmljQ29vcmRzKHNyY1swXS55KCksIHNyY1sxXS55KCksIHNyY1syXS55KCksIHNyY1szXS55KCks
ICZvdXRwdXRbMV0sIHQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzsgaSsrKQotICAgICAg
ICBkc3RbaV0uc2V0KG91dHB1dFsyICogaV0sIG91dHB1dFsyICogaSArIDFdKTsKLX0KLQotLy8g
UHVibGljIFhSYXkgcXVlcmllcy4KLQotYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUoY29uc3QgWFJheSYg
eFJheSwgY29uc3QgRmxvYXRQb2ludCBwdHNbMl0sIGJvb2wmIGFtYmlndW91cykKLXsKLSAgICBh
bWJpZ3VvdXMgPSBmYWxzZTsKLQotICAgIC8vIERldGVybWluZSBxdWljayBkaXNjYXJkcy4KLSAg
ICAvLyBDb25zaWRlciBxdWVyeSBsaW5lIGdvaW5nIGV4YWN0bHkgdGhyb3VnaCBwb2ludCAwIHRv
IG5vdAotICAgIC8vIGludGVyc2VjdCwgZm9yIHN5bW1ldHJ5IHdpdGggeFJheUNyb3NzZXNNb25v
dG9uaWNDdWJpYy4KLSAgICBpZiAoeFJheS55KCkgPT0gcHRzWzBdLnkoKSkgewotICAgICAgICBh
bWJpZ3VvdXMgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh4
UmF5LnkoKSA8IHB0c1swXS55KCkgJiYgeFJheS55KCkgPCBwdHNbMV0ueSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHhSYXkueSgpID4gcHRzWzBdLnkoKSAmJiB4UmF5LnkoKSA+
IHB0c1sxXS55KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeFJheS54KCkgPiBw
dHNbMF0ueCgpICYmIHhSYXkueCgpID4gcHRzWzFdLngoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIC8vIERldGVybWluZSBkZWdlbmVyYXRlIGNhc2VzCi0gICAgaWYgKG5lYXJseVplcm8o
cHRzWzBdLnkoKSAtIHB0c1sxXS55KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG5lYXJseVplcm8ocHRzWzBdLngoKSAtIHB0c1sxXS54KCkpKSB7Ci0gICAgICAgIC8vIFdlJ3Zl
IGFscmVhZHkgZGV0ZXJtaW5lZCB0aGUgcXVlcnkgcG9pbnQgbGllcyB3aXRoaW4gdGhlCi0gICAg
ICAgIC8vIHZlcnRpY2FsIHJhbmdlIG9mIHRoZSBsaW5lIHNlZ21lbnQuCi0gICAgICAgIGlmICh4
UmF5LngoKSA8PSBwdHNbMF0ueCgpKSB7Ci0gICAgICAgICAgICBhbWJpZ3VvdXMgPSAoeFJheS55
KCkgPT0gcHRzWzFdLnkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIEFtYmlndWl0eSBjaGVjawotICAg
IGlmICh4UmF5LnkoKSA9PSBwdHNbMV0ueSgpKSB7Ci0gICAgICAgIGlmICh4UmF5LngoKSA8PSBw
dHNbMV0ueCgpKSB7Ci0gICAgICAgICAgICBhbWJpZ3VvdXMgPSB0cnVlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAvLyBGdWxsIGxpbmUgc2VnbWVudCBldmFsdWF0aW9uCi0gICAgZmxvYXQgZGVsdGFZID0gcHRz
WzFdLnkoKSAtIHB0c1swXS55KCk7Ci0gICAgZmxvYXQgZGVsdGFYID0gcHRzWzFdLngoKSAtIHB0
c1swXS54KCk7Ci0gICAgZmxvYXQgc2xvcGUgPSBkZWx0YVkgLyBkZWx0YVg7Ci0gICAgZmxvYXQg
YiA9IHB0c1swXS55KCkgLSBzbG9wZSAqIHB0c1swXS54KCk7Ci0gICAgLy8gU29sdmUgZm9yIHgg
Y29vcmRpbmF0ZSBhdCB5ID0geFJheS55KCkKLSAgICBmbG9hdCB4ID0gKHhSYXkueSgpIC0gYikg
LyBzbG9wZTsKLSAgICByZXR1cm4geFJheS54KCkgPD0geDsKLX0KLQotaW50IG51bVhSYXlDcm9z
c2luZ3NGb3JDdWJpYyhjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBvaW50IGN1YmljWzRd
LCBib29sJiBhbWJpZ3VvdXMpCi17Ci0gICAgaW50IG51bUNyb3NzaW5ncyA9IDA7Ci0gICAgRmxv
YXRQb2ludCBtb25vdG9uaWNDdWJpY3NbMTBdOwotICAgIGludCBudW1Nb25vdG9uaWNDdWJpY3Mg
PSAxICsgY2hvcEN1YmljQXRZRXh0cmVtYShjdWJpYywgbW9ub3RvbmljQ3ViaWNzKTsKLSAgICBh
bWJpZ3VvdXMgPSBmYWxzZTsKLSAgICBGbG9hdFBvaW50KiBtb25vdG9uaWNDdWJpY3NQb2ludGVy
ID0gJm1vbm90b25pY0N1Ymljc1swXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU1vbm90
b25pY0N1YmljczsgKytpKSB7Ci0gICAgICAgIGlmICh4UmF5Q3Jvc3Nlc01vbm90b25pY0N1Ymlj
KHhSYXksIG1vbm90b25pY0N1Ymljc1BvaW50ZXIsIGFtYmlndW91cykpCi0gICAgICAgICAgICAr
K251bUNyb3NzaW5nczsKLSAgICAgICAgaWYgKGFtYmlndW91cykKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBtb25vdG9uaWNDdWJpY3NQb2ludGVyICs9IDM7Ci0gICAgfQotICAgIHJl
dHVybiBudW1Dcm9zc2luZ3M7Ci19Ci0KLS8qCi0gKiBCYXNlZCBvbiBDIGNvZGUgZnJvbSB0aGUg
YXJ0aWNsZQotICogIlRlc3RpbmcgdGhlIENvbnZleGl0eSBvZiBhIFBvbHlnb24iCi0gKiBieSBQ
ZXRlciBTY2hvcm4gYW5kIEZyZWRlcmljayBGaXNoZXIsCi0gKiAoc2Nob3JuQGluZi5ldGh6LmNo
LCBmcmVkQGtwYy5jb20pCi0gKiBpbiAiR3JhcGhpY3MgR2VtcyBJViIsIEFjYWRlbWljIFByZXNz
LCAxOTk0Ci0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgY29udmV4Q29tcGFyZShjb25zdCBGbG9h
dFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiAoZGVsdGEud2lkdGgoKSA+IDApID8gLTEgOiAv
KiB4IGNvb3JkIGRpZmYsIHNlY29uZCBwdCA+IGZpcnN0IHB0ICovCi0gICAgICAgICAgIChkZWx0
YS53aWR0aCgpIDwgMCkgPyAgMSA6IC8qIHggY29vcmQgZGlmZiwgc2Vjb25kIHB0IDwgZmlyc3Qg
cHQgKi8KLSAgICAgICAgICAgKGRlbHRhLmhlaWdodCgpID4gMCkgPyAtMSA6IC8qIHggY29vcmQg
c2FtZSwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KLSAgICAgICAgICAgKGRlbHRhLmhlaWdodCgp
IDwgMCkgPyAgMSA6IC8qIHggY29vcmQgc2FtZSwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KLSAg
ICAgICAgICAgMDsgLyogc2Vjb25kIHB0IGVxdWFscyBmaXJzdCBwb2ludCAqLwotfQotCi1zdGF0
aWMgaW5saW5lIGZsb2F0IGNvbnZleENyb3NzKGNvbnN0IEZsb2F0U2l6ZSYgcCwgY29uc3QgRmxv
YXRTaXplJiBxKQotewotICAgIHJldHVybiBwLndpZHRoKCkgKiBxLmhlaWdodCgpIC0gcC5oZWln
aHQoKSAqIHEud2lkdGgoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbnZleENoZWNrVHJp
cGxlKGNvbnN0IEZsb2F0U2l6ZSYgZGN1ciwgY29uc3QgRmxvYXRTaXplJiBkcHJldiwgaW50KiBj
dXJEaXIsIGludCogZGlyQ2hhbmdlcywgaW50KiBhbmdsZVNpZ24pCi17Ci0gICAgaW50IHRoaXNE
aXIgPSBjb252ZXhDb21wYXJlKGRjdXIpOwotICAgIGlmICh0aGlzRGlyID09IC0qY3VyRGlyKQot
ICAgICAgICArKypkaXJDaGFuZ2VzOwotICAgICpjdXJEaXIgPSB0aGlzRGlyOwotICAgIGZsb2F0
IGNyb3NzID0gY29udmV4Q3Jvc3MoZHByZXYsIGRjdXIpOwotICAgIGlmIChjcm9zcyA+IDApIHsK
LSAgICAgICAgaWYgKCphbmdsZVNpZ24gPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICphbmdsZVNpZ24gPSAxOwotICAgIH0gZWxzZSBpZiAoY3Jvc3MgPCAwKSB7Ci0g
ICAgICAgIGlmICgqYW5nbGVTaWduID09IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICphbmdsZVNpZ24gPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgaXNDb252ZXgoY29uc3QgRmxvYXRQb2ludCogdmVydGljZXMsIGludCBuVmVydGljZXMpCi17
Ci0gICAgaW50IGRpckNoYW5nZXMgPSAwLCBhbmdsZVNpZ24gPSAwOwotICAgIEZsb2F0UG9pbnQg
c2Vjb25kLCB0aGlyZDsKLSAgICBGbG9hdFNpemUgZHByZXYsIGRjdXI7Ci0KLSAgICAvKiBHZXQg
ZGlmZmVyZW50IHBvaW50LCByZXR1cm4gaWYgbGVzcyB0aGFuIDMgZGlmZiBwb2ludHMuICovCi0g
ICAgaWYgKG5WZXJ0aWNlcyA8IDMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgaSA9
IDE7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgc2Vjb25kID0gdmVydGljZXNbaSsrXTsK
LSAgICAgICAgZHByZXYgPSBzZWNvbmQgLSB2ZXJ0aWNlc1swXTsKLSAgICAgICAgaWYgKGRwcmV2
LndpZHRoKCkgfHwgZHByZXYuaGVpZ2h0KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
LyogQ2hlY2sgaWYgb3V0IG9mIHBvaW50cy4gQ2hlY2sgaGVyZSB0byBhdm9pZCBzbG93aW5nIGRv
d24gY2FzZXMKLSAgICAgICAgICogd2l0aG91dCByZXBlYXRlZCBwb2ludHMuCi0gICAgICAgICAq
LwotICAgICAgICBpZiAoaSA+PSBuVmVydGljZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIEZsb2F0UG9pbnQgc2F2ZVNlY29uZCA9IHNlY29uZDsKLSAgICBpbnQgY3Vy
RGlyID0gY29udmV4Q29tcGFyZShkcHJldik7ICAgICAgICAvKiBGaW5kIGluaXRpYWwgZGlyZWN0
aW9uICovCi0gICAgd2hpbGUgKGkgPCBuVmVydGljZXMpIHsKLSAgICAgICAgLyogR2V0IGRpZmZl
cmVudCBwb2ludCwgYnJlYWsgaWYgbm8gbW9yZSBwb2ludHMgKi8KLSAgICAgICAgdGhpcmQgPSB2
ZXJ0aWNlc1tpKytdOwotICAgICAgICBkY3VyID0gdGhpcmQgLSBzZWNvbmQ7Ci0gICAgICAgIGlm
ICghZGN1ci53aWR0aCgpICYmICFkY3VyLmhlaWdodCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLyogQ2hlY2sgY3VycmVudCB0aHJlZSBwb2ludHMgKi8KLSAgICAgICAgaWYg
KCFjb252ZXhDaGVja1RyaXBsZShkY3VyLCBkcHJldiwgJmN1ckRpciwgJmRpckNoYW5nZXMsICZh
bmdsZVNpZ24pKSAKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc2Vjb25kID0g
dGhpcmQ7ICAgICAvKiBSZW1lbWJlciBwdHIgdG8gY3VycmVudCBwb2ludC4gKi8KLSAgICAgICAg
ZHByZXYgPSBkY3VyOyAgICAgICAvKiBSZW1lbWJlciBjdXJyZW50IGRlbHRhLiAqLwotICAgIH0K
LQotICAgIC8qIE11c3QgY2hlY2sgZm9yIGRpcmVjdGlvbiBjaGFuZ2VzIGZyb20gbGFzdCB2ZXJ0
ZXggYmFjayB0byBmaXJzdCAqLwotICAgIHRoaXJkID0gdmVydGljZXNbMF07ICAgICAgICAgICAg
ICAgICAgLyogUHJlcGFyZSBmb3IgJ0NvbnZleENoZWNrVHJpcGxlJyAqLwotICAgIGRjdXIgPSB0
aGlyZCAtIHNlY29uZDsKLSAgICBpZiAoY29udmV4Q29tcGFyZShkY3VyKSkgewotICAgICAgICBp
ZiAoIWNvbnZleENoZWNrVHJpcGxlKGRjdXIsIGRwcmV2LCAmY3VyRGlyLCAmZGlyQ2hhbmdlcywg
JmFuZ2xlU2lnbikpIAotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzZWNvbmQg
PSB0aGlyZDsgICAgIC8qIFJlbWVtYmVyIHB0ciB0byBjdXJyZW50IHBvaW50LiAqLwotICAgICAg
ICBkcHJldiA9IGRjdXI7ICAgICAgIC8qIFJlbWVtYmVyIGN1cnJlbnQgZGVsdGEuICovCi0gICAg
fQotCi0gICAgLyogYW5kIGNoZWNrIGZvciBkaXJlY3Rpb24gY2hhbmdlcyBiYWNrIHRvIHNlY29u
ZCB2ZXJ0ZXggKi8KLSAgICBkY3VyID0gc2F2ZVNlY29uZCAtIHNlY29uZDsKLSAgICBpZiAoIWNv
bnZleENoZWNrVHJpcGxlKGRjdXIsIGRwcmV2LCAmY3VyRGlyLCAmZGlyQ2hhbmdlcywgJmFuZ2xl
U2lnbikpIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvKiBEZWNpZGUgb24gcG9seWdv
biB0eXBlIGdpdmVuIGFjY3VtdWxhdGVkIHN0YXR1cyAqLwotICAgIGlmIChkaXJDaGFuZ2VzID4g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFuZ2xlU2lnbiA+IDAgfHwgYW5n
bGVTaWduIDwgMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBMb29wQmxpbm5NYXRoVXRpbHMKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5NYXRoVXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5NYXRoVXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxZDkw
MTM0MTRlZDliYTU1OWVjMDdiZGIyN2U0NWIxOTE3Nzg4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTG9vcEJsaW5uTWF0aFV0aWxzX2gKLSNkZWZpbmUgTG9vcEJsaW5u
TWF0aFV0aWxzX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
VXNlIGEgbmFtZXNwYWNlIGZvciB0aGVzZSBzbyB3ZSBjYW4gZWFzaWx5IGltcG9ydCB0aGVtLgot
bmFtZXNwYWNlIExvb3BCbGlubk1hdGhVdGlscyB7Ci0KLWZsb2F0IHJvdW5kVG9aZXJvKGZsb2F0
IHZhbCk7Ci1ib29sIGFwcHJveEVxdWFsKGNvbnN0IEZsb2F0UG9pbnQmIHYwLCBjb25zdCBGbG9h
dFBvaW50JiB2MSk7Ci1ib29sIGFwcHJveEVxdWFsKGNvbnN0IEZsb2F0UG9pbnQzRCYgdjAsIGNv
bnN0IEZsb2F0UG9pbnQzRCYgdjEpOwotYm9vbCBhcHByb3hFcXVhbChmbG9hdCBmMCwgZmxvYXQg
ZjEpOwotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGxpbmUgc2VnbWVudCBiZXR3ZWVuIChw
MSwgcTEpIGludGVyc2VjdHMKLS8vIHRoYXQgYmV0d2VlbiAocDIsIHEyKS4KLWJvb2wgbGluZXNJ
bnRlcnNlY3QoY29uc3QgRmxvYXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHExLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
MiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpOwotCi0vLyBEZXRl
cm1pbmVzIHdoZXRoZXIgInBvaW50IiBpcyBpbnNpZGUgdGhlIDJEIHRyaWFuZ2xlIGRlZmluZWQg
YnkKLS8vIHZlcnRpY2VzIGEsIGIsIGFuZCBjLiBUaGlzIHRlc3QgZGVmaW5lcyB0aGF0IHBvaW50
cyBleGFjdGx5IG9uIGFuCi0vLyBlZGdlIGFyZSBub3QgY29uc2lkZXJlZCB0byBiZSBpbnNpZGUg
dGhlIHRyaWFuZ2xlLgotYm9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYiwKLSAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGMpOwotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyaWFuZ2xl
cyBkZWZpbmVkIGJ5IHRoZSBwb2ludHMgKGExLCBiMSwgYzEpCi0vLyBhbmQgKGEyLCBiMiwgYzIp
IG92ZXJsYXAuIFRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhhdAotLy8gaWYg
dGhlIHR3byB0cmlhbmdsZXMgb25seSBzaGFyZSBhbiBhZGphY2VudCBlZGdlIG9yIHZlcnRleCwg
dGhleQotLy8gYXJlIG5vdCBjb25zaWRlcmVkIHRvIG92ZXJsYXAuCi1ib29sIHRyaWFuZ2xlc092
ZXJsYXAoY29uc3QgRmxvYXRQb2ludCYgYTEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgYjEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
YzEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYTIsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjIsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgYzIpOwotCi0vLyBHaXZlbiBhIHNyYyBjdWJpYyBiZXppZXIs
IGNob3BzIGl0IGF0IHRoZSBzcGVjaWZpZWQgdCB2YWx1ZSwKLS8vIHdoZXJlIDAgPCB0IDwgMSwg
YW5kIHJldHVybnMgdGhlIHR3byBuZXcgY3ViaWNzIGluIGRzdFswLi4zXQotLy8gYW5kIGRzdFsz
Li42XS4KLXZvaWQgY2hvcEN1YmljQXQoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9p
bnQgZHN0WzddLCBmbG9hdCB0KTsKLQotLy8gIlgtUmF5IiBxdWVyaWVzLiBBbiBYUmF5IGlzIGEg
aGFsZi1saW5lIG9yaWdpbmF0aW5nIGF0IHRoZSBnaXZlbgotLy8gcG9pbnQgYW5kIGV4dGVuZGlu
ZyB0byB4PStpbmZpbml0eS4KLXR5cGVkZWYgRmxvYXRQb2ludCBYUmF5OwotCi0vLyBHaXZlbiBh
biBhcmJpdHJhcnkgY3ViaWMgYmV6aWVyLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBhbiBY
UmF5Ci0vLyBjcm9zc2VzIHRoZSBjdWJpYy4gVmFsaWQgcmV0dXJuIHZhbHVlcyBhcmUgWzAuLjNd
LgotLy8KLS8vIEJ5IGRlZmluaXRpb24gdGhlIGN1YmljIGlzIG9wZW4gYXQgdGhlIHN0YXJ0aW5n
IHBvaW50OyBpbiBvdGhlcgotLy8gd29yZHMsIGlmIHB0LmZZIGlzIGVxdWl2YWxlbnQgdG8gY3Vi
aWNbMF0uZlksIGFuZCBwdC5mWCBpcyB0byB0aGUKLS8vIGxlZnQgb2YgdGhlIGN1cnZlLCB0aGUg
bGluZSBpcyBub3QgY29uc2lkZXJlZCB0byBjcm9zcyB0aGUgY3VydmUsCi0vLyBidXQgaWYgaXQg
aXMgZXF1YWwgdG8gY3ViaWNbM10uZlkgdGhlbiBpdCBpcyBjb25zaWRlcmVkIHRvCi0vLyBjcm9z
cy4KLS8vCi0vLyBPdXRnb2luZyAiYW1iaWd1b3VzIiBhcmd1bWVudCBpbmRpY2F0ZXMgd2hldGhl
ciB0aGUgYW5zd2VyIGlzIGFtYmlndW91cwotLy8gYmVjYXVzZSB0aGUgcXVlcnkgb2NjdXJyZWQg
ZXhhY3RseSBhdCBvbmUgb2YgdGhlIGVuZHBvaW50cycgeQotLy8gY29vcmRpbmF0ZXMgb3IgYXQg
YSB0YW5nZW50IHBvaW50LCBpbmRpY2F0aW5nIHRoYXQgYW5vdGhlciBxdWVyeSB5Ci0vLyBjb29y
ZGluYXRlIGlzIHByZWZlcnJlZCBmb3Igcm9idXN0bmVzcy4KLWludCBudW1YUmF5Q3Jvc3Npbmdz
Rm9yQ3ViaWMoY29uc3QgWFJheSYgeFJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCBjdWJpY1s0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCYgYW1iaWd1b3VzKTsKLQotLy8gR2l2ZW4gYSBsaW5lIHNlZ21lbnQgZnJvbSBsaW5lRW5k
cG9pbnRzWzBdIHRvIGxpbmVFbmRwb2ludHNbMV0sIGFuZCBhbgotLy8gWFJheSwgcmV0dXJucyB0
cnVlIGlmIHRoZXkgaW50ZXJzZWN0LiBPdXRnb2luZyAiYW1iaWd1b3VzIiBhcmd1bWVudAotLy8g
aW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFuc3dlciBpcyBhbWJpZ3VvdXMgYmVjYXVzZSB0aGUgcXVl
cnkgb2NjdXJyZWQKLS8vIGV4YWN0bHkgYXQgb25lIG9mIHRoZSBlbmRwb2ludHMnIHkgY29vcmRp
bmF0ZXMsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyCi0vLyBxdWVyeSB5IGNvb3JkaW5hdGUgaXMg
cHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgotYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUoY29uc3QgWFJh
eSYgeFJheSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQgbGluZUVuZHBv
aW50c1syXSwKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGFtYmlndW91cyk7Ci0KLQotYm9v
bCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywgaW50IG5WZXJ0aWNlcyk7Ci0K
LX0gLy8gbmFtZXNwYWNlIExvb3BCbGlubk1hdGhVdGlscwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5NYXRoVXRpbHNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aENhY2hlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmMTVlNTNkMmM0Y2RmYjEzNjRhNTBm
ZGE2MTExM2E1MGYxZmJlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0
aENhY2hlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5QYXRoQ2FjaGUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Mb29wQmxpbm5QYXRoQ2FjaGU6Okxvb3BCbGlublBhdGhDYWNoZSgp
Ci17Ci19Ci0KLUxvb3BCbGlublBhdGhDYWNoZTo6fkxvb3BCbGlublBhdGhDYWNoZSgpCi17Ci19
Ci0KLXZvaWQgTG9vcEJsaW5uUGF0aENhY2hlOjphZGRWZXJ0ZXgoZmxvYXQgeCwgZmxvYXQgeSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaywgZmxvYXQgbCwgZmxv
YXQgbSkKLXsKLSAgICBtX3ZlcnRpY2VzLmFwcGVuZCh4KTsKLSAgICBtX3ZlcnRpY2VzLmFwcGVu
ZCh5KTsKLSAgICBtX3RleGNvb3Jkcy5hcHBlbmQoayk7Ci0gICAgbV90ZXhjb29yZHMuYXBwZW5k
KGwpOwotICAgIG1fdGV4Y29vcmRzLmFwcGVuZChtKTsKLX0KLQotdm9pZCBMb29wQmxpbm5QYXRo
Q2FjaGU6OmNsZWFyKCkKLXsKLSAgICBtX3ZlcnRpY2VzLmNsZWFyKCk7Ci0gICAgbV90ZXhjb29y
ZHMuY2xlYXIoKTsKLSAgICBtX2ludGVyaW9yVmVydGljZXMuY2xlYXIoKTsKLSNpZmRlZiBMT09Q
X0JMSU5OX1BBVEhfQ0FDSEVfREVCVUdfSU5URVJJT1JfRURHRVMKLSAgICBtX2ludGVyaW9yRWRn
ZVZlcnRpY2VzLmNsZWFyKCk7Ci0jZW5kaWYgLy8gTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVH
X0lOVEVSSU9SX0VER0VTCi19Ci0KLXZvaWQgTG9vcEJsaW5uUGF0aENhY2hlOjphZGRJbnRlcmlv
clZlcnRleChmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIG1faW50ZXJpb3JWZXJ0aWNlcy5hcHBl
bmQoeCk7Ci0gICAgbV9pbnRlcmlvclZlcnRpY2VzLmFwcGVuZCh5KTsKLX0KLQotI2lmZGVmIExP
T1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotdW5zaWduZWQgTG9vcEJs
aW5uUGF0aENhY2hlOjpudW1iZXJPZkludGVyaW9yRWRnZVZlcnRpY2VzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9pbnRlcmlvckVkZ2VWZXJ0aWNlcy5zaXplKCkgLyAyOwotfQotCi1jb25zdCBm
bG9hdCogTG9vcEJsaW5uUGF0aENhY2hlOjppbnRlcmlvckVkZ2VWZXJ0aWNlcygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFudW1iZXJPZkludGVyaW9yRWRnZVZlcnRpY2VzKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBtX2ludGVyaW9yRWRnZVZlcnRpY2VzLmRhdGEoKTsKLX0KLQotdm9p
ZCBMb29wQmxpbm5QYXRoQ2FjaGU6OmFkZEludGVyaW9yRWRnZVZlcnRleChmbG9hdCB4LCBmbG9h
dCB5KQotewotICAgIG1faW50ZXJpb3JFZGdlVmVydGljZXMuYXBwZW5kKHgpOwotICAgIG1faW50
ZXJpb3JFZGdlVmVydGljZXMuYXBwZW5kKHkpOwotfQotI2VuZGlmIC8vIExPT1BfQkxJTk5fUEFU
SF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
UGF0aENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uUGF0aENhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMWQyNDYyNDgz
YzM0N2IzZDc1ZmUzZTU0MGE2YmE0ZGI1Mjk1ZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlublBhdGhDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIExvb3BCbGlublBhdGhDYWNoZV9oCi0jZGVmaW5lIExvb3BCbGlublBhdGhD
YWNoZV9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBjYWNoZSBvZiB0aGUgcHJvY2Vz
c2VkIHRyaWFuZ2xlIG1lc2ggZm9yIGEgZ2l2ZW4gcGF0aC4gQmVjYXVzZSB0aGVzZQotLy8gbWln
aHQgYmUgZXhwZW5zaXZlIHRvIGFsbG9jYXRlICh1c2luZyBtYWxsb2MvZnJlZSBpbnRlcm5hbGx5
KSwgaXQgaXMKLS8vIHJlY29tbWVuZGVkIHRvIHRyeSB0byByZXVzZSB0aGVtIHdoZW4gcG9zc2li
bGUuCi0KLS8vIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIG9idGFpbiBkZWJ1Z2dpbmcgaW5m
b3JtYXRpb24gZm9yIHRoZSBlZGdlcwotLy8gZmFjaW5nIHRoZSBpbnRlcmlvciByZWdpb24gb2Yg
dGhlIG1lc2guCi0vLyAjZGVmaW5lIExPT1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklP
Ul9FREdFUwotCi1jbGFzcyBMb29wQmxpbm5QYXRoQ2FjaGUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExvb3BCbGlublBhdGhDYWNoZSk7Ci1wdWJsaWM6Ci0gICAgTG9vcEJsaW5uUGF0aENh
Y2hlKCk7Ci0gICAgfkxvb3BCbGlublBhdGhDYWNoZSgpOwotCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMuc2l6ZSgpIC8gMjsgfQotCi0g
ICAgLy8gR2V0IHRoZSBiYXNlIHBvaW50ZXIgdG8gdGhlIHZlcnRleCBpbmZvcm1hdGlvbi4gVGhl
cmUgYXJlIHR3bwotICAgIC8vIGNvb3JkaW5hdGVzIHBlciB2ZXJ0ZXguIFRoaXMgcG9pbnRlciBp
cyB2YWxpZCB1bnRpbCB0aGUgY2FjaGUgaXMKLSAgICAvLyBjbGVhcmVkIG9yIGFub3RoZXIgdmVy
dGV4IGlzIGFkZGVkLiBSZXR1cm5zIDAgaWYgdGhlcmUgYXJlIG5vCi0gICAgLy8gdmVydGljZXMg
aW4gdGhlIG1lc2guCi0gICAgY29uc3QgZmxvYXQqIHZlcnRpY2VzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmICghbnVtYmVyT2ZWZXJ0aWNlcygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBtX3ZlcnRpY2VzLmRhdGEoKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhl
IGJhc2UgcG9pbnRlciB0byB0aGUgdGV4dHVyZSBjb29yZGluYXRlIGluZm9ybWF0aW9uLiBUaGVy
ZQotICAgIC8vIGFyZSB0aHJlZSBjb29yZGluYXRlcyBwZXIgdmVydGV4LiBUaGlzIHBvaW50ZXIg
aXMgdmFsaWQgdW50aWwgdGhlCi0gICAgLy8gY2FjaGUgaXMgY2xlYXJlZCBvciBhbm90aGVyIHZl
cnRleCBpcyBhZGRlZC4gUmV0dXJucyAwIGlmCi0gICAgLy8gdGhlcmUgYXJlIG5vIHZlcnRpY2Vz
IGluIHRoZSBtZXNoLgotICAgIGNvbnN0IGZsb2F0KiB0ZXhjb29yZHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFudW1iZXJPZlZlcnRpY2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmV0dXJuIG1fdGV4Y29vcmRzLmRhdGEoKTsKLSAgICB9Ci0KLSAgICAvLyBBZGRz
IGEgdmVydGV4J3MgaW5mb3JtYXRpb24gdG8gdGhlIGNhY2hlLiBUaGUgZmlyc3QgdHdvIGFyZ3Vt
ZW50cwotICAgIC8vIGFyZSB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4IG9u
IHRoZSBwbGFuZTsgdGhlIGxhc3QKLSAgICAvLyB0aHJlZSBhcmd1bWVudHMgYXJlIHRoZSBjdWJp
YyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFzc29jaWF0ZWQgd2l0aAotICAgIC8vIHRoaXMgdmVydGV4
LgotICAgIHZvaWQgYWRkVmVydGV4KGZsb2F0IHgsIGZsb2F0IHksCi0gICAgICAgICAgICAgICAg
ICAgZmxvYXQgLyprKi8sIGZsb2F0IC8qbCovLCBmbG9hdCAvKm0qLyk7Ci0KLSAgICB1bnNpZ25l
ZCBudW1iZXJPZkludGVyaW9yVmVydGljZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyaW9yVmVy
dGljZXMuc2l6ZSgpIC8gMjsgfQotCi0gICAgLy8gQmFzZSBwb2ludGVyIHRvIHRoZSBpbnRlcmlv
ciB2ZXJ0aWNlczsgdHdvIGNvb3JkaW5hdGVzIHBlcgotICAgIC8vIHZlcnRleCwgd2hpY2ggY2Fu
IGJlIGRyYXduIGFzIEdMX1RSSUFOR0xFUy4gUmV0dXJucyAwIGlmIHRoZXJlCi0gICAgLy8gYXJl
IG5vIGludGVyaW9yIHZlcnRpY2VzIGluIHRoZSBtZXNoLgotICAgIGNvbnN0IGZsb2F0KiBpbnRl
cmlvclZlcnRpY2VzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbnVtYmVyT2ZJbnRlcmlv
clZlcnRpY2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1faW50
ZXJpb3JWZXJ0aWNlcy5kYXRhKCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRJbnRlcmlvclZlcnRl
eChmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIC8vIENsZWFycyBhbGwgb2YgdGhlIHN0b3JlZCB2
ZXJ0ZXggaW5mb3JtYXRpb24gaW4gdGhpcyBjYWNoZS4KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSNp
ZmRlZiBMT09QX0JMSU5OX1BBVEhfQ0FDSEVfREVCVUdfSU5URVJJT1JfRURHRVMKLSAgICAvLyBU
aGUgbnVtYmVyIG9mIGludGVyaW9yIGVkZ2UgdmVydGljZXMKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkludGVyaW9yRWRnZVZlcnRpY2VzKCkgY29uc3Q7Ci0gICAgLy8gQmFzZSBwb2ludGVyIHRvIHRo
ZSBpbnRlcmlvciB2ZXJ0aWNlczsgdHdvIGNvb3JkaW5hdGVzIHBlcgotICAgIC8vIHZlcnRleCwg
d2hpY2ggY2FuIGJlIGRyYXduIGFzIEdMX0xJTkVTLiBSZXR1cm5zIDAgaWYgdGhlcmUgYXJlCi0g
ICAgLy8gbm8gaW50ZXJpb3IgZWRnZSB2ZXJ0aWNlcyBpbiB0aGUgbWVzaC4KLSAgICBjb25zdCBm
bG9hdCogaW50ZXJpb3JFZGdlVmVydGljZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZEludGVyaW9y
RWRnZVZlcnRleChmbG9hdCB4LCBmbG9hdCB5KTsKLSNlbmRpZiAvLyBMT09QX0JMSU5OX1BBVEhf
Q0FDSEVfREVCVUdfSU5URVJJT1JfRURHRVMKLQotcHJpdmF0ZToKLSAgICAvLyBUaGUgdHdvLWRp
bWVuc2lvbmFsIHZlcnRpY2VzIG9mIHRoZSB0cmlhbmdsZSBtZXNoLgotICAgIFZlY3RvcjxmbG9h
dD4gbV92ZXJ0aWNlczsKLQotICAgIC8vIFRoZSB0aHJlZS1kaW1lbnNpb25hbCBjdWJpYyB0ZXh0
dXJlIGNvb3JkaW5hdGVzLgotICAgIFZlY3RvcjxmbG9hdD4gbV90ZXhjb29yZHM7Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQ+IG1faW50ZXJpb3JWZXJ0aWNlczsKLQotI2lmZGVmIExPT1BfQkxJTk5fUEFU
SF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgb25s
eSBmb3IgZGVidWdnaW5nCi0gICAgVmVjdG9yPGZsb2F0PiBtX2ludGVyaW9yRWRnZVZlcnRpY2Vz
OwotI2VuZGlmIC8vIExPT1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTG9vcEJsaW5uUGF0aENh
Y2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5QYXRoUHJvY2Vzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZDg5YmMxMTc5OTg0YjJmMjZiN2UyYWM5YmJmZGUwZTYwNWM2NTY3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoUHJvY2Vzc29yLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBMb29w
IGFuZCBCbGlubidzIEdQVSBhY2NlbGVyYXRlZCBjdXJ2ZQotLy8gcmVuZGVyaW5nIGFsZ29yaXRo
bS4KLQotI2lmbmRlZiBMb29wQmxpbm5QYXRoUHJvY2Vzc29yX2gKLSNkZWZpbmUgTG9vcEJsaW5u
UGF0aFByb2Nlc3Nvcl9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gV2UgdXNlIGEgbmFtZXNw
YWNlIGZvciBjbGFzc2VzIHdoaWNoIGFyZSBzaW1wbHkgaW1wbGVtZW50YXRpb24KLS8vIGRldGFp
bHMgb2YgdGhlIGFsZ29yaXRobSBidXQgd2hpY2ggd2UgbmVlZCB0byByZWZlcmVuY2UgZnJvbSB0
aGUKLS8vIGNsYXNzIGRlZmluaXRpb24uCi1uYW1lc3BhY2UgTG9vcEJsaW5uUGF0aFByb2Nlc3Nv
ckltcGxlbWVudGF0aW9uIHsKLQotY2xhc3MgQ29udG91cjsKLWNsYXNzIFNlZ21lbnQ7Ci0KLX0g
Ly8gbmFtZXNwYWNlIExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbgotCi1jbGFz
cyBQYXRoOwotY2xhc3MgTG9vcEJsaW5uUGF0aENhY2hlOwotY2xhc3MgUE9EQXJlbmE7Ci0KLS8v
IFRoZSBMb29wQmxpbm5QYXRoUHJvY2Vzc29yIHR1cm5zIGEgUGF0aCAoYXNzdW1lZCB0byBjb250
YWluIG9uZSBvcgotLy8gbW9yZSBjbG9zZWQgcmVnaW9ucykgaW50byBhIHNldCBvZiBleHRlcmlv
ciBhbmQgaW50ZXJpb3IgdHJpYW5nbGVzLAotLy8gc3RvcmVkIGluIHRoZSBMb29wQmxpbm5QYXRo
Q2FjaGUuIFRoZSBleHRlcmlvciB0cmlhbmdsZXMgaGF2ZQotLy8gYXNzb2NpYXRlZCAzRCB0ZXh0
dXJlIGNvb3JkaW5hdGVzIHdoaWNoIGFyZSB1c2VkIHRvIGV2YWx1YXRlIHRoZQotLy8gY3VydmUn
cyBpbnNpZGUvb3V0c2lkZSBmdW5jdGlvbiBvbiBhIHBlci1waXhlbCBiYXNpcy4gVGhlIGludGVy
aW9yCi0vLyB0cmlhbmdsZXMgYXJlIGZpbGxlZCB3aXRoIDEwMCUgb3BhY2l0eS4KLS8vCi0vLyBO
b3RlIHRoYXQgdGhlIGZpbGwgc3R5bGUgYW5kIG1hbmFnZW1lbnQgb2YgbXVsdGlwbGUgbGF5ZXJz
IGFyZQotLy8gc2VwYXJhdGUgY29uY2VybnMsIGhhbmRsZWQgYXQgYSBoaWdoZXIgbGV2ZWwgd2l0
aCBzaGFkZXJzIGFuZAotLy8gcG9seWdvbiBvZmZzZXRzLgotY2xhc3MgTG9vcEJsaW5uUGF0aFBy
b2Nlc3NvciB7Ci1wdWJsaWM6Ci0gICAgTG9vcEJsaW5uUGF0aFByb2Nlc3NvcigpOwotICAgIGV4
cGxpY2l0IExvb3BCbGlublBhdGhQcm9jZXNzb3IoUGFzc1JlZlB0cjxQT0RBcmVuYT4pOwotICAg
IH5Mb29wQmxpbm5QYXRoUHJvY2Vzc29yKCk7Ci0KLSAgICAvLyBUcmFuc2Zvcm1zIHRoZSBnaXZl
biBwYXRoIGludG8gYSB0cmlhbmdsZSBtZXNoIGZvciByZW5kZXJpbmcKLSAgICAvLyB1c2luZyBM
b29wIGFuZCBCbGlubidzIHNoYWRlciwgcGxhY2luZyB0aGUgcmVzdWx0IGludG8gdGhlIGdpdmVu
Ci0gICAgLy8gTG9vcEJsaW5uUGF0aENhY2hlLgotICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBQYXRo
JiwgTG9vcEJsaW5uUGF0aENhY2hlJik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gRW5hYmxl
cyBvciBkaXNhYmxlcyB2ZXJib3NlIGxvZ2dpbmcgaW4gZGVidWcgbW9kZS4KLSAgICB2b2lkIHNl
dFZlcmJvc2VMb2dnaW5nKGJvb2wgb25Pck9mZik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICAv
LyBCdWlsZHMgYSBsaXN0IG9mIGNvbnRvdXJzIGZvciB0aGUgZ2l2ZW4gcGF0aC4KLSAgICB2b2lk
IGJ1aWxkQ29udG91cnMoY29uc3QgUGF0aCYpOwotCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVy
IHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGUgb2YgZWFjaCBjb250b3VyIHNob3VsZAotICAgIC8vIGJl
IGZpbGxlZC4KLSAgICB2b2lkIGRldGVybWluZVNpZGVzVG9GaWxsKCk7Ci0KLSAgICAvLyBEZXRl
cm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIChjbG9zZWQpIGNvbnRvdXIgaXMgb3JpZW50ZWQKLSAg
ICAvLyBjbG9ja3dpc2Ugb3IgY291bnRlcmNsb2Nrd2lzZS4KLSAgICB2b2lkIGRldGVybWluZU9y
aWVudGF0aW9uKExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6Q29udG91ciop
OwotCi0gICAgLy8gU3ViZGl2aWRlcyB0aGUgY3VydmVzIHNvIHRoYXQgdGhlcmUgYXJlIG5vIG92
ZXJsYXBzIG9mIHRoZQotICAgIC8vIHRyaWFuZ2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnZl
cycgY29udHJvbCBwb2ludHMuCi0gICAgdm9pZCBzdWJkaXZpZGVDdXJ2ZXMoKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB1c2VkIGR1cmluZyBjdXJ2ZSBzdWJkaXZpc2lvbi4KLSAgICB2b2lk
IGNvbmRpdGlvbmFsbHlTdWJkaXZpZGUoTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0
aW9uOjpTZWdtZW50KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPExv
b3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6U2VnbWVudCo+JiBuZXh0U2VnbWVu
dHMpOwotCi0gICAgLy8gVGVzc2VsbGF0ZXMgdGhlIGludGVyaW9yIHJlZ2lvbnMgb2YgdGhlIGNv
bnRvdXJzLgotICAgIHZvaWQgdGVzc2VsbGF0ZUludGVyaW9yKExvb3BCbGlublBhdGhDYWNoZSYp
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIEZvciBkZWJ1Z2dpbmcgdGhlIG9yaWVudGF0aW9u
IGNvbXB1dGF0aW9uLiBSZXR1cm5zIGFsbCBvZiB0aGUKLSAgICAvLyBzZWdtZW50cyBvdmVybGFw
cGluZyB0aGUgZ2l2ZW4gWSBjb29yZGluYXRlLgotICAgIFZlY3RvcjxMb29wQmxpbm5QYXRoUHJv
Y2Vzc29ySW1wbGVtZW50YXRpb246OlNlZ21lbnQqPiBhbGxTZWdtZW50c092ZXJsYXBwaW5nWShM
b29wQmxpbm5QYXRoUHJvY2Vzc29ySW1wbGVtZW50YXRpb246OkNvbnRvdXIqLCBmbG9hdCB4LCBm
bG9hdCB5KTsKLQotICAgIC8vIEZvciBkZWJ1Z2dpbmcgdGhlIGN1cnZlIHN1YmRpdmlzaW9uIGFs
Z29yaXRobS4gU3ViZGl2aWRlcyB0aGUKLSAgICAvLyBjdXJ2ZXMgdXNpbmcgYW4gYWx0ZXJuYXRl
LCBzbG93IChPKG5eMykpIGFsZ29yaXRobS4KLSAgICB2b2lkIHN1YmRpdmlkZUN1cnZlc1Nsb3co
KTsKLSNlbmRpZgotCi0gICAgLy8gUE9EQXJlbmEgZnJvbSB3aGljaCB0byBhbGxvY2F0ZSB0ZW1w
b3Jhcnkgb2JqZWN0cy4KLSAgICBSZWZQdHI8UE9EQXJlbmE+IG1fYXJlbmE7Ci0KLSAgICAvLyBU
aGUgY29udG91cnMgZGVzY3JpYmVkIGJ5IHRoZSBwYXRoLgotICAgIFZlY3RvcjxMb29wQmxpbm5Q
YXRoUHJvY2Vzc29ySW1wbGVtZW50YXRpb246OkNvbnRvdXIqPiBtX2NvbnRvdXJzOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRvIHBlcmZvcm0gdmVyYm9zZSBsb2dn
aW5nIGluIGRlYnVnIG1vZGUuCi0gICAgYm9vbCBtX3ZlcmJvc2VMb2dnaW5nOwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5QYXRoUHJv
Y2Vzc29yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5TaGFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublNoYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVk
OWZkYzg4MzEzM2Y3MTgyOGE2OTJlN2M3ZDc1YzZiZmYzZGY1ZjAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublNoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9vcEJsaW5uU2hh
ZGVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUxvb3BCbGlublNoYWRlcjo6TG9vcEJsaW5uU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQotICAgIDogU2hhZGVyKGNvbnRleHQsIHBy
b2dyYW0pCi17Ci0gICAgbV93b3JsZFZpZXdQcm9qZWN0aW9uTG9jYXRpb24gPSBjb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIndvcmxkVmlld1Byb2plY3Rpb24iKTsKLSAgICBt
X3Bvc2l0aW9uTG9jYXRpb24gPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAi
cG9zaXRpb24iKTsKLSAgICBtX2tsbUxvY2F0aW9uID0gY29udGV4dC0+Z2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgImtsbSIpOwotfQotCi12b2lkIExvb3BCbGlublNoYWRlcjo6dXNlKHVuc2ln
bmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9wcm9ncmFtKTsK
LQotICAgIGZsb2F0IG1hdHJpeFsxNl07Ci0gICAgYWZmaW5lVG80eDQodHJhbnNmb3JtLCBtYXRy
aXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtX3dvcmxkVmlld1Byb2plY3Rp
b25Mb2NhdGlvbiwgMSAvKmNvdW50Ki8sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdHJpeCk7Ci0K
LSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCB2ZXJ0ZXhPZmZzZXQpOwotICAg
IG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsK
LQotICAgIGlmIChtX2tsbUxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliUG9pbnRlcihtX2tsbUxvY2F0aW9uLCAzLCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCBrbG1PZmZzZXQpOwotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KG1fa2xtTG9jYXRpb24pOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlublNoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlublNoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDI0ZGMz
ZTdiNzViYTBlNTM0ZjMyZjM0MGRkZDEzNTA0MTQyNDYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIExvb3BCbGlublNoYWRlcl9oCi0jZGVmaW5lIExvb3BCbGlublNoYWRlcl9o
Ci0KLSNpbmNsdWRlICJTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLQotY2xhc3MgTG9vcEJsaW5uU2hhZGVyIDogcHVibGljIFNoYWRl
ciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBSZWdpb24gewotICAgICAgICBJbnRlcmlvciwKLSAgICAg
ICAgRXh0ZXJpb3IKLSAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgTG9vcEJsaW5uU2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0KLSAgICAvLyBUaGlzIGFzc3Vt
ZXMgdGhlIHZlcnRpY2VzIGFuZCBrbG0gY29vcmRpbmF0ZXMgYXJlIHN0b3JlZCBpbiB0aGUKLSAg
ICAvLyBzYW1lLCBjdXJyZW50bHkgYm91bmQsIGJ1ZmZlciBvYmplY3QsIGNvbnRpZ3VvdXNseSBh
bmQgYXQgdGhlCi0gICAgLy8gc3BlY2lmaWVkIG9mZnNldHMuCi0gICAgdm9pZCB1c2UodW5zaWdu
ZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOwotCi1wcml2YXRlOgotICAgIGludCBtX3dvcmxkVmlld1Byb2plY3Rpb25Mb2NhdGlvbjsK
LSAgICBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotICAgIGludCBtX2tsbUxvY2F0aW9uOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTG9vcEJsaW5uU2hhZGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5Tb2xpZEZpbGxTaGFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgwYzg2NzcwNGViY2RjZjNmNjYzNmIxNzUzNzVjYzdhYTc1NjhkMDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UGFzc093blB0cjxMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXI+IExvb3BCbGlublNvbGlkRmlsbFNo
YWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExv
b3BCbGlublNoYWRlcjo6UmVnaW9uIHJlZ2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXI6OkFudGlh
bGlhc1R5cGUgYW50aWFsaWFzVHlwZSkKLXsKLSAgICBWZXJ0ZXhUeXBlIHR5cGUgPSAocmVnaW9u
ID09IEludGVyaW9yKSA/IExvb3BCbGlubkludGVyaW9yIDogTG9vcEJsaW5uRXh0ZXJpb3I7Ci0g
ICAgdW5zaWduZWQgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKGNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlVmVydGV4KHR5cGUsIFNvbGlkRmlsbCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRnJhZ21lbnQodHlwZSwg
U29saWRGaWxsLCBhbnRpYWxpYXNUeXBlKSk7Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExvb3BCbGlublNvbGlkRmls
bFNoYWRlcihjb250ZXh0LCBwcm9ncmFtKSk7Ci19Ci0KLUxvb3BCbGlublNvbGlkRmlsbFNoYWRl
cjo6TG9vcEJsaW5uU29saWRGaWxsU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1
bnNpZ25lZCBwcm9ncmFtKQotICAgIDogTG9vcEJsaW5uU2hhZGVyKGNvbnRleHQsIHByb2dyYW0p
Ci17Ci0gICAgbV9jb2xvckxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJjb2xvciIpOwotfQotCi12b2lkIExvb3BCbGlublNvbGlkRmlsbFNoYWRlcjo6dXNl
KHVuc2lnbmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIExvb3BCbGlu
blNoYWRlcjo6dXNlKHZlcnRleE9mZnNldCwga2xtT2Zmc2V0LCB0cmFuc2Zvcm0pOwotCi0gICAg
ZmxvYXQgcmdiYVs0XTsKLSAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFb
Ml0sIHJnYmFbM10pOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29sb3JMb2NhdGlvbiwg
cmdiYVswXSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwg
cmdiYVszXSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Tb2xpZEZp
bGxTaGFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzMTJhMjYzNGRkNjE4
NjZjNjUxNzQyZWEyODk0NmE1OTA0MDlhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU29saWRGaWxsU2hhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXJfaAotI2RlZmluZSBMb29wQmxp
bm5Tb2xpZEZpbGxTaGFkZXJfaAotCi0jaW5jbHVkZSAiTG9vcEJsaW5uU2hhZGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci0KLWNsYXNzIExv
b3BCbGlublNvbGlkRmlsbFNoYWRlciA6IHB1YmxpYyBMb29wQmxpbm5TaGFkZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExvb3BCbGlublNvbGlkRmlsbFNoYWRlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgUmVnaW9uLCBBbnRpYWxpYXNUeXBlKTsKLQotICAgIC8vIFRo
aXMgYXNzdW1lcyB0aGUgdmVydGljZXMgYW5kIGtsbSBjb29yZGluYXRlcyBhcmUgc3RvcmVkIGlu
IHRoZQotICAgIC8vIHNhbWUsIGN1cnJlbnRseSBib3VuZCwgYnVmZmVyIG9iamVjdCwgY29udGln
dW91c2x5IGFuZCBhdCB0aGUKLSAgICAvLyBzcGVjaWZpZWQgb2Zmc2V0cy4KLSAgICB2b2lkIHVz
ZSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKLQotcHJpdmF0ZToKLSAgICBMb29wQmxpbm5Tb2xp
ZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAg
IGludCBtX2NvbG9yTG9jYXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29y
ZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjcyZmUxNzVjNTU1ZDUwYjA3
NzdhMTk2NTExNWQ1YzcwMTQzZjQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5UZXh0dXJlQ29vcmRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLQotI2luY2x1ZGUgIkxvb3BCbGlublRleHR1cmVDb29yZHMuaCIKLQotI2luY2x1ZGUgPG1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUxvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3VsdCBMb29wQmxpbm5UZXh0dXJlQ29vcmRz
Ojpjb21wdXRlKGNvbnN0IExvb3BCbGlubkNsYXNzaWZpZXI6OlJlc3VsdCYgY2xhc3NpZmljYXRp
b24sIExvb3BCbGlubkNvbnN0YW50czo6RmlsbFNpZGUgc2lkZVRvRmlsbCkKLXsKLSAgICAvLyBM
b29wIGFuZCBCbGlubidzIGZvcm11bGF0aW9uIHN0YXRlcyB0aGF0IHRoZSByaWdodCBzaWRlIG9m
IHRoZQotICAgIC8vIGN1cnZlIGlzIGRlZmluZWQgdG8gYmUgdGhlIGluc2lkZSAoZmlsbGVkIHJl
Z2lvbiksIGJ1dCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiBpdCBsb29rcyBsaWtlIHdpdGggdGhl
IGRlZmF1bHQgb3JpZW50YXRpb24gcGFyYW1ldGVycyB3ZQotICAgIC8vIGFyZSBmaWxsaW5nIHRo
ZSBsZWZ0IHNpZGUgb2YgdGhlIGN1cnZlLiBSZWdhcmRsZXNzLCBiZWNhdXNlIHdlCi0gICAgLy8g
Y2FuIHJlY2VpdmUgYXJiaXRyYXJpbHkgb3JpZW50ZWQgY3VydmVzIGFzIGlucHV0LCB3ZSBtaWdo
dCBoYXZlCi0gICAgLy8gdG8gcmV2ZXJzZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGN1YmljIHRl
eHR1cmUgY29vcmRpbmF0ZXMgZXZlbgotICAgIC8vIGluIGNhc2VzIHdoZXJlIHRoZSBwYXBlciBk
b2Vzbid0IHNheSBpdCBpcyBuZWNlc3NhcnkuCi0gICAgYm9vbCByZXZlcnNlT3JpZW50YXRpb24g
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgT25lVGhpcmQgPSAxLjBmIC8gMy4wZjsK
LSAgICBzdGF0aWMgY29uc3QgZmxvYXQgVHdvVGhpcmRzID0gMi4wZiAvIDMuMGY7Ci0gICAgTG9v
cEJsaW5uQ2xhc3NpZmllcjo6Q3VydmVUeXBlIGN1cnZlVHlwZSA9IGNsYXNzaWZpY2F0aW9uLmN1
cnZlVHlwZTsKLQotICAgIExvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3VsdCByZXN1bHQ7Ci0K
LSAgICBzd2l0Y2ggKGN1cnZlVHlwZSkgewotICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6
a1NlcnBlbnRpbmU6IHsKLSAgICAgICAgZmxvYXQgdDEgPSBzcXJ0Zig5LjBmICogY2xhc3NpZmlj
YXRpb24uZDIgKiBjbGFzc2lmaWNhdGlvbi5kMiAtIDEyICogY2xhc3NpZmljYXRpb24uZDEgKiBj
bGFzc2lmaWNhdGlvbi5kMyk7Ci0gICAgICAgIGZsb2F0IGxzID0gMy4wZiAqIGNsYXNzaWZpY2F0
aW9uLmQyIC0gdDE7Ci0gICAgICAgIGZsb2F0IGx0ID0gNi4wZiAqIGNsYXNzaWZpY2F0aW9uLmQx
OwotICAgICAgICBmbG9hdCBtcyA9IDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMiArIHQxOwotICAg
ICAgICBmbG9hdCBtdCA9IGx0OwotICAgICAgICBmbG9hdCBsdE1pbnVzTHMgPSBsdCAtIGxzOwot
ICAgICAgICBmbG9hdCBtdE1pbnVzTXMgPSBtdCAtIG1zOwotICAgICAgICByZXN1bHQua2xtQ29v
cmRpbmF0ZXNbMF0gPSBGbG9hdFBvaW50M0QobHMgKiBtcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBscywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zICogbXMgKiBtcyk7Ci0gICAgICAg
IHJlc3VsdC5rbG1Db29yZGluYXRlc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqICgzLjBm
ICogbHMgKiBtcyAtIGxzICogbXQgLSBsdCAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiAobHMgLSBsdCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcyAqIG1zICogKG1zIC0gbXQp
KTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKE9uZVRo
aXJkICogKGx0ICogKG10IC0gMi4wZiAqIG1zKSArIGxzICogKDMuMGYgKiBtcyAtIDIuMGYgKiBt
dCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRN
aW51c0xzICogbHRNaW51c0xzICogbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdE1pbnVzTXMgKiBtdE1pbnVzTXMgKiBtcyk7Ci0gICAgICAgIHJl
c3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRChsdE1pbnVzTHMgKiBtdE1pbnVz
TXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKGx0
TWludXNMcyAqIGx0TWludXNMcyAqIGx0TWludXNMcyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtKG10TWludXNNcyAqIG10TWludXNNcyAqIG10TWlu
dXNNcykpOwotICAgICAgICBpZiAoY2xhc3NpZmljYXRpb24uZDEgPCAwLjBmKQotICAgICAgICAg
ICAgcmV2ZXJzZU9yaWVudGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjprTG9vcDogewotICAgICAgICBmbG9hdCB0MSA9
IHNxcnRmKDQuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMSAqIGNsYXNzaWZpY2F0aW9uLmQzIC0gMy4w
ZiAqIGNsYXNzaWZpY2F0aW9uLmQyICogY2xhc3NpZmljYXRpb24uZDIpOwotICAgICAgICBmbG9h
dCBscyA9IGNsYXNzaWZpY2F0aW9uLmQyIC0gdDE7Ci0gICAgICAgIGZsb2F0IGx0ID0gMi4wZiAq
IGNsYXNzaWZpY2F0aW9uLmQxOwotICAgICAgICBmbG9hdCBtcyA9IGNsYXNzaWZpY2F0aW9uLmQy
ICsgdDE7Ci0gICAgICAgIGZsb2F0IG10ID0gbHQ7Ci0KLSAgICAgICAgLy8gRmlndXJlIG91dCB3
aGV0aGVyIHRoZXJlIGlzIGEgcmVuZGVyaW5nIGFydGlmYWN0IHJlcXVpcmluZwotICAgICAgICAv
LyB0aGUgY3VydmUgdG8gYmUgc3ViZGl2aWRlZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBmbG9h
dCBxbCA9IGxzIC8gbHQ7Ci0gICAgICAgIGZsb2F0IHFtID0gbXMgLyBtdDsKLSAgICAgICAgaWYg
KDAuMGYgPCBxbCAmJiBxbCA8IDEuMGYpIHsKLSAgICAgICAgICAgIHJlc3VsdC5oYXNSZW5kZXJp
bmdBcnRpZmFjdCA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQuc3ViZGl2aXNpb25QYXJhbWV0
ZXJWYWx1ZSA9IHFsOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICgwLjBmIDwgcW0gJiYgcW0gPCAxLjBmKSB7Ci0gICAgICAgICAgICByZXN1bHQu
aGFzUmVuZGVyaW5nQXJ0aWZhY3QgPSB0cnVlOwotICAgICAgICAgICAgcmVzdWx0LnN1YmRpdmlz
aW9uUGFyYW1ldGVyVmFsdWUgPSBxbTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmbG9hdCBsdE1pbnVzTHMgPSBsdCAtIGxzOwotICAgICAgICBmbG9h
dCBtdE1pbnVzTXMgPSBtdCAtIG1zOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0g
PSBGbG9hdFBvaW50M0QobHMgKiBtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxzICogbHMgKiBtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxzICogbXMgKiBtcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1D
b29yZGluYXRlc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqICgtbHMgKiBtdCAtIGx0ICog
bXMgKyAzLjBmICogbHMgKiBtcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtT25lVGhpcmQgKiBscyAqIChscyAqIChtdCAtIDMuMGYgKiBtcykgKyAy
LjBmICogbHQgKiBtcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtT25lVGhpcmQgKiBtcyAqIChscyAqICgyLjBmICogbXQgLSAzLjBmICogbXMpICsg
bHQgKiBtcykpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9hdFBvaW50
M0QoT25lVGhpcmQgKiAobHQgKiAobXQgLSAyLjBmICogbXMpICsgbHMgKiAoMy4wZiAqIG1zIC0g
Mi4wZiAqIG10KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPbmVUaGlyZCAqIChsdCAtIGxzKSAqIChscyAqICgyLjBmICogbXQgLSAzLjBmICogbXMp
ICsgbHQgKiBtcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPbmVUaGlyZCAqIChtdCAtIG1zKSAqIChscyAqIChtdCAtIDMuMGYgKiBtcykgKyAyLjBm
ICogbHQgKiBtcykpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBv
aW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLShsdE1pbnVzTHMgKiBsdE1pbnVzTHMpICogbXRNaW51c01z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWx0TWlu
dXNMcyAqIG10TWludXNNcyAqIG10TWludXNNcyk7Ci0gICAgICAgIHJldmVyc2VPcmllbnRhdGlv
biA9ICgoY2xhc3NpZmljYXRpb24uZDEgPiAwLjBmICYmIHJlc3VsdC5rbG1Db29yZGluYXRlc1sw
XS54KCkgPCAwLjBmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGNsYXNzaWZpY2F0
aW9uLmQxIDwgMC4wZiAmJiByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0ueCgpID4gMC4wZikpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtD
dXNwOiB7Ci0gICAgICAgIGZsb2F0IGxzID0gY2xhc3NpZmljYXRpb24uZDM7Ci0gICAgICAgIGZs
b2F0IGx0ID0gMy4wZiAqIGNsYXNzaWZpY2F0aW9uLmQyOwotICAgICAgICBmbG9hdCBsc01pbnVz
THQgPSBscyAtIGx0OwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBGbG9hdFBv
aW50M0QobHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBscyAqIGxzICogbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLjBmKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQ
b2ludDNEKGxzIC0gT25lVGhpcmQgKiBsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBsc01pbnVzTHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICAgICAgcmVzdWx0Lmts
bUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKGxzIC0gVHdvVGhpcmRzICogbHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc01pbnVzTHQgKiBs
c01pbnVzTHQgKiBscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMGYpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBv
aW50M0QobHNNaW51c0x0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbHNNaW51c0x0ICogbHNNaW51c0x0ICogbHNNaW51c0x0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6a1F1YWRyYXRpYzogewot
ICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7
Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGly
ZCwgMCwgT25lVGhpcmQpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9h
dFBvaW50M0QoVHdvVGhpcmRzLCBPbmVUaGlyZCwgVHdvVGhpcmRzKTsKLSAgICAgICAgcmVzdWx0
LmtsbUNvb3JkaW5hdGVzWzNdID0gRmxvYXRQb2ludDNEKDEsIDEsIDEpOwotICAgICAgICBpZiAo
Y2xhc3NpZmljYXRpb24uZDMgPCAwKQotICAgICAgICAgICAgcmV2ZXJzZU9yaWVudGF0aW9uID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBMb29wQmxpbm5DbGFzc2lm
aWVyOjprTGluZToKLSAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtQb2ludDoKLSAgICAg
ICAgcmVzdWx0LmlzTGluZU9yUG9pbnQgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoc2lkZVRvRmlsbCA9PSBMb29wQmxpbm5Db25zdGFudHM6OlJpZ2h0U2lk
ZSkKLSAgICAgICAgcmV2ZXJzZU9yaWVudGF0aW9uID0gIXJldmVyc2VPcmllbnRhdGlvbjsKLQot
ICAgIGlmIChyZXZlcnNlT3JpZW50YXRpb24pIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA0OyArK2kpIHsKLSAgICAgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1tpXS5zZXRYKC1y
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbaV0ueCgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5rbG1Db29y
ZGluYXRlc1tpXS5zZXRZKC1yZXN1bHQua2xtQ29vcmRpbmF0ZXNbaV0ueSgpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWZkZWIzYjRiYjM0NWE5MWY5NmIzYmQyMzBmYzM1ZTUyMTU4NjZkZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTG9vcEJsaW5uVGV4dHVyZUNv
b3Jkc19oCi0jZGVmaW5lIExvb3BCbGlublRleHR1cmVDb29yZHNfaAotCi0jaW5jbHVkZSAiRmxv
YXRQb2ludDNELmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5uQ2xhc3NpZmllci5oIgotI2luY2x1ZGUg
Ikxvb3BCbGlubkNvbnN0YW50cy5oIgotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQ29tcHV0ZXMgdGhyZWUtZGltZW5zaW9uYWwgdGV4
dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIGNvbnRyb2wKLS8vIHBvaW50cyBvZiBhIGN1YmljIGN1
cnZlIGZvciByZW5kZXJpbmcgdmlhIHRoZSBzaGFkZXIgaW4gIlJlbmRlcmluZwotLy8gVmVjdG9y
IEFydCBvbiB0aGUgR1BVIiBieSBMb29wIGFuZCBCbGlubiwgR1BVIEdlbXMgMywgQ2hhcHRlciAy
NS4KLWNsYXNzIExvb3BCbGlublRleHR1cmVDb29yZHMgewotcHVibGljOgotICAgIC8vIENvbnRh
aW5lciBmb3IgdGhlIGN1YmljIHRleHR1cmUgY29vcmRpbmF0ZXMgYW5kIG90aGVyIGFzc29jaWF0
ZWQKLSAgICAvLyBpbmZvcm1hdGlvbi4KLSAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgUmVz
dWx0KCkKLSAgICAgICAgICAgIDogaXNMaW5lT3JQb2ludChmYWxzZSkKLSAgICAgICAgICAgICwg
aGFzUmVuZGVyaW5nQXJ0aWZhY3QoZmFsc2UpCi0gICAgICAgICAgICAsIHN1YmRpdmlzaW9uUGFy
YW1ldGVyVmFsdWUoMC4wZikgeyB9Ci0KLSAgICAgICAgLy8gVGhlIChrLCBsLCBtKSB0ZXh0dXJl
IGNvb3JkaW5hdGVzIHRoYXQgYXJlIHRvIGJlIGFzc29jaWF0ZWQKLSAgICAgICAgLy8gd2l0aCB0
aGUgZm91ciBjb250cm9sIHBvaW50cyBvZiB0aGUgY3ViaWMgY3VydmUuCi0gICAgICAgIEZsb2F0
UG9pbnQzRCBrbG1Db29yZGluYXRlc1s0XTsKLQotICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhl
ciB0aGUgY3VydmUgaXMgYSBsaW5lIG9yIGEgcG9pbnQsIGluIHdoaWNoIGNhc2UKLSAgICAgICAg
Ly8gd2UgZG8gbm90IG5lZWQgdG8gYWRkIGl0cyB0cmlhbmdsZXMgdG8gdGhlIG1lc2guCi0gICAg
ICAgIGJvb2wgaXNMaW5lT3JQb2ludDsKLQotICAgICAgICAvLyBGb3IgdGhlIGxvb3AgY2FzZSwg
aW5kaWNhdGVzIHdoZXRoZXIgYSByZW5kZXJpbmcgYXJ0aWZhY3Qgd2FzCi0gICAgICAgIC8vIGRl
dGVjdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBjdXJ2ZSBuZWVkcyB0byBiZSBmdXJ0aGVyCi0gICAg
ICAgIC8vIHN1YmRpdmlkZWQuCi0gICAgICAgIGJvb2wgaGFzUmVuZGVyaW5nQXJ0aWZhY3Q7Ci0K
LSAgICAgICAgLy8gSWYgYSByZW5kZXJpbmcgYXJ0aWZhY3Qgd2lsbCBvY2N1ciBmb3IgdGhlIGdp
dmVuIGxvb3AgY3VydmUsCi0gICAgICAgIC8vIHRoaXMgaXMgdGhlIHBhcmFtZXRlciB2YWx1ZSAo
MCA8PSB2YWx1ZSA8PSAxKSBhdCB3aGljaCB0aGUKLSAgICAgICAgLy8gY3VydmUgbmVlZHMgdG8g
YmUgc3ViZGl2aWRlZCB0byBmaXggdGhlIGFydGlmYWN0LgotICAgICAgICBmbG9hdCBzdWJkaXZp
c2lvblBhcmFtZXRlclZhbHVlOwotICAgIH07Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgdGV4dHVy
ZSBjb29yZGluYXRlcyBmb3IgYSBjdWJpYyBjdXJ2ZSBzZWdtZW50J3MKLSAgICAvLyBjb250cm9s
IHBvaW50cywgZ2l2ZW4gdGhlIGNsYXNzaWZpY2F0aW9uIG9mIHRoZSBjdXJ2ZSBhcyB3ZWxsIGFz
Ci0gICAgLy8gYW4gaW5kaWNhdGlvbiBvZiB3aGljaCBzaWRlIGlzIHRvIGJlIGZpbGxlZC4KLSAg
ICBzdGF0aWMgUmVzdWx0IGNvbXB1dGUoY29uc3QgTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0
JiBjbGFzc2lmaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vcEJsaW5uQ29u
c3RhbnRzOjpGaWxsU2lkZSBzaWRlVG9GaWxsKTsKLQotcHJpdmF0ZToKLSAgICAvLyBUaGlzIGNs
YXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFudGlhdGVkLgotICAgIExvb3BCbGlublRleHR1
cmVDb29yZHMoKSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IExvb3BCbGlublRleHR1cmVDb29yZHNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233367</attachid>
            <date>2014-06-19 11:03:52 -0700</date>
            <delta_ts>2014-06-19 12:54:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134065-20140619110329.patch</filename>
            <type>text/plain</type>
            <size>240224</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjlhZGE5NDFhYWJmMjE0
YjJiM2JiMWFlY2Y5NWYyMTE0NWFjYjdiNC4uNGY4ZTUwOTQ2MDIwM2RmNTM1YTZmNmNmNjA3NzEz
M2MwOTU3ZmU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA2LTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zpbmcg
ZGVhZCBjb2RlIGluIHBsYXRmb3JtL2dyYXBoaWNzL2dwdQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnM6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNz
aWZpZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5DbGFzc2lmaWVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlubkNvbnN0YW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhV
dGlscy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlubk1hdGhVdGlscy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5QYXRoQ2FjaGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU29saWRGaWxs
U2hhZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU29saWRGaWxsU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1
cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRh
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5n
QnVmZmVyTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRUNvbG9yTWF0cml4
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09w
ZW5DTEZFRmxvb2QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVJbWFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVT
b3VyY2VHcmFwaGljLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFVHVyYnVsZW5jZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaDogUmVtb3ZlZC4KKwogMjAx
NC0wNi0xOCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaywgRmlsZVRocmVhZDo6VGFzayBwYXJhbWV0ZXJz
IHNob3VsZCBiZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCmluZGV4IDE5NTVhZWM0MjYyYTk0OWY3Y2VmM2JmZDZjMjI3OWI4MGVhMGE3
NDAuLmVjYzIyOGJkNDYxOTgzMjI3ZWM1MDgwMDYwMjU4MjM5ZTFlYzE0YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNzI2NSwxOCAr
NzI2NSw2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGVnbFxHTENvbnRleHRFR0wuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XERyYXdpbmdCdWZmZXIuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BC
bGlubkNsYXNzaWZpZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5NYXRo
VXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1XExvb3BCbGlublBhdGhDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uU2hhZGVyLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Tb2xp
ZEZpbGxTaGFkZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1XExvb3BCbGlublRleHR1cmVDb29yZHMuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNoYWRlci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1XFRleHR1cmUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRpbGluZ0RhdGEuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9ybWF0Q29udmVydGVyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzQ29udGV4
dDNELmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEdyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwIiAvPgpAQCAtMTkxNzksMjAgKzE5MTY3LDYgQEAK
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZWdsXEdMQ29udGV4dEVHTC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XERyYXdpbmdCdWZmZXIuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5DbGFzc2lmaWVy
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
TG9vcEJsaW5uQ29uc3RhbnRzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5NYXRo
VXRpbHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGdwdVxMb29wQmxpbm5QYXRoQ2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5QYXRoUHJvY2Vzc29yLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uU2hh
ZGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xn
cHVcTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNoYWRlci5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNELmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xncHVcVGV4dHVyZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRpbGluZ0RhdGEuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvcm1hdENvbnZlcnRlci5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NDb250
ZXh0M0QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIgLz4KQEAgLTIxMTk1LDQgKzIxMTY5LDQgQEAKICAg
PEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21pemF0aW9uc1xtYXNtLnRhcmdldHMiIC8+
CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDhhNDlhMzVkMmM5NTY2MGZlNWMxMDY5N2M1
MDJhN2I4NjQ2NGQzYTEuLjI4Y2QyODg5MTc5ZWQ2NjQ1YTRhODc2ZWFjNjg2ZjgwODIwNzI1Y2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKQEAgLTMwNCw5ICszMDQsNiBAQAogICAgIDxGaWx0ZXIgSW5jbHVkZT0i
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsIj4KICAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswOTc3
YTIyNi1kMTE5LTQyZWYtOWNkNi1jNjQxM2ZkOWU1Y2R9PC9VbmlxdWVJZGVudGlmaWVyPgogICAg
IDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0icGxhdGZvcm1cZ3JhcGhpY3NcZ3B1Ij4K
LSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjMjMzMmZmOS00MzZlLTRjMDctYjY5Mi1mYjRiOWRi
NDBmZmR9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVyPgogICAgIDxGaWx0ZXIgSW5j
bHVkZT0icGxhdGZvcm1cZ3JhcGhpY3NcZWdsIj4KICAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntl
MjdiMzQ4ZC0wYjg3LTRlNWYtYjViOS1iOTllMjgzZWEyMmJ9PC9VbmlxdWVJZGVudGlmaWVyPgog
ICAgIDwvRmlsdGVyPgpAQCAtNjY2Nyw0MiArNjY2NCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xPcGVuR0xTaGltcy5jcHAiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XERyYXdpbmdCdWZmZXIuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xn
cHVcTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFw
aGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5j
cHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGdwdVxMb29wQmxpbm5NYXRoVXRpbHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3Jh
cGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uUGF0aENhY2hlLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExv
b3BCbGlublNoYWRlci5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkcy5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xn
cHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFkZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZv
cm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xncHVcVGV4dHVyZS5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xn
cHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxUaWxpbmdEYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBs
YXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsXEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xvcGVuZ2w8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE0NTIxLDQ4ICsxNDQ4Miw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xPcGVuR0xTaGltcy5oIj4KICAgICAg
IDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxEcmF3aW5nQnVm
ZmVyLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGdwdVxMb29wQmxpbm5DbGFzc2lmaWVyLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Db25zdGFudHMuaCI+Ci0g
ICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExv
b3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFw
aGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5NYXRoVXRpbHMuaCI+Ci0gICAg
ICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BC
bGlublBhdGhDYWNoZS5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oIj4KLSAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uU2hh
ZGVyLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGdwdVxMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRm
b3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublRleHR1cmVDb29y
ZHMuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1XFNoYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xncHVcU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCI+Ci0gICAgICA8Rmls
dGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRleHR1cmUuaCI+
Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1
XFRpbGluZ0RhdGEuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncb3BlbmdsXEV4dGVuc2lvbnMzRE9wZW5HTC5oIj4KICAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0x
NTIzMiw0ICsxNTE1MSw0IEBACiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHdpbjwvRmlsdGVyPgog
ICAgIDwvTUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyYjk2Y2I1OTRjYmU3M2U1NmQxNjdkYWQwYzk2Y2Y0YjAyYjU4OGFkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQ2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpIHx8IFVTRSgzRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKFdJTikgfHwg
VVNFKENBSVJPKQotRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIFBy
ZXNlcnZlRHJhd2luZ0J1ZmZlciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIsIEFscGhhUmVxdWlyZW1l
bnQgYWxwaGEpCi0gICAgOiBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcihwcmVzZXJ2ZURyYXdpbmdC
dWZmZXIpCi0gICAgLCBtX2FscGhhKGFscGhhKQotICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxz
ZSkKLSAgICAsIG1fdGV4dHVyZTJEQmluZGluZygwKQotICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcoMCkKLSAgICAsIG1fYWN0aXZlVGV4dHVyZVVuaXQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NpemUoLTEsIC0xKQotICAg
ICwgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1
cHBvcnRlZCkKLSAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKLSAgICAsIG1fZmJvKGNvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCkpCi0gICAgLCBtX2NvbG9yQnVmZmVyKDApCi0gICAgLCBtX2Zy
b250Q29sb3JCdWZmZXIoMCkKLSAgICAsIG1fc2VwYXJhdGVGcm9udFRleHR1cmUoZmFsc2UpCi0g
ICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotICAg
ICwgbV9zdGVuY2lsQnVmZmVyKDApCi0gICAgLCBtX211bHRpc2FtcGxlRkJPKDApCi0gICAgLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLXsKLSAgICBBU1NFUlQobV9mYm8pOwotICAgIGlm
ICghbV9mYm8pIHsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KLSAgICBtX2NvbG9yQnVmZmVy
ID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICBjb250ZXh0
LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsK
LSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICBjcmVh
dGVTZWNvbmRhcnlCdWZmZXJzKCk7Ci0gICAgcmVzZXQoc2l6ZSk7Ci19Ci0KLURyYXdpbmdCdWZm
ZXI6On5EcmF3aW5nQnVmZmVyKCkKLXsKLSAgICBjbGVhcigpOwotfQotI2VuZGlmCi0KLS8vIEds
b2JhbCByZXNvdXJjZSBjZWlsaW5nIChleHByZXNzZWQgaW4gdGVybXMgb2YgcGl4ZWxzKSBmb3Ig
RHJhd2luZ0J1ZmZlciBjcmVhdGlvbiBhbmQgcmVzaXplLgotLy8gV2hlbiB0aGlzIGxpbWl0IGlz
IHNldCwgRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKCkgYW5kIERyYXdpbmdCdWZmZXI6OnJlc2V0KCkg
Y2FsbHMgdGhhdCB3b3VsZAotLy8gZXhjZWVkIHRoZSBnbG9iYWwgY2FwIHdpbGwgaW5zdGVhZCBj
bGVhciB0aGUgYnVmZmVyLgotc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyA9
IDA7Ci1zdGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKLXN0YXRpYyBj
b25zdCBmbG9hdCBzX3Jlc291cmNlQWRqdXN0ZWRSYXRpbyA9IDAuNTsKLQotUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIFByZXNlcnZlRHJhd2luZ0J1ZmZlciBwcmVzZXJ2
ZSwgQWxwaGFSZXF1aXJlbWVudCBhbHBoYSkKLXsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgYm9vbCBtdWx0aXNhbXBsZVN1cHBv
cnRlZCA9IGV4dGVuc2lvbnMtPm1heVN1cHBvcnRNdWx0aXNhbXBsaW5nKCkKLSAgICAgICAgJiYg
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQotICAgICAg
ICAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKQotICAgICAgICAmJiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgi
KTsKLSAgICBpZiAobXVsdGlzYW1wbGVTdXBwb3J0ZWQpIHsKLSAgICAgICAgZXh0ZW5zaW9ucy0+
ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpOwotICAgICAgICBleHRl
bnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
OwotICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcmdiOF9yZ2JhOCIp
OwotICAgIH0KLSAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IGV4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBpZiAocGFj
a2VkRGVwdGhTdGVuY2lsU3VwcG9ydGVkKQotICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICBSZWZQdHI8RHJhd2luZ0J1
ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQs
IHNpemUsIG11bHRpc2FtcGxlU3VwcG9ydGVkLCBwYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0ZWQs
IHByZXNlcnZlLCBhbHBoYSkpOwotICAgIHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0
KSA/IGRyYXdpbmdCdWZmZXIucmVsZWFzZSgpIDogMDsKLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVy
OjpjbGVhcigpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fc2l6ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgc19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgLT0gbV9zaXplLndp
ZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIG1fc2l6ZSA9IEludFNpemUoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9jb2xvckJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVRleHR1cmUobV9jb2xvckJ1ZmZlcik7Ci0gICAgICAgIG1fY29sb3JCdWZmZXIgPSAwOwotICAg
IH0KLQotICAgIGlmIChtX2Zyb250Q29sb3JCdWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1fZnJvbnRDb2xvckJ1ZmZlcik7Ci0gICAgICAgIG1fZnJvbnRDb2xvckJ1
ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgewot
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOwotICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9kZXB0aEJ1ZmZlcikgewotICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAg
bV9kZXB0aEJ1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikgewot
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3N0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICBtX3N0ZW5jaWxCdWZmZXIgPSAwOwotICAgIH0KLQotICAgIGlmIChtX211bHRpc2Ft
cGxlRkJPKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9tdWx0aXNh
bXBsZUZCTyk7Ci0gICAgICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOwotICAgIH0KLQotICAgIGlm
IChtX2ZibykgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsK
LSAgICAgICAgbV9mYm8gPSAwOwotICAgIH0KLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpjcmVh
dGVTZWNvbmRhcnlCdWZmZXJzKCkKLXsKLSAgICAvLyBjcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8K
LSAgICBpZiAobXVsdGlzYW1wbGUoKSkgewotICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gbV9j
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OwotICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOwotICAgIH0KLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0
aFN0ZW5jaWwoaW50IHNhbXBsZUNvdW50KQotewotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRl
cygpOwotICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoICYmIGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBt
X3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkgewotICAgICAgICBpZiAoIW1f
ZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBpZiAobXVsdGlzYW1wbGUoKSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEV4dGVuc2lvbnMzRDo6
REVQVEgyNF9TVEVOQ0lMOCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJ
TDgsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAgICAgaWYgKCFtX2RlcHRoQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZGVwdGhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAg
aWYgKG11bHRpc2FtcGxlKCkpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDE2LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDE2LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgewotICAgICAgICAgICAgaWYgKCFtX3N0ZW5jaWxCdWZm
ZXIpCi0gICAgICAgICAgICAgICAgbV9zdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVS
ZW5kZXJidWZmZXIoKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICAgICAgaWYgKG11bHRpc2FtcGxlKCkpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfSU5ERVg4LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAg
IGVsc2UgCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYOCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgMCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJGcmFtZWJ1ZmZl
cnMoR0MzRGJpdGZpZWxkIGNsZWFyTWFzaykKLXsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8gPyBt
X211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwotCi0gICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1h
c2spOwotCi0gICAgLy8gVGhlIG11bHRpc2FtcGxlIGZibyB3YXMganVzdCBjbGVhcmVkLCBidXQg
d2UgYWxzbyBuZWVkIHRvIGNsZWFyIHRoZSBub24tbXVsdGlzYW1wbGVkIGJ1ZmZlciB0b28uCi0g
ICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1f
Y29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwotICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgIH0KLX0KLQotLy8gT25seSB3YXkgdG8gZW5z
dXJlIHRoYXQgd2UncmUgbm90IGdldHRpbmcgYSBiYWQgZnJhbWVidWZmZXIgb24gc29tZSBBTUQv
T1NYIGRldmljZXMuCi0vLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSBzdGFydHMgcmVwb3J0aW5nIEdMX09VVF9PRl9NRU1PUlkg
cHJvcGVybHkuCi1ib29sIERyYXdpbmdCdWZmZXI6OmNoZWNrQnVmZmVySW50ZWdyaXR5KCkKLXsK
LSAgICBpZiAoIW1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKG1fc2Npc3NvckVuYWJsZWQpCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLQotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRy
dWUsIHRydWUsIHRydWUsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICBt
X2NvbnRleHQtPmNsZWFyQ29sb3IoMS4wZiwgMC4wZiwgMS4wZiwgMS4wZik7Ci0gICAgbV9jb250
ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0KLSAgICBj
b21taXQoMCwgMCwgMSwgMSk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdID0gezAsIDAs
IDAsIDB9OwotICAgIG1fY29udGV4dC0+cmVhZFBpeGVscygwLCAwLCAxLCAxLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZwaXhlbCk7
Ci0KLSAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0KLSAgICByZXR1cm4gKHBpeGVsWzBd
ID09IDB4RkYgJiYgcGl4ZWxbMV0gPT0gMHgwMCAmJiBwaXhlbFsyXSA9PSAweEZGICYmIHBpeGVs
WzNdID09IDB4RkYpOwotfQotCi1ib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmIG5ld1NpemUpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpbnQgbWF4
VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgaWYgKG5ld1Np
emUuaGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSB8fCBuZXdTaXplLndpZHRoKCkgPiBtYXhUZXh0
dXJlU2l6ZSkgewotICAgICAgICBjbGVhcigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaW50IHBpeGVsRGVsdGEgPSBuZXdTaXplLndpZHRoKCkgKiBuZXdTaXplLmhlaWdo
dCgpOwotICAgIGludCBvbGRTaXplID0gMDsKLSAgICBpZiAoIW1fc2l6ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgb2xkU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpOwotICAg
ICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7Ci0gICAgfQotCi0gICAgSW50U2l6ZSBhZGp1c3Rl
ZFNpemUgPSBuZXdTaXplOwotICAgIGlmIChzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscykgewot
ICAgICAgICB3aGlsZSAoKHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzICsgcGl4ZWxEZWx0YSkg
PiBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscykgewotICAgICAgICAgICAgYWRqdXN0ZWRTaXpl
LnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKLSAgICAgICAgICAgIGlmIChhZGp1c3Rl
ZFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbERlbHRh
ID0gYWRqdXN0ZWRTaXplLndpZHRoKCkgKiBhZGp1c3RlZFNpemUuaGVpZ2h0KCk7Ci0gICAgICAg
ICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7Ci0gICAgICAgIH0KLSAgICAgfQotCi0gICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYWRqdXN0ZWRTaXplICE9IG1fc2l6
ZSkgewotCi0gICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0
LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYWxw
aGEpIHsKLSAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKLSAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE7Ci0gICAgICAgICAgICBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdCA9IEV4dGVuc2lvbnMz
RDo6UkdCQThfT0VTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50ZXJuYWxDb2xv
ckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci0gICAgICAgICAgICBjb2xvckZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci0gICAgICAgICAgICBpbnRlcm5hbFJlbmRlcmJ1
ZmZlckZvcm1hdCA9IEV4dGVuc2lvbnMzRDo6UkdCOF9PRVM7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBtX3NpemUgPSBhZGp1c3RlZFNpemU7Ci0gICAgICAgICAgICAv
LyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCi0gICAgICAgICAgICBpZiAobXVsdGlzYW1wbGUoKSkg
ewotICAgICAgICAgICAgICAgIGludCBtYXhTYW1wbGVDb3VudCA9IDA7Ci0KLSAgICAgICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZt
YXhTYW1wbGVDb3VudCk7Ci0gICAgICAgICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjpt
aW4oNCwgbWF4U2FtcGxlQ291bnQpOwotCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKLQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxl
Q291bnQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRqdXN0ZWRTaXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOwotICAgICAgICAg
ICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplLnNjYWxlKHNfcmVzb3Vy
Y2VBZGp1c3RlZFJhdGlvKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyByZXNpemUgcmVndWxh
ciBGQk8KLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKTsKLQotICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDAp
OwotCi0gICAgICAgICAgICAvLyByZXNpemUgdGhlIGZyb250IGNvbG9yIGJ1ZmZlcgotICAgICAg
ICAgICAgaWYgKG1fc2VwYXJhdGVGcm9udFRleHR1cmUpIHsKLSAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Zyb250
Q29sb3JCdWZmZXIpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0K
LSAgICAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKLSAgICAgICAgICAgICAgICByZXNpemVE
ZXB0aFN0ZW5jaWwoMCk7Ci0gICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgYWRqdXN0ZWRT
aXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLQotI2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlIHN0YXJ0cyByZXBvcnRpbmcgR0xfT1VUX09GX01FTU9SWSBwcm9wZXJseSBvbiBPU1guCi0g
ICAgICAgICAgICBpZiAoIWNoZWNrQnVmZmVySW50ZWdyaXR5KCkpIHsKLSAgICAgICAgICAgICAg
ICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIH0gd2hpbGUgKCFhZGp1c3RlZFNpemUuaXNFbXB0eSgpKTsKLQotICAg
ICAgICBwaXhlbERlbHRhID0gbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAg
ICAgIHBpeGVsRGVsdGEgLT0gb2xkU2l6ZTsKLSAgICAgICAgc19jdXJyZW50UmVzb3VyY2VVc2VQ
aXhlbHMgKz0gcGl4ZWxEZWx0YTsKLQotICAgICAgICBpZiAoIW5ld1NpemUuaXNFbXB0eSgpICYm
IGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5j
bGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRy
dWUsIHRydWUsIHRydWUpOwotCi0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7
Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBtX2NvbnRl
eHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkg
ewotICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZG
RkZGRkYpOwotICAgIH0KLQotICAgIGNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpjb21taXQobG9uZyB4LCBs
b25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KQotewotICAgIGlmICghbV9jb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAod2lkdGggPCAwKQotICAgICAgICB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwotICAgIGlmIChoZWlnaHQgPCAwKQotICAgICAgICBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsK
LSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSAgICAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCk7Ci0KLSAgICAgICAgLy8gVXNlIE5FQVJFU1QsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2NhbGUg
cGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KLSAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1QpOwotCi0gICAgICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQotICAgICAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7
Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzdG9y
ZUZyYW1lYnVmZmVyQmluZGluZygpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5k
aW5nKTsKLX0KLQotYm9vbCBEcmF3aW5nQnVmZmVyOjptdWx0aXNhbXBsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCku
YW50aWFsaWFzICYmIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7Ci19Ci0KLXZvaWQg
RHJhd2luZ0J1ZmZlcjo6ZGlzY2FyZFJlc291cmNlcygpCi17Ci0gICAgbV9jb2xvckJ1ZmZlciA9
IDA7Ci0gICAgbV9mcm9udENvbG9yQnVmZmVyID0gMDsKLSAgICBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgPSAwOwotCi0gICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOwotICAgIG1fZGVwdGhC
dWZmZXIgPSAwOwotCi0gICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKLQotICAgIG1fbXVsdGlzYW1w
bGVGQk8gPSAwOwotICAgIG1fZmJvID0gMDsKLX0KLQotdm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5k
KCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyMmQ5ZDRiZjUyMDgyZjZhNjFjYWY2ZjQ4Y2RmYWY4MjA5MjZjNmI4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIERyYXdpbmdCdWZmZXJfaAotI2RlZmluZSBEcmF3aW5nQnVmZmVyX2gK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIK
LQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKLQotLy8gTWFuYWdlcyBhIHJlbmRlcmluZyB0YXJnZXQgKGZy
YW1lYnVmZmVyICsgYXR0YWNobWVudCkgZm9yIGEgY2FudmFzLiAgQ2FuIHB1Ymxpc2ggaXRzIHJl
bmRlcmluZwotLy8gcmVzdWx0cyB0byBhIFBsYXRmb3JtTGF5ZXIgZm9yIGNvbXBvc2l0aW5nLgot
Y2xhc3MgRHJhd2luZ0J1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPERyYXdpbmdCdWZmZXI+IHsK
LXB1YmxpYzoKLSAgICBlbnVtIFByZXNlcnZlRHJhd2luZ0J1ZmZlciB7Ci0gICAgICAgIFByZXNl
cnZlLAotICAgICAgICBEaXNjYXJkCi0gICAgfTsKLQotICAgIGVudW0gQWxwaGFSZXF1aXJlbWVu
dCB7Ci0gICAgICAgIEFscGhhLAotICAgICAgICBPcGFxdWUKLSAgICB9OwotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29u
c3QgSW50U2l6ZSYsIFByZXNlcnZlRHJhd2luZ0J1ZmZlciwgQWxwaGFSZXF1aXJlbWVudCk7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi0gICAgfkRyYXdpbmdCdWZmZXIo
KTsKLQotICAgIC8vIElzc3VlcyBhIGdsQ2xlYXIoKSBvbiBhbGwgZnJhbWVidWZmZXJzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIERyYXdpbmdCdWZmZXIuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUg
Zm9yCi0gICAgLy8gbWFraW5nIHRoZSBjb250ZXh0IGN1cnJlbnQgYW5kIHNldHRpbmcgdGhlIGNs
ZWFyIHZhbHVlcyBhbmQgbWFza3MuIE1vZGlmaWVzIHRoZSBmcmFtZWJ1ZmZlciBiaW5kaW5nLgot
ICAgIHZvaWQgY2xlYXJGcmFtZWJ1ZmZlcnMoR0MzRGJpdGZpZWxkIGNsZWFyTWFzayk7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlc2l6ZWQu
Ci0gICAgYm9vbCByZXNldChjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCBiaW5kKCk7Ci0gICAg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBjb2xvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JCdWZmZXI7IH0KLQotICAg
IC8vIENsZWFyIGFsbCByZXNvdXJjZXMgZnJvbSB0aGlzIG9iamVjdCwgYXMgd2VsbCBhcyBjb250
ZXh0LiBDYWxsZWQgd2hlbiBjb250ZXh0IGlzIGRlc3Ryb3llZAotICAgIC8vIHRvIHByZXZlbnQg
aW52YWxpZCBhY2Nlc3NlcyB0byB0aGUgcmVzb3VyY2VzLgotICAgIHZvaWQgY2xlYXIoKTsKLQot
ICAgIC8vIENyZWF0ZSB0aGUgZGVwdGgvc3RlbmNpbCBhbmQgbXVsdGlzYW1wbGUgYnVmZmVycywg
aWYgbmVlZGVkLgotICAgIHZvaWQgY3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpOwotICAgIAotICAg
IHZvaWQgcmVzaXplRGVwdGhTdGVuY2lsKGludCBzYW1wbGVDb3VudCk7Ci0KLSAgICAvLyBDb3Bp
ZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZl
ciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCi0gICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9u
ZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKLQotICAgIC8vIGNv
bW1pdCBzaG91bGQgY29weSB0aGUgZnVsbCBtdWx0aXNhbXBsZSBidWZmZXIsIGFuZCBub3QgcmVz
cGVjdCB0aGUKLSAgICAvLyBjdXJyZW50IHNjaXNzb3IgYm91bmRzLiBUcmFjayB0aGUgc3RhdGUg
b2YgdGhlIHNjaXNzb3IgdGVzdCBzbyB0aGF0IGl0Ci0gICAgLy8gY2FuIGJlIGRpc2FibGVkIGR1
cmluZyBjYWxscyB0byBjb21taXQuCi0gICAgdm9pZCBzZXRTY2lzc29yRW5hYmxlZChib29sIHNj
aXNzb3JFbmFibGVkKSB7IG1fc2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsgfQotCi0g
ICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgbmVlZHMgdG8gdHJhY2sgdGhlIHRleHR1cmUgYm91bmQg
dG8gdGV4dHVyZSB1bml0IDAuCi0gICAgLy8gVGhlIGJvdW5kIHRleHR1cmUgaXMgdHJhY2tlZCB0
byBhdm9pZCBjb3N0bHkgcXVlcmllcyBkdXJpbmcgcmVuZGVyaW5nLgotICAgIHZvaWQgc2V0VGV4
dHVyZTJEQmluZGluZyhQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpIHsgbV90ZXh0dXJlMkRCaW5k
aW5nID0gdGV4dHVyZTsgfQotCi0gICAgLy8gVGhlIERyYXdpbmdCdWZmZXIgbmVlZHMgdG8gdHJh
Y2sgdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciBzbyBpdAotICAgIC8vIHJlc3RvcmUg
dGhlIGJpbmRpbmcgd2hlbiBuZWVkZWQuCi0gICAgdm9pZCBzZXRGcmFtZWJ1ZmZlckJpbmRpbmco
UGxhdGZvcm0zRE9iamVjdCBmYm8pIHsgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBmYm87IH0KLQot
ICAgIC8vIEJpbmQgdG8gdGhlIG1fZnJhbWVidWZmZXJCaW5kaW5nIGlmIGl0J3Mgbm90IDAuCi0g
ICAgdm9pZCByZXN0b3JlRnJhbWVidWZmZXJCaW5kaW5nKCk7Ci0KLSAgICAvLyBUcmFjayB0aGUg
Y3VycmVudGx5IGFjdGl2ZSB0ZXh0dXJlIHVuaXQuIFRleHR1cmUgdW5pdCAwIGlzIHVzZWQgYXMg
aG9zdCBmb3IgYSBzY3JhdGNoCi0gICAgLy8gdGV4dHVyZS4KLSAgICB2b2lkIHNldEFjdGl2ZVRl
eHR1cmVVbml0KEdDM0RpbnQgdGV4dHVyZVVuaXQpIHsgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRl
eHR1cmVVbml0OyB9Ci0KLSAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3Q7Ci0KLSAgICBQbGF0
Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKCkgY29uc3Q7Ci0KLSAgICAvLyBJbW1lZGlhdGVseSBy
ZWxlYXNlcyBvd25lcnNoaXAgb2YgYWxsIHJlc291cmNlcy4gQ2FsbCB1cG9uIGxvc3Mgb2YgdGhl
Ci0gICAgLy8gZ3JhcGhpY3MgY29udGV4dCB0byBwcmV2ZW50IGZyZWVpbmcgaW52YWxpZCByZXNv
dXJjZXMuCi0gICAgdm9pZCBkaXNjYXJkUmVzb3VyY2VzKCk7Ci0KLSAgICB2b2lkIG1hcmtDb250
ZW50c0NoYW5nZWQoKSB7IG1fY29udGVudHNDaGFuZ2VkID0gdHJ1ZTsgfQotCi0gICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpOwotICAgIHVuc2lnbmVkIGZyb250Q29sb3JCdWZmZXIo
KSBjb25zdDsKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCBib29sIG11bHRpc2FtcGxl
RXh0ZW5zaW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIFByZXNlcnZlRHJhd2luZ0J1ZmZlciwgQWxwaGFSZXF1
aXJlbWVudCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYpOwotCi0gICAg
Ym9vbCBjaGVja0J1ZmZlckludGVncml0eSgpOwotCi0gICAgUHJlc2VydmVEcmF3aW5nQnVmZmVy
IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyOwotICAgIEFscGhhUmVxdWlyZW1lbnQgbV9hbHBoYTsK
LSAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3RleHR1
cmUyREJpbmRpbmc7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYW1lYnVmZmVyQmluZGluZzsK
LSAgICBHQzNEZW51bSBtX2FjdGl2ZVRleHR1cmVVbml0OwotCi0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX211
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOwotICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2Zy
b250Q29sb3JCdWZmZXI7Ci0gICAgYm9vbCBtX3NlcGFyYXRlRnJvbnRUZXh0dXJlOwotCi0gICAg
Ly8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwuCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKLQotICAgIC8vIFRoZXNl
IGFyZSB1c2VkIHdoZW4gd2UgZG9uJ3QuCi0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoQnVm
ZmVyOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9zdGVuY2lsQnVmZmVyOwotCi0gICAgLy8gRm9y
IG11bHRpc2FtcGxpbmcKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7Ci0KLSAgICAvLyBU
cnVlIGlmIG91ciBjb250ZW50cyBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgcHJl
c2VudGF0aW9uIG9mIHRoaXMgYnVmZmVyLgotICAgIGJvb2wgbV9jb250ZW50c0NoYW5nZWQ7Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV9wbGF0Zm9y
bUxheWVyOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBEcmF3aW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjcyYjRkNzNhYTZiYTMzOTBhNGUzZDM3YTcxY2E0MzJhMWI3N2YzMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJMb29wQmxpbm5D
bGFzc2lmaWVyLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmFwcHJveEVxdWFsOwot
dXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpyb3VuZFRvWmVybzsKLQotTG9vcEJsaW5uQ2xhc3Np
Zmllcjo6UmVzdWx0IExvb3BCbGlubkNsYXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9p
bnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGMzKQotewotICAgIC8vIENvbnN1bHQgdGhlIGNoYXB0ZXIgZm9y
IHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZm9sbG93aW5nCi0gICAgLy8gKHRlcnNlKSB2YXJpYWJs
ZSBuYW1lcy4gTm90ZSB0aGF0IHRoZSBiMC4uYjMgY29vcmRpbmF0ZXMgYXJlCi0gICAgLy8gaG9t
b2dlbmVvdXMsIHNvIHRoZSAieiIgdmFsdWUgKGFjdHVhbGx5IHRoZSB3IGNvb3JkaW5hdGUpIG11
c3QKLSAgICAvLyBiZSAxLjAuCi0gICAgRmxvYXRQb2ludDNEIGIwKGMwLngoKSwgYzAueSgpLCAx
LjBmKTsKLSAgICBGbG9hdFBvaW50M0QgYjEoYzEueCgpLCBjMS55KCksIDEuMGYpOwotICAgIEZs
b2F0UG9pbnQzRCBiMihjMi54KCksIGMyLnkoKSwgMS4wZik7Ci0gICAgRmxvYXRQb2ludDNEIGIz
KGMzLngoKSwgYzMueSgpLCAxLjBmKTsKLQotICAgIC8vIENvbXB1dGUgYTEuLmEzLgotICAgIGZs
b2F0IGExID0gYjAgKiBiMy5jcm9zcyhiMik7Ci0gICAgZmxvYXQgYTIgPSBiMSAqIGIwLmNyb3Nz
KGIzKTsKLSAgICBmbG9hdCBhMyA9IGIyICogYjEuY3Jvc3MoYjApOwotCi0gICAgLy8gQ29tcHV0
ZSBkMS4uZDMuCi0gICAgZmxvYXQgZDEgPSBhMSAtIDIgKiBhMiArIDMgKiBhMzsKLSAgICBmbG9h
dCBkMiA9IC1hMiArIDMgKiBhMzsKLSAgICBmbG9hdCBkMyA9IDMgKiBhMzsKLQotICAgIC8vIEV4
cGVyaW1lbnRhdGlvbiBoYXMgc2hvd24gdGhhdCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBjb21w
dXRlZAotICAgIC8vIGZyb20gdGhlc2UgdmFsdWVzIHF1aWNrbHkgYmVjb21lIGh1Z2UsIGxlYWRp
bmcgdG8gcm91bmRvZmYgZXJyb3JzCi0gICAgLy8gYW5kIGFydGlmYWN0cyBpbiB0aGUgc2hhZGVy
LiBJdCB0dXJucyBvdXQgdGhhdCBpZiB3ZSBub3JtYWxpemUKLSAgICAvLyB0aGUgdmVjdG9yIGRl
ZmluZWQgYnkgKGQxLCBkMiwgZDMpLCB0aGlzIGZpeGVzIHRoZSBwcm9ibGVtIG9mIHRoZQotICAg
IC8vIHRleHR1cmUgY29vcmRpbmF0ZXMgZ2V0dGluZyB0b28gbGFyZ2Ugd2l0aG91dCBhZmZlY3Rp
bmcgdGhlCi0gICAgLy8gY2xhc3NpZmljYXRpb24gcmVzdWx0cy4KLSAgICBGbG9hdFBvaW50M0Qg
bmQoZDEsIGQyLCBkMyk7Ci0gICAgbmQubm9ybWFsaXplKCk7Ci0gICAgZDEgPSBuZC54KCk7Ci0g
ICAgZDIgPSBuZC55KCk7Ci0gICAgZDMgPSBuZC56KCk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBk
aXNjcmltaW5hbnQuCi0gICAgLy8gdGVybTAgaXMgYSBjb21tb24gdGVybSBpbiB0aGUgY29tcHV0
YXRpb24gd2hpY2ggaGVscHMgZGVjaWRlCi0gICAgLy8gd2hpY2ggd2F5IHRvIGNsYXNzaWZ5IHRo
ZSBjdXNwIGNhc2U6IGFzIHNlcnBlbnRpbmUgb3IgbG9vcC4KLSAgICBmbG9hdCB0ZXJtMCA9ICgz
ICogZDIgKiBkMiAtIDQgKiBkMSAqIGQzKTsKLSAgICBmbG9hdCBkaXNjcmltaW5hbnQgPSBkMSAq
IGQxICogdGVybTA7Ci0KLSAgICAvLyBFeHBlcmltZW50YXRpb24gaGFzIGFsc28gc2hvd24gdGhh
dCB3aGVuIHRoZSBjbGFzc2lmaWNhdGlvbiBpcwotICAgIC8vIG5lYXIgdGhlIGJvdW5kYXJ5IGJl
dHdlZW4gb25lIGN1cnZlIHR5cGUgYW5kIGFub3RoZXIsIHRoZSBzaGFkZXIKLSAgICAvLyBiZWNv
bWVzIG51bWVyaWNhbGx5IHVuc3RhYmxlLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgY3VzcCBjYXNl
LgotICAgIC8vIENvcnJlY3QgZm9yIHRoaXMgYnkgcm91bmRpbmcgZDEuLmQzIGFuZCB0aGUgZGlz
Y3JpbWluYW50IHRvIHplcm8KLSAgICAvLyB3aGVuIHRoZXkgZ2V0IG5lYXIgaXQuCi0gICAgZDEg
PSByb3VuZFRvWmVybyhkMSk7Ci0gICAgZDIgPSByb3VuZFRvWmVybyhkMik7Ci0gICAgZDMgPSBy
b3VuZFRvWmVybyhkMyk7Ci0gICAgZGlzY3JpbWluYW50ID0gcm91bmRUb1plcm8oZGlzY3JpbWlu
YW50KTsKLQotICAgIC8vIERvIHRoZSBjbGFzc2lmaWNhdGlvbi4KLSAgICBpZiAoYXBwcm94RXF1
YWwoYjAsIGIxKSAmJiBhcHByb3hFcXVhbChiMCwgYjIpICYmIGFwcHJveEVxdWFsKGIwLCBiMykp
Ci0gICAgICAgIHJldHVybiBSZXN1bHQoa1BvaW50LCBkMSwgZDIsIGQzKTsKLQotICAgIGlmICgh
ZGlzY3JpbWluYW50KSB7Ci0gICAgICAgIGlmICghZDEgJiYgIWQyKSB7Ci0gICAgICAgICAgICBp
ZiAoIWQzKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQoa0xpbmUsIGQxLCBkMiwgZDMp
OwotICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrUXVhZHJhdGljLCBkMSwgZDIsIGQzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghZDEpCi0gICAgICAgICAgICByZXR1cm4gUmVzdWx0KGtD
dXNwLCBkMSwgZDIsIGQzKTsKLQotICAgICAgICAvLyBUaGlzIGlzIHRoZSBib3VuZGFyeSBjYXNl
IGRlc2NyaWJlZCBpbiBMb29wIGFuZCBCbGlubidzCi0gICAgICAgIC8vIFNJR0dSQVBIICcwNSBw
YXBlciBvZiBhIGN1c3Agd2l0aCBpbmZsZWN0aW9uIGF0IGluZmluaXR5LgotICAgICAgICAvLyBC
ZWNhdXNlIHRlcm0wIG1pZ2h0IG5vdCBiZSBleGFjdGx5IDAsIHdlIGRlY2lkZSBiZXR3ZWVuIHVz
aW5nCi0gICAgICAgIC8vIHRoZSBzZXJwZW50aW5lIGFuZCBsb29wIGNhc2VzIGRlcGVuZGluZyBv
biBpdHMgc2lnbiB0byBhdm9pZAotICAgICAgICAvLyB0YWtpbmcgdGhlIHNxdWFyZSByb290IG9m
IGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gY29tcHV0aW5nIHRoZQotICAgICAgICAvLyBjdWJpYyB0
ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICBpZiAodGVybTAgPCAwKQotICAgICAgICAgICAg
cmV0dXJuIFJlc3VsdChrTG9vcCwgZDEsIGQyLCBkMyk7Ci0KLSAgICAgICAgcmV0dXJuIFJlc3Vs
dChrU2VycGVudGluZSwgZDEsIGQyLCBkMyk7Ci0gICAgfQotCi0gICAgaWYgKGRpc2NyaW1pbmFu
dCA+IDApCi0gICAgICAgIHJldHVybiBSZXN1bHQoa1NlcnBlbnRpbmUsIGQxLCBkMiwgZDMpOwot
Ci0gICAgLy8gZGlzY3JpbWluYW50IDwgMAotICAgIHJldHVybiBSZXN1bHQoa0xvb3AsIGQxLCBk
MiwgZDMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZp
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFz
c2lmaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNzE4MWI0YmQwMzhkMmRl
NjliMGQ1Y2FlNDgxNzJkYjRmODRjNzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlubkNsYXNzaWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBDdWJpYyBjdXJ2ZSBjbGFzc2lmaWNhdGlvbiBhbGdvcml0aG0gZnJvbSAiUmVuZGVyaW5nIFZl
Y3RvciBBcnQgb24KLS8vIHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBD
aGFwdGVyIDI1OgotLy8gaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczMv
Z3B1Z2VtczNfY2gyNS5odG1sIC4KLQotI2lmbmRlZiBMb29wQmxpbm5DbGFzc2lmaWVyX2gKLSNk
ZWZpbmUgTG9vcEJsaW5uQ2xhc3NpZmllcl9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotCi0vLyBDbGFz
c2lmaWVzIGN1YmljIGN1cnZlcyBpbnRvIHNwZWNpZmljIHR5cGVzLgotY2xhc3MgTG9vcEJsaW5u
Q2xhc3NpZmllciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9vcEJsaW5uQ2xhc3NpZmll
cik7Ci1wdWJsaWM6Ci0gICAgLy8gVGhlIHR5cGVzIG9mIGN1YmljIGN1cnZlcy4KLSAgICBlbnVt
IEN1cnZlVHlwZSB7Ci0gICAgICAgIGtTZXJwZW50aW5lLAotICAgICAgICBrQ3VzcCwKLSAgICAg
ICAga0xvb3AsCi0gICAgICAgIGtRdWFkcmF0aWMsCi0gICAgICAgIGtMaW5lLAotICAgICAgICBr
UG9pbnQKLSAgICB9OwotCi0gICAgLy8gVGhlIHJlc3VsdCBvZiB0aGUgY2xhc3NpZmllci4KLSAg
ICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlc3VsdChDdXJ2ZVR5cGUg
aW5wdXRDdXJ2ZVR5cGUsIGZsb2F0IGlucHV0RDEsIGZsb2F0IGlucHV0RDIsIGZsb2F0IGlucHV0
RDMpCi0gICAgICAgICAgICA6IGN1cnZlVHlwZShpbnB1dEN1cnZlVHlwZSkKLSAgICAgICAgICAg
ICwgZDEoaW5wdXREMSkKLSAgICAgICAgICAgICwgZDIoaW5wdXREMikKLSAgICAgICAgICAgICwg
ZDMoaW5wdXREMykgeyB9Ci0KLSAgICAgICAgQ3VydmVUeXBlIGN1cnZlVHlwZTsKLQotICAgICAg
ICAvLyBUaGVzZSBhcmUgY29lZmZpY2llbnRzIHVzZWQgbGF0ZXIgaW4gdGhlIGNvbXB1dGF0aW9u
IG9mCi0gICAgICAgIC8vIHRleHR1cmUgY29vcmRpbmF0ZXMgcGVyIHZlcnRleC4KLSAgICAgICAg
ZmxvYXQgZDE7Ci0gICAgICAgIGZsb2F0IGQyOwotICAgICAgICBmbG9hdCBkMzsKLSAgICB9Owot
Ci0gICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2ZW4gY3ViaWMgYmV6aWVyIGN1cnZlIHN0YXJ0aW5n
IGF0IGMwLCBlbmRpbmcKLSAgICAvLyBhdCBjMywgYW5kIGFmZmVjdGVkIGJ5IGNvbnRyb2wgcG9p
bnRzIGMxIGFuZCBjMi4KLSAgICBzdGF0aWMgUmVzdWx0IGNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9p
bnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMzKTsKLQotcHJpdmF0ZToK
LSAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFudGlhdGVkLgotICAg
IExvb3BCbGlubkNsYXNzaWZpZXIoKSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIExvb3BCbGlubkNsYXNzaWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNvbnN0YW50cy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNvbnN0YW50cy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTk3ZDlmMzhhYzc0YTEwNGE1NjUwNjFjNDM1NzM4
NzhmMTk0YWZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25zdGFudHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExvb3BCbGlu
bkNvbnN0YW50c19oCi0jZGVmaW5lIExvb3BCbGlubkNvbnN0YW50c19oCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLW5hbWVzcGFjZSBMb29wQmxpbm5Db25zdGFudHMgewotCi1lbnVtIEZpbGxTaWRl
IHsKLSAgICBMZWZ0U2lkZSwKLSAgICBSaWdodFNpZGUKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIExv
b3BCbGlubkNvbnN0YW50cwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTG9v
cEJsaW5uQ29uc3RhbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3YTY3MmYwMmM1ZmI3ZjY5YjExNjA4OWY0
ZWQ5ODI5OWNiYTJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRy
aWFuZ3VsYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0K
LSNpbmNsdWRlICJMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oIgotCi0jaW5jbHVkZSAiTG9v
cEJsaW5uTWF0aFV0aWxzLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6YXBwcm94RXF1YWw7Ci11c2luZyBM
b29wQmxpbm5NYXRoVXRpbHM6OmxpbmVzSW50ZXJzZWN0OwotdXNpbmcgTG9vcEJsaW5uTWF0aFV0
aWxzOjpwb2ludEluVHJpYW5nbGU7Ci0KLWJvb2wgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6
OlRyaWFuZ2xlOjpjb250YWlucyhMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VmVydGV4KiB2
KQotewotICAgIHJldHVybiBpbmRleEZvclZlcnRleCh2KSA+PSAwOwotfQotCi1Mb29wQmxpbm5M
b2NhbFRyaWFuZ3VsYXRvcjo6VmVydGV4KiBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VHJp
YW5nbGU6Om5leHRWZXJ0ZXgoTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlZlcnRleCogY3Vy
cmVudCwgYm9vbCB0cmF2ZXJzZUNvdW50ZXJDbG9ja3dpc2UpCi17Ci0gICAgaW50IGluZGV4ID0g
aW5kZXhGb3JWZXJ0ZXgoY3VycmVudCk7Ci0gICAgQVNTRVJUKGluZGV4ID49IDApOwotICAgIGlm
ICh0cmF2ZXJzZUNvdW50ZXJDbG9ja3dpc2UpCi0gICAgICAgICsraW5kZXg7Ci0gICAgZWxzZQot
ICAgICAgICAtLWluZGV4OwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4ICs9IDM7
Ci0gICAgZWxzZQotICAgICAgICBpbmRleCA9IGluZGV4ICUgMzsKLSAgICByZXR1cm4gbV92ZXJ0
aWNlc1tpbmRleF07Ci19Ci0KLWludCBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VHJpYW5n
bGU6OmluZGV4Rm9yVmVydGV4KExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpWZXJ0ZXgqIHZl
cnRleCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKG1f
dmVydGljZXNbaV0gPT0gdmVydGV4KQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgcmV0dXJu
IC0xOwotfQotCi12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlhbmdsZTo6bWFr
ZUNvdW50ZXJDbG9ja3dpc2UoKQotewotICAgIC8vIFBvc3NpYmx5IHN3YXBzIHR3byB2ZXJ0aWNl
cyBzbyB0aGF0IHRoZSB0cmlhbmdsZSdzIHZlcnRpY2VzIGFyZQotICAgIC8vIGFsd2F5cyBzcGVj
aWZpZWQgaW4gY291bnRlcmNsb2Nrd2lzZSBvcmRlci4gVGhpcyBvcmRlcnMgdGhlCi0gICAgLy8g
dmVydGljZXMgY2Fub25pY2FsbHkgd2hlbiB3YWxraW5nIHRoZSBpbnRlcmlvciBlZGdlcyBmcm9t
IHRoZQotICAgIC8vIHN0YXJ0IHRvIHRoZSBlbmQgdmVydGV4LgotICAgIEZsb2F0UG9pbnQzRCBw
b2ludDAobV92ZXJ0aWNlc1swXS0+eHlDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFBvaW50M0Qg
cG9pbnQxKG1fdmVydGljZXNbMV0tPnh5Q29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRQb2ludDNE
IHBvaW50MihtX3ZlcnRpY2VzWzJdLT54eUNvb3JkaW5hdGVzKCkpOwotICAgIEZsb2F0UG9pbnQz
RCBjcm9zc1Byb2R1Y3QgPSAocG9pbnQxIC0gcG9pbnQwKS5jcm9zcyhwb2ludDIgLSBwb2ludDAp
OwotICAgIGlmIChjcm9zc1Byb2R1Y3QueigpIDwgMCkKLSAgICAgICAgc3RkOjpzd2FwKG1fdmVy
dGljZXNbMV0sIG1fdmVydGljZXNbMl0pOwotfQotCi1Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
cjo6TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IoKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLXZv
aWQgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OnJlc2V0KCkKLXsKLSAgICBtX251bWJlck9m
VHJpYW5nbGVzID0gMDsKLSAgICBtX251bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyA9IDA7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgbV9pbnRlcmlvclZlcnRpY2Vz
W2ldID0gMDsKLSAgICAgICAgbV92ZXJ0aWNlc1tpXS5yZXNldEZsYWdzKCk7Ci0gICAgfQotfQot
Ci12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjp0cmlhbmd1bGF0ZShJbnNpZGVFZGdl
Q29tcHV0YXRpb24gY29tcHV0ZUluc2lkZUVkZ2VzLCBMb29wQmxpbm5Db25zdGFudHM6OkZpbGxT
aWRlIHNpZGVUb0ZpbGwpCi17Ci0gICAgdHJpYW5ndWxhdGVIZWxwZXIoc2lkZVRvRmlsbCk7Ci0K
LSAgICBpZiAoY29tcHV0ZUluc2lkZUVkZ2VzID09IENvbXB1dGVJbnNpZGVFZGdlcykgewotICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgd2hpY2ggdmVydGljZXMgZGVzY3JpYmUgdGhlIHBh
dGggYWxvbmcgdGhlCi0gICAgICAgIC8vIGludGVyaW9yIHBvcnRpb24gb2YgdGhlIHNoYXBlLCB0
byBmZWVkIHRoZXNlIHZlcnRpY2VzIHRvIHRoZQotICAgICAgICAvLyBtb3JlIGdlbmVyYWwgdGVz
c2VsbGF0aW9uIGFsZ29yaXRobS4gSXQgaXMgcG9zc2libGUgdGhhdCB3ZQotICAgICAgICAvLyBj
b3VsZCBkZXRlcm1pbmUgdGhpcyBkaXJlY3RseSB3aGlsZSBwcm9kdWNpbmcgdHJpYW5nbGVzIGFi
b3ZlLgotICAgICAgICAvLyBIZXJlIHdlIHRyeSB0byBkbyBpdCBnZW5lcmFsbHkganVzdCBieSBl
eGFtaW5pbmcgdGhlIHRyaWFuZ2xlcwotICAgICAgICAvLyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVu
IHByb2R1Y2VkLiBXZSB3YWxrIGFyb3VuZCB0aGVtIGluIGEKLSAgICAgICAgLy8gc3BlY2lmaWMg
ZGlyZWN0aW9uIGRldGVybWluZWQgYnkgd2hpY2ggc2lkZSBvZiB0aGUgY3VydmUgaXMKLSAgICAg
ICAgLy8gYmVpbmcgZmlsbGVkLiBXZSBpZ25vcmUgdGhlIGludGVyaW9yIHZlcnRleCB1bmxlc3Mg
aXQgaXMgYWxzbwotICAgICAgICAvLyB0aGUgZW5kaW5nIHZlcnRleCwgYW5kIHNraXAgdGhlIGVk
Z2VzIHNoYXJlZCBiZXR3ZWVuIHR3bwotICAgICAgICAvLyB0cmlhbmdsZXMuCi0gICAgICAgIFZl
cnRleCogdiA9ICZtX3ZlcnRpY2VzWzBdOwotICAgICAgICBhZGRJbnRlcmlvclZlcnRleCh2KTsK
LSAgICAgICAgaW50IG51bVN0ZXBzID0gMDsKLSAgICAgICAgd2hpbGUgKCF2LT5lbmQoKSAmJiBu
dW1TdGVwcyA8IDQpIHsKLSAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgdmVydGV4IGFjY29y
ZGluZyB0byB0aGUgYWJvdmUgcnVsZXMKLSAgICAgICAgICAgIGJvb2wgZ290TmV4dCA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlRyaWFuZ2xlcygpICYm
ICFnb3ROZXh0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBUcmlhbmdsZSogdHJpID0gZ2V0VHJp
YW5nbGUoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyaS0+Y29udGFpbnModikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVmVydGV4KiBuZXh0ID0gdHJpLT5uZXh0VmVydGV4KHYsIHNpZGVUb0Zp
bGwgPT0gTG9vcEJsaW5uQ29uc3RhbnRzOjpSaWdodFNpZGUpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5leHQtPm1hcmtlZCgpICYmICFpc1NoYXJlZEVkZ2UodiwgbmV4dCkgJiYgKCFuZXh0
LT5pbnRlcmlvcigpIHx8IG5leHQtPmVuZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkSW50ZXJpb3JWZXJ0ZXgobmV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gbmV4
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiBmb3IgbG9vcAotICAg
ICAgICAgICAgICAgICAgICAgICAgZ290TmV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK251bVN0
ZXBzOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdi0+ZW5kKCkpIHsKLSAgICAgICAgICAgIC8v
IFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGFib3ZlIGFsZ29yaXRobTsgYWRkIHRoZSBs
YXN0Ci0gICAgICAgICAgICAvLyB2ZXJ0ZXggdG8gdGhlIGludGVyaW9yIHZlcnRpY2VzIGFueXdh
eS4gKEZJWE1FOiBzaG91bGQgd2UKLSAgICAgICAgICAgIC8vIGFkZCBhbiBhc3NlcnQgaGVyZSBh
bmQgZG8gbW9yZSBleHRlbnNpdmUgdGVzdGluZz8pCi0gICAgICAgICAgICBhZGRJbnRlcmlvclZl
cnRleCgmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTG9vcEJs
aW5uTG9jYWxUcmlhbmd1bGF0b3I6OnRyaWFuZ3VsYXRlSGVscGVyKExvb3BCbGlubkNvbnN0YW50
czo6RmlsbFNpZGUgc2lkZVRvRmlsbCkKLXsKLSAgICByZXNldCgpOwotCi0gICAgbV92ZXJ0aWNl
c1szXS5zZXRFbmQodHJ1ZSk7Ci0KLSAgICAvLyBGaXJzdCB0ZXN0IGZvciBkZWdlbmVyYXRlIGNh
c2VzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGZvciAoaW50
IGogPSBpICsgMTsgaiA8IDQ7ICsraikgewotICAgICAgICAgICAgaWYgKGFwcHJveEVxdWFsKG1f
dmVydGljZXNbaV0ueHlDb29yZGluYXRlcygpLCBtX3ZlcnRpY2VzW2pdLnh5Q29vcmRpbmF0ZXMo
KSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUd28gb2YgdGhlIHZlcnRpY2VzIGFyZSBjb2luY2lk
ZW50LCBzbyB3ZSBjYW4gZWxpbWluYXRlIGF0Ci0gICAgICAgICAgICAgICAgLy8gbGVhc3Qgb25l
IHRyaWFuZ2xlLiBXZSBtaWdodCBiZSBhYmxlIHRvIGVsaW1pbmF0ZSB0aGUgb3RoZXIKLSAgICAg
ICAgICAgICAgICAvLyBhcyB3ZWxsLCBidXQgdGhpcyBzZWVtcyBzdWZmaWNpZW50IHRvIGF2b2lk
IGRlZ2VuZXJhdGUKLSAgICAgICAgICAgICAgICAvLyB0cmlhbmd1bGF0aW9ucy4KLSAgICAgICAg
ICAgICAgICBpbnQgaW5kaWNlc1szXSA9IHsgMCB9OwotICAgICAgICAgICAgICAgIGludCBpbmRl
eCA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyArK2spCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChrICE9IGopCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRp
Y2VzW2luZGV4KytdID0gazsKLSAgICAgICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNl
c1tpbmRpY2VzWzBdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbV92ZXJ0aWNlc1tp
bmRpY2VzWzFdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbV92ZXJ0aWNlc1tpbmRp
Y2VzWzJdXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU2VlIHdoZXRoZXIgYW55IG9mIHRoZSBwb2ludHMgYXJlIGZ1
bGx5IGNvbnRhaW5lZCBpbiB0aGUKLSAgICAvLyB0cmlhbmdsZSBkZWZpbmVkIGJ5IHRoZSBvdGhl
ciB0aHJlZS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBpbnQg
aW5kaWNlc1szXSA9IHsgMCB9OwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDQ7ICsraikKLSAgICAgICAgICAgIGlmIChpICE9IGopCi0gICAgICAg
ICAgICAgICAgaW5kaWNlc1tpbmRleCsrXSA9IGo7Ci0gICAgICAgIGlmIChwb2ludEluVHJpYW5n
bGUobV92ZXJ0aWNlc1tpXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV92ZXJ0aWNlc1tpbmRpY2VzWzBdXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1tpbmRpY2VzWzFdXS54eUNvb3JkaW5hdGVzKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1tpbmRpY2VzWzJdXS54eUNv
b3JkaW5hdGVzKCkpKSB7Ci0gICAgICAgICAgICAvLyBQcm9kdWNlIHRocmVlIHRyaWFuZ2xlcyBz
dXJyb3VuZGluZyB0aGlzIGludGVyaW9yIHZlcnRleC4KLSAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgMzsgKytqKQotICAgICAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2Vz
W2luZGljZXNbaiAlIDNdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbV92ZXJ0aWNl
c1tpbmRpY2VzWyhqICsgMSkgJSAzXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1f
dmVydGljZXNbaV0pOwotICAgICAgICAgICAgLy8gTWFyayB0aGUgaW50ZXJpb3IgdmVydGV4IHNv
IHdlIGlnbm9yZSBpdCBpZiB0cnlpbmcgdG8gdHJhY2UKLSAgICAgICAgICAgIC8vIHRoZSBpbnRl
cmlvciBlZGdlLgotICAgICAgICAgICAgbV92ZXJ0aWNlc1tpXS5zZXRJbnRlcmlvcih0cnVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZXJlIGFy
ZSBvbmx5IGEgZmV3IHBlcm11dGF0aW9ucyBvZiB0aGUgdmVydGljZXMsIGlnbm9yaW5nCi0gICAg
Ly8gcm90YXRpb25zLCB3aGljaCBhcmUgaXJyZWxldmFudDoKLSAgICAvLwotICAgIC8vICAwLS0z
ICAwLS0yICAwLS0zICAwLS0xICAwLS0yICAwLS0xCi0gICAgLy8gIHwgIHwgIHwgIHwgIHwgIHwg
IHwgIHwgIHwgIHwgIHwgIHwKLSAgICAvLyAgfCAgfCAgfCAgfCAgfCAgfCAgfCAgfCAgfCAgfCAg
fCAgfAotICAgIC8vICAxLS0yICAxLS0zICAyLS0xICAyLS0zICAzLS0xICAzLS0yCi0gICAgLy8K
LSAgICAvLyBOb3RlIHRoYXQgdGhyZWUgb2YgdGhlc2UgYXJlIHJlZmxlY3Rpb25zIG9mIGVhY2gg
b3RoZXIuCi0gICAgLy8gVGhlcmVmb3JlIHRoZXJlIGFyZSBvbmx5IHRocmVlIHBvc3NpYmxlIHRy
aWFuZ3VsYXRpb25zOgotICAgIC8vCi0gICAgLy8gIDAtLTMgIDAtLTIgIDAtLTMKLSAgICAvLyAg
fFwgfCAgfFwgfCAgfFwgfAotICAgIC8vICB8IFx8ICB8IFx8ICB8IFx8Ci0gICAgLy8gIDEtLTIg
IDEtLTMgIDItLTEKLSAgICAvLwotICAgIC8vIEZyb20gd2hpY2ggd2UgY2FuIGNob29zZSBieSBz
ZWVpbmcgd2hpY2ggb2YgdGhlIHBvdGVudGlhbAotICAgIC8vIGRpYWdvbmFscyBpbnRlcnNlY3Qu
IE5vdGUgdGhhdCB3ZSBjaG9vc2UgdGhlIHNob3J0ZXN0IGRpYWdvbmFsCi0gICAgLy8gdG8gc3Bs
aXQgdGhlIHF1YWQuCi0gICAgaWYgKGxpbmVzSW50ZXJzZWN0KG1fdmVydGljZXNbMF0ueHlDb29y
ZGluYXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2VzWzJdLnh5Q29vcmRp
bmF0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1sxXS54eUNvb3JkaW5h
dGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljZXNbM10ueHlDb29yZGluYXRl
cygpKSkgewotICAgICAgICBpZiAoKG1fdmVydGljZXNbMl0ueHlDb29yZGluYXRlcygpIC0gbV92
ZXJ0aWNlc1swXS54eUNvb3JkaW5hdGVzKCkpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIDwKLSAg
ICAgICAgICAgIChtX3ZlcnRpY2VzWzNdLnh5Q29vcmRpbmF0ZXMoKSAtIG1fdmVydGljZXNbMV0u
eHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSkgewotICAgICAgICAgICAg
YWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0aWNlc1sy
XSk7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNb
Ml0sICZtX3ZlcnRpY2VzWzNdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkZFRy
aWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGljZXNbM10pOwot
ICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMV0sICZtX3ZlcnRpY2VzWzJdLCAm
bV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGxpbmVzSW50ZXJzZWN0
KG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV92ZXJ0aWNlc1szXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZlcnRpY2VzWzFdLnh5Q29vcmRpbmF0ZXMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmVydGljZXNbMl0ueHlDb29yZGluYXRlcygpKSkgewotICAgICAg
ICBpZiAoKG1fdmVydGljZXNbM10ueHlDb29yZGluYXRlcygpIC0gbV92ZXJ0aWNlc1swXS54eUNv
b3JkaW5hdGVzKCkpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIDwKLSAgICAgICAgICAgIChtX3Zl
cnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSAtIG1fdmVydGljZXNbMV0ueHlDb29yZGluYXRlcygp
KS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSkgewotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1f
dmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgICAg
ICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNbM10sICZtX3ZlcnRpY2Vz
WzJdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRp
Y2VzWzBdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGljZXNbMl0pOwotICAgICAgICAgICAgYWRk
VHJpYW5nbGUoJm1fdmVydGljZXNbMl0sICZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0aWNlc1szXSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBMaW5lcyAoMC0+MSksICgyLT4z
KSBpbnRlcnNlY3QgLS0gb3Igc2hvdWxkLCBtb2R1bG8gbnVtZXJpY2FsCi0gICAgICAgIC8vIHBy
ZWNpc2lvbiBpc3N1ZXMKLSAgICAgICAgaWYgKChtX3ZlcnRpY2VzWzFdLnh5Q29vcmRpbmF0ZXMo
KSAtIG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFyZWQo
KSA8Ci0gICAgICAgICAgICAobV92ZXJ0aWNlc1szXS54eUNvb3JkaW5hdGVzKCkgLSBtX3ZlcnRp
Y2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkpIHsKLSAgICAg
ICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1syXSwgJm1fdmVy
dGljZXNbMV0pOwotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3Zl
cnRpY2VzWzFdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVydGljZXNbMl0sICZtX3ZlcnRpY2Vz
WzNdKTsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzNdLCAmbV92ZXJ0aWNl
c1syXSwgJm1fdmVydGljZXNbMV0pOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExvb3BC
bGlubkxvY2FsVHJpYW5ndWxhdG9yOjphZGRUcmlhbmdsZShWZXJ0ZXgqIHYwLCBWZXJ0ZXgqIHYx
LCBWZXJ0ZXgqIHYyKQotewotICAgIEFTU0VSVChtX251bWJlck9mVHJpYW5nbGVzIDwgMyk7Ci0g
ICAgbV90cmlhbmdsZXNbbV9udW1iZXJPZlRyaWFuZ2xlcysrXS5zZXRWZXJ0aWNlcyh2MCwgdjEs
IHYyKTsKLX0KLQotdm9pZCBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6YWRkSW50ZXJpb3JW
ZXJ0ZXgoVmVydGV4KiB2KQotewotICAgIEFTU0VSVChtX251bWJlck9mSW50ZXJpb3JWZXJ0aWNl
cyA8IDQpOwotICAgIG1faW50ZXJpb3JWZXJ0aWNlc1ttX251bWJlck9mSW50ZXJpb3JWZXJ0aWNl
cysrXSA9IHY7Ci0gICAgdi0+c2V0TWFya2VkKHRydWUpOwotfQotCi1ib29sIExvb3BCbGlubkxv
Y2FsVHJpYW5ndWxhdG9yOjppc1NoYXJlZEVkZ2UoVmVydGV4KiB2MCwgVmVydGV4KiB2MSkKLXsK
LSAgICBib29sIGhhdmVFZGdlMDEgPSBmYWxzZTsKLSAgICBib29sIGhhdmVFZGdlMTAgPSBmYWxz
ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mVHJpYW5nbGVzKCk7ICsraSkgewot
ICAgICAgICBUcmlhbmdsZSogdHJpID0gZ2V0VHJpYW5nbGUoaSk7Ci0gICAgICAgIGlmICh0cmkt
PmNvbnRhaW5zKHYwKSAmJiB0cmktPm5leHRWZXJ0ZXgodjAsIHRydWUpID09IHYxKQotICAgICAg
ICAgICAgaGF2ZUVkZ2UwMSA9IHRydWU7Ci0gICAgICAgIGlmICh0cmktPmNvbnRhaW5zKHYxKSAm
JiB0cmktPm5leHRWZXJ0ZXgodjEsIHRydWUpID09IHYwKQotICAgICAgICAgICAgaGF2ZUVkZ2Ux
MCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBoYXZlRWRnZTAxICYmIGhhdmVFZGdlMTA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRy
aWFuZ3VsYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTIyOTRlNjQ2ODEw
YjFiNDA5YTVlNWUxYmM2OGQ5ODc3YTk4YmE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yX2gKLSNkZWZpbmUg
TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3JfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkxvb3BCbGlubkNvbnN0YW50cy5o
IgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gUGVyZm9ybXMgYSBsb2NhbGl6ZWQgdHJp
YW5ndWxhdGlvbiBvZiB0aGUgdHJpYW5nbGUgbWVzaAotLy8gY29ycmVzcG9uZGluZyB0byB0aGUg
Zm91ciBjb250cm9sIHBvaW50IHZlcnRpY2VzIG9mIGEgY3ViaWMgY3VydmUKLS8vIHNlZ21lbnQu
Ci1jbGFzcyBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IpOwotcHVibGljOgotICAgIC8vIFRoZSB2
ZXJ0aWNlcyB0aGF0IHRoZSB0cmlhbmd1bGF0b3Igb3BlcmF0ZXMgdXBvbiwgY29udGFpbmluZyBi
b3RoCi0gICAgLy8gdGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMgdGhlIGN1Ymlj
IHRleHR1cmUKLSAgICAvLyBjb29yZGluYXRlcy4KLSAgICBjbGFzcyBWZXJ0ZXggewotICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZXJ0ZXgpOwotICAgIHB1YmxpYzoKLSAgICAgICAgVmVy
dGV4KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzZXRGbGFncygpOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgeHlDb29yZGluYXRlcygpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX3h5Q29vcmRpbmF0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGtsbUNvb3JkaW5hdGVzKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fa2xtQ29vcmRpbmF0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBhbmQgdGV4dHVyZSBjb29yZGluYXRlcyBvZiB0aGUg
dmVydGV4LgotICAgICAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5LAotICAgICAgICAgICAg
ICAgICBmbG9hdCBrLCBmbG9hdCBsLCBmbG9hdCBtKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
X3h5Q29vcmRpbmF0ZXMuc2V0KHgsIHkpOwotICAgICAgICAgICAgbV9rbG1Db29yZGluYXRlcy5z
ZXQoaywgbCwgbSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGbGFncyBmb3Igd2Fsa2luZyBm
cm9tIHRoZSBzdGFydCB2ZXJ0ZXggdG8gdGhlIGVuZCB2ZXJ0ZXguCi0gICAgICAgIGJvb2wgZW5k
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZW5kOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBzZXRFbmQoYm9vbCBlbmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZW5k
ID0gZW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBtYXJrZWQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9tYXJrZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNl
dE1hcmtlZChib29sIG1hcmtlZCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9tYXJrZWQgPSBt
YXJrZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGludGVyaW9yKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1faW50ZXJpb3I7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHNldEludGVyaW9yKGJvb2wgaW50ZXJpb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW50
ZXJpb3IgPSBpbnRlcmlvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVzZXRGbGFncygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBtX21h
cmtlZCA9IGZhbHNlOwotICAgICAgICAgICAgbV9pbnRlcmlvciA9IGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyAyRCBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4
IGluIHRoZSBwbGFuZS4KLSAgICAgICAgRmxvYXRQb2ludCBtX3h5Q29vcmRpbmF0ZXM7Ci0gICAg
ICAgIC8vIEN1YmljIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHJlbmRlcmluZyB0aGUgY3VydmUu
Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBtX2tsbUNvb3JkaW5hdGVzOwotCi0gICAgICAgIC8vIEZs
YWdzIGZvciB3YWxraW5nIGZyb20gdGhlIHN0YXJ0IHZlcnRleCB0byB0aGUgZW5kIHZlcnRleC4K
LSAgICAgICAgYm9vbCBtX2VuZDsKLSAgICAgICAgYm9vbCBtX21hcmtlZDsKLSAgICAgICAgYm9v
bCBtX2ludGVyaW9yOwotICAgIH07Ci0KLSAgICAvLyBUaGUgdHJpYW5nbGVzIHRoZSBUcmlhbmd1
bGF0b3IgcHJvZHVjZXMuCi0gICAgY2xhc3MgVHJpYW5nbGUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgVHJpYW5nbGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ZlcnRpY2VzWzBdID0gMDsK
LSAgICAgICAgICAgIG1fdmVydGljZXNbMV0gPSAwOwotICAgICAgICAgICAgbV92ZXJ0aWNlc1sy
XSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXRzIHRoZSB2ZXJ0ZXggYXQgdGhlIGdp
dmVuIGluZGV4LCAwIDw9IGluZGV4IDwgMy4KLSAgICAgICAgVmVydGV4KiBnZXRWZXJ0ZXgoaW50
IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBpbmRl
eCA8IDMpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljZXNbaW5kZXhdOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgdHJpYW5nbGUgY29udGFpbnMgdGhl
IGdpdmVuIHZlcnRleCAoYnkKLSAgICAgICAgLy8gaWRlbnRpdHksIG5vdCBnZW9tZXRyaWNhbGx5
KS4KLSAgICAgICAgYm9vbCBjb250YWlucyhWZXJ0ZXgqIHYpOwotCi0gICAgICAgIC8vIFJldHVy
bnMgdGhlIHZlcnRleCBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgb25lIGluIHRoZSBzcGVjaWZpZWQK
LSAgICAgICAgLy8gZGlyZWN0aW9uLCBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4KLSAg
ICAgICAgVmVydGV4KiBuZXh0VmVydGV4KFZlcnRleCogY3VycmVudCwgYm9vbCB0cmF2ZXJzZUNv
dW50ZXJDbG9ja3dpc2UpOwotCi0gICAgICAgIC8vIFNldHMgdGhlIHZlcnRpY2VzIG9mIHRoaXMg
dHJpYW5nbGUsIHBvdGVudGlhbGx5IHJlb3JkZXJpbmcgdGhlbQotICAgICAgICAvLyB0byBwcm9k
dWNlIGEgY2Fub25pY2FsIG9yaWVudGF0aW9uLgotICAgICAgICB2b2lkIHNldFZlcnRpY2VzKFZl
cnRleCogdjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVmVydGV4KiB2MSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBWZXJ0ZXgqIHYyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Zl
cnRpY2VzWzBdID0gdjA7Ci0gICAgICAgICAgICBtX3ZlcnRpY2VzWzFdID0gdjE7Ci0gICAgICAg
ICAgICBtX3ZlcnRpY2VzWzJdID0gdjI7Ci0gICAgICAgICAgICBtYWtlQ291bnRlckNsb2Nrd2lz
ZSgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBSZXR1cm5zIHRoZSBp
bmRleCBbMC4uMl0gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2ZXJ0ZXgsIG9yCi0gICAgICAg
IC8vIC0xIGlmIG5vdCBmb3VuZC4KLSAgICAgICAgaW50IGluZGV4Rm9yVmVydGV4KFZlcnRleCog
dmVydGV4KTsKLQotICAgICAgICAvLyBSZW9yZGVycyB0aGUgdmVydGljZXMgaW4gdGhpcyB0cmlh
bmdsZSB0byBtYWtlIHRoZW0KLSAgICAgICAgLy8gY291bnRlcmNsb2Nrd2lzZSB3aGVuIHZpZXdl
ZCBpbiB0aGUgMkQgcGxhbmUsIGluIG9yZGVyIHRvCi0gICAgICAgIC8vIGFjaGlldmUgYSBjYW5v
bmljYWwgb3JkZXJpbmcuCi0gICAgICAgIHZvaWQgbWFrZUNvdW50ZXJDbG9ja3dpc2UoKTsKLQot
ICAgICAgICAvLyBOb3RlOiB0aGVzZSBhcmUgcmF3IHBvaW50ZXJzIGJlY2F1c2UgdGhleSBwb2lu
dCB0byB0aGUKLSAgICAgICAgLy8gbV92ZXJ0aWNlcyBjb250YWluZWQgaW4gdGhlIHN1cnJvdW5k
aW5nIHRyaWFuZ3VsYXRvci4KLSAgICAgICAgVmVydGV4KiBtX3ZlcnRpY2VzWzNdOwotICAgIH07
Ci0KLSAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcigpOwotCi0gICAgLy8gUmVzZXRzIHRo
ZSB0cmlhbmd1bGF0b3IncyBzdGF0ZS4gQWZ0ZXIgZWFjaCB0cmlhbmd1bGF0aW9uIGFuZAotICAg
IC8vIGJlZm9yZSB0aGUgbmV4dCwgY2FsbCB0aGlzIHRvIHJlLWluaXRpYWxpemUgdGhlIGludGVy
bmFsCi0gICAgLy8gdmVydGljZXMnIHN0YXRlLgotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIC8v
IFJldHVybnMgYSBtdXRhYmxlIHZlcnRleCBzdG9yZWQgaW4gdGhlIHRyaWFuZ3VsYXRvci4gVXNl
IHRoaXMgdG8KLSAgICAvLyBzZXQgdXAgdGhlIHZlcnRpY2VzIGJlZm9yZSBhIHRyaWFuZ3VsYXRp
b24uCi0gICAgVmVydGV4KiBnZXRWZXJ0ZXgoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCA0KTsKLSAgICAgICAgcmV0dXJuICZtX3ZlcnRpY2Vz
W2luZGV4XTsKLSAgICB9Ci0KLSAgICBlbnVtIEluc2lkZUVkZ2VDb21wdXRhdGlvbiB7Ci0gICAg
ICAgIENvbXB1dGVJbnNpZGVFZGdlcywKLSAgICAgICAgRG9udENvbXB1dGVJbnNpZGVFZGdlcwot
ICAgIH07Ci0KLSAgICAvLyBPbmNlIHRoZSB2ZXJ0aWNlcycgY29udGVudHMgaGF2ZSBiZWVuIHNl
dCB1cCwgY2FsbCB0cmlhbmd1bGF0ZSgpCi0gICAgLy8gdG8gcmVjb21wdXRlIHRoZSB0cmlhbmds
ZXMuCi0gICAgLy8KLSAgICAvLyBJZiBjb21wdXRlSW5zaWRlRWRnZXMgaXMgQ29tcHV0ZUluc2lk
ZUVkZ2VzLCB0aGVuIHNpZGVUb0ZpbGwKLSAgICAvLyB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5l
IHdoaWNoIHNpZGUgb2YgdGhlIGN1YmljIGN1cnZlIGRlZmluZWQKLSAgICAvLyBieSB0aGUgZm91
ciBjb250cm9sIHBvaW50cyBpcyB0byBiZSBmaWxsZWQuCi0gICAgLy8KLSAgICAvLyBUaGUgdHJp
YW5ndWxhdGlvbiBvYmV5cyB0aGUgZm9sbG93aW5nIGd1YXJhbnRlZXM6Ci0gICAgLy8gICAtIElm
IHRoZSBjb252ZXggaHVsbCBpcyBhIHF1YWRyaWxhdGVyYWwsIHRoZW4gdGhlIHNob3J0ZXN0IGVk
Z2UKLSAgICAvLyAgICAgd2lsbCBiZSBjaG9zZW4gZm9yIHRoZSBjdXQgaW50byB0d28gdHJpYW5n
bGVzLgotICAgIC8vICAgLSBJZiBvbmUgb2YgdGhlIHZlcnRpY2VzIGlzIGNvbnRhaW5lZCBpbiB0
aGUgdHJpYW5nbGUgc3Bhbm5lZAotICAgIC8vICAgICBieSB0aGUgb3RoZXIgdGhyZWUsIHRocmVl
IHRyaWFuZ2xlcyB3aWxsIGJlIHByb2R1Y2VkLgotICAgIHZvaWQgdHJpYW5ndWxhdGUoSW5zaWRl
RWRnZUNvbXB1dGF0aW9uIGNvbXB1dGVJbnNpZGVFZGdlcywKLSAgICAgICAgICAgICAgICAgICAg
IExvb3BCbGlubkNvbnN0YW50czo6RmlsbFNpZGUgc2lkZVRvRmlsbCk7Ci0KLSAgICAvLyBOdW1i
ZXIgb2YgdHJpYW5nbGVzIGNvbXB1dGVkIGJ5IHRyaWFuZ3VsYXRlKCkuCi0gICAgaW50IG51bWJl
ck9mVHJpYW5nbGVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX251bWJlck9mVHJp
YW5nbGVzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhlIGNvbXB1dGVkIHRyaWFuZ2xlIGF0
IGluZGV4LCAwIDw9IGluZGV4IDwgbnVtYmVyT2ZUcmlhbmdsZXMoKS4KLSAgICBUcmlhbmdsZSog
Z2V0VHJpYW5nbGUoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4ID49IDAg
JiYgaW5kZXggPCBtX251bWJlck9mVHJpYW5nbGVzKTsKLSAgICAgICAgcmV0dXJuICZtX3RyaWFu
Z2xlc1tpbmRleF07Ci0gICAgfQotCi0gICAgLy8gTnVtYmVyIG9mIHZlcnRpY2VzIGZhY2luZyB0
aGUgaW5zaWRlIG9mIHRoZSBzaGFwZSwgaWYKLSAgICAvLyBDb21wdXRlSW5zaWRlRWRnZXMgd2Fz
IHBhc3NlZCB3aGVuIHRyaWFuZ3VsYXRlKCkgd2FzIGNhbGxlZC4KLSAgICBpbnQgbnVtYmVyT2ZJ
bnRlcmlvclZlcnRpY2VzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX251bWJlck9m
SW50ZXJpb3JWZXJ0aWNlczsKLSAgICB9Ci0KLSAgICAvLyBGZXRjaGVzIHRoZSBnaXZlbiBpbnRl
cmlvciB2ZXJ0ZXgsIDAgPD0gaW5kZXggPCBudW1iZXJPZkludGVyaW9yVmVydGljZXMoKS4KLSAg
ICBWZXJ0ZXgqIGdldEludGVyaW9yVmVydGV4KGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA+PSAwICYmIGluZGV4IDwgbV9udW1iZXJPZkludGVyaW9yVmVydGljZXMpOwot
ICAgICAgICByZXR1cm4gbV9pbnRlcmlvclZlcnRpY2VzW2luZGV4XTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCB0cmlhbmd1bGF0ZUhlbHBlcihMb29wQmxpbm5Db25zdGFudHM6OkZpbGxT
aWRlIHNpZGVUb0ZpbGwpOwotCi0gICAgLy8gQWRkcyBhIHRyaWFuZ2xlIHRvIHRoZSB0cmlhbmd1
bGF0aW9uLgotICAgIHZvaWQgYWRkVHJpYW5nbGUoVmVydGV4KiB2MCwgVmVydGV4KiB2MSwgVmVy
dGV4KiB2Mik7Ci0KLSAgICAvLyBBZGRzIGEgdmVydGV4IHRvIHRoZSBsaXN0IG9mIGludGVyaW9y
IHZlcnRpY2VzLgotICAgIHZvaWQgYWRkSW50ZXJpb3JWZXJ0ZXgoVmVydGV4KiB2KTsKLQotICAg
IC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlZGdlIGJldHdlZW4gdmVydGV4IHYwIGFuZCB2MSBp
cyBzaGFyZWQKLSAgICAvLyBiZXR3ZWVuIHR3byBvciBtb3JlIHRyaWFuZ2xlcy4KLSAgICBib29s
IGlzU2hhcmVkRWRnZShWZXJ0ZXgqIHYwLCBWZXJ0ZXgqIHYxKTsKLQotICAgIC8vIFRoZSB2ZXJ0
aWNlcyBiZWluZyB0cmlhbmd1bGF0ZWQuCi0gICAgVmVydGV4IG1fdmVydGljZXNbNF07Ci0KLSAg
ICAvLyBUaGUgdmVydGljZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZWRnZXMgZmFjaW5nIHRoZSBp
bnNpZGUgb2YgdGhlCi0gICAgLy8gc2hhcGUsIGluIG9yZGVyIGZyb20gdGhlIHN0YXJ0IHZlcnRl
eCB0byB0aGUgZW5kIHZlcnRleC4gVGhlIG1vcmUKLSAgICAvLyBnZW5lcmFsIHRyaWFuZ3VsYXRp
b24gYWxnb3JpdGhtIHRlc3NlbGxhdGVzIHRoaXMgaW50ZXJpb3IgcmVnaW9uLgotICAgIFZlcnRl
eCogbV9pbnRlcmlvclZlcnRpY2VzWzRdOwotICAgIC8vIFRoZSBudW1iZXIgb2YgaW50ZXJpb3Ig
dmVydGljZXMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBjdXJyZW50Ci0gICAgLy8gdHJpYW5ndWxh
dGlvbi4KLSAgICBpbnQgbV9udW1iZXJPZkludGVyaW9yVmVydGljZXM7Ci0KLSAgICAvLyBUaGVy
ZSBjYW4gYmUgYXQgbW9zdCB0aHJlZSB0cmlhbmdsZXMgY29tcHV0ZWQgYnkgdGhpcyBsb2NhbAot
ICAgIC8vIGFsZ29yaXRobSwgd2hpY2ggb2NjdXJzIHdoZW4gb25lIG9mIHRoZSB2ZXJ0aWNlcyBp
cyBjb250YWluZWQgaW4KLSAgICAvLyB0aGUgdHJpYW5nbGUgc3Bhbm5lZCBieSB0aGUgb3RoZXIg
dGhyZWUuIE1vc3Qgb2YgdGhlIHRpbWUgdGhlCi0gICAgLy8gYWxnb3JpdGhtIGNvbXB1dGVzIHR3
byB0cmlhbmdsZXMuCi0gICAgVHJpYW5nbGUgbV90cmlhbmdsZXNbM107Ci0gICAgaW50IG1fbnVt
YmVyT2ZUcmlhbmdsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Q3MmRmZjQ5OGQ4OTU1ZTk0OGYzMmZiNzQ2ZmZh
OGVlMmRiMzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKLQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExvb3BCbGlubk1hdGhVdGls
cyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFV0aWxpdHkgZnVuY3Rpb25zIGxvY2FsIHRvIHRoaXMg
ZmlsZS4KLWludCBvcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwMSwKLSAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwMykKLXsKLSAgICBmbG9hdCBjcm9zc1Byb2R1Y3QgPSAocDIueSgpIC0gcDEueSgpKSAq
IChwMy54KCkgLSBwMi54KCkpIC0gKHAzLnkoKSAtIHAyLnkoKSkgKiAocDIueCgpIC0gcDEueCgp
KTsKLSAgICByZXR1cm4gKGNyb3NzUHJvZHVjdCA8IDAuMGYpID8gLTEgOiAoKGNyb3NzUHJvZHVj
dCA+IDAuMGYpID8gMSA6IDApOwotfQotCi1ib29sIGVkZ2VFZGdlVGVzdChjb25zdCBGbG9hdFNp
emUmIHYwRGVsdGEsCi0gICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2MCwKLSAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUwLAotICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgdTEpCi17Ci0gICAgLy8gVGhpcyBlZGdlIHRvIGVkZ2UgdGVzdCBp
cyBiYXNlZCBvbiBGcmFubGluIEFudG9uaW8ncyBnZW06ICJGYXN0ZXIKLSAgICAvLyBMaW5lIFNl
Z21lbnQgSW50ZXJzZWN0aW9uIiwgaW4gR3JhcGhpY3MgR2VtcyBJSUksIHBwLiAxOTktMjAyLgot
ICAgIGZsb2F0IGF4ID0gdjBEZWx0YS53aWR0aCgpOwotICAgIGZsb2F0IGF5ID0gdjBEZWx0YS5o
ZWlnaHQoKTsKLSAgICBmbG9hdCBieCA9IHUwLngoKSAtIHUxLngoKTsKLSAgICBmbG9hdCBieSA9
IHUwLnkoKSAtIHUxLnkoKTsKLSAgICBmbG9hdCBjeCA9IHYwLngoKSAtIHUwLngoKTsKLSAgICBm
bG9hdCBjeSA9IHYwLnkoKSAtIHUwLnkoKTsKLSAgICBmbG9hdCBmID0gYXkgKiBieCAtIGF4ICog
Ynk7Ci0gICAgZmxvYXQgZCA9IGJ5ICogY3ggLSBieCAqIGN5OwotICAgIGlmICgoZiA+IDAgJiYg
ZCA+PSAwICYmIGQgPD0gZikgfHwgKGYgPCAwICYmIGQgPD0gMCAmJiBkID49IGYpKSB7Ci0gICAg
ICAgIGZsb2F0IGUgPSBheCAqIGN5IC0gYXkgKiBjeDsKLQotICAgICAgICAvLyBUaGlzIGFkZGl0
aW9uYWwgdGVzdCBhdm9pZHMgcmVwb3J0aW5nIGNvaW5jaWRlbnQgZWRnZXMsIHdoaWNoCi0gICAg
ICAgIC8vIGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50LgotICAgICAgICBpZiAoYXBwcm94RXF1YWwo
ZSwgMCkgfHwgYXBwcm94RXF1YWwoZiwgMCkgfHwgYXBwcm94RXF1YWwoZSwgZikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGYgPiAwKQotICAgICAgICAgICAgcmV0
dXJuIGUgPj0gMCAmJiBlIDw9IGY7Ci0KLSAgICAgICAgcmV0dXJuIGUgPD0gMCAmJiBlID49IGY7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBlZGdlQWdhaW5zdFRyaWFuZ2xl
RWRnZXMoY29uc3QgRmxvYXRQb2ludCYgdjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiB2MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHUwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiB1MikKLXsKLSAgICBGbG9hdFNpemUgZGVsdGEgPSB2MSAtIHYwOwotICAgIC8vIFRl
c3QgZWRnZSB1MCwgdTEgYWdhaW5zdCB2MCwgdjEuCi0gICAgaWYgKGVkZ2VFZGdlVGVzdChkZWx0
YSwgdjAsIHUwLCB1MSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIFRlc3QgZWRnZSB1
MSwgdTIgYWdhaW5zdCB2MCwgdjEuCi0gICAgaWYgKGVkZ2VFZGdlVGVzdChkZWx0YSwgdjAsIHUx
LCB1MikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIFRlc3QgZWRnZSB1MiwgdTEgYWdh
aW5zdCB2MCwgdjEuCi0gICAgaWYgKGVkZ2VFZGdlVGVzdChkZWx0YSwgdjAsIHUyLCB1MCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gQSByb3VuZG9m
ZiBmYWN0b3IgaW4gdGhlIGN1YmljIGNsYXNzaWZpY2F0aW9uIGFuZCB0ZXh0dXJlIGNvb3JkaW5h
dGUKLS8vIGdlbmVyYXRpb24gYWxnb3JpdGhtcy4gSXQgcHJpbWFyaWx5IGRldGVybWluZXMgdGhl
IGhhbmRsaW5nIG9mIGNvcm5lcgotLy8gY2FzZXMgZHVyaW5nIHRoZSBjbGFzc2lmaWNhdGlvbiBw
cm9jZXNzLiBCZSBjYXJlZnVsIHdoZW4gYWRqdXN0aW5nIGl0OwotLy8gaXQgaGFzIGJlZW4gZGV0
ZXJtaW5lZCBlbXBpcmljYWxseSB0byB3b3JrIHdlbGwuIFdoZW4gY2hhbmdpbmcgaXQsIHlvdQot
Ly8gc2hvdWxkIGxvb2sgaW4gcGFydGljdWxhciBhdCBzaGFwZXMgdGhhdCBjb250YWluIHF1YWRy
YXRpYyBjdXJ2ZXMgYW5kCi0vLyBlbnN1cmUgdGhleSBzdGlsbCBsb29rIHNtb290aC4gT25jZSBw
aXhlbCB0ZXN0cyBhcmUgcnVubmluZyBhZ2FpbnN0IHRoaXMKLS8vIGFsZ29yaXRobSwgdGhleSBz
aG91bGQgcHJvdmlkZSBzdWZmaWNpZW50IGNvdmVyYWdlIHRvIGVuc3VyZSB0aGF0Ci0vLyBhZGp1
c3RpbmcgdGhlIGNvbnN0YW50IHdvbid0IGJyZWFrIGFueXRoaW5nLgotY29uc3QgZmxvYXQgRXBz
aWxvbiA9IDUuMGUtNGY7Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0vLyBFeHBvcnRl
ZCByb3V0aW5lcwotCi1mbG9hdCByb3VuZFRvWmVybyhmbG9hdCB2YWwpCi17Ci0gICAgaWYgKHZh
bCA8IEVwc2lsb24gJiYgdmFsID4gLUVwc2lsb24pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiB2YWw7Ci19Ci0KLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQb2ludCYgdjAsIGNv
bnN0IEZsb2F0UG9pbnQmIHYxKQotewotICAgIHJldHVybiAodjAgLSB2MSkuZGlhZ29uYWxMZW5n
dGhTcXVhcmVkKCkgPCBFcHNpbG9uICogRXBzaWxvbjsKLX0KLQotYm9vbCBhcHByb3hFcXVhbChj
b25zdCBGbG9hdFBvaW50M0QmIHYwLCBjb25zdCBGbG9hdFBvaW50M0QmIHYxKQotewotICAgIHJl
dHVybiAodjAgLSB2MSkubGVuZ3RoU3F1YXJlZCgpIDwgRXBzaWxvbiAqIEVwc2lsb247Ci19Ci0K
LWJvb2wgYXBwcm94RXF1YWwoZmxvYXQgZjAsIGZsb2F0IGYxKQotewotICAgIHJldHVybiBmYWJz
ZihmMCAtIGYxKSA8IEVwc2lsb247Ci19Ci0KLWJvb2wgbGluZXNJbnRlcnNlY3QoY29uc3QgRmxv
YXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHExLAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpCi17Ci0gICAgcmV0dXJuIChvcmllbnRhdGlvbihw
MSwgcTEsIHAyKSAhPSBvcmllbnRhdGlvbihwMSwgcTEsIHEyKQotICAgICAgICAgICAgJiYgb3Jp
ZW50YXRpb24ocDIsIHEyLCBwMSkgIT0gb3JpZW50YXRpb24ocDIsIHEyLCBxMSkpOwotfQotCi1i
b29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
YykKLXsKLSAgICAvLyBBbGdvcml0aG0gZnJvbSBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4
dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5odG1sCi0gICAgZmxvYXQgeDAgPSBjLngoKSAtIGEueCgp
OwotICAgIGZsb2F0IHkwID0gYy55KCkgLSBhLnkoKTsKLSAgICBmbG9hdCB4MSA9IGIueCgpIC0g
YS54KCk7Ci0gICAgZmxvYXQgeTEgPSBiLnkoKSAtIGEueSgpOwotICAgIGZsb2F0IHgyID0gcG9p
bnQueCgpIC0gYS54KCk7Ci0gICAgZmxvYXQgeTIgPSBwb2ludC55KCkgLSBhLnkoKTsKLQotICAg
IGZsb2F0IGRvdDAwID0geDAgKiB4MCArIHkwICogeTA7Ci0gICAgZmxvYXQgZG90MDEgPSB4MCAq
IHgxICsgeTAgKiB5MTsKLSAgICBmbG9hdCBkb3QwMiA9IHgwICogeDIgKyB5MCAqIHkyOwotICAg
IGZsb2F0IGRvdDExID0geDEgKiB4MSArIHkxICogeTE7Ci0gICAgZmxvYXQgZG90MTIgPSB4MSAq
IHgyICsgeTEgKiB5MjsKLSAgICBmbG9hdCBkZW5vbWluYXRvciA9IGRvdDAwICogZG90MTEgLSBk
b3QwMSAqIGRvdDAxOwotICAgIGlmICghZGVub21pbmF0b3IpCi0gICAgICAgIC8vIFRyaWFuZ2xl
IGlzIHplcm8tYXJlYS4gVHJlYXQgcXVlcnkgcG9pbnQgYXMgbm90IGJlaW5nIGluc2lkZS4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIENvbXB1dGUKLSAgICBmbG9hdCBpbnZlcnNlRGVu
b21pbmF0b3IgPSAxLjBmIC8gZGVub21pbmF0b3I7Ci0gICAgZmxvYXQgdSA9IChkb3QxMSAqIGRv
dDAyIC0gZG90MDEgKiBkb3QxMikgKiBpbnZlcnNlRGVub21pbmF0b3I7Ci0gICAgZmxvYXQgdiA9
IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgKiBpbnZlcnNlRGVub21pbmF0b3I7Ci0K
LSAgICByZXR1cm4gKHUgPiAwLjBmKSAmJiAodiA+IDAuMGYpICYmICh1ICsgdiA8IDEuMGYpOwot
fQotCi1ib29sIHRyaWFuZ2xlc092ZXJsYXAoY29uc3QgRmxvYXRQb2ludCYgYTEsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjEsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgYTIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjIs
Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIpCi17Ci0gICAgLy8g
RGVyaXZlZCBmcm9tIGNvcGxhbmFyX3RyaV90cmkoKSBhdAotICAgIC8vIGh0dHA6Ly9qZ3QuYWtw
ZXRlcnMuY29tL3BhcGVycy9TaGVuSGVuZ1RhbmcwMy90cmlfdHJpLmh0bWwgLAotICAgIC8vIHNp
bXBsaWZpZWQgZm9yIHRoZSAyRCBjYXNlIGFuZCBtb2RpZmllZCBzbyB0aGF0IG92ZXJsYXBwaW5n
IGVkZ2VzCi0gICAgLy8gZG8gbm90IHJlcG9ydCBvdmVybGFwcGluZyB0cmlhbmdsZXMuCi0KLSAg
ICAvLyBUZXN0IGFsbCBlZGdlcyBvZiB0cmlhbmdsZSAxIGFnYWluc3QgdGhlIGVkZ2VzIG9mIHRy
aWFuZ2xlIDIuCi0gICAgaWYgKGVkZ2VBZ2FpbnN0VHJpYW5nbGVFZGdlcyhhMSwgYjEsIGEyLCBi
MiwgYzIpCi0gICAgICAgIHx8IGVkZ2VBZ2FpbnN0VHJpYW5nbGVFZGdlcyhiMSwgYzEsIGEyLCBi
MiwgYzIpCi0gICAgICAgIHx8IGVkZ2VBZ2FpbnN0VHJpYW5nbGVFZGdlcyhjMSwgYTEsIGEyLCBi
MiwgYzIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBGaW5hbGx5LCB0ZXN0IGlmIHRy
aTEgaXMgdG90YWxseSBjb250YWluZWQgaW4gdHJpMiBvciB2aWNlIHZlcnNhLgotICAgIC8vIFRo
ZSBwYXBlciBhYm92ZSBvbmx5IHBlcmZvcm1zIHRoZSBmaXJzdCB0d28gcG9pbnQtaW4tdHJpYW5n
bGUgdGVzdHMuCi0gICAgLy8gQmVjYXVzZSB3ZSBkZWZpbmUgdGhhdCB0cmlhbmdsZXMgc2hhcmlu
ZyBhIHZlcnRleCBvciBlZGdlIGRvbid0Ci0gICAgLy8gb3ZlcmxhcCwgd2UgbXVzdCBwZXJmb3Jt
IGFkZGl0aW9uYWwgdGVzdHMgdG8gc2VlIHdoZXRoZXIgb25lCi0gICAgLy8gdHJpYW5nbGUgaXMg
Y29udGFpbmVkIGluIHRoZSBvdGhlci4KLSAgICBpZiAocG9pbnRJblRyaWFuZ2xlKGExLCBhMiwg
YjIsIGMyKQotICAgICAgICB8fCBwb2ludEluVHJpYW5nbGUoYTIsIGExLCBiMSwgYzEpCi0gICAg
ICAgIHx8IHBvaW50SW5UcmlhbmdsZShiMSwgYTIsIGIyLCBjMikKLSAgICAgICAgfHwgcG9pbnRJ
blRyaWFuZ2xlKGIyLCBhMSwgYjEsIGMxKQotICAgICAgICB8fCBwb2ludEluVHJpYW5nbGUoYzEs
IGEyLCBiMiwgYzIpCi0gICAgICAgIHx8IHBvaW50SW5UcmlhbmdsZShjMiwgYTEsIGIxLCBjMSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNl
IHsKLQotLy8gSGVscGVyIHJvdXRpbmVzIGZvciBwdWJsaWMgWFJheSBxdWVyaWVzIGJlbG93LiBB
bGwgb2YgdGhpcyBjb2RlCi0vLyBvcmlnaW5hdGVkIGluIFNraWE7IHNlZSBpbmNsdWRlL2NvcmUv
IGFuZCBzcmMvY29yZS8sIFNrU2NhbGFyLmggYW5kCi0vLyBTa0dlb21ldHJ5LntjcHAsaH0uCi0K
LWNvbnN0IGZsb2F0IE5lYXJseVplcm9Db25zdGFudCA9ICgxLjBmIC8gKDEgPDwgMTIpKTsKLQot
Ym9vbCBuZWFybHlaZXJvKGZsb2F0IHgsIGZsb2F0IHRvbGVyYW5jZSA9IE5lYXJseVplcm9Db25z
dGFudCkKLXsKLSAgICBBU1NFUlQodG9sZXJhbmNlID4gMC4wZik7Ci0gICAgcmV0dXJuIDo6ZmFi
c2YoeCkgPCB0b2xlcmFuY2U7Ci19Ci0KLS8vIExpbmVhcmx5IGludGVycG9sYXRlIGJldHdlZW4g
YSBhbmQgYiwgYmFzZWQgb24gdC4KLS8vIElmIHQgaXMgMCwgcmV0dXJuIGE7IGlmIHQgaXMgMSwg
cmV0dXJuIGI7IGVsc2UgaW50ZXJwb2xhdGUuCi0vLyB0IG11c3QgYmUgWzAuLjFdLgotZmxvYXQg
aW50ZXJwb2xhdGUoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgdCkKLXsKLSAgICBBU1NFUlQodCA+
PSAwICYmIHQgPD0gMSk7Ci0gICAgcmV0dXJuIGEgKyAoYiAtIGEpICogdDsKLX0KLQotZmxvYXQg
ZXZhbHVhdGVDdWJpYyhmbG9hdCBjb250cm9sUG9pbnQwLCBmbG9hdCBjb250cm9sUG9pbnQxLCBm
bG9hdCBjb250cm9sUG9pbnQyLCBmbG9hdCBjb250cm9sUG9pbnQzLCBmbG9hdCB0KQotewotICAg
IEFTU0VSVCh0ID49IDAgJiYgdCA8PSAxKTsKLQotICAgIGlmICghdCkKLSAgICAgICAgcmV0dXJu
IGNvbnRyb2xQb2ludDA7Ci0KLSAgICBmbG9hdCBhYiA9IGludGVycG9sYXRlKGNvbnRyb2xQb2lu
dDAsIGNvbnRyb2xQb2ludDEsIHQpOwotICAgIGZsb2F0IGJjID0gaW50ZXJwb2xhdGUoY29udHJv
bFBvaW50MSwgY29udHJvbFBvaW50MiwgdCk7Ci0gICAgZmxvYXQgY2QgPSBpbnRlcnBvbGF0ZShj
b250cm9sUG9pbnQyLCBjb250cm9sUG9pbnQzLCB0KTsKLSAgICBmbG9hdCBhYmMgPSBpbnRlcnBv
bGF0ZShhYiwgYmMsIHQpOwotICAgIGZsb2F0IGJjZCA9IGludGVycG9sYXRlKGJjLCBjZCwgdCk7
Ci0gICAgcmV0dXJuIGludGVycG9sYXRlKGFiYywgYmNkLCB0KTsKLX0KLQotLy8gRXZhbHVhdGVz
IHRoZSBwb2ludCBvbiB0aGUgc291cmNlIGN1YmljIHNwZWNpZmllZCBieSB0LCAwIDw9IHQgPD0g
MS4wLgotRmxvYXRQb2ludCBldmFsdWF0ZUN1YmljQXQoY29uc3QgRmxvYXRQb2ludCBjdWJpY1s0
XSwgZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludChldmFsdWF0ZUN1YmljKGN1Ymlj
WzBdLngoKSwgY3ViaWNbMV0ueCgpLCBjdWJpY1syXS54KCksIGN1YmljWzNdLngoKSwgdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVDdWJpYyhjdWJpY1swXS55KCksIGN1YmljWzFd
LnkoKSwgY3ViaWNbMl0ueSgpLCBjdWJpY1szXS55KCksIHQpKTsKLX0KLQotYm9vbCB4UmF5Q3Jv
c3Nlc01vbm90b25pY0N1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0UG9pbnQgY3Vi
aWNbNF0sIGJvb2wmIGFtYmlndW91cykKLXsKLSAgICBhbWJpZ3VvdXMgPSBmYWxzZTsKLQotICAg
IC8vIEZpbmQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0geSBvZiB0aGUgZXh0cmVtYSwgd2hpY2gg
YXJlIHRoZQotICAgIC8vIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBzaW5jZSB0aGlzIGN1YmljIGlz
IG1vbm90b25pYwotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1pbihjdWJpY1swXS55KCksIGN1Ymlj
WzNdLnkoKSk7Ci0gICAgZmxvYXQgbWF4WSA9IHN0ZDo6bWF4KGN1YmljWzBdLnkoKSwgY3ViaWNb
M10ueSgpKTsKLQotICAgIGlmICh4UmF5LnkoKSA9PSBjdWJpY1swXS55KCkKLSAgICAgICAgfHwg
eFJheS55KCkgPCBtaW5ZCi0gICAgICAgIHx8IHhSYXkueSgpID4gbWF4WSkgewotICAgICAgICAv
LyBUaGUgcXVlcnkgbGluZSBkZWZpbml0ZWx5IGRvZXMgbm90IGNyb3NzIHRoZSBjdXJ2ZQotICAg
ICAgICBhbWJpZ3VvdXMgPSAoeFJheS55KCkgPT0gY3ViaWNbMF0ueSgpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgcG9pbnRBdEV4dHJlbXVtID0gKHhS
YXkueSgpID09IGN1YmljWzNdLnkoKSk7Ci0KLSAgICBmbG9hdCBtaW5YID0gc3RkOjptaW4oc3Rk
OjptaW4oc3RkOjptaW4oY3ViaWNbMF0ueCgpLCBjdWJpY1sxXS54KCkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdWJpY1syXS54KCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdWJpY1szXS54KCkpOwotICAgIGlmICh4UmF5LngoKSA8IG1pblgpIHsKLSAgICAg
ICAgLy8gVGhlIHF1ZXJ5IGxpbmUgZGVmaW5pdGVseSBjcm9zc2VzIHRoZSBjdXJ2ZQotICAgICAg
ICBhbWJpZ3VvdXMgPSBwb2ludEF0RXh0cmVtdW07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGZsb2F0IG1heFggPSBzdGQ6Om1heChzdGQ6Om1heChzdGQ6Om1heChjdWJpY1sw
XS54KCksIGN1YmljWzFdLngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1YmljWzJdLngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1YmljWzNdLngoKSk7
Ci0gICAgaWYgKHhSYXkueCgpID4gbWF4WCkKLSAgICAgICAgLy8gVGhlIHF1ZXJ5IGxpbmUgZGVm
aW5pdGVseSBkb2VzIG5vdCBjcm9zcyB0aGUgY3VydmUKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIHBhcmFtZXRlciB2YWx1ZSB3
aGljaCBtYWtlcyB5IGFzCi0gICAgLy8gY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHF1ZXJ5IHBv
aW50LiBTZWUgd2hldGhlciB0aGUgcXVlcnkKLSAgICAvLyBsaW5lJ3Mgb3JpZ2luIGlzIHRvIHRo
ZSBsZWZ0IG9mIHRoZSBhc3NvY2lhdGVkIHggY29vcmRpbmF0ZS4KLQotICAgIC8vIE1heEl0ZXJh
dGlvbnMgaXMgY2hvc2VuIGFzIHRoZSBudW1iZXIgb2YgbWFudGlzc2EgYml0cyBmb3IgYSBmbG9h
dCwKLSAgICAvLyBzaW5jZSB0aGVyZSdzIG5vIHdheSB3ZSBhcmUgZ29pbmcgdG8gZ2V0IG1vcmUg
cHJlY2lzaW9uIGJ5Ci0gICAgLy8gaXRlcmF0aW5nIG1vcmUgdGltZXMgdGhhbiB0aGF0LgotICAg
IGNvbnN0IGludCBNYXhJdGVyYXRpb25zID0gMjM7Ci0gICAgRmxvYXRQb2ludCBldmFsdWF0ZWRQ
b2ludDsKLSAgICBpbnQgaXRlciA9IDA7Ci0gICAgZmxvYXQgdXBwZXJUOwotICAgIGZsb2F0IGxv
d2VyVDsKLSAgICAvLyBOZWVkIHRvIGludmVydCBkaXJlY3Rpb24gb2YgdCBwYXJhbWV0ZXIgaWYg
Y3ViaWMgZ29lcyB1cAotICAgIC8vIGluc3RlYWQgb2YgZG93bgotICAgIGlmIChjdWJpY1szXS55
KCkgPiBjdWJpY1swXS55KCkpIHsKLSAgICAgICAgdXBwZXJUID0gMTsKLSAgICAgICAgbG93ZXJU
ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICB1cHBlclQgPSAwOwotICAgICAgICBsb3dlclQg
PSAxOwotICAgIH0KLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0IHQgPSAwLjVmICogKHVwcGVyVCAr
IGxvd2VyVCk7Ci0gICAgICAgIGV2YWx1YXRlZFBvaW50ID0gZXZhbHVhdGVDdWJpY0F0KGN1Ymlj
LCB0KTsKLSAgICAgICAgaWYgKHhSYXkueSgpID4gZXZhbHVhdGVkUG9pbnQueSgpKQotICAgICAg
ICAgICAgbG93ZXJUID0gdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJUID0gdDsK
LSAgICB9IHdoaWxlICgrK2l0ZXIgPCBNYXhJdGVyYXRpb25zICYmICFuZWFybHlaZXJvKGV2YWx1
YXRlZFBvaW50LnkoKSAtIHhSYXkueSgpKSk7Ci0KLSAgICAvLyBGSVhNRTogb25jZSB3ZSBoYXZl
IG1vcmUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhpcyBjb2RlLAotICAgIC8vIGRldGVybWluZSB3
aGV0aGVyIHRoaXMgc2hvdWxkIGJlIHVzaW5nIGEgZnV6enkgdGVzdC4KLSAgICBpZiAoeFJheS54
KCkgPD0gZXZhbHVhdGVkUG9pbnQueCgpKSB7Ci0gICAgICAgIGFtYmlndW91cyA9IHBvaW50QXRF
eHRyZW11bTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotLy8gRGl2aWRlcyB0aGUgbnVtZXJhdG9yIGJ5IHRoZSBkZW5vbWluYXRvciBzYWZlbHkg
Zm9yIHRoZSBjYXNlIHdoZXJlCi0vLyB0aGUgcmVzdWx0IG11c3QgbGllIGluIHRoZSByYW5nZSAo
MC4uMSkuIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlcgotLy8gdGhlIHJlc3VsdCBpcyB2YWxpZC4K
LWJvb2wgc2FmZVVuaXREaXZpZGUoZmxvYXQgbnVtZXJhdG9yLCBmbG9hdCBkZW5vbWluYXRvciwg
ZmxvYXQmIHJhdGlvKQotewotICAgIGlmIChudW1lcmF0b3IgPCAwKSB7Ci0gICAgICAgIC8vIE1h
a2UgdGhlICJudW1lcmF0b3IgPj0gZGVub21pbmF0b3IiIGNoZWNrIGJlbG93IHdvcmsuCi0gICAg
ICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3I7Ci0gICAgICAgIGRlbm9taW5hdG9yID0gLWRlbm9t
aW5hdG9yOwotICAgIH0KLSAgICBpZiAoIW51bWVyYXRvciB8fCAhZGVub21pbmF0b3IgfHwgbnVt
ZXJhdG9yID49IGRlbm9taW5hdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmxvYXQg
ciA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKHIgPj0gMCAmJiByIDwgMSk7Ci0gICAgaWYg
KCFyKSAvLyBjYXRjaCB1bmRlcmZsb3cgaWYgbnVtZXJhdG9yIDw8PDwgZGVub21pbmF0b3IKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJhdGlvID0gcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gRnJvbSBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLgotLy8KLS8vICAgcSA9IC0xLzIgKGIg
KyBzaWduKGIpIHNxcnRbYipiIC0gNCphKmNdKQotLy8gICB4MSA9IHEgLyBhCi0vLyAgIHgyID0g
YyAvIHEKLS8vCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVhbCByb290cyBvZiB0aGUgZXF1
YXRpb24gWzAuLjJdLiBSb290cyBhcmUKLS8vIHJldHVybmVkIGluIHNvcnRlZCBvcmRlciwgc21h
bGxlciByb290IGZpcnN0LgotaW50IGZpbmRVbml0UXVhZFJvb3RzKGZsb2F0IGEsIGZsb2F0IGIs
IGZsb2F0IGMsIGZsb2F0IHJvb3RzWzJdKQotewotICAgIGlmICghYSkKLSAgICAgICAgcmV0dXJu
IHNhZmVVbml0RGl2aWRlKC1jLCBiLCByb290c1swXSkgPyAxIDogMDsKLQotICAgIGZsb2F0IGRp
c2NyaW1pbmFudCA9IGIqYiAtIDQqYSpjOwotICAgIGlmIChkaXNjcmltaW5hbnQgPCAwIHx8IHN0
ZDo6aXNuYW4oZGlzY3JpbWluYW50KSkgLy8gY29tcGxleCByb290cwotICAgICAgICByZXR1cm4g
MDsKLSAgICBkaXNjcmltaW5hbnQgPSBzcXJ0ZihkaXNjcmltaW5hbnQpOwotCi0gICAgZmxvYXQg
cSA9IChiIDwgMCkgPyAtKGIgLSBkaXNjcmltaW5hbnQpIC8gMiA6IC0oYiArIGRpc2NyaW1pbmFu
dCkgLyAyOwotICAgIGludCBudW1iZXJPZlJvb3RzID0gMDsKLSAgICBpZiAoc2FmZVVuaXREaXZp
ZGUocSwgYSwgcm9vdHNbbnVtYmVyT2ZSb290c10pKQotICAgICAgICArK251bWJlck9mUm9vdHM7
Ci0gICAgaWYgKHNhZmVVbml0RGl2aWRlKGMsIHEsIHJvb3RzW251bWJlck9mUm9vdHNdKSkKLSAg
ICAgICAgKytudW1iZXJPZlJvb3RzOwotICAgIGlmIChudW1iZXJPZlJvb3RzID09IDIpIHsKLSAg
ICAgICAgLy8gU2VlbWluZ2x5IGhhdmUgdHdvIHJvb3RzLiBDaGVjayBmb3IgZXF1YWxpdHkgYW5k
IHNvcnQuCi0gICAgICAgIGlmIChyb290c1swXSA9PSByb290c1sxXSkKLSAgICAgICAgICAgIHJl
dHVybiAxOwotICAgICAgICBpZiAocm9vdHNbMF0gPiByb290c1sxXSkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcChyb290c1swXSwgcm9vdHNbMV0pOwotICAgIH0KLSAgICByZXR1cm4gbnVtYmVyT2ZS
b290czsKLX0KLQotLy8gQ3ViaWMnKHQpID0gcHReMiArIHF0ICsgciwgd2hlcmUKLS8vICAgcCA9
IDMoLWEgKyAzKGIgLSBjKSArIGQpCi0vLyAgIHEgPSA2KGEgLSAyYiArIGMpCi0vLyAgIHIgPSAz
KGIgLSBhKQotLy8gU29sdmUgZm9yIHQsIGtlZXBpbmcgb25seSB0aG9zZSB0aGF0IGZpdCBiZXR3
ZWVuIDAgPCB0IDwgMS4KLWludCBmaW5kQ3ViaWNFeHRyZW1hKGZsb2F0IGEsIGZsb2F0IGIsIGZs
b2F0IGMsIGZsb2F0IGQsIGZsb2F0IHRWYWx1ZXNbMl0pCi17Ci0gICAgLy8gRGl2aWRlIHAsIHEs
IGFuZCByIGJ5IDMgdG8gc2ltcGxpZnkgdGhlIGVxdWF0aW9ucy4KLSAgICBmbG9hdCBwID0gZCAt
IGEgKyAzKihiIC0gYyk7Ci0gICAgZmxvYXQgcSA9IDIqKGEgLSBiIC0gYiArIGMpOwotICAgIGZs
b2F0IHIgPSBiIC0gYTsKLQotICAgIHJldHVybiBmaW5kVW5pdFF1YWRSb290cyhwLCBxLCByLCB0
VmFsdWVzKTsKLX0KLQotdm9pZCBpbnRlcnBvbGF0ZUN1YmljQ29vcmRzKGZsb2F0IGNvbnRyb2xQ
b2ludDAsIGZsb2F0IGNvbnRyb2xQb2ludDEsIGZsb2F0IGNvbnRyb2xQb2ludDIsIGZsb2F0IGNv
bnRyb2xQb2ludDMsIGZsb2F0KiBkc3QsIGZsb2F0IHQpCi17Ci0gICAgZmxvYXQgYWIgPSBpbnRl
cnBvbGF0ZShjb250cm9sUG9pbnQwLCBjb250cm9sUG9pbnQxLCB0KTsKLSAgICBmbG9hdCBiYyA9
IGludGVycG9sYXRlKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIHQpOwotICAgIGZsb2F0
IGNkID0gaW50ZXJwb2xhdGUoY29udHJvbFBvaW50MiwgY29udHJvbFBvaW50MywgdCk7Ci0gICAg
ZmxvYXQgYWJjID0gaW50ZXJwb2xhdGUoYWIsIGJjLCB0KTsKLSAgICBmbG9hdCBiY2QgPSBpbnRl
cnBvbGF0ZShiYywgY2QsIHQpOwotICAgIGZsb2F0IGFiY2QgPSBpbnRlcnBvbGF0ZShhYmMsIGJj
ZCwgdCk7Ci0KLSAgICBkc3RbMF0gPSBjb250cm9sUG9pbnQwOwotICAgIGRzdFsyXSA9IGFiOwot
ICAgIGRzdFs0XSA9IGFiYzsKLSAgICBkc3RbNl0gPSBhYmNkOwotICAgIGRzdFs4XSA9IGJjZDsK
LSAgICBkc3RbMTBdID0gY2Q7Ci0gICAgZHN0WzEyXSA9IGNvbnRyb2xQb2ludDM7Ci19Ci0KLSNp
Zm5kZWYgTkRFQlVHCi1ib29sIGlzVW5pdEludGVydmFsKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJu
IHggPiAwICYmIHggPCAxOwotfQotI2VuZGlmCi0KLXZvaWQgY2hvcEN1YmljQXRUVmFsdWVzKGNv
bnN0IEZsb2F0UG9pbnQgc3JjWzRdLCBGbG9hdFBvaW50IGRzdFtdLCBjb25zdCBmbG9hdCB0VmFs
dWVzW10sIGludCByb290cykKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByb290cyAtIDE7ICsraSkgewotICAgICAgICBBU1NFUlQoaXNVbml0SW50ZXJ2YWwodFZh
bHVlc1tpXSkpOwotICAgICAgICBBU1NFUlQoaXNVbml0SW50ZXJ2YWwodFZhbHVlc1tpKzFdKSk7
Ci0gICAgICAgIEFTU0VSVCh0VmFsdWVzW2ldIDwgdFZhbHVlc1tpKzFdKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIGlmICghcm9vdHMpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBjaG9wCi0gICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKQotICAgICAgICAgICAgZHN0W2pdID0gc3Jj
W2pdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQgdCA9IHRWYWx1ZXNbMF07
Ci0gICAgRmxvYXRQb2ludCB0bXBbNF07Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2op
Ci0gICAgICAgIHRtcFtqXSA9IHNyY1tqXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm9v
dHM7ICsraSkgewotICAgICAgICBjaG9wQ3ViaWNBdCh0bXAsIGRzdCwgdCk7Ci0gICAgICAgIGlm
IChpID09IHJvb3RzIC0gMSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRzdCArPSAz
OwotICAgICAgICAvLyBNYWtlIHRtcCBjb250YWluIHRoZSByZW1haW5pbmcgY3ViaWMgKGFmdGVy
IHRoZSBmaXJzdCBjaG9wKS4KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opCi0g
ICAgICAgICAgICB0bXBbal0gPSBkc3Rbal07Ci0KLSAgICAgICAgLy8gV2F0Y2ggb3V0IGZvciB0
aGUgY2FzZSB0aGF0IHRoZSByZW5vcm1hbGl6ZWQgdCBpc24ndCBpbiByYW5nZS4KLSAgICAgICAg
aWYgKCFzYWZlVW5pdERpdmlkZSh0VmFsdWVzW2krMV0gLSB0VmFsdWVzW2ldLCAxLjBmIC0gdFZh
bHVlc1tpXSwgdCkpIHsKLSAgICAgICAgICAgIC8vIElmIGl0IGlzbid0LCBqdXN0IGNyZWF0ZSBh
IGRlZ2VuZXJhdGUgY3ViaWMuCi0gICAgICAgICAgICBkc3RbNF0gPSBkc3RbNV0gPSBkc3RbNl0g
PSB0bXBbM107Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVtYShGbG9hdFBvaW50IGNvb3Jkc1s3XSkKLXsKLSAg
ICBjb29yZHNbMl0uc2V0WShjb29yZHNbM10ueSgpKTsKLSAgICBjb29yZHNbNF0uc2V0WShjb29y
ZHNbM10ueSgpKTsKLX0KLQotaW50IGNob3BDdWJpY0F0WUV4dHJlbWEoY29uc3QgRmxvYXRQb2lu
dCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzEwXSkKLXsKLSAgICBmbG9hdCB0VmFsdWVzWzJdOwot
ICAgIGludCByb290cyA9IGZpbmRDdWJpY0V4dHJlbWEoc3JjWzBdLnkoKSwgc3JjWzFdLnkoKSwg
c3JjWzJdLnkoKSwgc3JjWzNdLnkoKSwgdFZhbHVlcyk7Ci0KLSAgICBjaG9wQ3ViaWNBdFRWYWx1
ZXMoc3JjLCBkc3QsIHRWYWx1ZXMsIHJvb3RzKTsKLSAgICBpZiAocm9vdHMpIHsKLSAgICAgICAg
Ly8gd2UgZG8gc29tZSBjbGVhbnVwIHRvIGVuc3VyZSBvdXIgWSBleHRyZW1hIGFyZSBmbGF0Ci0g
ICAgICAgIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1hKCZkc3RbMF0pOwotICAgICAgICBpZiAo
cm9vdHMgPT0gMikKLSAgICAgICAgICAgIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1hKCZkc3Rb
M10pOwotICAgIH0KLSAgICByZXR1cm4gcm9vdHM7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotCi0vLyBQdWJsaWMgY3ViaWMgb3BlcmF0aW9ucy4KLQotdm9pZCBjaG9wQ3ViaWNBdChj
b25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBkc3RbN10sIGZsb2F0IHQpCi17Ci0g
ICAgQVNTRVJUKHQgPj0gMCAmJiB0IDw9IDEpOwotCi0gICAgZmxvYXQgb3V0cHV0WzE0XTsKLSAg
ICBpbnRlcnBvbGF0ZUN1YmljQ29vcmRzKHNyY1swXS54KCksIHNyY1sxXS54KCksIHNyY1syXS54
KCksIHNyY1szXS54KCksICZvdXRwdXRbMF0sIHQpOwotICAgIGludGVycG9sYXRlQ3ViaWNDb29y
ZHMoc3JjWzBdLnkoKSwgc3JjWzFdLnkoKSwgc3JjWzJdLnkoKSwgc3JjWzNdLnkoKSwgJm91dHB1
dFsxXSwgdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA3OyBpKyspCi0gICAgICAgIGRzdFtp
XS5zZXQob3V0cHV0WzIgKiBpXSwgb3V0cHV0WzIgKiBpICsgMV0pOwotfQotCi0vLyBQdWJsaWMg
WFJheSBxdWVyaWVzLgotCi1ib29sIHhSYXlDcm9zc2VzTGluZShjb25zdCBYUmF5JiB4UmF5LCBj
b25zdCBGbG9hdFBvaW50IHB0c1syXSwgYm9vbCYgYW1iaWd1b3VzKQotewotICAgIGFtYmlndW91
cyA9IGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHF1aWNrIGRpc2NhcmRzLgotICAgIC8vIENv
bnNpZGVyIHF1ZXJ5IGxpbmUgZ29pbmcgZXhhY3RseSB0aHJvdWdoIHBvaW50IDAgdG8gbm90Ci0g
ICAgLy8gaW50ZXJzZWN0LCBmb3Igc3ltbWV0cnkgd2l0aCB4UmF5Q3Jvc3Nlc01vbm90b25pY0N1
YmljLgotICAgIGlmICh4UmF5LnkoKSA9PSBwdHNbMF0ueSgpKSB7Ci0gICAgICAgIGFtYmlndW91
cyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHhSYXkueSgp
IDwgcHRzWzBdLnkoKSAmJiB4UmF5LnkoKSA8IHB0c1sxXS55KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoeFJheS55KCkgPiBwdHNbMF0ueSgpICYmIHhSYXkueSgpID4gcHRzWzFd
LnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh4UmF5LngoKSA+IHB0c1swXS54
KCkgJiYgeFJheS54KCkgPiBwdHNbMV0ueCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ly8gRGV0ZXJtaW5lIGRlZ2VuZXJhdGUgY2FzZXMKLSAgICBpZiAobmVhcmx5WmVybyhwdHNbMF0u
eSgpIC0gcHRzWzFdLnkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmVhcmx5
WmVybyhwdHNbMF0ueCgpIC0gcHRzWzFdLngoKSkpIHsKLSAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBkZXRlcm1pbmVkIHRoZSBxdWVyeSBwb2ludCBsaWVzIHdpdGhpbiB0aGUKLSAgICAgICAgLy8g
dmVydGljYWwgcmFuZ2Ugb2YgdGhlIGxpbmUgc2VnbWVudC4KLSAgICAgICAgaWYgKHhSYXkueCgp
IDw9IHB0c1swXS54KCkpIHsKLSAgICAgICAgICAgIGFtYmlndW91cyA9ICh4UmF5LnkoKSA9PSBw
dHNbMV0ueSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gQW1iaWd1aXR5IGNoZWNrCi0gICAgaWYgKHhS
YXkueSgpID09IHB0c1sxXS55KCkpIHsKLSAgICAgICAgaWYgKHhSYXkueCgpIDw9IHB0c1sxXS54
KCkpIHsKLSAgICAgICAgICAgIGFtYmlndW91cyA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIEZ1
bGwgbGluZSBzZWdtZW50IGV2YWx1YXRpb24KLSAgICBmbG9hdCBkZWx0YVkgPSBwdHNbMV0ueSgp
IC0gcHRzWzBdLnkoKTsKLSAgICBmbG9hdCBkZWx0YVggPSBwdHNbMV0ueCgpIC0gcHRzWzBdLngo
KTsKLSAgICBmbG9hdCBzbG9wZSA9IGRlbHRhWSAvIGRlbHRhWDsKLSAgICBmbG9hdCBiID0gcHRz
WzBdLnkoKSAtIHNsb3BlICogcHRzWzBdLngoKTsKLSAgICAvLyBTb2x2ZSBmb3IgeCBjb29yZGlu
YXRlIGF0IHkgPSB4UmF5LnkoKQotICAgIGZsb2F0IHggPSAoeFJheS55KCkgLSBiKSAvIHNsb3Bl
OwotICAgIHJldHVybiB4UmF5LngoKSA8PSB4OwotfQotCi1pbnQgbnVtWFJheUNyb3NzaW5nc0Zv
ckN1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0UG9pbnQgY3ViaWNbNF0sIGJvb2wm
IGFtYmlndW91cykKLXsKLSAgICBpbnQgbnVtQ3Jvc3NpbmdzID0gMDsKLSAgICBGbG9hdFBvaW50
IG1vbm90b25pY0N1Ymljc1sxMF07Ci0gICAgaW50IG51bU1vbm90b25pY0N1YmljcyA9IDEgKyBj
aG9wQ3ViaWNBdFlFeHRyZW1hKGN1YmljLCBtb25vdG9uaWNDdWJpY3MpOwotICAgIGFtYmlndW91
cyA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQqIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgPSAmbW9u
b3RvbmljQ3ViaWNzWzBdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTW9ub3RvbmljQ3Vi
aWNzOyArK2kpIHsKLSAgICAgICAgaWYgKHhSYXlDcm9zc2VzTW9ub3RvbmljQ3ViaWMoeFJheSwg
bW9ub3RvbmljQ3ViaWNzUG9pbnRlciwgYW1iaWd1b3VzKSkKLSAgICAgICAgICAgICsrbnVtQ3Jv
c3NpbmdzOwotICAgICAgICBpZiAoYW1iaWd1b3VzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgKz0gMzsKLSAgICB9Ci0gICAgcmV0dXJuIG51
bUNyb3NzaW5nczsKLX0KLQotLyoKLSAqIEJhc2VkIG9uIEMgY29kZSBmcm9tIHRoZSBhcnRpY2xl
Ci0gKiAiVGVzdGluZyB0aGUgQ29udmV4aXR5IG9mIGEgUG9seWdvbiIKLSAqIGJ5IFBldGVyIFNj
aG9ybiBhbmQgRnJlZGVyaWNrIEZpc2hlciwKLSAqIChzY2hvcm5AaW5mLmV0aHouY2gsIGZyZWRA
a3BjLmNvbSkKLSAqIGluICJHcmFwaGljcyBHZW1zIElWIiwgQWNhZGVtaWMgUHJlc3MsIDE5OTQK
LSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEZsb2F0U2l6ZSYg
ZGVsdGEpCi17Ci0gICAgcmV0dXJuIChkZWx0YS53aWR0aCgpID4gMCkgPyAtMSA6IC8qIHggY29v
cmQgZGlmZiwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KLSAgICAgICAgICAgKGRlbHRhLndpZHRo
KCkgPCAwKSA/ICAxIDogLyogeCBjb29yZCBkaWZmLCBzZWNvbmQgcHQgPCBmaXJzdCBwdCAqLwot
ICAgICAgICAgICAoZGVsdGEuaGVpZ2h0KCkgPiAwKSA/IC0xIDogLyogeCBjb29yZCBzYW1lLCBz
ZWNvbmQgcHQgPiBmaXJzdCBwdCAqLwotICAgICAgICAgICAoZGVsdGEuaGVpZ2h0KCkgPCAwKSA/
ICAxIDogLyogeCBjb29yZCBzYW1lLCBzZWNvbmQgcHQgPiBmaXJzdCBwdCAqLwotICAgICAgICAg
ICAwOyAvKiBzZWNvbmQgcHQgZXF1YWxzIGZpcnN0IHBvaW50ICovCi19Ci0KLXN0YXRpYyBpbmxp
bmUgZmxvYXQgY29udmV4Q3Jvc3MoY29uc3QgRmxvYXRTaXplJiBwLCBjb25zdCBGbG9hdFNpemUm
IHEpCi17Ci0gICAgcmV0dXJuIHAud2lkdGgoKSAqIHEuaGVpZ2h0KCkgLSBwLmhlaWdodCgpICog
cS53aWR0aCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udmV4Q2hlY2tUcmlwbGUoY29u
c3QgRmxvYXRTaXplJiBkY3VyLCBjb25zdCBGbG9hdFNpemUmIGRwcmV2LCBpbnQqIGN1ckRpciwg
aW50KiBkaXJDaGFuZ2VzLCBpbnQqIGFuZ2xlU2lnbikKLXsKLSAgICBpbnQgdGhpc0RpciA9IGNv
bnZleENvbXBhcmUoZGN1cik7Ci0gICAgaWYgKHRoaXNEaXIgPT0gLSpjdXJEaXIpCi0gICAgICAg
ICsrKmRpckNoYW5nZXM7Ci0gICAgKmN1ckRpciA9IHRoaXNEaXI7Ci0gICAgZmxvYXQgY3Jvc3Mg
PSBjb252ZXhDcm9zcyhkcHJldiwgZGN1cik7Ci0gICAgaWYgKGNyb3NzID4gMCkgewotICAgICAg
ICBpZiAoKmFuZ2xlU2lnbiA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgKmFuZ2xlU2lnbiA9IDE7Ci0gICAgfSBlbHNlIGlmIChjcm9zcyA8IDApIHsKLSAgICAgICAg
aWYgKCphbmdsZVNpZ24gPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
KmFuZ2xlU2lnbiA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBpc0Nv
bnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywgaW50IG5WZXJ0aWNlcykKLXsKLSAgICBp
bnQgZGlyQ2hhbmdlcyA9IDAsIGFuZ2xlU2lnbiA9IDA7Ci0gICAgRmxvYXRQb2ludCBzZWNvbmQs
IHRoaXJkOwotICAgIEZsb2F0U2l6ZSBkcHJldiwgZGN1cjsKLQotICAgIC8qIEdldCBkaWZmZXJl
bnQgcG9pbnQsIHJldHVybiBpZiBsZXNzIHRoYW4gMyBkaWZmIHBvaW50cy4gKi8KLSAgICBpZiAo
blZlcnRpY2VzIDwgMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBpID0gMTsKLSAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzZWNvbmQgPSB2ZXJ0aWNlc1tpKytdOwotICAgICAg
ICBkcHJldiA9IHNlY29uZCAtIHZlcnRpY2VzWzBdOwotICAgICAgICBpZiAoZHByZXYud2lkdGgo
KSB8fCBkcHJldi5oZWlnaHQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKiBDaGVj
ayBpZiBvdXQgb2YgcG9pbnRzLiBDaGVjayBoZXJlIHRvIGF2b2lkIHNsb3dpbmcgZG93biBjYXNl
cwotICAgICAgICAgKiB3aXRob3V0IHJlcGVhdGVkIHBvaW50cy4KLSAgICAgICAgICovCi0gICAg
ICAgIGlmIChpID49IG5WZXJ0aWNlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgRmxvYXRQb2ludCBzYXZlU2Vjb25kID0gc2Vjb25kOwotICAgIGludCBjdXJEaXIgPSBj
b252ZXhDb21wYXJlKGRwcmV2KTsgICAgICAgIC8qIEZpbmQgaW5pdGlhbCBkaXJlY3Rpb24gKi8K
LSAgICB3aGlsZSAoaSA8IG5WZXJ0aWNlcykgewotICAgICAgICAvKiBHZXQgZGlmZmVyZW50IHBv
aW50LCBicmVhayBpZiBubyBtb3JlIHBvaW50cyAqLwotICAgICAgICB0aGlyZCA9IHZlcnRpY2Vz
W2krK107Ci0gICAgICAgIGRjdXIgPSB0aGlyZCAtIHNlY29uZDsKLSAgICAgICAgaWYgKCFkY3Vy
LndpZHRoKCkgJiYgIWRjdXIuaGVpZ2h0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAvKiBDaGVjayBjdXJyZW50IHRocmVlIHBvaW50cyAqLwotICAgICAgICBpZiAoIWNvbnZl
eENoZWNrVHJpcGxlKGRjdXIsIGRwcmV2LCAmY3VyRGlyLCAmZGlyQ2hhbmdlcywgJmFuZ2xlU2ln
bikpIAotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzZWNvbmQgPSB0aGlyZDsg
ICAgIC8qIFJlbWVtYmVyIHB0ciB0byBjdXJyZW50IHBvaW50LiAqLwotICAgICAgICBkcHJldiA9
IGRjdXI7ICAgICAgIC8qIFJlbWVtYmVyIGN1cnJlbnQgZGVsdGEuICovCi0gICAgfQotCi0gICAg
LyogTXVzdCBjaGVjayBmb3IgZGlyZWN0aW9uIGNoYW5nZXMgZnJvbSBsYXN0IHZlcnRleCBiYWNr
IHRvIGZpcnN0ICovCi0gICAgdGhpcmQgPSB2ZXJ0aWNlc1swXTsgICAgICAgICAgICAgICAgICAv
KiBQcmVwYXJlIGZvciAnQ29udmV4Q2hlY2tUcmlwbGUnICovCi0gICAgZGN1ciA9IHRoaXJkIC0g
c2Vjb25kOwotICAgIGlmIChjb252ZXhDb21wYXJlKGRjdXIpKSB7Ci0gICAgICAgIGlmICghY29u
dmV4Q2hlY2tUcmlwbGUoZGN1ciwgZHByZXYsICZjdXJEaXIsICZkaXJDaGFuZ2VzLCAmYW5nbGVT
aWduKSkgCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHNlY29uZCA9IHRoaXJk
OyAgICAgLyogUmVtZW1iZXIgcHRyIHRvIGN1cnJlbnQgcG9pbnQuICovCi0gICAgICAgIGRwcmV2
ID0gZGN1cjsgICAgICAgLyogUmVtZW1iZXIgY3VycmVudCBkZWx0YS4gKi8KLSAgICB9Ci0KLSAg
ICAvKiBhbmQgY2hlY2sgZm9yIGRpcmVjdGlvbiBjaGFuZ2VzIGJhY2sgdG8gc2Vjb25kIHZlcnRl
eCAqLwotICAgIGRjdXIgPSBzYXZlU2Vjb25kIC0gc2Vjb25kOwotICAgIGlmICghY29udmV4Q2hl
Y2tUcmlwbGUoZGN1ciwgZHByZXYsICZjdXJEaXIsICZkaXJDaGFuZ2VzLCAmYW5nbGVTaWduKSkg
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8qIERlY2lkZSBvbiBwb2x5Z29uIHR5cGUg
Z2l2ZW4gYWNjdW11bGF0ZWQgc3RhdHVzICovCi0gICAgaWYgKGRpckNoYW5nZXMgPiAyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYW5nbGVTaWduID4gMCB8fCBhbmdsZVNpZ24g
PCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIExvb3BCbGlubk1hdGhVdGlscwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1h
dGhVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlu
bk1hdGhVdGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFkOTAxMzQxNGVk
OWJhNTU5ZWMwN2JkYjI3ZTQ1YjE5MTc3ODg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5NYXRoVXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBMb29wQmxpbm5NYXRoVXRpbHNfaAotI2RlZmluZSBMb29wQmxpbm5NYXRoVXRp
bHNfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5o
IgotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBVc2UgYSBu
YW1lc3BhY2UgZm9yIHRoZXNlIHNvIHdlIGNhbiBlYXNpbHkgaW1wb3J0IHRoZW0uCi1uYW1lc3Bh
Y2UgTG9vcEJsaW5uTWF0aFV0aWxzIHsKLQotZmxvYXQgcm91bmRUb1plcm8oZmxvYXQgdmFsKTsK
LWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQb2ludCYgdjAsIGNvbnN0IEZsb2F0UG9pbnQm
IHYxKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQb2ludDNEJiB2MCwgY29uc3QgRmxv
YXRQb2ludDNEJiB2MSk7Ci1ib29sIGFwcHJveEVxdWFsKGZsb2F0IGYwLCBmbG9hdCBmMSk7Ci0K
LS8vIERldGVybWluZXMgd2hldGhlciB0aGUgbGluZSBzZWdtZW50IGJldHdlZW4gKHAxLCBxMSkg
aW50ZXJzZWN0cwotLy8gdGhhdCBiZXR3ZWVuIChwMiwgcTIpLgotYm9vbCBsaW5lc0ludGVyc2Vj
dChjb25zdCBGbG9hdFBvaW50JiBwMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAyLAotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBxMik7Ci0KLS8vIERldGVybWluZXMg
d2hldGhlciAicG9pbnQiIGlzIGluc2lkZSB0aGUgMkQgdHJpYW5nbGUgZGVmaW5lZCBieQotLy8g
dmVydGljZXMgYSwgYiwgYW5kIGMuIFRoaXMgdGVzdCBkZWZpbmVzIHRoYXQgcG9pbnRzIGV4YWN0
bHkgb24gYW4KLS8vIGVkZ2UgYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJlIGluc2lkZSB0aGUgdHJp
YW5nbGUuCi1ib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgYyk7Ci0KLS8vIERldGVybWluZXMgd2hldGhlciB0aGUgdHJpYW5nbGVzIGRlZmlu
ZWQgYnkgdGhlIHBvaW50cyAoYTEsIGIxLCBjMSkKLS8vIGFuZCAoYTIsIGIyLCBjMikgb3Zlcmxh
cC4gVGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGF0Ci0vLyBpZiB0aGUgdHdv
IHRyaWFuZ2xlcyBvbmx5IHNoYXJlIGFuIGFkamFjZW50IGVkZ2Ugb3IgdmVydGV4LCB0aGV5Ci0v
LyBhcmUgbm90IGNvbnNpZGVyZWQgdG8gb3ZlcmxhcC4KLWJvb2wgdHJpYW5nbGVzT3ZlcmxhcChj
b25zdCBGbG9hdFBvaW50JiBhMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBiMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMSwKLSAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhMiwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBjMik7Ci0KLS8vIEdpdmVuIGEgc3JjIGN1YmljIGJlemllciwgY2hvcHMg
aXQgYXQgdGhlIHNwZWNpZmllZCB0IHZhbHVlLAotLy8gd2hlcmUgMCA8IHQgPCAxLCBhbmQgcmV0
dXJucyB0aGUgdHdvIG5ldyBjdWJpY3MgaW4gZHN0WzAuLjNdCi0vLyBhbmQgZHN0WzMuLjZdLgot
dm9pZCBjaG9wQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBkc3Rb
N10sIGZsb2F0IHQpOwotCi0vLyAiWC1SYXkiIHF1ZXJpZXMuIEFuIFhSYXkgaXMgYSBoYWxmLWxp
bmUgb3JpZ2luYXRpbmcgYXQgdGhlIGdpdmVuCi0vLyBwb2ludCBhbmQgZXh0ZW5kaW5nIHRvIHg9
K2luZmluaXR5LgotdHlwZWRlZiBGbG9hdFBvaW50IFhSYXk7Ci0KLS8vIEdpdmVuIGFuIGFyYml0
cmFyeSBjdWJpYyBiZXppZXIsIHJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzIGFuIFhSYXkKLS8v
IGNyb3NzZXMgdGhlIGN1YmljLiBWYWxpZCByZXR1cm4gdmFsdWVzIGFyZSBbMC4uM10uCi0vLwot
Ly8gQnkgZGVmaW5pdGlvbiB0aGUgY3ViaWMgaXMgb3BlbiBhdCB0aGUgc3RhcnRpbmcgcG9pbnQ7
IGluIG90aGVyCi0vLyB3b3JkcywgaWYgcHQuZlkgaXMgZXF1aXZhbGVudCB0byBjdWJpY1swXS5m
WSwgYW5kIHB0LmZYIGlzIHRvIHRoZQotLy8gbGVmdCBvZiB0aGUgY3VydmUsIHRoZSBsaW5lIGlz
IG5vdCBjb25zaWRlcmVkIHRvIGNyb3NzIHRoZSBjdXJ2ZSwKLS8vIGJ1dCBpZiBpdCBpcyBlcXVh
bCB0byBjdWJpY1szXS5mWSB0aGVuIGl0IGlzIGNvbnNpZGVyZWQgdG8KLS8vIGNyb3NzLgotLy8K
LS8vIE91dGdvaW5nICJhbWJpZ3VvdXMiIGFyZ3VtZW50IGluZGljYXRlcyB3aGV0aGVyIHRoZSBh
bnN3ZXIgaXMgYW1iaWd1b3VzCi0vLyBiZWNhdXNlIHRoZSBxdWVyeSBvY2N1cnJlZCBleGFjdGx5
IGF0IG9uZSBvZiB0aGUgZW5kcG9pbnRzJyB5Ci0vLyBjb29yZGluYXRlcyBvciBhdCBhIHRhbmdl
bnQgcG9pbnQsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyIHF1ZXJ5IHkKLS8vIGNvb3JkaW5hdGUg
aXMgcHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgotaW50IG51bVhSYXlDcm9zc2luZ3NGb3JDdWJp
Yyhjb25zdCBYUmF5JiB4UmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50IGN1YmljWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBh
bWJpZ3VvdXMpOwotCi0vLyBHaXZlbiBhIGxpbmUgc2VnbWVudCBmcm9tIGxpbmVFbmRwb2ludHNb
MF0gdG8gbGluZUVuZHBvaW50c1sxXSwgYW5kIGFuCi0vLyBYUmF5LCByZXR1cm5zIHRydWUgaWYg
dGhleSBpbnRlcnNlY3QuIE91dGdvaW5nICJhbWJpZ3VvdXMiIGFyZ3VtZW50Ci0vLyBpbmRpY2F0
ZXMgd2hldGhlciB0aGUgYW5zd2VyIGlzIGFtYmlndW91cyBiZWNhdXNlIHRoZSBxdWVyeSBvY2N1
cnJlZAotLy8gZXhhY3RseSBhdCBvbmUgb2YgdGhlIGVuZHBvaW50cycgeSBjb29yZGluYXRlcywg
aW5kaWNhdGluZyB0aGF0IGFub3RoZXIKLS8vIHF1ZXJ5IHkgY29vcmRpbmF0ZSBpcyBwcmVmZXJy
ZWQgZm9yIHJvYnVzdG5lc3MuCi1ib29sIHhSYXlDcm9zc2VzTGluZShjb25zdCBYUmF5JiB4UmF5
LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCBsaW5lRW5kcG9pbnRzWzJd
LAotICAgICAgICAgICAgICAgICAgICAgYm9vbCYgYW1iaWd1b3VzKTsKLQotCi1ib29sIGlzQ29u
dmV4KGNvbnN0IEZsb2F0UG9pbnQqIHZlcnRpY2VzLCBpbnQgblZlcnRpY2VzKTsKLQotfSAvLyBu
YW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIExvb3BCbGlubk1hdGhVdGlsc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aENhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWYxNWU1M2QyYzRjZGZiMTM2NGE1MGZkYTYxMTEz
YTUwZjFmYmVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIkxvb3BCbGlublBhdGhDYWNoZS5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUxvb3BCbGlublBhdGhDYWNoZTo6TG9vcEJsaW5uUGF0aENhY2hlKCkKLXsKLX0K
LQotTG9vcEJsaW5uUGF0aENhY2hlOjp+TG9vcEJsaW5uUGF0aENhY2hlKCkKLXsKLX0KLQotdm9p
ZCBMb29wQmxpbm5QYXRoQ2FjaGU6OmFkZFZlcnRleChmbG9hdCB4LCBmbG9hdCB5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBrLCBmbG9hdCBsLCBmbG9hdCBtKQot
ewotICAgIG1fdmVydGljZXMuYXBwZW5kKHgpOwotICAgIG1fdmVydGljZXMuYXBwZW5kKHkpOwot
ICAgIG1fdGV4Y29vcmRzLmFwcGVuZChrKTsKLSAgICBtX3RleGNvb3Jkcy5hcHBlbmQobCk7Ci0g
ICAgbV90ZXhjb29yZHMuYXBwZW5kKG0pOwotfQotCi12b2lkIExvb3BCbGlublBhdGhDYWNoZTo6
Y2xlYXIoKQotewotICAgIG1fdmVydGljZXMuY2xlYXIoKTsKLSAgICBtX3RleGNvb3Jkcy5jbGVh
cigpOwotICAgIG1faW50ZXJpb3JWZXJ0aWNlcy5jbGVhcigpOwotI2lmZGVmIExPT1BfQkxJTk5f
UEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotICAgIG1faW50ZXJpb3JFZGdlVmVydGlj
ZXMuY2xlYXIoKTsKLSNlbmRpZiAvLyBMT09QX0JMSU5OX1BBVEhfQ0FDSEVfREVCVUdfSU5URVJJ
T1JfRURHRVMKLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoQ2FjaGU6OmFkZEludGVyaW9yVmVydGV4
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9pbnRlcmlvclZlcnRpY2VzLmFwcGVuZCh4KTsK
LSAgICBtX2ludGVyaW9yVmVydGljZXMuYXBwZW5kKHkpOwotfQotCi0jaWZkZWYgTE9PUF9CTElO
Tl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VTCi11bnNpZ25lZCBMb29wQmxpbm5QYXRo
Q2FjaGU6Om51bWJlck9mSW50ZXJpb3JFZGdlVmVydGljZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2ludGVyaW9yRWRnZVZlcnRpY2VzLnNpemUoKSAvIDI7Ci19Ci0KLWNvbnN0IGZsb2F0KiBM
b29wQmxpbm5QYXRoQ2FjaGU6OmludGVyaW9yRWRnZVZlcnRpY2VzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW51bWJlck9mSW50ZXJpb3JFZGdlVmVydGljZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIG1faW50ZXJpb3JFZGdlVmVydGljZXMuZGF0YSgpOwotfQotCi12b2lkIExvb3BC
bGlublBhdGhDYWNoZTo6YWRkSW50ZXJpb3JFZGdlVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgbV9pbnRlcmlvckVkZ2VWZXJ0aWNlcy5hcHBlbmQoeCk7Ci0gICAgbV9pbnRlcmlvckVk
Z2VWZXJ0aWNlcy5hcHBlbmQoeSk7Ci19Ci0jZW5kaWYgLy8gTE9PUF9CTElOTl9QQVRIX0NBQ0hF
X0RFQlVHX0lOVEVSSU9SX0VER0VTCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRo
Q2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxZDI0NjI0ODNjMzQ3YjNk
NzVmZTNlNTQwYTZiYTRkYjUyOTVmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uUGF0aENhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTG9vcEJsaW5uUGF0aENhY2hlX2gKLSNkZWZpbmUgTG9vcEJsaW5uUGF0aENhY2hlX2gK
LQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIGNhY2hlIG9mIHRoZSBwcm9jZXNzZWQgdHJp
YW5nbGUgbWVzaCBmb3IgYSBnaXZlbiBwYXRoLiBCZWNhdXNlIHRoZXNlCi0vLyBtaWdodCBiZSBl
eHBlbnNpdmUgdG8gYWxsb2NhdGUgKHVzaW5nIG1hbGxvYy9mcmVlIGludGVybmFsbHkpLCBpdCBp
cwotLy8gcmVjb21tZW5kZWQgdG8gdHJ5IHRvIHJldXNlIHRoZW0gd2hlbiBwb3NzaWJsZS4KLQot
Ly8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gb2J0YWluIGRlYnVnZ2luZyBpbmZvcm1hdGlv
biBmb3IgdGhlIGVkZ2VzCi0vLyBmYWNpbmcgdGhlIGludGVyaW9yIHJlZ2lvbiBvZiB0aGUgbWVz
aC4KLS8vICNkZWZpbmUgTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VT
Ci0KLWNsYXNzIExvb3BCbGlublBhdGhDYWNoZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TG9vcEJsaW5uUGF0aENhY2hlKTsKLXB1YmxpYzoKLSAgICBMb29wQmxpbm5QYXRoQ2FjaGUoKTsK
LSAgICB+TG9vcEJsaW5uUGF0aENhY2hlKCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlZlcnRp
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy5zaXplKCkgLyAyOyB9Ci0KLSAgICAvLyBH
ZXQgdGhlIGJhc2UgcG9pbnRlciB0byB0aGUgdmVydGV4IGluZm9ybWF0aW9uLiBUaGVyZSBhcmUg
dHdvCi0gICAgLy8gY29vcmRpbmF0ZXMgcGVyIHZlcnRleC4gVGhpcyBwb2ludGVyIGlzIHZhbGlk
IHVudGlsIHRoZSBjYWNoZSBpcwotICAgIC8vIGNsZWFyZWQgb3IgYW5vdGhlciB2ZXJ0ZXggaXMg
YWRkZWQuIFJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8KLSAgICAvLyB2ZXJ0aWNlcyBpbiB0aGUg
bWVzaC4KLSAgICBjb25zdCBmbG9hdCogdmVydGljZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCFudW1iZXJPZlZlcnRpY2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuIG1fdmVydGljZXMuZGF0YSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgYmFzZSBw
b2ludGVyIHRvIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGUgaW5mb3JtYXRpb24uIFRoZXJlCi0gICAg
Ly8gYXJlIHRocmVlIGNvb3JkaW5hdGVzIHBlciB2ZXJ0ZXguIFRoaXMgcG9pbnRlciBpcyB2YWxp
ZCB1bnRpbCB0aGUKLSAgICAvLyBjYWNoZSBpcyBjbGVhcmVkIG9yIGFub3RoZXIgdmVydGV4IGlz
IGFkZGVkLiBSZXR1cm5zIDAgaWYKLSAgICAvLyB0aGVyZSBhcmUgbm8gdmVydGljZXMgaW4gdGhl
IG1lc2guCi0gICAgY29uc3QgZmxvYXQqIHRleGNvb3JkcygpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoIW51bWJlck9mVmVydGljZXMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV90ZXhjb29yZHMuZGF0YSgpOwotICAgIH0KLQotICAgIC8vIEFkZHMgYSB2ZXJ0
ZXgncyBpbmZvcm1hdGlvbiB0byB0aGUgY2FjaGUuIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzCi0g
ICAgLy8gYXJlIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXggb24gdGhlIHBs
YW5lOyB0aGUgbGFzdAotICAgIC8vIHRocmVlIGFyZ3VtZW50cyBhcmUgdGhlIGN1YmljIHRleHR1
cmUgY29vcmRpbmF0ZXMgYXNzb2NpYXRlZCB3aXRoCi0gICAgLy8gdGhpcyB2ZXJ0ZXguCi0gICAg
dm9pZCBhZGRWZXJ0ZXgoZmxvYXQgeCwgZmxvYXQgeSwKLSAgICAgICAgICAgICAgICAgICBmbG9h
dCAvKmsqLywgZmxvYXQgLypsKi8sIGZsb2F0IC8qbSovKTsKLQotICAgIHVuc2lnbmVkIG51bWJl
ck9mSW50ZXJpb3JWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJpb3JWZXJ0aWNlcy5z
aXplKCkgLyAyOyB9Ci0KLSAgICAvLyBCYXNlIHBvaW50ZXIgdG8gdGhlIGludGVyaW9yIHZlcnRp
Y2VzOyB0d28gY29vcmRpbmF0ZXMgcGVyCi0gICAgLy8gdmVydGV4LCB3aGljaCBjYW4gYmUgZHJh
d24gYXMgR0xfVFJJQU5HTEVTLiBSZXR1cm5zIDAgaWYgdGhlcmUKLSAgICAvLyBhcmUgbm8gaW50
ZXJpb3IgdmVydGljZXMgaW4gdGhlIG1lc2guCi0gICAgY29uc3QgZmxvYXQqIGludGVyaW9yVmVy
dGljZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFudW1iZXJPZkludGVyaW9yVmVydGlj
ZXMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9pbnRlcmlvclZl
cnRpY2VzLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEludGVyaW9yVmVydGV4KGZsb2F0
IHgsIGZsb2F0IHkpOwotCi0gICAgLy8gQ2xlYXJzIGFsbCBvZiB0aGUgc3RvcmVkIHZlcnRleCBp
bmZvcm1hdGlvbiBpbiB0aGlzIGNhY2hlLgotICAgIHZvaWQgY2xlYXIoKTsKLQotI2lmZGVmIExP
T1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotICAgIC8vIFRoZSBudW1i
ZXIgb2YgaW50ZXJpb3IgZWRnZSB2ZXJ0aWNlcwotICAgIHVuc2lnbmVkIG51bWJlck9mSW50ZXJp
b3JFZGdlVmVydGljZXMoKSBjb25zdDsKLSAgICAvLyBCYXNlIHBvaW50ZXIgdG8gdGhlIGludGVy
aW9yIHZlcnRpY2VzOyB0d28gY29vcmRpbmF0ZXMgcGVyCi0gICAgLy8gdmVydGV4LCB3aGljaCBj
YW4gYmUgZHJhd24gYXMgR0xfTElORVMuIFJldHVybnMgMCBpZiB0aGVyZSBhcmUKLSAgICAvLyBu
byBpbnRlcmlvciBlZGdlIHZlcnRpY2VzIGluIHRoZSBtZXNoLgotICAgIGNvbnN0IGZsb2F0KiBp
bnRlcmlvckVkZ2VWZXJ0aWNlcygpIGNvbnN0OwotICAgIHZvaWQgYWRkSW50ZXJpb3JFZGdlVmVy
dGV4KGZsb2F0IHgsIGZsb2F0IHkpOwotI2VuZGlmIC8vIExPT1BfQkxJTk5fUEFUSF9DQUNIRV9E
RUJVR19JTlRFUklPUl9FREdFUwotCi1wcml2YXRlOgotICAgIC8vIFRoZSB0d28tZGltZW5zaW9u
YWwgdmVydGljZXMgb2YgdGhlIHRyaWFuZ2xlIG1lc2guCi0gICAgVmVjdG9yPGZsb2F0PiBtX3Zl
cnRpY2VzOwotCi0gICAgLy8gVGhlIHRocmVlLWRpbWVuc2lvbmFsIGN1YmljIHRleHR1cmUgY29v
cmRpbmF0ZXMuCi0gICAgVmVjdG9yPGZsb2F0PiBtX3RleGNvb3JkczsKLQotICAgIFZlY3Rvcjxm
bG9hdD4gbV9pbnRlcmlvclZlcnRpY2VzOwotCi0jaWZkZWYgTE9PUF9CTElOTl9QQVRIX0NBQ0hF
X0RFQlVHX0lOVEVSSU9SX0VER0VTCi0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBvbmx5IGZvciBk
ZWJ1Z2dpbmcKLSAgICBWZWN0b3I8ZmxvYXQ+IG1faW50ZXJpb3JFZGdlVmVydGljZXM7Ci0jZW5k
aWYgLy8gTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VTCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5QYXRoQ2FjaGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlu
blBhdGhQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5QYXRoUHJvY2Vzc29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFk
ODliYzExNzk5ODRiMmYyNmI3ZTJhYzliYmZkZTBlNjA1YzY1NjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEy
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIExvb3AgYW5kIEJs
aW5uJ3MgR1BVIGFjY2VsZXJhdGVkIGN1cnZlCi0vLyByZW5kZXJpbmcgYWxnb3JpdGhtLgotCi0j
aWZuZGVmIExvb3BCbGlublBhdGhQcm9jZXNzb3JfaAotI2RlZmluZSBMb29wQmxpbm5QYXRoUHJv
Y2Vzc29yX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBXZSB1c2UgYSBuYW1lc3BhY2UgZm9y
IGNsYXNzZXMgd2hpY2ggYXJlIHNpbXBseSBpbXBsZW1lbnRhdGlvbgotLy8gZGV0YWlscyBvZiB0
aGUgYWxnb3JpdGhtIGJ1dCB3aGljaCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSBmcm9tIHRoZQotLy8g
Y2xhc3MgZGVmaW5pdGlvbi4KLW5hbWVzcGFjZSBMb29wQmxpbm5QYXRoUHJvY2Vzc29ySW1wbGVt
ZW50YXRpb24gewotCi1jbGFzcyBDb250b3VyOwotY2xhc3MgU2VnbWVudDsKLQotfSAvLyBuYW1l
c3BhY2UgTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0aW9uCi0KLWNsYXNzIFBhdGg7
Ci1jbGFzcyBMb29wQmxpbm5QYXRoQ2FjaGU7Ci1jbGFzcyBQT0RBcmVuYTsKLQotLy8gVGhlIExv
b3BCbGlublBhdGhQcm9jZXNzb3IgdHVybnMgYSBQYXRoIChhc3N1bWVkIHRvIGNvbnRhaW4gb25l
IG9yCi0vLyBtb3JlIGNsb3NlZCByZWdpb25zKSBpbnRvIGEgc2V0IG9mIGV4dGVyaW9yIGFuZCBp
bnRlcmlvciB0cmlhbmdsZXMsCi0vLyBzdG9yZWQgaW4gdGhlIExvb3BCbGlublBhdGhDYWNoZS4g
VGhlIGV4dGVyaW9yIHRyaWFuZ2xlcyBoYXZlCi0vLyBhc3NvY2lhdGVkIDNEIHRleHR1cmUgY29v
cmRpbmF0ZXMgd2hpY2ggYXJlIHVzZWQgdG8gZXZhbHVhdGUgdGhlCi0vLyBjdXJ2ZSdzIGluc2lk
ZS9vdXRzaWRlIGZ1bmN0aW9uIG9uIGEgcGVyLXBpeGVsIGJhc2lzLiBUaGUgaW50ZXJpb3IKLS8v
IHRyaWFuZ2xlcyBhcmUgZmlsbGVkIHdpdGggMTAwJSBvcGFjaXR5LgotLy8KLS8vIE5vdGUgdGhh
dCB0aGUgZmlsbCBzdHlsZSBhbmQgbWFuYWdlbWVudCBvZiBtdWx0aXBsZSBsYXllcnMgYXJlCi0v
LyBzZXBhcmF0ZSBjb25jZXJucywgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCB3aXRoIHNoYWRl
cnMgYW5kCi0vLyBwb2x5Z29uIG9mZnNldHMuCi1jbGFzcyBMb29wQmxpbm5QYXRoUHJvY2Vzc29y
IHsKLXB1YmxpYzoKLSAgICBMb29wQmxpbm5QYXRoUHJvY2Vzc29yKCk7Ci0gICAgZXhwbGljaXQg
TG9vcEJsaW5uUGF0aFByb2Nlc3NvcihQYXNzUmVmUHRyPFBPREFyZW5hPik7Ci0gICAgfkxvb3BC
bGlublBhdGhQcm9jZXNzb3IoKTsKLQotICAgIC8vIFRyYW5zZm9ybXMgdGhlIGdpdmVuIHBhdGgg
aW50byBhIHRyaWFuZ2xlIG1lc2ggZm9yIHJlbmRlcmluZwotICAgIC8vIHVzaW5nIExvb3AgYW5k
IEJsaW5uJ3Mgc2hhZGVyLCBwbGFjaW5nIHRoZSByZXN1bHQgaW50byB0aGUgZ2l2ZW4KLSAgICAv
LyBMb29wQmxpbm5QYXRoQ2FjaGUuCi0gICAgdm9pZCBwcm9jZXNzKGNvbnN0IFBhdGgmLCBMb29w
Qmxpbm5QYXRoQ2FjaGUmKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBFbmFibGVzIG9yIGRp
c2FibGVzIHZlcmJvc2UgbG9nZ2luZyBpbiBkZWJ1ZyBtb2RlLgotICAgIHZvaWQgc2V0VmVyYm9z
ZUxvZ2dpbmcoYm9vbCBvbk9yT2ZmKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIEJ1aWxk
cyBhIGxpc3Qgb2YgY29udG91cnMgZm9yIHRoZSBnaXZlbiBwYXRoLgotICAgIHZvaWQgYnVpbGRD
b250b3Vycyhjb25zdCBQYXRoJik7Ci0KLSAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGxl
ZnQgb3IgcmlnaHQgc2lkZSBvZiBlYWNoIGNvbnRvdXIgc2hvdWxkCi0gICAgLy8gYmUgZmlsbGVk
LgotICAgIHZvaWQgZGV0ZXJtaW5lU2lkZXNUb0ZpbGwoKTsKLQotICAgIC8vIERldGVybWluZXMg
d2hldGhlciB0aGUgZ2l2ZW4gKGNsb3NlZCkgY29udG91ciBpcyBvcmllbnRlZAotICAgIC8vIGNs
b2Nrd2lzZSBvciBjb3VudGVyY2xvY2t3aXNlLgotICAgIHZvaWQgZGV0ZXJtaW5lT3JpZW50YXRp
b24oTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0aW9uOjpDb250b3VyKik7Ci0KLSAg
ICAvLyBTdWJkaXZpZGVzIHRoZSBjdXJ2ZXMgc28gdGhhdCB0aGVyZSBhcmUgbm8gb3ZlcmxhcHMg
b2YgdGhlCi0gICAgLy8gdHJpYW5nbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VydmVzJyBjb250
cm9sIHBvaW50cy4KLSAgICB2b2lkIHN1YmRpdmlkZUN1cnZlcygpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHVzZWQgZHVyaW5nIGN1cnZlIHN1YmRpdmlzaW9uLgotICAgIHZvaWQgY29uZGl0
aW9uYWxseVN1YmRpdmlkZShMb29wQmxpbm5QYXRoUHJvY2Vzc29ySW1wbGVtZW50YXRpb246OlNl
Z21lbnQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8TG9vcEJsaW5u
UGF0aFByb2Nlc3NvckltcGxlbWVudGF0aW9uOjpTZWdtZW50Kj4mIG5leHRTZWdtZW50cyk7Ci0K
LSAgICAvLyBUZXNzZWxsYXRlcyB0aGUgaW50ZXJpb3IgcmVnaW9ucyBvZiB0aGUgY29udG91cnMu
Ci0gICAgdm9pZCB0ZXNzZWxsYXRlSW50ZXJpb3IoTG9vcEJsaW5uUGF0aENhY2hlJik7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgLy8gRm9yIGRlYnVnZ2luZyB0aGUgb3JpZW50YXRpb24gY29tcHV0
YXRpb24uIFJldHVybnMgYWxsIG9mIHRoZQotICAgIC8vIHNlZ21lbnRzIG92ZXJsYXBwaW5nIHRo
ZSBnaXZlbiBZIGNvb3JkaW5hdGUuCi0gICAgVmVjdG9yPExvb3BCbGlublBhdGhQcm9jZXNzb3JJ
bXBsZW1lbnRhdGlvbjo6U2VnbWVudCo+IGFsbFNlZ21lbnRzT3ZlcmxhcHBpbmdZKExvb3BCbGlu
blBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6Q29udG91ciosIGZsb2F0IHgsIGZsb2F0IHkp
OwotCi0gICAgLy8gRm9yIGRlYnVnZ2luZyB0aGUgY3VydmUgc3ViZGl2aXNpb24gYWxnb3JpdGht
LiBTdWJkaXZpZGVzIHRoZQotICAgIC8vIGN1cnZlcyB1c2luZyBhbiBhbHRlcm5hdGUsIHNsb3cg
KE8obl4zKSkgYWxnb3JpdGhtLgotICAgIHZvaWQgc3ViZGl2aWRlQ3VydmVzU2xvdygpOwotI2Vu
ZGlmCi0KLSAgICAvLyBQT0RBcmVuYSBmcm9tIHdoaWNoIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBv
YmplY3RzLgotICAgIFJlZlB0cjxQT0RBcmVuYT4gbV9hcmVuYTsKLQotICAgIC8vIFRoZSBjb250
b3VycyBkZXNjcmliZWQgYnkgdGhlIHBhdGguCi0gICAgVmVjdG9yPExvb3BCbGlublBhdGhQcm9j
ZXNzb3JJbXBsZW1lbnRhdGlvbjo6Q29udG91cio+IG1fY29udG91cnM7Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgLy8gV2hldGhlciBvciBub3QgdG8gcGVyZm9ybSB2ZXJib3NlIGxvZ2dpbmcgaW4g
ZGVidWcgbW9kZS4KLSAgICBib29sIG1fdmVyYm9zZUxvZ2dpbmc7Ci0jZW5kaWYKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExvb3BCbGlublBhdGhQcm9jZXNzb3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlublNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5ZmRjODgz
MTMzZjcxODI4YTY5MmU3YzdkNzVjNmJmZjNkZjVmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvTG9vcEJsaW5uU2hhZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5TaGFkZXIuaCIK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotTG9vcEJsaW5uU2hhZGVyOjpMb29wQmxpbm5TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCi0gICAgOiBTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkK
LXsKLSAgICBtX3dvcmxkVmlld1Byb2plY3Rpb25Mb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCAid29ybGRWaWV3UHJvamVjdGlvbiIpOwotICAgIG1fcG9zaXRp
b25Mb2NhdGlvbiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJwb3NpdGlv
biIpOwotICAgIG1fa2xtTG9jYXRpb24gPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCAia2xtIik7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uU2hhZGVyOjp1c2UodW5zaWduZWQgdmVy
dGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Byb2dyYW0pOwotCi0gICAg
ZmxvYXQgbWF0cml4WzE2XTsKLSAgICBhZmZpbmVUbzR4NCh0cmFuc2Zvcm0sIG1hdHJpeCk7Ci0g
ICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1fd29ybGRWaWV3UHJvamVjdGlvbkxvY2F0
aW9uLCAxIC8qY291bnQqLywgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4KTsKLQotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDIsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIHZlcnRleE9mZnNldCk7Ci0gICAgbV9jb250
ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotCi0gICAg
aWYgKG1fa2xtTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWJQb2ludGVyKG1fa2xtTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFs
c2UsIDAsIGtsbU9mZnNldCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV9rbG1Mb2NhdGlvbik7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMjRkYzNlN2I3NWJh
MGU1MzRmMzJmMzQwZGRkMTM1MDQxNDI0NjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlublNoYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTG9vcEJsaW5uU2hhZGVyX2gKLSNkZWZpbmUgTG9vcEJsaW5uU2hhZGVyX2gKLQotI2lu
Y2x1ZGUgIlNoYWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwotCi1jbGFzcyBMb29wQmxpbm5TaGFkZXIgOiBwdWJsaWMgU2hhZGVyIHsKLXB1
YmxpYzoKLSAgICBlbnVtIFJlZ2lvbiB7Ci0gICAgICAgIEludGVyaW9yLAotICAgICAgICBFeHRl
cmlvcgotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBMb29wQmxpbm5TaGFkZXIoR3JhcGhpY3ND
b250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAgIC8vIFRoaXMgYXNzdW1lcyB0aGUg
dmVydGljZXMgYW5kIGtsbSBjb29yZGluYXRlcyBhcmUgc3RvcmVkIGluIHRoZQotICAgIC8vIHNh
bWUsIGN1cnJlbnRseSBib3VuZCwgYnVmZmVyIG9iamVjdCwgY29udGlndW91c2x5IGFuZCBhdCB0
aGUKLSAgICAvLyBzcGVjaWZpZWQgb2Zmc2V0cy4KLSAgICB2b2lkIHVzZSh1bnNpZ25lZCB2ZXJ0
ZXhPZmZzZXQsIHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0K
LXByaXZhdGU6Ci0gICAgaW50IG1fd29ybGRWaWV3UHJvamVjdGlvbkxvY2F0aW9uOwotICAgIGlu
dCBtX3Bvc2l0aW9uTG9jYXRpb247Ci0gICAgaW50IG1fa2xtTG9jYXRpb247Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5TaGFkZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlk
RmlsbFNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU29saWRGaWxsU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODBjODY3NzA0ZWJjZGNmM2Y2NjM2YjE3NTM3NWNjN2FhNzU2OGQwNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJM
b29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCIKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3du
UHRyPExvb3BCbGlublNvbGlkRmlsbFNoYWRlcj4gTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vcEJsaW5u
U2hhZGVyOjpSZWdpb24gcmVnaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYWRlcjo6QW50aWFsaWFzVHlw
ZSBhbnRpYWxpYXNUeXBlKQotewotICAgIFZlcnRleFR5cGUgdHlwZSA9IChyZWdpb24gPT0gSW50
ZXJpb3IpID8gTG9vcEJsaW5uSW50ZXJpb3IgOiBMb29wQmxpbm5FeHRlcmlvcjsKLSAgICB1bnNp
Z25lZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdGVWZXJ0ZXgodHlwZSwgU29saWRGaWxsKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGcmFnbWVudCh0eXBlLCBTb2xpZEZp
bGwsIGFudGlhbGlhc1R5cGUpKTsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTG9vcEJsaW5uU29saWRGaWxsU2hhZGVy
KGNvbnRleHQsIHByb2dyYW0pKTsKLX0KLQotTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOjpMb29w
Qmxpbm5Tb2xpZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVk
IHByb2dyYW0pCi0gICAgOiBMb29wQmxpbm5TaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkKLXsKLSAg
ICBtX2NvbG9yTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
ImNvbG9yIik7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOjp1c2UodW5zaWdu
ZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgTG9vcEJsaW5uU2hhZGVy
Ojp1c2UodmVydGV4T2Zmc2V0LCBrbG1PZmZzZXQsIHRyYW5zZm9ybSk7Ci0KLSAgICBmbG9hdCBy
Z2JhWzRdOwotICAgIGNvbG9yLmdldFJHQkEocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdi
YVszXSk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9jb2xvckxvY2F0aW9uLCByZ2JhWzBd
ICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10sIHJnYmFbMl0gKiByZ2JhWzNdLCByZ2JhWzNd
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjMxMmEyNjM0ZGQ2MTg2NmM2NTE3
NDJlYTI4OTQ2YTU5MDQwOWFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5T
b2xpZEZpbGxTaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIExvb3BCbGlublNvbGlkRmlsbFNoYWRlcl9oCi0jZGVmaW5lIExvb3BCbGlublNvbGlk
RmlsbFNoYWRlcl9oCi0KLSNpbmNsdWRlICJMb29wQmxpbm5TaGFkZXIuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLQotY2xhc3MgTG9vcEJsaW5u
U29saWRGaWxsU2hhZGVyIDogcHVibGljIExvb3BCbGlublNoYWRlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8TG9vcEJsaW5uU29saWRGaWxsU2hhZGVyPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBSZWdpb24sIEFudGlhbGlhc1R5cGUpOwotCi0gICAgLy8gVGhpcyBhc3N1
bWVzIHRoZSB2ZXJ0aWNlcyBhbmQga2xtIGNvb3JkaW5hdGVzIGFyZSBzdG9yZWQgaW4gdGhlCi0g
ICAgLy8gc2FtZSwgY3VycmVudGx5IGJvdW5kLCBidWZmZXIgb2JqZWN0LCBjb250aWd1b3VzbHkg
YW5kIGF0IHRoZQotICAgIC8vIHNwZWNpZmllZCBvZmZzZXRzLgotICAgIHZvaWQgdXNlKHVuc2ln
bmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBDb2xvciYpOwotCi1wcml2YXRlOgotICAgIExvb3BCbGlublNvbGlkRmlsbFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOwotCi0gICAgaW50IG1f
Y29sb3JMb2NhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IExvb3BCbGlublNvbGlkRmlsbFNoYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzJmZTE3NWM1NTVkNTBiMDc3N2ExOTY1
MTE1ZDVjNzAxNDNmNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1
cmVDb29yZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotCi0j
aW5jbHVkZSAiTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTG9v
cEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVzdWx0IExvb3BCbGlublRleHR1cmVDb29yZHM6OmNvbXB1
dGUoY29uc3QgTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0JiBjbGFzc2lmaWNhdGlvbiwgTG9v
cEJsaW5uQ29uc3RhbnRzOjpGaWxsU2lkZSBzaWRlVG9GaWxsKQotewotICAgIC8vIExvb3AgYW5k
IEJsaW5uJ3MgZm9ybXVsYXRpb24gc3RhdGVzIHRoYXQgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlCi0g
ICAgLy8gY3VydmUgaXMgZGVmaW5lZCB0byBiZSB0aGUgaW5zaWRlIChmaWxsZWQgcmVnaW9uKSwg
YnV0IGZvciBzb21lCi0gICAgLy8gcmVhc29uIGl0IGxvb2tzIGxpa2Ugd2l0aCB0aGUgZGVmYXVs
dCBvcmllbnRhdGlvbiBwYXJhbWV0ZXJzIHdlCi0gICAgLy8gYXJlIGZpbGxpbmcgdGhlIGxlZnQg
c2lkZSBvZiB0aGUgY3VydmUuIFJlZ2FyZGxlc3MsIGJlY2F1c2Ugd2UKLSAgICAvLyBjYW4gcmVj
ZWl2ZSBhcmJpdHJhcmlseSBvcmllbnRlZCBjdXJ2ZXMgYXMgaW5wdXQsIHdlIG1pZ2h0IGhhdmUK
LSAgICAvLyB0byByZXZlcnNlIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgY3ViaWMgdGV4dHVyZSBj
b29yZGluYXRlcyBldmVuCi0gICAgLy8gaW4gY2FzZXMgd2hlcmUgdGhlIHBhcGVyIGRvZXNuJ3Qg
c2F5IGl0IGlzIG5lY2Vzc2FyeS4KLSAgICBib29sIHJldmVyc2VPcmllbnRhdGlvbiA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBPbmVUaGlyZCA9IDEuMGYgLyAzLjBmOwotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBUd29UaGlyZHMgPSAyLjBmIC8gMy4wZjsKLSAgICBMb29wQmxpbm5D
bGFzc2lmaWVyOjpDdXJ2ZVR5cGUgY3VydmVUeXBlID0gY2xhc3NpZmljYXRpb24uY3VydmVUeXBl
OwotCi0gICAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVzdWx0IHJlc3VsdDsKLQotICAgIHN3
aXRjaCAoY3VydmVUeXBlKSB7Ci0gICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjprU2VycGVu
dGluZTogewotICAgICAgICBmbG9hdCB0MSA9IHNxcnRmKDkuMGYgKiBjbGFzc2lmaWNhdGlvbi5k
MiAqIGNsYXNzaWZpY2F0aW9uLmQyIC0gMTIgKiBjbGFzc2lmaWNhdGlvbi5kMSAqIGNsYXNzaWZp
Y2F0aW9uLmQzKTsKLSAgICAgICAgZmxvYXQgbHMgPSAzLjBmICogY2xhc3NpZmljYXRpb24uZDIg
LSB0MTsKLSAgICAgICAgZmxvYXQgbHQgPSA2LjBmICogY2xhc3NpZmljYXRpb24uZDE7Ci0gICAg
ICAgIGZsb2F0IG1zID0gMy4wZiAqIGNsYXNzaWZpY2F0aW9uLmQyICsgdDE7Ci0gICAgICAgIGZs
b2F0IG10ID0gbHQ7Ci0gICAgICAgIGZsb2F0IGx0TWludXNMcyA9IGx0IC0gbHM7Ci0gICAgICAg
IGZsb2F0IG10TWludXNNcyA9IG10IC0gbXM7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1swXSA9IEZsb2F0UG9pbnQzRChscyAqIG1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXMgKiBtcyAqIG1zKTsKLSAgICAgICAgcmVzdWx0
LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkICogKDMuMGYgKiBscyAq
IG1zIC0gbHMgKiBtdCAtIGx0ICogbXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIChscyAtIGx0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zICogbXMgKiAobXMgLSBtdCkpOwotICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAo
bHQgKiAobXQgLSAyLjBmICogbXMpICsgbHMgKiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdE1pbnVzTHMg
KiBsdE1pbnVzTHMgKiBscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG10TWludXNNcyAqIG10TWludXNNcyAqIG1zKTsKLSAgICAgICAgcmVzdWx0Lmts
bUNvb3JkaW5hdGVzWzNdID0gRmxvYXRQb2ludDNEKGx0TWludXNMcyAqIG10TWludXNNcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0obHRNaW51c0xz
ICogbHRNaW51c0xzICogbHRNaW51c0xzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0obXRNaW51c01zICogbXRNaW51c01zICogbXRNaW51c01zKSk7
Ci0gICAgICAgIGlmIChjbGFzc2lmaWNhdGlvbi5kMSA8IDAuMGYpCi0gICAgICAgICAgICByZXZl
cnNlT3JpZW50YXRpb24gPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl
IExvb3BCbGlubkNsYXNzaWZpZXI6OmtMb29wOiB7Ci0gICAgICAgIGZsb2F0IHQxID0gc3FydGYo
NC4wZiAqIGNsYXNzaWZpY2F0aW9uLmQxICogY2xhc3NpZmljYXRpb24uZDMgLSAzLjBmICogY2xh
c3NpZmljYXRpb24uZDIgKiBjbGFzc2lmaWNhdGlvbi5kMik7Ci0gICAgICAgIGZsb2F0IGxzID0g
Y2xhc3NpZmljYXRpb24uZDIgLSB0MTsKLSAgICAgICAgZmxvYXQgbHQgPSAyLjBmICogY2xhc3Np
ZmljYXRpb24uZDE7Ci0gICAgICAgIGZsb2F0IG1zID0gY2xhc3NpZmljYXRpb24uZDIgKyB0MTsK
LSAgICAgICAgZmxvYXQgbXQgPSBsdDsKLQotICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIg
dGhlcmUgaXMgYSByZW5kZXJpbmcgYXJ0aWZhY3QgcmVxdWlyaW5nCi0gICAgICAgIC8vIHRoZSBj
dXJ2ZSB0byBiZSBzdWJkaXZpZGVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGZsb2F0IHFsID0g
bHMgLyBsdDsKLSAgICAgICAgZmxvYXQgcW0gPSBtcyAvIG10OwotICAgICAgICBpZiAoMC4wZiA8
IHFsICYmIHFsIDwgMS4wZikgewotICAgICAgICAgICAgcmVzdWx0Lmhhc1JlbmRlcmluZ0FydGlm
YWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdC5zdWJkaXZpc2lvblBhcmFtZXRlclZhbHVl
ID0gcWw7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKDAuMGYgPCBxbSAmJiBxbSA8IDEuMGYpIHsKLSAgICAgICAgICAgIHJlc3VsdC5oYXNSZW5k
ZXJpbmdBcnRpZmFjdCA9IHRydWU7Ci0gICAgICAgICAgICByZXN1bHQuc3ViZGl2aXNpb25QYXJh
bWV0ZXJWYWx1ZSA9IHFtOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZsb2F0IGx0TWludXNMcyA9IGx0IC0gbHM7Ci0gICAgICAgIGZsb2F0IG10TWlu
dXNNcyA9IG10IC0gbXM7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0
UG9pbnQzRChscyAqIG1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbHMgKiBscyAqIG1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbHMgKiBtcyAqIG1zKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5h
dGVzWzFdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkICogKC1scyAqIG10IC0gbHQgKiBtcyArIDMu
MGYgKiBscyAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC1PbmVUaGlyZCAqIGxzICogKGxzICogKG10IC0gMy4wZiAqIG1zKSArIDIuMGYgKiBs
dCAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1PbmVUaGlyZCAqIG1zICogKGxzICogKDIuMGYgKiBtdCAtIDMuMGYgKiBtcykgKyBsdCAqIG1z
KSk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9pbnQzRChPbmVU
aGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKyBscyAqICgzLjBmICogbXMgLSAyLjBmICog
bXQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9u
ZVRoaXJkICogKGx0IC0gbHMpICogKGxzICogKDIuMGYgKiBtdCAtIDMuMGYgKiBtcykgKyBsdCAq
IG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9u
ZVRoaXJkICogKG10IC0gbXMpICogKGxzICogKG10IC0gMy4wZiAqIG1zKSArIDIuMGYgKiBsdCAq
IG1zKSk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRChs
dE1pbnVzTHMgKiBtdE1pbnVzTXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtKGx0TWludXNMcyAqIGx0TWludXNMcykgKiBtdE1pbnVzTXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbHRNaW51c0xzICog
bXRNaW51c01zICogbXRNaW51c01zKTsKLSAgICAgICAgcmV2ZXJzZU9yaWVudGF0aW9uID0gKChj
bGFzc2lmaWNhdGlvbi5kMSA+IDAuMGYgJiYgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdLngoKSA8
IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY2xhc3NpZmljYXRpb24uZDEg
PCAwLjBmICYmIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXS54KCkgPiAwLjBmKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6a0N1c3A6IHsK
LSAgICAgICAgZmxvYXQgbHMgPSBjbGFzc2lmaWNhdGlvbi5kMzsKLSAgICAgICAgZmxvYXQgbHQg
PSAzLjBmICogY2xhc3NpZmljYXRpb24uZDI7Ci0gICAgICAgIGZsb2F0IGxzTWludXNMdCA9IGxz
IC0gbHQ7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQzRChs
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICog
bHMgKiBscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEuMGYpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0Qo
bHMgLSBPbmVUaGlyZCAqIGx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbHMgKiBscyAqIGxzTWludXNMdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRp
bmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QobHMgLSBUd29UaGlyZHMgKiBsdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzTWludXNMdCAqIGxzTWludXNM
dCAqIGxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MS4wZik7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRChs
c01pbnVzTHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsc01pbnVzTHQgKiBsc01pbnVzTHQgKiBsc01pbnVzTHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjprUXVhZHJhdGljOiB7Ci0gICAgICAg
IHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsKLSAgICAg
ICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkLCAwLCBP
bmVUaGlyZCk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9pbnQz
RChUd29UaGlyZHMsIE9uZVRoaXJkLCBUd29UaGlyZHMpOwotICAgICAgICByZXN1bHQua2xtQ29v
cmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QoMSwgMSwgMSk7Ci0gICAgICAgIGlmIChjbGFzc2lm
aWNhdGlvbi5kMyA8IDApCi0gICAgICAgICAgICByZXZlcnNlT3JpZW50YXRpb24gPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtM
aW5lOgotICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6a1BvaW50OgotICAgICAgICByZXN1
bHQuaXNMaW5lT3JQb2ludCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGlmIChzaWRlVG9GaWxsID09IExvb3BCbGlubkNvbnN0YW50czo6UmlnaHRTaWRlKQotICAg
ICAgICByZXZlcnNlT3JpZW50YXRpb24gPSAhcmV2ZXJzZU9yaWVudGF0aW9uOwotCi0gICAgaWYg
KHJldmVyc2VPcmllbnRhdGlvbikgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsr
aSkgewotICAgICAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ldLnNldFgoLXJlc3VsdC5r
bG1Db29yZGluYXRlc1tpXS54KCkpOwotICAgICAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVz
W2ldLnNldFkoLXJlc3VsdC5rbG1Db29yZGluYXRlc1tpXS55KCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5UZXh0dXJlQ29vcmRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ZmRlYjNiNGJiMzQ1YTkxZjk2YjNiZDIzMGZjMzVlNTIxNTg2NmRkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzX2gK
LSNkZWZpbmUgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50
M0QuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCi0jaW5jbHVkZSAiTG9vcEJs
aW5uQ29uc3RhbnRzLmgiCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBDb21wdXRlcyB0aHJlZS1kaW1lbnNpb25hbCB0ZXh0dXJlIGNv
b3JkaW5hdGVzIGZvciB0aGUgY29udHJvbAotLy8gcG9pbnRzIG9mIGEgY3ViaWMgY3VydmUgZm9y
IHJlbmRlcmluZyB2aWEgdGhlIHNoYWRlciBpbiAiUmVuZGVyaW5nCi0vLyBWZWN0b3IgQXJ0IG9u
IHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVyIDI1LgotY2xh
c3MgTG9vcEJsaW5uVGV4dHVyZUNvb3JkcyB7Ci1wdWJsaWM6Ci0gICAgLy8gQ29udGFpbmVyIGZv
ciB0aGUgY3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZAotICAg
IC8vIGluZm9ybWF0aW9uLgotICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICBSZXN1bHQoKQot
ICAgICAgICAgICAgOiBpc0xpbmVPclBvaW50KGZhbHNlKQotICAgICAgICAgICAgLCBoYXNSZW5k
ZXJpbmdBcnRpZmFjdChmYWxzZSkKLSAgICAgICAgICAgICwgc3ViZGl2aXNpb25QYXJhbWV0ZXJW
YWx1ZSgwLjBmKSB7IH0KLQotICAgICAgICAvLyBUaGUgKGssIGwsIG0pIHRleHR1cmUgY29vcmRp
bmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRlZAotICAgICAgICAvLyB3aXRoIHRoZSBmb3Vy
IGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBjdXJ2ZS4KLSAgICAgICAgRmxvYXRQb2ludDNE
IGtsbUNvb3JkaW5hdGVzWzRdOwotCi0gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBj
dXJ2ZSBpcyBhIGxpbmUgb3IgYSBwb2ludCwgaW4gd2hpY2ggY2FzZQotICAgICAgICAvLyB3ZSBk
byBub3QgbmVlZCB0byBhZGQgaXRzIHRyaWFuZ2xlcyB0byB0aGUgbWVzaC4KLSAgICAgICAgYm9v
bCBpc0xpbmVPclBvaW50OwotCi0gICAgICAgIC8vIEZvciB0aGUgbG9vcCBjYXNlLCBpbmRpY2F0
ZXMgd2hldGhlciBhIHJlbmRlcmluZyBhcnRpZmFjdCB3YXMKLSAgICAgICAgLy8gZGV0ZWN0ZWQs
IGluIHdoaWNoIGNhc2UgdGhlIGN1cnZlIG5lZWRzIHRvIGJlIGZ1cnRoZXIKLSAgICAgICAgLy8g
c3ViZGl2aWRlZC4KLSAgICAgICAgYm9vbCBoYXNSZW5kZXJpbmdBcnRpZmFjdDsKLQotICAgICAg
ICAvLyBJZiBhIHJlbmRlcmluZyBhcnRpZmFjdCB3aWxsIG9jY3VyIGZvciB0aGUgZ2l2ZW4gbG9v
cCBjdXJ2ZSwKLSAgICAgICAgLy8gdGhpcyBpcyB0aGUgcGFyYW1ldGVyIHZhbHVlICgwIDw9IHZh
bHVlIDw9IDEpIGF0IHdoaWNoIHRoZQotICAgICAgICAvLyBjdXJ2ZSBuZWVkcyB0byBiZSBzdWJk
aXZpZGVkIHRvIGZpeCB0aGUgYXJ0aWZhY3QuCi0gICAgICAgIGZsb2F0IHN1YmRpdmlzaW9uUGFy
YW1ldGVyVmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIENvbXB1dGVzIHRoZSB0ZXh0dXJlIGNvb3Jk
aW5hdGVzIGZvciBhIGN1YmljIGN1cnZlIHNlZ21lbnQncwotICAgIC8vIGNvbnRyb2wgcG9pbnRz
LCBnaXZlbiB0aGUgY2xhc3NpZmljYXRpb24gb2YgdGhlIGN1cnZlIGFzIHdlbGwgYXMKLSAgICAv
LyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIHNpZGUgaXMgdG8gYmUgZmlsbGVkLgotICAgIHN0YXRp
YyBSZXN1bHQgY29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQmIGNsYXNz
aWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxpbm5Db25zdGFudHM6
OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOwotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgY2xhc3MgZG9l
cyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cygpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9TaGFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2M1ZWJmODU2
YzdkMGRiZDI1ZTJkNzFhYTM4N2E3MDUxYzgxYTY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQotI2luY2x1ZGUg
IlNoYWRlci5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gc3RhdGljCi12b2lkIFNoYWRlcjo6YWZmaW5lVG8zeDMoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGZsb2F0IG1hdFs5XSkKLXsKLSAgICBtYXRbMF0gPSB0cmFuc2Zvcm0uYSgp
OwotICAgIG1hdFsxXSA9IHRyYW5zZm9ybS5iKCk7Ci0gICAgbWF0WzJdID0gMC4wZjsKLSAgICBt
YXRbM10gPSB0cmFuc2Zvcm0uYygpOwotICAgIG1hdFs0XSA9IHRyYW5zZm9ybS5kKCk7Ci0gICAg
bWF0WzVdID0gMC4wZjsKLSAgICBtYXRbNl0gPSB0cmFuc2Zvcm0uZSgpOwotICAgIG1hdFs3XSA9
IHRyYW5zZm9ybS5mKCk7Ci0gICAgbWF0WzhdID0gMS4wZjsKLX0KLQotLy8gc3RhdGljCi12b2lk
IFNoYWRlcjo6YWZmaW5lVG80eDQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZs
b2F0IG1hdFsxNl0pCi17Ci0gICAgbWF0WzBdID0gdHJhbnNmb3JtLmEoKTsKLSAgICBtYXRbMV0g
PSB0cmFuc2Zvcm0uYigpOwotICAgIG1hdFsyXSA9IDAuMGY7Ci0gICAgbWF0WzNdID0gMC4wZjsK
LSAgICBtYXRbNF0gPSB0cmFuc2Zvcm0uYygpOwotICAgIG1hdFs1XSA9IHRyYW5zZm9ybS5kKCk7
Ci0gICAgbWF0WzZdID0gMC4wZjsKLSAgICBtYXRbN10gPSAwLjBmOwotICAgIG1hdFs4XSA9IDAu
MGY7Ci0gICAgbWF0WzldID0gMC4wZjsKLSAgICBtYXRbMTBdID0gMS4wZjsKLSAgICBtYXRbMTFd
ID0gMC4wZjsKLSAgICBtYXRbMTJdID0gdHJhbnNmb3JtLmUoKTsKLSAgICBtYXRbMTNdID0gdHJh
bnNmb3JtLmYoKTsKLSAgICBtYXRbMTRdID0gMC4wZjsKLSAgICBtYXRbMTVdID0gMS4wZjsKLX0K
LQotLy8gc3RhdGljCi11bnNpZ25lZCBTaGFkZXI6OmxvYWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IFN0cmluZyYgc2hhZGVyU291cmNlKQot
ewotICAgIHVuc2lnbmVkIHNoYWRlciA9IGNvbnRleHQtPmNyZWF0ZVNoYWRlcih0eXBlKTsKLSAg
ICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb250ZXh0LT5zaGFkZXJT
b3VyY2Uoc2hhZGVyLCBzaGFkZXJTb3VyY2UpOwotICAgIGNvbnRleHQtPmNvbXBpbGVTaGFkZXIo
c2hhZGVyKTsKLSAgICBpbnQgY29tcGlsZVN0YXR1cyA9IDA7Ci0gICAgY29udGV4dC0+Z2V0U2hh
ZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZjb21waWxl
U3RhdHVzKTsKLSAgICBpZiAoIWNvbXBpbGVTdGF0dXMpIHsKLSAgICAgICAgU3RyaW5nIGluZm9M
b2cgPSBjb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Ci0gICAgICAgIExPR19FUlJP
UigiJXMiLCBpbmZvTG9nLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBjb250ZXh0LT5kZWxldGVT
aGFkZXIoc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzaGFk
ZXI7Ci19Ci0KLS8vIHN0YXRpYwotdW5zaWduZWQgU2hhZGVyOjpsb2FkUHJvZ3JhbShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi17Ci0gICAgdW5zaWduZWQgdmVydGV4
U2hhZGVyID0gbG9hZFNoYWRlcihjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUiwgdmVydGV4U2hhZGVyU291cmNlKTsKLSAgICBpZiAoIXZlcnRleFNoYWRlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U2hhZGVy
U291cmNlKTsKLSAgICBpZiAoIWZyYWdtZW50U2hhZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICB1bnNpZ25lZCBwcm9ncmFtID0gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmICgh
cHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29udGV4dC0+YXR0YWNoU2hhZGVyKHBy
b2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0s
IGZyYWdtZW50U2hhZGVyKTsKLSAgICBjb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKLSAg
ICBpbnQgbGlua1N0YXR1cyA9IDA7Ci0gICAgY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0s
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwotICAgIGlmICgh
bGlua1N0YXR1cykKLSAgICAgICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLSAg
ICBjb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBjb250ZXh0LT5kZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIHJldHVybiBwcm9ncmFtOwotfQotCi1TaGFk
ZXI6OlNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkK
LSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9wcm9ncmFtKHByb2dyYW0pCi17Ci19
Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
cHJvZ3JhbSk7Ci19Ci0KLS8vIHN0YXRpYwotU3RyaW5nIFNoYWRlcjo6Z2VuZXJhdGVWZXJ0ZXgo
U2hhZGVyOjpWZXJ0ZXhUeXBlIHZlcnRleFR5cGUsIFNoYWRlcjo6RmlsbFR5cGUgZmlsbFR5cGUp
Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIHN3aXRjaCAodmVydGV4VHlwZSkg
ewotICAgIGNhc2UgVHdvRGltZW5zaW9uYWw6Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAg
ICAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCi0gICAgICAgICAgICAiYXR0cmlidXRl
IHZlYzIgcG9zaXRpb247XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMb29wQmxpbm5J
bnRlcmlvcjoKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAidW5pZm9ybSBt
YXQ0IHdvcmxkVmlld1Byb2plY3Rpb247XG4iCi0gICAgICAgICAgICAiYXR0cmlidXRlIHZlYzIg
cG9zaXRpb247XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMb29wQmxpbm5FeHRlcmlv
cjoKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAidW5pZm9ybSBtYXQ0IHdv
cmxkVmlld1Byb2plY3Rpb247XG4iCi0gICAgICAgICAgICAiYXR0cmlidXRlIHZlYzIgcG9zaXRp
b247XG4iCi0gICAgICAgICAgICAiYXR0cmlidXRlIHZlYzMga2xtO1xuIgotICAgICAgICAgICAg
InZhcnlpbmcgdmVjMyB2X2tsbTtcbiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
ZiAoZmlsbFR5cGUgPT0gVGV4dHVyZUZpbGwpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0g
ICAgICAgICAgICAidW5pZm9ybSBtYXQzIHRleE1hdHJpeDtcbiIKLSAgICAgICAgICAgICJ2YXJ5
aW5nIHZlYzMgdGV4Q29vcmQ7XG4iKTsKLSAgICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgKLSAg
ICAgICAgInZvaWQgbWFpbigpIHtcbiIpOwotCi0gICAgaWYgKHZlcnRleFR5cGUgPT0gVHdvRGlt
ZW5zaW9uYWwpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiZ2xfUG9z
aXRpb24gPSB2ZWM0KG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCksIDEuMCk7XG4iKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICJnbF9Qb3Np
dGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG4i
KTsKLSAgICAgICAgaWYgKHZlcnRleFR5cGUgPT0gTG9vcEJsaW5uRXh0ZXJpb3IpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICJ2X2tsbSA9IGtsbTtcbiIp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZpbGxUeXBlID09IFRleHR1cmVGaWxsKSB7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgInRleENvb3JkID0gdGV4TWF0
cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKTtcbiIpOwotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBw
ZW5kKAotICAgICAgICAifVxuIik7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwot
fQotCi0vLyBzdGF0aWMKLVN0cmluZyBTaGFkZXI6OmdlbmVyYXRlRnJhZ21lbnQoU2hhZGVyOjpW
ZXJ0ZXhUeXBlIHZlcnRleFR5cGUsIFNoYWRlcjo6RmlsbFR5cGUgZmlsbFR5cGUsIFNoYWRlcjo6
QW50aWFsaWFzVHlwZSBhbnRpYWxpYXNUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKLSAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgIiNpZmRlZiBHTF9FU1xuIgotICAgICAg
ICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICAgICIjZW5kaWZcbiIpOwotCi0g
ICAgaWYgKHZlcnRleFR5cGUgPT0gTG9vcEJsaW5uRXh0ZXJpb3IpIHsKLSAgICAgICAgaWYgKGFu
dGlhbGlhc1R5cGUgPT0gQW50aWFsaWFzZWQpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KAotICAgICAgICAgICAgICAgICIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyA6IGVuYWJsZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAg
ICAgICAgICAidmFyeWluZyB2ZWMzIHZfa2xtO1xuIik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChm
aWxsVHlwZSkgewotICAgIGNhc2UgU29saWRGaWxsOgotICAgICAgICBidWlsZGVyLmFwcGVuZCgK
LSAgICAgICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUZXh0dXJlRmlsbDoKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAg
ICAidW5pZm9ybSBzYW1wbGVyMkQgc2FtcGxlcjtcbiIKLSAgICAgICAgICAgICJ1bmlmb3JtIGZs
b2F0IGdsb2JhbEFscGhhO1xuIgotICAgICAgICAgICAgInZhcnlpbmcgdmVjMyB0ZXhDb29yZDtc
biIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAg
ICAgInZvaWQgbWFpbigpIHtcbiIpOwotCi0gICAgaWYgKHZlcnRleFR5cGUgIT0gTG9vcEJsaW5u
RXh0ZXJpb3IpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiZmxvYXQg
YWxwaGEgPSAxLjA7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoYW50aWFsaWFzVHlw
ZSA9PSBBbnRpYWxpYXNlZCkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgIiAgLy8gR3JhZGllbnRzXG4iCi0gICAgICAgICAgICAgICAgIiAgdmVjMyBweCA9
IGRGZHgodl9rbG0pO1xuIgotICAgICAgICAgICAgICAgICIgIHZlYzMgcHkgPSBkRmR5KHZfa2xt
KTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgIiAgLy8gQ2hhaW4g
cnVsZVxuIgotICAgICAgICAgICAgICAgICIgIGZsb2F0IGsyID0gdl9rbG0ueCAqIHZfa2xtLng7
XG4iCi0gICAgICAgICAgICAgICAgIiAgZmxvYXQgYyA9IGsyICogdl9rbG0ueCAtIHZfa2xtLnkg
KiB2X2tsbS56O1xuIgotICAgICAgICAgICAgICAgICIgIGZsb2F0IGsyMyA9IDMuMCAqIGsyO1xu
IgotICAgICAgICAgICAgICAgICIgIGZsb2F0IGN4ID0gazIzICogcHgueCAtIHZfa2xtLnogKiBw
eC55IC0gdl9rbG0ueSAqIHB4Lno7XG4iCi0gICAgICAgICAgICAgICAgIiAgZmxvYXQgY3kgPSBr
MjMgKiBweS54IC0gdl9rbG0ueiAqIHB5LnkgLSB2X2tsbS55ICogcHkuejtcbiIKLSAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgIiAgLy8gU2lnbmVkIGRpc3RhbmNlXG4iCi0g
ICAgICAgICAgICAgICAgIiAgZmxvYXQgc2QgPSBjIC8gc3FydChjeCAqIGN4ICsgY3kgKiBjeSk7
XG4iCi0gICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICIgIC8vIExpbmVhciBh
bHBoYVxuIgotICAgICAgICAgICAgICAgICIgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHdoeSB0aGlz
IG5lZWRzIHRvIGJlXG4iCi0gICAgICAgICAgICAgICAgIiAgLy8gbmVnYXRlZCBjb21wYXJlZCB0
byB0aGUgSExTTCB2ZXJzaW9uLCBhbmQgYWxzbyB3aHlcbiIKLSAgICAgICAgICAgICAgICAiICAv
LyB3ZSBuZWVkIGFuIGFkanVzdG1lbnQgYnkgKzEuMCBmb3IgaXQgdG8gbG9vayBnb29kLlxuIgot
ICAgICAgICAgICAgICAgICIgIC8vIGZsb2F0IGFscGhhID0gY2xhbXAoMC41IC0gc2QsIDAuMCwg
MS4wKTtcbiIKLSAgICAgICAgICAgICAgICAiICBmbG9hdCBhbHBoYSA9IGNsYW1wKHNkICsgMC41
LCAwLjAsIDEuMCk7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKAotICAgICAgICAgICAgICAgICIgIGZsb2F0IHQgPSB2X2tsbS54ICogdl9rbG0ueCAq
IHZfa2xtLnggLSB2X2tsbS55ICogdl9rbG0uejtcbiIKLSAgICAgICAgICAgICAgICAiICBmbG9h
dCBhbHBoYSA9IGNsYW1wKHNpZ24odCksIDAuMCwgMS4wKTtcbiIpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3dpdGNoIChmaWxsVHlwZSkgewotICAgIGNhc2UgU29saWRGaWxsOgotICAgICAg
ICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICJnbF9GcmFnQ29sb3IgPSBjb2xvciAqIGFs
cGhhO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dHVyZUZpbGw6Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgImdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChz
YW1wbGVyLCB0ZXhDb29yZC54eSkgKiBhbHBoYSAqIGdsb2JhbEFscGhhO1xuIik7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAifVxuIik7Ci0K
LSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWQxYTNiMGNhYjM2Mzg3M2I5
NzAzMGUwMjEwOWVmZDNjZDU2ZGVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTaGFkZXJfaAotI2RlZmlu
ZSBTaGFkZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKLWNsYXNzIENvbG9yOwotCi1jbGFzcyBTaGFkZXIgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNoYWRlcik7Ci1wdWJsaWM6Ci0gICAgZW51bSBWZXJ0ZXhUeXBlIHsKLSAgICAg
ICAgVHdvRGltZW5zaW9uYWwsCi0gICAgICAgIExvb3BCbGlubkludGVyaW9yLAotICAgICAgICBM
b29wQmxpbm5FeHRlcmlvcgotICAgIH07Ci0KLSAgICBlbnVtIEZpbGxUeXBlIHsKLSAgICAgICAg
U29saWRGaWxsLAotICAgICAgICBUZXh0dXJlRmlsbAotICAgIH07Ci0KLSAgICAvLyBDdXJyZW50
bHkgb25seSBhcHBsaWVzIHRvIHRoZSBMb29wLUJsaW5uIHZlcnRleCB0eXBlLgotICAgIGVudW0g
QW50aWFsaWFzVHlwZSB7Ci0gICAgICAgIE5vdEFudGlhbGlhc2VkLAotICAgICAgICBBbnRpYWxp
YXNlZAotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Qq
LCB1bnNpZ25lZCBwcm9ncmFtKTsKLSAgICB+U2hhZGVyKCk7Ci0KLSAgICBzdGF0aWMgU3RyaW5n
IGdlbmVyYXRlVmVydGV4KFZlcnRleFR5cGUsIEZpbGxUeXBlKTsKLSAgICBzdGF0aWMgU3RyaW5n
IGdlbmVyYXRlRnJhZ21lbnQoVmVydGV4VHlwZSwgRmlsbFR5cGUsIEFudGlhbGlhc1R5cGUpOwot
Ci0gICAgc3RhdGljIHZvaWQgYWZmaW5lVG8zeDMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxv
YXQgbWF0WzldKTsKLSAgICBzdGF0aWMgdm9pZCBhZmZpbmVUbzR4NChjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBmbG9hdCBtYXRbMTZdKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9hZFNoYWRlcihH
cmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHR5cGUsIGNvbnN0IFN0cmluZyYgc2hhZGVyU291
cmNlKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9hZFByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVu
dFNoYWRlclNvdXJjZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAg
IHVuc2lnbmVkIG1fcHJvZ3JhbTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNoYWRlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzNmM2UyMTJiNTA1MThkODAzNjk2Y2EwMzg0MTZkZmYyZGM1MGJjMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
IlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNESW1wbCB7Ci1wdWJsaWM6Ci0gICAgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0RJbXBsKCkgOiBtX2NvbnRleHQoMCkgeyB9Ci0gICAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gZ2V0T3JDcmVhdGVDb250ZXh0KCkKLSAgICB7Ci0gICAgICAgIGJv
b2wgd2FzQ3JlYXRlZCA9IGZhbHNlOwotCi0gICAgICAgIC8vIElmIHdlIGxvc3QgdGhlIGNvbnRl
eHQsIG9yIGNhbid0IG1ha2UgaXQgY3VycmVudCwgY3JlYXRlIGEgbmV3IG9uZS4KLSAgICAgICAg
aWYgKG1fY29udGV4dCAmJiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkgfHwgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSkpCi0gICAgICAgICAgICBtX2NvbnRleHQuY2xl
YXIoKTsKLQotICAgICAgICBpZiAoIW1fY29udGV4dCkgewotICAgICAgICAgICAgY3JlYXRlQ29u
dGV4dCgpOwotICAgICAgICAgICAgd2FzQ3JlYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQot
ICAgICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKG1fY29udGV4dCAm
JiB3YXNDcmVhdGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnB1
c2hHcm91cE1hcmtlckVYVCgiU2hhcmVkR3JhcGhpY3NDb250ZXh0Iik7Ci0gICAgICAgIHJldHVy
biBtX2NvbnRleHQ7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Z2V0Q29udGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9jb250ZXh0OwotICAgIH0KLQot
ICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKQotICAgIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAg
ICAgYXR0cmlidXRlcy5kZXB0aCA9IGZhbHNlOwotICAgICAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwg
PSB0cnVlOwotICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBh
dHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCAwKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29udGV4dDsKLSAgICB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OwotfTsKLQotUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldCgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNESW1wbCwgaW1wbCwgKCkpOwotICAgIHJldHVybiBp
bXBsLmdldE9yQ3JlYXRlQ29udGV4dCgpOwotfQotCi1lbnVtIENvbnRleHRPcGVyYXRpb24gewot
ICAgIEdldCwgQ3JlYXRlCi19OwotCi1zdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gZ2V0T3JDcmVhdGVDb250ZXh0Rm9ySW1wbFRocmVhZChDb250ZXh0T3BlcmF0aW9uIG9wKQot
ewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTaGFyZWRHcmFwaGljc0NvbnRl
eHQzREltcGwsIGltcGwsICgpKTsKLSAgICByZXR1cm4gb3AgPT0gQ3JlYXRlID8gaW1wbC5jcmVh
dGVDb250ZXh0KCkgOiBpbXBsLmdldENvbnRleHQoKTsKLX0KLQotUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZvckltcGxUaHJlYWQoKQot
ewotICAgIHJldHVybiBnZXRPckNyZWF0ZUNvbnRleHRGb3JJbXBsVGhyZWFkKEdldCk7Ci19Ci0K
LWJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmhhdmVGb3JJbXBsVGhyZWFkKCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHJldHVybiBnZXRPckNyZWF0ZUNvbnRleHRG
b3JJbXBsVGhyZWFkKEdldCk7Ci19Ci0KLWJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZUZvckltcGxUaHJlYWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
cmV0dXJuIGdldE9yQ3JlYXRlQ29udGV4dEZvckltcGxUaHJlYWQoQ3JlYXRlKTsKLX0KLQotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4NTBlNjNlOTEzZjA2YTA3ODc3MTZiY2M1ZmNiZGVmMWJhNTVlZjk2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0RfaAot
I2RlZmluZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEIHsKLXB1YmxpYzoKLSAgICAvLyBUaGUgY2FsbGVyIG1heSByZWYgdGhpcyBwb2ludGVy
LCBhbmQgaGFuZyBvbnRvIGl0IGFzIGxvbmcgYXMgdGhleSBsaWtlLgotICAgIC8vIEhvd2V2ZXIs
IHRoZSBjb250ZXh0IHNob3VsZCBiZSBjaGVja2VkIHBlcmlvZGljYWxseSB0byBkZXRlcm1pbmUg
aWYgaXQKLSAgICAvLyBoYXMgYmVlbiBsb3N0LiBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBp
cyB0byBzaW1wbHkgY2FsbCB0aGlzCi0gICAgLy8gZnVuY3Rpb24gYWdhaW4uIE5vdGUgdGhhdCB0
aGUgcmV0dXJuIHZhbHVlIG1heSBiZSAwIGlmIHRoZQotICAgIC8vIEdQVSBpcyB1bmF2YWlsYWJs
ZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ2V0KCk7Ci0gICAg
Ly8gVGhpcyBvbmUgcmV0dXJucyB0aGUgY29udGV4dCwgYW5kIGRvZXMgbm90IHRvdWNoIGl0IG9y
IHJlLWNyZWF0ZSBpdC4KLSAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIGltcGwg
dGhyZWFkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBnZXRGb3JJ
bXBsVGhyZWFkKCk7Ci0gICAgLy8gVGhpcyBvbmUgcmV0dXJucyBpZiB0aGUgdGhyZWFkZWQgdXRp
bGl0eSBjb250ZXh0IGV4aXN0cy4KLSAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyBib29sIGhhdmVGb3JJbXBsVGhyZWFkKCk7Ci0gICAg
Ly8gVGhpcyBjYWxsIGNyZWF0ZXMgdGhlIGNvbnRleHQgdW5jb25kaXRpb25hbGx5LCBidXQgZG9l
cyBub3QgdG91Y2ggaXQuCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBtYWlu
IHRocmVhZC4KLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVGb3JJbXBsVGhyZWFkKCk7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzFhYWE2M2VlYmI4YjlkM2E0NWUxMDczYzZjODU3NDZhYzZjYmIzOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotCi0jaW5jbHVkZSAiVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAiRXh0ZW5z
aW9uczNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXh0
dXJlOjpUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQYXNzT3duUHRyPFZlY3Rv
cjx1bnNpZ25lZCBpbnQ+PiB0aWxlVGV4dHVyZUlkcywgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUpCi0gICAgOiBtX2NvbnRleHQoY29udGV4
dCkKLSAgICAsIG1fZm9ybWF0KGZvcm1hdCkKLSAgICAsIG1fdGlsZXMoSW50U2l6ZShtYXhUZXh0
dXJlU2l6ZSwgbWF4VGV4dHVyZVNpemUpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCB0cnVlKQot
ICAgICwgbV90aWxlVGV4dHVyZUlkcyh0aWxlVGV4dHVyZUlkcykKLXsKLX0KLQotVGV4dHVyZTo6
flRleHR1cmUoKQotewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV90aWxlVGV4
dHVyZUlkcy0+c2l6ZSgpOyBpKyspCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSht
X3RpbGVUZXh0dXJlSWRzLT5hdChpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2ln
bmVkIGludCogZ2xGb3JtYXQsIHVuc2lnbmVkIGludCogZ2xUeXBlLCBib29sKiBzd2l6emxlKQot
ewotICAgICpzd2l6emxlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNl
IFRleHR1cmU6OlJHQkE4OgotICAgICAgICAqZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTsKLSAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHR1cmU6OkJHUkE4OgotICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4IikpIHsKLSAgICAgICAgICAgICpnbEZvcm1hdCA9IEV4dGVuc2lvbnMzRDo6QkdS
QV9FWFQ7Ci0gICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqZ2xGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURTsKLSAgICAgICAgICAgICpzd2l6emxlID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFRleHR1cmU+IFRl
eHR1cmU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IDA7Ci0g
ICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJ
WkUsICZtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgVGlsaW5nRGF0YSB0aWxpbmcoSW50U2l6ZShtYXhU
ZXh0dXJlU2l6ZSwgbWF4VGV4dHVyZVNpemUpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCB0cnVl
KTsKLQotICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICBpbnQgbnVtVGlsZXMgPSB0aWxp
bmcubnVtVGlsZXNYKCkgKiB0aWxpbmcubnVtVGlsZXNZKCk7Ci0gICAgaWYgKG51bVRpbGVzIC8g
dGlsaW5nLm51bVRpbGVzWCgpICE9IHRpbGluZy5udW1UaWxlc1koKSkgewotICAgICAgICB0aWxp
bmcuc2V0VG90YWxTaXplKEludFNpemUoKSk7Ci0gICAgICAgIG51bVRpbGVzID0gMDsKLSAgICB9
Ci0KLSAgICBPd25QdHI8VmVjdG9yPHVuc2lnbmVkIGludD4+IHRleHR1cmVJZHMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPHVuc2lnbmVkIGludD4obnVtVGlsZXMpKTsKLSAgICB0ZXh0dXJlSWRzLT5m
aWxsKDAsIG51bVRpbGVzKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXM7IGkr
KykgewotICAgICAgICBpbnQgdGV4dHVyZUlkID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwot
ICAgICAgICBpZiAoIXRleHR1cmVJZCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1UaWxlczsgaSsrKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUo
dGV4dHVyZUlkcy0+YXQoaSkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgdGV4dHVyZUlkcy0+YXQoaSkgPSB0ZXh0dXJlSWQ7Ci0KLSAgICAgICAgaW50IHhJbmRl
eCA9IGkgJSB0aWxpbmcubnVtVGlsZXNYKCk7Ci0gICAgICAgIGludCB5SW5kZXggPSBpIC8gdGls
aW5nLm51bVRpbGVzWCgpOwotICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0g
dGlsaW5nLnRpbGVCb3VuZHNXaXRoQm9yZGVyKHhJbmRleCwgeUluZGV4KTsKLQotICAgICAgICB1
bnNpZ25lZCBpbnQgZ2xGb3JtYXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBlID0g
MDsKLSAgICAgICAgYm9vbCBzd2l6emxlOwotICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRleHQs
IGZvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwot
ICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5
cGUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUoY29udGV4dCwgdGV4
dHVyZUlkcy5yZWxlYXNlKCksIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNpemUp
KTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgc3dpenpsZT4KLXN0YXRpYyB1aW50MzJfdCogY29weVN1
YlJlY3QodWludDMyX3QqIHNyYywgaW50IHNyY1gsIGludCBzcmNZLCB1aW50MzJfdCogZHN0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcmNTdHJpZGUpCi17Ci0gICAgdWludDMyX3QqIHNy
Y09mZnNldCA9IHNyYyArIHNyY1ggKyBzcmNZICogc3JjU3RyaWRlOwotCi0gICAgaWYgKCFzd2l6
emxlICYmIHdpZHRoID09IHNyY1N0cmlkZSkKLSAgICAgICAgcmV0dXJuIHNyY09mZnNldDsKLQot
ICAgIGlmIChzd2l6emxlKSB7Ci0gICAgICAgIHVpbnQzMl90KiBkc3RQaXhlbCA9IGRzdDsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aCA7ICsreCkgewotICAgICAgICAgICAgICAgIHVpbnQzMl90
IHBpeGVsID0gc3JjT2Zmc2V0W3ggKyB5ICogc3JjU3RyaWRlXTsKLSAgICAgICAgICAgICAgICAq
ZHN0UGl4ZWwgPSAocGl4ZWwgJiAweEZGMDBGRjAwKSB8ICgocGl4ZWwgJiAweDAwRkYwMDAwKSA+
PiAxNikgfCAoKHBpeGVsICYgMHgwMDAwMDBGRikgPDwgMTYpOwotICAgICAgICAgICAgICAgIGRz
dFBpeGVsKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0gICAgICAgICAgICBtZW1jcHko
ZHN0ICsgeSAqIHdpZHRoLCBzcmNPZmZzZXQgKyB5ICogc3JjU3RyaWRlLCA0ICogd2lkdGgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkc3Q7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6bG9h
ZCh2b2lkKiBwaXhlbHMpCi17Ci0gICAgdXBkYXRlU3ViUmVjdChwaXhlbHMsIEludFJlY3QoMCwg
MCwgbV90aWxlcy50b3RhbFNpemUoKS53aWR0aCgpLCBtX3RpbGVzLnRvdGFsU2l6ZSgpLmhlaWdo
dCgpKSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCi17Ci0gICAgSW50UmVjdCB1cGRhdGVSZWN0U2FuaXRp
emVkKHVwZGF0ZVJlY3QpOwotICAgIHVwZGF0ZVJlY3RTYW5pdGl6ZWQuaW50ZXJzZWN0KEludFJl
Y3QoMCwgMCwgbV90aWxlcy50b3RhbFNpemUoKS53aWR0aCgpLCBtX3RpbGVzLnRvdGFsU2l6ZSgp
LmhlaWdodCgpKSk7Ci0KLSAgICB1aW50MzJfdCogcGl4ZWxzMzIgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHBpeGVscyk7Ci0gICAgdW5zaWduZWQgaW50IGdsRm9ybWF0ID0gMDsKLSAgICB1bnNp
Z25lZCBpbnQgZ2xUeXBlID0gMDsKLSAgICBib29sIHN3aXp6bGU7Ci0gICAgY29udmVydEZvcm1h
dChtX2NvbnRleHQsIG1fZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAg
ICBpZiAoc3dpenpsZSkgewotICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
KTsKLSAgICAgICAgLy8gRklYTUU6ICBUaGlzIGNvdWxkIHVzZSBQQk8ncyB0byBzYXZlIGRvaW5n
IGFuIGV4dHJhIGNvcHkgaGVyZS4KLSAgICB9Ci0gICAgaW50IHRlbXBCdWZmU2l6ZSA9IC8vIFRl
bXBvcmFyeSBidWZmZXIgc2l6ZSBpcyB0aGUgc21hbGxlciBvZiB0aGUgbWF4IHRleHR1cmUgc2l6
ZSBvciB0aGUgdXBkYXRlUmVjdFNhbml0aXplZAotICAgICAgICBzdGQ6Om1pbihtX3RpbGVzLm1h
eFRleHR1cmVTaXplKCkud2lkdGgoKSwgbV90aWxlcy5ib3JkZXJUZXhlbHMoKSArIHVwZGF0ZVJl
Y3RTYW5pdGl6ZWQud2lkdGgoKSkgKgotICAgICAgICBzdGQ6Om1pbihtX3RpbGVzLm1heFRleHR1
cmVTaXplKCkuaGVpZ2h0KCksIG1fdGlsZXMuYm9yZGVyVGV4ZWxzKCkgKyB1cGRhdGVSZWN0U2Fu
aXRpemVkLmhlaWdodCgpKTsKLSAgICBhdXRvIHRlbXBCdWZmID0gc3RkOjptYWtlX3VuaXF1ZTx1
aW50MzJfdFtdPih0ZW1wQnVmZlNpemUpOwotCi0gICAgZm9yIChpbnQgdGlsZSA9IDA7IHRpbGUg
PCBtX3RpbGVzLm51bVRpbGVzWCgpICogbV90aWxlcy5udW1UaWxlc1koKTsgdGlsZSsrKSB7Ci0g
ICAgICAgIGludCB4SW5kZXggPSB0aWxlICUgbV90aWxlcy5udW1UaWxlc1goKTsKLSAgICAgICAg
aW50IHlJbmRleCA9IHRpbGUgLyBtX3RpbGVzLm51bVRpbGVzWCgpOwotCi0gICAgICAgIC8vIElu
dGVyc2VjdCB3aXRoIHRpbGUKLSAgICAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9
IG1fdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIoeEluZGV4LCB5SW5kZXgpOwotCi0gICAgICAg
IEludFJlY3QgdXBkYXRlUmVjdEludGVyc2VjdGVkID0gdXBkYXRlUmVjdFNhbml0aXplZDsKLSAg
ICAgICAgdXBkYXRlUmVjdEludGVyc2VjdGVkLmludGVyc2VjdCh0aWxlQm91bmRzV2l0aEJvcmRl
cik7Ci0KLSAgICAgICAgSW50UmVjdCBkc3RSZWN0ID0gdXBkYXRlUmVjdEludGVyc2VjdGVkOwot
ICAgICAgICBkc3RSZWN0Lm1vdmVCeSgtdGlsZUJvdW5kc1dpdGhCb3JkZXIubG9jYXRpb24oKSk7
Ci0KLSAgICAgICAgaWYgKHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBDb3B5IHN1YiByZWN0YW5nbGUgb3V0IG9mIGxh
cmdlciBwaXhlbCBkYXRhCi0gICAgICAgIHVpbnQzMl90KiB1cGxvYWRCdWZmID0gMDsKLSAgICAg
ICAgaWYgKHN3aXp6bGUpIHsKLSAgICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0
cnVlPigKLSAgICAgICAgICAgIHBpeGVsczMyLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQueCgpLCB1
cGRhdGVSZWN0SW50ZXJzZWN0ZWQueSgpLAotICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0KCksIHVw
ZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0
KCksIG1fdGlsZXMudG90YWxTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8ZmFsc2U+KAotICAgICAgICAgICAgcGl4
ZWxzMzIsIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC54KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55
KCksCi0gICAgICAgICAgICB0ZW1wQnVmZi5nZXQoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLndp
ZHRoKCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemUo
KS53aWR0aCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUp
KTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwIC8qIGxldmVsICovLAotICAgICAgICAgICAgZHN0UmVjdC54KCksCi0gICAg
ICAgICAgICBkc3RSZWN0LnkoKSwKLSAgICAgICAgICAgIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53
aWR0aCgpLAotICAgICAgICAgICAgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBnbEZv
cm1hdCwgZ2xUeXBlLCB1cGxvYWRCdWZmKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTo6Ymlu
ZFRpbGUoaW50IHRpbGUpCi17Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQodGlsZSkpOwotICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci19
Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU5M2I5MWMyM2IyYzZh
ZWQwYzI0NmYyYzdlYTEwZWNkMDMyZGU3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4
dHVyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRleHR1cmVfaAot
I2RlZmluZSBUZXh0dXJlX2gKLQotI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwot
Ci1jbGFzcyBJbnRSZWN0OwotCi1jbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4
dHVyZT4gewotcHVibGljOgotICAgIH5UZXh0dXJlKCk7Ci0gICAgZW51bSBGb3JtYXQgeyBSR0JB
OCwgQkdSQTggfTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgdm9pZCBi
aW5kVGlsZShpbnQgdGlsZSk7Ci0gICAgdm9pZCBsb2FkKHZvaWQqIHBpeGVscyk7Ci0gICAgdm9p
ZCB1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYpOwotICAgIEZvcm1h
dCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQotICAgIGNvbnN0IFRpbGluZ0Rh
dGEmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQotcHJpdmF0ZToKLSAgICBUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQgaW50Pj4g
dGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IG1heFRleHR1cmVTaXplKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAg
IEZvcm1hdCBtX2Zvcm1hdDsKLSAgICBUaWxpbmdEYXRhIG1fdGlsZXM7Ci0gICAgT3duUHRyPFZl
Y3Rvcjx1bnNpZ25lZCBpbnQ+PiBtX3RpbGVUZXh0dXJlSWRzOwotfTsKLQotfQotCi0jZW5kaWYg
Ly8gVGV4dHVyZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhM2QwNGM0
ZDllMWEyM2IwZDY2NTM3NDM5ZDJkMTJkZDNhZTFlOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1RpbGluZ0RhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW50IGNvbXB1dGVOdW1UaWxlcyhpbnQgbWF4
VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemUsIGludCBib3JkZXJUZXhlbHMpCi17Ci0gICAgaWYg
KG1heFRleHR1cmVTaXplIC0gMiAqIGJvcmRlclRleGVscyA8PSAwKQotICAgICAgICByZXR1cm4g
dG90YWxTaXplID4gMCAmJiBtYXhUZXh0dXJlU2l6ZSA+PSB0b3RhbFNpemUgPyAxIDogMDsKLQot
ICAgIGludCBudW1UaWxlcyA9IHN0ZDo6bWF4KDEsIDEgKyAodG90YWxTaXplIC0gMSAtIDIgKiBi
b3JkZXJUZXhlbHMpIC8gKG1heFRleHR1cmVTaXplIC0gMiAqIGJvcmRlclRleGVscykpOwotICAg
IHJldHVybiB0b3RhbFNpemUgPiAwID8gbnVtVGlsZXMgOiAwOwotfQotCi1UaWxpbmdEYXRhOjpU
aWxpbmdEYXRhKGNvbnN0IEludFNpemUmIG1heFRleHR1cmVTaXplLCBjb25zdCBJbnRTaXplJiB0
b3RhbFNpemUsIGJvb2wgaGFzQm9yZGVyVGV4ZWxzKQotICAgIDogbV9tYXhUZXh0dXJlU2l6ZSht
YXhUZXh0dXJlU2l6ZSkKLSAgICAsIG1fdG90YWxTaXplKHRvdGFsU2l6ZSkKLSAgICAsIG1fYm9y
ZGVyVGV4ZWxzKGhhc0JvcmRlclRleGVscyA/IDEgOiAwKQotewotICAgIHJlY29tcHV0ZU51bVRp
bGVzKCk7Ci19Ci0KLXZvaWQgVGlsaW5nRGF0YTo6c2V0VG90YWxTaXplKGNvbnN0IEludFNpemUm
IHRvdGFsU2l6ZSkKLXsKLSAgICBtX3RvdGFsU2l6ZSA9IHRvdGFsU2l6ZTsKLSAgICByZWNvbXB1
dGVOdW1UaWxlcygpOwotfQotCi12b2lkIFRpbGluZ0RhdGE6OnNldE1heFRleHR1cmVTaXplKGNv
bnN0IEludFNpemUmIG1heFRleHR1cmVTaXplKQotewotICAgIG1fbWF4VGV4dHVyZVNpemUgPSBt
YXhUZXh0dXJlU2l6ZTsKLSAgICByZWNvbXB1dGVOdW1UaWxlcygpOwotfQotCi12b2lkIFRpbGlu
Z0RhdGE6OnNldEhhc0JvcmRlclRleGVscyhib29sIGhhc0JvcmRlclRleGVscykKLXsKLSAgICBt
X2JvcmRlclRleGVscyA9IGhhc0JvcmRlclRleGVscyA/IDEgOiAwOwotICAgIHJlY29tcHV0ZU51
bVRpbGVzKCk7Ci19Ci0KLWludCBUaWxpbmdEYXRhOjp0aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGlu
dCBzcmNQb3MpIGNvbnN0Ci17Ci0gICAgaWYgKG51bVRpbGVzWCgpIDw9IDEpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgQVNTRVJUKG1fbWF4VGV4dHVyZVNpemUud2lkdGgoKSAtIDIgKiBtX2Jv
cmRlclRleGVscyk7Ci0gICAgaW50IHggPSAoc3JjUG9zIC0gbV9ib3JkZXJUZXhlbHMpIC8gKG1f
bWF4VGV4dHVyZVNpemUud2lkdGgoKSAtIDIgKiBtX2JvcmRlclRleGVscyk7Ci0gICAgcmV0dXJu
IHN0ZDo6bWluKHN0ZDo6bWF4KHgsIDApLCBudW1UaWxlc1goKSAtIDEpOwotfQotCi1pbnQgVGls
aW5nRGF0YTo6dGlsZVlJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBjb25zdAotewotICAg
IGlmIChudW1UaWxlc1koKSA8PSAxKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVCht
X21heFRleHR1cmVTaXplLmhlaWdodCgpIC0gMiAqIG1fYm9yZGVyVGV4ZWxzKTsKLSAgICBpbnQg
eSA9IChzcmNQb3MgLSBtX2JvcmRlclRleGVscykgLyAobV9tYXhUZXh0dXJlU2l6ZS5oZWlnaHQo
KSAtIDIgKiBtX2JvcmRlclRleGVscyk7Ci0gICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KHks
IDApLCBudW1UaWxlc1koKSAtIDEpOwotfQotCi1JbnRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3Vu
ZHMoaW50IGksIGludCBqKSBjb25zdAotewotICAgIGFzc2VydFRpbGUoaSwgaik7Ci0gICAgaW50
IHggPSB0aWxlUG9zaXRpb25YKGkpOwotICAgIGludCB5ID0gdGlsZVBvc2l0aW9uWShqKTsKLSAg
ICBpbnQgd2lkdGggPSB0aWxlU2l6ZVgoaSk7Ci0gICAgaW50IGhlaWdodCA9IHRpbGVTaXplWShq
KTsKLSAgICBBU1NFUlQoeCA+PSAwICYmIHkgPj0gMCAmJiB3aWR0aCA+PSAwICYmIGhlaWdodCA+
PSAwKTsKLSAgICBBU1NFUlQoeCA8PSBtX3RvdGFsU2l6ZS53aWR0aCgpICYmIHkgPD0gbV90b3Rh
bFNpemUuaGVpZ2h0KCkpOwotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotfQotCi1JbnRSZWN0IFRpbGluZ0RhdGE6OnRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCBpLCBp
bnQgaikgY29uc3QKLXsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHRpbGVCb3VuZHMoaSwgaik7Ci0K
LSAgICBpZiAobV9ib3JkZXJUZXhlbHMpIHsKLSAgICAgICAgaW50IHgxID0gYm91bmRzLngoKTsK
LSAgICAgICAgaW50IHgyID0gYm91bmRzLm1heFgoKTsKLSAgICAgICAgaW50IHkxID0gYm91bmRz
LnkoKTsKLSAgICAgICAgaW50IHkyID0gYm91bmRzLm1heFkoKTsKLQotICAgICAgICBpZiAoaSA+
IDApCi0gICAgICAgICAgICB4MS0tOwotICAgICAgICBpZiAoaSA8IChudW1UaWxlc1goKSAtIDEp
KQotICAgICAgICAgICAgeDIrKzsKLSAgICAgICAgaWYgKGogPiAwKQotICAgICAgICAgICAgeTEt
LTsKLSAgICAgICAgaWYgKGogPCAobnVtVGlsZXNZKCkgLSAxKSkKLSAgICAgICAgICAgIHkyKys7
Ci0KLSAgICAgICAgYm91bmRzID0gSW50UmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpOwot
ICAgIH0KLQotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLWludCBUaWxpbmdEYXRhOjp0aWxlUG9z
aXRpb25YKGludCB4SW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhJbmRleCA+PSAwICYmIHhJ
bmRleCA8IG51bVRpbGVzWCgpKTsKLQotICAgIGludCBwb3MgPSAwOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgeEluZGV4OyBpKyspCi0gICAgICAgIHBvcyArPSB0aWxlU2l6ZVgoaSk7Ci0KLSAg
ICByZXR1cm4gcG9zOwotfQotCi1pbnQgVGlsaW5nRGF0YTo6dGlsZVBvc2l0aW9uWShpbnQgeUlu
ZGV4KSBjb25zdAotewotICAgIEFTU0VSVCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxl
c1koKSk7Ci0KLSAgICBpbnQgcG9zID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHlJbmRl
eDsgaSsrKQotICAgICAgICBwb3MgKz0gdGlsZVNpemVZKGkpOwotCi0gICAgcmV0dXJuIHBvczsK
LX0KLQotaW50IFRpbGluZ0RhdGE6OnRpbGVTaXplWChpbnQgeEluZGV4KSBjb25zdAotewotICAg
IEFTU0VSVCh4SW5kZXggPj0gMCAmJiB4SW5kZXggPCBudW1UaWxlc1goKSk7Ci0KLSAgICBpZiAo
IXhJbmRleCAmJiBtX251bVRpbGVzWCA9PSAxKQotICAgICAgICByZXR1cm4gbV90b3RhbFNpemUu
d2lkdGgoKTsKLSAgICBpZiAoIXhJbmRleCAmJiBtX251bVRpbGVzWCA+IDEpCi0gICAgICAgIHJl
dHVybiBtX21heFRleHR1cmVTaXplLndpZHRoKCkgLSBtX2JvcmRlclRleGVsczsKLSAgICBpZiAo
eEluZGV4IDwgbnVtVGlsZXNYKCkgLSAxKQotICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6
ZS53aWR0aCgpIC0gMiAqIG1fYm9yZGVyVGV4ZWxzOwotICAgIGlmICh4SW5kZXggPT0gbnVtVGls
ZXNYKCkgLSAxKQotICAgICAgICByZXR1cm4gbV90b3RhbFNpemUud2lkdGgoKSAtIHRpbGVQb3Np
dGlvblgoeEluZGV4KTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi1pbnQgVGlsaW5nRGF0YTo6dGlsZVNpemVZKGludCB5SW5kZXgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKHlJbmRleCA+PSAwICYmIHlJbmRleCA8IG51bVRpbGVzWSgpKTsKLQotICAgIGlm
ICgheUluZGV4ICYmIG1fbnVtVGlsZXNZID09IDEpCi0gICAgICAgIHJldHVybiBtX3RvdGFsU2l6
ZS5oZWlnaHQoKTsKLSAgICBpZiAoIXlJbmRleCAmJiBtX251bVRpbGVzWSA+IDEpCi0gICAgICAg
IHJldHVybiBtX21heFRleHR1cmVTaXplLmhlaWdodCgpIC0gbV9ib3JkZXJUZXhlbHM7Ci0gICAg
aWYgKHlJbmRleCA8IG51bVRpbGVzWSgpIC0gMSkKLSAgICAgICAgcmV0dXJuIG1fbWF4VGV4dHVy
ZVNpemUuaGVpZ2h0KCkgLSAyICogbV9ib3JkZXJUZXhlbHM7Ci0gICAgaWYgKHlJbmRleCA9PSBu
dW1UaWxlc1koKSAtIDEpCi0gICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZS5oZWlnaHQoKSAtIHRp
bGVQb3NpdGlvblkoeUluZGV4KTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1JbnRQb2ludCBUaWxpbmdEYXRhOjp0ZXh0dXJlT2Zmc2V0KGludCB4SW5k
ZXgsIGludCB5SW5kZXgpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSAoIXhJbmRleCB8fCBtX251
bVRpbGVzWCA9PSAxKSA/IDAgOiBtX2JvcmRlclRleGVsczsKLSAgICBpbnQgdG9wID0gKCF5SW5k
ZXggfHwgbV9udW1UaWxlc1kgPT0gMSkgPyAwIDogbV9ib3JkZXJUZXhlbHM7Ci0KLSAgICByZXR1
cm4gSW50UG9pbnQobGVmdCwgdG9wKTsKLX0KLQotdm9pZCBUaWxpbmdEYXRhOjpyZWNvbXB1dGVO
dW1UaWxlcygpCi17Ci0gICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGlsZXMobV9tYXhUZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RvdGFsU2l6ZS53aWR0aCgpLCBtX2JvcmRlclRleGVscyk7Ci0g
ICAgbV9udW1UaWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobV9tYXhUZXh0dXJlU2l6ZS5oZWlnaHQo
KSwgbV90b3RhbFNpemUuaGVpZ2h0KCksIG1fYm9yZGVyVGV4ZWxzKTsKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YmZlOGU5N2RiZjJmNmRhYzc2YmJiZWU3NjI1M2Fl
YzczNDlkN2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAorKysgL2Rl
di9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUaWxpbmdEYXRhX2gKLSNkZWZpbmUgVGls
aW5nRGF0YV9oCi0KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3Mg
SW50UmVjdDsKLWNsYXNzIEludFBvaW50OwotCi1jbGFzcyBUaWxpbmdEYXRhIHsKLXB1YmxpYzoK
LSAgICBUaWxpbmdEYXRhKGNvbnN0IEludFNpemUmIG1heFRleHR1cmVTaXplLCBjb25zdCBJbnRT
aXplJiB0b3RhbFNpemUsIGJvb2wgaGFzQm9yZGVyVGV4ZWxzKTsKLQotICAgIHZvaWQgc2V0VG90
YWxTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICBjb25zdCBJbnRTaXplJiB0b3RhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZTsgfQotICAgIHZvaWQgc2V0TWF4VGV4dHVyZVNpemUo
Y29uc3QgSW50U2l6ZSYpOwotICAgIGNvbnN0IEludFNpemUmIG1heFRleHR1cmVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQotICAgIHZvaWQgc2V0SGFzQm9yZGVyVGV4
ZWxzKGJvb2wpOwotICAgIGludCBib3JkZXJUZXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2JvcmRl
clRleGVsczsgfQotCi0gICAgYm9vbCBoYXNFbXB0eUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuICFu
dW1UaWxlc1goKSB8fCAhbnVtVGlsZXNZKCk7IH0KLSAgICBpbnQgbnVtVGlsZXNYKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1UaWxlc1g7IH0KLSAgICBpbnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1
cm4gbV9udW1UaWxlc1k7IH0KLSAgICBpbnQgdGlsZVhJbmRleEZyb21TcmNDb29yZChpbnQpIGNv
bnN0OwotICAgIGludCB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGludCkgY29uc3Q7Ci0KLSAgICBJ
bnRSZWN0IHRpbGVCb3VuZHMoaW50LCBpbnQpIGNvbnN0OwotICAgIEludFJlY3QgdGlsZUJvdW5k
c1dpdGhCb3JkZXIoaW50LCBpbnQpIGNvbnN0OwotICAgIGludCB0aWxlUG9zaXRpb25YKGludCB4
SW5kZXgpIGNvbnN0OwotICAgIGludCB0aWxlUG9zaXRpb25ZKGludCB5SW5kZXgpIGNvbnN0Owot
ICAgIGludCB0aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3Q7Ci0gICAgaW50IHRpbGVTaXplWShp
bnQgeUluZGV4KSBjb25zdDsKLQotICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiB0aWxlQm91bmQn
cyBhbmQgdGlsZUJvdW5kV2l0aEJvcmRlcidzIGxvY2F0aW9uKCkuCi0gICAgSW50UG9pbnQgdGV4
dHVyZU9mZnNldChpbnQgeEluZGV4LCBpbnQgeUluZGV4KSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBUaWxpbmdEYXRhKCkgOiBtX2JvcmRlclRleGVscygwKSB7IH0KLSAgICB2b2lkIGFzc2VydFRp
bGUoaW50IGksIGludCBqKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoaSwgaSA+PSAwICYmIGkgPCBu
dW1UaWxlc1goKSk7IEFTU0VSVF9VTlVTRUQoaiwgaiA+PSAwICYmIGogPCBudW1UaWxlc1koKSk7
IH0KLSAgICB2b2lkIHJlY29tcHV0ZU51bVRpbGVzKCk7Ci0KLSAgICBJbnRTaXplIG1fbWF4VGV4
dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBtX3RvdGFsU2l6ZTsKLSAgICBpbnQgbV9ib3JkZXJUZXhl
bHM7IC8vIDAgb3IgMQotCi0gICAgLy8gY29tcHV0ZWQgdmFsdWVzOgotICAgIGludCBtX251bVRp
bGVzWDsKLSAgICBpbnQgbV9udW1UaWxlc1k7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBUaWxpbmdE
YXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9t
YWMvRHJhd2luZ0J1ZmZlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTYzY2EyODc4ZTQzODZkMDE1Njg3ZTFiNDQ0NjcwNDBiZDk4MDg2ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KKysrIC9kZXYvbnVsbApAQCAt
MSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSB8fCBVU0UoM0RfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0K
LSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyLmgiCi0KLSNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURyYXdp
bmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzZXJ2ZURyYXdp
bmdCdWZmZXIgcHJlc2VydmVEcmF3aW5nQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBbHBoYVJlcXVpcmVtZW50IGFscGhhKQotICAgIDogbV9wcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIocHJlc2VydmVEcmF3aW5nQnVmZmVyKQotICAgICwgbV9hbHBoYShhbHBoYSkKLSAgICAsIG1f
c2Npc3NvckVuYWJsZWQoZmFsc2UpCi0gICAgLCBtX3RleHR1cmUyREJpbmRpbmcoMCkKLSAgICAs
IG1fZnJhbWVidWZmZXJCaW5kaW5nKDApCi0gICAgLCBtX2FjdGl2ZVRleHR1cmVVbml0KEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwg
bV9zaXplKC0xLCAtMSkKLSAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVs
dGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0g
ICAgLCBtX2Zibyhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQotICAgICwgbV9jb2xvckJ1
ZmZlcigwKQotICAgICwgbV9mcm9udENvbG9yQnVmZmVyKDApCi0gICAgLCBtX3NlcGFyYXRlRnJv
bnRUZXh0dXJlKGZhbHNlKQotICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKLSAgICAsIG1f
ZGVwdGhCdWZmZXIoMCkKLSAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9tdWx0aXNh
bXBsZUZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi17Ci0gICAgQVNT
RVJUKG1fZmJvKTsKLSAgICBpZiAoIW1fZmJvKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIg
PSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDpt
X2NvbnRleHQuZ2V0KCldKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFttX3BsYXRmb3JtTGF5
ZXIuZ2V0KCkgc2V0TmFtZTpAIkRyYXdpbmdCdWZmZXIgTGF5ZXIiXTsKLSNlbmRpZiAgICAKLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0KLSAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRv
IHJlbmRlciBpbnRvCi0gICAgbV9jb2xvckJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUo
KTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9jb2xvckJ1ZmZlcik7Ci0gICAgY29udGV4dC0+dGV4UGFyYW1ldGVyZihHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgY29udGV4dC0+dGV4UGFyYW1ldGVy
ZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7
Ci0gICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7Ci0gICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIAotICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsK
LSAgICByZXNldChzaXplKTsKLX0KLQotRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQot
ewotICAgIGNsZWFyKCk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIoKQotewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Ci19Ci0KLXVu
c2lnbmVkIERyYXdpbmdCdWZmZXI6OmZyb250Q29sb3JCdWZmZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBjb2xvckJ1ZmZlcigpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVy
Q29udGV4dE9wZW5DTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYTA1MDMx
MDRhODU3NTJmNWVjZjgwZGM0Nzc4MGM5ZjMxZDEzZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQu
aHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShPUEVOQ0wpCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZpbHRlckNvbnRleHRPcGVuQ0wqIEZpbHRlckNvbnRl
eHRPcGVuQ0w6Om1fY29udGV4dCA9IDA7Ci1pbnQgRmlsdGVyQ29udGV4dE9wZW5DTDo6bV9hbHJl
YWR5SW5pdGlhbGl6ZWQgPSAwOwotCi1GaWx0ZXJDb250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb250ZXh0KCkKLXsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4g
bV9jb250ZXh0OwotICAgIGlmIChtX2FscmVhZHlJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBtX2FscmVhZHlJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgRmlsdGVyQ29udGV4
dE9wZW5DTCogbG9jYWxDb250ZXh0ID0gbmV3IEZpbHRlckNvbnRleHRPcGVuQ0woKTsKLQotICAg
IC8vIEluaXRpYWxpemluZyB0aGUgY29udGV4dC4KLSAgICBjbF9pbnQgZXJyb3JOdW1iZXI7Ci0g
ICAgY2xfZGV2aWNlX2lkKiBkZXZpY2VzOwotICAgIGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZv
cm1JZDsKLSAgICBzaXplX3QgZGV2aWNlQnVmZmVyU2l6ZSA9IDA7Ci0KLSAgICBlcnJvck51bWJl
ciA9IGNsR2V0UGxhdGZvcm1JRHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7Ci0gICAgY2xfY29u
dGV4dF9wcm9wZXJ0aWVzIGNvbnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZP
Uk0sIChjbF9jb250ZXh0X3Byb3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKLSAgICBsb2Nh
bENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRl
eHRQcm9wZXJ0aWVzLCBDTF9ERVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7Ci0g
ICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKLSAgICAgICAgbG9jYWxDb250ZXh0
LT5tX2RldmljZUNvbnRleHQgPSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVy
dGllcywgQ0xfREVWSUNFX1RZUEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOwotICAgICAgICBp
ZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1f
ZGV2aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6
ZSk7Ci0gICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKCFkZXZpY2VCdWZmZXJTaXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGRldmljZXMgPSByZWludGVycHJldF9jYXN0PGNsX2RldmljZV9pZCo+KGZhc3RNYWxsb2MoZGV2
aWNlQnVmZmVyU2l6ZSkpOwotICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2Nh
bENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZm
ZXJTaXplLCBkZXZpY2VzLCAwKTsKLSAgICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0g
Y2xDcmVhdGVDb21tYW5kUXVldWUobG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmlj
ZXNbMF0sIDAsIDApOwotICAgIGlmICghbG9jYWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2Vz
WzBdOwotICAgIGZhc3RGcmVlKGRldmljZXMpOwotCi0gICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQg
PSBDTF9GQUxTRTsKLSAgICBjbEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlk
LCBDTF9ERVZJQ0VfSU1BR0VfU1VQUE9SVCwgc2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0
LCAwKTsKLSAgICBpZiAoaW1hZ2VTdXBwb3J0ICE9IENMX1RSVUUpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgbV9jb250ZXh0ID0gbG9jYWxDb250ZXh0OwotICAgIHJldHVybiBtX2NvbnRleHQ7
Ci19Ci0KLXZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6ZnJlZVJlc291cmNlcygpCi17Ci0gICAg
Y2xGaW5pc2gobV9jb21tYW5kUXVldWUpOwotCi0gICAgaWYgKG1fY29sb3JNYXRyaXhXYXNDb21w
aWxlZCkgewotICAgICAgICBmcmVlUmVzb3VyY2UobV9tYXRyaXhPcGVyYXRpb24pOwotICAgICAg
ICBmcmVlUmVzb3VyY2UobV9zYXR1cmF0ZUFuZEh1ZVJvdGF0ZU9wZXJhdGlvbik7Ci0gICAgICAg
IGZyZWVSZXNvdXJjZShtX2x1bWluYW5jZU9wZXJhdGlvbik7Ci0gICAgICAgIGZyZWVSZXNvdXJj
ZShtX2NvbG9yTWF0cml4UHJvZ3JhbSk7Ci0gICAgfQotICAgIG1fY29sb3JNYXRyaXhXYXNDb21w
aWxlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fdHVyYnVsZW5jZVdhc0NvbXBpbGVkKSB7Ci0gICAg
ICAgIGZyZWVSZXNvdXJjZShtX3R1cmJ1bGVuY2VPcGVyYXRpb24pOwotICAgICAgICBmcmVlUmVz
b3VyY2UobV90dXJidWxlbmNlUHJvZ3JhbSk7Ci0gICAgfSAgICAKLSAgICBtX3R1cmJ1bGVuY2VX
YXNDb21waWxlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1fdHJhbnNmb3JtQ29sb3JTcGFjZVdhc0Nv
bXBpbGVkKSB7Ci0gICAgICAgIGZyZWVSZXNvdXJjZShtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJu
ZWwpOwotICAgICAgICBmcmVlUmVzb3VyY2UobV90cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSk7
Ci0gICAgfQotICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVdhc0NvbXBpbGVkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6ZGVzdHJveUNvbnRleHQoKQotewotICAgIGZy
ZWVSZXNvdXJjZXMoKTsKLQotICAgIGlmIChtX2NvbW1hbmRRdWV1ZSkKLSAgICAgICAgY2xSZWxl
YXNlQ29tbWFuZFF1ZXVlKG1fY29tbWFuZFF1ZXVlKTsKLSAgICBtX2NvbW1hbmRRdWV1ZSA9IDA7
Ci0KLSAgICBpZiAobV9kZXZpY2VDb250ZXh0KQotICAgICAgICBjbFJlbGVhc2VDb250ZXh0KG1f
ZGV2aWNlQ29udGV4dCk7Ci0gICAgbV9kZXZpY2VDb250ZXh0ID0gMDsKLQotICAgIG1fY29udGV4
dCA9IDA7Ci19Ci0KLU9wZW5DTEhhbmRsZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVu
Q0xJbWFnZShJbnRTaXplIHBhaW50U2l6ZSkKLXsKLSAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBj
b250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOwotCi0gICAgY2xfaW1hZ2Vf
Zm9ybWF0IGNsSW1hZ2VGb3JtYXQ7Ci0gICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29y
ZGVyID0gQ0xfUkdCQTsKLSAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBl
ID0gQ0xfVU5PUk1fSU5UODsKLQotI2lmZGVmIENMX0FQSV9TVUZGSVhfX1ZFUlNJT05fMV8yCi0g
ICAgY2xfaW1hZ2VfZGVzYyBpbWFnZURlc2NyaXB0b3IgPSB7IENMX01FTV9PQkpFQ1RfSU1BR0Uy
RCwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwgMCwgMCwgMCwg
MCwgMH07Ci0gICAgT3BlbkNMSGFuZGxlIGltYWdlID0gY2xDcmVhdGVJbWFnZShjb250ZXh0LT5k
ZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAmY2xJbWFnZUZvcm1hdCwgJmltYWdl
RGVzY3JpcHRvciwgMCwgMCk7Ci0jZWxzZQotICAgIE9wZW5DTEhhbmRsZSBpbWFnZSA9IGNsQ3Jl
YXRlSW1hZ2UyRChjb250ZXh0LT5kZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAm
Y2xJbWFnZUZvcm1hdCwKLSAgICAgICAgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWln
aHQoKSwgMCwgMCwgMCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiB0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSA9Ci1QUk9HUkFNKAot
Y29uc3Qgc2FtcGxlcl90IHNhbXBsZXIgPSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBD
TEtfQUREUkVTU19DTEFNUF9UT19FREdFIHwgQ0xLX0ZJTFRFUl9ORUFSRVNUOwotCi1fX2tlcm5l
bCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwg
X193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19jb25zdGFudCBmbG9hdCAqY2xM
b29rVXBUYWJsZSkKLXsKLSAgICBpbnQyIHNvdXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFs
X2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKTsKLSAgICBmbG9hdDQgcGl4ZWwgPSByZWFkX2ltYWdl
Zihzb3VyY2UsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsKLQotICAgIHBpeGVsID0gKGZsb2F0NCkg
KGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueCAqIDI1NSkpXSwgY2xMb29rVXBUYWJs
ZVsoaW50KShyb3VuZChwaXhlbC55ICogMjU1KSldLAotICAgICAgICBjbExvb2tVcFRhYmxlWyhp
bnQpIChyb3VuZChwaXhlbC56ICogMjU1KSldLCBwaXhlbC53KTsKLQotICAgIHdyaXRlX2ltYWdl
ZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQsIHBpeGVsKTsKLX0KLSk7IC8vIEVuZCBvZiBPcGVu
Q0wga2VybmVscwotCi1pbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlVHJh
bnNmb3JtQ29sb3JTcGFjZVByb2dyYW0oKQotewotICAgIGlmIChtX3RyYW5zZm9ybUNvbG9yU3Bh
Y2VXYXNDb21waWxlZCB8fCBpbkVycm9yKCkpCi0gICAgICAgIHJldHVybiAhaW5FcnJvcigpOwot
Ci0gICAgbV90cmFuc2Zvcm1Db2xvclNwYWNlV2FzQ29tcGlsZWQgPSB0cnVlOwotCi0gICAgaWYg
KGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFt
ID0gY29tcGlsZVByb2dyYW0odHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbFByb2dyYW0pKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQo
KG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbCA9IGtlcm5lbEJ5TmFtZShtX3RyYW5zZm9ybUNv
bG9yU3BhY2VQcm9ncmFtLCAidHJhbnNmb3JtQ29sb3JTcGFjZSIpKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNM
OjpvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhhbmRsZSYgc291cmNlLCBJbnRSZWN0
IHNvdXJjZVNpemUsIENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xv
clNwYWNlKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5k
bGUsIGRldmljZVJnYkxVVCwgKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChPcGVuQ0xIYW5kbGUsIGxpbmVhclJnYkxVVCwgKCkpOwotCi0gICAgaWYgKHNyY0NvbG9yU3Bh
Y2UgPT0gZHN0Q29sb3JTcGFjZSB8fCBpbkVycm9yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlTGluZWFyUkdCICYmIHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZURldmljZVJHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZUxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VEZXZpY2VS
R0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvbXBpbGVUcmFuc2Zvcm1Db2xvclNw
YWNlUHJvZ3JhbSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPcGVuQ0xIYW5kbGUgZGVzdGlu
YXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZShzb3VyY2VTaXplLnNpemUoKSk7Ci0KLSAgICBSdW5L
ZXJuZWwga2VybmVsKHRoaXMsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbCwgc291cmNlU2l6
ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhlaWdodCgpKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQo
c291cmNlKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOwotCi0gICAgaWYg
KGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZUxpbmVhclJHQikgewotICAgICAgICBpZiAoIWxp
bmVhclJnYkxVVCkgewotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBsb29rVXBUYWJsZTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3Ig
PSAoY29sb3IgPD0gMC4wNDA0NWYgPyBjb2xvciAvIDEyLjkyZiA6IHBvdygoY29sb3IgKyAwLjA1
NWYpIC8gMS4wNTVmLCAyLjRmKSk7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1heCgw
LjBmLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1pbigxLjBmLCBjb2xv
cik7Ci0gICAgICAgICAgICAgICAgbG9va1VwVGFibGUuYXBwZW5kKChyb3VuZChjb2xvciAqIDI1
NSkpIC8gMjU1KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVhclJnYkxVVCA9IGtl
cm5lbC5hZGRBcmd1bWVudChsb29rVXBUYWJsZS5kYXRhKCksIHNpemVvZihmbG9hdCkgKiAyNTYp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGtlcm5lbC5hZGRBcmd1bWVudChsaW5lYXJS
Z2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlRGV2aWNl
UkdCKSB7Ci0gICAgICAgIGlmICghZGV2aWNlUmdiTFVUKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGxvb2tVcFRhYmxlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gKHBvd2YoY29sb3IsIDEuMGYgLyAyLjRmKSAqIDEuMDU1
ZikgLSAwLjA1NWY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1heCgwLjBmLCBjb2xv
cik7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1pbigxLjBmLCBjb2xvcik7Ci0gICAg
ICAgICAgICAgICAgbG9va1VwVGFibGUuYXBwZW5kKChyb3VuZChjb2xvciAqIDI1NSkpIC8gMjU1
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRldmljZVJnYkxVVCA9IGtlcm5lbC5hZGRB
cmd1bWVudChsb29rVXBUYWJsZS5kYXRhKCksIHNpemVvZihmbG9hdCkgKiAyNTYpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXZpY2VSZ2JMVVQpOwot
ICAgIH0KLQotICAgIGtlcm5lbC5ydW4oKTsKLSAgICBzb3VyY2UuY2xlYXIoKTsKLSAgICBzb3Vy
Y2UgPSBkZXN0aW5hdGlvbjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZpbGxLZXJuZWxQcm9n
cmFtID0KLVBST0dSQU1fU1RSKAotX19rZXJuZWwgdm9pZCBmaWxsKF9fd3JpdGVfb25seSBpbWFn
ZTJkX3QgZGVzdGluYXRpb24sIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi17
Ci0gICAgZmxvYXQ0IHNvdXJjZVBpeGVsID0gKGZsb2F0NCkociwgZywgYiwgYSk7Ci0gICAgd3Jp
dGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2Jh
bF9pZCgxKSksIHNvdXJjZVBpeGVsKTsKLX0KLSk7Ci0KLWlubGluZSBib29sIEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbXBpbGVGaWxsKCkKLXsKLSAgICBpZiAobV9maWxsV2FzQ29tcGlsZWQgfHwg
aW5FcnJvcigpKQotICAgICAgICByZXR1cm4gIWluRXJyb3IoKTsKLQotICAgIG1fZmlsbFdhc0Nv
bXBpbGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9m
aWxsUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGZpbGxLZXJuZWxQcm9ncmFtKSkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX2Zp
bGwgPSBrZXJuZWxCeU5hbWUobV9maWxsUHJvZ3JhbSwgImZpbGwiKSkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRmlsdGVyQ29udGV4dE9wZW5D
TDo6ZmlsbChjbF9tZW0gaW1hZ2UsIEludFNpemUgaW1hZ2VTaXplLCBDb2xvciBjb2xvcikKLXsK
LSAgICBpZiAoIW1fY29udGV4dCB8fCBpbkVycm9yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbXBpbGVGaWxsKCk7Ci0KLSAgICBmbG9hdCByLCBnLCBiLCBhOwotCi0gICAgY29sb3IuZ2V0
UkdCQShyLCBnLCBiLCBhKTsKLQotICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV9maWxsLCBp
bWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKTsKLSAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoaW1hZ2UpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChyKTsKLSAgICBrZXJuZWwuYWRk
QXJndW1lbnQoZyk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KGIpOwotICAgIGtlcm5lbC5hZGRB
cmd1bWVudChhKTsKLSAgICBrZXJuZWwucnVuKCk7Ci19Ci0KLWNsX3Byb2dyYW0gRmlsdGVyQ29u
dGV4dE9wZW5DTDo6Y29tcGlsZVByb2dyYW0oY29uc3QgY2hhciogc291cmNlKQotewotICAgIGNs
X3Byb2dyYW0gcHJvZ3JhbTsKLSAgICBjbF9pbnQgZXJyb3JOdW1iZXIgPSAwOwotCi0gICAgcHJv
Z3JhbSA9IGNsQ3JlYXRlUHJvZ3JhbVdpdGhTb3VyY2UobV9kZXZpY2VDb250ZXh0LCAxLCAoY29u
c3QgY2hhcioqKSAmc291cmNlLCAwLCAmZXJyb3JOdW1iZXIpOwotICAgIGlmIChpc0ZhaWxlZChl
cnJvck51bWJlcikpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGlzRmFpbGVkKGNsQnVp
bGRQcm9ncmFtKHByb2dyYW0sIDAsIDAsIDAsIDAsIDApKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQotdm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpmcmVl
UmVzb3VyY2UoY2xfa2VybmVsJiBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSkgewotICAgICAg
ICBjbFJlbGVhc2VLZXJuZWwoaGFuZGxlKTsKLSAgICAgICAgaGFuZGxlID0gMDsKLSAgICB9Ci19
Ci0KLXZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6ZnJlZVJlc291cmNlKGNsX3Byb2dyYW0mIGhh
bmRsZSkKLXsKLSAgICBpZiAoaGFuZGxlKSB7Ci0gICAgICAgIGNsUmVsZWFzZVByb2dyYW0oaGFu
ZGxlKTsKLSAgICAgICAgaGFuZGxlID0gMDsKLSAgICB9Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZTc1ODA1NDM1MjBmM2FjZmExNzA5MTQ5MzdmYmM3OTMz
ODVlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMg
Q3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgRmlsdGVyQ29udGV4dE9wZW5DTF9oCi0jZGVmaW5lIEZpbHRlckNvbnRl
eHRPcGVuQ0xfaAotCi0jaWYgRU5BQkxFKE9QRU5DTCkKLSNpbmNsdWRlICJDTC9jbC5oIgotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkNMSGFuZGxlLmgiCi0K
LSNkZWZpbmUgUFJPR1JBTV9TVFIoLi4uKSAgI19fVkFfQVJHU19fCi0jZGVmaW5lIFBST0dSQU0o
Li4uKSBQUk9HUkFNX1NUUihfX1ZBX0FSR1NfXykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBGaWx0ZXJDb250ZXh0T3BlbkNMIHsKLXB1YmxpYzoKLSAgICBGaWx0ZXJDb250ZXh0T3Bl
bkNMKCkKLSAgICAgICAgOiBtX2luRXJyb3IoZmFsc2UpCi0gICAgICAgICwgbV9kZXZpY2VJZCgw
KQotICAgICAgICAsIG1fZGV2aWNlQ29udGV4dCgwKQotICAgICAgICAsIG1fY29tbWFuZFF1ZXVl
KDApCi0gICAgICAgICwgbV90cmFuc2Zvcm1Db2xvclNwYWNlV2FzQ29tcGlsZWQoZmFsc2UpCi0g
ICAgICAgICwgbV90cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSgwKQotICAgICAgICAsIG1fdHJh
bnNmb3JtQ29sb3JTcGFjZUtlcm5lbCgwKQotICAgICAgICAsIG1fZmlsbFdhc0NvbXBpbGVkKGZh
bHNlKQotICAgICAgICAsIG1fZmlsbFByb2dyYW0oMCkKLSAgICAgICAgLCBtX2ZpbGwoMCkKLSAg
ICAgICAgLCBtX21lcmdlV2FzQ29tcGlsZWQoZmFsc2UpCi0gICAgICAgICwgbV9tZXJnZVByb2dy
YW0oMCkKLSAgICAgICAgLCBtX21lcmdlQ29weU9wZXJhdGlvbigwKQotICAgICAgICAsIG1fbWVy
Z2VPcGVyYXRpb24oMCkKLSAgICAgICAgLCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQoZmFsc2Up
Ci0gICAgICAgICwgbV9jb2xvck1hdHJpeFByb2dyYW0oMCkKLSAgICAgICAgLCBtX21hdHJpeE9w
ZXJhdGlvbigwKQotICAgICAgICAsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb24oMCkK
LSAgICAgICAgLCBtX2x1bWluYW5jZU9wZXJhdGlvbigwKQotICAgICAgICAsIG1fdHVyYnVsZW5j
ZVdhc0NvbXBpbGVkKGZhbHNlKQotICAgICAgICAsIG1fdHVyYnVsZW5jZVByb2dyYW0oMCkKLSAg
ICAgICAgLCBtX3R1cmJ1bGVuY2VPcGVyYXRpb24oMCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8g
UmV0dXJucyAwIGlmIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KLSAgICBzdGF0aWMgRmlsdGVyQ29u
dGV4dE9wZW5DTCogY29udGV4dCgpOwotCi0gICAgY2xfZGV2aWNlX2lkIGRldmljZUlkKCkgeyBy
ZXR1cm4gbV9kZXZpY2VJZDsgfQotICAgIGNsX2NvbnRleHQgZGV2aWNlQ29udGV4dCgpIHsgcmV0
dXJuIG1fZGV2aWNlQ29udGV4dDsgfQotICAgIGNsX2NvbW1hbmRfcXVldWUgY29tbWFuZFF1ZXVl
KCkgeyByZXR1cm4gbV9jb21tYW5kUXVldWU7IH0KLQotICAgIGlubGluZSB2b2lkIHNldEluRXJy
b3IoYm9vbCBlcnJvckNvZGUgPSB0cnVlKSB7IG1faW5FcnJvciA9IGVycm9yQ29kZTsgfQotICAg
IGlubGluZSBib29sIGluRXJyb3IoKSB7IHJldHVybiBtX2luRXJyb3I7IH0KLSAgICBpbmxpbmUg
Ym9vbCBpc0ZhaWxlZChib29sKTsKLSAgICBpbmxpbmUgYm9vbCBpc1Jlc291cmNlQWxsb2NhdGlv
bkZhaWxlZChib29sKTsKLQotICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAgIHZvaWQgZGVz
dHJveUNvbnRleHQoKTsKLQotICAgIE9wZW5DTEhhbmRsZSBjcmVhdGVPcGVuQ0xJbWFnZShJbnRT
aXplKTsKLQotICAgIGlubGluZSBib29sIGNvbXBpbGVGaWxsKCk7Ci0gICAgdm9pZCBmaWxsKGNs
X21lbSwgSW50U2l6ZSwgQ29sb3IpOwotCi0gICAgaW5saW5lIGJvb2wgY29tcGlsZVRyYW5zZm9y
bUNvbG9yU3BhY2VQcm9ncmFtKCk7Ci0gICAgdm9pZCBvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNl
KE9wZW5DTEhhbmRsZSYsIEludFJlY3QsIENvbG9yU3BhY2UsIENvbG9yU3BhY2UpOwotCi0gICAg
aW5saW5lIGJvb2wgY29tcGlsZUZFQ29sb3JNYXRyaXgoKTsKLSAgICBpbmxpbmUgYm9vbCBjb21w
aWxlRkVUdXJidWxlbmNlKCk7Ci0gICAgaW5saW5lIGJvb2wgY29tcGlsZUZFTWVyZ2UoKTsKLQot
ICAgIGlubGluZSB2b2lkIGFwcGx5RkVNZXJnZUNvcHkoT3BlbkNMSGFuZGxlLCBJbnRTaXplLCBP
cGVuQ0xIYW5kbGUsIEludFBvaW50Jik7Ci0gICAgaW5saW5lIHZvaWQgYXBwbHlGRU1lcmdlKE9w
ZW5DTEhhbmRsZSwgT3BlbkNMSGFuZGxlLCBPcGVuQ0xIYW5kbGUsIE9wZW5DTEhhbmRsZSwgSW50
U2l6ZSwgSW50UG9pbnQmLCBJbnRQb2ludCYpOwotICAgIGlubGluZSB2b2lkIGFwcGx5RkVDb2xv
ck1hdHJpeChPcGVuQ0xIYW5kbGUsIEludFNpemUsIE9wZW5DTEhhbmRsZSwgSW50UG9pbnQsIGZs
b2F0KiwgaW50KTsKLSAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xIYW5k
bGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAotICAg
ICAgICBpbnQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgaW50LCBp
bnQpOwotCi1wcml2YXRlOgotCi0gICAgY2xhc3MgUnVuS2VybmVsIHsKLSAgICAgICAgcHVibGlj
OgotICAgICAgICAgICAgUnVuS2VybmVsKEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQsIGNs
X2tlcm5lbCBrZXJuZWwsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKLSAgICAgICAgICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAgICAgICAgICwgbV9rZXJuZWwoa2Vy
bmVsKQotICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAgICAgICAgICAgICAgICwgbV9l
cnJvcihjb250ZXh0LT5pbkVycm9yKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bV9nbG9iYWxTaXplWzBdID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgbV9nbG9iYWxTaXplWzFd
ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50
KE9wZW5DTEhhbmRsZSBoYW5kbGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yID0gY2xTZXRLZXJuZWxBcmco
bV9rZXJuZWwsIG1faW5kZXgrKywgc2l6ZW9mKE9wZW5DTEhhbmRsZSksIGhhbmRsZS5oYW5kbGVB
ZGRyZXNzKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50
KGNsX2ludCB2YWx1ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZXJy
b3IpCi0gICAgICAgICAgICAgICAgICAgIG1fZXJyb3IgPSBjbFNldEtlcm5lbEFyZyhtX2tlcm5l
bCwgbV9pbmRleCsrLCBzaXplb2YoY2xfaW50KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZh
bHVlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xf
ZmxvYXQgdmFsdWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Vycm9y
KQotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yID0gY2xTZXRLZXJuZWxBcmcobV9rZXJuZWws
IG1faW5kZXgrKywgc2l6ZW9mKGNsX2Zsb2F0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZh
bHVlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xf
c2FtcGxlciBoYW5kbGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2Vy
cm9yKQotICAgICAgICAgICAgICAgICAgICBtX2Vycm9yID0gY2xTZXRLZXJuZWxBcmcobV9rZXJu
ZWwsIG1faW5kZXgrKywgc2l6ZW9mKGNsX3NhbXBsZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigmaGFuZGxlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE9wZW5DTEhhbmRsZSBh
ZGRBcmd1bWVudCh2b2lkKiBidWZmZXIsIGludCBzaXplKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICBPcGVuQ0xIYW5kbGUgaGFuZGxlKGNsQ3JlYXRlQnVmZmVyKG1fY29udGV4
dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9PTkxZLCBzaXplLCAwLCAmbV9lcnJvcikp
OwotICAgICAgICAgICAgICAgIGlmIChtX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgICAgICBtX2Vycm9yID0gY2xFbnF1ZXVlV3JpdGVCdWZmZXIobV9j
b250ZXh0LT5jb21tYW5kUXVldWUoKSwgaGFuZGxlLCBDTF9UUlVFLCAwLCBzaXplLCBidWZmZXIs
IDAsIDAsIDApOwotICAgICAgICAgICAgICAgIGlmIChtX2Vycm9yKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBtX2Vycm9yID0gY2xTZXRLZXJuZWxBcmco
bV9rZXJuZWwsIG1faW5kZXgrKywgc2l6ZW9mKE9wZW5DTEhhbmRsZSksIGhhbmRsZS5oYW5kbGVB
ZGRyZXNzKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAhbV9lcnJvciA/IGhhbmRsZSA6IDA7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgcnVuKCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5pc0ZhaWxlZChtX2Vycm9yKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgbV9lcnJvciA9IGNsRmlu
aXNoKG1fY29udGV4dC0+bV9jb21tYW5kUXVldWUpOwotICAgICAgICAgICAgICAgIGlmICghbV9l
cnJvcikKLSAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IGNsRW5xdWV1ZU5EUmFuZ2VLZXJu
ZWwobV9jb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSwgbV9rZXJuZWwsIDIsIDAsIG1fZ2xvYmFsU2l6
ZSwgMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5pc0ZhaWxlZChtX2Vy
cm9yKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRmlsdGVyQ29udGV4dE9wZW5DTCog
bV9jb250ZXh0OwotICAgICAgICAgICAgY2xfa2VybmVsIG1fa2VybmVsOwotICAgICAgICAgICAg
c2l6ZV90IG1fZ2xvYmFsU2l6ZVsyXTsKLSAgICAgICAgICAgIGludCBtX2luZGV4OwotICAgICAg
ICAgICAgaW50IG1fZXJyb3I7Ci0gICAgICAgIH07Ci0KLSAgICBjbF9wcm9ncmFtIGNvbXBpbGVQ
cm9ncmFtKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgaW5saW5lIGNsX2tlcm5lbCBrZXJuZWxC
eU5hbWUoY2xfcHJvZ3JhbSBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiBjbENy
ZWF0ZUtlcm5lbChwcm9ncmFtLCBuYW1lLCAwKTsgfQotCi0gICAgc3RhdGljIGlubGluZSB2b2lk
IGZyZWVSZXNvdXJjZShjbF9rZXJuZWwmKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZVJl
c291cmNlKGNsX3Byb2dyYW0mKTsKLQotICAgIHN0YXRpYyBGaWx0ZXJDb250ZXh0T3BlbkNMKiBt
X2NvbnRleHQ7Ci0gICAgc3RhdGljIGludCBtX2FscmVhZHlJbml0aWFsaXplZDsKLSAgICBib29s
IG1faW5FcnJvcjsKLQotICAgIGNsX2RldmljZV9pZCBtX2RldmljZUlkOwotICAgIGNsX2NvbnRl
eHQgbV9kZXZpY2VDb250ZXh0OwotICAgIGNsX2NvbW1hbmRfcXVldWUgbV9jb21tYW5kUXVldWU7
Ci0KLSAgICBib29sIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVdhc0NvbXBpbGVkOwotICAgIGNsX3By
b2dyYW0gbV90cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbTsKLSAgICBjbF9rZXJuZWwgbV90cmFu
c2Zvcm1Db2xvclNwYWNlS2VybmVsOwotCi0gICAgYm9vbCBtX2ZpbGxXYXNDb21waWxlZDsKLSAg
ICBjbF9wcm9ncmFtIG1fZmlsbFByb2dyYW07Ci0gICAgY2xfa2VybmVsIG1fZmlsbDsKLQotICAg
IGJvb2wgbV9tZXJnZVdhc0NvbXBpbGVkOwotICAgIGNsX3Byb2dyYW0gbV9tZXJnZVByb2dyYW07
Ci0gICAgY2xfa2VybmVsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uOwotICAgIGNsX2tlcm5lbCBtX21l
cmdlT3BlcmF0aW9uOwotCi0gICAgYm9vbCBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQ7Ci0gICAg
Y2xfcHJvZ3JhbSBtX2NvbG9yTWF0cml4UHJvZ3JhbTsKLSAgICBjbF9rZXJuZWwgbV9tYXRyaXhP
cGVyYXRpb247Ci0gICAgY2xfa2VybmVsIG1fc2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247
Ci0gICAgY2xfa2VybmVsIG1fbHVtaW5hbmNlT3BlcmF0aW9uOwotCi0gICAgYm9vbCBtX3R1cmJ1
bGVuY2VXYXNDb21waWxlZDsKLSAgICBjbF9wcm9ncmFtIG1fdHVyYnVsZW5jZVByb2dyYW07Ci0g
ICAgY2xfa2VybmVsIG1fdHVyYnVsZW5jZU9wZXJhdGlvbjsKLX07Ci0KLWlubGluZSBib29sIEZp
bHRlckNvbnRleHRPcGVuQ0w6OmlzRmFpbGVkKGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
KQotICAgICAgICBzZXRJbkVycm9yKCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1pbmxpbmUg
Ym9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjppc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZChib29s
IHZhbHVlKQotewotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHNldEluRXJyb3IoKTsKLSAgICBy
ZXR1cm4gIXZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoT1BFTkNMKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFQ29sb3JNYXRyaXgu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmMzNGJkYjVlNGFhYzNiNGI3N2Qx
NTAyN2ZjMzYzOGJkMjU2ZjdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3Bl
bkNMRkVDb2xvck1hdHJpeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0
IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
RklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKLSNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCi0K
LSNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotI2RlZmluZSBDT0xPUl9NQVRSSVhfS0VSTkVMKC4uLikgXAotICAgICAgICBpbnQyIHNvdXJj
ZUNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeCwgZ2V0X2dsb2JhbF9pZCgxKSAr
IHkpOyBcCi0gICAgICAgIGZsb2F0NCBzb3VyY2VQaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwg
c2FtcGxlciwgc291cmNlQ29vcmQpOyBcCi0gICAgICAgIGZsb2F0NCBkZXN0aW5hdGlvblBpeGVs
ID0gKGZsb2F0NCkgKF9fVkFfQVJHU19fKTsgXAotICAgICAgICB3cml0ZV9pbWFnZWYoZGVzdGlu
YXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3Rp
bmF0aW9uUGl4ZWwpOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29sb3JNYXRyaXhLZXJuZWxQcm9n
cmFtID0KLVBST0dSQU0oCi1jb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19OT1JNQUxJWkVE
X0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QX1RPX0VER0UgfCBDTEtfRklMVEVSX05F
QVJFU1Q7Ci0KLV9fa2VybmVsIHZvaWQgbWF0cml4KF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVz
dGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsIGZsb2F0IHgsIGZsb2F0IHks
IF9fY29uc3RhbnQgZmxvYXQgKnZhbHVlcykKLXsKLSAgICBDT0xPUl9NQVRSSVhfS0VSTkVMKHZh
bHVlc1swXSAqIHNvdXJjZVBpeGVsLnggKyB2YWx1ZXNbMV0gKiBzb3VyY2VQaXhlbC55ICsgdmFs
dWVzWzJdICogc291cmNlUGl4ZWwueiArIHZhbHVlc1szXSAqIHNvdXJjZVBpeGVsLncgKyB2YWx1
ZXNbNF0sCi0gICAgICAgIHZhbHVlc1s1XSAqIHNvdXJjZVBpeGVsLnggKyB2YWx1ZXNbNl0gKiBz
b3VyY2VQaXhlbC55ICsgdmFsdWVzWzddICogc291cmNlUGl4ZWwueiArIHZhbHVlc1s4XSAqIHNv
dXJjZVBpeGVsLncgKyB2YWx1ZXNbOV0sCi0gICAgICAgIHZhbHVlc1sxMF0gKiBzb3VyY2VQaXhl
bC54ICsgdmFsdWVzWzExXSAqIHNvdXJjZVBpeGVsLnkgKyB2YWx1ZXNbMTJdICogc291cmNlUGl4
ZWwueiArIHZhbHVlc1sxM10gKiBzb3VyY2VQaXhlbC53ICsgdmFsdWVzWzE0XSwKLSAgICAgICAg
dmFsdWVzWzE1XSAqIHNvdXJjZVBpeGVsLnggKyB2YWx1ZXNbMTZdICogc291cmNlUGl4ZWwueSAr
IHZhbHVlc1sxN10gKiBzb3VyY2VQaXhlbC56ICsgdmFsdWVzWzE4XSAqIHNvdXJjZVBpeGVsLncg
KyB2YWx1ZXNbMTldKQotfQotCi1fX2tlcm5lbCB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKF9f
d3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBz
b3VyY2UsIGZsb2F0IHgsIGZsb2F0IHksIF9fY29uc3RhbnQgZmxvYXQgKmNvbXBvbmVudHMpCi17
Ci0gICAgQ09MT1JfTUFUUklYX0tFUk5FTChzb3VyY2VQaXhlbC54ICogY29tcG9uZW50c1swXSAr
IHNvdXJjZVBpeGVsLnkgKiBjb21wb25lbnRzWzFdICsgc291cmNlUGl4ZWwueiAqIGNvbXBvbmVu
dHNbMl0sCi0gICAgICAgIHNvdXJjZVBpeGVsLnggKiBjb21wb25lbnRzWzNdICsgc291cmNlUGl4
ZWwueSAqIGNvbXBvbmVudHNbNF0gKyBzb3VyY2VQaXhlbC56ICogY29tcG9uZW50c1s1XSwKLSAg
ICAgICAgc291cmNlUGl4ZWwueCAqIGNvbXBvbmVudHNbNl0gKyBzb3VyY2VQaXhlbC55ICogY29t
cG9uZW50c1s3XSArIHNvdXJjZVBpeGVsLnogKiBjb21wb25lbnRzWzhdLAotICAgICAgICBzb3Vy
Y2VQaXhlbC53KQotfQotCi1fX2tlcm5lbCB2b2lkIGx1bWluYW5jZShfX3dyaXRlX29ubHkgaW1h
Z2UyZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLCBmbG9hdCB4
LCBmbG9hdCB5KQotewotICAgIENPTE9SX01BVFJJWF9LRVJORUwoMCwgMCwgMCwgMC4yMTI1ICog
c291cmNlUGl4ZWwueCArIDAuNzE1NCAqIHNvdXJjZVBpeGVsLnkgKyAwLjA3MjEgKiBzb3VyY2VQ
aXhlbC56KQotfQotKTsgLy8gRW5kIG9mIE9wZW5DTCBrZXJuZWxzCi0KLWlubGluZSBib29sIEZp
bHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVGRUNvbG9yTWF0cml4KCkKLXsKLSAgICBpZiAobV9j
b2xvck1hdHJpeFdhc0NvbXBpbGVkIHx8IGluRXJyb3IoKSkKLSAgICAgICAgcmV0dXJuICFpbkVy
cm9yKCk7Ci0KLSAgICBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQgPSB0cnVlOwotCi0gICAgaWYg
KGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX2NvbG9yTWF0cml4UHJvZ3JhbSA9IGNvbXBp
bGVQcm9ncmFtKGNvbG9yTWF0cml4S2VybmVsUHJvZ3JhbSkpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9tYXRyaXhPcGVyYXRp
b24gPSBrZXJuZWxCeU5hbWUobV9jb2xvck1hdHJpeFByb2dyYW0sICJtYXRyaXgiKSkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKCht
X3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1fY29sb3JNYXRy
aXhQcm9ncmFtLCAic2F0dXJhdGVBbmRIdWVSb3RhdGUiKSkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX3NhdHVyYXRlQW5kSHVl
Um90YXRlT3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1fY29sb3JNYXRyaXhQcm9ncmFtLCAic2F0
dXJhdGVBbmRIdWVSb3RhdGUiKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlz
UmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX2x1bWluYW5jZU9wZXJhdGlvbiA9IGtlcm5lbEJ5
TmFtZShtX2NvbG9yTWF0cml4UHJvZ3JhbSwgImx1bWluYW5jZSIpKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4
dE9wZW5DTDo6YXBwbHlGRUNvbG9yTWF0cml4KE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwgSW50
U2l6ZSBkZXN0aW5hdGlvblNpemUsIE9wZW5DTEhhbmRsZSBzb3VyY2UsIEludFBvaW50IHJlbGF0
aXZlU291cmNlTG9jYXRpb24sIGZsb2F0KiB2YWx1ZXMsIGludCB0eXBlKQotewotICAgIGNsX2tl
cm5lbCBjb2xvck1hdHJpeDsKLSAgICBPcGVuQ0xIYW5kbGUgY2xWYWx1ZXM7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAg
IGNvbG9yTWF0cml4ID0gbV9tYXRyaXhPcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjb2xvck1hdHJpeCA9IG1f
c2F0dXJhdGVBbmRIdWVSb3RhdGVPcGVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgY29sb3JNYXRyaXggPSBtX3Nh
dHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBjb2xvck1hdHJpeCA9
IG1fbHVtaW5hbmNlT3BlcmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFJ1bktlcm5lbCBrZXJuZWwodGhpcywgY29sb3JNYXRyaXgsIGRlc3RpbmF0aW9uU2l6ZS53aWR0
aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChk
ZXN0aW5hdGlvbik7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZSk7Ci0gICAga2VybmVs
LmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlTG9jYXRpb24ueCgpKTsKLSAgICBrZXJuZWwuYWRk
QXJndW1lbnQocmVsYXRpdmVTb3VyY2VMb2NhdGlvbi55KCkpOwotICAgIGlmICh0eXBlID09IEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpCi0gICAgICAgIGNsVmFsdWVzID0ga2VybmVsLmFkZEFy
Z3VtZW50KHZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDIwKTsKLSAgICBlbHNlIGlmICh0eXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSB8fCB0eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEUpCi0gICAgICAgIGNsVmFsdWVzID0ga2VybmVsLmFkZEFyZ3VtZW50KHZhbHVl
cywgc2l6ZW9mKGZsb2F0KSAqIDkpOwotICAgIGtlcm5lbC5ydW4oKTsKLQotICAgIGNsVmFsdWVz
LmNsZWFyKCk7Ci19Ci0KLWJvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseU9wZW5DTCgp
Ci17Ci0gICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVu
Q0w6OmNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghY29udGV4dC0+Y29tcGlsZUZFQ29sb3JNYXRyaXgoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
T3BlbkNMSGFuZGxlIHNvdXJjZSA9IGluLT5vcGVuQ0xJbWFnZSgpOwotICAgIE9wZW5DTEhhbmRs
ZSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7Ci0KLSAgICBJbnRQb2lu
dCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uKAotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdCgpLngo
KSAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkueCgpLAotICAgICAgICBhYnNv
bHV0ZVBhaW50UmVjdCgpLnkoKSAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCku
eSgpKTsKLQotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgaWYgKEZFQ09MT1JNQVRSSVhf
VFlQRV9TQVRVUkFURSA9PSBtX3R5cGUpCi0gICAgICAgIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhjb21wb25lbnRzLCBtX3ZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoRkVDT0xPUk1BVFJJ
WF9UWVBFX0hVRVJPVEFURSA9PSBtX3R5cGUpCi0gICAgICAgIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoY29tcG9uZW50cywgbV92YWx1ZXNbMF0pOwotCi0gICAgY29udGV4dC0+YXBwbHlG
RUNvbG9yTWF0cml4KGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291
cmNlLCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLCAoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCA9
PSBtX3R5cGUpID8gbV92YWx1ZXMuZGF0YSgpIDogY29tcG9uZW50cywgbV90eXBlKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVGbG9vZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFRmxvb2QuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWYxZjY2NmRlMDcwMjk3YTlhYTViNjZh
NGRlNGFlMzY3Mjk4NzQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVGbG9vZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
VGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUoRklMVEVSUykgJiYg
RU5BQkxFKE9QRU5DTCkKLSNpbmNsdWRlICJGRUZsb29kLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJD
b250ZXh0T3BlbkNMLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBGRUZsb29kOjpw
bGF0Zm9ybUFwcGx5T3BlbkNMKCkKLXsKLSAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0
ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOwotCi0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY29udGV4dC0+aW5FcnJvcigpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNsX21lbSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5D
TEltYWdlUmVzdWx0KCk7Ci0KLSAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxw
aGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0KLSAgICBjb250ZXh0LT5m
aWxsKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgY29sb3IpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRUltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVJbWFnZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNmE4NjI3ZGQ1YWYzNTA3OWU3Y2Q5
OTZkMDliMTZmMDdhMmMwOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVu
Q0xGRUltYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZF
UlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmIEVOQUJMRShGSUxURVJTKSAm
JiBFTkFCTEUoT1BFTkNMKQotCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgotI2lu
Y2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlPcGVuQ0woKQotewotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwotICAg
IEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGFzSW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoc291
cmNlSW1hZ2UpIHsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFn
ZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7Ci0gICAgICAgIGNyZWF0ZU9w
ZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYjgwYzJhMDI5YTRmNTMzZmExYzU5ZjMxM2Yw
YTNjZGNiNmNlZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRU1l
cmdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGFt
YXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5B
QkxFKE9QRU5DTCkKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJDb250
ZXh0T3BlbkNMLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IG1lcmdlS2VybmVsUHJvZ3JhbSA9Ci1QUk9HUkFNKAotY29uc3Qgc2FtcGxlcl90IHNhbXBsZXIg
PSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFNUCB8IENMS19G
SUxURVJfTkVBUkVTVDsKLQotX19rZXJuZWwgdm9pZCBjb3B5KF9fd3JpdGVfb25seSBpbWFnZTJk
X3QgZGVzdGluYXRpb24sIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsIGludCB4LCBpbnQg
eSkKLXsKLSAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwg
c2FtcGxlciwgKGludDIpIChnZXRfZ2xvYmFsX2lkKDApICsgeCwgZ2V0X2dsb2JhbF9pZCgxKSAr
IHkpKTsKLSAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKSAoZ2V0X2dsb2JhbF9p
ZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIGRlc3RpbmF0aW9uUGl4ZWwpOwotfQotCi1fX2tlcm5l
bCB2b2lkIG1lcmdlKF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fcmVhZF9v
bmx5IGltYWdlMmRfdCBwcmV2aW91c0Rlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qg
c291cmNlQSwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUIsIGludCB4QSwgaW50IHlBLCBp
bnQgeEIsIGludCB5QikKLXsKLSAgICBpbnQyIGRlc3RpbmF0aW9uQ29vcmQgPSAoaW50MikgKGdl
dF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOwotICAgIGludDIgc291cmNlQ29vcmRB
ID0gKGludDIpIChkZXN0aW5hdGlvbkNvb3JkLnggKyB4QSwgZGVzdGluYXRpb25Db29yZC55ICsg
eUEpOwotICAgIGludDIgc291cmNlQ29vcmRCID0gKGludDIpIChkZXN0aW5hdGlvbkNvb3JkLngg
KyB4QiwgZGVzdGluYXRpb25Db29yZC55ICsgeUIpOwotICAgIGZsb2F0NCBkZXN0aW5hdGlvblBp
eGVsID0gcmVhZF9pbWFnZWYocHJldmlvdXNEZXN0aW5hdGlvbiwgc2FtcGxlciwgZGVzdGluYXRp
b25Db29yZCk7Ci0gICAgZmxvYXQ0IHNvdXJjZVBpeGVsQSA9IHJlYWRfaW1hZ2VmKHNvdXJjZUEs
IHNhbXBsZXIsIHNvdXJjZUNvb3JkQSk7Ci0gICAgZmxvYXQ0IHNvdXJjZVBpeGVsQiA9IHJlYWRf
aW1hZ2VmKHNvdXJjZUIsIHNhbXBsZXIsIHNvdXJjZUNvb3JkQik7Ci0KLSAgICBkZXN0aW5hdGlv
blBpeGVsID0gc291cmNlUGl4ZWxBICsgZGVzdGluYXRpb25QaXhlbCAqICgxIC0gc291cmNlUGl4
ZWxBLncpOwotICAgIGRlc3RpbmF0aW9uUGl4ZWwgPSBzb3VyY2VQaXhlbEIgKyBkZXN0aW5hdGlv
blBpeGVsICogKDEgLSBzb3VyY2VQaXhlbEIudyk7Ci0KLSAgICB3cml0ZV9pbWFnZWYoZGVzdGlu
YXRpb24sIGRlc3RpbmF0aW9uQ29vcmQsIGRlc3RpbmF0aW9uUGl4ZWwpOwotfQotKTsgLy8gRW5k
IG9mIE9wZW5DTCBrZXJuZWxzCi0KLWlubGluZSBib29sIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNv
bXBpbGVGRU1lcmdlKCkKLXsKLSAgICBpZiAobV9tZXJnZVdhc0NvbXBpbGVkIHx8IGluRXJyb3Io
KSkKLSAgICAgICAgcmV0dXJuICFpbkVycm9yKCk7Ci0KLSAgICBtX21lcmdlV2FzQ29tcGlsZWQg
PSB0cnVlOwotCi0gICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX21lcmdlUHJv
Z3JhbSA9IGNvbXBpbGVQcm9ncmFtKG1lcmdlS2VybmVsUHJvZ3JhbSkpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9tZXJnZUNv
cHlPcGVyYXRpb24gPSBrZXJuZWxCeU5hbWUobV9tZXJnZVByb2dyYW0sICJjb3B5IikpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgo
bV9tZXJnZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX21lcmdlUHJvZ3JhbSwgIm1lcmdlIikp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUg
dm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFTWVyZ2VDb3B5KE9wZW5DTEhhbmRsZSBk
ZXN0aW5hdGlvbiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIE9wZW5DTEhhbmRsZSBzb3VyY2Us
IEludFBvaW50JiByZWxhdGl2ZVNvdXJjZVBvaW50KQotewotICAgIFJ1bktlcm5lbCBrZXJuZWwo
dGhpcywgbV9tZXJnZUNvcHlPcGVyYXRpb24sIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0
aW5hdGlvblNpemUuaGVpZ2h0KCkpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlv
bik7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZSk7Ci0gICAga2VybmVsLmFkZEFyZ3Vt
ZW50KHJlbGF0aXZlU291cmNlUG9pbnQueCgpKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVs
YXRpdmVTb3VyY2VQb2ludC55KCkpOwotICAgIGtlcm5lbC5ydW4oKTsKLX0KLQotaW5saW5lIHZv
aWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRU1lcmdlKE9wZW5DTEhhbmRsZSBkZXN0aW5h
dGlvbiwgT3BlbkNMSGFuZGxlIHByZXZpb3VzRGVzdGluYXRpb24sIE9wZW5DTEhhbmRsZSBzb3Vy
Y2VBLCBPcGVuQ0xIYW5kbGUgc291cmNlQiwgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIEludFBv
aW50JiByZWxhdGl2ZVNvdXJjZVBvaW50QSwgSW50UG9pbnQmIHJlbGF0aXZlU291cmNlUG9pbnRC
KQotewotICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV9tZXJnZU9wZXJhdGlvbiwgZGVzdGlu
YXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7Ci0gICAga2VybmVs
LmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocHJldmlv
dXNEZXN0aW5hdGlvbik7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZUEpOwotICAgIGtl
cm5lbC5hZGRBcmd1bWVudChzb3VyY2VCKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRp
dmVTb3VyY2VQb2ludEEueCgpKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3Vy
Y2VQb2ludEEueSgpKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VQb2lu
dEIueCgpKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQocmVsYXRpdmVTb3VyY2VQb2ludEIueSgp
KTsKLSAgICBrZXJuZWwucnVuKCk7Ci19Ci0KLWJvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseU9w
ZW5DTCgpCi17Ci0gICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNvbnRleHQtPmNvbXBpbGVGRU1lcmdlKCk7Ci0KLSAgICB1bnNpZ25lZCBz
aXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOwotCi0g
ICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoKTsK
LSAgICBPcGVuQ0xIYW5kbGUgc291cmNlQSA9IDA7Ci0gICAgT3BlbkNMSGFuZGxlIHNvdXJjZUIg
PSAwOwotICAgIEZpbHRlckVmZmVjdCogaW47Ci0KLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBpZiAo
c2l6ZSAmIDEpIHsKLSAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOwotICAgICAgICBzb3Vy
Y2VBID0gaW4tPm9wZW5DTEltYWdlKCk7Ci0gICAgICAgIEludFBvaW50IHJlbGF0aXZlU291cmNl
UG9pbnQoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgICAgIHJlbGF0
aXZlU291cmNlUG9pbnQuc2V0WChhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSAtIHJlbGF0aXZlU291
cmNlUG9pbnQueCgpKTsKLSAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludC5zZXRZKGFic29sdXRl
UGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VQb2ludC55KCkpOwotCi0gICAgICAgIGNv
bnRleHQtPmFwcGx5RkVNZXJnZUNvcHkoZGVzdGluYXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpLCBzb3VyY2VBLCByZWxhdGl2ZVNvdXJjZVBvaW50KTsKLSAgICAgICAgaWYgKHNpemUg
PT0gMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICBjb250
ZXh0LT5maWxsKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgQ29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC4wZikpOwotCi0gICAgT3BlbkNMSGFuZGxlIHByZXZpb3VzRGVz
dGluYXRpb24gPSBjb250ZXh0LT5jcmVhdGVPcGVuQ0xJbWFnZShhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSk7Ci0KLSAgICB3aGlsZSAoaSA8IHNpemUpIHsKLSAgICAgICAgT3BlbkNMSGFuZGxl
IHRlbXAgPSBwcmV2aW91c0Rlc3RpbmF0aW9uOwotICAgICAgICBwcmV2aW91c0Rlc3RpbmF0aW9u
ID0gZGVzdGluYXRpb247Ci0gICAgICAgIGRlc3RpbmF0aW9uID0gdGVtcDsKLQotICAgICAgICBp
biA9IGlucHV0RWZmZWN0KGkrKyk7Ci0gICAgICAgIHNvdXJjZUEgPSBpbi0+b3BlbkNMSW1hZ2Uo
KTsKLSAgICAgICAgSW50UG9pbnQgcmVsYXRpdmVTb3VyY2VQb2ludEEoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKSk7Ci0gICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRBLnNldFgo
YWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50QS54KCkpOwotICAg
ICAgICByZWxhdGl2ZVNvdXJjZVBvaW50QS5zZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0g
cmVsYXRpdmVTb3VyY2VQb2ludEEueSgpKTsKLQotICAgICAgICBpbiA9IGlucHV0RWZmZWN0KGkr
Kyk7Ci0gICAgICAgIHNvdXJjZUIgPSBpbi0+b3BlbkNMSW1hZ2UoKTsKLSAgICAgICAgSW50UG9p
bnQgcmVsYXRpdmVTb3VyY2VQb2ludEIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24o
KSk7Ci0gICAgICAgIHJlbGF0aXZlU291cmNlUG9pbnRCLnNldFgoYWJzb2x1dGVQYWludFJlY3Qo
KS54KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50Qi54KCkpOwotICAgICAgICByZWxhdGl2ZVNvdXJj
ZVBvaW50Qi5zZXRZKGFic29sdXRlUGFpbnRSZWN0KCkueSgpIC0gcmVsYXRpdmVTb3VyY2VQb2lu
dEIueSgpKTsKLQotICAgICAgICBjb250ZXh0LT5hcHBseUZFTWVyZ2UoZGVzdGluYXRpb24sIHBy
ZXZpb3VzRGVzdGluYXRpb24sIHNvdXJjZUEsIHNvdXJjZUIsIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpLCByZWxhdGl2ZVNvdXJjZVBvaW50QSwgcmVsYXRpdmVTb3VyY2VQb2ludEIpOwotICAg
IH0KLSAgICBzZXRPcGVuQ0xJbWFnZShkZXN0aW5hdGlvbik7Ci0gICAgcHJldmlvdXNEZXN0aW5h
dGlvbi5jbGVhcigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVTb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhYjkzZDA3MmYwMmIzNjJlZWY2ZjE1MTlmYTMwZTE0NDAzZWJiMTM0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBp
bmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQotI2lu
Y2x1ZGUgIlNvdXJjZUFscGhhLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJG
aWx0ZXJDb250ZXh0T3BlbkNMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkK
LXsKLSAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5D
TDo6Y29udGV4dCgpOwotCi0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFn
ZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7Ci0gICAgY3JlYXRlT3BlbkNM
SW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykg
JiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlOWVmNzkyNGYyYTBmNzM2OWIwODYy
NWE3YjAwZTVkOTY3NGRkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEZFU291cmNlR3JhcGhpYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShG
SUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQotI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLQot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgU291
cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCi17Ci0gICAgRmlsdGVyQ29udGV4dE9w
ZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKLQotICAgIGlm
ICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gYXNJbWFnZUJ1ZmZlcigp
OwotICAgIGlmICghc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5p
bnRlcm5hbFNpemUoKSkpOwotICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdl
RGF0YS0+ZGF0YSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL09wZW5DTEZFVHVyYnVsZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ4Mjg0ZWJjMTEzNTJmNTQ1YjVlMWY3YWIzMWI1N2E0ZDhlOTc3MzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0
eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGlu
Zi51LXN6ZWdlZC5odT4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQotI2luY2x1
ZGUgIkZFVHVyYnVsZW5jZS5oIgotCi0jaW5jbHVkZSAiRkVUdXJidWxlbmNlLmNwcCIKLSNpbmNs
dWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHR1cmJ1bGVuY2VLZXJuZWxQ
cm9ncmFtID0KLVBST0dSQU0oCi1fX2NvbnN0YW50IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsK
LV9fY29uc3RhbnQgaW50IHNfYmxvY2tTaXplID0gMjU2OwotX19jb25zdGFudCBpbnQgc19ibG9j
a01hc2sgPSAyNTU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgbm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZTsKLSAgICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZTsKLX0gTm9p
c2U7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IHdyYXBYOwot
ICAgIGludCBoZWlnaHQ7Ci0gICAgaW50IHdyYXBZOwotfSBTdGl0Y2hEYXRhOwotCi1mbG9hdCBs
aW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0
dXJuIG1hZChiIC0gYSwgdCwgYSk7Ci19Ci0KLWZsb2F0IG5vaXNlMkQoX19jb25zdGFudCBmbG9h
dCAqY29tcG9uZW50LCBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBTdGl0Y2hEYXRh
IHN0aXRjaERhdGEsIGZsb2F0IG5vaXNlVmVjdG9yWCwgZmxvYXQgbm9pc2VWZWN0b3JZLCBpbnQg
c3RpdGNoVGlsZXMpCi17Ci0gICAgTm9pc2Ugbm9pc2VYOwotICAgIG5vaXNlWC5ub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlID0gKGludCkobm9pc2VWZWN0b3JYICsgc19wZXJsaW5Ob2lzZSk7Ci0g
ICAgbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWCArIHNf
cGVybGluTm9pc2UpIC0gbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0gICAgTm9p
c2Ugbm9pc2VZOwotICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID0gKGludCko
bm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSk7Ci0gICAgbm9pc2VZLm5vaXNlUG9zaXRpb25G
cmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWSArIHNfcGVybGluTm9pc2UpIC0gbm9pc2VZLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0KLSAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBs
YXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAoc3RpdGNoVGlsZXMpIHsKLSAgICAg
ICAgaWYgKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3Jh
cFgpCi0gICAgICAgICAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0
Y2hEYXRhLndpZHRoOwotICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgPj0gc3RpdGNoRGF0YS53cmFwWCAtIDEpCi0gICAgICAgICAgICBub2lzZVgubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3JhcFkpCi0gICAg
ICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLmhl
aWdodDsKLSAgICAgICAgaWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0
aXRjaERhdGEud3JhcFkgLSAxKQotICAgICAgICAgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQgLSAxOwotICAgIH0KLQotICAgIG5vaXNlWC5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5ub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOwotICAgIGludCBsYXR0aWNlSW5k
ZXggPSBsYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwot
ICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gbGF0dGljZVNlbGVjdG9yWyhub2lzZVgubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSArIDEpICYgc19ibG9ja01hc2tdOwotCi0gICAgZmxvYXQgc3gg
PSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lzZVgubm9pc2VQb3NpdGlv
bkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWUpOwotICAgIGZsb2F0IHN5ID0gbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICog
bm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogKDMgLSAyICogbm9pc2VZLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlKTsKLQotICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20g
U1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50LgotICAgIGludCB0ZW1wID0gbGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRl
eCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBmbG9hdCB1ID0gbm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyXSArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFd
OwotICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBmbG9hdCB2ID0gKG5vaXNlWC5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyXSArIG5vaXNlWS5u
b2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFdOwotICAg
IGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLSAgICB0ZW1wID0gbGF0
dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlICsgMV07Ci0gICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNv
bXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKLSAgICB0ZW1wID0gbGF0dGljZVNlbGVjdG9y
W25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFd
OwotICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBjb21w
b25lbnRbdGVtcCAqIDJdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEp
ICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07Ci0gICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9s
YXRpb24oc3gsIHUsIHYpOwotICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBi
KTsKLX0KLQotX19rZXJuZWwgdm9pZCBUdXJidWxlbmNlKF9fd3JpdGVfb25seSBpbWFnZTJkX3Qg
ZGVzdGluYXRpb24sIF9fY29uc3RhbnQgZmxvYXQgKnRyYW5zZm9ybSwgX19jb25zdGFudCBmbG9h
dCAqcmVkQ29tcG9uZW50LAotICAgIF9fY29uc3RhbnQgZmxvYXQgKmdyZWVuQ29tcG9uZW50LCBf
X2NvbnN0YW50IGZsb2F0ICpibHVlQ29tcG9uZW50LCBfX2NvbnN0YW50IGZsb2F0ICphbHBoYUNv
bXBvbmVudCwKLSAgICBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBfX3ByaXZhdGUg
aW50IG9mZnNldFgsIF9fcHJpdmF0ZSBpbnQgb2Zmc2V0WSwgX19wcml2YXRlIGludCB0aWxlV2lk
dGgsCi0gICAgX19wcml2YXRlIGludCB0aWxlSGVpZ2h0LCBfX3ByaXZhdGUgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgX19wcml2YXRlIGludCBz
dGl0Y2hUaWxlcywKLSAgICBfX3ByaXZhdGUgaW50IG51bU9jdGF2ZXMsIF9fcHJpdmF0ZSBpbnQg
dHlwZSwgX19wcml2YXRlIGludCBmaWx0ZXJfaGVpZ2h0KQotewotICAgIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YSA9IHsgMCwgMCwgMCwgMCB9OwotICAgIC8vIEFkanVzdCB0aGUgYmFzZSBmcmVxdWVu
Y2llcyBpZiBuZWNlc3NhcnkgZm9yIHN0aXRjaGluZy4KLSAgICBpZiAoc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5j
aWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAgICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJz
IHdpbGwgYmUgY29udGludW91cy4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAg
ICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcih0aWxlV2lkdGggKiBiYXNlRnJlcXVl
bmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2Vp
bCh0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICAv
LyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBz
dGFuZGFyZC4KLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gKGJhc2VGcmVxdWVuY3lYIC8g
bG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKSA/IGxvd0ZyZXF1
ZW5jeSA6IGhpZ2hGcmVxdWVuY3k7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVu
Y3lZKSB7Ci0gICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcih0aWxlSGVpZ2h0
ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGZsb2F0IGhpZ2hG
cmVxdWVuY3kgPSBjZWlsKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0
OwotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVx
dWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpID8gbG93RnJlcXVlbmN5IDog
aGlnaEZyZXF1ZW5jeTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZXQgdXAgVHVyYnVsZW5jZUlu
aXRpYWwgc3RpdGNoIHZhbHVlcy4KLSAgICAgICAgc3RpdGNoRGF0YS53aWR0aCA9IHJvdW5kKHRp
bGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IHNf
cGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAgICAgICBzdGl0Y2hEYXRhLmhlaWdo
dCA9IHJvdW5kKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgICAgIHN0aXRjaERh
dGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0gICAgfQotICAg
IGZsb2F0NCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAoZmxvYXQ0KSgwLCAwLCAwLCAwKTsK
LSAgICBmbG9hdCB4ID0gKGdldF9nbG9iYWxfaWQoMCkgKyBvZmZzZXRYKSAqIGJhc2VGcmVxdWVu
Y3lYOwotICAgIGZsb2F0IHkgPSAoZ2V0X2dsb2JhbF9pZCgxKSArIG9mZnNldFkpICogYmFzZUZy
ZXF1ZW5jeVk7Ci0KLSAgICBmbG9hdCBub2lzZVZlY3RvclggPSB0cmFuc2Zvcm1bMF0gKiB4ICsg
dHJhbnNmb3JtWzJdICogeSArIHRyYW5zZm9ybVs0XTsKLSAgICBmbG9hdCBub2lzZVZlY3Rvclkg
PSB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XTsKLQot
ICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBu
dW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBmbG9hdDQgbm9pc2UyRFJlc3VsdCA9IChm
bG9hdDQpKCBub2lzZTJEKHJlZENvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRh
LCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW8sCi0gICAg
bm9pc2UyRChncmVlbkNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lz
ZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW8sCi0gICAgbm9pc2Uy
RChibHVlQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9y
WCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywKLSAgICBub2lzZTJEKGFscGhh
Q29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9p
c2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbyk7Ci0KLSAgICAgICAgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICs9ICh0eXBlID09IDEpID8gbm9pc2UyRFJlc3VsdCA6IGZhYnMobm9pc2Uy
RFJlc3VsdCk7Ci0KLSAgICAgICAgbm9pc2VWZWN0b3JYICo9IDI7Ci0gICAgICAgIG5vaXNlVmVj
dG9yWSAqPSAyOwotICAgICAgICByYXRpbyAqPSAyOwotICAgICAgICBpZiAoc3RpdGNoVGlsZXMp
IHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Bl
cmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotICAgICAgICAgICAg
Ly8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2Uu
Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hE
YXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOwotICAgICAg
ICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3Jh
cFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAodHlwZSA9PSAxKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgPSBtYWQoMC41ZiwgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAwLjVmKTsKLSAgICAvLyBD
bGFtcCByZXN1bHQuCi0gICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gY2xhbXAodHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0LCAwLjBmLCAxLjBmKTsKLQotICAgIHdyaXRlX2ltYWdlZihkZXN0
aW5hdGlvbiwgKGludDIpKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQpOwotfQotKTsgLy8gRW5kIG9mIE9wZW5DTCBrZXJuZWxzCi0K
LWlubGluZSBib29sIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVGRVR1cmJ1bGVuY2UoKQot
ewotICAgIGlmIChtX3R1cmJ1bGVuY2VXYXNDb21waWxlZCB8fCBpbkVycm9yKCkpCi0gICAgICAg
IHJldHVybiAhaW5FcnJvcigpOwotCi0gICAgbV90dXJidWxlbmNlV2FzQ29tcGlsZWQgPSB0cnVl
OwotCi0gICAgaWYgKGlzUmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX3R1cmJ1bGVuY2VQcm9n
cmFtID0gY29tcGlsZVByb2dyYW0odHVyYnVsZW5jZUtlcm5lbFByb2dyYW0pKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fdHVy
YnVsZW5jZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX3R1cmJ1bGVuY2VQcm9ncmFtLCAiVHVy
YnVsZW5jZSIpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRVR1cmJ1bGVuY2UoT3Bl
bkNMSGFuZGxlIGRlc3RpbmF0aW9uLAotICAgIEludFNpemUgZGVzdGluYXRpb25TaXplLCBpbnQg
dG90YWxCbG9ja1NpemUsCi0gICAgdm9pZCogdHJhbnNmb3JtLCB2b2lkKiByZWRDb21wb25lbnQs
IHZvaWQqIGdyZWVuQ29tcG9uZW50LAotICAgIHZvaWQqIGJsdWVDb21wb25lbnQsIHZvaWQqIGFs
cGhhQ29tcG9uZW50LAotICAgIGludCogbGF0dGljZVNlbGVjdG9yLCBpbnQgb2Zmc2V0WCwgaW50
IG9mZnNldFksIGludCB0aWxlV2lkdGgsIGludCB0aWxlSGVpZ2h0LAotICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcywgaW50IG51
bU9jdGF2ZXMsIGludCB0eXBlKQotewotICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV90dXJi
dWxlbmNlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXpl
LmhlaWdodCgpKTsKLQotICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7Ci0gICAg
T3BlbkNMSGFuZGxlIHRyYW5zZm9ybUhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQodHJhbnNmb3Jt
LCBzaXplb2YoZmxvYXQpICogNikpOwotICAgIE9wZW5DTEhhbmRsZSByZWRDb21wb25lbnRIYW5k
bGUoa2VybmVsLmFkZEFyZ3VtZW50KHJlZENvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqIHRvdGFs
QmxvY2tTaXplICogMikpOwotICAgIE9wZW5DTEhhbmRsZSBncmVlbkNvbXBvbmVudEhhbmRsZShr
ZXJuZWwuYWRkQXJndW1lbnQoZ3JlZW5Db21wb25lbnQsIHNpemVvZihmbG9hdCkgKiB0b3RhbEJs
b2NrU2l6ZSAqIDIpKTsKLSAgICBPcGVuQ0xIYW5kbGUgYmx1ZUNvbXBvbmVudEhhbmRsZShrZXJu
ZWwuYWRkQXJndW1lbnQoYmx1ZUNvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqIHRvdGFsQmxvY2tT
aXplICogMikpOwotICAgIE9wZW5DTEhhbmRsZSBhbHBoYUNvbXBvbmVudEhhbmRsZShrZXJuZWwu
YWRkQXJndW1lbnQoYWxwaGFDb21wb25lbnQsIHNpemVvZihmbG9hdCkgKiB0b3RhbEJsb2NrU2l6
ZSAqIDIpKTsKLSAgICBPcGVuQ0xIYW5kbGUgbGF0dGljZVNlbGVjdG9ySGFuZGxlKGtlcm5lbC5h
ZGRBcmd1bWVudChsYXR0aWNlU2VsZWN0b3IsIHNpemVvZihpbnQpICogdG90YWxCbG9ja1NpemUp
KTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQob2Zmc2V0WCk7Ci0gICAga2VybmVsLmFkZEFyZ3Vt
ZW50KG9mZnNldFkpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudCh0aWxlV2lkdGgpOwotICAgIGtl
cm5lbC5hZGRBcmd1bWVudCh0aWxlSGVpZ2h0KTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQoYmFz
ZUZyZXF1ZW5jeVgpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChiYXNlRnJlcXVlbmN5WSk7Ci0g
ICAga2VybmVsLmFkZEFyZ3VtZW50KHN0aXRjaFRpbGVzKTsKLSAgICBrZXJuZWwuYWRkQXJndW1l
bnQobnVtT2N0YXZlcyk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHR5cGUpOwotICAgIGtlcm5l
bC5hZGRBcmd1bWVudChkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOwotCi0gICAga2VybmVsLnJ1
bigpOwotCi0gICAgdHJhbnNmb3JtSGFuZGxlLmNsZWFyKCk7Ci0gICAgcmVkQ29tcG9uZW50SGFu
ZGxlLmNsZWFyKCk7Ci0gICAgZ3JlZW5Db21wb25lbnRIYW5kbGUuY2xlYXIoKTsKLSAgICBibHVl
Q29tcG9uZW50SGFuZGxlLmNsZWFyKCk7Ci0gICAgYWxwaGFDb21wb25lbnRIYW5kbGUuY2xlYXIo
KTsKLSAgICBsYXR0aWNlU2VsZWN0b3JIYW5kbGUuY2xlYXIoKTsKLX0KLQotYm9vbCBGRVR1cmJ1
bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQotewotICAgIEZpbHRlckNvbnRleHRPcGVuQ0wq
IGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvbnRleHQtPmNvbXBpbGVG
RVR1cmJ1bGVuY2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBPcGVuQ0xIYW5kbGUg
ZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOwotCi0gICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpLnNpemUoKSkpOwotICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGludmVydGVkVHJhbnNmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxTVkdG
aWx0ZXIqPihmaWx0ZXIoKSktPmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOwotICAgIGZs
b2F0IHRyYW5zZm9ybUNvbXBvbmVudHNbNl0gPSB7IGludmVydGVkVHJhbnNmb3JtLmEoKSwgaW52
ZXJ0ZWRUcmFuc2Zvcm0uYigpLCBpbnZlcnRlZFRyYW5zZm9ybS5jKCksIGludmVydGVkVHJhbnNm
b3JtLmQoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5mKCkgfTsK
LQotICAgIGNvbnRleHQtPmFwcGx5RkVUdXJidWxlbmNlKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSwgMiAqIHNfYmxvY2tTaXplICsgMiwgdHJhbnNmb3JtQ29tcG9uZW50
cywgcGFpbnRpbmdEYXRhLmdyYWRpZW50LAotICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnQg
KyAxLCBwYWludGluZ0RhdGEuZ3JhZGllbnQgKyAyLCBwYWludGluZ0RhdGEuZ3JhZGllbnQgKyAz
LCBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yLAotICAgICAgICBhYnNvbHV0ZVBhaW50UmVj
dCgpLngoKSwgYWJzb2x1dGVQYWludFJlY3QoKS55KCksIHBhaW50aW5nRGF0YS5maWx0ZXJTaXpl
LndpZHRoKCksIHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLmhlaWdodCgpLAotICAgICAgICBtX2Jh
c2VGcmVxdWVuY3lYLCBtX2Jhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzLCBtX251bU9jdGF2
ZXMsIG1fdHlwZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9P
cGVuQ0xIYW5kbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3NWI5NGUzZmU0
YjlkYmI3NWY4MTI5ZDA3N2Y5MzU4MjhiNjUxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL09wZW5DTEhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0
IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotI2lmIEVOQUJMRShPUEVOQ0wpCi0KLSNpZm5kZWYgT3BlbkNM
SGFuZGxlX2gKLSNkZWZpbmUgT3BlbkNMSGFuZGxlX2gKLQotI2luY2x1ZGUgIkNML2NsLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgT3BlbkNMSGFuZGxlIHsKLXB1YmxpYzoKLSAg
ICBPcGVuQ0xIYW5kbGUoKSA6IG1fb3BlbkNMTWVtb3J5KDApIHsgfQotICAgIE9wZW5DTEhhbmRs
ZShjbF9tZW0gb3BlbkNMTWVtb3J5KSA6IG1fb3BlbkNMTWVtb3J5KG9wZW5DTE1lbW9yeSkgeyB9
Ci0KLSAgICBvcGVyYXRvciBjbF9tZW0oKSB7IHJldHVybiBtX29wZW5DTE1lbW9yeTsgfQotCi0g
ICAgdm9pZCBvcGVyYXRvcj0oT3BlbkNMSGFuZGxlIG9wZW5DTE1lbW9yeSkgeyBtX29wZW5DTE1l
bW9yeSA9IG9wZW5DTE1lbW9yeTsgfQotCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9y
IGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRl
Z2VyIHR5cGVzLgotICAgIHR5cGVkZWYgY2xfbWVtIChPcGVuQ0xIYW5kbGU6OipVbnNwZWNpZmll
ZEJvb2xUeXBlKTsKLSAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGVuQ0xNZW1vcnkgPyAmT3BlbkNMSGFuZGxlOjptX29wZW5DTE1lbW9yeSA6IDA7
IH0KLQotICAgIHZvaWQqIGhhbmRsZUFkZHJlc3MoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPigmbV9vcGVuQ0xNZW1vcnkpOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX29wZW5DTE1lbW9yeSkKLSAgICAgICAgICAgIGNsUmVsZWFzZU1lbU9iamVj
dChtX29wZW5DTE1lbW9yeSk7Ci0gICAgICAgIG1fb3BlbkNMTWVtb3J5ID0gMDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgY2xfbWVtIG1fb3BlbkNMTWVtb3J5OwotfTsKLQotfQotCi0jZW5kaWYK
LSNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233374</attachid>
            <date>2014-06-19 12:54:38 -0700</date>
            <delta_ts>2014-06-20 14:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134065-20140619125416.patch</filename>
            <type>text/plain</type>
            <size>186897</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjlhZGE5NDFhYWJmMjE0
YjJiM2JiMWFlY2Y5NWYyMTE0NWFjYjdiNC4uYzVhMzE5ZjVkN2U5NDIwM2RmMzljNWFhMTExNjY5
MDg3NTAwMjEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE0LTA2LTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zpbmcg
ZGVhZCBjb2RlIGluIHBsYXRmb3JtL2dyYXBoaWNzL2dwdQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMg
bm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25z
dGFudHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aENh
Y2hlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uUGF0aENhY2hlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNo
YWRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5UZXh0dXJlQ29vcmRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVDb2xvck1hdHJpeC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRUZsb29k
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09w
ZW5DTEZFSW1hZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlR3JhcGhp
Yy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9P
cGVuQ0xGRVR1cmJ1bGVuY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmg6IFJlbW92ZWQuCisKIDIwMTQtMDYtMTggIFph
biBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2ssIEZpbGVUaHJlYWQ6OlRhc2sgcGFyYW1ldGVycyBzaG91bGQgYmUg
dmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agppbmRleCAxOTU1YWVjNDI2MmE5NDlmN2NlZjNiZmQ2YzIyNzliODBlYTBhNzQwLi40NmM0YmNl
Nzg4YzUyMWZkZTg0ODM4YzI3NDNkY2Q4YmU4ZjNlY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTcyNjYsMTUgKzcyNjYsNiBAQAog
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZWdsXEdMQ29udGV4dEVHTC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xncHVcRHJhd2luZ0J1ZmZlci5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uQ2xhc3NpZmll
ci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xn
cHVcTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubk1hdGhVdGlscy5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJs
aW5uUGF0aENhY2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGdwdVxMb29wQmxpbm5TaGFkZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublNvbGlkRmlsbFNoYWRlci5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
TG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xncHVcU2hhZGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
VGV4dHVyZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xncHVcVGlsaW5nRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGb3JtYXRDb252ZXJ0ZXIuY3BwIiAvPgpAQCAtMTkxODAsMTcgKzE5
MTcxLDYgQEAKICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGVnbFxHTENvbnRleHRFR0wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxEcmF3aW5nQnVmZmVyLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uQ2xh
c3NpZmllci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1XExvb3BCbGlubkNvbnN0YW50cy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJs
aW5uTWF0aFV0aWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xncHVcTG9vcEJsaW5uUGF0aENhY2hlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BC
bGlublNoYWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZ3B1XExvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublRleHR1cmVDb29yZHMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxT
aGFkZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGdwdVxTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFRleHR1cmUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxUaWxpbmdEYXRhLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb3JtYXRDb252ZXJ0ZXIu
aCIgLz4KQEAgLTIxMTk1LDQgKzIxMTc1LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRl
bnNpb25UYXJnZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVp
bGRDdXN0b21pemF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1By
b2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
CmluZGV4IDhhNDlhMzVkMmM5NTY2MGZlNWMxMDY5N2M1MDJhN2I4NjQ2NGQzYTEuLjJiYzYyMDU3
ZjNkNzY5N2QwYmI2Mzc3NDQzMTkwMmFhMGFkZTc3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY2NzAs
MzMgKzY2NzAsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1XERyYXdpbmdCdWZmZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhp
Y3NcZ3B1PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAiPgotICAg
ICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29w
Qmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFw
aGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5NYXRoVXRpbHMuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9v
cEJsaW5uUGF0aENhY2hlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdw
dTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublNoYWRlci5jcHAiPgotICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Tb2xp
ZEZpbGxTaGFkZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAiPgotICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFkZXIuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xn
cHVcU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcVGV4dHVyZS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAg
LTE0NTI0LDM5ICsxNDQ5Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xncHVcRHJhd2luZ0J1ZmZlci5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uQ2xhc3NpZmllci5oIj4K
LSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVc
TG9vcEJsaW5uQ29uc3RhbnRzLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xn
cHU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oIj4KLSAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9v
cEJsaW5uTWF0aFV0aWxzLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGdwdVxMb29wQmxpbm5QYXRoQ2FjaGUuaCI+Ci0gICAgICA8RmlsdGVy
PnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XExvb3BCbGlublBhdGhQ
cm9jZXNzb3IuaCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1XExvb3BCbGlublNoYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
Z3JhcGhpY3NcZ3B1PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xncHVcTG9vcEJsaW5uU29saWRGaWxsU2hhZGVy
LmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGdwdVxMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxn
cmFwaGljc1xncHU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGdwdVxTaGFkZXIuaCI+Ci0gICAgICA8RmlsdGVy
PnBsYXRmb3JtXGdyYXBoaWNzXGdwdTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZ3B1XFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xncHU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGdwdVxUZXh0dXJlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGlj
c1xncHU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTE1MjMyLDQgKzE1MTcyLDQgQEAK
ICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0
ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2pl
Y3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggYmRkZGYxYzI0MTc1ZDYzZDEwODE4ZmMyZDNhMDEwYWQ0ZDgwMDI4Mi4uNjEzYTVk
MGI0ZDI1YzAwOTlhOTAxOGFiZTJmMDZmYTI0MWRhNjc0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODY0NCw3ICs4NjQ0LDYg
QEAKIAkJNDk4MzkxNTcwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDk4NzcwQzIxMjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRHJhd2luZ0J1ZmZlci5j
cHA7IHBhdGggPSBncHUvRHJhd2luZ0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5ODc3MEMzMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYXdpbmdCdWZmZXIuaDsgcGF0aCA9IGdwdS9E
cmF3aW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5ODc3MEQwMTI0
MkM1MzUwMDIyMjZCQSAvKiBTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU2hhZGVyLmg7IHBhdGggPSBncHUvU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5ODc3MEQ3MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRleHR1cmUuY3BwOyBwYXRoID0gZ3B1L1RleHR1
cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTg3NzBEODEyNDJDNTM1MDAy
MjI2QkEgLyogVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUZXh0
dXJlLmg7IHBhdGggPSBncHUvVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OTg3NzBEOTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUaWxpbmdEYXRhLmNwcDsgcGF0aCA9IGdwdS9UaWxp
bmdEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyYjRkNzNhYTZiYTMzOTBhNGUz
ZDM3YTcxY2E0MzJhMWI3N2YzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
Q2xhc3NpZmllci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0K
LSNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5N
YXRoVXRpbHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBMb29wQmxpbm5NYXRo
VXRpbHM6OmFwcHJveEVxdWFsOwotdXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpyb3VuZFRvWmVy
bzsKLQotTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0IExvb3BCbGlubkNsYXNzaWZpZXI6OmNs
YXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMzKQotewotICAgIC8vIENv
bnN1bHQgdGhlIGNoYXB0ZXIgZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZm9sbG93aW5nCi0g
ICAgLy8gKHRlcnNlKSB2YXJpYWJsZSBuYW1lcy4gTm90ZSB0aGF0IHRoZSBiMC4uYjMgY29vcmRp
bmF0ZXMgYXJlCi0gICAgLy8gaG9tb2dlbmVvdXMsIHNvIHRoZSAieiIgdmFsdWUgKGFjdHVhbGx5
IHRoZSB3IGNvb3JkaW5hdGUpIG11c3QKLSAgICAvLyBiZSAxLjAuCi0gICAgRmxvYXRQb2ludDNE
IGIwKGMwLngoKSwgYzAueSgpLCAxLjBmKTsKLSAgICBGbG9hdFBvaW50M0QgYjEoYzEueCgpLCBj
MS55KCksIDEuMGYpOwotICAgIEZsb2F0UG9pbnQzRCBiMihjMi54KCksIGMyLnkoKSwgMS4wZik7
Ci0gICAgRmxvYXRQb2ludDNEIGIzKGMzLngoKSwgYzMueSgpLCAxLjBmKTsKLQotICAgIC8vIENv
bXB1dGUgYTEuLmEzLgotICAgIGZsb2F0IGExID0gYjAgKiBiMy5jcm9zcyhiMik7Ci0gICAgZmxv
YXQgYTIgPSBiMSAqIGIwLmNyb3NzKGIzKTsKLSAgICBmbG9hdCBhMyA9IGIyICogYjEuY3Jvc3Mo
YjApOwotCi0gICAgLy8gQ29tcHV0ZSBkMS4uZDMuCi0gICAgZmxvYXQgZDEgPSBhMSAtIDIgKiBh
MiArIDMgKiBhMzsKLSAgICBmbG9hdCBkMiA9IC1hMiArIDMgKiBhMzsKLSAgICBmbG9hdCBkMyA9
IDMgKiBhMzsKLQotICAgIC8vIEV4cGVyaW1lbnRhdGlvbiBoYXMgc2hvd24gdGhhdCB0aGUgdGV4
dHVyZSBjb29yZGluYXRlcyBjb21wdXRlZAotICAgIC8vIGZyb20gdGhlc2UgdmFsdWVzIHF1aWNr
bHkgYmVjb21lIGh1Z2UsIGxlYWRpbmcgdG8gcm91bmRvZmYgZXJyb3JzCi0gICAgLy8gYW5kIGFy
dGlmYWN0cyBpbiB0aGUgc2hhZGVyLiBJdCB0dXJucyBvdXQgdGhhdCBpZiB3ZSBub3JtYWxpemUK
LSAgICAvLyB0aGUgdmVjdG9yIGRlZmluZWQgYnkgKGQxLCBkMiwgZDMpLCB0aGlzIGZpeGVzIHRo
ZSBwcm9ibGVtIG9mIHRoZQotICAgIC8vIHRleHR1cmUgY29vcmRpbmF0ZXMgZ2V0dGluZyB0b28g
bGFyZ2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhlCi0gICAgLy8gY2xhc3NpZmljYXRpb24gcmVzdWx0
cy4KLSAgICBGbG9hdFBvaW50M0QgbmQoZDEsIGQyLCBkMyk7Ci0gICAgbmQubm9ybWFsaXplKCk7
Ci0gICAgZDEgPSBuZC54KCk7Ci0gICAgZDIgPSBuZC55KCk7Ci0gICAgZDMgPSBuZC56KCk7Ci0K
LSAgICAvLyBDb21wdXRlIHRoZSBkaXNjcmltaW5hbnQuCi0gICAgLy8gdGVybTAgaXMgYSBjb21t
b24gdGVybSBpbiB0aGUgY29tcHV0YXRpb24gd2hpY2ggaGVscHMgZGVjaWRlCi0gICAgLy8gd2hp
Y2ggd2F5IHRvIGNsYXNzaWZ5IHRoZSBjdXNwIGNhc2U6IGFzIHNlcnBlbnRpbmUgb3IgbG9vcC4K
LSAgICBmbG9hdCB0ZXJtMCA9ICgzICogZDIgKiBkMiAtIDQgKiBkMSAqIGQzKTsKLSAgICBmbG9h
dCBkaXNjcmltaW5hbnQgPSBkMSAqIGQxICogdGVybTA7Ci0KLSAgICAvLyBFeHBlcmltZW50YXRp
b24gaGFzIGFsc28gc2hvd24gdGhhdCB3aGVuIHRoZSBjbGFzc2lmaWNhdGlvbiBpcwotICAgIC8v
IG5lYXIgdGhlIGJvdW5kYXJ5IGJldHdlZW4gb25lIGN1cnZlIHR5cGUgYW5kIGFub3RoZXIsIHRo
ZSBzaGFkZXIKLSAgICAvLyBiZWNvbWVzIG51bWVyaWNhbGx5IHVuc3RhYmxlLCBwYXJ0aWN1bGFy
bHkgd2l0aCB0aGUgY3VzcCBjYXNlLgotICAgIC8vIENvcnJlY3QgZm9yIHRoaXMgYnkgcm91bmRp
bmcgZDEuLmQzIGFuZCB0aGUgZGlzY3JpbWluYW50IHRvIHplcm8KLSAgICAvLyB3aGVuIHRoZXkg
Z2V0IG5lYXIgaXQuCi0gICAgZDEgPSByb3VuZFRvWmVybyhkMSk7Ci0gICAgZDIgPSByb3VuZFRv
WmVybyhkMik7Ci0gICAgZDMgPSByb3VuZFRvWmVybyhkMyk7Ci0gICAgZGlzY3JpbWluYW50ID0g
cm91bmRUb1plcm8oZGlzY3JpbWluYW50KTsKLQotICAgIC8vIERvIHRoZSBjbGFzc2lmaWNhdGlv
bi4KLSAgICBpZiAoYXBwcm94RXF1YWwoYjAsIGIxKSAmJiBhcHByb3hFcXVhbChiMCwgYjIpICYm
IGFwcHJveEVxdWFsKGIwLCBiMykpCi0gICAgICAgIHJldHVybiBSZXN1bHQoa1BvaW50LCBkMSwg
ZDIsIGQzKTsKLQotICAgIGlmICghZGlzY3JpbWluYW50KSB7Ci0gICAgICAgIGlmICghZDEgJiYg
IWQyKSB7Ci0gICAgICAgICAgICBpZiAoIWQzKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXN1
bHQoa0xpbmUsIGQxLCBkMiwgZDMpOwotICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrUXVhZHJh
dGljLCBkMSwgZDIsIGQzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZDEpCi0gICAgICAg
ICAgICByZXR1cm4gUmVzdWx0KGtDdXNwLCBkMSwgZDIsIGQzKTsKLQotICAgICAgICAvLyBUaGlz
IGlzIHRoZSBib3VuZGFyeSBjYXNlIGRlc2NyaWJlZCBpbiBMb29wIGFuZCBCbGlubidzCi0gICAg
ICAgIC8vIFNJR0dSQVBIICcwNSBwYXBlciBvZiBhIGN1c3Agd2l0aCBpbmZsZWN0aW9uIGF0IGlu
ZmluaXR5LgotICAgICAgICAvLyBCZWNhdXNlIHRlcm0wIG1pZ2h0IG5vdCBiZSBleGFjdGx5IDAs
IHdlIGRlY2lkZSBiZXR3ZWVuIHVzaW5nCi0gICAgICAgIC8vIHRoZSBzZXJwZW50aW5lIGFuZCBs
b29wIGNhc2VzIGRlcGVuZGluZyBvbiBpdHMgc2lnbiB0byBhdm9pZAotICAgICAgICAvLyB0YWtp
bmcgdGhlIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gY29tcHV0aW5nIHRo
ZQotICAgICAgICAvLyBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICBpZiAodGVy
bTAgPCAwKQotICAgICAgICAgICAgcmV0dXJuIFJlc3VsdChrTG9vcCwgZDEsIGQyLCBkMyk7Ci0K
LSAgICAgICAgcmV0dXJuIFJlc3VsdChrU2VycGVudGluZSwgZDEsIGQyLCBkMyk7Ci0gICAgfQot
Ci0gICAgaWYgKGRpc2NyaW1pbmFudCA+IDApCi0gICAgICAgIHJldHVybiBSZXN1bHQoa1NlcnBl
bnRpbmUsIGQxLCBkMiwgZDMpOwotCi0gICAgLy8gZGlzY3JpbWluYW50IDwgMAotICAgIHJldHVy
biBSZXN1bHQoa0xvb3AsIGQxLCBkMiwgZDMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhiNzE4MWI0YmQwMzhkMmRlNjliMGQ1Y2FlNDgxNzJkYjRmODRjNzYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBDdWJpYyBjdXJ2ZSBjbGFzc2lmaWNhdGlvbiBhbGdvcml0
aG0gZnJvbSAiUmVuZGVyaW5nIFZlY3RvciBBcnQgb24KLS8vIHRoZSBHUFUiIGJ5IExvb3AgYW5k
IEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVyIDI1OgotLy8gaHR0cDovL2h0dHAuZGV2ZWxvcGVy
Lm52aWRpYS5jb20vR1BVR2VtczMvZ3B1Z2VtczNfY2gyNS5odG1sIC4KLQotI2lmbmRlZiBMb29w
Qmxpbm5DbGFzc2lmaWVyX2gKLSNkZWZpbmUgTG9vcEJsaW5uQ2xhc3NpZmllcl9oCi0KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
bG9hdFBvaW50OwotCi0vLyBDbGFzc2lmaWVzIGN1YmljIGN1cnZlcyBpbnRvIHNwZWNpZmljIHR5
cGVzLgotY2xhc3MgTG9vcEJsaW5uQ2xhc3NpZmllciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTG9vcEJsaW5uQ2xhc3NpZmllcik7Ci1wdWJsaWM6Ci0gICAgLy8gVGhlIHR5cGVzIG9mIGN1
YmljIGN1cnZlcy4KLSAgICBlbnVtIEN1cnZlVHlwZSB7Ci0gICAgICAgIGtTZXJwZW50aW5lLAot
ICAgICAgICBrQ3VzcCwKLSAgICAgICAga0xvb3AsCi0gICAgICAgIGtRdWFkcmF0aWMsCi0gICAg
ICAgIGtMaW5lLAotICAgICAgICBrUG9pbnQKLSAgICB9OwotCi0gICAgLy8gVGhlIHJlc3VsdCBv
ZiB0aGUgY2xhc3NpZmllci4KLSAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFJlc3VsdChDdXJ2ZVR5cGUgaW5wdXRDdXJ2ZVR5cGUsIGZsb2F0IGlucHV0RDEsIGZsb2F0
IGlucHV0RDIsIGZsb2F0IGlucHV0RDMpCi0gICAgICAgICAgICA6IGN1cnZlVHlwZShpbnB1dEN1
cnZlVHlwZSkKLSAgICAgICAgICAgICwgZDEoaW5wdXREMSkKLSAgICAgICAgICAgICwgZDIoaW5w
dXREMikKLSAgICAgICAgICAgICwgZDMoaW5wdXREMykgeyB9Ci0KLSAgICAgICAgQ3VydmVUeXBl
IGN1cnZlVHlwZTsKLQotICAgICAgICAvLyBUaGVzZSBhcmUgY29lZmZpY2llbnRzIHVzZWQgbGF0
ZXIgaW4gdGhlIGNvbXB1dGF0aW9uIG9mCi0gICAgICAgIC8vIHRleHR1cmUgY29vcmRpbmF0ZXMg
cGVyIHZlcnRleC4KLSAgICAgICAgZmxvYXQgZDE7Ci0gICAgICAgIGZsb2F0IGQyOwotICAgICAg
ICBmbG9hdCBkMzsKLSAgICB9OwotCi0gICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2ZW4gY3ViaWMg
YmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IGMwLCBlbmRpbmcKLSAgICAvLyBhdCBjMywgYW5kIGFm
ZmVjdGVkIGJ5IGNvbnRyb2wgcG9pbnRzIGMxIGFuZCBjMi4KLSAgICBzdGF0aWMgUmVzdWx0IGNs
YXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGMzKTsKLQotcHJpdmF0ZToKLSAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8g
YmUgaW5zdGFudGlhdGVkLgotICAgIExvb3BCbGlubkNsYXNzaWZpZXIoKSB7IH0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExvb3BCbGlubkNsYXNzaWZpZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlu
bkNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlubkNvbnN0YW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTk3ZDlmMzhh
Yzc0YTEwNGE1NjUwNjFjNDM1NzM4NzhmMTk0YWZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5Db25zdGFudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIExvb3BCbGlubkNvbnN0YW50c19oCi0jZGVmaW5lIExvb3BCbGlubkNvbnN0
YW50c19oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMb29wQmxpbm5Db25zdGFu
dHMgewotCi1lbnVtIEZpbGxTaWRlIHsKLSAgICBMZWZ0U2lkZSwKLSAgICBSaWdodFNpZGUKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIExvb3BCbGlubkNvbnN0YW50cwotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gTG9vcEJsaW5uQ29uc3RhbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9j
YWxUcmlhbmd1bGF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE3YTY3
MmYwMmM1ZmI3ZjY5YjExNjA4OWY0ZWQ5ODI5OWNiYTJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
ci5oIgotCi0jaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6
YXBwcm94RXF1YWw7Ci11c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmxpbmVzSW50ZXJzZWN0Owot
dXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpwb2ludEluVHJpYW5nbGU7Ci0KLWJvb2wgTG9vcEJs
aW5uTG9jYWxUcmlhbmd1bGF0b3I6OlRyaWFuZ2xlOjpjb250YWlucyhMb29wQmxpbm5Mb2NhbFRy
aWFuZ3VsYXRvcjo6VmVydGV4KiB2KQotewotICAgIHJldHVybiBpbmRleEZvclZlcnRleCh2KSA+
PSAwOwotfQotCi1Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VmVydGV4KiBMb29wQmxpbm5M
b2NhbFRyaWFuZ3VsYXRvcjo6VHJpYW5nbGU6Om5leHRWZXJ0ZXgoTG9vcEJsaW5uTG9jYWxUcmlh
bmd1bGF0b3I6OlZlcnRleCogY3VycmVudCwgYm9vbCB0cmF2ZXJzZUNvdW50ZXJDbG9ja3dpc2Up
Ci17Ci0gICAgaW50IGluZGV4ID0gaW5kZXhGb3JWZXJ0ZXgoY3VycmVudCk7Ci0gICAgQVNTRVJU
KGluZGV4ID49IDApOwotICAgIGlmICh0cmF2ZXJzZUNvdW50ZXJDbG9ja3dpc2UpCi0gICAgICAg
ICsraW5kZXg7Ci0gICAgZWxzZQotICAgICAgICAtLWluZGV4OwotICAgIGlmIChpbmRleCA8IDAp
Ci0gICAgICAgIGluZGV4ICs9IDM7Ci0gICAgZWxzZQotICAgICAgICBpbmRleCA9IGluZGV4ICUg
MzsKLSAgICByZXR1cm4gbV92ZXJ0aWNlc1tpbmRleF07Ci19Ci0KLWludCBMb29wQmxpbm5Mb2Nh
bFRyaWFuZ3VsYXRvcjo6VHJpYW5nbGU6OmluZGV4Rm9yVmVydGV4KExvb3BCbGlubkxvY2FsVHJp
YW5ndWxhdG9yOjpWZXJ0ZXgqIHZlcnRleCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7
ICsraSkKLSAgICAgICAgaWYgKG1fdmVydGljZXNbaV0gPT0gdmVydGV4KQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5n
dWxhdG9yOjpUcmlhbmdsZTo6bWFrZUNvdW50ZXJDbG9ja3dpc2UoKQotewotICAgIC8vIFBvc3Np
Ymx5IHN3YXBzIHR3byB2ZXJ0aWNlcyBzbyB0aGF0IHRoZSB0cmlhbmdsZSdzIHZlcnRpY2VzIGFy
ZQotICAgIC8vIGFsd2F5cyBzcGVjaWZpZWQgaW4gY291bnRlcmNsb2Nrd2lzZSBvcmRlci4gVGhp
cyBvcmRlcnMgdGhlCi0gICAgLy8gdmVydGljZXMgY2Fub25pY2FsbHkgd2hlbiB3YWxraW5nIHRo
ZSBpbnRlcmlvciBlZGdlcyBmcm9tIHRoZQotICAgIC8vIHN0YXJ0IHRvIHRoZSBlbmQgdmVydGV4
LgotICAgIEZsb2F0UG9pbnQzRCBwb2ludDAobV92ZXJ0aWNlc1swXS0+eHlDb29yZGluYXRlcygp
KTsKLSAgICBGbG9hdFBvaW50M0QgcG9pbnQxKG1fdmVydGljZXNbMV0tPnh5Q29vcmRpbmF0ZXMo
KSk7Ci0gICAgRmxvYXRQb2ludDNEIHBvaW50MihtX3ZlcnRpY2VzWzJdLT54eUNvb3JkaW5hdGVz
KCkpOwotICAgIEZsb2F0UG9pbnQzRCBjcm9zc1Byb2R1Y3QgPSAocG9pbnQxIC0gcG9pbnQwKS5j
cm9zcyhwb2ludDIgLSBwb2ludDApOwotICAgIGlmIChjcm9zc1Byb2R1Y3QueigpIDwgMCkKLSAg
ICAgICAgc3RkOjpzd2FwKG1fdmVydGljZXNbMV0sIG1fdmVydGljZXNbMl0pOwotfQotCi1Mb29w
Qmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IoKQotewot
ICAgIHJlc2V0KCk7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OnJlc2V0
KCkKLXsKLSAgICBtX251bWJlck9mVHJpYW5nbGVzID0gMDsKLSAgICBtX251bWJlck9mSW50ZXJp
b3JWZXJ0aWNlcyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAg
ICAgbV9pbnRlcmlvclZlcnRpY2VzW2ldID0gMDsKLSAgICAgICAgbV92ZXJ0aWNlc1tpXS5yZXNl
dEZsYWdzKCk7Ci0gICAgfQotfQotCi12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjp0
cmlhbmd1bGF0ZShJbnNpZGVFZGdlQ29tcHV0YXRpb24gY29tcHV0ZUluc2lkZUVkZ2VzLCBMb29w
Qmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpCi17Ci0gICAgdHJpYW5ndWxhdGVI
ZWxwZXIoc2lkZVRvRmlsbCk7Ci0KLSAgICBpZiAoY29tcHV0ZUluc2lkZUVkZ2VzID09IENvbXB1
dGVJbnNpZGVFZGdlcykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgd2hpY2ggdmVy
dGljZXMgZGVzY3JpYmUgdGhlIHBhdGggYWxvbmcgdGhlCi0gICAgICAgIC8vIGludGVyaW9yIHBv
cnRpb24gb2YgdGhlIHNoYXBlLCB0byBmZWVkIHRoZXNlIHZlcnRpY2VzIHRvIHRoZQotICAgICAg
ICAvLyBtb3JlIGdlbmVyYWwgdGVzc2VsbGF0aW9uIGFsZ29yaXRobS4gSXQgaXMgcG9zc2libGUg
dGhhdCB3ZQotICAgICAgICAvLyBjb3VsZCBkZXRlcm1pbmUgdGhpcyBkaXJlY3RseSB3aGlsZSBw
cm9kdWNpbmcgdHJpYW5nbGVzIGFib3ZlLgotICAgICAgICAvLyBIZXJlIHdlIHRyeSB0byBkbyBp
dCBnZW5lcmFsbHkganVzdCBieSBleGFtaW5pbmcgdGhlIHRyaWFuZ2xlcwotICAgICAgICAvLyB0
aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByb2R1Y2VkLiBXZSB3YWxrIGFyb3VuZCB0aGVtIGluIGEK
LSAgICAgICAgLy8gc3BlY2lmaWMgZGlyZWN0aW9uIGRldGVybWluZWQgYnkgd2hpY2ggc2lkZSBv
ZiB0aGUgY3VydmUgaXMKLSAgICAgICAgLy8gYmVpbmcgZmlsbGVkLiBXZSBpZ25vcmUgdGhlIGlu
dGVyaW9yIHZlcnRleCB1bmxlc3MgaXQgaXMgYWxzbwotICAgICAgICAvLyB0aGUgZW5kaW5nIHZl
cnRleCwgYW5kIHNraXAgdGhlIGVkZ2VzIHNoYXJlZCBiZXR3ZWVuIHR3bwotICAgICAgICAvLyB0
cmlhbmdsZXMuCi0gICAgICAgIFZlcnRleCogdiA9ICZtX3ZlcnRpY2VzWzBdOwotICAgICAgICBh
ZGRJbnRlcmlvclZlcnRleCh2KTsKLSAgICAgICAgaW50IG51bVN0ZXBzID0gMDsKLSAgICAgICAg
d2hpbGUgKCF2LT5lbmQoKSAmJiBudW1TdGVwcyA8IDQpIHsKLSAgICAgICAgICAgIC8vIEZpbmQg
dGhlIG5leHQgdmVydGV4IGFjY29yZGluZyB0byB0aGUgYWJvdmUgcnVsZXMKLSAgICAgICAgICAg
IGJvb2wgZ290TmV4dCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1iZXJPZlRyaWFuZ2xlcygpICYmICFnb3ROZXh0OyArK2kpIHsKLSAgICAgICAgICAgICAgICBU
cmlhbmdsZSogdHJpID0gZ2V0VHJpYW5nbGUoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyaS0+
Y29udGFpbnModikpIHsKLSAgICAgICAgICAgICAgICAgICAgVmVydGV4KiBuZXh0ID0gdHJpLT5u
ZXh0VmVydGV4KHYsIHNpZGVUb0ZpbGwgPT0gTG9vcEJsaW5uQ29uc3RhbnRzOjpSaWdodFNpZGUp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQtPm1hcmtlZCgpICYmICFpc1NoYXJlZEVk
Z2UodiwgbmV4dCkgJiYgKCFuZXh0LT5pbnRlcmlvcigpIHx8IG5leHQtPmVuZCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkSW50ZXJpb3JWZXJ0ZXgobmV4dCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2ID0gbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyZWFr
IG91dCBvZiBmb3IgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgZ290TmV4dCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICArK251bVN0ZXBzOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdi0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGFib3Zl
IGFsZ29yaXRobTsgYWRkIHRoZSBsYXN0Ci0gICAgICAgICAgICAvLyB2ZXJ0ZXggdG8gdGhlIGlu
dGVyaW9yIHZlcnRpY2VzIGFueXdheS4gKEZJWE1FOiBzaG91bGQgd2UKLSAgICAgICAgICAgIC8v
IGFkZCBhbiBhc3NlcnQgaGVyZSBhbmQgZG8gbW9yZSBleHRlbnNpdmUgdGVzdGluZz8pCi0gICAg
ICAgICAgICBhZGRJbnRlcmlvclZlcnRleCgmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OnRyaWFuZ3VsYXRlSGVs
cGVyKExvb3BCbGlubkNvbnN0YW50czo6RmlsbFNpZGUgc2lkZVRvRmlsbCkKLXsKLSAgICByZXNl
dCgpOwotCi0gICAgbV92ZXJ0aWNlc1szXS5zZXRFbmQodHJ1ZSk7Ci0KLSAgICAvLyBGaXJzdCB0
ZXN0IGZvciBkZWdlbmVyYXRlIGNhc2VzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KSB7Ci0gICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IDQ7ICsraikgewotICAgICAgICAg
ICAgaWYgKGFwcHJveEVxdWFsKG1fdmVydGljZXNbaV0ueHlDb29yZGluYXRlcygpLCBtX3ZlcnRp
Y2VzW2pdLnh5Q29vcmRpbmF0ZXMoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUd28gb2YgdGhl
IHZlcnRpY2VzIGFyZSBjb2luY2lkZW50LCBzbyB3ZSBjYW4gZWxpbWluYXRlIGF0Ci0gICAgICAg
ICAgICAgICAgLy8gbGVhc3Qgb25lIHRyaWFuZ2xlLiBXZSBtaWdodCBiZSBhYmxlIHRvIGVsaW1p
bmF0ZSB0aGUgb3RoZXIKLSAgICAgICAgICAgICAgICAvLyBhcyB3ZWxsLCBidXQgdGhpcyBzZWVt
cyBzdWZmaWNpZW50IHRvIGF2b2lkIGRlZ2VuZXJhdGUKLSAgICAgICAgICAgICAgICAvLyB0cmlh
bmd1bGF0aW9ucy4KLSAgICAgICAgICAgICAgICBpbnQgaW5kaWNlc1szXSA9IHsgMCB9OwotICAg
ICAgICAgICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9
IDA7IGsgPCA0OyArK2spCi0gICAgICAgICAgICAgICAgICAgIGlmIChrICE9IGopCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRpY2VzW2luZGV4KytdID0gazsKLSAgICAgICAgICAgICAgICBh
ZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1tpbmRpY2VzWzBdXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbV92ZXJ0aWNlc1tpbmRpY2VzWzFdXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbV92ZXJ0aWNlc1tpbmRpY2VzWzJdXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2VlIHdoZXRoZXIgYW55
IG9mIHRoZSBwb2ludHMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGUKLSAgICAvLyB0cmlhbmds
ZSBkZWZpbmVkIGJ5IHRoZSBvdGhlciB0aHJlZS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkgewotICAgICAgICBpbnQgaW5kaWNlc1szXSA9IHsgMCB9OwotICAgICAgICBpbnQgaW5k
ZXggPSAwOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKLSAgICAgICAgICAg
IGlmIChpICE9IGopCi0gICAgICAgICAgICAgICAgaW5kaWNlc1tpbmRleCsrXSA9IGo7Ci0gICAg
ICAgIGlmIChwb2ludEluVHJpYW5nbGUobV92ZXJ0aWNlc1tpXS54eUNvb3JkaW5hdGVzKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1tpbmRpY2VzWzBdXS54eUNvb3Jk
aW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1tpbmRpY2Vz
WzFdXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0
aWNlc1tpbmRpY2VzWzJdXS54eUNvb3JkaW5hdGVzKCkpKSB7Ci0gICAgICAgICAgICAvLyBQcm9k
dWNlIHRocmVlIHRyaWFuZ2xlcyBzdXJyb3VuZGluZyB0aGlzIGludGVyaW9yIHZlcnRleC4KLSAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgKytqKQotICAgICAgICAgICAgICAgIGFk
ZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzW2luZGljZXNbaiAlIDNdXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbV92ZXJ0aWNlc1tpbmRpY2VzWyhqICsgMSkgJSAzXV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm1fdmVydGljZXNbaV0pOwotICAgICAgICAgICAgLy8gTWFyayB0
aGUgaW50ZXJpb3IgdmVydGV4IHNvIHdlIGlnbm9yZSBpdCBpZiB0cnlpbmcgdG8gdHJhY2UKLSAg
ICAgICAgICAgIC8vIHRoZSBpbnRlcmlvciBlZGdlLgotICAgICAgICAgICAgbV92ZXJ0aWNlc1tp
XS5zZXRJbnRlcmlvcih0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFRoZXJlIGFyZSBvbmx5IGEgZmV3IHBlcm11dGF0aW9ucyBvZiB0aGUgdmVy
dGljZXMsIGlnbm9yaW5nCi0gICAgLy8gcm90YXRpb25zLCB3aGljaCBhcmUgaXJyZWxldmFudDoK
LSAgICAvLwotICAgIC8vICAwLS0zICAwLS0yICAwLS0zICAwLS0xICAwLS0yICAwLS0xCi0gICAg
Ly8gIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwgIHwKLSAgICAvLyAgfCAgfCAgfCAg
fCAgfCAgfCAgfCAgfCAgfCAgfCAgfCAgfAotICAgIC8vICAxLS0yICAxLS0zICAyLS0xICAyLS0z
ICAzLS0xICAzLS0yCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgdGhyZWUgb2YgdGhlc2UgYXJl
IHJlZmxlY3Rpb25zIG9mIGVhY2ggb3RoZXIuCi0gICAgLy8gVGhlcmVmb3JlIHRoZXJlIGFyZSBv
bmx5IHRocmVlIHBvc3NpYmxlIHRyaWFuZ3VsYXRpb25zOgotICAgIC8vCi0gICAgLy8gIDAtLTMg
IDAtLTIgIDAtLTMKLSAgICAvLyAgfFwgfCAgfFwgfCAgfFwgfAotICAgIC8vICB8IFx8ICB8IFx8
ICB8IFx8Ci0gICAgLy8gIDEtLTIgIDEtLTMgIDItLTEKLSAgICAvLwotICAgIC8vIEZyb20gd2hp
Y2ggd2UgY2FuIGNob29zZSBieSBzZWVpbmcgd2hpY2ggb2YgdGhlIHBvdGVudGlhbAotICAgIC8v
IGRpYWdvbmFscyBpbnRlcnNlY3QuIE5vdGUgdGhhdCB3ZSBjaG9vc2UgdGhlIHNob3J0ZXN0IGRp
YWdvbmFsCi0gICAgLy8gdG8gc3BsaXQgdGhlIHF1YWQuCi0gICAgaWYgKGxpbmVzSW50ZXJzZWN0
KG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICBt
X3ZlcnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV92
ZXJ0aWNlc1sxXS54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgIG1fdmVy
dGljZXNbM10ueHlDb29yZGluYXRlcygpKSkgewotICAgICAgICBpZiAoKG1fdmVydGljZXNbMl0u
eHlDb29yZGluYXRlcygpIC0gbV92ZXJ0aWNlc1swXS54eUNvb3JkaW5hdGVzKCkpLmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpIDwKLSAgICAgICAgICAgIChtX3ZlcnRpY2VzWzNdLnh5Q29vcmRpbmF0
ZXMoKSAtIG1fdmVydGljZXNbMV0ueHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFy
ZWQoKSkgewotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3ZlcnRp
Y2VzWzFdLCAmbV92ZXJ0aWNlc1syXSk7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0
aWNlc1swXSwgJm1fdmVydGljZXNbMl0sICZtX3ZlcnRpY2VzWzNdKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1sx
XSwgJm1fdmVydGljZXNbM10pOwotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNb
MV0sICZtX3ZlcnRpY2VzWzJdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGxpbmVzSW50ZXJzZWN0KG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNlc1szXS54eUNvb3JkaW5hdGVzKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2VzWzFdLnh5Q29vcmRpbmF0
ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljZXNbMl0ueHlDb29y
ZGluYXRlcygpKSkgewotICAgICAgICBpZiAoKG1fdmVydGljZXNbM10ueHlDb29yZGluYXRlcygp
IC0gbV92ZXJ0aWNlc1swXS54eUNvb3JkaW5hdGVzKCkpLmRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgp
IDwKLSAgICAgICAgICAgIChtX3ZlcnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSAtIG1fdmVydGlj
ZXNbMV0ueHlDb29yZGluYXRlcygpKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSkgewotICAgICAg
ICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0
aWNlc1szXSk7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVy
dGljZXNbM10sICZtX3ZlcnRpY2VzWzJdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAmbV92ZXJ0aWNlc1sxXSwgJm1fdmVydGljZXNb
Ml0pOwotICAgICAgICAgICAgYWRkVHJpYW5nbGUoJm1fdmVydGljZXNbMl0sICZtX3ZlcnRpY2Vz
WzFdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBMaW5lcyAoMC0+MSksICgyLT4zKSBpbnRlcnNlY3QgLS0gb3Igc2hvdWxkLCBtb2R1bG8gbnVt
ZXJpY2FsCi0gICAgICAgIC8vIHByZWNpc2lvbiBpc3N1ZXMKLSAgICAgICAgaWYgKChtX3ZlcnRp
Y2VzWzFdLnh5Q29vcmRpbmF0ZXMoKSAtIG1fdmVydGljZXNbMF0ueHlDb29yZGluYXRlcygpKS5k
aWFnb25hbExlbmd0aFNxdWFyZWQoKSA8Ci0gICAgICAgICAgICAobV92ZXJ0aWNlc1szXS54eUNv
b3JkaW5hdGVzKCkgLSBtX3ZlcnRpY2VzWzJdLnh5Q29vcmRpbmF0ZXMoKSkuZGlhZ29uYWxMZW5n
dGhTcXVhcmVkKCkpIHsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3ZlcnRpY2VzWzBdLCAm
bV92ZXJ0aWNlc1syXSwgJm1fdmVydGljZXNbMV0pOwotICAgICAgICAgICAgYWRkVHJpYW5nbGUo
Jm1fdmVydGljZXNbMF0sICZtX3ZlcnRpY2VzWzFdLCAmbV92ZXJ0aWNlc1szXSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRUcmlhbmdsZSgmbV92ZXJ0aWNlc1swXSwgJm1fdmVy
dGljZXNbMl0sICZtX3ZlcnRpY2VzWzNdKTsKLSAgICAgICAgICAgIGFkZFRyaWFuZ2xlKCZtX3Zl
cnRpY2VzWzNdLCAmbV92ZXJ0aWNlc1syXSwgJm1fdmVydGljZXNbMV0pOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjphZGRUcmlhbmdsZShW
ZXJ0ZXgqIHYwLCBWZXJ0ZXgqIHYxLCBWZXJ0ZXgqIHYyKQotewotICAgIEFTU0VSVChtX251bWJl
ck9mVHJpYW5nbGVzIDwgMyk7Ci0gICAgbV90cmlhbmdsZXNbbV9udW1iZXJPZlRyaWFuZ2xlcysr
XS5zZXRWZXJ0aWNlcyh2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBMb29wQmxpbm5Mb2NhbFRyaWFu
Z3VsYXRvcjo6YWRkSW50ZXJpb3JWZXJ0ZXgoVmVydGV4KiB2KQotewotICAgIEFTU0VSVChtX251
bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyA8IDQpOwotICAgIG1faW50ZXJpb3JWZXJ0aWNlc1ttX251
bWJlck9mSW50ZXJpb3JWZXJ0aWNlcysrXSA9IHY7Ci0gICAgdi0+c2V0TWFya2VkKHRydWUpOwot
fQotCi1ib29sIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjppc1NoYXJlZEVkZ2UoVmVydGV4
KiB2MCwgVmVydGV4KiB2MSkKLXsKLSAgICBib29sIGhhdmVFZGdlMDEgPSBmYWxzZTsKLSAgICBi
b29sIGhhdmVFZGdlMTAgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
VHJpYW5nbGVzKCk7ICsraSkgewotICAgICAgICBUcmlhbmdsZSogdHJpID0gZ2V0VHJpYW5nbGUo
aSk7Ci0gICAgICAgIGlmICh0cmktPmNvbnRhaW5zKHYwKSAmJiB0cmktPm5leHRWZXJ0ZXgodjAs
IHRydWUpID09IHYxKQotICAgICAgICAgICAgaGF2ZUVkZ2UwMSA9IHRydWU7Ci0gICAgICAgIGlm
ICh0cmktPmNvbnRhaW5zKHYxKSAmJiB0cmktPm5leHRWZXJ0ZXgodjEsIHRydWUpID09IHYwKQot
ICAgICAgICAgICAgaGF2ZUVkZ2UxMCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBoYXZlRWRn
ZTAxICYmIGhhdmVFZGdlMTA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uTG9jYWxUcmlhbmd1bGF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhYTIyOTRlNjQ2ODEwYjFiNDA5YTVlNWUxYmM2OGQ5ODc3YTk4YmE1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExvb3BCbGlubkxvY2FsVHJp
YW5ndWxhdG9yX2gKLSNkZWZpbmUgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3JfaAotCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUg
Ikxvb3BCbGlubkNvbnN0YW50cy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gUGVy
Zm9ybXMgYSBsb2NhbGl6ZWQgdHJpYW5ndWxhdGlvbiBvZiB0aGUgdHJpYW5nbGUgbWVzaAotLy8g
Y29ycmVzcG9uZGluZyB0byB0aGUgZm91ciBjb250cm9sIHBvaW50IHZlcnRpY2VzIG9mIGEgY3Vi
aWMgY3VydmUKLS8vIHNlZ21lbnQuCi1jbGFzcyBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvciB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IpOwot
cHVibGljOgotICAgIC8vIFRoZSB2ZXJ0aWNlcyB0aGF0IHRoZSB0cmlhbmd1bGF0b3Igb3BlcmF0
ZXMgdXBvbiwgY29udGFpbmluZyBib3RoCi0gICAgLy8gdGhlIHBvc2l0aW9uIGluZm9ybWF0aW9u
IGFzIHdlbGwgYXMgdGhlIGN1YmljIHRleHR1cmUKLSAgICAvLyBjb29yZGluYXRlcy4KLSAgICBj
bGFzcyBWZXJ0ZXggewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWZXJ0ZXgpOwotICAg
IHB1YmxpYzoKLSAgICAgICAgVmVydGV4KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzZXRG
bGFncygpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgeHlDb29yZGlu
YXRlcygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3h5Q29vcmRpbmF0
ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGtsbUNvb3JkaW5h
dGVzKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2xtQ29vcmRpbmF0
ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBhbmQgdGV4dHVy
ZSBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4LgotICAgICAgICB2b2lkIHNldChmbG9hdCB4LCBm
bG9hdCB5LAotICAgICAgICAgICAgICAgICBmbG9hdCBrLCBmbG9hdCBsLCBmbG9hdCBtKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX3h5Q29vcmRpbmF0ZXMuc2V0KHgsIHkpOwotICAgICAgICAg
ICAgbV9rbG1Db29yZGluYXRlcy5zZXQoaywgbCwgbSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGbGFncyBmb3Igd2Fsa2luZyBmcm9tIHRoZSBzdGFydCB2ZXJ0ZXggdG8gdGhlIGVuZCB2ZXJ0
ZXguCi0gICAgICAgIGJvb2wgZW5kKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
ZW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRFbmQoYm9vbCBlbmQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fZW5kID0gZW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBt
YXJrZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9tYXJrZWQ7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldE1hcmtlZChib29sIG1hcmtlZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9tYXJrZWQgPSBtYXJrZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlu
dGVyaW9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1faW50ZXJpb3I7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHNldEludGVyaW9yKGJvb2wgaW50ZXJpb3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1faW50ZXJpb3IgPSBpbnRlcmlvcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcmVzZXRGbGFncygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZW5kID0gZmFs
c2U7Ci0gICAgICAgICAgICBtX21hcmtlZCA9IGZhbHNlOwotICAgICAgICAgICAgbV9pbnRlcmlv
ciA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyAyRCBjb29y
ZGluYXRlcyBvZiB0aGUgdmVydGV4IGluIHRoZSBwbGFuZS4KLSAgICAgICAgRmxvYXRQb2ludCBt
X3h5Q29vcmRpbmF0ZXM7Ci0gICAgICAgIC8vIEN1YmljIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9y
IHJlbmRlcmluZyB0aGUgY3VydmUuCi0gICAgICAgIEZsb2F0UG9pbnQzRCBtX2tsbUNvb3JkaW5h
dGVzOwotCi0gICAgICAgIC8vIEZsYWdzIGZvciB3YWxraW5nIGZyb20gdGhlIHN0YXJ0IHZlcnRl
eCB0byB0aGUgZW5kIHZlcnRleC4KLSAgICAgICAgYm9vbCBtX2VuZDsKLSAgICAgICAgYm9vbCBt
X21hcmtlZDsKLSAgICAgICAgYm9vbCBtX2ludGVyaW9yOwotICAgIH07Ci0KLSAgICAvLyBUaGUg
dHJpYW5nbGVzIHRoZSBUcmlhbmd1bGF0b3IgcHJvZHVjZXMuCi0gICAgY2xhc3MgVHJpYW5nbGUg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgVHJpYW5nbGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX3ZlcnRpY2VzWzBdID0gMDsKLSAgICAgICAgICAgIG1fdmVydGljZXNbMV0gPSAwOwotICAg
ICAgICAgICAgbV92ZXJ0aWNlc1syXSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXRz
IHRoZSB2ZXJ0ZXggYXQgdGhlIGdpdmVuIGluZGV4LCAwIDw9IGluZGV4IDwgMy4KLSAgICAgICAg
VmVydGV4KiBnZXRWZXJ0ZXgoaW50IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5kZXggPj0gMCAmJiBpbmRleCA8IDMpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmVydGlj
ZXNbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
dHJpYW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIHZlcnRleCAoYnkKLSAgICAgICAgLy8gaWRlbnRp
dHksIG5vdCBnZW9tZXRyaWNhbGx5KS4KLSAgICAgICAgYm9vbCBjb250YWlucyhWZXJ0ZXgqIHYp
OwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHZlcnRleCBmb2xsb3dpbmcgdGhlIGN1cnJlbnQg
b25lIGluIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgLy8gZGlyZWN0aW9uLCBjb3VudGVyY2xvY2t3
aXNlIG9yIGNsb2Nrd2lzZS4KLSAgICAgICAgVmVydGV4KiBuZXh0VmVydGV4KFZlcnRleCogY3Vy
cmVudCwgYm9vbCB0cmF2ZXJzZUNvdW50ZXJDbG9ja3dpc2UpOwotCi0gICAgICAgIC8vIFNldHMg
dGhlIHZlcnRpY2VzIG9mIHRoaXMgdHJpYW5nbGUsIHBvdGVudGlhbGx5IHJlb3JkZXJpbmcgdGhl
bQotICAgICAgICAvLyB0byBwcm9kdWNlIGEgY2Fub25pY2FsIG9yaWVudGF0aW9uLgotICAgICAg
ICB2b2lkIHNldFZlcnRpY2VzKFZlcnRleCogdjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
VmVydGV4KiB2MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXgqIHYyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX3ZlcnRpY2VzWzBdID0gdjA7Ci0gICAgICAgICAgICBtX3ZlcnRp
Y2VzWzFdID0gdjE7Ci0gICAgICAgICAgICBtX3ZlcnRpY2VzWzJdID0gdjI7Ci0gICAgICAgICAg
ICBtYWtlQ291bnRlckNsb2Nrd2lzZSgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBbMC4uMl0gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZl
biB2ZXJ0ZXgsIG9yCi0gICAgICAgIC8vIC0xIGlmIG5vdCBmb3VuZC4KLSAgICAgICAgaW50IGlu
ZGV4Rm9yVmVydGV4KFZlcnRleCogdmVydGV4KTsKLQotICAgICAgICAvLyBSZW9yZGVycyB0aGUg
dmVydGljZXMgaW4gdGhpcyB0cmlhbmdsZSB0byBtYWtlIHRoZW0KLSAgICAgICAgLy8gY291bnRl
cmNsb2Nrd2lzZSB3aGVuIHZpZXdlZCBpbiB0aGUgMkQgcGxhbmUsIGluIG9yZGVyIHRvCi0gICAg
ICAgIC8vIGFjaGlldmUgYSBjYW5vbmljYWwgb3JkZXJpbmcuCi0gICAgICAgIHZvaWQgbWFrZUNv
dW50ZXJDbG9ja3dpc2UoKTsKLQotICAgICAgICAvLyBOb3RlOiB0aGVzZSBhcmUgcmF3IHBvaW50
ZXJzIGJlY2F1c2UgdGhleSBwb2ludCB0byB0aGUKLSAgICAgICAgLy8gbV92ZXJ0aWNlcyBjb250
YWluZWQgaW4gdGhlIHN1cnJvdW5kaW5nIHRyaWFuZ3VsYXRvci4KLSAgICAgICAgVmVydGV4KiBt
X3ZlcnRpY2VzWzNdOwotICAgIH07Ci0KLSAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcigp
OwotCi0gICAgLy8gUmVzZXRzIHRoZSB0cmlhbmd1bGF0b3IncyBzdGF0ZS4gQWZ0ZXIgZWFjaCB0
cmlhbmd1bGF0aW9uIGFuZAotICAgIC8vIGJlZm9yZSB0aGUgbmV4dCwgY2FsbCB0aGlzIHRvIHJl
LWluaXRpYWxpemUgdGhlIGludGVybmFsCi0gICAgLy8gdmVydGljZXMnIHN0YXRlLgotICAgIHZv
aWQgcmVzZXQoKTsKLQotICAgIC8vIFJldHVybnMgYSBtdXRhYmxlIHZlcnRleCBzdG9yZWQgaW4g
dGhlIHRyaWFuZ3VsYXRvci4gVXNlIHRoaXMgdG8KLSAgICAvLyBzZXQgdXAgdGhlIHZlcnRpY2Vz
IGJlZm9yZSBhIHRyaWFuZ3VsYXRpb24uCi0gICAgVmVydGV4KiBnZXRWZXJ0ZXgoaW50IGluZGV4
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCA0KTsKLSAgICAg
ICAgcmV0dXJuICZtX3ZlcnRpY2VzW2luZGV4XTsKLSAgICB9Ci0KLSAgICBlbnVtIEluc2lkZUVk
Z2VDb21wdXRhdGlvbiB7Ci0gICAgICAgIENvbXB1dGVJbnNpZGVFZGdlcywKLSAgICAgICAgRG9u
dENvbXB1dGVJbnNpZGVFZGdlcwotICAgIH07Ci0KLSAgICAvLyBPbmNlIHRoZSB2ZXJ0aWNlcycg
Y29udGVudHMgaGF2ZSBiZWVuIHNldCB1cCwgY2FsbCB0cmlhbmd1bGF0ZSgpCi0gICAgLy8gdG8g
cmVjb21wdXRlIHRoZSB0cmlhbmdsZXMuCi0gICAgLy8KLSAgICAvLyBJZiBjb21wdXRlSW5zaWRl
RWRnZXMgaXMgQ29tcHV0ZUluc2lkZUVkZ2VzLCB0aGVuIHNpZGVUb0ZpbGwKLSAgICAvLyB3aWxs
IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpZGUgb2YgdGhlIGN1YmljIGN1cnZlIGRlZmlu
ZWQKLSAgICAvLyBieSB0aGUgZm91ciBjb250cm9sIHBvaW50cyBpcyB0byBiZSBmaWxsZWQuCi0g
ICAgLy8KLSAgICAvLyBUaGUgdHJpYW5ndWxhdGlvbiBvYmV5cyB0aGUgZm9sbG93aW5nIGd1YXJh
bnRlZXM6Ci0gICAgLy8gICAtIElmIHRoZSBjb252ZXggaHVsbCBpcyBhIHF1YWRyaWxhdGVyYWws
IHRoZW4gdGhlIHNob3J0ZXN0IGVkZ2UKLSAgICAvLyAgICAgd2lsbCBiZSBjaG9zZW4gZm9yIHRo
ZSBjdXQgaW50byB0d28gdHJpYW5nbGVzLgotICAgIC8vICAgLSBJZiBvbmUgb2YgdGhlIHZlcnRp
Y2VzIGlzIGNvbnRhaW5lZCBpbiB0aGUgdHJpYW5nbGUgc3Bhbm5lZAotICAgIC8vICAgICBieSB0
aGUgb3RoZXIgdGhyZWUsIHRocmVlIHRyaWFuZ2xlcyB3aWxsIGJlIHByb2R1Y2VkLgotICAgIHZv
aWQgdHJpYW5ndWxhdGUoSW5zaWRlRWRnZUNvbXB1dGF0aW9uIGNvbXB1dGVJbnNpZGVFZGdlcywK
LSAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlubkNvbnN0YW50czo6RmlsbFNpZGUgc2lkZVRv
RmlsbCk7Ci0KLSAgICAvLyBOdW1iZXIgb2YgdHJpYW5nbGVzIGNvbXB1dGVkIGJ5IHRyaWFuZ3Vs
YXRlKCkuCi0gICAgaW50IG51bWJlck9mVHJpYW5nbGVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX251bWJlck9mVHJpYW5nbGVzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhl
IGNvbXB1dGVkIHRyaWFuZ2xlIGF0IGluZGV4LCAwIDw9IGluZGV4IDwgbnVtYmVyT2ZUcmlhbmds
ZXMoKS4KLSAgICBUcmlhbmdsZSogZ2V0VHJpYW5nbGUoaW50IGluZGV4KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCBtX251bWJlck9mVHJpYW5nbGVzKTsKLSAg
ICAgICAgcmV0dXJuICZtX3RyaWFuZ2xlc1tpbmRleF07Ci0gICAgfQotCi0gICAgLy8gTnVtYmVy
IG9mIHZlcnRpY2VzIGZhY2luZyB0aGUgaW5zaWRlIG9mIHRoZSBzaGFwZSwgaWYKLSAgICAvLyBD
b21wdXRlSW5zaWRlRWRnZXMgd2FzIHBhc3NlZCB3aGVuIHRyaWFuZ3VsYXRlKCkgd2FzIGNhbGxl
ZC4KLSAgICBpbnQgbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX251bWJlck9mSW50ZXJpb3JWZXJ0aWNlczsKLSAgICB9Ci0KLSAgICAvLyBG
ZXRjaGVzIHRoZSBnaXZlbiBpbnRlcmlvciB2ZXJ0ZXgsIDAgPD0gaW5kZXggPCBudW1iZXJPZklu
dGVyaW9yVmVydGljZXMoKS4KLSAgICBWZXJ0ZXgqIGdldEludGVyaW9yVmVydGV4KGludCBpbmRl
eCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA+PSAwICYmIGluZGV4IDwgbV9udW1iZXJP
ZkludGVyaW9yVmVydGljZXMpOwotICAgICAgICByZXR1cm4gbV9pbnRlcmlvclZlcnRpY2VzW2lu
ZGV4XTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB0cmlhbmd1bGF0ZUhlbHBlcihMb29w
Qmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOwotCi0gICAgLy8gQWRkcyBhIHRy
aWFuZ2xlIHRvIHRoZSB0cmlhbmd1bGF0aW9uLgotICAgIHZvaWQgYWRkVHJpYW5nbGUoVmVydGV4
KiB2MCwgVmVydGV4KiB2MSwgVmVydGV4KiB2Mik7Ci0KLSAgICAvLyBBZGRzIGEgdmVydGV4IHRv
IHRoZSBsaXN0IG9mIGludGVyaW9yIHZlcnRpY2VzLgotICAgIHZvaWQgYWRkSW50ZXJpb3JWZXJ0
ZXgoVmVydGV4KiB2KTsKLQotICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlZGdlIGJldHdl
ZW4gdmVydGV4IHYwIGFuZCB2MSBpcyBzaGFyZWQKLSAgICAvLyBiZXR3ZWVuIHR3byBvciBtb3Jl
IHRyaWFuZ2xlcy4KLSAgICBib29sIGlzU2hhcmVkRWRnZShWZXJ0ZXgqIHYwLCBWZXJ0ZXgqIHYx
KTsKLQotICAgIC8vIFRoZSB2ZXJ0aWNlcyBiZWluZyB0cmlhbmd1bGF0ZWQuCi0gICAgVmVydGV4
IG1fdmVydGljZXNbNF07Ci0KLSAgICAvLyBUaGUgdmVydGljZXMgY29ycmVzcG9uZGluZyB0byB0
aGUgZWRnZXMgZmFjaW5nIHRoZSBpbnNpZGUgb2YgdGhlCi0gICAgLy8gc2hhcGUsIGluIG9yZGVy
IGZyb20gdGhlIHN0YXJ0IHZlcnRleCB0byB0aGUgZW5kIHZlcnRleC4gVGhlIG1vcmUKLSAgICAv
LyBnZW5lcmFsIHRyaWFuZ3VsYXRpb24gYWxnb3JpdGhtIHRlc3NlbGxhdGVzIHRoaXMgaW50ZXJp
b3IgcmVnaW9uLgotICAgIFZlcnRleCogbV9pbnRlcmlvclZlcnRpY2VzWzRdOwotICAgIC8vIFRo
ZSBudW1iZXIgb2YgaW50ZXJpb3IgdmVydGljZXMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBjdXJy
ZW50Ci0gICAgLy8gdHJpYW5ndWxhdGlvbi4KLSAgICBpbnQgbV9udW1iZXJPZkludGVyaW9yVmVy
dGljZXM7Ci0KLSAgICAvLyBUaGVyZSBjYW4gYmUgYXQgbW9zdCB0aHJlZSB0cmlhbmdsZXMgY29t
cHV0ZWQgYnkgdGhpcyBsb2NhbAotICAgIC8vIGFsZ29yaXRobSwgd2hpY2ggb2NjdXJzIHdoZW4g
b25lIG9mIHRoZSB2ZXJ0aWNlcyBpcyBjb250YWluZWQgaW4KLSAgICAvLyB0aGUgdHJpYW5nbGUg
c3Bhbm5lZCBieSB0aGUgb3RoZXIgdGhyZWUuIE1vc3Qgb2YgdGhlIHRpbWUgdGhlCi0gICAgLy8g
YWxnb3JpdGhtIGNvbXB1dGVzIHR3byB0cmlhbmdsZXMuCi0gICAgVHJpYW5nbGUgbV90cmlhbmds
ZXNbM107Ci0gICAgaW50IG1fbnVtYmVyT2ZUcmlhbmdsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0
aFV0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5NYXRoVXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Q3MmRmZjQ5
OGQ4OTU1ZTk0OGYzMmZiNzQ2ZmZhOGVlMmRiMzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRp
bHMuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIExvb3BCbGlubk1hdGhVdGlscyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFV0aWxpdHkgZnVu
Y3Rpb25zIGxvY2FsIHRvIHRoaXMgZmlsZS4KLWludCBvcmllbnRhdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwMSwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMykKLXsKLSAgICBmbG9hdCBjcm9zc1Byb2R1Y3Qg
PSAocDIueSgpIC0gcDEueSgpKSAqIChwMy54KCkgLSBwMi54KCkpIC0gKHAzLnkoKSAtIHAyLnko
KSkgKiAocDIueCgpIC0gcDEueCgpKTsKLSAgICByZXR1cm4gKGNyb3NzUHJvZHVjdCA8IDAuMGYp
ID8gLTEgOiAoKGNyb3NzUHJvZHVjdCA+IDAuMGYpID8gMSA6IDApOwotfQotCi1ib29sIGVkZ2VF
ZGdlVGVzdChjb25zdCBGbG9hdFNpemUmIHYwRGVsdGEsCi0gICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiB2MCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUw
LAotICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTEpCi17Ci0gICAgLy8gVGhp
cyBlZGdlIHRvIGVkZ2UgdGVzdCBpcyBiYXNlZCBvbiBGcmFubGluIEFudG9uaW8ncyBnZW06ICJG
YXN0ZXIKLSAgICAvLyBMaW5lIFNlZ21lbnQgSW50ZXJzZWN0aW9uIiwgaW4gR3JhcGhpY3MgR2Vt
cyBJSUksIHBwLiAxOTktMjAyLgotICAgIGZsb2F0IGF4ID0gdjBEZWx0YS53aWR0aCgpOwotICAg
IGZsb2F0IGF5ID0gdjBEZWx0YS5oZWlnaHQoKTsKLSAgICBmbG9hdCBieCA9IHUwLngoKSAtIHUx
LngoKTsKLSAgICBmbG9hdCBieSA9IHUwLnkoKSAtIHUxLnkoKTsKLSAgICBmbG9hdCBjeCA9IHYw
LngoKSAtIHUwLngoKTsKLSAgICBmbG9hdCBjeSA9IHYwLnkoKSAtIHUwLnkoKTsKLSAgICBmbG9h
dCBmID0gYXkgKiBieCAtIGF4ICogYnk7Ci0gICAgZmxvYXQgZCA9IGJ5ICogY3ggLSBieCAqIGN5
OwotICAgIGlmICgoZiA+IDAgJiYgZCA+PSAwICYmIGQgPD0gZikgfHwgKGYgPCAwICYmIGQgPD0g
MCAmJiBkID49IGYpKSB7Ci0gICAgICAgIGZsb2F0IGUgPSBheCAqIGN5IC0gYXkgKiBjeDsKLQot
ICAgICAgICAvLyBUaGlzIGFkZGl0aW9uYWwgdGVzdCBhdm9pZHMgcmVwb3J0aW5nIGNvaW5jaWRl
bnQgZWRnZXMsIHdoaWNoCi0gICAgICAgIC8vIGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50LgotICAg
ICAgICBpZiAoYXBwcm94RXF1YWwoZSwgMCkgfHwgYXBwcm94RXF1YWwoZiwgMCkgfHwgYXBwcm94
RXF1YWwoZSwgZikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGYg
PiAwKQotICAgICAgICAgICAgcmV0dXJuIGUgPj0gMCAmJiBlIDw9IGY7Ci0KLSAgICAgICAgcmV0
dXJuIGUgPD0gMCAmJiBlID49IGY7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBlZGdlQWdhaW5zdFRyaWFuZ2xlRWRnZXMoY29uc3QgRmxvYXRQb2ludCYgdjAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2MSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB1MikKLXsKLSAgICBGbG9hdFNpemUgZGVsdGEg
PSB2MSAtIHYwOwotICAgIC8vIFRlc3QgZWRnZSB1MCwgdTEgYWdhaW5zdCB2MCwgdjEuCi0gICAg
aWYgKGVkZ2VFZGdlVGVzdChkZWx0YSwgdjAsIHUwLCB1MSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIC8vIFRlc3QgZWRnZSB1MSwgdTIgYWdhaW5zdCB2MCwgdjEuCi0gICAgaWYgKGVkZ2VF
ZGdlVGVzdChkZWx0YSwgdjAsIHUxLCB1MikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8v
IFRlc3QgZWRnZSB1MiwgdTEgYWdhaW5zdCB2MCwgdjEuCi0gICAgaWYgKGVkZ2VFZGdlVGVzdChk
ZWx0YSwgdjAsIHUyLCB1MCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8gQSByb3VuZG9mZiBmYWN0b3IgaW4gdGhlIGN1YmljIGNsYXNzaWZpY2F0aW9u
IGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGUKLS8vIGdlbmVyYXRpb24gYWxnb3JpdGhtcy4gSXQgcHJp
bWFyaWx5IGRldGVybWluZXMgdGhlIGhhbmRsaW5nIG9mIGNvcm5lcgotLy8gY2FzZXMgZHVyaW5n
IHRoZSBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzLiBCZSBjYXJlZnVsIHdoZW4gYWRqdXN0aW5nIGl0
OwotLy8gaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCBlbXBpcmljYWxseSB0byB3b3JrIHdlbGwuIFdo
ZW4gY2hhbmdpbmcgaXQsIHlvdQotLy8gc2hvdWxkIGxvb2sgaW4gcGFydGljdWxhciBhdCBzaGFw
ZXMgdGhhdCBjb250YWluIHF1YWRyYXRpYyBjdXJ2ZXMgYW5kCi0vLyBlbnN1cmUgdGhleSBzdGls
bCBsb29rIHNtb290aC4gT25jZSBwaXhlbCB0ZXN0cyBhcmUgcnVubmluZyBhZ2FpbnN0IHRoaXMK
LS8vIGFsZ29yaXRobSwgdGhleSBzaG91bGQgcHJvdmlkZSBzdWZmaWNpZW50IGNvdmVyYWdlIHRv
IGVuc3VyZSB0aGF0Ci0vLyBhZGp1c3RpbmcgdGhlIGNvbnN0YW50IHdvbid0IGJyZWFrIGFueXRo
aW5nLgotY29uc3QgZmxvYXQgRXBzaWxvbiA9IDUuMGUtNGY7Ci0KLX0gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQotCi0vLyBFeHBvcnRlZCByb3V0aW5lcwotCi1mbG9hdCByb3VuZFRvWmVybyhmbG9h
dCB2YWwpCi17Ci0gICAgaWYgKHZhbCA8IEVwc2lsb24gJiYgdmFsID4gLUVwc2lsb24pCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiB2YWw7Ci19Ci0KLWJvb2wgYXBwcm94RXF1YWwoY29u
c3QgRmxvYXRQb2ludCYgdjAsIGNvbnN0IEZsb2F0UG9pbnQmIHYxKQotewotICAgIHJldHVybiAo
djAgLSB2MSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgPCBFcHNpbG9uICogRXBzaWxvbjsKLX0K
LQotYm9vbCBhcHByb3hFcXVhbChjb25zdCBGbG9hdFBvaW50M0QmIHYwLCBjb25zdCBGbG9hdFBv
aW50M0QmIHYxKQotewotICAgIHJldHVybiAodjAgLSB2MSkubGVuZ3RoU3F1YXJlZCgpIDwgRXBz
aWxvbiAqIEVwc2lsb247Ci19Ci0KLWJvb2wgYXBwcm94RXF1YWwoZmxvYXQgZjAsIGZsb2F0IGYx
KQotewotICAgIHJldHVybiBmYWJzZihmMCAtIGYxKSA8IEVwc2lsb247Ci19Ci0KLWJvb2wgbGlu
ZXNJbnRlcnNlY3QoY29uc3QgRmxvYXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHExLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwMiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpCi17Ci0gICAg
cmV0dXJuIChvcmllbnRhdGlvbihwMSwgcTEsIHAyKSAhPSBvcmllbnRhdGlvbihwMSwgcTEsIHEy
KQotICAgICAgICAgICAgJiYgb3JpZW50YXRpb24ocDIsIHEyLCBwMSkgIT0gb3JpZW50YXRpb24o
cDIsIHEyLCBxMSkpOwotfQotCi1ib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgYykKLXsKLSAgICAvLyBBbGdvcml0aG0gZnJvbSBodHRwOi8v
d3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5odG1sCi0gICAgZmxv
YXQgeDAgPSBjLngoKSAtIGEueCgpOwotICAgIGZsb2F0IHkwID0gYy55KCkgLSBhLnkoKTsKLSAg
ICBmbG9hdCB4MSA9IGIueCgpIC0gYS54KCk7Ci0gICAgZmxvYXQgeTEgPSBiLnkoKSAtIGEueSgp
OwotICAgIGZsb2F0IHgyID0gcG9pbnQueCgpIC0gYS54KCk7Ci0gICAgZmxvYXQgeTIgPSBwb2lu
dC55KCkgLSBhLnkoKTsKLQotICAgIGZsb2F0IGRvdDAwID0geDAgKiB4MCArIHkwICogeTA7Ci0g
ICAgZmxvYXQgZG90MDEgPSB4MCAqIHgxICsgeTAgKiB5MTsKLSAgICBmbG9hdCBkb3QwMiA9IHgw
ICogeDIgKyB5MCAqIHkyOwotICAgIGZsb2F0IGRvdDExID0geDEgKiB4MSArIHkxICogeTE7Ci0g
ICAgZmxvYXQgZG90MTIgPSB4MSAqIHgyICsgeTEgKiB5MjsKLSAgICBmbG9hdCBkZW5vbWluYXRv
ciA9IGRvdDAwICogZG90MTEgLSBkb3QwMSAqIGRvdDAxOwotICAgIGlmICghZGVub21pbmF0b3Ip
Ci0gICAgICAgIC8vIFRyaWFuZ2xlIGlzIHplcm8tYXJlYS4gVHJlYXQgcXVlcnkgcG9pbnQgYXMg
bm90IGJlaW5nIGluc2lkZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIENvbXB1dGUK
LSAgICBmbG9hdCBpbnZlcnNlRGVub21pbmF0b3IgPSAxLjBmIC8gZGVub21pbmF0b3I7Ci0gICAg
ZmxvYXQgdSA9IChkb3QxMSAqIGRvdDAyIC0gZG90MDEgKiBkb3QxMikgKiBpbnZlcnNlRGVub21p
bmF0b3I7Ci0gICAgZmxvYXQgdiA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgKiBp
bnZlcnNlRGVub21pbmF0b3I7Ci0KLSAgICByZXR1cm4gKHUgPiAwLjBmKSAmJiAodiA+IDAuMGYp
ICYmICh1ICsgdiA8IDEuMGYpOwotfQotCi1ib29sIHRyaWFuZ2xlc092ZXJsYXAoY29uc3QgRmxv
YXRQb2ludCYgYTEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjEs
Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYTIsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYjIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgYzIpCi17Ci0gICAgLy8gRGVyaXZlZCBmcm9tIGNvcGxhbmFyX3RyaV90cmkoKSBhdAot
ICAgIC8vIGh0dHA6Ly9qZ3QuYWtwZXRlcnMuY29tL3BhcGVycy9TaGVuSGVuZ1RhbmcwMy90cmlf
dHJpLmh0bWwgLAotICAgIC8vIHNpbXBsaWZpZWQgZm9yIHRoZSAyRCBjYXNlIGFuZCBtb2RpZmll
ZCBzbyB0aGF0IG92ZXJsYXBwaW5nIGVkZ2VzCi0gICAgLy8gZG8gbm90IHJlcG9ydCBvdmVybGFw
cGluZyB0cmlhbmdsZXMuCi0KLSAgICAvLyBUZXN0IGFsbCBlZGdlcyBvZiB0cmlhbmdsZSAxIGFn
YWluc3QgdGhlIGVkZ2VzIG9mIHRyaWFuZ2xlIDIuCi0gICAgaWYgKGVkZ2VBZ2FpbnN0VHJpYW5n
bGVFZGdlcyhhMSwgYjEsIGEyLCBiMiwgYzIpCi0gICAgICAgIHx8IGVkZ2VBZ2FpbnN0VHJpYW5n
bGVFZGdlcyhiMSwgYzEsIGEyLCBiMiwgYzIpCi0gICAgICAgIHx8IGVkZ2VBZ2FpbnN0VHJpYW5n
bGVFZGdlcyhjMSwgYTEsIGEyLCBiMiwgYzIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAv
LyBGaW5hbGx5LCB0ZXN0IGlmIHRyaTEgaXMgdG90YWxseSBjb250YWluZWQgaW4gdHJpMiBvciB2
aWNlIHZlcnNhLgotICAgIC8vIFRoZSBwYXBlciBhYm92ZSBvbmx5IHBlcmZvcm1zIHRoZSBmaXJz
dCB0d28gcG9pbnQtaW4tdHJpYW5nbGUgdGVzdHMuCi0gICAgLy8gQmVjYXVzZSB3ZSBkZWZpbmUg
dGhhdCB0cmlhbmdsZXMgc2hhcmluZyBhIHZlcnRleCBvciBlZGdlIGRvbid0Ci0gICAgLy8gb3Zl
cmxhcCwgd2UgbXVzdCBwZXJmb3JtIGFkZGl0aW9uYWwgdGVzdHMgdG8gc2VlIHdoZXRoZXIgb25l
Ci0gICAgLy8gdHJpYW5nbGUgaXMgY29udGFpbmVkIGluIHRoZSBvdGhlci4KLSAgICBpZiAocG9p
bnRJblRyaWFuZ2xlKGExLCBhMiwgYjIsIGMyKQotICAgICAgICB8fCBwb2ludEluVHJpYW5nbGUo
YTIsIGExLCBiMSwgYzEpCi0gICAgICAgIHx8IHBvaW50SW5UcmlhbmdsZShiMSwgYTIsIGIyLCBj
MikKLSAgICAgICAgfHwgcG9pbnRJblRyaWFuZ2xlKGIyLCBhMSwgYjEsIGMxKQotICAgICAgICB8
fCBwb2ludEluVHJpYW5nbGUoYzEsIGEyLCBiMiwgYzIpCi0gICAgICAgIHx8IHBvaW50SW5Ucmlh
bmdsZShjMiwgYTEsIGIxLCBjMSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotLy8gSGVscGVyIHJvdXRpbmVzIGZvciBwdWJsaWMg
WFJheSBxdWVyaWVzIGJlbG93LiBBbGwgb2YgdGhpcyBjb2RlCi0vLyBvcmlnaW5hdGVkIGluIFNr
aWE7IHNlZSBpbmNsdWRlL2NvcmUvIGFuZCBzcmMvY29yZS8sIFNrU2NhbGFyLmggYW5kCi0vLyBT
a0dlb21ldHJ5LntjcHAsaH0uCi0KLWNvbnN0IGZsb2F0IE5lYXJseVplcm9Db25zdGFudCA9ICgx
LjBmIC8gKDEgPDwgMTIpKTsKLQotYm9vbCBuZWFybHlaZXJvKGZsb2F0IHgsIGZsb2F0IHRvbGVy
YW5jZSA9IE5lYXJseVplcm9Db25zdGFudCkKLXsKLSAgICBBU1NFUlQodG9sZXJhbmNlID4gMC4w
Zik7Ci0gICAgcmV0dXJuIDo6ZmFic2YoeCkgPCB0b2xlcmFuY2U7Ci19Ci0KLS8vIExpbmVhcmx5
IGludGVycG9sYXRlIGJldHdlZW4gYSBhbmQgYiwgYmFzZWQgb24gdC4KLS8vIElmIHQgaXMgMCwg
cmV0dXJuIGE7IGlmIHQgaXMgMSwgcmV0dXJuIGI7IGVsc2UgaW50ZXJwb2xhdGUuCi0vLyB0IG11
c3QgYmUgWzAuLjFdLgotZmxvYXQgaW50ZXJwb2xhdGUoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQg
dCkKLXsKLSAgICBBU1NFUlQodCA+PSAwICYmIHQgPD0gMSk7Ci0gICAgcmV0dXJuIGEgKyAoYiAt
IGEpICogdDsKLX0KLQotZmxvYXQgZXZhbHVhdGVDdWJpYyhmbG9hdCBjb250cm9sUG9pbnQwLCBm
bG9hdCBjb250cm9sUG9pbnQxLCBmbG9hdCBjb250cm9sUG9pbnQyLCBmbG9hdCBjb250cm9sUG9p
bnQzLCBmbG9hdCB0KQotewotICAgIEFTU0VSVCh0ID49IDAgJiYgdCA8PSAxKTsKLQotICAgIGlm
ICghdCkKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xQb2ludDA7Ci0KLSAgICBmbG9hdCBhYiA9IGlu
dGVycG9sYXRlKGNvbnRyb2xQb2ludDAsIGNvbnRyb2xQb2ludDEsIHQpOwotICAgIGZsb2F0IGJj
ID0gaW50ZXJwb2xhdGUoY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50MiwgdCk7Ci0gICAgZmxv
YXQgY2QgPSBpbnRlcnBvbGF0ZShjb250cm9sUG9pbnQyLCBjb250cm9sUG9pbnQzLCB0KTsKLSAg
ICBmbG9hdCBhYmMgPSBpbnRlcnBvbGF0ZShhYiwgYmMsIHQpOwotICAgIGZsb2F0IGJjZCA9IGlu
dGVycG9sYXRlKGJjLCBjZCwgdCk7Ci0gICAgcmV0dXJuIGludGVycG9sYXRlKGFiYywgYmNkLCB0
KTsKLX0KLQotLy8gRXZhbHVhdGVzIHRoZSBwb2ludCBvbiB0aGUgc291cmNlIGN1YmljIHNwZWNp
ZmllZCBieSB0LCAwIDw9IHQgPD0gMS4wLgotRmxvYXRQb2ludCBldmFsdWF0ZUN1YmljQXQoY29u
c3QgRmxvYXRQb2ludCBjdWJpY1s0XSwgZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChldmFsdWF0ZUN1YmljKGN1YmljWzBdLngoKSwgY3ViaWNbMV0ueCgpLCBjdWJpY1syXS54KCks
IGN1YmljWzNdLngoKSwgdCksCi0gICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVDdWJpYyhj
dWJpY1swXS55KCksIGN1YmljWzFdLnkoKSwgY3ViaWNbMl0ueSgpLCBjdWJpY1szXS55KCksIHQp
KTsKLX0KLQotYm9vbCB4UmF5Q3Jvc3Nlc01vbm90b25pY0N1YmljKGNvbnN0IFhSYXkmIHhSYXks
IGNvbnN0IEZsb2F0UG9pbnQgY3ViaWNbNF0sIGJvb2wmIGFtYmlndW91cykKLXsKLSAgICBhbWJp
Z3VvdXMgPSBmYWxzZTsKLQotICAgIC8vIEZpbmQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0geSBv
ZiB0aGUgZXh0cmVtYSwgd2hpY2ggYXJlIHRoZQotICAgIC8vIGZpcnN0IGFuZCBsYXN0IHBvaW50
cyBzaW5jZSB0aGlzIGN1YmljIGlzIG1vbm90b25pYwotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1p
bihjdWJpY1swXS55KCksIGN1YmljWzNdLnkoKSk7Ci0gICAgZmxvYXQgbWF4WSA9IHN0ZDo6bWF4
KGN1YmljWzBdLnkoKSwgY3ViaWNbM10ueSgpKTsKLQotICAgIGlmICh4UmF5LnkoKSA9PSBjdWJp
Y1swXS55KCkKLSAgICAgICAgfHwgeFJheS55KCkgPCBtaW5ZCi0gICAgICAgIHx8IHhSYXkueSgp
ID4gbWF4WSkgewotICAgICAgICAvLyBUaGUgcXVlcnkgbGluZSBkZWZpbml0ZWx5IGRvZXMgbm90
IGNyb3NzIHRoZSBjdXJ2ZQotICAgICAgICBhbWJpZ3VvdXMgPSAoeFJheS55KCkgPT0gY3ViaWNb
MF0ueSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wg
cG9pbnRBdEV4dHJlbXVtID0gKHhSYXkueSgpID09IGN1YmljWzNdLnkoKSk7Ci0KLSAgICBmbG9h
dCBtaW5YID0gc3RkOjptaW4oc3RkOjptaW4oc3RkOjptaW4oY3ViaWNbMF0ueCgpLCBjdWJpY1sx
XS54KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJpY1syXS54KCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJpY1szXS54KCkpOwotICAgIGlmICh4UmF5
LngoKSA8IG1pblgpIHsKLSAgICAgICAgLy8gVGhlIHF1ZXJ5IGxpbmUgZGVmaW5pdGVseSBjcm9z
c2VzIHRoZSBjdXJ2ZQotICAgICAgICBhbWJpZ3VvdXMgPSBwb2ludEF0RXh0cmVtdW07Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGZsb2F0IG1heFggPSBzdGQ6Om1heChzdGQ6
Om1heChzdGQ6Om1heChjdWJpY1swXS54KCksIGN1YmljWzFdLngoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1YmljWzJdLngoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1YmljWzNdLngoKSk7Ci0gICAgaWYgKHhSYXkueCgpID4gbWF4WCkKLSAgICAgICAg
Ly8gVGhlIHF1ZXJ5IGxpbmUgZGVmaW5pdGVseSBkb2VzIG5vdCBjcm9zcyB0aGUgY3VydmUKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQg
dGhlIHBhcmFtZXRlciB2YWx1ZSB3aGljaCBtYWtlcyB5IGFzCi0gICAgLy8gY2xvc2UgYXMgcG9z
c2libGUgdG8gdGhlIHF1ZXJ5IHBvaW50LiBTZWUgd2hldGhlciB0aGUgcXVlcnkKLSAgICAvLyBs
aW5lJ3Mgb3JpZ2luIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBhc3NvY2lhdGVkIHggY29vcmRpbmF0
ZS4KLQotICAgIC8vIE1heEl0ZXJhdGlvbnMgaXMgY2hvc2VuIGFzIHRoZSBudW1iZXIgb2YgbWFu
dGlzc2EgYml0cyBmb3IgYSBmbG9hdCwKLSAgICAvLyBzaW5jZSB0aGVyZSdzIG5vIHdheSB3ZSBh
cmUgZ29pbmcgdG8gZ2V0IG1vcmUgcHJlY2lzaW9uIGJ5Ci0gICAgLy8gaXRlcmF0aW5nIG1vcmUg
dGltZXMgdGhhbiB0aGF0LgotICAgIGNvbnN0IGludCBNYXhJdGVyYXRpb25zID0gMjM7Ci0gICAg
RmxvYXRQb2ludCBldmFsdWF0ZWRQb2ludDsKLSAgICBpbnQgaXRlciA9IDA7Ci0gICAgZmxvYXQg
dXBwZXJUOwotICAgIGZsb2F0IGxvd2VyVDsKLSAgICAvLyBOZWVkIHRvIGludmVydCBkaXJlY3Rp
b24gb2YgdCBwYXJhbWV0ZXIgaWYgY3ViaWMgZ29lcyB1cAotICAgIC8vIGluc3RlYWQgb2YgZG93
bgotICAgIGlmIChjdWJpY1szXS55KCkgPiBjdWJpY1swXS55KCkpIHsKLSAgICAgICAgdXBwZXJU
ID0gMTsKLSAgICAgICAgbG93ZXJUID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICB1cHBlclQg
PSAwOwotICAgICAgICBsb3dlclQgPSAxOwotICAgIH0KLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0
IHQgPSAwLjVmICogKHVwcGVyVCArIGxvd2VyVCk7Ci0gICAgICAgIGV2YWx1YXRlZFBvaW50ID0g
ZXZhbHVhdGVDdWJpY0F0KGN1YmljLCB0KTsKLSAgICAgICAgaWYgKHhSYXkueSgpID4gZXZhbHVh
dGVkUG9pbnQueSgpKQotICAgICAgICAgICAgbG93ZXJUID0gdDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdXBwZXJUID0gdDsKLSAgICB9IHdoaWxlICgrK2l0ZXIgPCBNYXhJdGVyYXRpb25z
ICYmICFuZWFybHlaZXJvKGV2YWx1YXRlZFBvaW50LnkoKSAtIHhSYXkueSgpKSk7Ci0KLSAgICAv
LyBGSVhNRTogb25jZSB3ZSBoYXZlIG1vcmUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhpcyBjb2Rl
LAotICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIHVzaW5nIGEgZnV6enkg
dGVzdC4KLSAgICBpZiAoeFJheS54KCkgPD0gZXZhbHVhdGVkUG9pbnQueCgpKSB7Ci0gICAgICAg
IGFtYmlndW91cyA9IHBvaW50QXRFeHRyZW11bTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gRGl2aWRlcyB0aGUgbnVtZXJhdG9yIGJ5IHRo
ZSBkZW5vbWluYXRvciBzYWZlbHkgZm9yIHRoZSBjYXNlIHdoZXJlCi0vLyB0aGUgcmVzdWx0IG11
c3QgbGllIGluIHRoZSByYW5nZSAoMC4uMSkuIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlcgotLy8g
dGhlIHJlc3VsdCBpcyB2YWxpZC4KLWJvb2wgc2FmZVVuaXREaXZpZGUoZmxvYXQgbnVtZXJhdG9y
LCBmbG9hdCBkZW5vbWluYXRvciwgZmxvYXQmIHJhdGlvKQotewotICAgIGlmIChudW1lcmF0b3Ig
PCAwKSB7Ci0gICAgICAgIC8vIE1ha2UgdGhlICJudW1lcmF0b3IgPj0gZGVub21pbmF0b3IiIGNo
ZWNrIGJlbG93IHdvcmsuCi0gICAgICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3I7Ci0gICAgICAg
IGRlbm9taW5hdG9yID0gLWRlbm9taW5hdG9yOwotICAgIH0KLSAgICBpZiAoIW51bWVyYXRvciB8
fCAhZGVub21pbmF0b3IgfHwgbnVtZXJhdG9yID49IGRlbm9taW5hdG9yKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZmxvYXQgciA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOwotICAgIGlm
IChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKHIgPj0g
MCAmJiByIDwgMSk7Ci0gICAgaWYgKCFyKSAvLyBjYXRjaCB1bmRlcmZsb3cgaWYgbnVtZXJhdG9y
IDw8PDwgZGVub21pbmF0b3IKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJhdGlvID0gcjsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRnJvbSBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLgot
Ly8KLS8vICAgcSA9IC0xLzIgKGIgKyBzaWduKGIpIHNxcnRbYipiIC0gNCphKmNdKQotLy8gICB4
MSA9IHEgLyBhCi0vLyAgIHgyID0gYyAvIHEKLS8vCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
cmVhbCByb290cyBvZiB0aGUgZXF1YXRpb24gWzAuLjJdLiBSb290cyBhcmUKLS8vIHJldHVybmVk
IGluIHNvcnRlZCBvcmRlciwgc21hbGxlciByb290IGZpcnN0LgotaW50IGZpbmRVbml0UXVhZFJv
b3RzKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMsIGZsb2F0IHJvb3RzWzJdKQotewotICAgIGlm
ICghYSkKLSAgICAgICAgcmV0dXJuIHNhZmVVbml0RGl2aWRlKC1jLCBiLCByb290c1swXSkgPyAx
IDogMDsKLQotICAgIGZsb2F0IGRpc2NyaW1pbmFudCA9IGIqYiAtIDQqYSpjOwotICAgIGlmIChk
aXNjcmltaW5hbnQgPCAwIHx8IHN0ZDo6aXNuYW4oZGlzY3JpbWluYW50KSkgLy8gY29tcGxleCBy
b290cwotICAgICAgICByZXR1cm4gMDsKLSAgICBkaXNjcmltaW5hbnQgPSBzcXJ0ZihkaXNjcmlt
aW5hbnQpOwotCi0gICAgZmxvYXQgcSA9IChiIDwgMCkgPyAtKGIgLSBkaXNjcmltaW5hbnQpIC8g
MiA6IC0oYiArIGRpc2NyaW1pbmFudCkgLyAyOwotICAgIGludCBudW1iZXJPZlJvb3RzID0gMDsK
LSAgICBpZiAoc2FmZVVuaXREaXZpZGUocSwgYSwgcm9vdHNbbnVtYmVyT2ZSb290c10pKQotICAg
ICAgICArK251bWJlck9mUm9vdHM7Ci0gICAgaWYgKHNhZmVVbml0RGl2aWRlKGMsIHEsIHJvb3Rz
W251bWJlck9mUm9vdHNdKSkKLSAgICAgICAgKytudW1iZXJPZlJvb3RzOwotICAgIGlmIChudW1i
ZXJPZlJvb3RzID09IDIpIHsKLSAgICAgICAgLy8gU2VlbWluZ2x5IGhhdmUgdHdvIHJvb3RzLiBD
aGVjayBmb3IgZXF1YWxpdHkgYW5kIHNvcnQuCi0gICAgICAgIGlmIChyb290c1swXSA9PSByb290
c1sxXSkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBpZiAocm9vdHNbMF0gPiByb290
c1sxXSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcChyb290c1swXSwgcm9vdHNbMV0pOwotICAgIH0K
LSAgICByZXR1cm4gbnVtYmVyT2ZSb290czsKLX0KLQotLy8gQ3ViaWMnKHQpID0gcHReMiArIHF0
ICsgciwgd2hlcmUKLS8vICAgcCA9IDMoLWEgKyAzKGIgLSBjKSArIGQpCi0vLyAgIHEgPSA2KGEg
LSAyYiArIGMpCi0vLyAgIHIgPSAzKGIgLSBhKQotLy8gU29sdmUgZm9yIHQsIGtlZXBpbmcgb25s
eSB0aG9zZSB0aGF0IGZpdCBiZXR3ZWVuIDAgPCB0IDwgMS4KLWludCBmaW5kQ3ViaWNFeHRyZW1h
KGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMsIGZsb2F0IGQsIGZsb2F0IHRWYWx1ZXNbMl0pCi17
Ci0gICAgLy8gRGl2aWRlIHAsIHEsIGFuZCByIGJ5IDMgdG8gc2ltcGxpZnkgdGhlIGVxdWF0aW9u
cy4KLSAgICBmbG9hdCBwID0gZCAtIGEgKyAzKihiIC0gYyk7Ci0gICAgZmxvYXQgcSA9IDIqKGEg
LSBiIC0gYiArIGMpOwotICAgIGZsb2F0IHIgPSBiIC0gYTsKLQotICAgIHJldHVybiBmaW5kVW5p
dFF1YWRSb290cyhwLCBxLCByLCB0VmFsdWVzKTsKLX0KLQotdm9pZCBpbnRlcnBvbGF0ZUN1Ymlj
Q29vcmRzKGZsb2F0IGNvbnRyb2xQb2ludDAsIGZsb2F0IGNvbnRyb2xQb2ludDEsIGZsb2F0IGNv
bnRyb2xQb2ludDIsIGZsb2F0IGNvbnRyb2xQb2ludDMsIGZsb2F0KiBkc3QsIGZsb2F0IHQpCi17
Ci0gICAgZmxvYXQgYWIgPSBpbnRlcnBvbGF0ZShjb250cm9sUG9pbnQwLCBjb250cm9sUG9pbnQx
LCB0KTsKLSAgICBmbG9hdCBiYyA9IGludGVycG9sYXRlKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQ
b2ludDIsIHQpOwotICAgIGZsb2F0IGNkID0gaW50ZXJwb2xhdGUoY29udHJvbFBvaW50MiwgY29u
dHJvbFBvaW50MywgdCk7Ci0gICAgZmxvYXQgYWJjID0gaW50ZXJwb2xhdGUoYWIsIGJjLCB0KTsK
LSAgICBmbG9hdCBiY2QgPSBpbnRlcnBvbGF0ZShiYywgY2QsIHQpOwotICAgIGZsb2F0IGFiY2Qg
PSBpbnRlcnBvbGF0ZShhYmMsIGJjZCwgdCk7Ci0KLSAgICBkc3RbMF0gPSBjb250cm9sUG9pbnQw
OwotICAgIGRzdFsyXSA9IGFiOwotICAgIGRzdFs0XSA9IGFiYzsKLSAgICBkc3RbNl0gPSBhYmNk
OwotICAgIGRzdFs4XSA9IGJjZDsKLSAgICBkc3RbMTBdID0gY2Q7Ci0gICAgZHN0WzEyXSA9IGNv
bnRyb2xQb2ludDM7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1ib29sIGlzVW5pdEludGVydmFsKGZs
b2F0IHgpCi17Ci0gICAgcmV0dXJuIHggPiAwICYmIHggPCAxOwotfQotI2VuZGlmCi0KLXZvaWQg
Y2hvcEN1YmljQXRUVmFsdWVzKGNvbnN0IEZsb2F0UG9pbnQgc3JjWzRdLCBGbG9hdFBvaW50IGRz
dFtdLCBjb25zdCBmbG9hdCB0VmFsdWVzW10sIGludCByb290cykKLXsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb290cyAtIDE7ICsraSkgewotICAgICAgICBBU1NF
UlQoaXNVbml0SW50ZXJ2YWwodFZhbHVlc1tpXSkpOwotICAgICAgICBBU1NFUlQoaXNVbml0SW50
ZXJ2YWwodFZhbHVlc1tpKzFdKSk7Ci0gICAgICAgIEFTU0VSVCh0VmFsdWVzW2ldIDwgdFZhbHVl
c1tpKzFdKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghcm9vdHMpIHsKLSAgICAgICAgLy8g
bm90aGluZyB0byBjaG9wCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKQotICAg
ICAgICAgICAgZHN0W2pdID0gc3JjW2pdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
ZmxvYXQgdCA9IHRWYWx1ZXNbMF07Ci0gICAgRmxvYXRQb2ludCB0bXBbNF07Ci0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCA0OyArK2opCi0gICAgICAgIHRtcFtqXSA9IHNyY1tqXTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcm9vdHM7ICsraSkgewotICAgICAgICBjaG9wQ3ViaWNBdCh0bXAs
IGRzdCwgdCk7Ci0gICAgICAgIGlmIChpID09IHJvb3RzIC0gMSkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGRzdCArPSAzOwotICAgICAgICAvLyBNYWtlIHRtcCBjb250YWluIHRoZSBy
ZW1haW5pbmcgY3ViaWMgKGFmdGVyIHRoZSBmaXJzdCBjaG9wKS4KLSAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCA0OyArK2opCi0gICAgICAgICAgICB0bXBbal0gPSBkc3Rbal07Ci0KLSAgICAg
ICAgLy8gV2F0Y2ggb3V0IGZvciB0aGUgY2FzZSB0aGF0IHRoZSByZW5vcm1hbGl6ZWQgdCBpc24n
dCBpbiByYW5nZS4KLSAgICAgICAgaWYgKCFzYWZlVW5pdERpdmlkZSh0VmFsdWVzW2krMV0gLSB0
VmFsdWVzW2ldLCAxLjBmIC0gdFZhbHVlc1tpXSwgdCkpIHsKLSAgICAgICAgICAgIC8vIElmIGl0
IGlzbid0LCBqdXN0IGNyZWF0ZSBhIGRlZ2VuZXJhdGUgY3ViaWMuCi0gICAgICAgICAgICBkc3Rb
NF0gPSBkc3RbNV0gPSBkc3RbNl0gPSB0bXBbM107Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVtYShGbG9hdFBv
aW50IGNvb3Jkc1s3XSkKLXsKLSAgICBjb29yZHNbMl0uc2V0WShjb29yZHNbM10ueSgpKTsKLSAg
ICBjb29yZHNbNF0uc2V0WShjb29yZHNbM10ueSgpKTsKLX0KLQotaW50IGNob3BDdWJpY0F0WUV4
dHJlbWEoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzEwXSkKLXsKLSAg
ICBmbG9hdCB0VmFsdWVzWzJdOwotICAgIGludCByb290cyA9IGZpbmRDdWJpY0V4dHJlbWEoc3Jj
WzBdLnkoKSwgc3JjWzFdLnkoKSwgc3JjWzJdLnkoKSwgc3JjWzNdLnkoKSwgdFZhbHVlcyk7Ci0K
LSAgICBjaG9wQ3ViaWNBdFRWYWx1ZXMoc3JjLCBkc3QsIHRWYWx1ZXMsIHJvb3RzKTsKLSAgICBp
ZiAocm9vdHMpIHsKLSAgICAgICAgLy8gd2UgZG8gc29tZSBjbGVhbnVwIHRvIGVuc3VyZSBvdXIg
WSBleHRyZW1hIGFyZSBmbGF0Ci0gICAgICAgIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1hKCZk
c3RbMF0pOwotICAgICAgICBpZiAocm9vdHMgPT0gMikKLSAgICAgICAgICAgIGZsYXR0ZW5Eb3Vi
bGVDdWJpY1lFeHRyZW1hKCZkc3RbM10pOwotICAgIH0KLSAgICByZXR1cm4gcm9vdHM7Ci19Ci0K
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0vLyBQdWJsaWMgY3ViaWMgb3BlcmF0aW9ucy4K
LQotdm9pZCBjaG9wQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBk
c3RbN10sIGZsb2F0IHQpCi17Ci0gICAgQVNTRVJUKHQgPj0gMCAmJiB0IDw9IDEpOwotCi0gICAg
ZmxvYXQgb3V0cHV0WzE0XTsKLSAgICBpbnRlcnBvbGF0ZUN1YmljQ29vcmRzKHNyY1swXS54KCks
IHNyY1sxXS54KCksIHNyY1syXS54KCksIHNyY1szXS54KCksICZvdXRwdXRbMF0sIHQpOwotICAg
IGludGVycG9sYXRlQ3ViaWNDb29yZHMoc3JjWzBdLnkoKSwgc3JjWzFdLnkoKSwgc3JjWzJdLnko
KSwgc3JjWzNdLnkoKSwgJm91dHB1dFsxXSwgdCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA3
OyBpKyspCi0gICAgICAgIGRzdFtpXS5zZXQob3V0cHV0WzIgKiBpXSwgb3V0cHV0WzIgKiBpICsg
MV0pOwotfQotCi0vLyBQdWJsaWMgWFJheSBxdWVyaWVzLgotCi1ib29sIHhSYXlDcm9zc2VzTGlu
ZShjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBvaW50IHB0c1syXSwgYm9vbCYgYW1iaWd1
b3VzKQotewotICAgIGFtYmlndW91cyA9IGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHF1aWNr
IGRpc2NhcmRzLgotICAgIC8vIENvbnNpZGVyIHF1ZXJ5IGxpbmUgZ29pbmcgZXhhY3RseSB0aHJv
dWdoIHBvaW50IDAgdG8gbm90Ci0gICAgLy8gaW50ZXJzZWN0LCBmb3Igc3ltbWV0cnkgd2l0aCB4
UmF5Q3Jvc3Nlc01vbm90b25pY0N1YmljLgotICAgIGlmICh4UmF5LnkoKSA9PSBwdHNbMF0ueSgp
KSB7Ci0gICAgICAgIGFtYmlndW91cyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHhSYXkueSgpIDwgcHRzWzBdLnkoKSAmJiB4UmF5LnkoKSA8IHB0c1sxXS55
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoeFJheS55KCkgPiBwdHNbMF0ueSgp
ICYmIHhSYXkueSgpID4gcHRzWzFdLnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICh4UmF5LngoKSA+IHB0c1swXS54KCkgJiYgeFJheS54KCkgPiBwdHNbMV0ueCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRGV0ZXJtaW5lIGRlZ2VuZXJhdGUgY2FzZXMKLSAgICBp
ZiAobmVhcmx5WmVybyhwdHNbMF0ueSgpIC0gcHRzWzFdLnkoKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobmVhcmx5WmVybyhwdHNbMF0ueCgpIC0gcHRzWzFdLngoKSkpIHsKLSAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBkZXRlcm1pbmVkIHRoZSBxdWVyeSBwb2ludCBsaWVzIHdp
dGhpbiB0aGUKLSAgICAgICAgLy8gdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGxpbmUgc2VnbWVudC4K
LSAgICAgICAgaWYgKHhSYXkueCgpIDw9IHB0c1swXS54KCkpIHsKLSAgICAgICAgICAgIGFtYmln
dW91cyA9ICh4UmF5LnkoKSA9PSBwdHNbMV0ueSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gQW1iaWd1
aXR5IGNoZWNrCi0gICAgaWYgKHhSYXkueSgpID09IHB0c1sxXS55KCkpIHsKLSAgICAgICAgaWYg
KHhSYXkueCgpIDw9IHB0c1sxXS54KCkpIHsKLSAgICAgICAgICAgIGFtYmlndW91cyA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIEZ1bGwgbGluZSBzZWdtZW50IGV2YWx1YXRpb24KLSAgICBmbG9h
dCBkZWx0YVkgPSBwdHNbMV0ueSgpIC0gcHRzWzBdLnkoKTsKLSAgICBmbG9hdCBkZWx0YVggPSBw
dHNbMV0ueCgpIC0gcHRzWzBdLngoKTsKLSAgICBmbG9hdCBzbG9wZSA9IGRlbHRhWSAvIGRlbHRh
WDsKLSAgICBmbG9hdCBiID0gcHRzWzBdLnkoKSAtIHNsb3BlICogcHRzWzBdLngoKTsKLSAgICAv
LyBTb2x2ZSBmb3IgeCBjb29yZGluYXRlIGF0IHkgPSB4UmF5LnkoKQotICAgIGZsb2F0IHggPSAo
eFJheS55KCkgLSBiKSAvIHNsb3BlOwotICAgIHJldHVybiB4UmF5LngoKSA8PSB4OwotfQotCi1p
bnQgbnVtWFJheUNyb3NzaW5nc0ZvckN1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0
UG9pbnQgY3ViaWNbNF0sIGJvb2wmIGFtYmlndW91cykKLXsKLSAgICBpbnQgbnVtQ3Jvc3Npbmdz
ID0gMDsKLSAgICBGbG9hdFBvaW50IG1vbm90b25pY0N1Ymljc1sxMF07Ci0gICAgaW50IG51bU1v
bm90b25pY0N1YmljcyA9IDEgKyBjaG9wQ3ViaWNBdFlFeHRyZW1hKGN1YmljLCBtb25vdG9uaWND
dWJpY3MpOwotICAgIGFtYmlndW91cyA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQqIG1vbm90b25p
Y0N1Ymljc1BvaW50ZXIgPSAmbW9ub3RvbmljQ3ViaWNzWzBdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtTW9ub3RvbmljQ3ViaWNzOyArK2kpIHsKLSAgICAgICAgaWYgKHhSYXlDcm9zc2Vz
TW9ub3RvbmljQ3ViaWMoeFJheSwgbW9ub3RvbmljQ3ViaWNzUG9pbnRlciwgYW1iaWd1b3VzKSkK
LSAgICAgICAgICAgICsrbnVtQ3Jvc3NpbmdzOwotICAgICAgICBpZiAoYW1iaWd1b3VzKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgKz0gMzsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bUNyb3NzaW5nczsKLX0KLQotLyoKLSAqIEJhc2VkIG9uIEMg
Y29kZSBmcm9tIHRoZSBhcnRpY2xlCi0gKiAiVGVzdGluZyB0aGUgQ29udmV4aXR5IG9mIGEgUG9s
eWdvbiIKLSAqIGJ5IFBldGVyIFNjaG9ybiBhbmQgRnJlZGVyaWNrIEZpc2hlciwKLSAqIChzY2hv
cm5AaW5mLmV0aHouY2gsIGZyZWRAa3BjLmNvbSkKLSAqIGluICJHcmFwaGljcyBHZW1zIElWIiwg
QWNhZGVtaWMgUHJlc3MsIDE5OTQKLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21w
YXJlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCi17Ci0gICAgcmV0dXJuIChkZWx0YS53aWR0aCgp
ID4gMCkgPyAtMSA6IC8qIHggY29vcmQgZGlmZiwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KLSAg
ICAgICAgICAgKGRlbHRhLndpZHRoKCkgPCAwKSA/ICAxIDogLyogeCBjb29yZCBkaWZmLCBzZWNv
bmQgcHQgPCBmaXJzdCBwdCAqLwotICAgICAgICAgICAoZGVsdGEuaGVpZ2h0KCkgPiAwKSA/IC0x
IDogLyogeCBjb29yZCBzYW1lLCBzZWNvbmQgcHQgPiBmaXJzdCBwdCAqLwotICAgICAgICAgICAo
ZGVsdGEuaGVpZ2h0KCkgPCAwKSA/ICAxIDogLyogeCBjb29yZCBzYW1lLCBzZWNvbmQgcHQgPiBm
aXJzdCBwdCAqLwotICAgICAgICAgICAwOyAvKiBzZWNvbmQgcHQgZXF1YWxzIGZpcnN0IHBvaW50
ICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmV4Q3Jvc3MoY29uc3QgRmxvYXRTaXpl
JiBwLCBjb25zdCBGbG9hdFNpemUmIHEpCi17Ci0gICAgcmV0dXJuIHAud2lkdGgoKSAqIHEuaGVp
Z2h0KCkgLSBwLmhlaWdodCgpICogcS53aWR0aCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
Y29udmV4Q2hlY2tUcmlwbGUoY29uc3QgRmxvYXRTaXplJiBkY3VyLCBjb25zdCBGbG9hdFNpemUm
IGRwcmV2LCBpbnQqIGN1ckRpciwgaW50KiBkaXJDaGFuZ2VzLCBpbnQqIGFuZ2xlU2lnbikKLXsK
LSAgICBpbnQgdGhpc0RpciA9IGNvbnZleENvbXBhcmUoZGN1cik7Ci0gICAgaWYgKHRoaXNEaXIg
PT0gLSpjdXJEaXIpCi0gICAgICAgICsrKmRpckNoYW5nZXM7Ci0gICAgKmN1ckRpciA9IHRoaXNE
aXI7Ci0gICAgZmxvYXQgY3Jvc3MgPSBjb252ZXhDcm9zcyhkcHJldiwgZGN1cik7Ci0gICAgaWYg
KGNyb3NzID4gMCkgewotICAgICAgICBpZiAoKmFuZ2xlU2lnbiA9PSAtMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgKmFuZ2xlU2lnbiA9IDE7Ci0gICAgfSBlbHNlIGlmIChj
cm9zcyA8IDApIHsKLSAgICAgICAgaWYgKCphbmdsZVNpZ24gPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgKmFuZ2xlU2lnbiA9IC0xOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywgaW50
IG5WZXJ0aWNlcykKLXsKLSAgICBpbnQgZGlyQ2hhbmdlcyA9IDAsIGFuZ2xlU2lnbiA9IDA7Ci0g
ICAgRmxvYXRQb2ludCBzZWNvbmQsIHRoaXJkOwotICAgIEZsb2F0U2l6ZSBkcHJldiwgZGN1cjsK
LQotICAgIC8qIEdldCBkaWZmZXJlbnQgcG9pbnQsIHJldHVybiBpZiBsZXNzIHRoYW4gMyBkaWZm
IHBvaW50cy4gKi8KLSAgICBpZiAoblZlcnRpY2VzIDwgMykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGludCBpID0gMTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzZWNvbmQgPSB2
ZXJ0aWNlc1tpKytdOwotICAgICAgICBkcHJldiA9IHNlY29uZCAtIHZlcnRpY2VzWzBdOwotICAg
ICAgICBpZiAoZHByZXYud2lkdGgoKSB8fCBkcHJldi5oZWlnaHQoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvKiBDaGVjayBpZiBvdXQgb2YgcG9pbnRzLiBDaGVjayBoZXJlIHRvIGF2
b2lkIHNsb3dpbmcgZG93biBjYXNlcwotICAgICAgICAgKiB3aXRob3V0IHJlcGVhdGVkIHBvaW50
cy4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChpID49IG5WZXJ0aWNlcykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRmxvYXRQb2ludCBzYXZlU2Vjb25kID0gc2Vjb25k
OwotICAgIGludCBjdXJEaXIgPSBjb252ZXhDb21wYXJlKGRwcmV2KTsgICAgICAgIC8qIEZpbmQg
aW5pdGlhbCBkaXJlY3Rpb24gKi8KLSAgICB3aGlsZSAoaSA8IG5WZXJ0aWNlcykgewotICAgICAg
ICAvKiBHZXQgZGlmZmVyZW50IHBvaW50LCBicmVhayBpZiBubyBtb3JlIHBvaW50cyAqLwotICAg
ICAgICB0aGlyZCA9IHZlcnRpY2VzW2krK107Ci0gICAgICAgIGRjdXIgPSB0aGlyZCAtIHNlY29u
ZDsKLSAgICAgICAgaWYgKCFkY3VyLndpZHRoKCkgJiYgIWRjdXIuaGVpZ2h0KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBDaGVjayBjdXJyZW50IHRocmVlIHBvaW50cyAq
LwotICAgICAgICBpZiAoIWNvbnZleENoZWNrVHJpcGxlKGRjdXIsIGRwcmV2LCAmY3VyRGlyLCAm
ZGlyQ2hhbmdlcywgJmFuZ2xlU2lnbikpIAotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzZWNvbmQgPSB0aGlyZDsgICAgIC8qIFJlbWVtYmVyIHB0ciB0byBjdXJyZW50IHBvaW50
LiAqLwotICAgICAgICBkcHJldiA9IGRjdXI7ICAgICAgIC8qIFJlbWVtYmVyIGN1cnJlbnQgZGVs
dGEuICovCi0gICAgfQotCi0gICAgLyogTXVzdCBjaGVjayBmb3IgZGlyZWN0aW9uIGNoYW5nZXMg
ZnJvbSBsYXN0IHZlcnRleCBiYWNrIHRvIGZpcnN0ICovCi0gICAgdGhpcmQgPSB2ZXJ0aWNlc1sw
XTsgICAgICAgICAgICAgICAgICAvKiBQcmVwYXJlIGZvciAnQ29udmV4Q2hlY2tUcmlwbGUnICov
Ci0gICAgZGN1ciA9IHRoaXJkIC0gc2Vjb25kOwotICAgIGlmIChjb252ZXhDb21wYXJlKGRjdXIp
KSB7Ci0gICAgICAgIGlmICghY29udmV4Q2hlY2tUcmlwbGUoZGN1ciwgZHByZXYsICZjdXJEaXIs
ICZkaXJDaGFuZ2VzLCAmYW5nbGVTaWduKSkgCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHNlY29uZCA9IHRoaXJkOyAgICAgLyogUmVtZW1iZXIgcHRyIHRvIGN1cnJlbnQgcG9p
bnQuICovCi0gICAgICAgIGRwcmV2ID0gZGN1cjsgICAgICAgLyogUmVtZW1iZXIgY3VycmVudCBk
ZWx0YS4gKi8KLSAgICB9Ci0KLSAgICAvKiBhbmQgY2hlY2sgZm9yIGRpcmVjdGlvbiBjaGFuZ2Vz
IGJhY2sgdG8gc2Vjb25kIHZlcnRleCAqLwotICAgIGRjdXIgPSBzYXZlU2Vjb25kIC0gc2Vjb25k
OwotICAgIGlmICghY29udmV4Q2hlY2tUcmlwbGUoZGN1ciwgZHByZXYsICZjdXJEaXIsICZkaXJD
aGFuZ2VzLCAmYW5nbGVTaWduKSkgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8qIERl
Y2lkZSBvbiBwb2x5Z29uIHR5cGUgZ2l2ZW4gYWNjdW11bGF0ZWQgc3RhdHVzICovCi0gICAgaWYg
KGRpckNoYW5nZXMgPiAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYW5nbGVT
aWduID4gMCB8fCBhbmdsZVNpZ24gPCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIExvb3BCbGlubk1hdGhVdGlscwotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzNjFkOTAxMzQxNGVkOWJhNTU5ZWMwN2JkYjI3ZTQ1YjE5MTc3ODg3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb29wQmxpbm5NYXRoVXRpbHNfaAotI2Rl
ZmluZSBMb29wQmxpbm5NYXRoVXRpbHNfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBVc2UgYSBuYW1lc3BhY2UgZm9yIHRoZXNlIHNvIHdlIGNhbiBlYXNpbHkg
aW1wb3J0IHRoZW0uCi1uYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzIHsKLQotZmxvYXQgcm91
bmRUb1plcm8oZmxvYXQgdmFsKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQb2ludCYg
djAsIGNvbnN0IEZsb2F0UG9pbnQmIHYxKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQ
b2ludDNEJiB2MCwgY29uc3QgRmxvYXRQb2ludDNEJiB2MSk7Ci1ib29sIGFwcHJveEVxdWFsKGZs
b2F0IGYwLCBmbG9hdCBmMSk7Ci0KLS8vIERldGVybWluZXMgd2hldGhlciB0aGUgbGluZSBzZWdt
ZW50IGJldHdlZW4gKHAxLCBxMSkgaW50ZXJzZWN0cwotLy8gdGhhdCBiZXR3ZWVuIChwMiwgcTIp
LgotYm9vbCBsaW5lc0ludGVyc2VjdChjb25zdCBGbG9hdFBvaW50JiBwMSwKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBx
Mik7Ci0KLS8vIERldGVybWluZXMgd2hldGhlciAicG9pbnQiIGlzIGluc2lkZSB0aGUgMkQgdHJp
YW5nbGUgZGVmaW5lZCBieQotLy8gdmVydGljZXMgYSwgYiwgYW5kIGMuIFRoaXMgdGVzdCBkZWZp
bmVzIHRoYXQgcG9pbnRzIGV4YWN0bHkgb24gYW4KLS8vIGVkZ2UgYXJlIG5vdCBjb25zaWRlcmVk
IHRvIGJlIGluc2lkZSB0aGUgdHJpYW5nbGUuCi1ib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IGEsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYyk7Ci0KLS8vIERldGVybWluZXMgd2hldGhl
ciB0aGUgdHJpYW5nbGVzIGRlZmluZWQgYnkgdGhlIHBvaW50cyAoYTEsIGIxLCBjMSkKLS8vIGFu
ZCAoYTIsIGIyLCBjMikgb3ZlcmxhcC4gVGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBp
cyB0aGF0Ci0vLyBpZiB0aGUgdHdvIHRyaWFuZ2xlcyBvbmx5IHNoYXJlIGFuIGFkamFjZW50IGVk
Z2Ugb3IgdmVydGV4LCB0aGV5Ci0vLyBhcmUgbm90IGNvbnNpZGVyZWQgdG8gb3ZlcmxhcC4KLWJv
b2wgdHJpYW5nbGVzT3ZlcmxhcChjb25zdCBGbG9hdFBvaW50JiBhMSwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBjMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBhMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMiwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMik7Ci0KLS8vIEdpdmVuIGEgc3Jj
IGN1YmljIGJlemllciwgY2hvcHMgaXQgYXQgdGhlIHNwZWNpZmllZCB0IHZhbHVlLAotLy8gd2hl
cmUgMCA8IHQgPCAxLCBhbmQgcmV0dXJucyB0aGUgdHdvIG5ldyBjdWJpY3MgaW4gZHN0WzAuLjNd
Ci0vLyBhbmQgZHN0WzMuLjZdLgotdm9pZCBjaG9wQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50IHNy
Y1s0XSwgRmxvYXRQb2ludCBkc3RbN10sIGZsb2F0IHQpOwotCi0vLyAiWC1SYXkiIHF1ZXJpZXMu
IEFuIFhSYXkgaXMgYSBoYWxmLWxpbmUgb3JpZ2luYXRpbmcgYXQgdGhlIGdpdmVuCi0vLyBwb2lu
dCBhbmQgZXh0ZW5kaW5nIHRvIHg9K2luZmluaXR5LgotdHlwZWRlZiBGbG9hdFBvaW50IFhSYXk7
Ci0KLS8vIEdpdmVuIGFuIGFyYml0cmFyeSBjdWJpYyBiZXppZXIsIHJldHVybiB0aGUgbnVtYmVy
IG9mIHRpbWVzIGFuIFhSYXkKLS8vIGNyb3NzZXMgdGhlIGN1YmljLiBWYWxpZCByZXR1cm4gdmFs
dWVzIGFyZSBbMC4uM10uCi0vLwotLy8gQnkgZGVmaW5pdGlvbiB0aGUgY3ViaWMgaXMgb3BlbiBh
dCB0aGUgc3RhcnRpbmcgcG9pbnQ7IGluIG90aGVyCi0vLyB3b3JkcywgaWYgcHQuZlkgaXMgZXF1
aXZhbGVudCB0byBjdWJpY1swXS5mWSwgYW5kIHB0LmZYIGlzIHRvIHRoZQotLy8gbGVmdCBvZiB0
aGUgY3VydmUsIHRoZSBsaW5lIGlzIG5vdCBjb25zaWRlcmVkIHRvIGNyb3NzIHRoZSBjdXJ2ZSwK
LS8vIGJ1dCBpZiBpdCBpcyBlcXVhbCB0byBjdWJpY1szXS5mWSB0aGVuIGl0IGlzIGNvbnNpZGVy
ZWQgdG8KLS8vIGNyb3NzLgotLy8KLS8vIE91dGdvaW5nICJhbWJpZ3VvdXMiIGFyZ3VtZW50IGlu
ZGljYXRlcyB3aGV0aGVyIHRoZSBhbnN3ZXIgaXMgYW1iaWd1b3VzCi0vLyBiZWNhdXNlIHRoZSBx
dWVyeSBvY2N1cnJlZCBleGFjdGx5IGF0IG9uZSBvZiB0aGUgZW5kcG9pbnRzJyB5Ci0vLyBjb29y
ZGluYXRlcyBvciBhdCBhIHRhbmdlbnQgcG9pbnQsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyIHF1
ZXJ5IHkKLS8vIGNvb3JkaW5hdGUgaXMgcHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgotaW50IG51
bVhSYXlDcm9zc2luZ3NGb3JDdWJpYyhjb25zdCBYUmF5JiB4UmF5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50IGN1YmljWzRdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sJiBhbWJpZ3VvdXMpOwotCi0vLyBHaXZlbiBhIGxpbmUgc2VnbWVu
dCBmcm9tIGxpbmVFbmRwb2ludHNbMF0gdG8gbGluZUVuZHBvaW50c1sxXSwgYW5kIGFuCi0vLyBY
UmF5LCByZXR1cm5zIHRydWUgaWYgdGhleSBpbnRlcnNlY3QuIE91dGdvaW5nICJhbWJpZ3VvdXMi
IGFyZ3VtZW50Ci0vLyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYW5zd2VyIGlzIGFtYmlndW91cyBi
ZWNhdXNlIHRoZSBxdWVyeSBvY2N1cnJlZAotLy8gZXhhY3RseSBhdCBvbmUgb2YgdGhlIGVuZHBv
aW50cycgeSBjb29yZGluYXRlcywgaW5kaWNhdGluZyB0aGF0IGFub3RoZXIKLS8vIHF1ZXJ5IHkg
Y29vcmRpbmF0ZSBpcyBwcmVmZXJyZWQgZm9yIHJvYnVzdG5lc3MuCi1ib29sIHhSYXlDcm9zc2Vz
TGluZShjb25zdCBYUmF5JiB4UmF5LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCBsaW5lRW5kcG9pbnRzWzJdLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCYgYW1iaWd1
b3VzKTsKLQotCi1ib29sIGlzQ29udmV4KGNvbnN0IEZsb2F0UG9pbnQqIHZlcnRpY2VzLCBpbnQg
blZlcnRpY2VzKTsKLQotfSAvLyBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExvb3BCbGlubk1hdGhVdGlsc19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0
aENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5QYXRoQ2FjaGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWYxNWU1M2Qy
YzRjZGZiMTM2NGE1MGZkYTYxMTEzYTUwZjFmYmVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5QYXRoQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxvb3BCbGlublBhdGhDYWNo
ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvb3BCbGlublBhdGhDYWNoZTo6TG9vcEJs
aW5uUGF0aENhY2hlKCkKLXsKLX0KLQotTG9vcEJsaW5uUGF0aENhY2hlOjp+TG9vcEJsaW5uUGF0
aENhY2hlKCkKLXsKLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoQ2FjaGU6OmFkZFZlcnRleChmbG9h
dCB4LCBmbG9hdCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBr
LCBmbG9hdCBsLCBmbG9hdCBtKQotewotICAgIG1fdmVydGljZXMuYXBwZW5kKHgpOwotICAgIG1f
dmVydGljZXMuYXBwZW5kKHkpOwotICAgIG1fdGV4Y29vcmRzLmFwcGVuZChrKTsKLSAgICBtX3Rl
eGNvb3Jkcy5hcHBlbmQobCk7Ci0gICAgbV90ZXhjb29yZHMuYXBwZW5kKG0pOwotfQotCi12b2lk
IExvb3BCbGlublBhdGhDYWNoZTo6Y2xlYXIoKQotewotICAgIG1fdmVydGljZXMuY2xlYXIoKTsK
LSAgICBtX3RleGNvb3Jkcy5jbGVhcigpOwotICAgIG1faW50ZXJpb3JWZXJ0aWNlcy5jbGVhcigp
OwotI2lmZGVmIExPT1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotICAg
IG1faW50ZXJpb3JFZGdlVmVydGljZXMuY2xlYXIoKTsKLSNlbmRpZiAvLyBMT09QX0JMSU5OX1BB
VEhfQ0FDSEVfREVCVUdfSU5URVJJT1JfRURHRVMKLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoQ2Fj
aGU6OmFkZEludGVyaW9yVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9pbnRlcmlv
clZlcnRpY2VzLmFwcGVuZCh4KTsKLSAgICBtX2ludGVyaW9yVmVydGljZXMuYXBwZW5kKHkpOwot
fQotCi0jaWZkZWYgTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VTCi11
bnNpZ25lZCBMb29wQmxpbm5QYXRoQ2FjaGU6Om51bWJlck9mSW50ZXJpb3JFZGdlVmVydGljZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtX2ludGVyaW9yRWRnZVZlcnRpY2VzLnNpemUoKSAvIDI7
Ci19Ci0KLWNvbnN0IGZsb2F0KiBMb29wQmxpbm5QYXRoQ2FjaGU6OmludGVyaW9yRWRnZVZlcnRp
Y2VzKCkgY29uc3QKLXsKLSAgICBpZiAoIW51bWJlck9mSW50ZXJpb3JFZGdlVmVydGljZXMoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1faW50ZXJpb3JFZGdlVmVydGljZXMuZGF0
YSgpOwotfQotCi12b2lkIExvb3BCbGlublBhdGhDYWNoZTo6YWRkSW50ZXJpb3JFZGdlVmVydGV4
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9pbnRlcmlvckVkZ2VWZXJ0aWNlcy5hcHBlbmQo
eCk7Ci0gICAgbV9pbnRlcmlvckVkZ2VWZXJ0aWNlcy5hcHBlbmQoeSk7Ci19Ci0jZW5kaWYgLy8g
TE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VTCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDIxZDI0NjI0ODNjMzQ3YjNkNzVmZTNlNTQwYTZiYTRkYjUyOTVmZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aENhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTG9vcEJsaW5uUGF0aENhY2hlX2gKLSNkZWZpbmUg
TG9vcEJsaW5uUGF0aENhY2hlX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIGNhY2hl
IG9mIHRoZSBwcm9jZXNzZWQgdHJpYW5nbGUgbWVzaCBmb3IgYSBnaXZlbiBwYXRoLiBCZWNhdXNl
IHRoZXNlCi0vLyBtaWdodCBiZSBleHBlbnNpdmUgdG8gYWxsb2NhdGUgKHVzaW5nIG1hbGxvYy9m
cmVlIGludGVybmFsbHkpLCBpdCBpcwotLy8gcmVjb21tZW5kZWQgdG8gdHJ5IHRvIHJldXNlIHRo
ZW0gd2hlbiBwb3NzaWJsZS4KLQotLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gb2J0YWlu
IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGVkZ2VzCi0vLyBmYWNpbmcgdGhlIGludGVy
aW9yIHJlZ2lvbiBvZiB0aGUgbWVzaC4KLS8vICNkZWZpbmUgTE9PUF9CTElOTl9QQVRIX0NBQ0hF
X0RFQlVHX0lOVEVSSU9SX0VER0VTCi0KLWNsYXNzIExvb3BCbGlublBhdGhDYWNoZSB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTG9vcEJsaW5uUGF0aENhY2hlKTsKLXB1YmxpYzoKLSAgICBM
b29wQmxpbm5QYXRoQ2FjaGUoKTsKLSAgICB+TG9vcEJsaW5uUGF0aENhY2hlKCk7Ci0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy5zaXpl
KCkgLyAyOyB9Ci0KLSAgICAvLyBHZXQgdGhlIGJhc2UgcG9pbnRlciB0byB0aGUgdmVydGV4IGlu
Zm9ybWF0aW9uLiBUaGVyZSBhcmUgdHdvCi0gICAgLy8gY29vcmRpbmF0ZXMgcGVyIHZlcnRleC4g
VGhpcyBwb2ludGVyIGlzIHZhbGlkIHVudGlsIHRoZSBjYWNoZSBpcwotICAgIC8vIGNsZWFyZWQg
b3IgYW5vdGhlciB2ZXJ0ZXggaXMgYWRkZWQuIFJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8KLSAg
ICAvLyB2ZXJ0aWNlcyBpbiB0aGUgbWVzaC4KLSAgICBjb25zdCBmbG9hdCogdmVydGljZXMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFudW1iZXJPZlZlcnRpY2VzKCkpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fdmVydGljZXMuZGF0YSgpOwotICAgIH0KLQot
ICAgIC8vIEdldCB0aGUgYmFzZSBwb2ludGVyIHRvIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGUgaW5m
b3JtYXRpb24uIFRoZXJlCi0gICAgLy8gYXJlIHRocmVlIGNvb3JkaW5hdGVzIHBlciB2ZXJ0ZXgu
IFRoaXMgcG9pbnRlciBpcyB2YWxpZCB1bnRpbCB0aGUKLSAgICAvLyBjYWNoZSBpcyBjbGVhcmVk
IG9yIGFub3RoZXIgdmVydGV4IGlzIGFkZGVkLiBSZXR1cm5zIDAgaWYKLSAgICAvLyB0aGVyZSBh
cmUgbm8gdmVydGljZXMgaW4gdGhlIG1lc2guCi0gICAgY29uc3QgZmxvYXQqIHRleGNvb3Jkcygp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW51bWJlck9mVmVydGljZXMoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV90ZXhjb29yZHMuZGF0YSgpOwotICAgIH0K
LQotICAgIC8vIEFkZHMgYSB2ZXJ0ZXgncyBpbmZvcm1hdGlvbiB0byB0aGUgY2FjaGUuIFRoZSBm
aXJzdCB0d28gYXJndW1lbnRzCi0gICAgLy8gYXJlIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIG9m
IHRoZSB2ZXJ0ZXggb24gdGhlIHBsYW5lOyB0aGUgbGFzdAotICAgIC8vIHRocmVlIGFyZ3VtZW50
cyBhcmUgdGhlIGN1YmljIHRleHR1cmUgY29vcmRpbmF0ZXMgYXNzb2NpYXRlZCB3aXRoCi0gICAg
Ly8gdGhpcyB2ZXJ0ZXguCi0gICAgdm9pZCBhZGRWZXJ0ZXgoZmxvYXQgeCwgZmxvYXQgeSwKLSAg
ICAgICAgICAgICAgICAgICBmbG9hdCAvKmsqLywgZmxvYXQgLypsKi8sIGZsb2F0IC8qbSovKTsK
LQotICAgIHVuc2lnbmVkIG51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJu
IG1faW50ZXJpb3JWZXJ0aWNlcy5zaXplKCkgLyAyOyB9Ci0KLSAgICAvLyBCYXNlIHBvaW50ZXIg
dG8gdGhlIGludGVyaW9yIHZlcnRpY2VzOyB0d28gY29vcmRpbmF0ZXMgcGVyCi0gICAgLy8gdmVy
dGV4LCB3aGljaCBjYW4gYmUgZHJhd24gYXMgR0xfVFJJQU5HTEVTLiBSZXR1cm5zIDAgaWYgdGhl
cmUKLSAgICAvLyBhcmUgbm8gaW50ZXJpb3IgdmVydGljZXMgaW4gdGhlIG1lc2guCi0gICAgY29u
c3QgZmxvYXQqIGludGVyaW9yVmVydGljZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFu
dW1iZXJPZkludGVyaW9yVmVydGljZXMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV9pbnRlcmlvclZlcnRpY2VzLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFk
ZEludGVyaW9yVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpOwotCi0gICAgLy8gQ2xlYXJzIGFsbCBv
ZiB0aGUgc3RvcmVkIHZlcnRleCBpbmZvcm1hdGlvbiBpbiB0aGlzIGNhY2hlLgotICAgIHZvaWQg
Y2xlYXIoKTsKLQotI2lmZGVmIExPT1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9F
REdFUwotICAgIC8vIFRoZSBudW1iZXIgb2YgaW50ZXJpb3IgZWRnZSB2ZXJ0aWNlcwotICAgIHVu
c2lnbmVkIG51bWJlck9mSW50ZXJpb3JFZGdlVmVydGljZXMoKSBjb25zdDsKLSAgICAvLyBCYXNl
IHBvaW50ZXIgdG8gdGhlIGludGVyaW9yIHZlcnRpY2VzOyB0d28gY29vcmRpbmF0ZXMgcGVyCi0g
ICAgLy8gdmVydGV4LCB3aGljaCBjYW4gYmUgZHJhd24gYXMgR0xfTElORVMuIFJldHVybnMgMCBp
ZiB0aGVyZSBhcmUKLSAgICAvLyBubyBpbnRlcmlvciBlZGdlIHZlcnRpY2VzIGluIHRoZSBtZXNo
LgotICAgIGNvbnN0IGZsb2F0KiBpbnRlcmlvckVkZ2VWZXJ0aWNlcygpIGNvbnN0OwotICAgIHZv
aWQgYWRkSW50ZXJpb3JFZGdlVmVydGV4KGZsb2F0IHgsIGZsb2F0IHkpOwotI2VuZGlmIC8vIExP
T1BfQkxJTk5fUEFUSF9DQUNIRV9ERUJVR19JTlRFUklPUl9FREdFUwotCi1wcml2YXRlOgotICAg
IC8vIFRoZSB0d28tZGltZW5zaW9uYWwgdmVydGljZXMgb2YgdGhlIHRyaWFuZ2xlIG1lc2guCi0g
ICAgVmVjdG9yPGZsb2F0PiBtX3ZlcnRpY2VzOwotCi0gICAgLy8gVGhlIHRocmVlLWRpbWVuc2lv
bmFsIGN1YmljIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgVmVjdG9yPGZsb2F0PiBtX3RleGNv
b3JkczsKLQotICAgIFZlY3RvcjxmbG9hdD4gbV9pbnRlcmlvclZlcnRpY2VzOwotCi0jaWZkZWYg
TE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVSSU9SX0VER0VTCi0gICAgLy8gVGhlIGZv
bGxvd2luZyBpcyBvbmx5IGZvciBkZWJ1Z2dpbmcKLSAgICBWZWN0b3I8ZmxvYXQ+IG1faW50ZXJp
b3JFZGdlVmVydGljZXM7Ci0jZW5kaWYgLy8gTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lO
VEVSSU9SX0VER0VTCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBM
b29wQmxpbm5QYXRoQ2FjaGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoUHJvY2Vzc29yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFkODliYzExNzk5ODRiMmYyNmI3ZTJhYzliYmZkZTBlNjA1YzY1
NjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhlIG1haW4gZW50cnkg
cG9pbnQgZm9yIExvb3AgYW5kIEJsaW5uJ3MgR1BVIGFjY2VsZXJhdGVkIGN1cnZlCi0vLyByZW5k
ZXJpbmcgYWxnb3JpdGhtLgotCi0jaWZuZGVmIExvb3BCbGlublBhdGhQcm9jZXNzb3JfaAotI2Rl
ZmluZSBMb29wQmxpbm5QYXRoUHJvY2Vzc29yX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBX
ZSB1c2UgYSBuYW1lc3BhY2UgZm9yIGNsYXNzZXMgd2hpY2ggYXJlIHNpbXBseSBpbXBsZW1lbnRh
dGlvbgotLy8gZGV0YWlscyBvZiB0aGUgYWxnb3JpdGhtIGJ1dCB3aGljaCB3ZSBuZWVkIHRvIHJl
ZmVyZW5jZSBmcm9tIHRoZQotLy8gY2xhc3MgZGVmaW5pdGlvbi4KLW5hbWVzcGFjZSBMb29wQmxp
bm5QYXRoUHJvY2Vzc29ySW1wbGVtZW50YXRpb24gewotCi1jbGFzcyBDb250b3VyOwotY2xhc3Mg
U2VnbWVudDsKLQotfSAvLyBuYW1lc3BhY2UgTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVu
dGF0aW9uCi0KLWNsYXNzIFBhdGg7Ci1jbGFzcyBMb29wQmxpbm5QYXRoQ2FjaGU7Ci1jbGFzcyBQ
T0RBcmVuYTsKLQotLy8gVGhlIExvb3BCbGlublBhdGhQcm9jZXNzb3IgdHVybnMgYSBQYXRoIChh
c3N1bWVkIHRvIGNvbnRhaW4gb25lIG9yCi0vLyBtb3JlIGNsb3NlZCByZWdpb25zKSBpbnRvIGEg
c2V0IG9mIGV4dGVyaW9yIGFuZCBpbnRlcmlvciB0cmlhbmdsZXMsCi0vLyBzdG9yZWQgaW4gdGhl
IExvb3BCbGlublBhdGhDYWNoZS4gVGhlIGV4dGVyaW9yIHRyaWFuZ2xlcyBoYXZlCi0vLyBhc3Nv
Y2lhdGVkIDNEIHRleHR1cmUgY29vcmRpbmF0ZXMgd2hpY2ggYXJlIHVzZWQgdG8gZXZhbHVhdGUg
dGhlCi0vLyBjdXJ2ZSdzIGluc2lkZS9vdXRzaWRlIGZ1bmN0aW9uIG9uIGEgcGVyLXBpeGVsIGJh
c2lzLiBUaGUgaW50ZXJpb3IKLS8vIHRyaWFuZ2xlcyBhcmUgZmlsbGVkIHdpdGggMTAwJSBvcGFj
aXR5LgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgZmlsbCBzdHlsZSBhbmQgbWFuYWdlbWVudCBvZiBt
dWx0aXBsZSBsYXllcnMgYXJlCi0vLyBzZXBhcmF0ZSBjb25jZXJucywgaGFuZGxlZCBhdCBhIGhp
Z2hlciBsZXZlbCB3aXRoIHNoYWRlcnMgYW5kCi0vLyBwb2x5Z29uIG9mZnNldHMuCi1jbGFzcyBM
b29wQmxpbm5QYXRoUHJvY2Vzc29yIHsKLXB1YmxpYzoKLSAgICBMb29wQmxpbm5QYXRoUHJvY2Vz
c29yKCk7Ci0gICAgZXhwbGljaXQgTG9vcEJsaW5uUGF0aFByb2Nlc3NvcihQYXNzUmVmUHRyPFBP
REFyZW5hPik7Ci0gICAgfkxvb3BCbGlublBhdGhQcm9jZXNzb3IoKTsKLQotICAgIC8vIFRyYW5z
Zm9ybXMgdGhlIGdpdmVuIHBhdGggaW50byBhIHRyaWFuZ2xlIG1lc2ggZm9yIHJlbmRlcmluZwot
ICAgIC8vIHVzaW5nIExvb3AgYW5kIEJsaW5uJ3Mgc2hhZGVyLCBwbGFjaW5nIHRoZSByZXN1bHQg
aW50byB0aGUgZ2l2ZW4KLSAgICAvLyBMb29wQmxpbm5QYXRoQ2FjaGUuCi0gICAgdm9pZCBwcm9j
ZXNzKGNvbnN0IFBhdGgmLCBMb29wQmxpbm5QYXRoQ2FjaGUmKTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICAvLyBFbmFibGVzIG9yIGRpc2FibGVzIHZlcmJvc2UgbG9nZ2luZyBpbiBkZWJ1ZyBtb2Rl
LgotICAgIHZvaWQgc2V0VmVyYm9zZUxvZ2dpbmcoYm9vbCBvbk9yT2ZmKTsKLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIC8vIEJ1aWxkcyBhIGxpc3Qgb2YgY29udG91cnMgZm9yIHRoZSBnaXZlbiBw
YXRoLgotICAgIHZvaWQgYnVpbGRDb250b3Vycyhjb25zdCBQYXRoJik7Ci0KLSAgICAvLyBEZXRl
cm1pbmVzIHdoZXRoZXIgdGhlIGxlZnQgb3IgcmlnaHQgc2lkZSBvZiBlYWNoIGNvbnRvdXIgc2hv
dWxkCi0gICAgLy8gYmUgZmlsbGVkLgotICAgIHZvaWQgZGV0ZXJtaW5lU2lkZXNUb0ZpbGwoKTsK
LQotICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gKGNsb3NlZCkgY29udG91ciBp
cyBvcmllbnRlZAotICAgIC8vIGNsb2Nrd2lzZSBvciBjb3VudGVyY2xvY2t3aXNlLgotICAgIHZv
aWQgZGV0ZXJtaW5lT3JpZW50YXRpb24oTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0
aW9uOjpDb250b3VyKik7Ci0KLSAgICAvLyBTdWJkaXZpZGVzIHRoZSBjdXJ2ZXMgc28gdGhhdCB0
aGVyZSBhcmUgbm8gb3ZlcmxhcHMgb2YgdGhlCi0gICAgLy8gdHJpYW5nbGVzIGFzc29jaWF0ZWQg
d2l0aCB0aGUgY3VydmVzJyBjb250cm9sIHBvaW50cy4KLSAgICB2b2lkIHN1YmRpdmlkZUN1cnZl
cygpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIGN1cnZlIHN1YmRpdmlz
aW9uLgotICAgIHZvaWQgY29uZGl0aW9uYWxseVN1YmRpdmlkZShMb29wQmxpbm5QYXRoUHJvY2Vz
c29ySW1wbGVtZW50YXRpb246OlNlZ21lbnQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8TG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0aW9uOjpTZWdtZW50
Kj4mIG5leHRTZWdtZW50cyk7Ci0KLSAgICAvLyBUZXNzZWxsYXRlcyB0aGUgaW50ZXJpb3IgcmVn
aW9ucyBvZiB0aGUgY29udG91cnMuCi0gICAgdm9pZCB0ZXNzZWxsYXRlSW50ZXJpb3IoTG9vcEJs
aW5uUGF0aENhY2hlJik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gRm9yIGRlYnVnZ2luZyB0
aGUgb3JpZW50YXRpb24gY29tcHV0YXRpb24uIFJldHVybnMgYWxsIG9mIHRoZQotICAgIC8vIHNl
Z21lbnRzIG92ZXJsYXBwaW5nIHRoZSBnaXZlbiBZIGNvb3JkaW5hdGUuCi0gICAgVmVjdG9yPExv
b3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6U2VnbWVudCo+IGFsbFNlZ21lbnRz
T3ZlcmxhcHBpbmdZKExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6Q29udG91
ciosIGZsb2F0IHgsIGZsb2F0IHkpOwotCi0gICAgLy8gRm9yIGRlYnVnZ2luZyB0aGUgY3VydmUg
c3ViZGl2aXNpb24gYWxnb3JpdGhtLiBTdWJkaXZpZGVzIHRoZQotICAgIC8vIGN1cnZlcyB1c2lu
ZyBhbiBhbHRlcm5hdGUsIHNsb3cgKE8obl4zKSkgYWxnb3JpdGhtLgotICAgIHZvaWQgc3ViZGl2
aWRlQ3VydmVzU2xvdygpOwotI2VuZGlmCi0KLSAgICAvLyBQT0RBcmVuYSBmcm9tIHdoaWNoIHRv
IGFsbG9jYXRlIHRlbXBvcmFyeSBvYmplY3RzLgotICAgIFJlZlB0cjxQT0RBcmVuYT4gbV9hcmVu
YTsKLQotICAgIC8vIFRoZSBjb250b3VycyBkZXNjcmliZWQgYnkgdGhlIHBhdGguCi0gICAgVmVj
dG9yPExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbjo6Q29udG91cio+IG1fY29u
dG91cnM7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gV2hldGhlciBvciBub3QgdG8gcGVyZm9y
bSB2ZXJib3NlIGxvZ2dpbmcgaW4gZGVidWcgbW9kZS4KLSAgICBib29sIG1fdmVyYm9zZUxvZ2dp
bmc7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExv
b3BCbGlublBhdGhQcm9jZXNzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWQ5ZmRjODgzMTMzZjcxODI4YTY5MmU3YzdkNzVjNmJmZjNkZjVmMC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJMb29wQmxpbm5TaGFkZXIuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTG9vcEJsaW5uU2hhZGVyOjpMb29wQmxpbm5TaGFkZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCi0gICAgOiBTaGFk
ZXIoY29udGV4dCwgcHJvZ3JhbSkKLXsKLSAgICBtX3dvcmxkVmlld1Byb2plY3Rpb25Mb2NhdGlv
biA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAid29ybGRWaWV3UHJvamVj
dGlvbiIpOwotICAgIG1fcG9zaXRpb25Mb2NhdGlvbiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sICJwb3NpdGlvbiIpOwotICAgIG1fa2xtTG9jYXRpb24gPSBjb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAia2xtIik7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uU2hh
ZGVyOjp1c2UodW5zaWduZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3Jh
bShtX3Byb2dyYW0pOwotCi0gICAgZmxvYXQgbWF0cml4WzE2XTsKLSAgICBhZmZpbmVUbzR4NCh0
cmFuc2Zvcm0sIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1fd29y
bGRWaWV3UHJvamVjdGlvbkxvY2F0aW9uLCAxIC8qY291bnQqLywgZmFsc2UgLyp0cmFuc3Bvc2Uq
LywgbWF0cml4KTsKLQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0
aW9uTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIHZlcnRl
eE9mZnNldCk7Ci0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0
aW9uTG9jYXRpb24pOwotCi0gICAgaWYgKG1fa2xtTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fa2xtTG9jYXRpb24sIDMsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIGtsbU9mZnNldCk7Ci0gICAgICAgIG1fY29udGV4
dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9rbG1Mb2NhdGlvbik7Ci0gICAgfQotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJkMjRkYzNlN2I3NWJhMGU1MzRmMzJmMzQwZGRkMTM1MDQxNDI0NjAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNoYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTG9vcEJsaW5uU2hhZGVyX2gKLSNkZWZpbmUgTG9v
cEJsaW5uU2hhZGVyX2gKLQotI2luY2x1ZGUgIlNoYWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi1jbGFzcyBMb29wQmxpbm5TaGFkZXIg
OiBwdWJsaWMgU2hhZGVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFJlZ2lvbiB7Ci0gICAgICAgIElu
dGVyaW9yLAotICAgICAgICBFeHRlcmlvcgotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBMb29w
Qmxpbm5TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAg
IC8vIFRoaXMgYXNzdW1lcyB0aGUgdmVydGljZXMgYW5kIGtsbSBjb29yZGluYXRlcyBhcmUgc3Rv
cmVkIGluIHRoZQotICAgIC8vIHNhbWUsIGN1cnJlbnRseSBib3VuZCwgYnVmZmVyIG9iamVjdCwg
Y29udGlndW91c2x5IGFuZCBhdCB0aGUKLSAgICAvLyBzcGVjaWZpZWQgb2Zmc2V0cy4KLSAgICB2
b2lkIHVzZSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fd29ybGRWaWV3UHJvamVj
dGlvbkxvY2F0aW9uOwotICAgIGludCBtX3Bvc2l0aW9uTG9jYXRpb247Ci0gICAgaW50IG1fa2xt
TG9jYXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMb29w
Qmxpbm5TaGFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODBjODY3NzA0ZWJjZGNmM2Y2NjM2YjE3NTM3NWNjN2FhNzU2
OGQwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uU29saWRGaWxsU2hhZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlICJMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCIKLQotI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzT3duUHRyPExvb3BCbGlublNvbGlkRmlsbFNoYWRlcj4gTG9vcEJs
aW5uU29saWRGaWxsU2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTG9vcEJsaW5uU2hhZGVyOjpSZWdpb24gcmVnaW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoYWRlcjo6QW50aWFsaWFzVHlwZSBhbnRpYWxpYXNUeXBlKQotewotICAgIFZlcnRleFR5cGUg
dHlwZSA9IChyZWdpb24gPT0gSW50ZXJpb3IpID8gTG9vcEJsaW5uSW50ZXJpb3IgOiBMb29wQmxp
bm5FeHRlcmlvcjsKLSAgICB1bnNpZ25lZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVWZXJ0ZXgodHlwZSwg
U29saWRGaWxsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVG
cmFnbWVudCh0eXBlLCBTb2xpZEZpbGwsIGFudGlhbGlhc1R5cGUpKTsKLSAgICBpZiAoIXByb2dy
YW0pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTG9v
cEJsaW5uU29saWRGaWxsU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pKTsKLX0KLQotTG9vcEJsaW5u
U29saWRGaWxsU2hhZGVyOjpMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCi0gICAgOiBMb29wQmxpbm5TaGFkZXIoY29u
dGV4dCwgcHJvZ3JhbSkKLXsKLSAgICBtX2NvbG9yTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgImNvbG9yIik7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uU29saWRG
aWxsU2hhZGVyOjp1c2UodW5zaWduZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgTG9vcEJsaW5uU2hhZGVyOjp1c2UodmVydGV4T2Zmc2V0LCBrbG1PZmZzZXQsIHRyYW5z
Zm9ybSk7Ci0KLSAgICBmbG9hdCByZ2JhWzRdOwotICAgIGNvbG9yLmdldFJHQkEocmdiYVswXSwg
cmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9j
b2xvckxvY2F0aW9uLCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFbM10sIHJnYmFb
Ml0gKiByZ2JhWzNdLCByZ2JhWzNdKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublNv
bGlkRmlsbFNoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlublNvbGlkRmlsbFNoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NjMxMmEyNjM0ZGQ2MTg2NmM2NTE3NDJlYTI4OTQ2YTU5MDQwOWFhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExvb3BCbGlublNvbGlkRmlsbFNoYWRlcl9oCi0j
ZGVmaW5lIExvb3BCbGlublNvbGlkRmlsbFNoYWRlcl9oCi0KLSNpbmNsdWRlICJMb29wQmxpbm5T
aGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKLQotY2xhc3MgTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyIDogcHVibGljIExvb3BCbGlublNo
YWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TG9vcEJsaW5uU29saWRGaWxs
U2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBSZWdpb24sIEFudGlhbGlhc1R5cGUp
OwotCi0gICAgLy8gVGhpcyBhc3N1bWVzIHRoZSB2ZXJ0aWNlcyBhbmQga2xtIGNvb3JkaW5hdGVz
IGFyZSBzdG9yZWQgaW4gdGhlCi0gICAgLy8gc2FtZSwgY3VycmVudGx5IGJvdW5kLCBidWZmZXIg
b2JqZWN0LCBjb250aWd1b3VzbHkgYW5kIGF0IHRoZQotICAgIC8vIHNwZWNpZmllZCBvZmZzZXRz
LgotICAgIHZvaWQgdXNlKHVuc2lnbmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOwotCi1wcml2YXRlOgotICAg
IExvb3BCbGlublNvbGlkRmlsbFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHBy
b2dyYW0pOwotCi0gICAgaW50IG1fY29sb3JMb2NhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIExvb3BCbGlublNvbGlkRmlsbFNoYWRlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVy
ZUNvb3Jkcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzJm
ZTE3NWM1NTVkNTBiMDc3N2ExOTY1MTE1ZDVjNzAxNDNmNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQotCi0jaW5jbHVkZSAiTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oIgot
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotTG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVzdWx0IExvb3BCbGlu
blRleHR1cmVDb29yZHM6OmNvbXB1dGUoY29uc3QgTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0
JiBjbGFzc2lmaWNhdGlvbiwgTG9vcEJsaW5uQ29uc3RhbnRzOjpGaWxsU2lkZSBzaWRlVG9GaWxs
KQotewotICAgIC8vIExvb3AgYW5kIEJsaW5uJ3MgZm9ybXVsYXRpb24gc3RhdGVzIHRoYXQgdGhl
IHJpZ2h0IHNpZGUgb2YgdGhlCi0gICAgLy8gY3VydmUgaXMgZGVmaW5lZCB0byBiZSB0aGUgaW5z
aWRlIChmaWxsZWQgcmVnaW9uKSwgYnV0IGZvciBzb21lCi0gICAgLy8gcmVhc29uIGl0IGxvb2tz
IGxpa2Ugd2l0aCB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBwYXJhbWV0ZXJzIHdlCi0gICAgLy8g
YXJlIGZpbGxpbmcgdGhlIGxlZnQgc2lkZSBvZiB0aGUgY3VydmUuIFJlZ2FyZGxlc3MsIGJlY2F1
c2Ugd2UKLSAgICAvLyBjYW4gcmVjZWl2ZSBhcmJpdHJhcmlseSBvcmllbnRlZCBjdXJ2ZXMgYXMg
aW5wdXQsIHdlIG1pZ2h0IGhhdmUKLSAgICAvLyB0byByZXZlcnNlIHRoZSBvcmllbnRhdGlvbiBv
ZiB0aGUgY3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBldmVuCi0gICAgLy8gaW4gY2FzZXMgd2hl
cmUgdGhlIHBhcGVyIGRvZXNuJ3Qgc2F5IGl0IGlzIG5lY2Vzc2FyeS4KLSAgICBib29sIHJldmVy
c2VPcmllbnRhdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBPbmVUaGlyZCA9
IDEuMGYgLyAzLjBmOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBUd29UaGlyZHMgPSAyLjBmIC8g
My4wZjsKLSAgICBMb29wQmxpbm5DbGFzc2lmaWVyOjpDdXJ2ZVR5cGUgY3VydmVUeXBlID0gY2xh
c3NpZmljYXRpb24uY3VydmVUeXBlOwotCi0gICAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVz
dWx0IHJlc3VsdDsKLQotICAgIHN3aXRjaCAoY3VydmVUeXBlKSB7Ci0gICAgY2FzZSBMb29wQmxp
bm5DbGFzc2lmaWVyOjprU2VycGVudGluZTogewotICAgICAgICBmbG9hdCB0MSA9IHNxcnRmKDku
MGYgKiBjbGFzc2lmaWNhdGlvbi5kMiAqIGNsYXNzaWZpY2F0aW9uLmQyIC0gMTIgKiBjbGFzc2lm
aWNhdGlvbi5kMSAqIGNsYXNzaWZpY2F0aW9uLmQzKTsKLSAgICAgICAgZmxvYXQgbHMgPSAzLjBm
ICogY2xhc3NpZmljYXRpb24uZDIgLSB0MTsKLSAgICAgICAgZmxvYXQgbHQgPSA2LjBmICogY2xh
c3NpZmljYXRpb24uZDE7Ci0gICAgICAgIGZsb2F0IG1zID0gMy4wZiAqIGNsYXNzaWZpY2F0aW9u
LmQyICsgdDE7Ci0gICAgICAgIGZsb2F0IG10ID0gbHQ7Ci0gICAgICAgIGZsb2F0IGx0TWludXNM
cyA9IGx0IC0gbHM7Ci0gICAgICAgIGZsb2F0IG10TWludXNNcyA9IG10IC0gbXM7Ci0gICAgICAg
IHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQzRChscyAqIG1zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXMgKiBtcyAq
IG1zKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQb2ludDNEKE9u
ZVRoaXJkICogKDMuMGYgKiBscyAqIG1zIC0gbHMgKiBtdCAtIGx0ICogbXMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIChscyAtIGx0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zICog
bXMgKiAobXMgLSBtdCkpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9h
dFBvaW50M0QoT25lVGhpcmQgKiAobHQgKiAobXQgLSAyLjBmICogbXMpICsgbHMgKiAoMy4wZiAq
IG1zIC0gMi4wZiAqIG10KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsdE1pbnVzTHMgKiBsdE1pbnVzTHMgKiBscywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10TWludXNNcyAqIG10TWludXNNcyAqIG1z
KTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gRmxvYXRQb2ludDNEKGx0TWlu
dXNMcyAqIG10TWludXNNcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0obHRNaW51c0xzICogbHRNaW51c0xzICogbHRNaW51c0xzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0obXRNaW51c01zICogbXRN
aW51c01zICogbXRNaW51c01zKSk7Ci0gICAgICAgIGlmIChjbGFzc2lmaWNhdGlvbi5kMSA8IDAu
MGYpCi0gICAgICAgICAgICByZXZlcnNlT3JpZW50YXRpb24gPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtMb29wOiB7Ci0gICAg
ICAgIGZsb2F0IHQxID0gc3FydGYoNC4wZiAqIGNsYXNzaWZpY2F0aW9uLmQxICogY2xhc3NpZmlj
YXRpb24uZDMgLSAzLjBmICogY2xhc3NpZmljYXRpb24uZDIgKiBjbGFzc2lmaWNhdGlvbi5kMik7
Ci0gICAgICAgIGZsb2F0IGxzID0gY2xhc3NpZmljYXRpb24uZDIgLSB0MTsKLSAgICAgICAgZmxv
YXQgbHQgPSAyLjBmICogY2xhc3NpZmljYXRpb24uZDE7Ci0gICAgICAgIGZsb2F0IG1zID0gY2xh
c3NpZmljYXRpb24uZDIgKyB0MTsKLSAgICAgICAgZmxvYXQgbXQgPSBsdDsKLQotICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoZXRoZXIgdGhlcmUgaXMgYSByZW5kZXJpbmcgYXJ0aWZhY3QgcmVxdWly
aW5nCi0gICAgICAgIC8vIHRoZSBjdXJ2ZSB0byBiZSBzdWJkaXZpZGVkIGJ5IHRoZSBjYWxsZXIu
Ci0gICAgICAgIGZsb2F0IHFsID0gbHMgLyBsdDsKLSAgICAgICAgZmxvYXQgcW0gPSBtcyAvIG10
OwotICAgICAgICBpZiAoMC4wZiA8IHFsICYmIHFsIDwgMS4wZikgewotICAgICAgICAgICAgcmVz
dWx0Lmhhc1JlbmRlcmluZ0FydGlmYWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdC5zdWJk
aXZpc2lvblBhcmFtZXRlclZhbHVlID0gcWw7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKDAuMGYgPCBxbSAmJiBxbSA8IDEuMGYpIHsKLSAgICAg
ICAgICAgIHJlc3VsdC5oYXNSZW5kZXJpbmdBcnRpZmFjdCA9IHRydWU7Ci0gICAgICAgICAgICBy
ZXN1bHQuc3ViZGl2aXNpb25QYXJhbWV0ZXJWYWx1ZSA9IHFtOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGx0TWludXNMcyA9IGx0IC0gbHM7
Ci0gICAgICAgIGZsb2F0IG10TWludXNNcyA9IG10IC0gbXM7Ci0gICAgICAgIHJlc3VsdC5rbG1D
b29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQzRChscyAqIG1zLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIG1zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBtcyAqIG1zKTsKLSAgICAg
ICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkICogKC1s
cyAqIG10IC0gbHQgKiBtcyArIDMuMGYgKiBscyAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1PbmVUaGlyZCAqIGxzICogKGxzICogKG10IC0g
My4wZiAqIG1zKSArIDIuMGYgKiBsdCAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC1PbmVUaGlyZCAqIG1zICogKGxzICogKDIuMGYgKiBtdCAt
IDMuMGYgKiBtcykgKyBsdCAqIG1zKSk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sy
XSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKyBscyAq
ICgzLjBmICogbXMgLSAyLjBmICogbXQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9uZVRoaXJkICogKGx0IC0gbHMpICogKGxzICogKDIuMGYgKiBt
dCAtIDMuMGYgKiBtcykgKyBsdCAqIG1zKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9uZVRoaXJkICogKG10IC0gbXMpICogKGxzICogKG10IC0gMy4w
ZiAqIG1zKSArIDIuMGYgKiBsdCAqIG1zKSk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1szXSA9IEZsb2F0UG9pbnQzRChsdE1pbnVzTHMgKiBtdE1pbnVzTXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKGx0TWludXNMcyAqIGx0TWludXNM
cykgKiBtdE1pbnVzTXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtbHRNaW51c0xzICogbXRNaW51c01zICogbXRNaW51c01zKTsKLSAgICAgICAgcmV2
ZXJzZU9yaWVudGF0aW9uID0gKChjbGFzc2lmaWNhdGlvbi5kMSA+IDAuMGYgJiYgcmVzdWx0Lmts
bUNvb3JkaW5hdGVzWzBdLngoKSA8IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCAoY2xhc3NpZmljYXRpb24uZDEgPCAwLjBmICYmIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXS54
KCkgPiAwLjBmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgTG9vcEJsaW5u
Q2xhc3NpZmllcjo6a0N1c3A6IHsKLSAgICAgICAgZmxvYXQgbHMgPSBjbGFzc2lmaWNhdGlvbi5k
MzsKLSAgICAgICAgZmxvYXQgbHQgPSAzLjBmICogY2xhc3NpZmljYXRpb24uZDI7Ci0gICAgICAg
IGZsb2F0IGxzTWludXNMdCA9IGxzIC0gbHQ7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1swXSA9IEZsb2F0UG9pbnQzRChscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxzICogbHMgKiBscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0
ZXNbMV0gPSBGbG9hdFBvaW50M0QobHMgLSBPbmVUaGlyZCAqIGx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzTWludXNMdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QobHMgLSBUd29UaGly
ZHMgKiBsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxzTWludXNMdCAqIGxzTWludXNMdCAqIGxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMS4wZik7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1szXSA9IEZsb2F0UG9pbnQzRChsc01pbnVzTHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsc01pbnVzTHQgKiBsc01pbnVzTHQgKiBsc01pbnVzTHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjpr
UXVhZHJhdGljOiB7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9p
bnQzRCgwLCAwLCAwKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gRmxvYXRQ
b2ludDNEKE9uZVRoaXJkLCAwLCBPbmVUaGlyZCk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGlu
YXRlc1syXSA9IEZsb2F0UG9pbnQzRChUd29UaGlyZHMsIE9uZVRoaXJkLCBUd29UaGlyZHMpOwot
ICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QoMSwgMSwgMSk7
Ci0gICAgICAgIGlmIChjbGFzc2lmaWNhdGlvbi5kMyA8IDApCi0gICAgICAgICAgICByZXZlcnNl
T3JpZW50YXRpb24gPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIExv
b3BCbGlubkNsYXNzaWZpZXI6OmtMaW5lOgotICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6
a1BvaW50OgotICAgICAgICByZXN1bHQuaXNMaW5lT3JQb2ludCA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChzaWRlVG9GaWxsID09IExvb3BCbGlubkNvbnN0
YW50czo6UmlnaHRTaWRlKQotICAgICAgICByZXZlcnNlT3JpZW50YXRpb24gPSAhcmV2ZXJzZU9y
aWVudGF0aW9uOwotCi0gICAgaWYgKHJldmVyc2VPcmllbnRhdGlvbikgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5h
dGVzW2ldLnNldFgoLXJlc3VsdC5rbG1Db29yZGluYXRlc1tpXS54KCkpOwotICAgICAgICAgICAg
cmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ldLnNldFkoLXJlc3VsdC5rbG1Db29yZGluYXRlc1tpXS55
KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmRlYjNiNGJiMzQ1YTkxZjk2YjNiZDIzMGZjMzVl
NTIxNTg2NmRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29v
cmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb29w
Qmxpbm5UZXh0dXJlQ29vcmRzX2gKLSNkZWZpbmUgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCi0K
LSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVy
LmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5uQ29uc3RhbnRzLmgiCi0KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb21wdXRlcyB0aHJlZS1k
aW1lbnNpb25hbCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgY29udHJvbAotLy8gcG9pbnRz
IG9mIGEgY3ViaWMgY3VydmUgZm9yIHJlbmRlcmluZyB2aWEgdGhlIHNoYWRlciBpbiAiUmVuZGVy
aW5nCi0vLyBWZWN0b3IgQXJ0IG9uIHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2Vt
cyAzLCBDaGFwdGVyIDI1LgotY2xhc3MgTG9vcEJsaW5uVGV4dHVyZUNvb3JkcyB7Ci1wdWJsaWM6
Ci0gICAgLy8gQ29udGFpbmVyIGZvciB0aGUgY3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBhbmQg
b3RoZXIgYXNzb2NpYXRlZAotICAgIC8vIGluZm9ybWF0aW9uLgotICAgIHN0cnVjdCBSZXN1bHQg
ewotICAgICAgICBSZXN1bHQoKQotICAgICAgICAgICAgOiBpc0xpbmVPclBvaW50KGZhbHNlKQot
ICAgICAgICAgICAgLCBoYXNSZW5kZXJpbmdBcnRpZmFjdChmYWxzZSkKLSAgICAgICAgICAgICwg
c3ViZGl2aXNpb25QYXJhbWV0ZXJWYWx1ZSgwLjBmKSB7IH0KLQotICAgICAgICAvLyBUaGUgKGss
IGwsIG0pIHRleHR1cmUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRlZAotICAg
ICAgICAvLyB3aXRoIHRoZSBmb3VyIGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBjdXJ2ZS4K
LSAgICAgICAgRmxvYXRQb2ludDNEIGtsbUNvb3JkaW5hdGVzWzRdOwotCi0gICAgICAgIC8vIElu
ZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJ2ZSBpcyBhIGxpbmUgb3IgYSBwb2ludCwgaW4gd2hpY2gg
Y2FzZQotICAgICAgICAvLyB3ZSBkbyBub3QgbmVlZCB0byBhZGQgaXRzIHRyaWFuZ2xlcyB0byB0
aGUgbWVzaC4KLSAgICAgICAgYm9vbCBpc0xpbmVPclBvaW50OwotCi0gICAgICAgIC8vIEZvciB0
aGUgbG9vcCBjYXNlLCBpbmRpY2F0ZXMgd2hldGhlciBhIHJlbmRlcmluZyBhcnRpZmFjdCB3YXMK
LSAgICAgICAgLy8gZGV0ZWN0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGN1cnZlIG5lZWRzIHRvIGJl
IGZ1cnRoZXIKLSAgICAgICAgLy8gc3ViZGl2aWRlZC4KLSAgICAgICAgYm9vbCBoYXNSZW5kZXJp
bmdBcnRpZmFjdDsKLQotICAgICAgICAvLyBJZiBhIHJlbmRlcmluZyBhcnRpZmFjdCB3aWxsIG9j
Y3VyIGZvciB0aGUgZ2l2ZW4gbG9vcCBjdXJ2ZSwKLSAgICAgICAgLy8gdGhpcyBpcyB0aGUgcGFy
YW1ldGVyIHZhbHVlICgwIDw9IHZhbHVlIDw9IDEpIGF0IHdoaWNoIHRoZQotICAgICAgICAvLyBj
dXJ2ZSBuZWVkcyB0byBiZSBzdWJkaXZpZGVkIHRvIGZpeCB0aGUgYXJ0aWZhY3QuCi0gICAgICAg
IGZsb2F0IHN1YmRpdmlzaW9uUGFyYW1ldGVyVmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIENvbXB1
dGVzIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciBhIGN1YmljIGN1cnZlIHNlZ21lbnQncwot
ICAgIC8vIGNvbnRyb2wgcG9pbnRzLCBnaXZlbiB0aGUgY2xhc3NpZmljYXRpb24gb2YgdGhlIGN1
cnZlIGFzIHdlbGwgYXMKLSAgICAvLyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIHNpZGUgaXMgdG8g
YmUgZmlsbGVkLgotICAgIHN0YXRpYyBSZXN1bHQgY29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFz
c2lmaWVyOjpSZXN1bHQmIGNsYXNzaWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBMb29wQmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOwotCi1wcml2YXRlOgot
ICAgIC8vIFRoaXMgY2xhc3MgZG9lcyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCi0gICAg
TG9vcEJsaW5uVGV4dHVyZUNvb3JkcygpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxM2M1ZWJmODU2YzdkMGRiZDI1ZTJkNzFhYTM4N2E3MDUxYzgxYTY5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLQotI2luY2x1ZGUgIlNoYWRlci5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gc3RhdGljCi12b2lkIFNoYWRlcjo6YWZmaW5lVG8zeDMo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG1hdFs5XSkKLXsKLSAgICBt
YXRbMF0gPSB0cmFuc2Zvcm0uYSgpOwotICAgIG1hdFsxXSA9IHRyYW5zZm9ybS5iKCk7Ci0gICAg
bWF0WzJdID0gMC4wZjsKLSAgICBtYXRbM10gPSB0cmFuc2Zvcm0uYygpOwotICAgIG1hdFs0XSA9
IHRyYW5zZm9ybS5kKCk7Ci0gICAgbWF0WzVdID0gMC4wZjsKLSAgICBtYXRbNl0gPSB0cmFuc2Zv
cm0uZSgpOwotICAgIG1hdFs3XSA9IHRyYW5zZm9ybS5mKCk7Ci0gICAgbWF0WzhdID0gMS4wZjsK
LX0KLQotLy8gc3RhdGljCi12b2lkIFNoYWRlcjo6YWZmaW5lVG80eDQoY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG1hdFsxNl0pCi17Ci0gICAgbWF0WzBdID0gdHJhbnNm
b3JtLmEoKTsKLSAgICBtYXRbMV0gPSB0cmFuc2Zvcm0uYigpOwotICAgIG1hdFsyXSA9IDAuMGY7
Ci0gICAgbWF0WzNdID0gMC4wZjsKLSAgICBtYXRbNF0gPSB0cmFuc2Zvcm0uYygpOwotICAgIG1h
dFs1XSA9IHRyYW5zZm9ybS5kKCk7Ci0gICAgbWF0WzZdID0gMC4wZjsKLSAgICBtYXRbN10gPSAw
LjBmOwotICAgIG1hdFs4XSA9IDAuMGY7Ci0gICAgbWF0WzldID0gMC4wZjsKLSAgICBtYXRbMTBd
ID0gMS4wZjsKLSAgICBtYXRbMTFdID0gMC4wZjsKLSAgICBtYXRbMTJdID0gdHJhbnNmb3JtLmUo
KTsKLSAgICBtYXRbMTNdID0gdHJhbnNmb3JtLmYoKTsKLSAgICBtYXRbMTRdID0gMC4wZjsKLSAg
ICBtYXRbMTVdID0gMS4wZjsKLX0KLQotLy8gc3RhdGljCi11bnNpZ25lZCBTaGFkZXI6OmxvYWRT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IFN0
cmluZyYgc2hhZGVyU291cmNlKQotewotICAgIHVuc2lnbmVkIHNoYWRlciA9IGNvbnRleHQtPmNy
ZWF0ZVNoYWRlcih0eXBlKTsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzaGFkZXJTb3VyY2UpOwotICAgIGNv
bnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICBpbnQgY29tcGlsZVN0YXR1cyA9IDA7
Ci0gICAgY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKLSAgICBpZiAoIWNvbXBpbGVTdGF0dXMpIHsK
LSAgICAgICAgU3RyaW5nIGluZm9Mb2cgPSBjb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRl
cik7Ci0gICAgICAgIExPR19FUlJPUigiJXMiLCBpbmZvTG9nLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLS8vIHN0YXRpYwotdW5zaWduZWQgU2hhZGVy
Ojpsb2FkUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi17
Ci0gICAgdW5zaWduZWQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihjb250ZXh0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwgdmVydGV4U2hhZGVyU291cmNlKTsKLSAgICBpZiAo
IXZlcnRleFNoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRT
aGFkZXIgPSBsb2FkU2hhZGVyKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBpZiAoIWZyYWdtZW50U2hhZGVyKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBwcm9ncmFtID0gY29udGV4dC0+Y3JlYXRl
UHJvZ3JhbSgpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29u
dGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgY29udGV4dC0+
YXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKLSAgICBjb250ZXh0LT5saW5r
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICBpbnQgbGlua1N0YXR1cyA9IDA7Ci0gICAgY29udGV4dC0+
Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxp
bmtTdGF0dXMpOwotICAgIGlmICghbGlua1N0YXR1cykKLSAgICAgICAgY29udGV4dC0+ZGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVy
KTsKLSAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIHJldHVy
biBwcm9ncmFtOwotfQotCi1TaGFkZXI6OlNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgdW5zaWduZWQgcHJvZ3JhbSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9w
cm9ncmFtKHByb2dyYW0pCi17Ci19Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17Ci0gICAgbV9jb250
ZXh0LT5kZWxldGVQcm9ncmFtKG1fcHJvZ3JhbSk7Ci19Ci0KLS8vIHN0YXRpYwotU3RyaW5nIFNo
YWRlcjo6Z2VuZXJhdGVWZXJ0ZXgoU2hhZGVyOjpWZXJ0ZXhUeXBlIHZlcnRleFR5cGUsIFNoYWRl
cjo6RmlsbFR5cGUgZmlsbFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IHN3aXRjaCAodmVydGV4VHlwZSkgewotICAgIGNhc2UgVHdvRGltZW5zaW9uYWw6Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCi0g
ICAgICAgICAgICAiYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG4iKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBMb29wQmxpbm5JbnRlcmlvcjoKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0g
ICAgICAgICAgICAidW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb247XG4iCi0gICAgICAg
ICAgICAiYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBMb29wQmxpbm5FeHRlcmlvcjoKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAg
ICAgICAidW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb247XG4iCi0gICAgICAgICAgICAi
YXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG4iCi0gICAgICAgICAgICAiYXR0cmlidXRlIHZlYzMg
a2xtO1xuIgotICAgICAgICAgICAgInZhcnlpbmcgdmVjMyB2X2tsbTtcbiIpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoZmlsbFR5cGUgPT0gVGV4dHVyZUZpbGwpIHsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAidW5pZm9ybSBtYXQzIHRleE1hdHJpeDtc
biIKLSAgICAgICAgICAgICJ2YXJ5aW5nIHZlYzMgdGV4Q29vcmQ7XG4iKTsKLSAgICB9Ci0KLSAg
ICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgInZvaWQgbWFpbigpIHtcbiIpOwotCi0gICAgaWYg
KHZlcnRleFR5cGUgPT0gVHdvRGltZW5zaW9uYWwpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
Ci0gICAgICAgICAgICAiZ2xfUG9zaXRpb24gPSB2ZWM0KG1hdHJpeCAqIHZlYzMocG9zaXRpb24s
IDEuMCksIDEuMCk7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBidWlsZGVyLmFwcGVuZCgK
LSAgICAgICAgICAgICJnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBv
c2l0aW9uLCAwLjAsIDEuMCk7XG4iKTsKLSAgICAgICAgaWYgKHZlcnRleFR5cGUgPT0gTG9vcEJs
aW5uRXh0ZXJpb3IpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAg
ICAgICJ2X2tsbSA9IGtsbTtcbiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZpbGxU
eXBlID09IFRleHR1cmVGaWxsKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAg
ICAgInRleENvb3JkID0gdGV4TWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKTtcbiIpOwotICAg
IH0KLQotICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAifVxuIik7Ci0KLSAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwotfQotCi0vLyBzdGF0aWMKLVN0cmluZyBTaGFkZXI6OmdlbmVy
YXRlRnJhZ21lbnQoU2hhZGVyOjpWZXJ0ZXhUeXBlIHZlcnRleFR5cGUsIFNoYWRlcjo6RmlsbFR5
cGUgZmlsbFR5cGUsIFNoYWRlcjo6QW50aWFsaWFzVHlwZSBhbnRpYWxpYXNUeXBlKQotewotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgIiNp
ZmRlZiBHTF9FU1xuIgotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAg
ICAgICIjZW5kaWZcbiIpOwotCi0gICAgaWYgKHZlcnRleFR5cGUgPT0gTG9vcEJsaW5uRXh0ZXJp
b3IpIHsKLSAgICAgICAgaWYgKGFudGlhbGlhc1R5cGUgPT0gQW50aWFsaWFzZWQpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICIjZXh0ZW5zaW9uIEdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAidmFyeWluZyB2ZWMzIHZfa2xtO1xuIik7Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChmaWxsVHlwZSkgewotICAgIGNhc2UgU29saWRGaWxsOgotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7XG4i
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0dXJlRmlsbDoKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoCi0gICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc2FtcGxlcjtcbiIKLSAg
ICAgICAgICAgICJ1bmlmb3JtIGZsb2F0IGdsb2JhbEFscGhhO1xuIgotICAgICAgICAgICAgInZh
cnlpbmcgdmVjMyB0ZXhDb29yZDtcbiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBi
dWlsZGVyLmFwcGVuZCgKLSAgICAgICAgInZvaWQgbWFpbigpIHtcbiIpOwotCi0gICAgaWYgKHZl
cnRleFR5cGUgIT0gTG9vcEJsaW5uRXh0ZXJpb3IpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
Ci0gICAgICAgICAgICAiZmxvYXQgYWxwaGEgPSAxLjA7XG4iKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoYW50aWFsaWFzVHlwZSA9PSBBbnRpYWxpYXNlZCkgewotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoCi0gICAgICAgICAgICAgICAgIiAgLy8gR3JhZGllbnRzXG4iCi0gICAgICAg
ICAgICAgICAgIiAgdmVjMyBweCA9IGRGZHgodl9rbG0pO1xuIgotICAgICAgICAgICAgICAgICIg
IHZlYzMgcHkgPSBkRmR5KHZfa2xtKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgIiAgLy8gQ2hhaW4gcnVsZVxuIgotICAgICAgICAgICAgICAgICIgIGZsb2F0IGsy
ID0gdl9rbG0ueCAqIHZfa2xtLng7XG4iCi0gICAgICAgICAgICAgICAgIiAgZmxvYXQgYyA9IGsy
ICogdl9rbG0ueCAtIHZfa2xtLnkgKiB2X2tsbS56O1xuIgotICAgICAgICAgICAgICAgICIgIGZs
b2F0IGsyMyA9IDMuMCAqIGsyO1xuIgotICAgICAgICAgICAgICAgICIgIGZsb2F0IGN4ID0gazIz
ICogcHgueCAtIHZfa2xtLnogKiBweC55IC0gdl9rbG0ueSAqIHB4Lno7XG4iCi0gICAgICAgICAg
ICAgICAgIiAgZmxvYXQgY3kgPSBrMjMgKiBweS54IC0gdl9rbG0ueiAqIHB5LnkgLSB2X2tsbS55
ICogcHkuejtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgIiAgLy8g
U2lnbmVkIGRpc3RhbmNlXG4iCi0gICAgICAgICAgICAgICAgIiAgZmxvYXQgc2QgPSBjIC8gc3Fy
dChjeCAqIGN4ICsgY3kgKiBjeSk7XG4iCi0gICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICIgIC8vIExpbmVhciBhbHBoYVxuIgotICAgICAgICAgICAgICAgICIgIC8vIEZJWE1F
OiBmaWd1cmUgb3V0IHdoeSB0aGlzIG5lZWRzIHRvIGJlXG4iCi0gICAgICAgICAgICAgICAgIiAg
Ly8gbmVnYXRlZCBjb21wYXJlZCB0byB0aGUgSExTTCB2ZXJzaW9uLCBhbmQgYWxzbyB3aHlcbiIK
LSAgICAgICAgICAgICAgICAiICAvLyB3ZSBuZWVkIGFuIGFkanVzdG1lbnQgYnkgKzEuMCBmb3Ig
aXQgdG8gbG9vayBnb29kLlxuIgotICAgICAgICAgICAgICAgICIgIC8vIGZsb2F0IGFscGhhID0g
Y2xhbXAoMC41IC0gc2QsIDAuMCwgMS4wKTtcbiIKLSAgICAgICAgICAgICAgICAiICBmbG9hdCBh
bHBoYSA9IGNsYW1wKHNkICsgMC41LCAwLjAsIDEuMCk7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICIgIGZsb2F0IHQg
PSB2X2tsbS54ICogdl9rbG0ueCAqIHZfa2xtLnggLSB2X2tsbS55ICogdl9rbG0uejtcbiIKLSAg
ICAgICAgICAgICAgICAiICBmbG9hdCBhbHBoYSA9IGNsYW1wKHNpZ24odCksIDAuMCwgMS4wKTtc
biIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChmaWxsVHlwZSkgewotICAgIGNh
c2UgU29saWRGaWxsOgotICAgICAgICBidWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICJnbF9G
cmFnQ29sb3IgPSBjb2xvciAqIGFscGhhO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VGV4dHVyZUZpbGw6Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgImdsX0Zy
YWdDb2xvciA9IHRleHR1cmUyRChzYW1wbGVyLCB0ZXhDb29yZC54eSkgKiBhbHBoYSAqIGdsb2Jh
bEFscGhhO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGJ1aWxkZXIuYXBwZW5k
KAotICAgICAgICAifVxuIik7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNWQxYTNiMGNhYjM2Mzg3M2I5NzAzMGUwMjEwOWVmZDNjZDU2ZGVkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBTaGFkZXJfaAotI2RlZmluZSBTaGFkZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zv
cm07Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIENvbG9yOwotCi1jbGFzcyBTaGFk
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRlcik7Ci1wdWJsaWM6Ci0gICAgZW51
bSBWZXJ0ZXhUeXBlIHsKLSAgICAgICAgVHdvRGltZW5zaW9uYWwsCi0gICAgICAgIExvb3BCbGlu
bkludGVyaW9yLAotICAgICAgICBMb29wQmxpbm5FeHRlcmlvcgotICAgIH07Ci0KLSAgICBlbnVt
IEZpbGxUeXBlIHsKLSAgICAgICAgU29saWRGaWxsLAotICAgICAgICBUZXh0dXJlRmlsbAotICAg
IH07Ci0KLSAgICAvLyBDdXJyZW50bHkgb25seSBhcHBsaWVzIHRvIHRoZSBMb29wLUJsaW5uIHZl
cnRleCB0eXBlLgotICAgIGVudW0gQW50aWFsaWFzVHlwZSB7Ci0gICAgICAgIE5vdEFudGlhbGlh
c2VkLAotICAgICAgICBBbnRpYWxpYXNlZAotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLSAgICB+U2hhZGVyKCk7
Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVmVydGV4KFZlcnRleFR5cGUsIEZpbGxUeXBl
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlRnJhZ21lbnQoVmVydGV4VHlwZSwgRmlsbFR5
cGUsIEFudGlhbGlhc1R5cGUpOwotCi0gICAgc3RhdGljIHZvaWQgYWZmaW5lVG8zeDMoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgbWF0WzldKTsKLSAgICBzdGF0aWMgdm9pZCBhZmZpbmVU
bzR4NChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBtYXRbMTZdKTsKLSAgICBzdGF0aWMg
dW5zaWduZWQgbG9hZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHR5cGUsIGNv
bnN0IFN0cmluZyYgc2hhZGVyU291cmNlKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9hZFByb2dy
YW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fcHJvZ3JhbTsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIFNoYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmM2UyMTJiNTA1MThkODAzNjk2Y2EwMzg0MTZkZmYyZGM1
MGJjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNs
dWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNESW1wbCB7Ci1w
dWJsaWM6Ci0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0RJbXBsKCkgOiBtX2NvbnRleHQoMCkg
eyB9Ci0gICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ2V0T3JDcmVhdGVDb250ZXh0
KCkKLSAgICB7Ci0gICAgICAgIGJvb2wgd2FzQ3JlYXRlZCA9IGZhbHNlOwotCi0gICAgICAgIC8v
IElmIHdlIGxvc3QgdGhlIGNvbnRleHQsIG9yIGNhbid0IG1ha2UgaXQgY3VycmVudCwgY3JlYXRl
IGEgbmV3IG9uZS4KLSAgICAgICAgaWYgKG1fY29udGV4dCAmJiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkgfHwgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSkpCi0gICAg
ICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLQotICAgICAgICBpZiAoIW1fY29udGV4dCkgewot
ICAgICAgICAgICAgY3JlYXRlQ29udGV4dCgpOwotICAgICAgICAgICAgd2FzQ3JlYXRlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0KLSAg
ICAgICAgaWYgKG1fY29udGV4dCAmJiB3YXNDcmVhdGVkKQotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnB1c2hHcm91cE1hcmtlckVYVCgiU2hhcmVkR3JhcGhpY3NDb250
ZXh0Iik7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQ7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gZ2V0Q29udGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9jb250ZXh0OwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNy
ZWF0ZUNvbnRleHQoKQotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cmlidXRlczsKLSAgICAgICAgYXR0cmlidXRlcy5kZXB0aCA9IGZhbHNlOwotICAgICAg
ICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB0cnVlOwotICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlh
cyA9IGZhbHNlOwotICAgICAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gdHJ1ZTsKLSAg
ICAgICAgbV9jb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCAw
KTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dDsKLSAgICB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotfTsKLQotUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpCi17Ci0gICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNESW1wbCwgaW1w
bCwgKCkpOwotICAgIHJldHVybiBpbXBsLmdldE9yQ3JlYXRlQ29udGV4dCgpOwotfQotCi1lbnVt
IENvbnRleHRPcGVyYXRpb24gewotICAgIEdldCwgQ3JlYXRlCi19OwotCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ2V0T3JDcmVhdGVDb250ZXh0Rm9ySW1wbFRocmVhZChD
b250ZXh0T3BlcmF0aW9uIG9wKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChTaGFyZWRHcmFwaGljc0NvbnRleHQzREltcGwsIGltcGwsICgpKTsKLSAgICByZXR1cm4gb3Ag
PT0gQ3JlYXRlID8gaW1wbC5jcmVhdGVDb250ZXh0KCkgOiBpbXBsLmdldENvbnRleHQoKTsKLX0K
LQotUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEZvckltcGxUaHJlYWQoKQotewotICAgIHJldHVybiBnZXRPckNyZWF0ZUNvbnRleHRGb3JJ
bXBsVGhyZWFkKEdldCk7Ci19Ci0KLWJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmhhdmVG
b3JJbXBsVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHJldHVy
biBnZXRPckNyZWF0ZUNvbnRleHRGb3JJbXBsVGhyZWFkKEdldCk7Ci19Ci0KLWJvb2wgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckltcGxUaHJlYWQoKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIGdldE9yQ3JlYXRlQ29udGV4dEZvckltcGxUaHJl
YWQoQ3JlYXRlKTsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTBlNjNlOTEzZjA2YTA3ODc3MTZiY2M1ZmNiZGVmMWJh
NTVlZjk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0RfaAotI2RlZmluZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCi0K
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICAvLyBUaGUgY2FsbGVy
IG1heSByZWYgdGhpcyBwb2ludGVyLCBhbmQgaGFuZyBvbnRvIGl0IGFzIGxvbmcgYXMgdGhleSBs
aWtlLgotICAgIC8vIEhvd2V2ZXIsIHRoZSBjb250ZXh0IHNob3VsZCBiZSBjaGVja2VkIHBlcmlv
ZGljYWxseSB0byBkZXRlcm1pbmUgaWYgaXQKLSAgICAvLyBoYXMgYmVlbiBsb3N0LiBUaGUgZWFz
aWVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBzaW1wbHkgY2FsbCB0aGlzCi0gICAgLy8gZnVuY3Rp
b24gYWdhaW4uIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG1heSBiZSAwIGlmIHRoZQotICAg
IC8vIEdQVSBpcyB1bmF2YWlsYWJsZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gZ2V0KCk7Ci0gICAgLy8gVGhpcyBvbmUgcmV0dXJucyB0aGUgY29udGV4dCwgYW5k
IGRvZXMgbm90IHRvdWNoIGl0IG9yIHJlLWNyZWF0ZSBpdC4KLSAgICAvLyBTaG91bGQgb25seSBi
ZSBjYWxsZWQgb24gdGhlIGltcGwgdGhyZWFkLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBnZXRGb3JJbXBsVGhyZWFkKCk7Ci0gICAgLy8gVGhpcyBvbmUgcmV0dXJu
cyBpZiB0aGUgdGhyZWFkZWQgdXRpbGl0eSBjb250ZXh0IGV4aXN0cy4KLSAgICAvLyBTaG91bGQg
b25seSBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyBib29sIGhhdmVG
b3JJbXBsVGhyZWFkKCk7Ci0gICAgLy8gVGhpcyBjYWxsIGNyZWF0ZXMgdGhlIGNvbnRleHQgdW5j
b25kaXRpb25hbGx5LCBidXQgZG9lcyBub3QgdG91Y2ggaXQuCi0gICAgLy8gU2hvdWxkIG9ubHkg
YmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVGb3JJ
bXBsVGhyZWFkKCk7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RF9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2YWEwNTAzMTA0YTg1NzUyZjVlY2Y4MGRjNDc3ODBjOWYzMWQxM2Y3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6
ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoT1BFTkNMKQotI2luY2x1ZGUg
IkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GaWx0ZXJD
b250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0T3BlbkNMOjptX2NvbnRleHQgPSAwOwotaW50IEZp
bHRlckNvbnRleHRPcGVuQ0w6Om1fYWxyZWFkeUluaXRpYWxpemVkID0gMDsKLQotRmlsdGVyQ29u
dGV4dE9wZW5DTCogRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpCi17Ci0gICAgaWYgKG1f
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dDsKLSAgICBpZiAobV9hbHJlYWR5SW5p
dGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbV9hbHJlYWR5SW5pdGlhbGl6ZWQg
PSB0cnVlOwotICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGxvY2FsQ29udGV4dCA9IG5ldyBGaWx0
ZXJDb250ZXh0T3BlbkNMKCk7Ci0KLSAgICAvLyBJbml0aWFsaXppbmcgdGhlIGNvbnRleHQuCi0g
ICAgY2xfaW50IGVycm9yTnVtYmVyOwotICAgIGNsX2RldmljZV9pZCogZGV2aWNlczsKLSAgICBj
bF9wbGF0Zm9ybV9pZCBmaXJzdFBsYXRmb3JtSWQ7Ci0gICAgc2l6ZV90IGRldmljZUJ1ZmZlclNp
emUgPSAwOwotCi0gICAgZXJyb3JOdW1iZXIgPSBjbEdldFBsYXRmb3JtSURzKDEsICZmaXJzdFBs
YXRmb3JtSWQsIDApOwotICAgIGNsX2NvbnRleHRfcHJvcGVydGllcyBjb250ZXh0UHJvcGVydGll
c1tdID0geyBDTF9DT05URVhUX1BMQVRGT1JNLCAoY2xfY29udGV4dF9wcm9wZXJ0aWVzKWZpcnN0
UGxhdGZvcm1JZCwgMH07Ci0gICAgbG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQgPSBjbENy
ZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZUEVfR1BV
LCAwLCAwLCAmZXJyb3JOdW1iZXIpOwotICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9TVUNDRVNT
KSB7Ci0gICAgICAgIGxvY2FsQ29udGV4dC0+bV9kZXZpY2VDb250ZXh0ID0gY2xDcmVhdGVDb250
ZXh0RnJvbVR5cGUoY29udGV4dFByb3BlcnRpZXMsIENMX0RFVklDRV9UWVBFX0NQVSwgMCwgMCwg
JmVycm9yTnVtYmVyKTsKLSAgICAgICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBlcnJvck51bWJlciA9IGNsR2V0Q29u
dGV4dEluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIENMX0NPTlRFWFRfREVWSUNF
UywgMCwgMCwgJmRldmljZUJ1ZmZlclNpemUpOwotICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9T
VUNDRVNTKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZGV2aWNlQnVmZmVyU2l6ZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBkZXZpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxjbF9k
ZXZpY2VfaWQqPihmYXN0TWFsbG9jKGRldmljZUJ1ZmZlclNpemUpKTsKLSAgICBlcnJvck51bWJl
ciA9IGNsR2V0Q29udGV4dEluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIENMX0NP
TlRFWFRfREVWSUNFUywgZGV2aWNlQnVmZmVyU2l6ZSwgZGV2aWNlcywgMCk7Ci0gICAgaWYgKGVy
cm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbG9jYWxD
b250ZXh0LT5tX2NvbW1hbmRRdWV1ZSA9IGNsQ3JlYXRlQ29tbWFuZFF1ZXVlKGxvY2FsQ29udGV4
dC0+bV9kZXZpY2VDb250ZXh0LCBkZXZpY2VzWzBdLCAwLCAwKTsKLSAgICBpZiAoIWxvY2FsQ29u
dGV4dC0+bV9jb21tYW5kUXVldWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbG9jYWxDb250
ZXh0LT5tX2RldmljZUlkID0gZGV2aWNlc1swXTsKLSAgICBmYXN0RnJlZShkZXZpY2VzKTsKLQot
ICAgIGNsX2Jvb2wgaW1hZ2VTdXBwb3J0ID0gQ0xfRkFMU0U7Ci0gICAgY2xHZXREZXZpY2VJbmZv
KGxvY2FsQ29udGV4dC0+bV9kZXZpY2VJZCwgQ0xfREVWSUNFX0lNQUdFX1NVUFBPUlQsIHNpemVv
ZihjbF9ib29sKSwgJmltYWdlU3VwcG9ydCwgMCk7Ci0gICAgaWYgKGltYWdlU3VwcG9ydCAhPSBD
TF9UUlVFKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fY29udGV4dCA9IGxvY2FsQ29udGV4
dDsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi12b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6
OmZyZWVSZXNvdXJjZXMoKQotewotICAgIGNsRmluaXNoKG1fY29tbWFuZFF1ZXVlKTsKLQotICAg
IGlmIChtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQpIHsKLSAgICAgICAgZnJlZVJlc291cmNlKG1f
bWF0cml4T3BlcmF0aW9uKTsKLSAgICAgICAgZnJlZVJlc291cmNlKG1fc2F0dXJhdGVBbmRIdWVS
b3RhdGVPcGVyYXRpb24pOwotICAgICAgICBmcmVlUmVzb3VyY2UobV9sdW1pbmFuY2VPcGVyYXRp
b24pOwotICAgICAgICBmcmVlUmVzb3VyY2UobV9jb2xvck1hdHJpeFByb2dyYW0pOwotICAgIH0K
LSAgICBtX2NvbG9yTWF0cml4V2FzQ29tcGlsZWQgPSBmYWxzZTsKLQotICAgIGlmIChtX3R1cmJ1
bGVuY2VXYXNDb21waWxlZCkgewotICAgICAgICBmcmVlUmVzb3VyY2UobV90dXJidWxlbmNlT3Bl
cmF0aW9uKTsKLSAgICAgICAgZnJlZVJlc291cmNlKG1fdHVyYnVsZW5jZVByb2dyYW0pOwotICAg
IH0gICAgCi0gICAgbV90dXJidWxlbmNlV2FzQ29tcGlsZWQgPSBmYWxzZTsKLQotICAgIGlmICht
X3RyYW5zZm9ybUNvbG9yU3BhY2VXYXNDb21waWxlZCkgewotICAgICAgICBmcmVlUmVzb3VyY2Uo
bV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsKTsKLSAgICAgICAgZnJlZVJlc291cmNlKG1fdHJh
bnNmb3JtQ29sb3JTcGFjZVByb2dyYW0pOwotICAgIH0KLSAgICBtX3RyYW5zZm9ybUNvbG9yU3Bh
Y2VXYXNDb21waWxlZCA9IGZhbHNlOwotfQotCi12b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmRl
c3Ryb3lDb250ZXh0KCkKLXsKLSAgICBmcmVlUmVzb3VyY2VzKCk7Ci0KLSAgICBpZiAobV9jb21t
YW5kUXVldWUpCi0gICAgICAgIGNsUmVsZWFzZUNvbW1hbmRRdWV1ZShtX2NvbW1hbmRRdWV1ZSk7
Ci0gICAgbV9jb21tYW5kUXVldWUgPSAwOwotCi0gICAgaWYgKG1fZGV2aWNlQ29udGV4dCkKLSAg
ICAgICAgY2xSZWxlYXNlQ29udGV4dChtX2RldmljZUNvbnRleHQpOwotICAgIG1fZGV2aWNlQ29u
dGV4dCA9IDA7Ci0KLSAgICBtX2NvbnRleHQgPSAwOwotfQotCi1PcGVuQ0xIYW5kbGUgRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6ZSBwYWludFNpemUpCi17Ci0g
ICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNv
bnRleHQoKTsKLQotICAgIGNsX2ltYWdlX2Zvcm1hdCBjbEltYWdlRm9ybWF0OwotICAgIGNsSW1h
Z2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9vcmRlciA9IENMX1JHQkE7Ci0gICAgY2xJbWFnZUZvcm1h
dC5pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSA9IENMX1VOT1JNX0lOVDg7Ci0KLSNpZmRlZiBDTF9B
UElfU1VGRklYX19WRVJTSU9OXzFfMgotICAgIGNsX2ltYWdlX2Rlc2MgaW1hZ2VEZXNjcmlwdG9y
ID0geyBDTF9NRU1fT0JKRUNUX0lNQUdFMkQsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUu
aGVpZ2h0KCksIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwotICAgIE9wZW5DTEhhbmRsZSBpbWFnZSA9
IGNsQ3JlYXRlSW1hZ2UoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9XUklU
RSwgJmNsSW1hZ2VGb3JtYXQsICZpbWFnZURlc2NyaXB0b3IsIDAsIDApOwotI2Vsc2UKLSAgICBP
cGVuQ0xIYW5kbGUgaW1hZ2UgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4
dCgpLCBDTF9NRU1fUkVBRF9XUklURSwgJmNsSW1hZ2VGb3JtYXQsCi0gICAgICAgIHBhaW50U2l6
ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIDAsIDAsIDApOwotI2VuZGlmCi0gICAgcmV0
dXJuIGltYWdlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogdHJhbnNmb3JtQ29sb3JTcGFjZUtl
cm5lbFByb2dyYW0gPQotUFJPR1JBTSgKLWNvbnN0IHNhbXBsZXJfdCBzYW1wbGVyID0gQ0xLX05P
Uk1BTElaRURfQ09PUkRTX0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xBTVBfVE9fRURHRSB8IENMS19G
SUxURVJfTkVBUkVTVDsKLQotX19rZXJuZWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKF9fcmVh
ZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsIF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRp
b24sIF9fY29uc3RhbnQgZmxvYXQgKmNsTG9va1VwVGFibGUpCi17Ci0gICAgaW50MiBzb3VyY2VD
b29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSk7Ci0gICAg
ZmxvYXQ0IHBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7
Ci0KLSAgICBwaXhlbCA9IChmbG9hdDQpIChjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVs
LnggKiAyNTUpKV0sIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueSAqIDI1NSkpXSwK
LSAgICAgICAgY2xMb29rVXBUYWJsZVsoaW50KSAocm91bmQocGl4ZWwueiAqIDI1NSkpXSwgcGl4
ZWwudyk7Ci0KLSAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIHNvdXJjZUNvb3JkLCBwaXhl
bCk7Ci19Ci0pOyAvLyBFbmQgb2YgT3BlbkNMIGtlcm5lbHMKLQotaW5saW5lIGJvb2wgRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y29tcGlsZVRyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKCkKLXsKLSAg
ICBpZiAobV90cmFuc2Zvcm1Db2xvclNwYWNlV2FzQ29tcGlsZWQgfHwgaW5FcnJvcigpKQotICAg
ICAgICByZXR1cm4gIWluRXJyb3IoKTsKLQotICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVdhc0Nv
bXBpbGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV90
cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKHRyYW5zZm9ybUNvbG9y
U3BhY2VLZXJuZWxQcm9ncmFtKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlz
UmVzb3VyY2VBbGxvY2F0aW9uRmFpbGVkKChtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwgPSBr
ZXJuZWxCeU5hbWUobV90cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSwgInRyYW5zZm9ybUNvbG9y
U3BhY2UiKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6b3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZShPcGVu
Q0xIYW5kbGUmIHNvdXJjZSwgSW50UmVjdCBzb3VyY2VTaXplLCBDb2xvclNwYWNlIHNyY0NvbG9y
U3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoT3BlbkNMSGFuZGxlLCBkZXZpY2VSZ2JMVVQsICgpKTsKLSAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoT3BlbkNMSGFuZGxlLCBsaW5lYXJSZ2JMVVQsICgp
KTsKLQotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UgfHwgaW5FcnJvcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZUxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VEZXZpY2VSR0IpCi0gICAg
ICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgZHN0Q29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFjb21waWxlVHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0oKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2Uoc291cmNl
U2l6ZS5zaXplKCkpOwotCi0gICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX3RyYW5zZm9ybUNv
bG9yU3BhY2VLZXJuZWwsIHNvdXJjZVNpemUud2lkdGgoKSwgc291cmNlU2l6ZS5oZWlnaHQoKSk7
Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZSk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50
KGRlc3RpbmF0aW9uKTsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VMaW5l
YXJSR0IpIHsKLSAgICAgICAgaWYgKCFsaW5lYXJSZ2JMVVQpIHsKLSAgICAgICAgICAgIFZlY3Rv
cjxmbG9hdD4gbG9va1VwVGFibGU7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgIC8gMjU1LjBm
OwotICAgICAgICAgICAgICAgIGNvbG9yID0gKGNvbG9yIDw9IDAuMDQwNDVmID8gY29sb3IgLyAx
Mi45MmYgOiBwb3coKGNvbG9yICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikpOwotICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gc3RkOjptaW4oMS4wZiwgY29sb3IpOwotICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxl
LmFwcGVuZCgocm91bmQoY29sb3IgKiAyNTUpKSAvIDI1NSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsaW5lYXJSZ2JMVVQgPSBrZXJuZWwuYWRkQXJndW1lbnQobG9va1VwVGFibGUuZGF0
YSgpLCBzaXplb2YoZmxvYXQpICogMjU2KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBr
ZXJuZWwuYWRkQXJndW1lbnQobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9y
U3BhY2UgPT0gQ29sb3JTcGFjZURldmljZVJHQikgewotICAgICAgICBpZiAoIWRldmljZVJnYkxV
VCkgewotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBsb29rVXBUYWJsZTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZs
b2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IChwb3dmKGNv
bG9yLCAxLjBmIC8gMi40ZikgKiAxLjA1NWYpIC0gMC4wNTVmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc3Rk
OjptaW4oMS4wZiwgY29sb3IpOwotICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlLmFwcGVuZCgo
cm91bmQoY29sb3IgKiAyNTUpKSAvIDI1NSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
ZXZpY2VSZ2JMVVQgPSBrZXJuZWwuYWRkQXJndW1lbnQobG9va1VwVGFibGUuZGF0YSgpLCBzaXpl
b2YoZmxvYXQpICogMjU2KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBrZXJuZWwuYWRk
QXJndW1lbnQoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci0KLSAgICBrZXJuZWwucnVuKCk7Ci0gICAg
c291cmNlLmNsZWFyKCk7Ci0gICAgc291cmNlID0gZGVzdGluYXRpb247Ci19Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBmaWxsS2VybmVsUHJvZ3JhbSA9Ci1QUk9HUkFNX1NUUigKLV9fa2VybmVsIHZv
aWQgZmlsbChfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotewotICAgIGZsb2F0NCBzb3VyY2VQaXhlbCA9IChmbG9h
dDQpKHIsIGcsIGIsIGEpOwotICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgKGludDIpKGdl
dF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBzb3VyY2VQaXhlbCk7Ci19Ci0pOwot
Ci1pbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRmlsbCgpCi17Ci0gICAg
aWYgKG1fZmlsbFdhc0NvbXBpbGVkIHx8IGluRXJyb3IoKSkKLSAgICAgICAgcmV0dXJuICFpbkVy
cm9yKCk7Ci0KLSAgICBtX2ZpbGxXYXNDb21waWxlZCA9IHRydWU7Ci0KLSAgICBpZiAoaXNSZXNv
dXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fZmlsbFByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShmaWxs
S2VybmVsUHJvZ3JhbSkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc1Jlc291
cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9maWxsID0ga2VybmVsQnlOYW1lKG1fZmlsbFByb2dyYW0s
ICJmaWxsIikpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmZpbGwoY2xfbWVtIGltYWdlLCBJbnRTaXplIGlt
YWdlU2l6ZSwgQ29sb3IgY29sb3IpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgaW5FcnJvcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb21waWxlRmlsbCgpOwotCi0gICAgZmxvYXQgciwg
ZywgYiwgYTsKLQotICAgIGNvbG9yLmdldFJHQkEociwgZywgYiwgYSk7Ci0KLSAgICBSdW5LZXJu
ZWwga2VybmVsKHRoaXMsIG1fZmlsbCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWln
aHQoKSk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KGltYWdlKTsKLSAgICBrZXJuZWwuYWRkQXJn
dW1lbnQocik7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KGcpOwotICAgIGtlcm5lbC5hZGRBcmd1
bWVudChiKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQoYSk7Ci0gICAga2VybmVsLnJ1bigpOwot
fQotCi1jbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKGNvbnN0
IGNoYXIqIHNvdXJjZSkKLXsKLSAgICBjbF9wcm9ncmFtIHByb2dyYW07Ci0gICAgY2xfaW50IGVy
cm9yTnVtYmVyID0gMDsKLQotICAgIHByb2dyYW0gPSBjbENyZWF0ZVByb2dyYW1XaXRoU291cmNl
KG1fZGV2aWNlQ29udGV4dCwgMSwgKGNvbnN0IGNoYXIqKikgJnNvdXJjZSwgMCwgJmVycm9yTnVt
YmVyKTsKLSAgICBpZiAoaXNGYWlsZWQoZXJyb3JOdW1iZXIpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmIChpc0ZhaWxlZChjbEJ1aWxkUHJvZ3JhbShwcm9ncmFtLCAwLCAwLCAwLCAwLCAw
KSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHByb2dyYW07Ci19Ci0KLXZvaWQg
RmlsdGVyQ29udGV4dE9wZW5DTDo6ZnJlZVJlc291cmNlKGNsX2tlcm5lbCYgaGFuZGxlKQotewot
ICAgIGlmIChoYW5kbGUpIHsKLSAgICAgICAgY2xSZWxlYXNlS2VybmVsKGhhbmRsZSk7Ci0gICAg
ICAgIGhhbmRsZSA9IDA7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmZy
ZWVSZXNvdXJjZShjbF9wcm9ncmFtJiBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSkgewotICAg
ICAgICBjbFJlbGVhc2VQcm9ncmFtKGhhbmRsZSk7Ci0gICAgICAgIGhhbmRsZSA9IDA7Ci0gICAg
fQotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5D
TC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJD
b250ZXh0T3BlbkNMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZGU3NTgwNTQz
NTIwZjNhY2ZhMTcwOTE0OTM3ZmJjNzkzMzg1ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICog
Q29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1Pgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZpbHRlckNvbnRleHRPcGVu
Q0xfaAotI2RlZmluZSBGaWx0ZXJDb250ZXh0T3BlbkNMX2gKLQotI2lmIEVOQUJMRShPUEVOQ0wp
Ci0jaW5jbHVkZSAiQ0wvY2wuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIk9wZW5DTEhhbmRsZS5oIgotCi0jZGVmaW5lIFBST0dSQU1fU1RSKC4uLikgICNfX1ZB
X0FSR1NfXwotI2RlZmluZSBQUk9HUkFNKC4uLikgUFJPR1JBTV9TVFIoX19WQV9BUkdTX18pCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmlsdGVyQ29udGV4dE9wZW5DTCB7Ci1wdWJs
aWM6Ci0gICAgRmlsdGVyQ29udGV4dE9wZW5DTCgpCi0gICAgICAgIDogbV9pbkVycm9yKGZhbHNl
KQotICAgICAgICAsIG1fZGV2aWNlSWQoMCkKLSAgICAgICAgLCBtX2RldmljZUNvbnRleHQoMCkK
LSAgICAgICAgLCBtX2NvbW1hbmRRdWV1ZSgwKQotICAgICAgICAsIG1fdHJhbnNmb3JtQ29sb3JT
cGFjZVdhc0NvbXBpbGVkKGZhbHNlKQotICAgICAgICAsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVBy
b2dyYW0oMCkKLSAgICAgICAgLCBtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwoMCkKLSAgICAg
ICAgLCBtX2ZpbGxXYXNDb21waWxlZChmYWxzZSkKLSAgICAgICAgLCBtX2ZpbGxQcm9ncmFtKDAp
Ci0gICAgICAgICwgbV9maWxsKDApCi0gICAgICAgICwgbV9tZXJnZVdhc0NvbXBpbGVkKGZhbHNl
KQotICAgICAgICAsIG1fbWVyZ2VQcm9ncmFtKDApCi0gICAgICAgICwgbV9tZXJnZUNvcHlPcGVy
YXRpb24oMCkKLSAgICAgICAgLCBtX21lcmdlT3BlcmF0aW9uKDApCi0gICAgICAgICwgbV9jb2xv
ck1hdHJpeFdhc0NvbXBpbGVkKGZhbHNlKQotICAgICAgICAsIG1fY29sb3JNYXRyaXhQcm9ncmFt
KDApCi0gICAgICAgICwgbV9tYXRyaXhPcGVyYXRpb24oMCkKLSAgICAgICAgLCBtX3NhdHVyYXRl
QW5kSHVlUm90YXRlT3BlcmF0aW9uKDApCi0gICAgICAgICwgbV9sdW1pbmFuY2VPcGVyYXRpb24o
MCkKLSAgICAgICAgLCBtX3R1cmJ1bGVuY2VXYXNDb21waWxlZChmYWxzZSkKLSAgICAgICAgLCBt
X3R1cmJ1bGVuY2VQcm9ncmFtKDApCi0gICAgICAgICwgbV90dXJidWxlbmNlT3BlcmF0aW9uKDAp
Ci0gICAgewotICAgIH0KLQotICAgIC8vIFJldHVybnMgMCBpZiBpbml0aWFsaXphdGlvbiBmYWls
ZWQuCi0gICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQoKTsKLQotICAgIGNs
X2RldmljZV9pZCBkZXZpY2VJZCgpIHsgcmV0dXJuIG1fZGV2aWNlSWQ7IH0KLSAgICBjbF9jb250
ZXh0IGRldmljZUNvbnRleHQoKSB7IHJldHVybiBtX2RldmljZUNvbnRleHQ7IH0KLSAgICBjbF9j
b21tYW5kX3F1ZXVlIGNvbW1hbmRRdWV1ZSgpIHsgcmV0dXJuIG1fY29tbWFuZFF1ZXVlOyB9Ci0K
LSAgICBpbmxpbmUgdm9pZCBzZXRJbkVycm9yKGJvb2wgZXJyb3JDb2RlID0gdHJ1ZSkgeyBtX2lu
RXJyb3IgPSBlcnJvckNvZGU7IH0KLSAgICBpbmxpbmUgYm9vbCBpbkVycm9yKCkgeyByZXR1cm4g
bV9pbkVycm9yOyB9Ci0gICAgaW5saW5lIGJvb2wgaXNGYWlsZWQoYm9vbCk7Ci0gICAgaW5saW5l
IGJvb2wgaXNSZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoYm9vbCk7Ci0KLSAgICB2b2lkIGZyZWVS
ZXNvdXJjZXMoKTsKLSAgICB2b2lkIGRlc3Ryb3lDb250ZXh0KCk7Ci0KLSAgICBPcGVuQ0xIYW5k
bGUgY3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6ZSk7Ci0KLSAgICBpbmxpbmUgYm9vbCBjb21waWxl
RmlsbCgpOwotICAgIHZvaWQgZmlsbChjbF9tZW0sIEludFNpemUsIENvbG9yKTsKLQotICAgIGlu
bGluZSBib29sIGNvbXBpbGVUcmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSgpOwotICAgIHZvaWQg
b3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZShPcGVuQ0xIYW5kbGUmLCBJbnRSZWN0LCBDb2xvclNw
YWNlLCBDb2xvclNwYWNlKTsKLQotICAgIGlubGluZSBib29sIGNvbXBpbGVGRUNvbG9yTWF0cml4
KCk7Ci0gICAgaW5saW5lIGJvb2wgY29tcGlsZUZFVHVyYnVsZW5jZSgpOwotICAgIGlubGluZSBi
b29sIGNvbXBpbGVGRU1lcmdlKCk7Ci0KLSAgICBpbmxpbmUgdm9pZCBhcHBseUZFTWVyZ2VDb3B5
KE9wZW5DTEhhbmRsZSwgSW50U2l6ZSwgT3BlbkNMSGFuZGxlLCBJbnRQb2ludCYpOwotICAgIGlu
bGluZSB2b2lkIGFwcGx5RkVNZXJnZShPcGVuQ0xIYW5kbGUsIE9wZW5DTEhhbmRsZSwgT3BlbkNM
SGFuZGxlLCBPcGVuQ0xIYW5kbGUsIEludFNpemUsIEludFBvaW50JiwgSW50UG9pbnQmKTsKLSAg
ICBpbmxpbmUgdm9pZCBhcHBseUZFQ29sb3JNYXRyaXgoT3BlbkNMSGFuZGxlLCBJbnRTaXplLCBP
cGVuQ0xIYW5kbGUsIEludFBvaW50LCBmbG9hdCosIGludCk7Ci0gICAgaW5saW5lIHZvaWQgYXBw
bHlGRVR1cmJ1bGVuY2UoT3BlbkNMSGFuZGxlLCBJbnRTaXplLCBpbnQsIHZvaWQqLCB2b2lkKiwg
dm9pZCosIHZvaWQqLCB2b2lkKiwKLSAgICAgICAgaW50KiwgaW50LCBpbnQsIGludCwgaW50LCBm
bG9hdCwgZmxvYXQsIGJvb2wsIGludCwgaW50KTsKLQotcHJpdmF0ZToKLQotICAgIGNsYXNzIFJ1
bktlcm5lbCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFJ1bktlcm5lbChGaWx0ZXJD
b250ZXh0T3BlbkNMKiBjb250ZXh0LCBjbF9rZXJuZWwga2VybmVsLCBzaXplX3Qgd2lkdGgsIHNp
emVfdCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAg
ICAgICAgICAgICAsIG1fa2VybmVsKGtlcm5lbCkKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgo
MCkKLSAgICAgICAgICAgICAgICAsIG1fZXJyb3IoY29udGV4dC0+aW5FcnJvcigpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9IHdpZHRoOwotICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsU2l6ZVsxXSA9IGhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChPcGVuQ0xIYW5kbGUgaGFuZGxlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmICghbV9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAg
bV9lcnJvciA9IGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBtX2luZGV4KyssIHNpemVvZihPcGVu
Q0xIYW5kbGUpLCBoYW5kbGUuaGFuZGxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9pbnQgdmFsdWUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICBtX2Vycm9y
ID0gY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIG1faW5kZXgrKywgc2l6ZW9mKGNsX2ludCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX2Zsb2F0IHZhbHVlKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmICghbV9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9
IGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBtX2luZGV4KyssIHNpemVvZihjbF9mbG9hdCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX3NhbXBsZXIgaGFuZGxlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmICghbV9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAgbV9lcnJv
ciA9IGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBtX2luZGV4KyssIHNpemVvZihjbF9zYW1wbGVy
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJmhhbmRsZSkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBPcGVuQ0xIYW5kbGUgYWRkQXJndW1lbnQodm9pZCogYnVmZmVyLCBpbnQgc2l6
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobV9lcnJvcikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgT3BlbkNMSGFuZGxlIGhhbmRs
ZShjbENyZWF0ZUJ1ZmZlcihtX2NvbnRleHQtPmRldmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURf
T05MWSwgc2l6ZSwgMCwgJm1fZXJyb3IpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9lcnJvcikK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgbV9lcnJvciA9
IGNsRW5xdWV1ZVdyaXRlQnVmZmVyKG1fY29udGV4dC0+Y29tbWFuZFF1ZXVlKCksIGhhbmRsZSwg
Q0xfVFJVRSwgMCwgc2l6ZSwgYnVmZmVyLCAwLCAwLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAo
bV9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAg
bV9lcnJvciA9IGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBtX2luZGV4KyssIHNpemVvZihPcGVu
Q0xIYW5kbGUpLCBoYW5kbGUuaGFuZGxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gIW1fZXJyb3IgPyBoYW5kbGUgOiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
b2lkIHJ1bigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dC0+
aXNGYWlsZWQobV9lcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgICAgIG1fZXJyb3IgPSBjbEZpbmlzaChtX2NvbnRleHQtPm1fY29tbWFuZFF1ZXVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoIW1fZXJyb3IpCi0gICAgICAgICAgICAgICAgICAgIG1fZXJy
b3IgPSBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29udGV4dC0+bV9jb21tYW5kUXVldWUsIG1f
a2VybmVsLCAyLCAwLCBtX2dsb2JhbFNpemUsIDAsIDAsIDAsIDApOwotICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+aXNGYWlsZWQobV9lcnJvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIG1fY29udGV4dDsKLSAgICAgICAgICAgIGNsX2tlcm5l
bCBtX2tlcm5lbDsKLSAgICAgICAgICAgIHNpemVfdCBtX2dsb2JhbFNpemVbMl07Ci0gICAgICAg
ICAgICBpbnQgbV9pbmRleDsKLSAgICAgICAgICAgIGludCBtX2Vycm9yOwotICAgICAgICB9Owot
Ci0gICAgY2xfcHJvZ3JhbSBjb21waWxlUHJvZ3JhbShjb25zdCBjaGFyKik7Ci0gICAgc3RhdGlj
IGlubGluZSBjbF9rZXJuZWwga2VybmVsQnlOYW1lKGNsX3Byb2dyYW0gcHJvZ3JhbSwgY29uc3Qg
Y2hhciogbmFtZSkgeyByZXR1cm4gY2xDcmVhdGVLZXJuZWwocHJvZ3JhbSwgbmFtZSwgMCk7IH0K
LQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlUmVzb3VyY2UoY2xfa2VybmVsJik7Ci0gICAg
c3RhdGljIGlubGluZSB2b2lkIGZyZWVSZXNvdXJjZShjbF9wcm9ncmFtJik7Ci0KLSAgICBzdGF0
aWMgRmlsdGVyQ29udGV4dE9wZW5DTCogbV9jb250ZXh0OwotICAgIHN0YXRpYyBpbnQgbV9hbHJl
YWR5SW5pdGlhbGl6ZWQ7Ci0gICAgYm9vbCBtX2luRXJyb3I7Ci0KLSAgICBjbF9kZXZpY2VfaWQg
bV9kZXZpY2VJZDsKLSAgICBjbF9jb250ZXh0IG1fZGV2aWNlQ29udGV4dDsKLSAgICBjbF9jb21t
YW5kX3F1ZXVlIG1fY29tbWFuZFF1ZXVlOwotCi0gICAgYm9vbCBtX3RyYW5zZm9ybUNvbG9yU3Bh
Y2VXYXNDb21waWxlZDsKLSAgICBjbF9wcm9ncmFtIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dy
YW07Ci0gICAgY2xfa2VybmVsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbDsKLQotICAgIGJv
b2wgbV9maWxsV2FzQ29tcGlsZWQ7Ci0gICAgY2xfcHJvZ3JhbSBtX2ZpbGxQcm9ncmFtOwotICAg
IGNsX2tlcm5lbCBtX2ZpbGw7Ci0KLSAgICBib29sIG1fbWVyZ2VXYXNDb21waWxlZDsKLSAgICBj
bF9wcm9ncmFtIG1fbWVyZ2VQcm9ncmFtOwotICAgIGNsX2tlcm5lbCBtX21lcmdlQ29weU9wZXJh
dGlvbjsKLSAgICBjbF9rZXJuZWwgbV9tZXJnZU9wZXJhdGlvbjsKLQotICAgIGJvb2wgbV9jb2xv
ck1hdHJpeFdhc0NvbXBpbGVkOwotICAgIGNsX3Byb2dyYW0gbV9jb2xvck1hdHJpeFByb2dyYW07
Ci0gICAgY2xfa2VybmVsIG1fbWF0cml4T3BlcmF0aW9uOwotICAgIGNsX2tlcm5lbCBtX3NhdHVy
YXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwotICAgIGNsX2tlcm5lbCBtX2x1bWluYW5jZU9wZXJh
dGlvbjsKLQotICAgIGJvb2wgbV90dXJidWxlbmNlV2FzQ29tcGlsZWQ7Ci0gICAgY2xfcHJvZ3Jh
bSBtX3R1cmJ1bGVuY2VQcm9ncmFtOwotICAgIGNsX2tlcm5lbCBtX3R1cmJ1bGVuY2VPcGVyYXRp
b247Ci19OwotCi1pbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjppc0ZhaWxlZChib29s
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgc2V0SW5FcnJvcigpOwotICAgIHJl
dHVybiB2YWx1ZTsKLX0KLQotaW5saW5lIGJvb2wgRmlsdGVyQ29udGV4dE9wZW5DTDo6aXNSZXNv
dXJjZUFsbG9jYXRpb25GYWlsZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICBzZXRJbkVycm9yKCk7Ci0gICAgcmV0dXJuICF2YWx1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZF
Q29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRUNvbG9yTWF0cml4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzZjMzRiZGI1ZTRhYWMzYjRiNzdkMTUwMjdmYzM2MzhiZDI1NmY3ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFQ29sb3JNYXRyaXguY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0
eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGlu
Zi51LXN6ZWdlZC5odT4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCi0jaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNkZWZpbmUgQ09MT1JfTUFUUklYX0tFUk5FTCgu
Li4pIFwKLSAgICAgICAgaW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgw
KSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KTsgXAotICAgICAgICBmbG9hdDQgc291cmNlUGl4
ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIHNvdXJjZUNvb3JkKTsgXAotICAgICAg
ICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IChmbG9hdDQpIChfX1ZBX0FSR1NfXyk7IFwKLSAg
ICAgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCks
IGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0aW5hdGlvblBpeGVsKTsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGNvbG9yTWF0cml4S2VybmVsUHJvZ3JhbSA9Ci1QUk9HUkFNKAotY29uc3Qgc2FtcGxlcl90
IHNhbXBsZXIgPSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFN
UF9UT19FREdFIHwgQ0xLX0ZJTFRFUl9ORUFSRVNUOwotCi1fX2tlcm5lbCB2b2lkIG1hdHJpeChf
X3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3Qg
c291cmNlLCBmbG9hdCB4LCBmbG9hdCB5LCBfX2NvbnN0YW50IGZsb2F0ICp2YWx1ZXMpCi17Ci0g
ICAgQ09MT1JfTUFUUklYX0tFUk5FTCh2YWx1ZXNbMF0gKiBzb3VyY2VQaXhlbC54ICsgdmFsdWVz
WzFdICogc291cmNlUGl4ZWwueSArIHZhbHVlc1syXSAqIHNvdXJjZVBpeGVsLnogKyB2YWx1ZXNb
M10gKiBzb3VyY2VQaXhlbC53ICsgdmFsdWVzWzRdLAotICAgICAgICB2YWx1ZXNbNV0gKiBzb3Vy
Y2VQaXhlbC54ICsgdmFsdWVzWzZdICogc291cmNlUGl4ZWwueSArIHZhbHVlc1s3XSAqIHNvdXJj
ZVBpeGVsLnogKyB2YWx1ZXNbOF0gKiBzb3VyY2VQaXhlbC53ICsgdmFsdWVzWzldLAotICAgICAg
ICB2YWx1ZXNbMTBdICogc291cmNlUGl4ZWwueCArIHZhbHVlc1sxMV0gKiBzb3VyY2VQaXhlbC55
ICsgdmFsdWVzWzEyXSAqIHNvdXJjZVBpeGVsLnogKyB2YWx1ZXNbMTNdICogc291cmNlUGl4ZWwu
dyArIHZhbHVlc1sxNF0sCi0gICAgICAgIHZhbHVlc1sxNV0gKiBzb3VyY2VQaXhlbC54ICsgdmFs
dWVzWzE2XSAqIHNvdXJjZVBpeGVsLnkgKyB2YWx1ZXNbMTddICogc291cmNlUGl4ZWwueiArIHZh
bHVlc1sxOF0gKiBzb3VyY2VQaXhlbC53ICsgdmFsdWVzWzE5XSkKLX0KLQotX19rZXJuZWwgdm9p
ZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9u
LCBfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLCBmbG9hdCB4LCBmbG9hdCB5LCBfX2NvbnN0
YW50IGZsb2F0ICpjb21wb25lbnRzKQotewotICAgIENPTE9SX01BVFJJWF9LRVJORUwoc291cmNl
UGl4ZWwueCAqIGNvbXBvbmVudHNbMF0gKyBzb3VyY2VQaXhlbC55ICogY29tcG9uZW50c1sxXSAr
IHNvdXJjZVBpeGVsLnogKiBjb21wb25lbnRzWzJdLAotICAgICAgICBzb3VyY2VQaXhlbC54ICog
Y29tcG9uZW50c1szXSArIHNvdXJjZVBpeGVsLnkgKiBjb21wb25lbnRzWzRdICsgc291cmNlUGl4
ZWwueiAqIGNvbXBvbmVudHNbNV0sCi0gICAgICAgIHNvdXJjZVBpeGVsLnggKiBjb21wb25lbnRz
WzZdICsgc291cmNlUGl4ZWwueSAqIGNvbXBvbmVudHNbN10gKyBzb3VyY2VQaXhlbC56ICogY29t
cG9uZW50c1s4XSwKLSAgICAgICAgc291cmNlUGl4ZWwudykKLX0KLQotX19rZXJuZWwgdm9pZCBs
dW1pbmFuY2UoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19yZWFkX29ubHkg
aW1hZ2UyZF90IHNvdXJjZSwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDT0xPUl9NQVRSSVhf
S0VSTkVMKDAsIDAsIDAsIDAuMjEyNSAqIHNvdXJjZVBpeGVsLnggKyAwLjcxNTQgKiBzb3VyY2VQ
aXhlbC55ICsgMC4wNzIxICogc291cmNlUGl4ZWwueikKLX0KLSk7IC8vIEVuZCBvZiBPcGVuQ0wg
a2VybmVscwotCi1pbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVDb2xv
ck1hdHJpeCgpCi17Ci0gICAgaWYgKG1fY29sb3JNYXRyaXhXYXNDb21waWxlZCB8fCBpbkVycm9y
KCkpCi0gICAgICAgIHJldHVybiAhaW5FcnJvcigpOwotCi0gICAgbV9jb2xvck1hdHJpeFdhc0Nv
bXBpbGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9j
b2xvck1hdHJpeFByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShjb2xvck1hdHJpeEtlcm5lbFByb2dy
YW0pKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNSZXNvdXJjZUFsbG9jYXRp
b25GYWlsZWQoKG1fbWF0cml4T3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1fY29sb3JNYXRyaXhQ
cm9ncmFtLCAibWF0cml4IikpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc1Jl
c291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9zYXR1cmF0ZUFuZEh1ZVJvdGF0ZU9wZXJhdGlvbiA9
IGtlcm5lbEJ5TmFtZShtX2NvbG9yTWF0cml4UHJvZ3JhbSwgInNhdHVyYXRlQW5kSHVlUm90YXRl
IikpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlv
bkZhaWxlZCgobV9zYXR1cmF0ZUFuZEh1ZVJvdGF0ZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZSht
X2NvbG9yTWF0cml4UHJvZ3JhbSwgInNhdHVyYXRlQW5kSHVlUm90YXRlIikpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlvbkZhaWxlZCgobV9sdW1p
bmFuY2VPcGVyYXRpb24gPSBrZXJuZWxCeU5hbWUobV9jb2xvck1hdHJpeFByb2dyYW0sICJsdW1p
bmFuY2UiKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWlubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVDb2xvck1hdHJpeChPcGVu
Q0xIYW5kbGUgZGVzdGluYXRpb24sIEludFNpemUgZGVzdGluYXRpb25TaXplLCBPcGVuQ0xIYW5k
bGUgc291cmNlLCBJbnRQb2ludCByZWxhdGl2ZVNvdXJjZUxvY2F0aW9uLCBmbG9hdCogdmFsdWVz
LCBpbnQgdHlwZSkKLXsKLSAgICBjbF9rZXJuZWwgY29sb3JNYXRyaXg7Ci0gICAgT3BlbkNMSGFu
ZGxlIGNsVmFsdWVzOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTUFUUklYOgotICAgICAgICBjb2xvck1hdHJpeCA9IG1fbWF0cml4T3BlcmF0aW9u
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToK
LSAgICAgICAgY29sb3JNYXRyaXggPSBtX3NhdHVyYXRlQW5kSHVlUm90YXRlT3BlcmF0aW9uOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0g
ICAgICAgIGNvbG9yTWF0cml4ID0gbV9zYXR1cmF0ZUFuZEh1ZVJvdGF0ZU9wZXJhdGlvbjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKLSAgICAgICAgY29sb3JNYXRyaXggPSBtX2x1bWluYW5jZU9wZXJhdGlvbjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIGNvbG9yTWF0
cml4LCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsK
LSAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOwotICAgIGtlcm5lbC5hZGRBcmd1
bWVudChzb3VyY2UpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZUxvY2F0
aW9uLngoKSk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlTG9jYXRpb24u
eSgpKTsKLSAgICBpZiAodHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKQotICAgICAg
ICBjbFZhbHVlcyA9IGtlcm5lbC5hZGRBcmd1bWVudCh2YWx1ZXMsIHNpemVvZihmbG9hdCkgKiAy
MCk7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUgfHwg
dHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBjbFZhbHVlcyA9
IGtlcm5lbC5hZGRBcmd1bWVudCh2YWx1ZXMsIHNpemVvZihmbG9hdCkgKiA5KTsKLSAgICBrZXJu
ZWwucnVuKCk7Ci0KLSAgICBjbFZhbHVlcy5jbGVhcigpOwotfQotCi1ib29sIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQotewotICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNv
bnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvbnRleHQtPmNvbXBpbGVGRUNv
bG9yTWF0cml4KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwotICAgIE9wZW5DTEhhbmRsZSBzb3VyY2UgPSBpbi0+b3BlbkNM
SW1hZ2UoKTsKLSAgICBPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFn
ZVJlc3VsdCgpOwotCi0gICAgSW50UG9pbnQgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbigKLSAgICAg
ICAgYWJzb2x1dGVQYWludFJlY3QoKS54KCkgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2Nh
dGlvbigpLngoKSwKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QoKS55KCkgLSBpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpLnkoKSk7Ci0KLSAgICBmbG9hdCBjb21wb25lbnRzWzld
OwotICAgIGlmIChGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUgPT0gbV90eXBlKQotICAgICAg
ICBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgbV92YWx1ZXNbMF0pOwot
ICAgIGVsc2UgaWYgKEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUgPT0gbV90eXBlKQotICAg
ICAgICBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIG1fdmFsdWVzWzBd
KTsKLQotICAgIGNvbnRleHQtPmFwcGx5RkVDb2xvck1hdHJpeChkZXN0aW5hdGlvbiwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCksIHNvdXJjZSwgcmVsYXRpdmVTb3VyY2VMb2NhdGlvbiwgKEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVggPT0gbV90eXBlKSA/IG1fdmFsdWVzLmRhdGEoKSA6IGNv
bXBvbmVudHMsIG1fdHlwZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNs
L09wZW5DTEZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L29wZW5jbC9PcGVuQ0xGRUZsb29kLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmVmMWY2NjZkZTA3MDI5N2E5YWE1YjY2YTRkZTRhZTM2NzI5ODc0My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFRmxvb2QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAotICogQ29weXJpZ2h0IChDKSAyMDEzIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2Vk
Lmh1PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCi0jaW5jbHVkZSAiRkVGbG9v
ZC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWJvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCi17Ci0gICAgRmls
dGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQo
KTsKLQotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGNvbnRleHQtPmluRXJyb3IoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjbF9tZW0g
ZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOwotCi0gICAgQ29sb3IgY29s
b3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFj
aXR5KCkpOwotCi0gICAgY29udGV4dC0+ZmlsbChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCksIGNvbG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5D
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVu
Y2wvT3BlbkNMRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFSW1hZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3MzZhODYyN2RkNWFmMzUwNzllN2NkOTk2ZDA5YjE2ZjA3YTJjMDlhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVJbWFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVn
ZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKLQotI2luY2x1ZGUgIkZp
bHRlckNvbnRleHRPcGVuQ0wuaCIKLSNpbmNsdWRlICJTVkdGRUltYWdlLmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKLXsKLSAgICBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKTsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0lt
YWdlQnVmZmVyKCk7Ci0gICAgaWYgKHNvdXJjZUltYWdlKSB7Ci0gICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNp
emUoKSkpOwotICAgICAgICBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEt
PmRhdGEoKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3Bl
bkNMRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL09wZW5DTEZFTWVyZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmI4
MGMyYTAyOWE0ZjUzM2ZhMWM1OWYzMTNmMGEzY2RjYjZjZWZjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVNZXJnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAot
ICogQ29weXJpZ2h0IChDKSAyMDEzIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1
PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCi0jaW5jbHVkZSAiRkVNZXJnZS5o
IgotCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBtZXJnZUtlcm5lbFByb2dyYW0gPQotUFJPR1JBTSgK
LWNvbnN0IHNhbXBsZXJfdCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIHwg
Q0xLX0FERFJFU1NfQ0xBTVAgfCBDTEtfRklMVEVSX05FQVJFU1Q7Ci0KLV9fa2VybmVsIHZvaWQg
Y29weShfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFn
ZTJkX3Qgc291cmNlLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgZmxvYXQ0IGRlc3RpbmF0aW9uUGl4
ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgw
KSArIHgsIGdldF9nbG9iYWxfaWQoMSkgKyB5KSk7Ci0gICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0
aW9uLCAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpLCBkZXN0aW5h
dGlvblBpeGVsKTsKLX0KLQotX19rZXJuZWwgdm9pZCBtZXJnZShfX3dyaXRlX29ubHkgaW1hZ2Uy
ZF90IGRlc3RpbmF0aW9uLCBfX3JlYWRfb25seSBpbWFnZTJkX3QgcHJldmlvdXNEZXN0aW5hdGlv
biwgX19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZUEsIF9fcmVhZF9vbmx5IGltYWdlMmRfdCBz
b3VyY2VCLCBpbnQgeEEsIGludCB5QSwgaW50IHhCLCBpbnQgeUIpCi17Ci0gICAgaW50MiBkZXN0
aW5hdGlvbkNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEp
KTsKLSAgICBpbnQyIHNvdXJjZUNvb3JkQSA9IChpbnQyKSAoZGVzdGluYXRpb25Db29yZC54ICsg
eEEsIGRlc3RpbmF0aW9uQ29vcmQueSArIHlBKTsKLSAgICBpbnQyIHNvdXJjZUNvb3JkQiA9IChp
bnQyKSAoZGVzdGluYXRpb25Db29yZC54ICsgeEIsIGRlc3RpbmF0aW9uQ29vcmQueSArIHlCKTsK
LSAgICBmbG9hdDQgZGVzdGluYXRpb25QaXhlbCA9IHJlYWRfaW1hZ2VmKHByZXZpb3VzRGVzdGlu
YXRpb24sIHNhbXBsZXIsIGRlc3RpbmF0aW9uQ29vcmQpOwotICAgIGZsb2F0NCBzb3VyY2VQaXhl
bEEgPSByZWFkX2ltYWdlZihzb3VyY2VBLCBzYW1wbGVyLCBzb3VyY2VDb29yZEEpOwotICAgIGZs
b2F0NCBzb3VyY2VQaXhlbEIgPSByZWFkX2ltYWdlZihzb3VyY2VCLCBzYW1wbGVyLCBzb3VyY2VD
b29yZEIpOwotCi0gICAgZGVzdGluYXRpb25QaXhlbCA9IHNvdXJjZVBpeGVsQSArIGRlc3RpbmF0
aW9uUGl4ZWwgKiAoMSAtIHNvdXJjZVBpeGVsQS53KTsKLSAgICBkZXN0aW5hdGlvblBpeGVsID0g
c291cmNlUGl4ZWxCICsgZGVzdGluYXRpb25QaXhlbCAqICgxIC0gc291cmNlUGl4ZWxCLncpOwot
Ci0gICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvb3JkLCBkZXN0aW5h
dGlvblBpeGVsKTsKLX0KLSk7IC8vIEVuZCBvZiBPcGVuQ0wga2VybmVscwotCi1pbmxpbmUgYm9v
bCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVNZXJnZSgpCi17Ci0gICAgaWYgKG1fbWVy
Z2VXYXNDb21waWxlZCB8fCBpbkVycm9yKCkpCi0gICAgICAgIHJldHVybiAhaW5FcnJvcigpOwot
Ci0gICAgbV9tZXJnZVdhc0NvbXBpbGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc1Jlc291cmNlQWxs
b2NhdGlvbkZhaWxlZCgobV9tZXJnZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbShtZXJnZUtlcm5l
bFByb2dyYW0pKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNSZXNvdXJjZUFs
bG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VDb3B5T3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1fbWVy
Z2VQcm9ncmFtLCAiY29weSIpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNS
ZXNvdXJjZUFsbG9jYXRpb25GYWlsZWQoKG1fbWVyZ2VPcGVyYXRpb24gPSBrZXJuZWxCeU5hbWUo
bV9tZXJnZVByb2dyYW0sICJtZXJnZSIpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlG
RU1lcmdlQ29weShPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIEludFNpemUgZGVzdGluYXRpb25T
aXplLCBPcGVuQ0xIYW5kbGUgc291cmNlLCBJbnRQb2ludCYgcmVsYXRpdmVTb3VyY2VQb2ludCkK
LXsKLSAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fbWVyZ2VDb3B5T3BlcmF0aW9uLCBkZXN0
aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKLSAgICBrZXJu
ZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3Vy
Y2UpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChyZWxhdGl2ZVNvdXJjZVBvaW50LngoKSk7Ci0g
ICAga2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUG9pbnQueSgpKTsKLSAgICBrZXJu
ZWwucnVuKCk7Ci19Ci0KLWlubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVN
ZXJnZShPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sIE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3Rp
bmF0aW9uLCBPcGVuQ0xIYW5kbGUgc291cmNlQSwgT3BlbkNMSGFuZGxlIHNvdXJjZUIsIEludFNp
emUgZGVzdGluYXRpb25TaXplLCBJbnRQb2ludCYgcmVsYXRpdmVTb3VyY2VQb2ludEEsIEludFBv
aW50JiByZWxhdGl2ZVNvdXJjZVBvaW50QikKLXsKLSAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMs
IG1fbWVyZ2VPcGVyYXRpb24sIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNp
emUuaGVpZ2h0KCkpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7Ci0gICAg
a2VybmVsLmFkZEFyZ3VtZW50KHByZXZpb3VzRGVzdGluYXRpb24pOwotICAgIGtlcm5lbC5hZGRB
cmd1bWVudChzb3VyY2VBKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQoc291cmNlQik7Ci0gICAg
a2VybmVsLmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUG9pbnRBLngoKSk7Ci0gICAga2VybmVs
LmFkZEFyZ3VtZW50KHJlbGF0aXZlU291cmNlUG9pbnRBLnkoKSk7Ci0gICAga2VybmVsLmFkZEFy
Z3VtZW50KHJlbGF0aXZlU291cmNlUG9pbnRCLngoKSk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50
KHJlbGF0aXZlU291cmNlUG9pbnRCLnkoKSk7Ci0gICAga2VybmVsLnJ1bigpOwotfQotCi1ib29s
IEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQotewotICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7Ci0gICAgaWYgKCFj
b250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5jb21waWxlRkVN
ZXJnZSgpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0g
ICAgQVNTRVJUKHNpemUgPiAwKTsKLQotICAgIE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiA9IGNy
ZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7Ci0gICAgT3BlbkNMSGFuZGxlIHNvdXJjZUEgPSAwOwot
ICAgIE9wZW5DTEhhbmRsZSBzb3VyY2VCID0gMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGluOwotCi0g
ICAgaW50IGkgPSAwOwotCi0gICAgaWYgKHNpemUgJiAxKSB7Ci0gICAgICAgIGluID0gaW5wdXRF
ZmZlY3QoaSsrKTsKLSAgICAgICAgc291cmNlQSA9IGluLT5vcGVuQ0xJbWFnZSgpOwotICAgICAg
ICBJbnRQb2ludCByZWxhdGl2ZVNvdXJjZVBvaW50KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxv
Y2F0aW9uKCkpOwotICAgICAgICByZWxhdGl2ZVNvdXJjZVBvaW50LnNldFgoYWJzb2x1dGVQYWlu
dFJlY3QoKS54KCkgLSByZWxhdGl2ZVNvdXJjZVBvaW50LngoKSk7Ci0gICAgICAgIHJlbGF0aXZl
U291cmNlUG9pbnQuc2V0WShhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNl
UG9pbnQueSgpKTsKLQotICAgICAgICBjb250ZXh0LT5hcHBseUZFTWVyZ2VDb3B5KGRlc3RpbmF0
aW9uLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgc291cmNlQSwgcmVsYXRpdmVTb3VyY2VQ
b2ludCk7Ci0gICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dC0+ZmlsbChkZXN0aW5hdGlvbiwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCksIENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpKTsKLQotICAg
IE9wZW5DTEhhbmRsZSBwcmV2aW91c0Rlc3RpbmF0aW9uID0gY29udGV4dC0+Y3JlYXRlT3BlbkNM
SW1hZ2UoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotCi0gICAgd2hpbGUgKGkgPCBzaXpl
KSB7Ci0gICAgICAgIE9wZW5DTEhhbmRsZSB0ZW1wID0gcHJldmlvdXNEZXN0aW5hdGlvbjsKLSAg
ICAgICAgcHJldmlvdXNEZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOwotICAgICAgICBkZXN0aW5h
dGlvbiA9IHRlbXA7Ci0KLSAgICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOwotICAgICAgICBz
b3VyY2VBID0gaW4tPm9wZW5DTEltYWdlKCk7Ci0gICAgICAgIEludFBvaW50IHJlbGF0aXZlU291
cmNlUG9pbnRBKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotICAgICAgICBy
ZWxhdGl2ZVNvdXJjZVBvaW50QS5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRp
dmVTb3VyY2VQb2ludEEueCgpKTsKLSAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludEEuc2V0WShh
YnNvbHV0ZVBhaW50UmVjdCgpLnkoKSAtIHJlbGF0aXZlU291cmNlUG9pbnRBLnkoKSk7Ci0KLSAg
ICAgICAgaW4gPSBpbnB1dEVmZmVjdChpKyspOwotICAgICAgICBzb3VyY2VCID0gaW4tPm9wZW5D
TEltYWdlKCk7Ci0gICAgICAgIEludFBvaW50IHJlbGF0aXZlU291cmNlUG9pbnRCKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotICAgICAgICByZWxhdGl2ZVNvdXJjZVBvaW50
Qi5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpIC0gcmVsYXRpdmVTb3VyY2VQb2ludEIueCgp
KTsKLSAgICAgICAgcmVsYXRpdmVTb3VyY2VQb2ludEIuc2V0WShhYnNvbHV0ZVBhaW50UmVjdCgp
LnkoKSAtIHJlbGF0aXZlU291cmNlUG9pbnRCLnkoKSk7Ci0KLSAgICAgICAgY29udGV4dC0+YXBw
bHlGRU1lcmdlKGRlc3RpbmF0aW9uLCBwcmV2aW91c0Rlc3RpbmF0aW9uLCBzb3VyY2VBLCBzb3Vy
Y2VCLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSwgcmVsYXRpdmVTb3VyY2VQb2ludEEsIHJl
bGF0aXZlU291cmNlUG9pbnRCKTsKLSAgICB9Ci0gICAgc2V0T3BlbkNMSW1hZ2UoZGVzdGluYXRp
b24pOwotICAgIHByZXZpb3VzRGVzdGluYXRpb24uY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMp
ICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI5M2QwNzJmMDJiMzYyZWVmNmYxNTE5ZmEz
MGUxNDQwM2ViYjEzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZF
U291cmNlQWxwaGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAy
MDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5J
VkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRklMVEVS
UykgJiYgRU5BQkxFKE9QRU5DTCkKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgotCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBTb3VyY2VBbHBo
YTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCi17Ci0gICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKLQotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gYXNJbWFnZUJ1ZmZlcigpOwotICAgIGlm
ICghc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNp
emUoKSkpOwotICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0
YSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNl
R3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNs
L09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGIyZTllZjc5MjRmMmEwZjczNjliMDg2MjVhN2IwMGU1ZDk2NzRkZDguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5m
LnUtc3plZ2VkLmh1PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKLSNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJG
aWx0ZXJDb250ZXh0T3BlbkNMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlPcGVuQ0wo
KQotewotICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb250ZXh0KCk7Ci0KLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwotICAgIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSA9IGFzSW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZUlt
YWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJ
bnRQb2ludCgpLCBzb3VyY2VJbWFnZS0+aW50ZXJuYWxTaXplKCkpKTsKLSAgICBjcmVhdGVPcGVu
Q0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShGSUxURVJT
KSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODI4NGViYzExMzUyZjU0NWI1ZTFmN2FiMzFi
NTdhNGQ4ZTk3NzM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVU
dXJidWxlbmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+Ci0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5J
VkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklW
RVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRklMVEVSUykg
JiYgRU5BQkxFKE9QRU5DTCkKLSNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKLQotI2luY2x1ZGUg
IkZFVHVyYnVsZW5jZS5jcHAiCi0jaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgotI2lu
Y2x1ZGUgIlNWR0ZpbHRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiB0dXJidWxlbmNlS2VybmVsUHJvZ3JhbSA9Ci1QUk9HUkFNKAotX19jb25zdGFudCBp
bnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1fX2NvbnN0YW50IGludCBzX2Jsb2NrU2l6ZSA9IDI1
NjsKLV9fY29uc3RhbnQgaW50IHNfYmxvY2tNYXNrID0gMjU1OwotCi10eXBlZGVmIHN0cnVjdCB7
Ci0gICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Ci0gICAgZmxvYXQgbm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWU7Ci19IE5vaXNlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50
IHdpZHRoOwotICAgIGludCB3cmFwWDsKLSAgICBpbnQgaGVpZ2h0OwotICAgIGludCB3cmFwWTsK
LX0gU3RpdGNoRGF0YTsKLQotZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBtYWQoYiAtIGEsIHQsIGEpOwotfQotCi1mbG9h
dCBub2lzZTJEKF9fY29uc3RhbnQgZmxvYXQgKmNvbXBvbmVudCwgX19jb25zdGFudCBpbnQgKmxh
dHRpY2VTZWxlY3RvciwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBmbG9hdCBub2lzZVZlY3Rvclgs
IGZsb2F0IG5vaXNlVmVjdG9yWSwgaW50IHN0aXRjaFRpbGVzKQotewotICAgIE5vaXNlIG5vaXNl
WDsKLSAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA9IChpbnQpKG5vaXNlVmVj
dG9yWCArIHNfcGVybGluTm9pc2UpOwotICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSA9IChub2lzZVZlY3RvclggKyBzX3Blcmxpbk5vaXNlKSAtIG5vaXNlWC5ub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlOwotICAgIE5vaXNlIG5vaXNlWTsKLSAgICBub2lzZVkubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZSA9IChpbnQpKG5vaXNlVmVjdG9yWSArIHNfcGVybGluTm9pc2UpOwot
ICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSA9IChub2lzZVZlY3RvclkgKyBz
X3Blcmxpbk5vaXNlKSAtIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOwotCi0gICAg
Ly8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0gICAg
aWYgKHN0aXRjaFRpbGVzKSB7Ci0gICAgICAgIGlmIChub2lzZVgubm9pc2VQb3NpdGlvbkludGVn
ZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBYKQotICAgICAgICAgICAgbm9pc2VYLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS53aWR0aDsKLSAgICAgICAgaWYgKG5vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3JhcFggLSAxKQotICAg
ICAgICAgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS53
aWR0aCAtIDE7Ci0gICAgICAgIGlmIChub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA+
PSBzdGl0Y2hEYXRhLndyYXBZKQotICAgICAgICAgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQ7Ci0gICAgICAgIGlmIChub2lzZVkubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBZIC0gMSkKLSAgICAgICAgICAg
IG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEuaGVpZ2h0IC0g
MTsKLSAgICB9Ci0KLSAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Js
b2NrTWFzazsKLSAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAmPSBzX2Jsb2Nr
TWFzazsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gbGF0dGljZVNlbGVjdG9yW25vaXNlWC5ub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IGxhdHRp
Y2VTZWxlY3Rvclsobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxKSAmIHNfYmxv
Y2tNYXNrXTsKLQotICAgIGZsb2F0IHN4ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlICogbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogKDMgLSAyICogbm9pc2VY
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKLSAgICBmbG9hdCBzeSA9IG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSAqICgzIC0gMiAqIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7Ci0KLSAgICAv
LyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9T
VkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLSAgICBpbnQgdGVtcCA9IGxh
dHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZV07Ci0gICAgZmxvYXQgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAq
IGNvbXBvbmVudFt0ZW1wICogMl0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUg
KiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKLSAgICB0ZW1wID0gbGF0dGljZVNlbGVjdG9yW25l
eHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0gICAg
ZmxvYXQgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBv
bmVudFt0ZW1wICogMl0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21w
b25lbnRbdGVtcCAqIDIgKyAxXTsKLSAgICBmbG9hdCBhID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7Ci0gICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lz
ZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHUgPSBub2lzZVgubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgKG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07Ci0g
ICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyXSArIChub2lzZVkubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFdOwotICAg
IGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLSAgICByZXR1cm4gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci19Ci0KLV9fa2VybmVsIHZvaWQgVHVyYnVsZW5j
ZShfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9uLCBfX2NvbnN0YW50IGZsb2F0ICp0
cmFuc2Zvcm0sIF9fY29uc3RhbnQgZmxvYXQgKnJlZENvbXBvbmVudCwKLSAgICBfX2NvbnN0YW50
IGZsb2F0ICpncmVlbkNvbXBvbmVudCwgX19jb25zdGFudCBmbG9hdCAqYmx1ZUNvbXBvbmVudCwg
X19jb25zdGFudCBmbG9hdCAqYWxwaGFDb21wb25lbnQsCi0gICAgX19jb25zdGFudCBpbnQgKmxh
dHRpY2VTZWxlY3RvciwgX19wcml2YXRlIGludCBvZmZzZXRYLCBfX3ByaXZhdGUgaW50IG9mZnNl
dFksIF9fcHJpdmF0ZSBpbnQgdGlsZVdpZHRoLAotICAgIF9fcHJpdmF0ZSBpbnQgdGlsZUhlaWdo
dCwgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBfX3ByaXZhdGUgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIF9fcHJpdmF0ZSBpbnQgc3RpdGNoVGlsZXMsCi0gICAgX19wcml2YXRlIGludCBu
dW1PY3RhdmVzLCBfX3ByaXZhdGUgaW50IHR5cGUsIF9fcHJpdmF0ZSBpbnQgZmlsdGVyX2hlaWdo
dCkKLXsKLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGEgPSB7IDAsIDAsIDAsIDAgfTsKLSAgICAv
LyBBZGp1c3QgdGhlIGJhc2UgZnJlcXVlbmNpZXMgaWYgbmVjZXNzYXJ5IGZvciBzdGl0Y2hpbmcu
Ci0gICAgaWYgKHN0aXRjaFRpbGVzKSB7Ci0gICAgICAgIC8vIFdoZW4gc3RpdGNoaW5nIHRpbGVk
IHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVkCi0gICAgICAgIC8v
IHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgICAgIGlm
IChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxv
b3IodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAg
ZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWwodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8g
dGlsZVdpZHRoOwotICAgICAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5l
Z2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgICAgICBiYXNlRnJlcXVl
bmN5WCA9IChiYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBi
YXNlRnJlcXVlbmN5WCkgPyBsb3dGcmVxdWVuY3kgOiBoaWdoRnJlcXVlbmN5OwotICAgICAgICB9
Ci0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSkgewotICAgICAgICAgICAgZmxvYXQgbG93RnJl
cXVlbmN5ID0gZmxvb3IodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7
Ci0gICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbCh0aWxlSGVpZ2h0ICogYmFz
ZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0g
KGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVx
dWVuY3lZKSA/IGxvd0ZyZXF1ZW5jeSA6IGhpZ2hGcmVxdWVuY3k7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2V0IHVwIFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2YWx1ZXMuCi0gICAgICAgIHN0
aXRjaERhdGEud2lkdGggPSByb3VuZCh0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAg
ICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsK
LSAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZCh0aWxlSGVpZ2h0ICogYmFzZUZyZXF1
ZW5jeVkpOwotICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRj
aERhdGEuaGVpZ2h0OwotICAgIH0KLSAgICBmbG9hdDQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
ID0gKGZsb2F0NCkoMCwgMCwgMCwgMCk7Ci0gICAgZmxvYXQgeCA9IChnZXRfZ2xvYmFsX2lkKDAp
ICsgb2Zmc2V0WCkgKiBiYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCB5ID0gKGdldF9nbG9iYWxf
aWQoMSkgKyBvZmZzZXRZKSAqIGJhc2VGcmVxdWVuY3lZOwotCi0gICAgZmxvYXQgbm9pc2VWZWN0
b3JYID0gdHJhbnNmb3JtWzBdICogeCArIHRyYW5zZm9ybVsyXSAqIHkgKyB0cmFuc2Zvcm1bNF07
Ci0gICAgZmxvYXQgbm9pc2VWZWN0b3JZID0gdHJhbnNmb3JtWzFdICogeCArIHRyYW5zZm9ybVsz
XSAqIHkgKyB0cmFuc2Zvcm1bNV07Ci0KLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChp
bnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAg
ZmxvYXQ0IG5vaXNlMkRSZXN1bHQgPSAoZmxvYXQ0KSggbm9pc2UyRChyZWRDb21wb25lbnQsIGxh
dHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0
aXRjaFRpbGVzKSAvIHJhdGlvLAotICAgIG5vaXNlMkQoZ3JlZW5Db21wb25lbnQsIGxhdHRpY2VT
ZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRp
bGVzKSAvIHJhdGlvLAotICAgIG5vaXNlMkQoYmx1ZUNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9y
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8g
cmF0aW8sCi0gICAgbm9pc2UyRChhbHBoYUNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW8p
OwotCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSAodHlwZSA9PSAxKSA/IG5v
aXNlMkRSZXN1bHQgOiBmYWJzKG5vaXNlMkRSZXN1bHQpOwotCi0gICAgICAgIG5vaXNlVmVjdG9y
WCAqPSAyOwotICAgICAgICBub2lzZVZlY3RvclkgKj0gMjsKLSAgICAgICAgcmF0aW8gKj0gMjsK
LSAgICAgICAgaWYgKHN0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNo
IHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZW9pc2UgYmVmb3JlIHRoZSBtdWx0aXBs
aWNhdGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmll
cyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAq
PSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBY
IC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0g
ICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Bl
cmxpbk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gMSkKLSAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gbWFkKDAuNWYsIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCwgMC41Zik7Ci0gICAgLy8gQ2xhbXAgcmVzdWx0LgotICAgIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCA9IGNsYW1wKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMC4wZiwgMS4wZik7
Ci0KLSAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFsX2lkKDAp
LCBnZXRfZ2xvYmFsX2lkKDEpKSwgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLSk7IC8v
IEVuZCBvZiBPcGVuQ0wga2VybmVscwotCi1pbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb21waWxlRkVUdXJidWxlbmNlKCkKLXsKLSAgICBpZiAobV90dXJidWxlbmNlV2FzQ29tcGls
ZWQgfHwgaW5FcnJvcigpKQotICAgICAgICByZXR1cm4gIWluRXJyb3IoKTsKLQotICAgIG1fdHVy
YnVsZW5jZVdhc0NvbXBpbGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc1Jlc291cmNlQWxsb2NhdGlv
bkZhaWxlZCgobV90dXJidWxlbmNlUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKHR1cmJ1bGVuY2VL
ZXJuZWxQcm9ncmFtKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzUmVzb3Vy
Y2VBbGxvY2F0aW9uRmFpbGVkKChtX3R1cmJ1bGVuY2VPcGVyYXRpb24gPSBrZXJuZWxCeU5hbWUo
bV90dXJidWxlbmNlUHJvZ3JhbSwgIlR1cmJ1bGVuY2UiKSkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVu
Q0w6OmFwcGx5RkVUdXJidWxlbmNlKE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwKLSAgICBJbnRT
aXplIGRlc3RpbmF0aW9uU2l6ZSwgaW50IHRvdGFsQmxvY2tTaXplLAotICAgIHZvaWQqIHRyYW5z
Zm9ybSwgdm9pZCogcmVkQ29tcG9uZW50LCB2b2lkKiBncmVlbkNvbXBvbmVudCwKLSAgICB2b2lk
KiBibHVlQ29tcG9uZW50LCB2b2lkKiBhbHBoYUNvbXBvbmVudCwKLSAgICBpbnQqIGxhdHRpY2VT
ZWxlY3RvciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZLCBpbnQgdGlsZVdpZHRoLCBpbnQgdGls
ZUhlaWdodCwKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGJvb2wgc3RpdGNoVGlsZXMsIGludCBudW1PY3RhdmVzLCBpbnQgdHlwZSkKLXsKLSAgICBSdW5L
ZXJuZWwga2VybmVsKHRoaXMsIG1fdHVyYnVsZW5jZU9wZXJhdGlvbiwgZGVzdGluYXRpb25TaXpl
LndpZHRoKCksIGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoZGVzdGluYXRpb24pOwotICAgIE9wZW5DTEhhbmRsZSB0cmFuc2Zvcm1IYW5kbGUoa2Vy
bmVsLmFkZEFyZ3VtZW50KHRyYW5zZm9ybSwgc2l6ZW9mKGZsb2F0KSAqIDYpKTsKLSAgICBPcGVu
Q0xIYW5kbGUgcmVkQ29tcG9uZW50SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChyZWRDb21wb25l
bnQsIHNpemVvZihmbG9hdCkgKiB0b3RhbEJsb2NrU2l6ZSAqIDIpKTsKLSAgICBPcGVuQ0xIYW5k
bGUgZ3JlZW5Db21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGdyZWVuQ29tcG9uZW50
LCBzaXplb2YoZmxvYXQpICogdG90YWxCbG9ja1NpemUgKiAyKSk7Ci0gICAgT3BlbkNMSGFuZGxl
IGJsdWVDb21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGJsdWVDb21wb25lbnQsIHNp
emVvZihmbG9hdCkgKiB0b3RhbEJsb2NrU2l6ZSAqIDIpKTsKLSAgICBPcGVuQ0xIYW5kbGUgYWxw
aGFDb21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGFscGhhQ29tcG9uZW50LCBzaXpl
b2YoZmxvYXQpICogdG90YWxCbG9ja1NpemUgKiAyKSk7Ci0gICAgT3BlbkNMSGFuZGxlIGxhdHRp
Y2VTZWxlY3RvckhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQobGF0dGljZVNlbGVjdG9yLCBzaXpl
b2YoaW50KSAqIHRvdGFsQmxvY2tTaXplKSk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KG9mZnNl
dFgpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRZKTsKLSAgICBrZXJuZWwuYWRkQXJn
dW1lbnQodGlsZVdpZHRoKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZUhlaWdodCk7Ci0g
ICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VGcmVxdWVuY3lYKTsKLSAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoYmFzZUZyZXF1ZW5jeVkpOwotICAgIGtlcm5lbC5hZGRBcmd1bWVudChzdGl0Y2hUaWxl
cyk7Ci0gICAga2VybmVsLmFkZEFyZ3VtZW50KG51bU9jdGF2ZXMpOwotICAgIGtlcm5lbC5hZGRB
cmd1bWVudCh0eXBlKTsKLSAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb25TaXplLmhl
aWdodCgpKTsKLQotICAgIGtlcm5lbC5ydW4oKTsKLQotICAgIHRyYW5zZm9ybUhhbmRsZS5jbGVh
cigpOwotICAgIHJlZENvbXBvbmVudEhhbmRsZS5jbGVhcigpOwotICAgIGdyZWVuQ29tcG9uZW50
SGFuZGxlLmNsZWFyKCk7Ci0gICAgYmx1ZUNvbXBvbmVudEhhbmRsZS5jbGVhcigpOwotICAgIGFs
cGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7Ci0gICAgbGF0dGljZVNlbGVjdG9ySGFuZGxlLmNs
ZWFyKCk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKLXsK
LSAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6
Y29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFjb250ZXh0LT5jb21waWxlRkVUdXJidWxlbmNlKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VS
ZXN1bHQoKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCByb3VuZGVk
SW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpKTsKLSAgICBpbml0UGFp
bnQocGFpbnRpbmdEYXRhKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnRlZFRyYW5zZm9y
bSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHRmlsdGVyKj4oZmlsdGVyKCkpLT5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLmludmVyc2UoKTsKLSAgICBmbG9hdCB0cmFuc2Zvcm1Db21wb25lbnRzWzZdID0geyBp
bnZlcnRlZFRyYW5zZm9ybS5hKCksIGludmVydGVkVHJhbnNmb3JtLmIoKSwgaW52ZXJ0ZWRUcmFu
c2Zvcm0uYygpLCBpbnZlcnRlZFRyYW5zZm9ybS5kKCksIGludmVydGVkVHJhbnNmb3JtLmUoKSwg
aW52ZXJ0ZWRUcmFuc2Zvcm0uZigpIH07Ci0KLSAgICBjb250ZXh0LT5hcHBseUZFVHVyYnVsZW5j
ZShkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIDIgKiBzX2Jsb2NrU2l6
ZSArIDIsIHRyYW5zZm9ybUNvbXBvbmVudHMsIHBhaW50aW5nRGF0YS5ncmFkaWVudCwKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMSwgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMiwg
cGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMywgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvciwK
LSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QoKS54KCksIGFic29sdXRlUGFpbnRSZWN0KCkueSgp
LCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6
ZS5oZWlnaHQoKSwKLSAgICAgICAgbV9iYXNlRnJlcXVlbmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwg
bV9zdGl0Y2hUaWxlcywgbV9udW1PY3RhdmVzLCBtX3R5cGUpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShGSUxURVJT
KSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZhNzViOTRlM2ZlNGI5ZGJiNzVmODEyOWQwNzdmOTM1ODI4YjY1MTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0
eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGlu
Zi51LXN6ZWdlZC5odT4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZiBFTkFCTEUo
T1BFTkNMKQotCi0jaWZuZGVmIE9wZW5DTEhhbmRsZV9oCi0jZGVmaW5lIE9wZW5DTEhhbmRsZV9o
Ci0KLSNpbmNsdWRlICJDTC9jbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE9w
ZW5DTEhhbmRsZSB7Ci1wdWJsaWM6Ci0gICAgT3BlbkNMSGFuZGxlKCkgOiBtX29wZW5DTE1lbW9y
eSgwKSB7IH0KLSAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5DTE1lbW9yeSkgOiBtX29wZW5D
TE1lbW9yeShvcGVuQ0xNZW1vcnkpIHsgfQotCi0gICAgb3BlcmF0b3IgY2xfbWVtKCkgeyByZXR1
cm4gbV9vcGVuQ0xNZW1vcnk7IH0KLQotICAgIHZvaWQgb3BlcmF0b3I9KE9wZW5DTEhhbmRsZSBv
cGVuQ0xNZW1vcnkpIHsgbV9vcGVuQ0xNZW1vcnkgPSBvcGVuQ0xNZW1vcnk7IH0KLQotICAgIC8v
IFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBi
b29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KLSAgICB0eXBlZGVmIGNsX21lbSAo
T3BlbkNMSGFuZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7Ci0gICAgb3BlcmF0b3IgVW5zcGVj
aWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkNMTWVtb3J5ID8gJk9wZW5DTEhh
bmRsZTo6bV9vcGVuQ0xNZW1vcnkgOiAwOyB9Ci0KLSAgICB2b2lkKiBoYW5kbGVBZGRyZXNzKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3BlbkNMTWVtb3J5KTsgfQotCi0g
ICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBpZiAobV9vcGVuQ0xNZW1vcnkpCi0gICAg
ICAgICAgICBjbFJlbGVhc2VNZW1PYmplY3QobV9vcGVuQ0xNZW1vcnkpOwotICAgICAgICBtX29w
ZW5DTE1lbW9yeSA9IDA7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNsX21lbSBtX29wZW5DTE1l
bW9yeTsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkK
</data>
<flag name="review"
          id="257874"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>