Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Dec 2024 14:49:17 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        mike tancsa <mike@sentex.net>
Cc:        freebsd-fs <freebsd-fs@freebsd.org>
Subject:   Re: TRIM question and zfs
Message-ID:  <CANCZdfrGKcjOWKoqH39A2UvvRD1D_gt6zdb8EYkJLJBxv6SVxA@mail.gmail.com>
In-Reply-To: <25c5d434-2ea1-4315-8722-342a469abb83@sentex.net>
References:  <25c5d434-2ea1-4315-8722-342a469abb83@sentex.net>

next in thread | previous in thread | raw e-mail | index | archive | help
--00000000000050e5d006299263d1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Dec 18, 2024 at 1:26=E2=80=AFPM mike tancsa <mike@sentex.net> wrote=
:

> TL;DR  does zpool trim <poolname> actually work as well as one expects /
> needs ?
>

I'd expect it to trim the unused part of the drive(s), but that may or may
not
help in high wear situations.

I had a very old server that was running as RELENG_12 for many years on
> some SSDs which were now getting to EOL with 6yrs of work on them-- Wear
> level showed it getting low  for sure.  I had migrated everything live
> off the box, but for some reason, trying to do a zfs send on a volume
> was REALLY slow. I am talking KB/s slow.  It took a long time, but it
> eventually got done.  As there was nothing on this server in production,
> I thought it a good exercise to try and upgrade it in the field. So
> buildworld to 13 and then 14.  I deleted some of the old unneeded files
> and got down to just the zfs volume that was left on the pool so just
> under 200G. I then did a zpool trim tank1, but didnt see any improved
> performance at all. Still crazy slow. So I then did
>
> gpart backup <disk> > /tmp/disk-part.txt
>
> zpool offline tank1 <disk>p1
> trim -f /dev/<disk>
> cat /tmp/disk-part.txt | gpart restore <disk>
> zpool online tank1 <disk>p1
> zpool replace tank1 <disk>p1 <disk>p1
>
> for all 3 <disk>s in the pool one by one.
>
> The first resilver took 13hrs, the second 8 or so and the last 13min.
> After the final resilver was done, I could do a zfs send of the volume
> pretty well at full speed with zpool iostat 1 showing close to a GB/s
> reads.
>
> I know that zfs autotrim and trim just kinda keeps track of what can and
> cant be deleted.  But I would have thought the  zpool trim would have
> had some impact ?
>

It all depends on the drive history. Mostly TRIMing a drive is useful
for reducing write amplification. Done frequently, this gives the drive's
firmware more options when it needs to do the housekeeping it does
to have blocks available to write. The increased choice lets it make
better decisions and reduce the extra writes it has to do to keep the
data fresh and provide free blocks for future writes.

Sometimes, you may get lucky and this trimming will kick off the right
sort of housekeeping and result in lots of free blocks being added to
the pool it keeps internally so writes are faster.

But you are seeing really poor read performance. That's usually caused
by data that's ending the end of its useful life in the current blocks that
it
occupies which triggers transparent data recovery, but at such a high level
it can no longer be "line speed" of the device, but is happening at softwar=
e
speeds, which can be quite a bit slower. By basically wiping and rewriting
the drives with the resilvers, you've refreshed all the data so now none of
it takes a long time to read. Not sure what 'old data' is on the drives, bu=
t
that would also explain the faster resilver times too.


> Questions:
>
> Does this mean that prior to deploying SSDs for use in a zfs pool, you
> should do a full trim -f of the disk ?
>

Yes.

Apart from offlining and doing a trim, resilver etc, is there a better
> way to get back performance ?  Or with a once a week trim prior to
> scrub, will it be "good enough" ?
>

Weekly should suffice.

However, if the problem is due to 'old data' decaying and the drive's
reliability software not moving it aggressively enough to preserve
performance, all the trims in the world won't help. It could be that
the drives are too busy (though the aggregate numbers from smart
aren't suggestive of that).

The current temperature is good, but if the drives baked for a while
for some reason, that could explain the degraded performance.


> Is there a way to tell if a disk REALLY needs to be fully trimmed other
> than approximating for slowing performance ?
>

You might be able to look at the current wear vs the promised lifetime
of the drive. 6 years is out of warranty for sure, so it may just be they
are too worn for anything needing any level of performance.

But usually it's performance. And even then, there's no silver
bullet.


> I know these disks were super old, so maybe current SSDs dont have this
> issue ? Last few years I have switched to Samsung EVOs and they dont
> seem to have these problems, at least not yet in any obvious way.  Not
> sure why this particularly showed up in the zfs volume set, and other
> normal datasets performed ok.
>

Yea. from the smart info, it looks like you've worn them out 1/3. You've
written
about 112TB to the drive based on 80TB of write traffic (if I'm doing the
math
right). This is a fairly good number.. There's not any real link errors to
speak
of (which is another way you can be slow)., nor have you been thermal
throttling.

So you've done 80 drive writes over 6 years (or 0.03 DWPD). This is well
below
ratings for most TLC drives of 0.37 DWPD in the datasheet (but that's only
for
3 years). The drive should be good for about 400 drive writes total, and
you are
at 1/5 of that. But the wear indicators are closer to 1/3 (approximately 2x
what
the absolute wear values would indicate). The write amp is relatively low,
suggesting
that trimming wouldn't help all that much, though. It's at 1.4, which would
bump
total bytes written into the 1/3 lifetime range. Plus TLC writes tend to be
quite a
bit harder on the drive than SLC writes, so that makes the 1/3 wear numbers
kinda make sense.

None of these raw numbers suggests a good root-cause for the slowness,
which is in line with 'bad data from the nand taking a while to recover'.
It all
has to do with the drive's write / power-on / temperature / etc history, an=
d
many key details of that are simply unobtanium though some hints at them
are in the SMART data. Not enough for be to be sure, though why your
drives degraded.

Warner


>      ---Mike
>
>
> disk
>
> smartctl 7.4 2023-08-01 r5530 [FreeBSD 14.2-STABLE amd64] (local build)
> Copyright (C) 2002-23, Bruce Allen, Christian Franke,
> www.smartmontools.org
>
> =3D=3D=3D START OF INFORMATION SECTION =3D=3D=3D
> Model Family:     WD Blue / Red / Green SSDs
> Device Model:     WDC  WDS100T2B0A-00SM50
> Serial Number:    191011A00A72
> LU WWN Device Id: 5 001b44 8b89825ed
> Firmware Version: 401000WD
> User Capacity:    1,000,204,886,016 bytes [1.00 TB]
> Sector Size:      512 bytes logical/physical
> Rotation Rate:    Solid State Device
> Form Factor:      2.5 inches
> TRIM Command:     Available, deterministic, zeroed
> Device is:        In smartctl database 7.3/5528
> ATA Version is:   ACS-4 T13/BSR INCITS 529 revision 5
> SATA Version is:  SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s)
> Local Time is:    Wed Dec 18 15:23:10 2024 EST
> SMART support is: Available - device has SMART capability.
> SMART support is: Enabled
> AAM feature is:   Unavailable
> APM level is:     128 (minimum power consumption without standby)
> Rd look-ahead is: Enabled
> Write cache is:   Enabled
> DSN feature is:   Unavailable
> ATA Security is:  Disabled, NOT FROZEN [SEC1]
> Wt Cache Reorder: Unavailable
>
> =3D=3D=3D START OF READ SMART DATA SECTION =3D=3D=3D
> SMART overall-health self-assessment test result: PASSED
>
> General SMART Values:
> Offline data collection status:  (0x00) Offline data collection activity
>                                          was never started.
>                                          Auto Offline Data Collection:
> Disabled.
> Self-test execution status:      (   0) The previous self-test routine
> completed
>                                          without error or no self-test
> has ever
>                                          been run.
> Total time to complete Offline
> data collection:                (    0) seconds.
> Offline data collection
> capabilities:                    (0x11) SMART execute Offline immediate.
>                                          No Auto Offline data collection
> support.
>                                          Suspend Offline collection upon
> new
>                                          command.
>                                          No Offline surface scan supporte=
d.
>                                          Self-test supported.
>                                          No Conveyance Self-test supporte=
d.
>                                          No Selective Self-test supported=
.
> SMART capabilities:            (0x0003) Saves SMART data before entering
>                                          power-saving mode.
>                                          Supports SMART auto save timer.
> Error logging capability:        (0x01) Error logging supported.
>                                          General Purpose Logging supporte=
d.
> Short self-test routine
> recommended polling time:        (   2) minutes.
> Extended self-test routine
> recommended polling time:        (  10) minutes.
>
> SMART Attributes Data Structure revision number: 4
> Vendor Specific SMART Attributes with Thresholds:
> ID# ATTRIBUTE_NAME          FLAGS    VALUE WORST THRESH FAIL RAW_VALUE
>    5 Reallocated_Sector_Ct   -O--CK   100   100   ---    -    0
>    9 Power_On_Hours          -O--CK   100   100   ---    -    47271
>   12 Power_Cycle_Count       -O--CK   100   100   ---    -    33
> 165 Block_Erase_Count       -O--CK   100   100   ---    - 906509291245
> 166 Minimum_PE_Cycles_TLC   -O--CK   100   100   ---    -    1
> 167 Max_Bad_Blocks_per_Die  -O--CK   100   100   ---    -    34
> 168 Maximum_PE_Cycles_TLC   -O--CK   100   100   ---    -    33
> 169 Total_Bad_Blocks        -O--CK   100   100   ---    -    534
> 170 Grown_Bad_Blocks        -O--CK   100   100   ---    -    0
> 171 Program_Fail_Count      -O--CK   100   100   ---    -    0
> 172 Erase_Fail_Count        -O--CK   100   100   ---    -    0
> 173 Average_PE_Cycles_TLC   -O--CK   100   100   ---    -    12
> 174 Unexpected_Power_Loss   -O--CK   100   100   ---    -    19
> 184 End-to-End_Error        -O--CK   100   100   ---    -    0
> 187 Reported_Uncorrect      -O--CK   100   100   ---    -    0
> 188 Command_Timeout         -O--CK   100   100   ---    -    0
> 194 Temperature_Celsius     -O---K   075   044   ---    -    25 (Min/Max
> 22/44)
> 199 UDMA_CRC_Error_Count    -O--CK   100   100   ---    -    0
> 230 Media_Wearout_Indicator -O--CK   007   007   ---    - 0x074001140740
> 232 Available_Reservd_Space PO--CK   100   100   004    -    100
> 233 NAND_GB_Written_TLC     -O--CK   100   100   ---    -    12346
> 234 NAND_GB_Written_SLC     -O--CK   100   100   ---    -    90919
> 241 Host_Writes_GiB         ----CK   253   253   ---    -    80762
> 242 Host_Reads_GiB          ----CK   253   253   ---    -    19908
> 244 Temp_Throttle_Status    -O--CK   000   100   ---    -    0
>                              ||||||_ K auto-keep
>                              |||||__ C event count
>                              ||||___ R error rate
>                              |||____ S speed/performance
>                              ||_____ O updated online
>                              |______ P prefailure warning
>
> General Purpose Log Directory Version 1
> SMART           Log Directory Version 1 [multi-sector log support]
> Address    Access  R/W   Size  Description
> 0x00       GPL,SL  R/O      1  Log Directory
> 0x01           SL  R/O      1  Summary SMART error log
> 0x02           SL  R/O      2  Comprehensive SMART error log
> 0x03       GPL     R/O      1  Ext. Comprehensive SMART error log
> 0x04       GPL,SL  R/O      8  Device Statistics log
> 0x06           SL  R/O      1  SMART self-test log
> 0x07       GPL     R/O      1  Extended self-test log
> 0x10       GPL     R/O      1  NCQ Command Error log
> 0x11       GPL     R/O      1  SATA Phy Event Counters log
> 0x24       GPL     R/O   2261  Current Device Internal Status Data log
> 0x25       GPL     R/O   2261  Saved Device Internal Status Data log
> 0x30       GPL,SL  R/O      9  IDENTIFY DEVICE data log
> 0x80-0x9f  GPL,SL  R/W     16  Host vendor specific log
> 0xde       GPL     VS       8  Device vendor specific log
>
> SMART Extended Comprehensive Error Log Version: 1 (1 sectors)
> No Errors Logged
>
> SMART Extended Self-test Log Version: 1 (1 sectors)
> No self-tests have been logged.  [To run self-tests, use: smartctl -t]
>
> Selective Self-tests/Logging not supported
>
> SCT Commands not supported
>
> Device Statistics (GP Log 0x04)
> Page  Offset Size        Value Flags Description
> 0x01  =3D=3D=3D=3D=3D  =3D               =3D  =3D=3D=3D  =3D=3D General S=
tatistics (rev 1) =3D=3D
> 0x01  0x008  4              33  ---  Lifetime Power-On Resets
> 0x01  0x010  4           47271  ---  Power-on Hours
> 0x01  0x018  6    169371253578  ---  Logical Sectors Written
> 0x01  0x020  6      2639812949  ---  Number of Write Commands
> 0x01  0x028  6     41752136282  ---  Logical Sectors Read
> 0x01  0x030  6        89429189  ---  Number of Read Commands
> 0x07  =3D=3D=3D=3D=3D  =3D               =3D  =3D=3D=3D  =3D=3D Solid Sta=
te Device Statistics
> (rev 1) =3D=3D
> 0x07  0x008  1               1  N--  Percentage Used Endurance Indicator
>                                  |||_ C monitored condition met
>                                  ||__ D supports DSN
>                                  |___ N normalized value
>
> Pending Defects log (GP Log 0x0c) not supported
>
> SATA Phy Event Counters (GP Log 0x11)
> ID      Size     Value  Description
> 0x0001  4            0  Command failed due to ICRC error
> 0x0002  4            0  R_ERR response for data FIS
> 0x0005  4            0  R_ERR response for non-data FIS
> 0x000a  4            7  Device-to-host register FISes sent due to a
> COMRESET
>
>

--00000000000050e5d006299263d1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJn
bWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWluZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJn
bWFpbF9hdHRyIj5PbiBXZWQsIERlYyAxOCwgMjAyNCBhdCAxOjI24oCvUE0gbWlrZSB0YW5jc2Eg
Jmx0OzxhIGhyZWY9Im1haWx0bzptaWtlQHNlbnRleC5uZXQiPm1pa2VAc2VudGV4Lm5ldDwvYT4m
Z3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxl
PSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQs
MjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+VEw7RFLCoCBkb2VzIHpwb29sIHRyaW0gJmx0O3Bv
b2xuYW1lJmd0OyBhY3R1YWxseSB3b3JrIGFzIHdlbGwgYXMgb25lIGV4cGVjdHMgLyA8YnI+DQpu
ZWVkcyA/PGJyPjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PkkmIzM5O2QgZXhwZWN0
IGl0IHRvIHRyaW0gdGhlIHVudXNlZCBwYXJ0IG9mIHRoZSBkcml2ZShzKSwgYnV0IHRoYXQgbWF5
IG9yIG1heSBub3Q8L2Rpdj48ZGl2PmhlbHAgaW4gaGlnaCB3ZWFyIHNpdHVhdGlvbnMuPC9kaXY+
PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy
Z2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwy
MDQpO3BhZGRpbmctbGVmdDoxZXgiPkkgaGFkIGEgdmVyeSBvbGQgc2VydmVyIHRoYXQgd2FzIHJ1
bm5pbmcgYXMgUkVMRU5HXzEyIGZvciBtYW55IHllYXJzIG9uIDxicj4NCnNvbWUgU1NEcyB3aGlj
aCB3ZXJlIG5vdyBnZXR0aW5nIHRvIEVPTCB3aXRoIDZ5cnMgb2Ygd29yayBvbiB0aGVtLS0gV2Vh
ciA8YnI+DQpsZXZlbCBzaG93ZWQgaXQgZ2V0dGluZyBsb3fCoCBmb3Igc3VyZS7CoCBJIGhhZCBt
aWdyYXRlZCBldmVyeXRoaW5nIGxpdmUgPGJyPg0Kb2ZmIHRoZSBib3gsIGJ1dCBmb3Igc29tZSBy
ZWFzb24sIHRyeWluZyB0byBkbyBhIHpmcyBzZW5kIG9uIGEgdm9sdW1lIDxicj4NCndhcyBSRUFM
TFkgc2xvdy4gSSBhbSB0YWxraW5nIEtCL3Mgc2xvdy7CoCBJdCB0b29rIGEgbG9uZyB0aW1lLCBi
dXQgaXQgPGJyPg0KZXZlbnR1YWxseSBnb3QgZG9uZS7CoCBBcyB0aGVyZSB3YXMgbm90aGluZyBv
biB0aGlzIHNlcnZlciBpbiBwcm9kdWN0aW9uLCA8YnI+DQpJIHRob3VnaHQgaXQgYSBnb29kIGV4
ZXJjaXNlIHRvIHRyeSBhbmQgdXBncmFkZSBpdCBpbiB0aGUgZmllbGQuIFNvIDxicj4NCmJ1aWxk
d29ybGQgdG8gMTMgYW5kIHRoZW4gMTQuwqAgSSBkZWxldGVkIHNvbWUgb2YgdGhlIG9sZCB1bm5l
ZWRlZCBmaWxlcyA8YnI+DQphbmQgZ290IGRvd24gdG8ganVzdCB0aGUgemZzIHZvbHVtZSB0aGF0
IHdhcyBsZWZ0IG9uIHRoZSBwb29sIHNvIGp1c3QgPGJyPg0KdW5kZXIgMjAwRy4gSSB0aGVuIGRp
ZCBhIHpwb29sIHRyaW0gdGFuazEsIGJ1dCBkaWRudCBzZWUgYW55IGltcHJvdmVkIDxicj4NCnBl
cmZvcm1hbmNlIGF0IGFsbC4gU3RpbGwgY3Jhenkgc2xvdy4gU28gSSB0aGVuIGRpZDxicj4NCjxi
cj4NCmdwYXJ0IGJhY2t1cCAmbHQ7ZGlzayZndDsgJmd0OyAvdG1wL2Rpc2stcGFydC50eHQ8YnI+
DQo8YnI+DQp6cG9vbCBvZmZsaW5lIHRhbmsxICZsdDtkaXNrJmd0O3AxPGJyPg0KdHJpbSAtZiAv
ZGV2LyZsdDtkaXNrJmd0Ozxicj4NCmNhdCAvdG1wL2Rpc2stcGFydC50eHQgfCBncGFydCByZXN0
b3JlICZsdDtkaXNrJmd0Ozxicj4NCnpwb29sIG9ubGluZSB0YW5rMSAmbHQ7ZGlzayZndDtwMTxi
cj4NCnpwb29sIHJlcGxhY2UgdGFuazEgJmx0O2Rpc2smZ3Q7cDEgJmx0O2Rpc2smZ3Q7cDE8YnI+
DQo8YnI+DQpmb3IgYWxsIDMgJmx0O2Rpc2smZ3Q7cyBpbiB0aGUgcG9vbCBvbmUgYnkgb25lLjxi
cj4NCjxicj4NClRoZSBmaXJzdCByZXNpbHZlciB0b29rIDEzaHJzLCB0aGUgc2Vjb25kIDggb3Ig
c28gYW5kIHRoZSBsYXN0IDEzbWluLiA8YnI+DQpBZnRlciB0aGUgZmluYWwgcmVzaWx2ZXIgd2Fz
IGRvbmUsIEkgY291bGQgZG8gYSB6ZnMgc2VuZCBvZiB0aGUgdm9sdW1lIDxicj4NCnByZXR0eSB3
ZWxsIGF0IGZ1bGwgc3BlZWQgd2l0aCB6cG9vbCBpb3N0YXQgMSBzaG93aW5nIGNsb3NlIHRvIGEg
R0IvcyByZWFkcy48YnI+DQo8YnI+DQpJIGtub3cgdGhhdCB6ZnMgYXV0b3RyaW0gYW5kIHRyaW0g
anVzdCBraW5kYSBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbiBhbmQgPGJyPg0KY2FudCBiZSBkZWxl
dGVkLsKgIEJ1dCBJIHdvdWxkIGhhdmUgdGhvdWdodCB0aGXCoCB6cG9vbCB0cmltIHdvdWxkIGhh
dmUgPGJyPg0KaGFkIHNvbWUgaW1wYWN0ID88YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2
PjxkaXY+SXQgYWxsIGRlcGVuZHMgb24gdGhlIGRyaXZlIGhpc3RvcnkuIE1vc3RseSBUUklNaW5n
IGEgZHJpdmUgaXMgdXNlZnVsPC9kaXY+PGRpdj5mb3IgcmVkdWNpbmcgd3JpdGUgYW1wbGlmaWNh
dGlvbi4gRG9uZSBmcmVxdWVudGx5LCB0aGlzIGdpdmVzIHRoZSBkcml2ZSYjMzk7czwvZGl2Pjxk
aXY+ZmlybXdhcmUgbW9yZSBvcHRpb25zIHdoZW4gaXQgbmVlZHMgdG8gZG8gdGhlIGhvdXNla2Vl
cGluZyBpdCBkb2VzPC9kaXY+PGRpdj50byBoYXZlIGJsb2NrcyBhdmFpbGFibGUgdG8gd3JpdGUu
IFRoZSBpbmNyZWFzZWQgY2hvaWNlIGxldHMgaXQgbWFrZTwvZGl2PjxkaXY+YmV0dGVyIGRlY2lz
aW9ucyBhbmQgcmVkdWNlIHRoZSBleHRyYSB3cml0ZXMgaXQgaGFzIHRvIGRvIHRvIGtlZXAgdGhl
PC9kaXY+PGRpdj5kYXRhIGZyZXNoIGFuZCBwcm92aWRlIGZyZWUgYmxvY2tzIGZvciBmdXR1cmUg
d3JpdGVzLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+U29tZXRpbWVzLCB5b3UgbWF5IGdldCBs
dWNreSBhbmQgdGhpcyB0cmltbWluZyB3aWxsIGtpY2sgb2ZmIHRoZSByaWdodDwvZGl2PjxkaXY+
c29ydCBvZiBob3VzZWtlZXBpbmcgYW5kIHJlc3VsdCBpbiBsb3RzIG9mIGZyZWUgYmxvY2tzIGJl
aW5nIGFkZGVkIHRvPC9kaXY+PGRpdj50aGUgcG9vbCBpdCBrZWVwcyBpbnRlcm5hbGx5IHNvIHdy
aXRlcyBhcmUgZmFzdGVyLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QnV0IHlvdSBhcmUgc2Vl
aW5nIHJlYWxseSBwb29yIHJlYWQgcGVyZm9ybWFuY2UuIFRoYXQmIzM5O3MgdXN1YWxseSBjYXVz
ZWQ8L2Rpdj48ZGl2PmJ5IGRhdGEgdGhhdCYjMzk7cyBlbmRpbmcgdGhlIGVuZCBvZiBpdHMgdXNl
ZnVsIGxpZmUgaW4gdGhlIGN1cnJlbnQgYmxvY2tzIHRoYXQgaXQ8L2Rpdj48ZGl2Pm9jY3VwaWVz
IHdoaWNoIHRyaWdnZXJzIHRyYW5zcGFyZW50IGRhdGEgcmVjb3ZlcnksIGJ1dCBhdCBzdWNoIGEg
aGlnaCBsZXZlbDwvZGl2PjxkaXY+aXQgY2FuIG5vIGxvbmdlciBiZSAmcXVvdDtsaW5lIHNwZWVk
JnF1b3Q7IG9mIHRoZSBkZXZpY2UsIGJ1dCBpcyBoYXBwZW5pbmcgYXQgc29mdHdhcmU8L2Rpdj48
ZGl2PnNwZWVkcywgd2hpY2ggY2FuIGJlIHF1aXRlIGEgYml0IHNsb3dlci4gQnkgYmFzaWNhbGx5
IHdpcGluZyBhbmQgcmV3cml0aW5nPC9kaXY+PGRpdj50aGUgZHJpdmVzIHdpdGggdGhlIHJlc2ls
dmVycywgeW91JiMzOTt2ZSByZWZyZXNoZWQgYWxsIHRoZSBkYXRhIHNvIG5vdyBub25lIG9mPC9k
aXY+PGRpdj5pdCB0YWtlcyBhIGxvbmcgdGltZSB0byByZWFkLiBOb3Qgc3VyZSB3aGF0ICYjMzk7
b2xkIGRhdGEmIzM5OyBpcyBvbiB0aGUgZHJpdmVzLCBidXQ8L2Rpdj48ZGl2PnRoYXQgd291bGQg
YWxzbyBleHBsYWluIHRoZSBmYXN0ZXIgcmVzaWx2ZXIgdGltZXMgdG9vLjwvZGl2PjxkaXY+wqA8
L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBw
eCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGlu
Zy1sZWZ0OjFleCI+DQpRdWVzdGlvbnM6PGJyPg0KPGJyPg0KRG9lcyB0aGlzIG1lYW4gdGhhdCBw
cmlvciB0byBkZXBsb3lpbmcgU1NEcyBmb3IgdXNlIGluIGEgemZzIHBvb2wsIHlvdSA8YnI+DQpz
aG91bGQgZG8gYSBmdWxsIHRyaW0gLWYgb2YgdGhlIGRpc2sgPzxicj48L2Jsb2NrcXVvdGU+PGRp
dj48YnI+PC9kaXY+PGRpdj5ZZXMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xh
c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1s
ZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPg0KQXBhcnQg
ZnJvbSBvZmZsaW5pbmcgYW5kIGRvaW5nIGEgdHJpbSwgcmVzaWx2ZXIgZXRjLCBpcyB0aGVyZSBh
IGJldHRlciA8YnI+DQp3YXkgdG8gZ2V0IGJhY2sgcGVyZm9ybWFuY2UgP8KgIE9yIHdpdGggYSBv
bmNlIGEgd2VlayB0cmltIHByaW9yIHRvIDxicj4NCnNjcnViLCB3aWxsIGl0IGJlICZxdW90O2dv
b2QgZW5vdWdoJnF1b3Q7ID88YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PjxkaXY+V2Vl
a2x5IHNob3VsZCBzdWZmaWNlLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SG93ZXZlciwgaWYg
dGhlIHByb2JsZW0gaXMgZHVlIHRvICYjMzk7b2xkIGRhdGEmIzM5OyBkZWNheWluZyBhbmQgdGhl
IGRyaXZlJiMzOTtzPC9kaXY+PGRpdj5yZWxpYWJpbGl0eSBzb2Z0d2FyZSBub3QgbW92aW5nIGl0
IGFnZ3Jlc3NpdmVsecKgZW5vdWdoIHRvIHByZXNlcnZlPC9kaXY+PGRpdj5wZXJmb3JtYW5jZSwg
YWxsIHRoZSB0cmltcyBpbiB0aGUgd29ybGQgd29uJiMzOTt0IGhlbHAuIEl0IGNvdWxkIGJlIHRo
YXQ8L2Rpdj48ZGl2PnRoZSBkcml2ZXMgYXJlIHRvbyBidXN5ICh0aG91Z2ggdGhlIGFnZ3JlZ2F0
ZSBudW1iZXJzIGZyb20gc21hcnQ8L2Rpdj48ZGl2PmFyZW4mIzM5O3Qgc3VnZ2VzdGl2ZSBvZiB0
aGF0KS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGlz
IGdvb2QsIGJ1dCBpZiB0aGUgZHJpdmVzIGJha2VkIGZvciBhIHdoaWxlPC9kaXY+PGRpdj5mb3Ig
c29tZSByZWFzb24sIHRoYXQgY291bGQgZXhwbGFpbiB0aGUgZGVncmFkZWQgcGVyZm9ybWFuY2Uu
PC9kaXY+PGRpdj7CoDwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9
Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwy
MDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4NCklzIHRoZXJlIGEgd2F5IHRvIHRlbGwgaWYgYSBk
aXNrIFJFQUxMWSBuZWVkcyB0byBiZSBmdWxseSB0cmltbWVkIG90aGVyIDxicj4NCnRoYW4gYXBw
cm94aW1hdGluZyBmb3Igc2xvd2luZyBwZXJmb3JtYW5jZSA/PGJyPjwvYmxvY2txdW90ZT48ZGl2
Pjxicj48L2Rpdj48ZGl2PllvdSBtaWdodCBiZSBhYmxlIHRvIGxvb2sgYXQgdGhlIGN1cnJlbnQg
d2VhciB2cyB0aGUgcHJvbWlzZWQgbGlmZXRpbWU8L2Rpdj48ZGl2Pm9mIHRoZSBkcml2ZS4gNiB5
ZWFycyBpcyBvdXQgb2Ygd2FycmFudHnCoGZvciBzdXJlLCBzbyBpdCBtYXkganVzdCBiZSB0aGV5
PC9kaXY+PGRpdj5hcmUgdG9vIHdvcm4gZm9yIGFueXRoaW5nIG5lZWRpbmcgYW55IGxldmVsIG9m
IHBlcmZvcm1hbmNlLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QnV0IHVzdWFsbHkgaXQmIzM5
O3MgcGVyZm9ybWFuY2UuIEFuZCBldmVuIHRoZW4sIHRoZXJlJiMzOTtzIG5vIHNpbHZlcjwvZGl2
PjxkaXY+YnVsbGV0LjwvZGl2PjxkaXY+wqA8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf
cXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNv
bGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+DQpJIGtub3cgdGhlc2UgZGlz
a3Mgd2VyZSBzdXBlciBvbGQsIHNvIG1heWJlIGN1cnJlbnQgU1NEcyBkb250IGhhdmUgdGhpcyA8
YnI+DQppc3N1ZSA/IExhc3QgZmV3IHllYXJzIEkgaGF2ZSBzd2l0Y2hlZCB0byBTYW1zdW5nIEVW
T3MgYW5kIHRoZXkgZG9udCA8YnI+DQpzZWVtIHRvIGhhdmUgdGhlc2UgcHJvYmxlbXMsIGF0IGxl
YXN0IG5vdCB5ZXQgaW4gYW55IG9idmlvdXMgd2F5LsKgIE5vdCA8YnI+DQpzdXJlIHdoeSB0aGlz
IHBhcnRpY3VsYXJseSBzaG93ZWQgdXAgaW4gdGhlIHpmcyB2b2x1bWUgc2V0LCBhbmQgb3RoZXIg
PGJyPg0Kbm9ybWFsIGRhdGFzZXRzIHBlcmZvcm1lZCBvay48YnI+PC9ibG9ja3F1b3RlPjxkaXY+
PGJyPjwvZGl2PjxkaXY+WWVhLiBmcm9tIHRoZSBzbWFydCBpbmZvLCBpdCBsb29rcyBsaWtlIHlv
dSYjMzk7dmUgd29ybiB0aGVtwqBvdXQgMS8zLiBZb3UmIzM5O3ZlIHdyaXR0ZW48L2Rpdj48ZGl2
PmFib3V0IDExMlRCIHRvIHRoZSBkcml2ZSBiYXNlZCBvbiA4MFRCIG9mIHdyaXRlIHRyYWZmaWMg
KGlmIEkmIzM5O20gZG9pbmcgdGhlIG1hdGg8L2Rpdj48ZGl2PnJpZ2h0KS4gVGhpcyBpcyBhIGZh
aXJseSBnb29kIG51bWJlci4uIFRoZXJlJiMzOTtzIG5vdCBhbnkgcmVhbCBsaW5rIGVycm9ycyB0
byBzcGVhazwvZGl2PjxkaXY+b2YgKHdoaWNoIGlzIGFub3RoZXIgd2F5IHlvdSBjYW4gYmUgc2xv
dykuLCBub3IgaGF2ZSB5b3UgYmVlbiB0aGVybWFsIHRocm90dGxpbmcuPC9kaXY+PGRpdj48YnI+
PC9kaXY+PGRpdj5TbyB5b3UmIzM5O3ZlIGRvbmUgODAgZHJpdmUgd3JpdGVzIG92ZXIgNiB5ZWFy
cyAob3IgMC4wMyBEV1BEKS4gVGhpcyBpcyB3ZWxsIGJlbG93PC9kaXY+PGRpdj5yYXRpbmdzIGZv
ciBtb3N0IFRMQyBkcml2ZXMgb2YgMC4zNyBEV1BEIGluIHRoZSBkYXRhc2hlZXQgKGJ1dCB0aGF0
JiMzOTtzIG9ubHkgZm9yPC9kaXY+PGRpdj4zIHllYXJzKS4gVGhlIGRyaXZlIHNob3VsZCBiZSBn
b29kIGZvciBhYm91dCA0MDAgZHJpdmUgd3JpdGVzIHRvdGFsLCBhbmQgeW91IGFyZTwvZGl2Pjxk
aXY+YXQgMS81IG9mIHRoYXQuIEJ1dCB0aGUgd2VhciBpbmRpY2F0b3JzIGFyZSBjbG9zZXIgdG8g
MS8zIChhcHByb3hpbWF0ZWx5IDJ4IHdoYXQ8L2Rpdj48ZGl2PnRoZSBhYnNvbHV0ZSB3ZWFyIHZh
bHVlcyB3b3VsZCBpbmRpY2F0ZSkuIFRoZSB3cml0ZSBhbXAgaXMgcmVsYXRpdmVseSBsb3csIHN1
Z2dlc3Rpbmc8L2Rpdj48ZGl2PnRoYXQgdHJpbW1pbmcgd291bGRuJiMzOTt0IGhlbHAgYWxsIHRo
YXQgbXVjaCwgdGhvdWdoLiBJdCYjMzk7cyBhdCAxLjQsIHdoaWNoIHdvdWxkIGJ1bXA8L2Rpdj48
ZGl2PnRvdGFsIGJ5dGVzIHdyaXR0ZW4gaW50byB0aGUgMS8zIGxpZmV0aW1lIHJhbmdlLiBQbHVz
IFRMQyB3cml0ZXMgdGVuZCB0byBiZSBxdWl0ZSBhPC9kaXY+PGRpdj5iaXQgaGFyZGVyIG9uIHRo
ZSBkcml2ZSB0aGFuIFNMQyB3cml0ZXMsIHNvIHRoYXQgbWFrZXMgdGhlIDEvMyB3ZWFyIG51bWJl
cnM8L2Rpdj48ZGl2PmtpbmRhIG1ha2Ugc2Vuc2UuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5O
b25lIG9mIHRoZXNlIHJhdyBudW1iZXJzIHN1Z2dlc3RzIGEgZ29vZCByb290LWNhdXNlIGZvciB0
aGUgc2xvd25lc3MsPC9kaXY+PGRpdj53aGljaCBpcyBpbiBsaW5lIHdpdGggJiMzOTtiYWQgZGF0
YSBmcm9tIHRoZSBuYW5kIHRha2luZyBhIHdoaWxlIHRvIHJlY292ZXImIzM5Oy4gSXQgYWxsPC9k
aXY+PGRpdj5oYXMgdG8gZG8gd2l0aCB0aGUgZHJpdmUmIzM5O3Mgd3JpdGUgLyBwb3dlci1vbiAv
IHRlbXBlcmF0dXJlIC8gZXRjIGhpc3RvcnksIGFuZDwvZGl2PjxkaXY+bWFueSBrZXkgZGV0YWls
cyBvZiB0aGF0IGFyZSBzaW1wbHkgdW5vYnRhbml1bSB0aG91Z2ggc29tZSBoaW50cyBhdCB0aGVt
PC9kaXY+PGRpdj5hcmUgaW4gdGhlIFNNQVJUIGRhdGEuIE5vdCBlbm91Z2ggZm9yIGJlIHRvIGJl
IHN1cmUsIHRob3VnaCB3aHkgeW91cjwvZGl2PjxkaXY+ZHJpdmVzIGRlZ3JhZGVkLjwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+V2FybmVyPC9kaXY+PGRpdj7CoDwvZGl2PjxibG9ja3F1b3RlIGNs
YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXIt
bGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4NCsKgwqDC
oMKgIC0tLU1pa2U8YnI+DQo8YnI+DQo8YnI+DQpkaXNrPGJyPg0KPGJyPg0Kc21hcnRjdGwgNy40
IDIwMjMtMDgtMDEgcjU1MzAgW0ZyZWVCU0QgMTQuMi1TVEFCTEUgYW1kNjRdIChsb2NhbCBidWls
ZCk8YnI+DQpDb3B5cmlnaHQgKEMpIDIwMDItMjMsIEJydWNlIEFsbGVuLCBDaHJpc3RpYW4gRnJh
bmtlLCA8YSBocmVmPSJodHRwOi8vd3d3LnNtYXJ0bW9udG9vbHMub3JnIiByZWw9Im5vcmVmZXJy
ZXIiIHRhcmdldD0iX2JsYW5rIj53d3cuc21hcnRtb250b29scy5vcmc8L2E+PGJyPg0KPGJyPg0K
PT09IFNUQVJUIE9GIElORk9STUFUSU9OIFNFQ1RJT04gPT09PGJyPg0KTW9kZWwgRmFtaWx5OsKg
wqDCoMKgIFdEIEJsdWUgLyBSZWQgLyBHcmVlbiBTU0RzPGJyPg0KRGV2aWNlIE1vZGVsOsKgwqDC
oMKgIFdEQ8KgIFdEUzEwMFQyQjBBLTAwU001MDxicj4NClNlcmlhbCBOdW1iZXI6wqDCoMKgIDE5
MTAxMUEwMEE3Mjxicj4NCkxVIFdXTiBEZXZpY2UgSWQ6IDUgMDAxYjQ0IDhiODk4MjVlZDxicj4N
CkZpcm13YXJlIFZlcnNpb246IDQwMTAwMFdEPGJyPg0KVXNlciBDYXBhY2l0eTrCoMKgwqAgMSww
MDAsMjA0LDg4NiwwMTYgYnl0ZXMgWzEuMDAgVEJdPGJyPg0KU2VjdG9yIFNpemU6wqDCoMKgwqDC
oCA1MTIgYnl0ZXMgbG9naWNhbC9waHlzaWNhbDxicj4NClJvdGF0aW9uIFJhdGU6wqDCoMKgIFNv
bGlkIFN0YXRlIERldmljZTxicj4NCkZvcm0gRmFjdG9yOsKgwqDCoMKgwqAgMi41IGluY2hlczxi
cj4NClRSSU0gQ29tbWFuZDrCoMKgwqDCoCBBdmFpbGFibGUsIGRldGVybWluaXN0aWMsIHplcm9l
ZDxicj4NCkRldmljZSBpczrCoMKgwqDCoMKgwqDCoCBJbiBzbWFydGN0bCBkYXRhYmFzZSA3LjMv
NTUyODxicj4NCkFUQSBWZXJzaW9uIGlzOsKgwqAgQUNTLTQgVDEzL0JTUiBJTkNJVFMgNTI5IHJl
dmlzaW9uIDU8YnI+DQpTQVRBIFZlcnNpb24gaXM6wqAgU0FUQSAzLjMsIDYuMCBHYi9zIChjdXJy
ZW50OiA2LjAgR2Ivcyk8YnI+DQpMb2NhbCBUaW1lIGlzOsKgwqDCoCBXZWQgRGVjIDE4IDE1OjIz
OjEwIDIwMjQgRVNUPGJyPg0KU01BUlQgc3VwcG9ydCBpczogQXZhaWxhYmxlIC0gZGV2aWNlIGhh
cyBTTUFSVCBjYXBhYmlsaXR5Ljxicj4NClNNQVJUIHN1cHBvcnQgaXM6IEVuYWJsZWQ8YnI+DQpB
QU0gZmVhdHVyZSBpczrCoMKgIFVuYXZhaWxhYmxlPGJyPg0KQVBNIGxldmVsIGlzOsKgwqDCoMKg
IDEyOCAobWluaW11bSBwb3dlciBjb25zdW1wdGlvbiB3aXRob3V0IHN0YW5kYnkpPGJyPg0KUmQg
bG9vay1haGVhZCBpczogRW5hYmxlZDxicj4NCldyaXRlIGNhY2hlIGlzOsKgwqAgRW5hYmxlZDxi
cj4NCkRTTiBmZWF0dXJlIGlzOsKgwqAgVW5hdmFpbGFibGU8YnI+DQpBVEEgU2VjdXJpdHkgaXM6
wqAgRGlzYWJsZWQsIE5PVCBGUk9aRU4gW1NFQzFdPGJyPg0KV3QgQ2FjaGUgUmVvcmRlcjogVW5h
dmFpbGFibGU8YnI+DQo8YnI+DQo9PT0gU1RBUlQgT0YgUkVBRCBTTUFSVCBEQVRBIFNFQ1RJT04g
PT09PGJyPg0KU01BUlQgb3ZlcmFsbC1oZWFsdGggc2VsZi1hc3Nlc3NtZW50IHRlc3QgcmVzdWx0
OiBQQVNTRUQ8YnI+DQo8YnI+DQpHZW5lcmFsIFNNQVJUIFZhbHVlczo8YnI+DQpPZmZsaW5lIGRh
dGEgY29sbGVjdGlvbiBzdGF0dXM6wqAgKDB4MDApIE9mZmxpbmUgZGF0YSBjb2xsZWN0aW9uIGFj
dGl2aXR5PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2FzIG5ldmVyIHN0YXJ0ZWQuPGJy
Pg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQXV0byBPZmZsaW5lIERhdGEgQ29sbGVjdGlvbjog
PGJyPg0KRGlzYWJsZWQuPGJyPg0KU2VsZi10ZXN0IGV4ZWN1dGlvbiBzdGF0dXM6wqDCoMKgwqDC
oCAowqDCoCAwKSBUaGUgcHJldmlvdXMgc2VsZi10ZXN0IHJvdXRpbmUgPGJyPg0KY29tcGxldGVk
PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2l0aG91dCBlcnJvciBvciBubyBzZWxmLXRl
c3QgPGJyPg0KaGFzIGV2ZXI8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiZWVuIHJ1bi48
YnI+DQpUb3RhbCB0aW1lIHRvIGNvbXBsZXRlIE9mZmxpbmU8YnI+DQpkYXRhIGNvbGxlY3Rpb246
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICjCoMKgwqAgMCkgc2Vjb25kcy48YnI+DQpP
ZmZsaW5lIGRhdGEgY29sbGVjdGlvbjxicj4NCmNhcGFiaWxpdGllczrCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMHgxMSkgU01BUlQgZXhlY3V0ZSBPZmZsaW5lIGltbWVk
aWF0ZS48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBObyBBdXRvIE9mZmxpbmUgZGF0YSBj
b2xsZWN0aW9uIDxicj4NCnN1cHBvcnQuPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU3Vz
cGVuZCBPZmZsaW5lIGNvbGxlY3Rpb24gdXBvbiBuZXc8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoCBjb21tYW5kLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vIE9mZmxpbmUgc3Vy
ZmFjZSBzY2FuIHN1cHBvcnRlZC48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTZWxmLXRl
c3Qgc3VwcG9ydGVkLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vIENvbnZleWFuY2Ug
U2VsZi10ZXN0IHN1cHBvcnRlZC48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBObyBTZWxl
Y3RpdmUgU2VsZi10ZXN0IHN1cHBvcnRlZC48YnI+DQpTTUFSVCBjYXBhYmlsaXRpZXM6wqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCAoMHgwMDAzKSBTYXZlcyBTTUFSVCBkYXRhIGJlZm9yZSBlbnRlcmlu
Zzxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvd2VyLXNhdmluZyBtb2RlLjxicj4NCsKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFN1cHBvcnRzIFNNQVJUIGF1dG8gc2F2ZSB0aW1lci48YnI+
DQpFcnJvciBsb2dnaW5nIGNhcGFiaWxpdHk6wqDCoMKgwqDCoMKgwqAgKDB4MDEpIEVycm9yIGxv
Z2dpbmcgc3VwcG9ydGVkLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdlbmVyYWwgUHVy
cG9zZSBMb2dnaW5nIHN1cHBvcnRlZC48YnI+DQpTaG9ydCBzZWxmLXRlc3Qgcm91dGluZTxicj4N
CnJlY29tbWVuZGVkIHBvbGxpbmcgdGltZTrCoMKgwqDCoMKgwqDCoCAowqDCoCAyKSBtaW51dGVz
Ljxicj4NCkV4dGVuZGVkIHNlbGYtdGVzdCByb3V0aW5lPGJyPg0KcmVjb21tZW5kZWQgcG9sbGlu
ZyB0aW1lOsKgwqDCoMKgwqDCoMKgICjCoCAxMCkgbWludXRlcy48YnI+DQo8YnI+DQpTTUFSVCBB
dHRyaWJ1dGVzIERhdGEgU3RydWN0dXJlIHJldmlzaW9uIG51bWJlcjogNDxicj4NClZlbmRvciBT
cGVjaWZpYyBTTUFSVCBBdHRyaWJ1dGVzIHdpdGggVGhyZXNob2xkczo8YnI+DQpJRCMgQVRUUklC
VVRFX05BTUXCoMKgwqDCoMKgwqDCoMKgwqAgRkxBR1PCoMKgwqAgVkFMVUUgV09SU1QgVEhSRVNI
IEZBSUwgUkFXX1ZBTFVFPGJyPg0KwqDCoCA1IFJlYWxsb2NhdGVkX1NlY3Rvcl9DdMKgwqAgLU8t
LUNLwqDCoCAxMDDCoMKgIDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCsKgwqAgOSBQ
b3dlcl9Pbl9Ib3Vyc8KgwqDCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDC
oCAtLS3CoMKgwqAgLcKgwqDCoCA0NzI3MTxicj4NCsKgwqAxMiBQb3dlcl9DeWNsZV9Db3VudMKg
wqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAz
Mzxicj4NCjE2NSBCbG9ja19FcmFzZV9Db3VudMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg
wqAgMTAwwqDCoCAtLS3CoMKgwqAgLSA5MDY1MDkyOTEyNDU8YnI+DQoxNjYgTWluaW11bV9QRV9D
eWNsZXNfVExDwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDC
oCAxPGJyPg0KMTY3IE1heF9CYWRfQmxvY2tzX3Blcl9EaWXCoCAtTy0tQ0vCoMKgIDEwMMKgwqAg
MTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAzNDxicj4NCjE2OCBNYXhpbXVtX1BFX0N5Y2xlc19U
TEPCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDMzPGJy
Pg0KMTY5IFRvdGFsX0JhZF9CbG9ja3PCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAg
MTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCA1MzQ8YnI+DQoxNzAgR3Jvd25fQmFkX0Jsb2Nrc8Kg
wqDCoMKgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKg
IDA8YnI+DQoxNzEgUHJvZ3JhbV9GYWlsX0NvdW50wqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg
wqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAwPGJyPg0KMTcyIEVyYXNlX0ZhaWxfQ291bnTC
oMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDC
oCAwPGJyPg0KMTczIEF2ZXJhZ2VfUEVfQ3ljbGVzX1RMQ8KgwqAgLU8tLUNLwqDCoCAxMDDCoMKg
IDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMTI8YnI+DQoxNzQgVW5leHBlY3RlZF9Qb3dlcl9M
b3NzwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAxOTxi
cj4NCjE4NCBFbmQtdG8tRW5kX0Vycm9ywqDCoMKgwqDCoMKgwqAgLU8tLUNLwqDCoCAxMDDCoMKg
IDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCjE4NyBSZXBvcnRlZF9VbmNvcnJlY3TC
oMKgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDA8
YnI+DQoxODggQ29tbWFuZF9UaW1lb3V0wqDCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg
wqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAwPGJyPg0KMTk0IFRlbXBlcmF0dXJlX0NlbHNp
dXPCoMKgwqDCoCAtTy0tLUvCoMKgIDA3NcKgwqAgMDQ0wqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAy
NSAoTWluL01heCA8YnI+DQoyMi80NCk8YnI+DQoxOTkgVURNQV9DUkNfRXJyb3JfQ291bnTCoMKg
wqAgLU8tLUNLwqDCoCAxMDDCoMKgIDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCjIz
MCBNZWRpYV9XZWFyb3V0X0luZGljYXRvciAtTy0tQ0vCoMKgIDAwN8KgwqAgMDA3wqDCoCAtLS3C
oMKgwqAgLSAweDA3NDAwMTE0MDc0MDxicj4NCjIzMiBBdmFpbGFibGVfUmVzZXJ2ZF9TcGFjZSBQ
Ty0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAwMDTCoMKgwqAgLcKgwqDCoCAxMDA8YnI+DQoyMzMg
TkFORF9HQl9Xcml0dGVuX1RMQ8KgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0t
LcKgwqDCoCAtwqDCoMKgIDEyMzQ2PGJyPg0KMjM0IE5BTkRfR0JfV3JpdHRlbl9TTEPCoMKgwqDC
oCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCA5MDkxOTxicj4N
CjI0MSBIb3N0X1dyaXRlc19HaULCoMKgwqDCoMKgwqDCoMKgIC0tLS1DS8KgwqAgMjUzwqDCoCAy
NTPCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDgwNzYyPGJyPg0KMjQyIEhvc3RfUmVhZHNfR2lCwqDC
oMKgwqDCoMKgwqDCoMKgIC0tLS1DS8KgwqAgMjUzwqDCoCAyNTPCoMKgIC0tLcKgwqDCoCAtwqDC
oMKgIDE5OTA4PGJyPg0KMjQ0IFRlbXBfVGhyb3R0bGVfU3RhdHVzwqDCoMKgIC1PLS1DS8KgwqAg
MDAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDA8YnI+DQrCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fHx8fHxfIEsgYXV0by1r
ZWVwPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqAgfHx8fHxfXyBDIGV2ZW50IGNvdW50PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHx8fF9fXyBSIGVycm9yIHJhdGU8
YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoCB8fHxfX19fIFMgc3BlZWQvcGVyZm9ybWFuY2U8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fF9fX19fIE8gdXBkYXRlZCBv
bmxpbmU8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCB8X19fX19fIFAgcHJlZmFpbHVyZSB3YXJuaW5nPGJyPg0KPGJyPg0KR2VuZXJh
bCBQdXJwb3NlIExvZyBEaXJlY3RvcnkgVmVyc2lvbiAxPGJyPg0KU01BUlTCoMKgwqDCoMKgwqDC
oMKgwqDCoCBMb2cgRGlyZWN0b3J5IFZlcnNpb24gMSBbbXVsdGktc2VjdG9yIGxvZyBzdXBwb3J0
XTxicj4NCkFkZHJlc3PCoMKgwqAgQWNjZXNzwqAgUi9XwqDCoCBTaXplwqAgRGVzY3JpcHRpb248
YnI+DQoweDAwwqDCoMKgwqDCoMKgIEdQTCxTTMKgIFIvT8KgwqDCoMKgwqAgMcKgIExvZyBEaXJl
Y3Rvcnk8YnI+DQoweDAxwqDCoMKgwqDCoMKgwqDCoMKgwqAgU0zCoCBSL0/CoMKgwqDCoMKgIDHC
oCBTdW1tYXJ5IFNNQVJUIGVycm9yIGxvZzxicj4NCjB4MDLCoMKgwqDCoMKgwqDCoMKgwqDCoCBT
TMKgIFIvT8KgwqDCoMKgwqAgMsKgIENvbXByZWhlbnNpdmUgU01BUlQgZXJyb3IgbG9nPGJyPg0K
MHgwM8KgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKgwqDCoMKgIDHCoCBFeHQuIENvbXBy
ZWhlbnNpdmUgU01BUlQgZXJyb3IgbG9nPGJyPg0KMHgwNMKgwqDCoMKgwqDCoCBHUEwsU0zCoCBS
L0/CoMKgwqDCoMKgIDjCoCBEZXZpY2UgU3RhdGlzdGljcyBsb2c8YnI+DQoweDA2wqDCoMKgwqDC
oMKgwqDCoMKgwqAgU0zCoCBSL0/CoMKgwqDCoMKgIDHCoCBTTUFSVCBzZWxmLXRlc3QgbG9nPGJy
Pg0KMHgwN8KgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKgwqDCoMKgIDHCoCBFeHRlbmRl
ZCBzZWxmLXRlc3QgbG9nPGJyPg0KMHgxMMKgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKg
wqDCoMKgIDHCoCBOQ1EgQ29tbWFuZCBFcnJvciBsb2c8YnI+DQoweDExwqDCoMKgwqDCoMKgIEdQ
TMKgwqDCoMKgIFIvT8KgwqDCoMKgwqAgMcKgIFNBVEEgUGh5IEV2ZW50IENvdW50ZXJzIGxvZzxi
cj4NCjB4MjTCoMKgwqDCoMKgwqAgR1BMwqDCoMKgwqAgUi9PwqDCoCAyMjYxwqAgQ3VycmVudCBE
ZXZpY2UgSW50ZXJuYWwgU3RhdHVzIERhdGEgbG9nPGJyPg0KMHgyNcKgwqDCoMKgwqDCoCBHUEzC
oMKgwqDCoCBSL0/CoMKgIDIyNjHCoCBTYXZlZCBEZXZpY2UgSW50ZXJuYWwgU3RhdHVzIERhdGEg
bG9nPGJyPg0KMHgzMMKgwqDCoMKgwqDCoCBHUEwsU0zCoCBSL0/CoMKgwqDCoMKgIDnCoCBJREVO
VElGWSBERVZJQ0UgZGF0YSBsb2c8YnI+DQoweDgwLTB4OWbCoCBHUEwsU0zCoCBSL1fCoMKgwqDC
oCAxNsKgIEhvc3QgdmVuZG9yIHNwZWNpZmljIGxvZzxicj4NCjB4ZGXCoMKgwqDCoMKgwqAgR1BM
wqDCoMKgwqAgVlPCoMKgwqDCoMKgwqAgOMKgIERldmljZSB2ZW5kb3Igc3BlY2lmaWMgbG9nPGJy
Pg0KPGJyPg0KU01BUlQgRXh0ZW5kZWQgQ29tcHJlaGVuc2l2ZSBFcnJvciBMb2cgVmVyc2lvbjog
MSAoMSBzZWN0b3JzKTxicj4NCk5vIEVycm9ycyBMb2dnZWQ8YnI+DQo8YnI+DQpTTUFSVCBFeHRl
bmRlZCBTZWxmLXRlc3QgTG9nIFZlcnNpb246IDEgKDEgc2VjdG9ycyk8YnI+DQpObyBzZWxmLXRl
c3RzIGhhdmUgYmVlbiBsb2dnZWQuwqAgW1RvIHJ1biBzZWxmLXRlc3RzLCB1c2U6IHNtYXJ0Y3Rs
IC10XTxicj4NCjxicj4NClNlbGVjdGl2ZSBTZWxmLXRlc3RzL0xvZ2dpbmcgbm90IHN1cHBvcnRl
ZDxicj4NCjxicj4NClNDVCBDb21tYW5kcyBub3Qgc3VwcG9ydGVkPGJyPg0KPGJyPg0KRGV2aWNl
IFN0YXRpc3RpY3MgKEdQIExvZyAweDA0KTxicj4NClBhZ2XCoCBPZmZzZXQgU2l6ZcKgwqDCoMKg
wqDCoMKgIFZhbHVlIEZsYWdzIERlc2NyaXB0aW9uPGJyPg0KMHgwMcKgID09PT09wqAgPcKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPcKgID09PcKgID09IEdlbmVyYWwgU3RhdGlzdGljcyAo
cmV2IDEpID09PGJyPg0KMHgwMcKgIDB4MDA4wqAgNMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IDMzwqAgLS0twqAgTGlmZXRpbWUgUG93ZXItT24gUmVzZXRzPGJyPg0KMHgwMcKgIDB4MDEwwqAg
NMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQ3MjcxwqAgLS0twqAgUG93ZXItb24gSG91cnM8YnI+DQow
eDAxwqAgMHgwMTjCoCA2wqDCoMKgIDE2OTM3MTI1MzU3OMKgIC0tLcKgIExvZ2ljYWwgU2VjdG9y
cyBXcml0dGVuPGJyPg0KMHgwMcKgIDB4MDIwwqAgNsKgwqDCoMKgwqAgMjYzOTgxMjk0OcKgIC0t
LcKgIE51bWJlciBvZiBXcml0ZSBDb21tYW5kczxicj4NCjB4MDHCoCAweDAyOMKgIDbCoMKgwqDC
oCA0MTc1MjEzNjI4MsKgIC0tLcKgIExvZ2ljYWwgU2VjdG9ycyBSZWFkPGJyPg0KMHgwMcKgIDB4
MDMwwqAgNsKgwqDCoMKgwqDCoMKgIDg5NDI5MTg5wqAgLS0twqAgTnVtYmVyIG9mIFJlYWQgQ29t
bWFuZHM8YnI+DQoweDA3wqAgPT09PT3CoCA9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9
wqAgPT09wqAgPT0gU29saWQgU3RhdGUgRGV2aWNlIFN0YXRpc3RpY3MgPGJyPg0KKHJldiAxKSA9
PTxicj4NCjB4MDfCoCAweDAwOMKgIDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDHCoCBO
LS3CoCBQZXJjZW50YWdlIFVzZWQgRW5kdXJhbmNlIEluZGljYXRvcjxicj4NCsKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHx8
XyBDIG1vbml0b3JlZCBjb25kaXRpb24gbWV0PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fF9fIEQgc3VwcG9ydHMg
RFNOPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCB8X19fIE4gbm9ybWFsaXplZCB2YWx1ZTxicj4NCjxicj4NClBlbmRp
bmcgRGVmZWN0cyBsb2cgKEdQIExvZyAweDBjKSBub3Qgc3VwcG9ydGVkPGJyPg0KPGJyPg0KU0FU
QSBQaHkgRXZlbnQgQ291bnRlcnMgKEdQIExvZyAweDExKTxicj4NCklEwqDCoMKgwqDCoCBTaXpl
wqDCoMKgwqAgVmFsdWXCoCBEZXNjcmlwdGlvbjxicj4NCjB4MDAwMcKgIDTCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIDDCoCBDb21tYW5kIGZhaWxlZCBkdWUgdG8gSUNSQyBlcnJvcjxicj4NCjB4MDAw
MsKgIDTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoCBSX0VSUiByZXNwb25zZSBmb3IgZGF0YSBG
SVM8YnI+DQoweDAwMDXCoCA0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwwqAgUl9FUlIgcmVzcG9u
c2UgZm9yIG5vbi1kYXRhIEZJUzxicj4NCjB4MDAwYcKgIDTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IDfCoCBEZXZpY2UtdG8taG9zdCByZWdpc3RlciBGSVNlcyBzZW50IGR1ZSB0byBhIENPTVJFU0VU
PGJyPg0KPGJyPg0KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2Pg0K
--00000000000050e5d006299263d1--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrGKcjOWKoqH39A2UvvRD1D_gt6zdb8EYkJLJBxv6SVxA>