Re: [PATCH] find: Fix broken -ls, add test.
Bernhard Voelker <[email protected]> Wed, 22 Jul 2026 23:50:03 +0200
| Newsgroups | gmane.comp.gnu.findutils.patches,gmane.comp.gnu.findutils.bugs |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------k2lbEQ9btZkvZaaIpFyVfhND
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
On 7/13/26 12:18, James Youngman wrote:
> Thanks for these fixes. I sent a couple of follow-up improvements.
Hi James,
thanks - still 'tests/find/ls-format-file.sh' is failing here.
The relevant part is:
+ find lsme -printf '%9i %6b %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n'
+ compare printf-output.txt output.txt
+ compare_dev_null_ printf-output.txt output.txt
+ test 2 = 2
+ test xprintf-output.txt = x/dev/null
+ test xoutput.txt = x/dev/null
+ return 2
+ case $? in
+ compare_ printf-output.txt output.txt
+ LC_ALL=C
+ diff -u printf-output.txt output.txt
--- printf-output.txt 2026-07-22 23:25:29.952544221 +0200
+++ output.txt 2026-07-22 23:25:29.941544072 +0200
@@ -1 +1 @@
- 6042709 8 -rw------- 1 berny users 765 Mar 14 1992 lsme
+ 6042709 4 -rw------- 1 berny users 765 Mar 14 1992 lsme
+ fail=1
This means -printf '%b' yields 8 because it's using 512 blocksize while -ls uses
a blocksize of 1024.
Here is the output for -ls, %b, %k and system ls for comparison - depending
on POSIXLY_CORRECT:
$ env POSIXLY_CORRECT=1 \
find/find lsme \
-ls \
-printf '%9i %6b %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n' \
-printf "%9i %6k %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n" \
-exec /bin/ls -dils '{}' \;
5780631 8 -rw-r--r-- 1 berny users 765 Jul 22 20:54 lsme
5780631 8 -rw-r--r-- 1 berny users 765 Jul 22 2026 lsme
5780631 4 -rw-r--r-- 1 berny users 765 Jul 22 2026 lsme
5780631 8 -rw-r--r-- 1 berny users 765 Jul 22 20:54 lsme
$ env -u POSIXLY_CORRECT \
find/find lsme \
-ls \
-printf '%9i %6b %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n' \
-printf "%9i %6k %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n" \
-exec /bin/ls -dils '{}' \;
5780631 4 -rw-r--r-- 1 berny users 765 Jul 22 20:54 lsme
5780631 8 -rw-r--r-- 1 berny users 765 Jul 22 2026 lsme
5780631 4 -rw-r--r-- 1 berny users 765 Jul 22 2026 lsme
5780631 4 -rw-r--r-- 1 berny users 765 Jul 22 20:54 lsme
FWIW: I'm using an 'ext4' filesystem here, and this is the output of the statx() syscall:
$ strace -ve statx /bin/stat lsme 2>&1 | sed 1q
statx(AT_FDCWD, "lsme", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_ALL, \
{stx_mask=STATX_ALL|STATX_MNT_ID, \
stx_blksize=4096, \
stx_attributes=0, \
stx_nlink=1, \
stx_uid=1000, \
stx_gid=100, \
stx_mode=S_IFREG|0644, \
stx_ino=5780631, \
stx_size=765, \
stx_blocks=8, \
stx_attributes_mask=STATX_ATTR_COMPRESSED|STATX_ATTR_IMMUTABLE|STATX_ATTR_APPEND|STATX_ATTR_NODUMP|\
STATX_ATTR_ENCRYPTED|STATX_ATTR_AUTOMOUNT|STATX_ATTR_MOUNT_ROOT|STATX_ATTR_VERITY|STATX_ATTR_DAX, \
stx_atime={tv_sec=1784746447, tv_nsec=353879572} /* 2026-07-22T20:54:07.353879572+0200 */, \
stx_btime={tv_sec=1784746447, tv_nsec=353879572} /* 2026-07-22T20:54:07.353879572+0200 */, \
stx_ctime={tv_sec=1784746447, tv_nsec=354879586} /* 2026-07-22T20:54:07.354879586+0200 */, \
stx_mtime={tv_sec=1784746447, tv_nsec=354879586} /* 2026-07-22T20:54:07.354879586+0200 */, \
stx_rdev_major=0, \
stx_rdev_minor=0, \
stx_dev_major=8, \
stx_dev_minor=5, \
stx_mnt_id=0x2a}) = 0
I'm confused why this test is working for you. Can you reproduce this?
Do you have a different filesystem type with other block sizes?
Changing from %b to %k helps here, but I'd rather like to understand what happens on your side.
diff --git a/tests/find/ls-format-file.sh b/tests/find/ls-format-file.sh
index cee3737e..b6242222 100755
--- a/tests/find/ls-format-file.sh
+++ b/tests/find/ls-format-file.sh
@@ -309,7 +309,7 @@ fi
# Generate "by hand" in the file printf-output.txt some output which
# should match the output of -ls.
rm -f -- printf-output.txt
-if ! find "${testfile}" -printf '%9i %6b %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n' > printf-output.txt
+if ! find "${testfile}" -printf '%9i %6k %M %3n %-8u %-8g %8s %3Tb %2Td %5TY %p\n' > printf-output.txt
then
framework_failure_ "unable to create printf-output.txt"
fi
Thanks & have a nice day,
Berny
--------------k2lbEQ9btZkvZaaIpFyVfhND
Content-Type: text/x-log; charset=UTF-8; name="ls-format-file.log"
Content-Disposition: attachment; filename="ls-format-file.log"
Content-Transfer-Encoding: base64
KysgaW5pdGlhbF9jd2RfPS9ob21lL2Jlcm55L2ZpbmR1dGlscworKysgdGVzdGRpcl9wcmVm
aXhfCisrKyBwcmludGYgZ3QKKysgcGZ4Xz1ndAorKysgbWt0ZW1wZF8gL2hvbWUvYmVybnkv
ZmluZHV0aWxzIGd0LWxzLWZvcm1hdC1maWxlLnNoLlhYWFgKKysrIGNhc2UgJCMgaW4KKysr
IGRlc3RkaXJfPS9ob21lL2Jlcm55L2ZpbmR1dGlscworKysgdGVtcGxhdGVfPWd0LWxzLWZv
cm1hdC1maWxlLnNoLlhYWFgKKysrIE1BWF9UUklFU189NAorKysgY2FzZSAkZGVzdGRpcl8g
aW4KKysrIGRlc3RkaXJfc2xhc2hfPS9ob21lL2Jlcm55L2ZpbmR1dGlscy8KKysrIGNhc2Ug
JHRlbXBsYXRlXyBpbgorKysrIHVuc2V0IFRNUERJUgorKysgZD0vaG9tZS9iZXJueS9maW5k
dXRpbHMvZ3QtbHMtZm9ybWF0LWZpbGUuc2guc0dvOAorKysgY2FzZSAkZCBpbgorKysgOgor
KysgdGVzdCAtZCAvaG9tZS9iZXJueS9maW5kdXRpbHMvZ3QtbHMtZm9ybWF0LWZpbGUuc2gu
c0dvOAorKysrIGxzIC1kZ28gL2hvbWUvYmVybnkvZmluZHV0aWxzL2d0LWxzLWZvcm1hdC1m
aWxlLnNoLnNHbzgKKysrIHBlcm1zPSdkcnd4LS0tLS0tIDIgNDA5NiBKdWwgMjIgMjM6NDkg
L2hvbWUvYmVybnkvZmluZHV0aWxzL2d0LWxzLWZvcm1hdC1maWxlLnNoLnNHbzgnCisrKyBj
YXNlICRwZXJtcyBpbgorKysgOgorKysgZWNobyAvaG9tZS9iZXJueS9maW5kdXRpbHMvZ3Qt
bHMtZm9ybWF0LWZpbGUuc2guc0dvOAorKysgcmV0dXJuCisrIHRlc3RfZGlyXz0vaG9tZS9i
ZXJueS9maW5kdXRpbHMvZ3QtbHMtZm9ybWF0LWZpbGUuc2guc0dvOAorKyBjZCAvaG9tZS9i
ZXJueS9maW5kdXRpbHMvZ3QtbHMtZm9ybWF0LWZpbGUuc2guc0dvOAorKyBjYXNlICRzcmNk
aXIgaW4KKysgc3JjZGlyPS4uLy4KKysgYnVpbGRkaXI9Li4KKysgZXhwb3J0IHNyY2RpciBi
dWlsZGRpcgorKyBnbF9pbml0X3NoX25sXz0kJ1xuJworKyBJRlM9JCcgXHRcbicKKysgZm9y
IHNpZ18gaW4gMSAyIDMgMTMgMTUKKysrIGV4cHIgMSArIDEyOAorKyBldmFsICd0cmFwICdc
JydFeGl0IDEyOSdcJycgMScKKysrIHRyYXAgJ0V4aXQgMTI5JyAxCisrIGZvciBzaWdfIGlu
IDEgMiAzIDEzIDE1CisrKyBleHByIDIgKyAxMjgKKysgZXZhbCAndHJhcCAnXCcnRXhpdCAx
MzAnXCcnIDInCisrKyB0cmFwICdFeGl0IDEzMCcgMgorKyBmb3Igc2lnXyBpbiAxIDIgMyAx
MyAxNQorKysgZXhwciAzICsgMTI4CisrIGV2YWwgJ3RyYXAgJ1wnJ0V4aXQgMTMxJ1wnJyAz
JworKysgdHJhcCAnRXhpdCAxMzEnIDMKKysgZm9yIHNpZ18gaW4gMSAyIDMgMTMgMTUKKysr
IGV4cHIgMTMgKyAxMjgKKysgZXZhbCAndHJhcCAnXCcnRXhpdCAxNDEnXCcnIDEzJworKysg
dHJhcCAnRXhpdCAxNDEnIDEzCisrIGZvciBzaWdfIGluIDEgMiAzIDEzIDE1CisrKyBleHBy
IDE1ICsgMTI4CisrIGV2YWwgJ3RyYXAgJ1wnJ0V4aXQgMTQzJ1wnJyAxNScKKysrIHRyYXAg
J0V4aXQgMTQzJyAxNQorKyBzYXZlZF9JRlM9JCcgXHRcbicKKysgSUZTPToKKysgbmV3X1BB
VEg9CisrIGZvciBkaXIgaW4gJFBBVEgKKysgSUZTPSQnIFx0XG4nCisrIGNhc2UgIiRkaXIi
IGluCisrIHRlc3QgLWQgL2hvbWUvYmVybnkvZmluZHV0aWxzL2ZpbmQvLgorKyBuZXdfUEFU
SD0vaG9tZS9iZXJueS9maW5kdXRpbHMvZmluZAorKyBmb3IgZGlyIGluICRQQVRICisrIElG
Uz0kJyBcdFxuJworKyBjYXNlICIkZGlyIiBpbgorKyB0ZXN0IC1kIC9ob21lL2Jlcm55L2Zp
bmR1dGlscy9sb2NhdGUvLgorKyBuZXdfUEFUSD0vaG9tZS9iZXJueS9maW5kdXRpbHMvZmlu
ZDovaG9tZS9iZXJueS9maW5kdXRpbHMvbG9jYXRlCisrIGZvciBkaXIgaW4gJFBBVEgKKysg
SUZTPSQnIFx0XG4nCisrIGNhc2UgIiRkaXIiIGluCisrIHRlc3QgLWQgL2hvbWUvYmVybnkv
ZmluZHV0aWxzL3hhcmdzLy4KKysgbmV3X1BBVEg9L2hvbWUvYmVybnkvZmluZHV0aWxzL2Zp
bmQ6L2hvbWUvYmVybnkvZmluZHV0aWxzL2xvY2F0ZTovaG9tZS9iZXJueS9maW5kdXRpbHMv
eGFyZ3MKKysgZm9yIGRpciBpbiAkUEFUSAorKyBJRlM9JCcgXHRcbicKKysgY2FzZSAiJGRp
ciIgaW4KKysgdGVzdCAtZCAvaG9tZS9iZXJueS9iaW4vLgorKyBuZXdfUEFUSD0vaG9tZS9i
ZXJueS9maW5kdXRpbHMvZmluZDovaG9tZS9iZXJueS9maW5kdXRpbHMvbG9jYXRlOi9ob21l
L2Jlcm55L2ZpbmR1dGlscy94YXJnczovaG9tZS9iZXJueS9iaW4KKysgZm9yIGRpciBpbiAk
UEFUSAorKyBJRlM9JCcgXHRcbicKKysgY2FzZSAiJGRpciIgaW4KKysgdGVzdCAtZCAvdXNy
L2xvY2FsL2Jpbi8uCisrIG5ld19QQVRIPS9ob21lL2Jlcm55L2ZpbmR1dGlscy9maW5kOi9o
b21lL2Jlcm55L2ZpbmR1dGlscy9sb2NhdGU6L2hvbWUvYmVybnkvZmluZHV0aWxzL3hhcmdz
Oi9ob21lL2Jlcm55L2JpbjovdXNyL2xvY2FsL2JpbgorKyBmb3IgZGlyIGluICRQQVRICisr
IElGUz0kJyBcdFxuJworKyBjYXNlICIkZGlyIiBpbgorKyB0ZXN0IC1kIC91c3IvYmluLy4K
KysgbmV3X1BBVEg9L2hvbWUvYmVybnkvZmluZHV0aWxzL2ZpbmQ6L2hvbWUvYmVybnkvZmlu
ZHV0aWxzL2xvY2F0ZTovaG9tZS9iZXJueS9maW5kdXRpbHMveGFyZ3M6L2hvbWUvYmVybnkv
YmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluCisrIGZvciBkaXIgaW4gJFBBVEgKKysgSUZT
PSQnIFx0XG4nCisrIGNhc2UgIiRkaXIiIGluCisrIHRlc3QgLWQgL2Jpbi8uCisrIG5ld19Q
QVRIPS9ob21lL2Jlcm55L2ZpbmR1dGlscy9maW5kOi9ob21lL2Jlcm55L2ZpbmR1dGlscy9s
b2NhdGU6L2hvbWUvYmVybnkvZmluZHV0aWxzL3hhcmdzOi9ob21lL2Jlcm55L2JpbjovdXNy
L2xvY2FsL2JpbjovdXNyL2JpbjovYmluCisrIGZvciBkaXIgaW4gJFBBVEgKKysgSUZTPSQn
IFx0XG4nCisrIGNhc2UgIiRkaXIiIGluCisrIHRlc3QgLWQgL3NiaW4vLgorKyBuZXdfUEFU
SD0vaG9tZS9iZXJueS9maW5kdXRpbHMvZmluZDovaG9tZS9iZXJueS9maW5kdXRpbHMvbG9j
YXRlOi9ob21lL2Jlcm55L2ZpbmR1dGlscy94YXJnczovaG9tZS9iZXJueS9iaW46L3Vzci9s
b2NhbC9iaW46L3Vzci9iaW46L2Jpbjovc2JpbgorKyBmb3IgZGlyIGluICRQQVRICisrIElG
Uz0kJyBcdFxuJworKyBjYXNlICIkZGlyIiBpbgorKyB0ZXN0IC1kIC91c3Ivc2Jpbi8uCisr
IG5ld19QQVRIPS9ob21lL2Jlcm55L2ZpbmR1dGlscy9maW5kOi9ob21lL2Jlcm55L2ZpbmR1
dGlscy9sb2NhdGU6L2hvbWUvYmVybnkvZmluZHV0aWxzL3hhcmdzOi9ob21lL2Jlcm55L2Jp
bjovdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluOi9zYmluOi91c3Ivc2JpbgorKyBJRlM9
JCcgXHRcbicKKysgUEFUSD0vaG9tZS9iZXJueS9maW5kdXRpbHMvZmluZDovaG9tZS9iZXJu
eS9maW5kdXRpbHMvbG9jYXRlOi9ob21lL2Jlcm55L2ZpbmR1dGlscy94YXJnczovaG9tZS9i
ZXJueS9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2Jpbjovc2JpbjovdXNyL3NiaW4K
KysgZXhwb3J0IFBBVEgKKysgdHJhcCByZW1vdmVfdG1wXyBFWElUCisgZnVfcGF0aF9wcmVw
ZW5kXworIHBhdGhfcHJlcGVuZF8gLi4vLi9maW5kIC4uLy4vbG9jYXRlIC4uLy4veGFyZ3MK
KyB0ZXN0IDMgJyE9JyAwCisgcGF0aF9kaXJfPS4uLy4vZmluZAorIGNhc2UgJHBhdGhfZGly
XyBpbgorIGFic19wYXRoX2Rpcl89L2hvbWUvYmVybnkvZmluZHV0aWxzLy4uLy4vZmluZAor
IGNhc2UgJGFic19wYXRoX2Rpcl8gaW4KKyBQQVRIPS9ob21lL2Jlcm55L2ZpbmR1dGlscy8u
Li8uL2ZpbmQ6L2hvbWUvYmVybnkvZmluZHV0aWxzL2ZpbmQ6L2hvbWUvYmVybnkvZmluZHV0
aWxzL2xvY2F0ZTovaG9tZS9iZXJueS9maW5kdXRpbHMveGFyZ3M6L2hvbWUvYmVybnkvYmlu
Oi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW46L3NiaW46L3Vzci9zYmluCisgY3JlYXRl
X2V4ZV9zaGltc18gL2hvbWUvYmVybnkvZmluZHV0aWxzLy4uLy4vZmluZAorIGNhc2UgJEVY
RUVYVCBpbgorIHJldHVybiAwCisgc2hpZnQKKyB0ZXN0IDIgJyE9JyAwCisgcGF0aF9kaXJf
PS4uLy4vbG9jYXRlCisgY2FzZSAkcGF0aF9kaXJfIGluCisgYWJzX3BhdGhfZGlyXz0vaG9t
ZS9iZXJueS9maW5kdXRpbHMvLi4vLi9sb2NhdGUKKyBjYXNlICRhYnNfcGF0aF9kaXJfIGlu
CisgUEFUSD0vaG9tZS9iZXJueS9maW5kdXRpbHMvLi4vLi9sb2NhdGU6L2hvbWUvYmVybnkv
ZmluZHV0aWxzLy4uLy4vZmluZDovaG9tZS9iZXJueS9maW5kdXRpbHMvZmluZDovaG9tZS9i
ZXJueS9maW5kdXRpbHMvbG9jYXRlOi9ob21lL2Jlcm55L2ZpbmR1dGlscy94YXJnczovaG9t
ZS9iZXJueS9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2Jpbjovc2JpbjovdXNyL3Ni
aW4KKyBjcmVhdGVfZXhlX3NoaW1zXyAvaG9tZS9iZXJueS9maW5kdXRpbHMvLi4vLi9sb2Nh
dGUKKyBjYXNlICRFWEVFWFQgaW4KKyByZXR1cm4gMAorIHNoaWZ0CisgdGVzdCAxICchPScg
MAorIHBhdGhfZGlyXz0uLi8uL3hhcmdzCisgY2FzZSAkcGF0aF9kaXJfIGluCisgYWJzX3Bh
dGhfZGlyXz0vaG9tZS9iZXJueS9maW5kdXRpbHMvLi4vLi94YXJncworIGNhc2UgJGFic19w
YXRoX2Rpcl8gaW4KKyBQQVRIPS9ob21lL2Jlcm55L2ZpbmR1dGlscy8uLi8uL3hhcmdzOi9o
b21lL2Jlcm55L2ZpbmR1dGlscy8uLi8uL2xvY2F0ZTovaG9tZS9iZXJueS9maW5kdXRpbHMv
Li4vLi9maW5kOi9ob21lL2Jlcm55L2ZpbmR1dGlscy9maW5kOi9ob21lL2Jlcm55L2ZpbmR1
dGlscy9sb2NhdGU6L2hvbWUvYmVybnkvZmluZHV0aWxzL3hhcmdzOi9ob21lL2Jlcm55L2Jp
bjovdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluOi9zYmluOi91c3Ivc2JpbgorIGNyZWF0
ZV9leGVfc2hpbXNfIC9ob21lL2Jlcm55L2ZpbmR1dGlscy8uLi8uL3hhcmdzCisgY2FzZSAk
RVhFRVhUIGluCisgcmV0dXJuIDAKKyBzaGlmdAorIHRlc3QgMCAnIT0nIDAKKyBleHBvcnQg
UEFUSAorIHByaW50X3Zlcl8gZmluZAorIHJlcXVpcmVfYnVpbHRfIGZpbmQKKyBza2lwXz1u
bworIGZvciBpIGluICIkQCIKKyBjYXNlICIgJGJ1aWx0X3Byb2dyYW1zICIgaW4KKyB0ZXN0
IG5vID0geWVzCisgdGVzdCB5ZXMgPSB5ZXMKKyBsb2NhbCBpCisgZm9yIGkgaW4gJCoKKyBl
bnYgZmluZCAtLXZlcnNpb24KZmluZCAoR05VIGZpbmR1dGlscykgNC4xMS4wLjIzLWZmYTEt
bW9kaWZpZWQKQ29weXJpZ2h0IChDKSAyMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLgpMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHBz
Oi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4uClRoaXMgaXMgZnJlZSBzb2Z0d2FyZTog
eW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgpUaGVyZSBpcyBO
TyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgoKV3JpdHRlbiBi
eSBFcmljIEIuIERlY2tlciwgSmFtZXMgWW91bmdtYW4sIEJlcm5oYXJkIFZvZWxrZXIsCmFu
ZCBLZXZpbiBEYWxsZXkuCkZlYXR1cmVzIGVuYWJsZWQ6IERfVFlQRSBPX05PRk9MTE9XKGVu
YWJsZWQpIExFQUZfT1BUSU1JU0FUSU9OIEZUUyhGVFNfQ1dERkQpIENCTyhsZXZlbD0xKSAK
KyB1bnNldCBQT1NJWExZX0NPUlJFQ1QKKyBMQ19BTEw9QworIGV4cG9ydCBMQ19BTEwKKyB1
bnNldCBMQU5HCisgZmFpbD0wCisrIGlkIC11IC1uCisgdXNlcl9vd25lcj1iZXJueQorICdb
JyAteiBiZXJueSAnXScKKyB1bWFzayAwNzcKKyB0ZXN0ZmlsZT1sc21lCisgZmlsZXNpemU9
NzY1Cisgcm0gLWYgLS0gbHNtZQorIHRvdWNoIC10IDE5OTIwMzE0MTkwMC4wMSBsc21lCisr
IGNob29zZV9kaXN0aW5jdF9ncm91cAorKyBjaG9zZW49TgorKyB1bnNldCBncm91cF9uYW1l
CisrKyBncm91cHMKKysgZm9yIGdyb3VwX25hbWUgaW4gJChncm91cHMpCisrICdbJyB1c2Vy
cyAnIT0nIGJlcm55ICddJworKyBwcmludGYgJyVzXG4nIHVzZXJzCisrIGNob3Nlbj1ZCisr
IGJyZWFrCisrICdbJyBZID0gTiAnXScKKyBncm91cF9vd25lcj11c2VycworICdbJyAteiB1
c2VycyAnXScKKyBjaGdycCB1c2VycyBsc21lCisrIGZpbmQgbHNtZSAtcHJpbnRmICclaVxu
JworIGludW09NjA0MjcwOQorKyBscyAtcyBsc21lCisrIHNlZCAtZSBzL2xzbWUvL2cKKyBi
bG9ja3NfZXhwZWN0ZWQ9JzQgJworIGZpbmQgbHNtZSAtbHMKKyBlY2hvICdvdXRwdXQgb2Yg
ZmluZCBsc21lIC1sczonCm91dHB1dCBvZiBmaW5kIGxzbWUgLWxzOgorIGNhdCBvdXRwdXQu
dHh0CiAgNjA0MjcwOSAgICAgIDQgLXJ3LS0tLS0tLSAgIDEgYmVybnkgICAgdXNlcnMgICAg
ICAgICA3NjUgTWFyIDE0ICAxOTkyIGxzbWUKKyBlY2hvICdzYW1lIHRoaW5nIGluIG9kIC1j
IGZvcm1hdDonCnNhbWUgdGhpbmcgaW4gb2QgLWMgZm9ybWF0OgorIG9kIC1jIG91dHB1dC50
eHQKMDAwMDAwMCAgICAgICAgICAgNiAgIDAgICA0ICAgMiAgIDcgICAwICAgOSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQKMDAwMDAyMCAgICAgICAtICAgciAgIHcgICAtICAgLSAg
IC0gICAtICAgLSAgIC0gICAtICAgICAgICAgICAgICAgMSAgICAKMDAwMDA0MCAgIGIgICBl
ICAgciAgIG4gICB5ICAgICAgICAgICAgICAgICAgIHUgICBzICAgZSAgIHIgICBzICAgICAg
ICAKMDAwMDA2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAgNiAgIDUgICAg
ICAgTSAgIGEgICByICAgICAgIDEKMDAwMDEwMCAgIDQgICAgICAgICAgIDEgICA5ICAgOSAg
IDIgICAgICAgbCAgIHMgICBtICAgZSAgXG4KMDAwMDExNQorKyBzZWQgLW4gLWUgJyQgcy8u
Ki8vcCcKKysgd2MgLWMKKyAnWycgMSAtZXEgMCAnXScKKyBncmVwIC1lICcgbHNtZSQnCisr
IGlkIC11bgorIGF3ayAtdiBNRT1scy1mb3JtYXQtZmlsZS5zaCAtdiBmaWxlbmFtZV9leHBl
Y3RlZD1sc21lIC12IGlub2RlbnVtPTYwNDI3MDkgLXYgJ2Jsb2Nrc19leHBlY3RlZD00ICcg
LXYgZmlsZXNpemU9NzY1IC12IHVvd25lcj1iZXJueSAtdiBnb3duZXI9dXNlcnMgJCdcbkJF
R0lOIHtcbiAgICAgIHJ2PTJcbn1cbntcbiAgZm9yIChpPTE7IGk8PU5GOyArK2kpIHtcbiAg
ICBwcmludGYoIiVzOiBpbmZvOiByZWNvcmQgJWQgZmllbGQgJTJkIGNvbnRhaW5zICVzXFxu
IiwgTUUsIE5SLCBpLCAkaSk7XG4gIH1cbn1cbk5SID09IDIge1xuICAgcnY9MVxuICAgcHJp
bnRmKCIlczogZmFpbGVkIHRlc3Q6IFRvbyBtYW55IGxpbmVzIG9mIG91dHB1dFxcbiIsIE1F
KTtcbn1cbk5SID09IDEge1xuICBydj0wXG5cbiAgc3RfaW5vPSQxO1xuICBzdF9ibG9ja3M9
JDI7XG4gIHN5bWJvbGljX3N0X21vZGU9IiIgJDM7XG4gIHN0X25saW5rPSQ0O1xuICBzdF91
aWQ9JDU7XG4gIHN0X2dpZD0kNjtcbiAgc3Rfc2l6ZT0kNztcbiAgc3RfbXRpbWVfbW9udGhu
YW1lPSQ4O1xuICBzdF9tdGltZV9tb250aGRheT0kOTtcbiAgc3RfbXRpbWVfeWVhcj0kMTA7
XG4gIGZpbGVuYW1lX2dvdD0kMTE7XG5cbiAgcHJpbnRmKCIlczogaW5mbzogY2hlY2tpbmcg
b3V0cHV0IG9mIC1scyAod2hpY2ggd2FzIFslc10pXFxuIiwgTUUsICQwKTtcblxuICAjIGZp
ZWxkIDE6IGlub2RlIG51bWJlclxuICBpZiAoc3RfaW5vICE9IGlub2RlbnVtKSB7XG4gICAg
cnY9MVxuICAgIHByaW50ZigiJXM6IGZhaWxlZCB0ZXN0OiBleHBlY3RlZCBpbm9kZSBudW1i
ZXIgJWQsIGdvdCAlc1xcbiIsIE1FLCBpbm9kZW51bSwgJDEpO1xuICB9XG5cbiAgIyBmaWVs
ZCAyOiBzaXplIGluIGJsb2Nrc1xuICBpZiAoc3RfYmxvY2tzICE9IGJsb2Nrc19leHBlY3Rl
ZCkge1xuICAgIHJ2PTFcbiAgICBwcmludGYoIiVzOiBmYWlsZWQgdGVzdDogZXhwZWN0ZWQg
YmxvY2sgY291bnQgJWQgZ290ICVkXFxuIiwgTUUsIGJsb2Nrc19leHBlY3RlZCwgc3RfYmxv
Y2tzKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludGYoIiVzOiBibG9jayBjb3VudCAlZCBsb29r
cyBPS1xcbiIsIE1FLCBzdF9ibG9ja3MpO1xuICB9XG5cbiAgIyBmaWVsZCAzIGlzIHRoZSBz
eW1ib2xpYyBtb2RlOyB3ZSBhbGxvdyBhIGZpbmFsICtcbiAgIyBpbiBjYXNlIHRoZXJlIGlz
IHNvbWVob3cgYSBub24tZGVmYXVsdCBBQ0wgb24gdGhlIGZpbGUuXG4gIGlmIChzeW1ib2xp
Y19zdF9tb2RlICE9ICItcnctLS0tLS0tIiAmJiBzeW1ib2xpY19zdF9tb2RlICE9ICItcnct
LS0tLS0tKyIpIHtcbiAgICBydj0xXG4gICAgcHJpbnRmKCIlczogZmFpbGVkIHRlc3Q6IGV4
cGVjdGVkIHN5bWJvbGljIG1vZGUgWy1ydy0tLS0tLS1dLCBnb3QgWyVzXVxcbiIsIE1FLCBz
eW1ib2xpY19zdF9tb2RlKTtcbiAgfVxuICAjIGZpZWxkIDQgaXMgdGhlIGxpbmsgY291bnRc
biAgaWYgKHN0X25saW5rICE9IDEpIHtcbiAgICBydj0xXG4gICAgcHJpbnRmKCIlczogZmFp
bGVkIHRlc3Q6IGV4cGVjdGVkIGxpbmsgY291bnQgMSwgZ290ICVzXFxuIiwgTUUsIHN0X25s
aW5rKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludGYoIiVzOiBsaW5rIGNvdW50ICVzIGxvb2tz
IE9LXFxuIiwgTUUsIHN0X25saW5rKTtcbiAgfVxuICAjIGZpZWxkIDUgaXMgdGhlIG93bmVy
XG4gIGlmIChzdF91aWQgIT0gdW93bmVyKSB7XG4gICAgcnY9MVxuICAgIHByaW50ZigiJXM6
IGZhaWxlZCB0ZXN0OiBleHBlY3RlZCBvd25lciBbJXNdLCBnb3QgWyVzXVxcbiIsIE1FLCB1
b3duZXIsIHN0X3VpZCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRmKCIlczogb3duZXIgJXMg
bG9va3MgT0tcXG4iLCBNRSwgc3RfdWlkKTtcbiAgfVxuICAjIGZpZWxkIDYgaXMgdGhlIGdy
b3VwIG93bmVyXG4gIGlmIChzdF9naWQgIT0gZ293bmVyKSB7XG4gICAgcnY9MVxuICAgIHBy
aW50ZigiJXM6IGZhaWxlZCB0ZXN0OiBleHBlY3RlZCBncm91cCBvd25lciBbJXNdLCBnb3Qg
WyVzXVxcbiIsIE1FLCBnb3duZXIsIHN0X2dpZCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRm
KCIlczogZ3JvdXAgb3duZXIgJXMgbG9va3MgT0tcXG4iLCBNRSwgc3RfZ2lkKTtcbiAgfVxu
ICAjIGZpZWxkIDcgaXMgdGhlIHNpemUgaW4gYnl0ZXNcbiAgaWYgKHN0X3NpemUgIT0gZmls
ZXNpemUpIHtcbiAgICBydj0xXG4gICAgcHJpbnRmKCIlczogZmFpbGVkIHRlc3Q6IGV4cGVj
dGVkIGZpbGUgc2l6ZSAlZCwgZ290ICVzXFxuIiwgTUUsIGZpbGVzaXplLCBzdF9zaXplKTtc
biAgfSBlbHNlIHtcbiAgICBwcmludGYoIiVzOiBmaWxlIHNpemUgJXMgbG9va3MgT0tcXG4i
LCBNRSwgc3Rfc2l6ZSk7XG4gIH1cbiAgIyBmaWVsZCA4IGlzIHRoZSBtb250aCBvZiB0aGUg
bXRpbWVcbiAgaWYgKHN0X210aW1lX21vbnRobmFtZSAhPSAiTWFyIikge1xuICAgIHJ2PTFc
biAgICBwcmludGYoIiVzOiBmYWlsZWQgdGVzdDogZXhwZWN0ZWQgbXRpbWUgbW9udGggTWFy
LCBnb3QgJXNcXG4iLCBNRSwgc3RfbXRpbWVfbW9udGhuYW1lKTtcbiAgfSBlbHNlIHtcbiAg
ICBwcmludGYoIiVzOiBtdGltZSBtb250aCAlcyBsb29rcyBPS1xcbiIsIE1FLCBzdF9tdGlt
ZV9tb250aG5hbWUpO1xuICB9XG4gICMgZmllbGQgOSBpcyB0aGUgbW9udGgtZGF5IG9mIHRo
ZSBtdGltZVxuICBpZiAoc3RfbXRpbWVfbW9udGhkYXkgIT0gMTQpIHtcbiAgICBydj0xXG4g
ICAgcHJpbnRmKCIlczogZmFpbGVkIHRlc3Q6IGV4cGVjdGVkIG10aW1lIG1vbnRoLWRheSAx
NCwgZ290ICVzXFxuIiwgTUUsIHN0X210aW1lX21vbnRoZGF5KTtcbiAgfSBlbHNlIHtcbiAg
ICBwcmludGYoIiVzOiBtdGltZSBtb250aC1kYXkgJXMgbG9va3MgT0tcXG4iLCBNRSwgc3Rf
bXRpbWVfbW9udGhkYXkpO1xuICB9XG4gICMgZmllbGQgMTAgaXMgdGhlIHllYXIgb2YgdGhl
IG10aW1lXG4gIGlmIChzdF9tdGltZV95ZWFyICE9IDE5OTIpIHtcbiAgICBydj0xXG4gICAg
cHJpbnRmKCIlczogZmFpbGVkIHRlc3Q6IGV4cGVjdGVkIG10aW1lIHllYXIgMTk5MiwgZ290
ICVzXFxuIiwgTUUsIHN0X210aW1lX3llYXIpO1xuICB9IGVsc2Uge1xuICAgIHByaW50Zigi
JXM6IG10aW1lIHllYXIgJXMgbG9va3MgT0tcXG4iLCBNRSwgc3RfbXRpbWVfeWVhcik7XG4g
IH1cbiAgIyBmaWVsZCAxMSBpcyB0aGUgZmlsZSBuYW1lXG4gIGlmIChmaWxlbmFtZV9nb3Qg
IT0gZmlsZW5hbWVfZXhwZWN0ZWQpIHtcbiAgICBydj0xXG4gICAgcHJpbnRmKCIlczogZmFp
bGVkIHRlc3Q6IGV4cGVjdGVkIGZpbGVuYW1lICVzLCBnb3QgJXNcXG4iLCBNRSwgZmlsZW5h
bWUsICQxMSk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRmKCIlczogZmlsZSBuYW1lICVzIGxv
b2tzIE9LXFxuIiwgTUUsICQxMSk7XG4gIH1cbn1cbkVORCB7XG4gICAgcHJpbnRmKCIlczog
RmluaXNoZWQgQVdLIHRlc3RzOiBleGl0aW5nIHdpdGggc3RhdHVzICVkXFxuIiwgTUUsIHJ2
KTtcbiAgICBleGl0IHJ2O1xufVxuJwpscy1mb3JtYXQtZmlsZS5zaDogaW5mbzogcmVjb3Jk
IDEgZmllbGQgIDEgY29udGFpbnMgNjA0MjcwOQpscy1mb3JtYXQtZmlsZS5zaDogaW5mbzog
cmVjb3JkIDEgZmllbGQgIDIgY29udGFpbnMgNApscy1mb3JtYXQtZmlsZS5zaDogaW5mbzog
cmVjb3JkIDEgZmllbGQgIDMgY29udGFpbnMgLXJ3LS0tLS0tLQpscy1mb3JtYXQtZmlsZS5z
aDogaW5mbzogcmVjb3JkIDEgZmllbGQgIDQgY29udGFpbnMgMQpscy1mb3JtYXQtZmlsZS5z
aDogaW5mbzogcmVjb3JkIDEgZmllbGQgIDUgY29udGFpbnMgYmVybnkKbHMtZm9ybWF0LWZp
bGUuc2g6IGluZm86IHJlY29yZCAxIGZpZWxkICA2IGNvbnRhaW5zIHVzZXJzCmxzLWZvcm1h
dC1maWxlLnNoOiBpbmZvOiByZWNvcmQgMSBmaWVsZCAgNyBjb250YWlucyA3NjUKbHMtZm9y
bWF0LWZpbGUuc2g6IGluZm86IHJlY29yZCAxIGZpZWxkICA4IGNvbnRhaW5zIE1hcgpscy1m
b3JtYXQtZmlsZS5zaDogaW5mbzogcmVjb3JkIDEgZmllbGQgIDkgY29udGFpbnMgMTQKbHMt
Zm9ybWF0LWZpbGUuc2g6IGluZm86IHJlY29yZCAxIGZpZWxkIDEwIGNvbnRhaW5zIDE5OTIK
bHMtZm9ybWF0LWZpbGUuc2g6IGluZm86IHJlY29yZCAxIGZpZWxkIDExIGNvbnRhaW5zIGxz
bWUKbHMtZm9ybWF0LWZpbGUuc2g6IGluZm86IGNoZWNraW5nIG91dHB1dCBvZiAtbHMgKHdo
aWNoIHdhcyBbICA2MDQyNzA5ICAgICAgNCAtcnctLS0tLS0tICAgMSBiZXJueSAgICB1c2Vy
cyAgICAgICAgIDc2NSBNYXIgMTQgIDE5OTIgbHNtZV0pCmxzLWZvcm1hdC1maWxlLnNoOiBi
bG9jayBjb3VudCA0IGxvb2tzIE9LCmxzLWZvcm1hdC1maWxlLnNoOiBsaW5rIGNvdW50IDEg
bG9va3MgT0sKbHMtZm9ybWF0LWZpbGUuc2g6IG93bmVyIGJlcm55IGxvb2tzIE9LCmxzLWZv
cm1hdC1maWxlLnNoOiBncm91cCBvd25lciB1c2VycyBsb29rcyBPSwpscy1mb3JtYXQtZmls
ZS5zaDogZmlsZSBzaXplIDc2NSBsb29rcyBPSwpscy1mb3JtYXQtZmlsZS5zaDogbXRpbWUg
bW9udGggTWFyIGxvb2tzIE9LCmxzLWZvcm1hdC1maWxlLnNoOiBtdGltZSBtb250aC1kYXkg
MTQgbG9va3MgT0sKbHMtZm9ybWF0LWZpbGUuc2g6IG10aW1lIHllYXIgMTk5MiBsb29rcyBP
Swpscy1mb3JtYXQtZmlsZS5zaDogZmlsZSBuYW1lIGxzbWUgbG9va3MgT0sKbHMtZm9ybWF0
LWZpbGUuc2g6IEZpbmlzaGVkIEFXSyB0ZXN0czogZXhpdGluZyB3aXRoIHN0YXR1cyAwCisg
cnY9MAorIGVjaG8gJ0F3ayBleGl0IHN0YXR1cyB3YXMgMCcKQXdrIGV4aXQgc3RhdHVzIHdh
cyAwCisgJ1snIDAgLW5lIDAgJ10nCisgcm0gLWYgLS0gcHJpbnRmLW91dHB1dC50eHQKKyBm
aW5kIGxzbWUgLXByaW50ZiAnJTlpICU2YiAlTSAlM24gJS04dSAlLThnICU4cyAlM1RiICUy
VGQgJTVUWSAlcFxuJworIGNvbXBhcmUgcHJpbnRmLW91dHB1dC50eHQgb3V0cHV0LnR4dAor
IGNvbXBhcmVfZGV2X251bGxfIHByaW50Zi1vdXRwdXQudHh0IG91dHB1dC50eHQKKyB0ZXN0
IDIgPSAyCisgdGVzdCB4cHJpbnRmLW91dHB1dC50eHQgPSB4L2Rldi9udWxsCisgdGVzdCB4
b3V0cHV0LnR4dCA9IHgvZGV2L251bGwKKyByZXR1cm4gMgorIGNhc2UgJD8gaW4KKyBjb21w
YXJlXyBwcmludGYtb3V0cHV0LnR4dCBvdXRwdXQudHh0CisgTENfQUxMPUMKKyBkaWZmIC11
IHByaW50Zi1vdXRwdXQudHh0IG91dHB1dC50eHQKLS0tIHByaW50Zi1vdXRwdXQudHh0CTIw
MjYtMDctMjIgMjM6NDk6NTQuODc5NDA4MjQ5ICswMjAwCisrKyBvdXRwdXQudHh0CTIwMjYt
MDctMjIgMjM6NDk6NTQuODY4NDA4MTAxICswMjAwCkBAIC0xICsxIEBACi0gIDYwNDI3MDkg
ICAgICA4IC1ydy0tLS0tLS0gICAxIGJlcm55ICAgIHVzZXJzICAgICAgICAgNzY1IE1hciAx
NCAgMTk5MiBsc21lCisgIDYwNDI3MDkgICAgICA0IC1ydy0tLS0tLS0gICAxIGJlcm55ICAg
IHVzZXJzICAgICAgICAgNzY1IE1hciAxNCAgMTk5MiBsc21lCisgZmFpbD0xCisgd2Fybl8g
J2xzLWZvcm1hdC1maWxlLnNoOiB0aGUgb3V0cHV0IG9mIHRoZSAtbHMgYWN0aW9uIHNlZW1z
IHRvIGJlIGluY29ycmVjdCcKKyBjYXNlICRJRlMgaW4KKyBwcmludGYgJyVzXG4nICdscy1m
b3JtYXQtZmlsZS5zaDogdGhlIG91dHB1dCBvZiB0aGUgLWxzIGFjdGlvbiBzZWVtcyB0byBi
ZSBpbmNvcnJlY3QnCmxzLWZvcm1hdC1maWxlLnNoOiB0aGUgb3V0cHV0IG9mIHRoZSAtbHMg
YWN0aW9uIHNlZW1zIHRvIGJlIGluY29ycmVjdAorIHRlc3QgOSA9IDIKKyBsb2NhbCAnYXJn
cz1scy1mb3JtYXQtZmlsZS5zaDogdGhlIG91dHB1dCBvZiB0aGUgLWxzIGFjdGlvbiBzZWVt
cyB0byBiZSBpbmNvcnJlY3QnCisgbG9jYWwgJ2ZpcnN0bGluZT1scy1mb3JtYXQtZmlsZS5z
aDogdGhlIG91dHB1dCBvZiB0aGUgLWxzIGFjdGlvbiBzZWVtcyB0byBiZSBpbmNvcnJlY3Qn
CisgcHJpbnRmICclc1xuJyAnbHMtZm9ybWF0LWZpbGUuc2g6IHRoZSBvdXRwdXQgb2YgdGhl
IC1scyBhY3Rpb24gc2VlbXMgdG8gYmUgaW5jb3JyZWN0JworIEV4aXQgMQorIHNldCArZQor
IGV4aXQgMQorIGV4aXQgMQorIHJlbW92ZV90bXBfCisgX19zdD0xCisgY2xlYW51cF8KKyA6
CisgdGVzdCAnJyA9IHllcworIGNkIC9ob21lL2Jlcm55L2ZpbmR1dGlscworIGNobW9kIC1S
IHUrcnd4IC9ob21lL2Jlcm55L2ZpbmR1dGlscy9ndC1scy1mb3JtYXQtZmlsZS5zaC5zR284
Cisgcm0gLXJmIC9ob21lL2Jlcm55L2ZpbmR1dGlscy9ndC1scy1mb3JtYXQtZmlsZS5zaC5z
R284CisgZXhpdCAxCkZBSUwgdGVzdHMvZmluZC9scy1mb3JtYXQtZmlsZS5zaCAoZXhpdCBz
dGF0dXM6IDEpCg==
--------------k2lbEQ9btZkvZaaIpFyVfhND--