<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">
<p style="margin: 0px 0px 1.2em !important;">Dear Roland,</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;">Thanks for the prompt
response.</p>
<p style="margin: 0px 0px 1.2em !important;">You solution got rid
of the error, so it does seem to be a path issues after all.</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;">However, right after
that, I got another error</p>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">/home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../lib/libopen-pal.so: undefined reference to `<a class="moz-txt-link-abbreviated" href="mailto:memcpy@GLIBC_2.14">memcpy@GLIBC_2.14</a>'
/home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../lib/./libpmix.so.2: undefined reference to `<a class="moz-txt-link-abbreviated" href="mailto:clock_gettime@GLIBC_2.17">clock_gettime@GLIBC_2.17</a>'
/home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu/11.4.0/../../../../lib/./././libicuuc.so.73: undefined reference to `std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30'
collect2: error: ld returned 1 exit status
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">which seems to be
related to GLIBC.</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;">From a quick search
online, it seems that conda does not allow from a custom version
of glibc, and the packages available in conda-forge use the
system glibc, as can be seen when inside the virtual environment</p>
<pre style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">$ ldd $(which gcc)
linux-vdso.so.1 (0x00007ffd03a67000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f134b3a3000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f134b1b7000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f134b4ca000)
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">My guess would be
that GCC expects a given version of GLIBC (more than one,
apparently, which feels weird to me) and is unable to find them
on my system, because I cannot provide them.</p>
<p style="margin: 0px 0px 1.2em !important;">My understanding on
these topics is sparse at best, so I'm just going to believe
that there is no way to insert a custom glibc here somehow.<br>
</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;">To be clear, I’m not
longer asking for your support on this, I’m merely just
reporting it for you and those that happen to be following this
thread.</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;">Thank you for your
assistance,</p>
<p style="margin: 0px 0px 1.2em !important;">All the best,</p>
<p style="margin: 0px 0px 1.2em !important;">José Ferreira</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;"><b>P.S.:</b> Is there
any workaround on <a href="https://bitbucket.org/einsteintoolkit/tickets/issues/2802/compilation-faiulres-in-twopunctures_bbhsf" class="moz-txt-link-freetext">https://bitbucket.org/einsteintoolkit/tickets/issues/2802/compilation-faiulres-in-twopunctures_bbhsf</a>,
for instance, by inserting some flag on GCC 14 and recover the
warning where now there is an error?<br>
</p>
<p style="margin: 0px 0px 1.2em !important;"><br>
</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<div class="moz-cite-prefix">On 12/06/24 19:29, Roland Haas
wrote:<br>
</div>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<blockquote type="cite" cite="mid:20240612132911.7d1008e4@ekohaes8.ncsa.illinois.edu">
<pre class="moz-quote-pre" wrap="">Hello José,
Thanks for the detailed report.
I do not really use conda myself unfortunately, so will not be able to
directly test it though (unless things really go sideways).
The error you are encountering now is that the linker cannot find the
libz.so (or libz.a or libz.la) linker file. This is the zlib library
used for compression by eg HDF5.
This can have multiple reasons. During configuration Cactus (really the
ExternalLibraries/zlib thorn) tries to determine where zlib is located
and set up linker options accordingly. It does so by (among other
things) searching "well known" locations for the file (among them /usr
and others). If found in one of those "well known" locations, which are
normally included in the compiler's default search path, it will not
add an explicit linker option so as to not move a location from the
"default" priority to "high" priority via an -L option (since this
causes no end of issues, and is eg also what cmake does).
Long story short, the anaconda provided linker may not look at those
"well known" locations since it wants to keep everything contained in
the anaconda environment (which mostly works for Python but not really
for anything else).
To fix this you'd do like you already do for eg GSL and add a
ZLIB_DIR = /home/undercover/.micromamba/envs/phd/
setting to your option list (assuming that say libz.so is in /home/undercover/.micromamba/envs/phd/lib/libz.so).
Similarly for other errors of the same sort.
The automated search and build functionality in Cactus is mostly geared
towards vanilla Linux installations using one of the distributions
listed in
<a class="moz-txt-link-freetext" href="https://github.com/einsteintoolkit/jupyter-et/blob/master/tutorial-server/notebooks/CactusTutorial.ipynb">https://github.com/einsteintoolkit/jupyter-et/blob/master/tutorial-server/notebooks/CactusTutorial.ipynb</a>
in the "Prerequisites" sections or macOS (using HomeBrew or MacPorts).
When used in other circumstances (on clusters, or, apparently, with
[mini]conda) failures are unfortunately common and one has to provide much
more information manually. Hopefully the suggestion above helps a bit.
Coincidentally I presented a talk on the Cactus build system (and some
ways of verifying what is going on) at the ET summer school and
workshop last week at LSU, which may help you find out exactly what is
going on. You can find the slides for this here (and soon also on the
summer school web-page):
<a class="moz-txt-link-freetext" href="https://github.com/rhaas80/2024_LSU/blob/main/CactusBuildSytemTour.ipynb">https://github.com/rhaas80/2024_LSU/blob/main/CactusBuildSytemTour.ipynb</a>
Yours,
Roland
On Wed, 12 Jun 2024 19:04:49 +0100, José Ferreira wrote:
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">Hello Roland,
Thanks for the reply, and apologies for not including all relevant
information.
One of the things is that I forgot to mention that conda (in this
case, micromamba, a drop-in alternative that is fully compatible)
sets some environmental variables by itself. Obviously, some of them
are are the overwritten with whatever is on the |.cfg| file.
It turns out that micromamba sets |$LD| to point towards the |ld|
binary provided by the virtual environment
Adding |LD = g++| as you suggested resulted in a slightly different
error
|Creating cactus_empty in /home/undercover/projects/cactus/exe from
/home/undercover/.micromamba/envs/phd/bin/../lib/gcc/x86_64-conda-linux-gnu
/11.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: cannot find -lz:
No such file or directory collect2: error: ld returned 1 exit status
make[1]: ***
[/home/undercover/projects/cactus/lib/make/make.configuration:150:
/home/undercover/projects/cactus/exe/cactus_empty] Error 1 make: ***
[Makefile:265: empty] Error 2 |
To avoid back and forth between e-mails, and to add some information
that was previously missing, here are the steps that I take to
reproduce the error
1.
Create a new conda environment and activate it (in my machine it__
_s
called “phd”)
2.
|conda install gcc gxx gfortran openmpi openmpi-mpicc
openmpi-mpicxx openmpi-mpifort binutils|
3.
Compile the toolkit with the thornlist |empty.th| and the options
file |venv.cfg|, both attached again to this e-mail
4.
Configuration is created without any issues, with the terminal
output attached to |empty.log| (this file was missing in the
previous e-mail), and get the error making the binary, with the
terminal output attached in |cactus_empty.log|
Further relevant information about the running status of the machine:
*
Environmental variables: see file |env.txt| which includes a
stripped down version of the environmental variables. For
instance, you can see that |$LD| is set and carries on with its value
during compilation, but |$LDFLAGS|, |$CFLAGS| and |$CXXFLAGS| are
overwritten by whatever is in the |venv.cfg|. Even if I
concatenate the environmental variables from the shell with the ones
from the options file, it still doesn’t work.
*
OS: Manjaro
*
Kernel: Linux legion 5.10.218-1-MANJARO #1 SMP PREEMPT Mon May 27
02:19:19 UTC 2024 x86_64 GNU/Linux
*
CPU: Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz (quad core)
*
Package Manager: Micromamba
<a class="moz-txt-link-rfc2396E" href="https://urldefense.com/v3/__https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html__;!!DZ3fjg!4JUhc_Pyghv7QqhhZMN_0qShBOabzxJWmOQed8oSme19pKFVPvO_FgbMz2l69QVIuUf2kUS14LoJ0DHZJOeg$"><https://urldefense.com/v3/__https://mamba.readthedocs.io/en/latest/use
r_guide/micromamba.html__;!!DZ3fjg!4JUhc_Pyghv7QqhhZMN_0qShBOabzxJWmOQed8oS
me19pKFVPvO_FgbMz2l69QVIuUf2kUS14LoJ0DHZJOeg$ ></a>
using the conda-forge
<a class="moz-txt-link-rfc2396E" href="https://urldefense.com/v3/__https://conda-forge.org/packages/__;!!DZ3fjg!4JUhc_Pyghv7QqhhZMN_0qShBOabzxJWmOQed8oSme19pKFVPvO_FgbMz2l69QVIuUf2kUS14LoJ0BBzkfxl$"><https://urldefense.com/v3/__https://conda-forge.
org/packages/__;!!DZ3fjg!4JUhc_Pyghv7QqhhZMN_0qShBOabzxJWmOQed8oSme19pKFVPv
O_FgbMz2l69QVIuUf2kUS14LoJ0BBzkfxl$ ></a> repositories
It should be noted that I am able of replicating this bug on my
laptop (this machine) and two different desktops that are both
running Arch Linux.
This is not totally unexpected considering they are very similar OS__
_s with the same versions of the software that is being used.
I hope that I could make it as clear as possible.
Best regards,
José Ferreira
On 12/06/24 15:59, Roland Haas wrote:
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">Hello Jose,
Cactus uses the C++ compiler to link things.
This is controlled by the LD option list option.
In your option list (thank you for including it) you do not set it,
so it should default to the value of CXX.
However if there is an environment variable LD set, then this will
override the option list default (you'd see eg LD in the output of
the env command).
So as a first try, I'd add
LD = g++
to your option list and recompile from scratch.
If that does not help, then more information will be required.
Please see:
<a class="moz-txt-link-freetext" href="https://urldefense.com/v3/__http://einsteintoolkit.org/support.html*gener">https://urldefense.com/v3/__http://einsteintoolkit.org/support.html*gener</a>
</pre>
</blockquote>
<pre class="moz-quote-pre" wrap="">al-guidelines-for-questions__;Iw!!DZ3fjg!4JUhc_Pyghv7QqhhZMN_0qShBOabzxJWmO
Qed8oSme19pKFVPvO_FgbMz2l69QVIuUf2kUS14LoJ0A8OitkU$ >
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">for what to include.
Yours,
Roland
On Wed, 12 Jun 2024 15:51:13 +0100, José Ferreira wrote:
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">Dear toolkit users and developers,
With the latest update of GCC to version 14, there is a known error
that prevents the compilation from taking place, preventing me from
compiling the toolkit.
I’ve been trying to do something which I probably should have so
</pre>
</blockquote>
</blockquote>
<pre class="moz-quote-pre" wrap="">me
</pre>
<blockquote type="cite">
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">time ago to avoid this kind of issues, while also granting some
portability between machines, which is to setup a virtual
environment using Conda to compile the toolkit.
I am sending you this e-mail because I’ve failed to compile the
toolkit in a virtual environment, where I am currently stuck with
an error during the linking phase. Before the update to GCC 14, and
without the virtual environment, I was able of compiling the
toolkit without any issue.
Here are the steps that I have performed:
1.
Activate an empty virtual environment managed by a conda (or a
drop-in replacement) with the conda-forge repository configured
2.
|conda install gcc gxx gfortran openmpi openmpi-mpicc
openmpi-mpicxx openmpi-mpifort binutils|
3.
Compile the toolkit with an empty thornlist, attached in
|empty.th|, and an option file that points towards the virtual
environment that is activated, attached in |venv.cfg|
4.
Get the following error from |ld| (the full log for making the
config and the binary are attached in |cactus_empty.log|)
|Creating cactus_empty in /home/undercover/projects/cactus/exe from
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld:
unrecognised emulation mode: arch=native Supported emulations:
elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu make[1]: ***
[/home/undercover/projects/cactus/lib/make/make.configuration:150:
/home/undercover/projects/cactus/exe/cactus_empty] Error 1 make:
*** [Makefile:265: empty] Error 2 |
To me, the previous error indicates that something is passing the
wrong flags to |ld|, because even if the emulation mode was not
recognized it should give the error |ld: unrecognised emulation
mode: <something>| instead of |ld: unrecognised emulation mode:
arch=<something>|.
Removing the flag |-march=native| from the compilers confirms my
guess by revealing a different error at the same stage
|Creating cactus_empty in /home/undercover/projects/cactus/exe from
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld:
unrecognized option '-DMPICH_IGNORE_CXX_SEEK'
/home/undercover/.micromamba/envs/phd/bin/x86_64-conda-linux-gnu-ld:
use the --help option for usage information make[1]: ***
[/home/undercover/projects/cactus/lib/make/make.configuration:150:
/home/undercover/projects/cactus/exe/cactus_empty] Error 1 make:
*** [Makefile:265: empty] Error 2 |
and if I were to remove the corresponding flag in the config file,
|ld| will complain about something else.
It really seems like something is passing the flags onto |ld| where
it shouldn’t, but I cannot tell who and where.
I should note that compiling very basic programs in C in the
virtual environment doesn’t raise any issues, although I haven’t
</pre>
</blockquote>
</blockquote>
<pre class="moz-quote-pre" wrap=""> tested it
</pre>
<blockquote type="cite">
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">very thoroughly.
Please do let me know if you have any issues in rendering this
e-mail!
Best regards,
José Ferreira
</pre>
</blockquote>
</blockquote>
<pre class="moz-quote-pre" wrap="">
</pre>
</blockquote>
<pre class="moz-quote-pre" wrap=""></pre>
</blockquote>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div title="MDH:PHA+RGVhciBSb2xhbmQsPC9wPjxwPjxicj48L3A+PHA+VGhhbmtzIGZvciB0aGUgcHJvbXB0IHJl
c3BvbnNlLjwvcD48cD5Zb3Ugc29sdXRpb24gZ290IHJpZCBvZiB0aGUgZXJyb3IsIHNvIGl0IGRv
ZXMgc2VlbSB0byBiZSBhIHBhdGggaXNzdWVzIGFmdGVyIGFsbC48L3A+PHA+PGJyPjwvcD48cD5I
b3dldmVyLCByaWdodCBhZnRlciB0aGF0LCBJIGdvdCBhbm90aGVyIGVycm9yPGJyPmBgYDwvcD48
cD4vaG9tZS91bmRlcmNvdmVyLy5taWNyb21hbWJhL2VudnMvcGhkL2Jpbi8uLi9saWIvZ2NjL3g4
Nl82NC1jb25kYS1saW51eC1nbnUvMTEuNC4wLy4uLy4uLy4uLy4uL3g4Nl82NC1jb25kYS1saW51
eC1nbnUvYmluL2xkOiAvaG9tZS91bmRlcmNvdmVyLy5taWNyb21hbWJhL2VudnMvcGhkL2Jpbi8u
Li9saWIvZ2NjL3g4Nl82NC1jb25kYS1saW51eC1nbnUvMTEuNC4wLy4uLy4uLy4uLy4uL2xpYi9s
aWJvcGVuLXBhbC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbWVtY3B5QEdMSUJDXzIuMTQn
PGJyPi9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEvZW52cy9waGQvYmluLy4uL2xpYi9nY2Mv
eDg2XzY0LWNvbmRhLWxpbnV4LWdudS8xMS40LjAvLi4vLi4vLi4vLi4veDg2XzY0LWNvbmRhLWxp
bnV4LWdudS9iaW4vbGQ6IC9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEvZW52cy9waGQvYmlu
Ly4uL2xpYi9nY2MveDg2XzY0LWNvbmRhLWxpbnV4LWdudS8xMS40LjAvLi4vLi4vLi4vLi4vbGli
Ly4vbGlicG1peC5zby4yOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjbG9ja19nZXR0aW1lQEdM
SUJDXzIuMTcnPGJyPi9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEvZW52cy9waGQvYmluLy4u
L2xpYi9nY2MveDg2XzY0LWNvbmRhLWxpbnV4LWdudS8xMS40LjAvLi4vLi4vLi4vLi4veDg2XzY0
LWNvbmRhLWxpbnV4LWdudS9iaW4vbGQ6IC9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEvZW52
cy9waGQvYmluLy4uL2xpYi9nY2MveDg2XzY0LWNvbmRhLWxpbnV4LWdudS8xMS40LjAvLi4vLi4v
Li4vLi4vbGliLy4vLi8uL2xpYmljdXVjLnNvLjczOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBz
dGQ6OmNvbmRpdGlvbl92YXJpYWJsZTo6d2FpdChzdGQ6OnVuaXF1ZV9sb2NrJmx0O3N0ZDo6bXV0
ZXgmZ3Q7JmFtcDspQEdMSUJDWFhfMy40LjMwJzxicj5jb2xsZWN0MjogZXJyb3I6IGxkIHJldHVy
bmVkIDEgZXhpdCBzdGF0dXM8YnI+PC9wPjxwPmBgYDwvcD48cD53aGljaCBzZWVtcyB0byBiZSBy
ZWxhdGVkIHRvIEdMSUJDLjwvcD48cD5Gcm9tIGEgcXVpY2sgc2VhcmNoIG9ubGluZSwgaXQgc2Vl
bXMgdGhhdCBjb25kYSBkb2VzIG5vdCBhbGxvdyBmcm9tIGEgY3VzdG9tIHZlcnNpb24gb2YgZ2xp
YmMsIGFuZCB0aGUgcGFja2FnZXMgYXZhaWxhYmxlIGluIGNvbmRhLWZvcmdlIHVzZSB0aGUgc3lz
dGVtIGdsaWJjLCBhcyBjYW4gYmUgc2VlbiB3aGVuIGluc2lkZSB0aGUgdmlydHVhbCBlbnZpcm9u
bWVudDwvcD48cD5gYGA8L3A+PHA+JCBsZGQgJCh3aGljaCBnY2MpPGJyPiZuYnNwOyZuYnNwOyAm
bmJzcDtsaW51eC12ZHNvLnNvLjEgKDB4MDAwMDdmZmQwM2E2NzAwMCk8YnI+Jm5ic3A7Jm5ic3A7
ICZuYnNwO2xpYm0uc28uNiA9Jmd0OyAvdXNyL2xpYi9saWJtLnNvLjYgKDB4MDAwMDdmMTM0YjNh
MzAwMCk8YnI+Jm5ic3A7Jm5ic3A7ICZuYnNwO2xpYmMuc28uNiA9Jmd0OyAvdXNyL2xpYi9saWJj
LnNvLjYgKDB4MDAwMDdmMTM0YjFiNzAwMCk8YnI+Jm5ic3A7Jm5ic3A7ICZuYnNwOy9saWI2NC9s
ZC1saW51eC14ODYtNjQuc28uMiA9Jmd0OyAvdXNyL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4y
ICgweDAwMDA3ZjEzNGI0Y2EwMDApPGJyPjwvcD48cD5gYGA8L3A+PHA+TXkgZ3Vlc3Mgd291bGQg
YmUgdGhhdCBHQ0MgZXhwZWN0cyBhIGdpdmVuIHZlcnNpb24gb2YgR0xJQkMgKG1vcmUgdGhhbiBv
bmUsIGFwcGFyZW50bHksIHdoaWNoIGZlZWxzIHdlaXJkIHRvIG1lKSBhbmQgaXMgdW5hYmxlIHRv
IGZpbmQgdGhlbSBvbiB0aGUgbG9jYWwgc3lzdGVtLjxicj48L3A+PHA+PGJyPjwvcD48cD5UbyBi
ZSBjbGVhciwgSSdtIG5vdCBsb25nZXIgYXNraW5nIGZvciB5b3VyIHN1cHBvcnQgb24gdGhpcywg
SSdtIG1lcmVseSBqdXN0IHJlcG9ydGluZyBpdCBmb3IgdGhvc2Ugd2hvIGhhcHBlbiB0byBiZSBm
b2xsb3dpbmcgdGhpcyB0aHJlYWQuPC9wPjxwPkl0IHNlZW1zIHRoYXQgY3JlYXRpbmcgYSB2aXJ0
dWFsIGVudmlyb25tZW50IHRvIGF2b2lkIHBvc3NpYmxlIGlzc3VlcyBkdXJpbmcgdXBkYXRlcywg
ZG9lcyBub3Qgd29yayBhcyBJIGV4cGVjdGVkITwvcD48cD48YnI+PC9wPjxwPlRoYW5rIHlvdSBm
b3IgeW91ciBhc3Npc3RhbmNlLDwvcD48cD5BbGwgdGhlIGJlc3QsPC9wPjxwPkpvc8OpIEZlcnJl
aXJhPC9wPjxwPjxicj48L3A+PGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxMi8wNi8y
NCAxOToyOSwgUm9sYW5kIEhhYXMgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNp
dGUiIGNpdGU9Im1pZDoyMDI0MDYxMjEzMjkxMS43ZDEwMDhlNEBla29oYWVzOC5uY3NhLmlsbGlu
b2lzLmVkdSI+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5IZWxsbyBKb3PDqSwK
ClRoYW5rcyBmb3IgdGhlIGRldGFpbGVkIHJlcG9ydC4KCkkgZG8gbm90IHJlYWxseSB1c2UgY29u
ZGEgbXlzZWxmIHVuZm9ydHVuYXRlbHksIHNvIHdpbGwgbm90IGJlIGFibGUgdG8KZGlyZWN0bHkg
dGVzdCBpdCB0aG91Z2ggKHVubGVzcyB0aGluZ3MgcmVhbGx5IGdvIHNpZGV3YXlzKS4KClRoZSBl
cnJvciB5b3UgYXJlIGVuY291bnRlcmluZyBub3cgaXMgdGhhdCB0aGUgbGlua2VyIGNhbm5vdCBm
aW5kIHRoZQpsaWJ6LnNvIChvciBsaWJ6LmEgb3IgbGliei5sYSkgbGlua2VyIGZpbGUuIFRoaXMg
aXMgdGhlIHpsaWIgbGlicmFyeQp1c2VkIGZvciBjb21wcmVzc2lvbiBieSBlZyBIREY1LiAKClRo
aXMgY2FuIGhhdmUgbXVsdGlwbGUgcmVhc29ucy4gRHVyaW5nIGNvbmZpZ3VyYXRpb24gQ2FjdHVz
IChyZWFsbHkgdGhlCkV4dGVybmFsTGlicmFyaWVzL3psaWIgdGhvcm4pIHRyaWVzIHRvIGRldGVy
bWluZSB3aGVyZSB6bGliIGlzIGxvY2F0ZWQKYW5kIHNldCB1cCBsaW5rZXIgb3B0aW9ucyBhY2Nv
cmRpbmdseS4gSXQgZG9lcyBzbyBieSAoYW1vbmcgb3RoZXIKdGhpbmdzKSBzZWFyY2hpbmcgIndl
bGwga25vd24iIGxvY2F0aW9ucyBmb3IgdGhlIGZpbGUgKGFtb25nIHRoZW0gL3VzcgphbmQgb3Ro
ZXJzKS4gSWYgZm91bmQgaW4gb25lIG9mIHRob3NlICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMsIHdo
aWNoIGFyZQpub3JtYWxseSBpbmNsdWRlZCBpbiB0aGUgY29tcGlsZXIncyBkZWZhdWx0IHNlYXJj
aCBwYXRoLCBpdCB3aWxsIG5vdAphZGQgYW4gZXhwbGljaXQgbGlua2VyIG9wdGlvbiBzbyBhcyB0
byBub3QgbW92ZSBhIGxvY2F0aW9uIGZyb20gdGhlCiJkZWZhdWx0IiBwcmlvcml0eSB0byAiaGln
aCIgcHJpb3JpdHkgdmlhIGFuIC1MIG9wdGlvbiAoc2luY2UgdGhpcwpjYXVzZXMgbm8gZW5kIG9m
IGlzc3VlcywgYW5kIGlzIGVnIGFsc28gd2hhdCBjbWFrZSBkb2VzKS4KCkxvbmcgc3Rvcnkgc2hv
cnQsIHRoZSBhbmFjb25kYSBwcm92aWRlZCBsaW5rZXIgbWF5IG5vdCBsb29rIGF0IHRob3NlCiJ3
ZWxsIGtub3duIiBsb2NhdGlvbnMgc2luY2UgaXQgd2FudHMgdG8ga2VlcCBldmVyeXRoaW5nIGNv
bnRhaW5lZCBpbgp0aGUgYW5hY29uZGEgZW52aXJvbm1lbnQgKHdoaWNoIG1vc3RseSB3b3JrcyBm
b3IgUHl0aG9uIGJ1dCBub3QgcmVhbGx5CmZvciBhbnl0aGluZyBlbHNlKS4gCgpUbyBmaXggdGhp
cyB5b3UnZCBkbyBsaWtlIHlvdSBhbHJlYWR5IGRvIGZvciBlZyBHU0wgYW5kIGFkZCBhCgpaTElC
X0RJUiA9IC9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEvZW52cy9waGQvCgpzZXR0aW5nIHRv
IHlvdXIgb3B0aW9uIGxpc3QgKGFzc3VtaW5nIHRoYXQgc2F5IGxpYnouc28gaXMgaW4gL2hvbWUv
dW5kZXJjb3Zlci8ubWljcm9tYW1iYS9lbnZzL3BoZC9saWIvbGliei5zbykuCgpTaW1pbGFybHkg
Zm9yIG90aGVyIGVycm9ycyBvZiB0aGUgc2FtZSBzb3J0LgoKVGhlIGF1dG9tYXRlZCBzZWFyY2gg
YW5kIGJ1aWxkIGZ1bmN0aW9uYWxpdHkgaW4gQ2FjdHVzIGlzIG1vc3RseSBnZWFyZWQKdG93YXJk
cyB2YW5pbGxhIExpbnV4IGluc3RhbGxhdGlvbnMgdXNpbmcgb25lIG9mIHRoZSBkaXN0cmlidXRp
b25zCmxpc3RlZCBpbgpodHRwczovL2dpdGh1Yi5jb20vZWluc3RlaW50b29sa2l0L2p1cHl0ZXIt
ZXQvYmxvYi9tYXN0ZXIvdHV0b3JpYWwtc2VydmVyL25vdGVib29rcy9DYWN0dXNUdXRvcmlhbC5p
cHluYgppbiB0aGUgIlByZXJlcXVpc2l0ZXMiIHNlY3Rpb25zIG9yIG1hY09TICh1c2luZyBIb21l
QnJldyBvciBNYWNQb3J0cykuCgpXaGVuIHVzZWQgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcyAob24g
Y2x1c3RlcnMsIG9yLCBhcHBhcmVudGx5LCB3aXRoClttaW5pXWNvbmRhKSBmYWlsdXJlcyBhcmUg
dW5mb3J0dW5hdGVseSBjb21tb24gYW5kIG9uZSBoYXMgdG8gcHJvdmlkZSBtdWNoCm1vcmUgaW5m
b3JtYXRpb24gbWFudWFsbHkuIEhvcGVmdWxseSB0aGUgc3VnZ2VzdGlvbiBhYm92ZSBoZWxwcyBh
IGJpdC4KCkNvaW5jaWRlbnRhbGx5IEkgcHJlc2VudGVkIGEgdGFsayBvbiB0aGUgQ2FjdHVzIGJ1
aWxkIHN5c3RlbSAoYW5kIHNvbWUKd2F5cyBvZiB2ZXJpZnlpbmcgd2hhdCBpcyBnb2luZyBvbikg
YXQgdGhlIEVUIHN1bW1lciBzY2hvb2wgYW5kCndvcmtzaG9wIGxhc3Qgd2VlayBhdCBMU1UsIHdo
aWNoIG1heSBoZWxwIHlvdSBmaW5kIG91dCBleGFjdGx5IHdoYXQgaXMKZ29pbmcgb24uIFlvdSBj
YW4gZmluZCB0aGUgc2xpZGVzIGZvciB0aGlzIGhlcmUgKGFuZCBzb29uIGFsc28gb24gdGhlCnN1
bW1lciBzY2hvb2wgd2ViLXBhZ2UpOgoKaHR0cHM6Ly9naXRodWIuY29tL3JoYWFzODAvMjAyNF9M
U1UvYmxvYi9tYWluL0NhY3R1c0J1aWxkU3l0ZW1Ub3VyLmlweW5iCgpZb3VycywKUm9sYW5kCgpP
biBXZWQsIDEyIEp1biAyMDI0IDE5OjA0OjQ5ICswMTAwLCBKb3PDqSBGZXJyZWlyYSB3cm90ZToK
PC9wcmU+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIg
d3JhcD0iIj5IZWxsbyBSb2xhbmQsCgoKVGhhbmtzIGZvciB0aGUgcmVwbHksIGFuZCBhcG9sb2dp
ZXMgZm9yIG5vdCBpbmNsdWRpbmcgYWxsIHJlbGV2YW50CmluZm9ybWF0aW9uLgoKT25lIG9mIHRo
ZSB0aGluZ3MgaXMgdGhhdCBJIGZvcmdvdCB0byBtZW50aW9uIHRoYXQgY29uZGEgKGluIHRoaXMK
Y2FzZSwgbWljcm9tYW1iYSwgYSBkcm9wLWluIGFsdGVybmF0aXZlIHRoYXQgaXMgZnVsbHkgY29t
cGF0aWJsZSkKc2V0cyBzb21lIGVudmlyb25tZW50YWwgdmFyaWFibGVzIGJ5IGl0c2VsZi4gT2J2
aW91c2x5LCBzb21lIG9mIHRoZW0KYXJlIGFyZSB0aGUgb3ZlcndyaXR0ZW4gd2l0aCB3aGF0ZXZl
ciBpcyBvbiB0aGUgfC5jZmd8IGZpbGUuCgpJdCB0dXJucyBvdXQgdGhhdCBtaWNyb21hbWJhIHNl
dHMgfCRMRHwgdG8gcG9pbnQgdG93YXJkcyB0aGUgfGxkfApiaW5hcnkgcHJvdmlkZWQgYnkgdGhl
IHZpcnR1YWwgZW52aXJvbm1lbnQKCkFkZGluZyB8TEQgPSBnKyt8IGFzIHlvdSBzdWdnZXN0ZWQg
cmVzdWx0ZWQgaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQKZXJyb3IKCnxDcmVhdGluZyBjYWN0dXNf
ZW1wdHkgaW4gL2hvbWUvdW5kZXJjb3Zlci9wcm9qZWN0cy9jYWN0dXMvZXhlIGZyb20KL2hvbWUv
dW5kZXJjb3Zlci8ubWljcm9tYW1iYS9lbnZzL3BoZC9iaW4vLi4vbGliL2djYy94ODZfNjQtY29u
ZGEtbGludXgtZ251Ci8xMS40LjAvLi4vLi4vLi4vLi4veDg2XzY0LWNvbmRhLWxpbnV4LWdudS9i
aW4vbGQ6IGNhbm5vdCBmaW5kIC1sejoKTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBjb2xsZWN0
MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKbWFrZVsxXTogKioqClsvaG9tZS91
bmRlcmNvdmVyL3Byb2plY3RzL2NhY3R1cy9saWIvbWFrZS9tYWtlLmNvbmZpZ3VyYXRpb246MTUw
OgovaG9tZS91bmRlcmNvdmVyL3Byb2plY3RzL2NhY3R1cy9leGUvY2FjdHVzX2VtcHR5XSBFcnJv
ciAxIG1ha2U6ICoqKgpbTWFrZWZpbGU6MjY1OiBlbXB0eV0gRXJyb3IgMiB8CgoKVG8gYXZvaWQg
YmFjayBhbmQgZm9ydGggYmV0d2VlbiBlLW1haWxzLCBhbmQgdG8gYWRkIHNvbWUgaW5mb3JtYXRp
b24KdGhhdCB3YXMgcHJldmlvdXNseSBtaXNzaW5nLCBoZXJlIGFyZSB0aGUgc3RlcHMgdGhhdCBJ
IHRha2UgdG8KcmVwcm9kdWNlIHRoZSBlcnJvcgoKIDEuCgogICAgQ3JlYXRlIGEgbmV3IGNvbmRh
IGVudmlyb25tZW50IGFuZCBhY3RpdmF0ZSBpdCAoaW4gbXkgbWFjaGluZSBpdF9fCl9zCiAgICBj
YWxsZWQg4oCccGhk4oCdKQoKIDIuCgogICAgfGNvbmRhIGluc3RhbGwgZ2NjIGd4eCBnZm9ydHJh
biBvcGVubXBpIG9wZW5tcGktbXBpY2MKb3Blbm1waS1tcGljeHggb3Blbm1waS1tcGlmb3J0IGJp
bnV0aWxzfAoKIDMuCgogICAgQ29tcGlsZSB0aGUgdG9vbGtpdCB3aXRoIHRoZSB0aG9ybmxpc3Qg
fGVtcHR5LnRofCBhbmQgdGhlIG9wdGlvbnMKICAgIGZpbGUgfHZlbnYuY2ZnfCwgYm90aCBhdHRh
Y2hlZCBhZ2FpbiB0byB0aGlzIGUtbWFpbAoKIDQuCgogICAgQ29uZmlndXJhdGlvbiBpcyBjcmVh
dGVkIHdpdGhvdXQgYW55IGlzc3Vlcywgd2l0aCB0aGUgdGVybWluYWwKICAgIG91dHB1dCBhdHRh
Y2hlZCB0byB8ZW1wdHkubG9nfCAodGhpcyBmaWxlIHdhcyBtaXNzaW5nIGluIHRoZQogICAgcHJl
dmlvdXMgZS1tYWlsKSwgYW5kIGdldCB0aGUgZXJyb3IgbWFraW5nIHRoZSBiaW5hcnksIHdpdGgg
dGhlCiAgICB0ZXJtaW5hbCBvdXRwdXQgYXR0YWNoZWQgaW4gfGNhY3R1c19lbXB0eS5sb2d8CgoK
RnVydGhlciByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVubmluZyBzdGF0dXMgb2Yg
dGhlIG1hY2hpbmU6CgogICoKCiAgICBFbnZpcm9ubWVudGFsIHZhcmlhYmxlczogc2VlIGZpbGUg
fGVudi50eHR8IHdoaWNoIGluY2x1ZGVzIGEKICAgIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiB0
aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMuIEZvcgppbnN0YW5jZSwgeW91IGNhbiBzZWUgdGhh
dCB8JExEfCBpcyBzZXQgYW5kIGNhcnJpZXMgb24gd2l0aCBpdHMgdmFsdWUKZHVyaW5nIGNvbXBp
bGF0aW9uLCBidXQgfCRMREZMQUdTfCwgfCRDRkxBR1N8IGFuZCB8JENYWEZMQUdTfCBhcmUKICAg
IG92ZXJ3cml0dGVuIGJ5IHdoYXRldmVyIGlzIGluIHRoZSB8dmVudi5jZmd8LiBFdmVuIGlmIEkK
Y29uY2F0ZW5hdGUgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIHdp
dGggdGhlIG9uZXMKZnJvbSB0aGUgb3B0aW9ucyBmaWxlLCBpdCBzdGlsbCBkb2VzbuKAmXQgd29y
ay4KCiAgKgoKICAgIE9TOiBNYW5qYXJvCgogICoKCiAgICBLZXJuZWw6IExpbnV4IGxlZ2lvbiA1
LjEwLjIxOC0xLU1BTkpBUk8gIzEgU01QIFBSRUVNUFQgTW9uIE1heSAyNwogICAgMDI6MTk6MTkg
VVRDIDIwMjQgeDg2XzY0IEdOVS9MaW51eAoKICAqCgogICAgQ1BVOiBJbnRlbChSKSBDb3JlKFRN
KSBpNS03MzAwSFEgQ1BVIEAgMi41MEdIeiAocXVhZCBjb3JlKQoKICAqCgogICAgUGFja2FnZSBN
YW5hZ2VyOiBNaWNyb21hbWJhCiAgICAmbHQ7aHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0
dHBzOi8vbWFtYmEucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L3VzZQpyX2d1aWRlL21pY3JvbWFt
YmEuaHRtbF9fOyEhRFozZmpnITRKVWhjX1B5Z2h2N1FxaGhaTU5fMHFTaEJPYWJ6eEpXbU9RZWQ4
b1MKbWUxOXBLRlZQdk9fRmdiTXoybDY5UVZJdVVmMmtVUzE0TG9KMERIWkpPZWckICZndDsKICAg
IHVzaW5nIHRoZSBjb25kYS1mb3JnZQombHQ7aHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0
dHBzOi8vY29uZGEtZm9yZ2UuCm9yZy9wYWNrYWdlcy9fXzshIURaM2ZqZyE0SlVoY19QeWdodjdR
cWhoWk1OXzBxU2hCT2FienhKV21PUWVkOG9TbWUxOXBLRlZQdgpPX0ZnYk16Mmw2OVFWSXVVZjJr
VVMxNExvSjBCQnprZnhsJCAmZ3Q7IHJlcG9zaXRvcmllcwoKCkl0IHNob3VsZCBiZSBub3RlZCB0
aGF0IEkgYW0gYWJsZSBvZiByZXBsaWNhdGluZyB0aGlzIGJ1ZyBvbiBteQpsYXB0b3AgKHRoaXMg
bWFjaGluZSkgYW5kIHR3byBkaWZmZXJlbnQgZGVza3RvcHMgdGhhdCBhcmUgYm90aApydW5uaW5n
IEFyY2ggTGludXguCgpUaGlzIGlzIG5vdCB0b3RhbGx5IHVuZXhwZWN0ZWQgY29uc2lkZXJpbmcg
dGhleSBhcmUgdmVyeSBzaW1pbGFyIE9TX18KX3Mgd2l0aCB0aGUgc2FtZSB2ZXJzaW9ucyBvZiB0
aGUgc29mdHdhcmUgdGhhdCBpcyBiZWluZyB1c2VkLgoKCkkgaG9wZSB0aGF0IEkgY291bGQgbWFr
ZSBpdCBhcyBjbGVhciBhcyBwb3NzaWJsZS4KCkJlc3QgcmVnYXJkcywKCkpvc8OpIEZlcnJlaXJh
CgoKT24gMTIvMDYvMjQgMTU6NTksIFJvbGFuZCBIYWFzIHdyb3RlOgoKPC9wcmU+PGJsb2NrcXVv
dGUgdHlwZT0iY2l0ZSI+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5IZWxsbyBK
b3NlLAoKQ2FjdHVzIHVzZXMgdGhlIEMrKyBjb21waWxlciB0byBsaW5rIHRoaW5ncy4KClRoaXMg
aXMgY29udHJvbGxlZCBieSB0aGUgTEQgb3B0aW9uIGxpc3Qgb3B0aW9uLgoKSW4geW91ciBvcHRp
b24gbGlzdCAodGhhbmsgeW91IGZvciBpbmNsdWRpbmcgaXQpIHlvdSBkbyBub3Qgc2V0IGl0LApz
byBpdCBzaG91bGQgZGVmYXVsdCB0byB0aGUgdmFsdWUgb2YgQ1hYLgoKSG93ZXZlciBpZiB0aGVy
ZSBpcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBMRCBzZXQsIHRoZW4gdGhpcyB3aWxsCm92ZXJy
aWRlIHRoZSBvcHRpb24gbGlzdCBkZWZhdWx0ICh5b3UnZCBzZWUgZWcgTEQgaW4gdGhlIG91dHB1
dCBvZgp0aGUgZW52IGNvbW1hbmQpLgoKU28gYXMgYSBmaXJzdCB0cnksIEknZCBhZGQKCkxEID0g
ZysrCgp0byB5b3VyIG9wdGlvbiBsaXN0IGFuZCByZWNvbXBpbGUgZnJvbSBzY3JhdGNoLgoKSWYg
dGhhdCBkb2VzIG5vdCBoZWxwLCB0aGVuIG1vcmUgaW5mb3JtYXRpb24gd2lsbCBiZSByZXF1aXJl
ZC4KUGxlYXNlIHNlZToKCmh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwOi8vZWluc3Rl
aW50b29sa2l0Lm9yZy9zdXBwb3J0Lmh0bWwqZ2VuZXIKIAo8L3ByZT48L2Jsb2NrcXVvdGU+PHBy
ZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5hbC1ndWlkZWxpbmVzLWZvci1xdWVzdGlv
bnNfXztJdyEhRFozZmpnITRKVWhjX1B5Z2h2N1FxaGhaTU5fMHFTaEJPYWJ6eEpXbU8KUWVkOG9T
bWUxOXBLRlZQdk9fRmdiTXoybDY5UVZJdVVmMmtVUzE0TG9KMEE4T2l0a1UkICZndDsKPC9wcmU+
PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0i
Ij5mb3Igd2hhdCB0byBpbmNsdWRlLgoKWW91cnMsClJvbGFuZAoKT24gV2VkLCAxMiBKdW4gMjAy
NCAxNTo1MToxMyArMDEwMCwgSm9zw6kgRmVycmVpcmEgd3JvdGU6ICAKPC9wcmU+PGJsb2NrcXVv
dGUgdHlwZT0iY2l0ZSI+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5EZWFyIHRv
b2xraXQgdXNlcnMgYW5kIGRldmVsb3BlcnMsCgoKV2l0aCB0aGUgbGF0ZXN0IHVwZGF0ZSBvZiBH
Q0MgdG8gdmVyc2lvbiAxNCwgdGhlcmUgaXMgYSBrbm93biBlcnJvcgp0aGF0IHByZXZlbnRzIHRo
ZSBjb21waWxhdGlvbiBmcm9tIHRha2luZyBwbGFjZSwgcHJldmVudGluZyBtZSBmcm9tCmNvbXBp
bGluZyB0aGUgdG9vbGtpdC4KCknigJl2ZSBiZWVuIHRyeWluZyB0byBkbyBzb21ldGhpbmcgd2hp
Y2ggSSBwcm9iYWJseSBzaG91bGQgaGF2ZSBzbyAgCjwvcHJlPjwvYmxvY2txdW90ZT48L2Jsb2Nr
cXVvdGU+PHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5tZQo8L3ByZT48YmxvY2tx
dW90ZSB0eXBlPSJjaXRlIj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj48cHJlIGNsYXNzPSJtb3ot
cXVvdGUtcHJlIiB3cmFwPSIiPnRpbWUgYWdvIHRvIGF2b2lkIHRoaXMga2luZCBvZiBpc3N1ZXMs
IHdoaWxlIGFsc28gZ3JhbnRpbmcgc29tZQpwb3J0YWJpbGl0eSBiZXR3ZWVuIG1hY2hpbmVzLCB3
aGljaCBpcyB0byBzZXR1cCBhIHZpcnR1YWwKZW52aXJvbm1lbnQgdXNpbmcgQ29uZGEgdG8gY29t
cGlsZSB0aGUgdG9vbGtpdC4KCgpJIGFtIHNlbmRpbmcgeW91IHRoaXMgZS1tYWlsIGJlY2F1c2Ug
SeKAmXZlIGZhaWxlZCB0byBjb21waWxlIHRoZQp0b29sa2l0IGluIGEgdmlydHVhbCBlbnZpcm9u
bWVudCwgd2hlcmUgSSBhbSBjdXJyZW50bHkgc3R1Y2sgd2l0aAphbiBlcnJvciBkdXJpbmcgdGhl
IGxpbmtpbmcgcGhhc2UuIEJlZm9yZSB0aGUgdXBkYXRlIHRvIEdDQyAxNCwgYW5kCndpdGhvdXQg
dGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIEkgd2FzIGFibGUgb2YgY29tcGlsaW5nIHRoZQp0b29s
a2l0IHdpdGhvdXQgYW55IGlzc3VlLgoKSGVyZSBhcmUgdGhlIHN0ZXBzIHRoYXQgSSBoYXZlIHBl
cmZvcm1lZDoKCjEuCgpBY3RpdmF0ZSBhbiBlbXB0eSB2aXJ0dWFsIGVudmlyb25tZW50IG1hbmFn
ZWQgYnkgYSBjb25kYSAob3IgYQpkcm9wLWluIHJlcGxhY2VtZW50KSB3aXRoIHRoZSBjb25kYS1m
b3JnZSByZXBvc2l0b3J5IGNvbmZpZ3VyZWQKCjIuCgp8Y29uZGEgaW5zdGFsbCBnY2MgZ3h4IGdm
b3J0cmFuIG9wZW5tcGkgb3Blbm1waS1tcGljYwpvcGVubXBpLW1waWN4eCBvcGVubXBpLW1waWZv
cnQgYmludXRpbHN8CgozLgoKQ29tcGlsZSB0aGUgdG9vbGtpdCB3aXRoIGFuIGVtcHR5IHRob3Ju
bGlzdCwgYXR0YWNoZWQgaW4KfGVtcHR5LnRofCwgYW5kIGFuIG9wdGlvbiBmaWxlIHRoYXQgcG9p
bnRzIHRvd2FyZHMgdGhlIHZpcnR1YWwKZW52aXJvbm1lbnQgdGhhdCBpcyBhY3RpdmF0ZWQsIGF0
dGFjaGVkIGluIHx2ZW52LmNmZ3wKCjQuCgpHZXQgdGhlIGZvbGxvd2luZyBlcnJvciBmcm9tIHxs
ZHwgKHRoZSBmdWxsIGxvZyBmb3IgbWFraW5nIHRoZQpjb25maWcgYW5kIHRoZSBiaW5hcnkgYXJl
IGF0dGFjaGVkIGluIHxjYWN0dXNfZW1wdHkubG9nfCkKCnxDcmVhdGluZyBjYWN0dXNfZW1wdHkg
aW4gL2hvbWUvdW5kZXJjb3Zlci9wcm9qZWN0cy9jYWN0dXMvZXhlIGZyb20KL2hvbWUvdW5kZXJj
b3Zlci8ubWljcm9tYW1iYS9lbnZzL3BoZC9iaW4veDg2XzY0LWNvbmRhLWxpbnV4LWdudS1sZDoK
dW5yZWNvZ25pc2VkIGVtdWxhdGlvbiBtb2RlOiBhcmNoPW5hdGl2ZSBTdXBwb3J0ZWQgZW11bGF0
aW9uczoKZWxmX3g4Nl82NCBlbGYzMl94ODZfNjQgZWxmX2kzODYgZWxmX2lhbWN1IG1ha2VbMV06
ICoqKgpbL2hvbWUvdW5kZXJjb3Zlci9wcm9qZWN0cy9jYWN0dXMvbGliL21ha2UvbWFrZS5jb25m
aWd1cmF0aW9uOjE1MDoKL2hvbWUvdW5kZXJjb3Zlci9wcm9qZWN0cy9jYWN0dXMvZXhlL2NhY3R1
c19lbXB0eV0gRXJyb3IgMSBtYWtlOgoqKiogW01ha2VmaWxlOjI2NTogZW1wdHldIEVycm9yIDIg
fAoKClRvIG1lLCB0aGUgcHJldmlvdXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIGlz
IHBhc3NpbmcgdGhlCndyb25nIGZsYWdzIHRvIHxsZHwsIGJlY2F1c2UgZXZlbiBpZiB0aGUgZW11
bGF0aW9uIG1vZGUgd2FzIG5vdApyZWNvZ25pemVkIGl0IHNob3VsZCBnaXZlIHRoZSBlcnJvciB8
bGQ6IHVucmVjb2duaXNlZCBlbXVsYXRpb24KbW9kZTogJmx0O3NvbWV0aGluZyZndDt8IGluc3Rl
YWQgb2YgfGxkOiB1bnJlY29nbmlzZWQgZW11bGF0aW9uIG1vZGU6CmFyY2g9Jmx0O3NvbWV0aGlu
ZyZndDt8LgoKUmVtb3ZpbmcgdGhlIGZsYWcgfC1tYXJjaD1uYXRpdmV8IGZyb20gdGhlIGNvbXBp
bGVycyBjb25maXJtcyBteQpndWVzcyBieSByZXZlYWxpbmcgYSBkaWZmZXJlbnQgZXJyb3IgYXQg
dGhlIHNhbWUgc3RhZ2UKCnxDcmVhdGluZyBjYWN0dXNfZW1wdHkgaW4gL2hvbWUvdW5kZXJjb3Zl
ci9wcm9qZWN0cy9jYWN0dXMvZXhlIGZyb20KL2hvbWUvdW5kZXJjb3Zlci8ubWljcm9tYW1iYS9l
bnZzL3BoZC9iaW4veDg2XzY0LWNvbmRhLWxpbnV4LWdudS1sZDoKdW5yZWNvZ25pemVkIG9wdGlv
biAnLURNUElDSF9JR05PUkVfQ1hYX1NFRUsnCi9ob21lL3VuZGVyY292ZXIvLm1pY3JvbWFtYmEv
ZW52cy9waGQvYmluL3g4Nl82NC1jb25kYS1saW51eC1nbnUtbGQ6CnVzZSB0aGUgLS1oZWxwIG9w
dGlvbiBmb3IgdXNhZ2UgaW5mb3JtYXRpb24gbWFrZVsxXTogKioqClsvaG9tZS91bmRlcmNvdmVy
L3Byb2plY3RzL2NhY3R1cy9saWIvbWFrZS9tYWtlLmNvbmZpZ3VyYXRpb246MTUwOgovaG9tZS91
bmRlcmNvdmVyL3Byb2plY3RzL2NhY3R1cy9leGUvY2FjdHVzX2VtcHR5XSBFcnJvciAxIG1ha2U6
CioqKiBbTWFrZWZpbGU6MjY1OiBlbXB0eV0gRXJyb3IgMiB8CgphbmQgaWYgSSB3ZXJlIHRvIHJl
bW92ZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGluIHRoZSBjb25maWcgZmlsZSwKfGxkfCB3aWxs
IGNvbXBsYWluIGFib3V0IHNvbWV0aGluZyBlbHNlLgoKSXQgcmVhbGx5IHNlZW1zIGxpa2Ugc29t
ZXRoaW5nIGlzIHBhc3NpbmcgdGhlIGZsYWdzIG9udG8gfGxkfCB3aGVyZQppdCBzaG91bGRu4oCZ
dCwgYnV0IEkgY2Fubm90IHRlbGwgd2hvIGFuZCB3aGVyZS4KCgpJIHNob3VsZCBub3RlIHRoYXQg
Y29tcGlsaW5nIHZlcnkgYmFzaWMgcHJvZ3JhbXMgaW4gQyBpbiB0aGUKdmlydHVhbCBlbnZpcm9u
bWVudCBkb2VzbuKAmXQgcmFpc2UgYW55IGlzc3VlcywgYWx0aG91Z2ggSSBoYXZlbuKAmXQgIAo8
L3ByZT48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxwcmUgY2xhc3M9Im1vei1xdW90ZS1wcmUi
IHdyYXA9IiI+IHRlc3RlZCBpdAo8L3ByZT48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj48YmxvY2tx
dW90ZSB0eXBlPSJjaXRlIj48cHJlIGNsYXNzPSJtb3otcXVvdGUtcHJlIiB3cmFwPSIiPnZlcnkg
dGhvcm91Z2hseS4KClBsZWFzZSBkbyBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgaXNzdWVz
IGluIHJlbmRlcmluZyB0aGlzCmUtbWFpbCEKCgpCZXN0IHJlZ2FyZHMsCgpKb3PDqSBGZXJyZWly
YQoKCuKAiyAgCjwvcHJlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PHByZSBjbGFzcz0ibW96
LXF1b3RlLXByZSIgd3JhcD0iIj7igIsKPC9wcmU+PC9ibG9ja3F1b3RlPjxwcmUgY2xhc3M9Im1v
ei1xdW90ZS1wcmUiIHdyYXA9IiI+CjwvcHJlPjwvYmxvY2txdW90ZT4=" aria-hidden="true" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0;padding:0;margin:0;"></div>
</div>
</body>
</html>