[PATCH] Drop some reference specific code from typeset
Philippe Altherr <[email protected]> Sat, 25 Jul 2026 15:46:02 +0200
| Newsgroups | gmane.comp.shells.zsh.devel |
|---|---|
| Message-ID | <CAGdYchtY0byEXj87v68+7ajMR5oBTEnTy5FLq97E44qrDioCYg@mail.gmail.com> |
--0000000000007bcb2306576fb66c
Content-Type: multipart/alternative; boundary="0000000000007bcb2006576fb66a"
--0000000000007bcb2006576fb66a
Content-Type: text/plain; charset="UTF-8"
(this is the patch I mentioned in workers/55027
<https://zsh.org/workers/55027>)
The function bin_typeset contains code that runs only for references
<https://github.com/zsh-users/zsh/blob/c0fe1189905e6bd6ef227068478638cfb52b1255/Src/builtin.c#L3108-L3142>
that is more harmful than helpful. The patch below removes all of it.
The first part
<https://github.com/zsh-users/zsh/blob/c0fe1189905e6bd6ef227068478638cfb52b1255/Src/builtin.c#L3109-L3117>
prevents
the creation of references to placeholder references that are flagged with
PM_SPECIAL. That restriction makes no sense to me. There are no predefined
special references. The only predefined references are in the ksh93 module
and none are flagged as special. It turns out that private parameters are
flagged with PM_SPECIAL. Thus, "() { private -n ref1; typeset -n ref2=ref1
}" fails because of this restriction. However, the restriction is easily
worked around by replacing "typeset -n ref2=ref1" with "typeset -n ref2;
ref2=ref1". The definition of "ref2" is also happily accepted if "ref1" is
already initialized. I fail to see what's the point of the restriction.
Once removed, references to private references work as expected when
accessed from within the same scope as the private reference. They don't
work when accessed from a nested scope (expansions return an empty string
and assignments fail with an error), which I think is what is expected
given that private parameters are only visible and usable from within their
scope.
The second part
<https://github.com/zsh-users/zsh/blob/c0fe1189905e6bd6ef227068478638cfb52b1255/Src/builtin.c#L3118-L3141>
unsets
under some conditions any existing parameter with the same name as the
parameter being defined. This has the consequence that for reference
definitions, single_typeset is called with pm=NULL, which is different from
what happens with all other types of parameters in the same conditions.
This is why "typeset -n" fails to detect that an autoloaded or special
parameter is being erased or hidden. It's also why "typeset -n -r ref=foo;
typeset -n +r ref=bar" fails to update "ref" and instead assigns "foo" with
"bar".
The patch also fixes four assignments to usepm that could inadvertently set
it to 2, which has a special meaning.
There are only two existing tests (in V10private.zest) affected by the
removal of the first part. The other changes in V10private.zest are
cleanups and additions.
There is only one existing test (in K01nameref.ztst) affected by the
removal of the second part (because of the "typeset -n -r ref=foo; typeset
-n +r ref=bar" issue). The tests affected in B02typeset.zest are new ones
added in this patch to the issues described above.
For more details, I highly recommend looking at the successive steps on
GitHub:
- Drop some reference specific code from typeset
<https://github.com/zsh-users/zsh/compare/master...paltherr:zsh:less-reference-specific-typeset-code>
Philippe
--0000000000007bcb2006576fb66a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">(this is the patch I mentioned in=C2=A0<a href=3D"https://=
zsh.org/workers/55027">workers/55027</a>)<br><div><br></div><div>The functi=
on bin_typeset contains <a href=3D"https://github.com/zsh-users/zsh/blob/c0=
fe1189905e6bd6ef227068478638cfb52b1255/Src/builtin.c#L3108-L3142">code that=
runs only for references</a> that is more harmful than helpful. The patch =
below removes all of it.</div><div><br></div><div>The<a href=3D"https://git=
hub.com/zsh-users/zsh/blob/c0fe1189905e6bd6ef227068478638cfb52b1255/Src/bui=
ltin.c#L3109-L3117"> first part</a>=C2=A0prevents the creation=C2=A0of refe=
rences to placeholder references that are flagged with PM_SPECIAL. That res=
triction makes no sense to me.=C2=A0<span style=3D"background-color:transpa=
rent">There are no predefined special references. The only predefined refer=
ences are in the ksh93 module and none are flagged as special. It turns out=
that private parameters are flagged with PM_SPECIAL. Thus, "</span><s=
pan style=3D"background-color:transparent">() { private -n ref1; typeset -n=
ref2=3Dref1 }" fails because of this=C2=A0</span>restriction<span sty=
le=3D"background-color:transparent">. However, the restriction is easily wo=
rked around by replacing "</span><span style=3D"background-color:trans=
parent">typeset -n ref2=3Dref1" with "</span><span style=3D"backg=
round-color:transparent">typeset -n ref2; ref2=3Dref1". The definition=
of "ref2" is also happily accepted if "ref1" is alread=
y initialized. I fail to see what's the point of the restriction. Once =
removed, references to private references work as expected when accessed fr=
om within the same scope as the private reference. They don't work when=
accessed from a nested scope (expansions=C2=A0return an empty string and a=
ssignments fail with an error), which I think is what is expected given tha=
t private parameters are only visible and usable from within their scope.</=
span></div><div><br></div><div>The <a href=3D"https://github.com/zsh-users/=
zsh/blob/c0fe1189905e6bd6ef227068478638cfb52b1255/Src/builtin.c#L3118-L3141=
">second part</a>=C2=A0unsets under some conditions any existing parameter =
with the same name as the parameter being defined. This has the consequence=
that for reference definitions, single_typeset is called with pm=3DNULL, w=
hich is different from what happens with all other types of parameters in t=
he same conditions. This is why "typeset -n" fails to detect that=
an autoloaded or special parameter is being erased or hidden. It's als=
o why "typeset -n -r ref=3Dfoo; typeset -n +r ref=3Dbar" fails to=
update "ref" and instead assigns "foo" with "bar&=
quot;.</div><div><br></div><div>The patch also fixes four assignments to us=
epm=C2=A0that could inadvertently=C2=A0set it to 2, which has a special mea=
ning.</div><div><br></div><div>There are only two existing tests (in=C2=A0<=
span style=3D"background-color:transparent">V10private.zest) affected by th=
e removal of the first part. The other changes in=C2=A0</span><span style=
=3D"background-color:transparent">V10private.zest=C2=A0are cleanups and add=
itions.</span></div><div><br></div><div>There is only one existing test (in=
K01nameref.ztst) affected by the removal of the second part (because of th=
e "typeset -n -r ref=3Dfoo; typeset -n +r ref=3Dbar" issue). The =
tests affected in B02typeset.zest=C2=A0are new ones added in this patch to =
the issues described above.</div><div><br></div><div>For more details, I hi=
ghly recommend looking at the successive steps on GitHub:</div><div><br></d=
iv><div>-=C2=A0<a href=3D"https://github.com/zsh-users/zsh/compare/master..=
.paltherr:zsh:less-reference-specific-typeset-code">Drop some reference spe=
cific code from typeset</a></div><div><br></div><div>Philippe</div><div><br=
></div></div>
--0000000000007bcb2006576fb66a--
--0000000000007bcb2306576fb66c
Content-Type: text/plain; charset="US-ASCII"; name="less-reference-specific-typeset-code.txt"
Content-Disposition: attachment;
filename="less-reference-specific-typeset-code.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_ms0csjbk0>
X-Attachment-Id: f_ms0csjbk0
ZGlmZiAtLWdpdCBhL1NyYy9idWlsdGluLmMgYi9TcmMvYnVpbHRpbi5jCmluZGV4IDJlM2U1NzUy
YS4uN2I4OGY2YzJmIDEwMDY0NAotLS0gYS9TcmMvYnVpbHRpbi5jCisrKyBiL1NyYy9idWlsdGlu
LmMKQEAgLTIxMDQsMjIgKzIxMDQsMjIgQEAgdHlwZXNldF9zaW5nbGUoY2hhciAqY25hbWUsIGNo
YXIgKnBuYW1lLCBQYXJhbSBwbSwgaW50IGZ1bmMsCiAJfQogCXRjID0gMTsKIAlpZiAoT1BUX01J
TlVTKG9wcywncCcpKQotCSAgICB1c2VwbSA9IChvbiAmIHBtLT5ub2RlLmZsYWdzKTsKKwkgICAg
dXNlcG0gPSAhIShvbiAmIHBtLT5ub2RlLmZsYWdzKTsKIAllbHNlIGlmIChPUFRfUExVUyhvcHMs
J3AnKSkKLQkgICAgdXNlcG0gPSAob2ZmICYgcG0tPm5vZGUuZmxhZ3MpOworCSAgICB1c2VwbSA9
ICEhKG9mZiAmIHBtLT5ub2RlLmZsYWdzKTsKIAllbHNlCiAJICAgIHVzZXBtID0gMDsKICAgICB9
CiAgICAgZWxzZSBpZiAodXNlcG0gfHwgbmV3c3BlY2lhbCAhPSBOU19OT05FKSB7CiAJaW50IGNo
ZmxhZ3MgPSAoKG9mZiAmIHBtLT5ub2RlLmZsYWdzKSB8IChvbiAmIH5wbS0+bm9kZS5mbGFncykp
ICYKIAkgICAgKFBNX0lOVEVHRVJ8UE1fRUZMT0FUfFBNX0ZGTE9BVHxQTV9IQVNIRUR8Ci0JICAg
ICBQTV9BUlJBWXxQTV9USUVEfFBNX0FVVE9MT0FEKTsKKwkgICAgIFBNX0FSUkFZfFBNX05BTUVS
RUZ8UE1fVElFRHxQTV9BVVRPTE9BRCk7CiAJLyoga2VlcCB0aGUgcGFyYW1ldGVyIGlmIGp1c3Qg
c3dpdGNoaW5nIGJldHdlZW4gZmxvYXRpbmcgdHlwZXMgKi8KIAlpZiAoKHRjID0gY2hmbGFncyAm
JiBjaGZsYWdzICE9IChQTV9FRkxPQVR8UE1fRkZMT0FUKSkpIHsKIAkgICAgaWYgKE9QVF9NSU5V
UyhvcHMsJ3AnKSkKLQkJdXNlcG0gPSAob24gJiBwbS0+bm9kZS5mbGFncyk7CisJCXVzZXBtID0g
ISEob24gJiBwbS0+bm9kZS5mbGFncyk7CiAJICAgIGVsc2UgaWYgKE9QVF9QTFVTKG9wcywncCcp
KQotCQl1c2VwbSA9IChvZmYgJiBwbS0+bm9kZS5mbGFncyk7CisJCXVzZXBtID0gISEob2ZmICYg
cG0tPm5vZGUuZmxhZ3MpOwogCSAgICBlbHNlCiAJCXVzZXBtID0gMDsKIAl9CkBAIC0yMjIwLDYg
KzIyMjAsNyBAQCB0eXBlc2V0X3NpbmdsZShjaGFyICpjbmFtZSwgY2hhciAqcG5hbWUsIFBhcmFt
IHBtLCBpbnQgZnVuYywKICAgICAgKiAgIGlpLiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbG9jYWwg
cGFyYW1ldGVyCiAgICAgICovCiAgICAgaWYgKHVzZXBtKSB7CisJaW50IGZsYWdzID0gKG9uICYg
UE1fTkFNRVJFRikgPyBBU1NQTV9OT05BTUVSRUYgOiAwOwogCWlmIChPUFRfTUlOVVMob3BzLCdw
JykgJiYgb24gJiYKIAkgICAgISgob24gJiBwbS0+bm9kZS5mbGFncykgfHwgKChvbiAmIFBNX0xP
Q0FMKSAmJiBwbS0+bGV2ZWwpKSkKIAkgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE0LDEwICsyMzE1
LDEwIEBAIHR5cGVzZXRfc2luZ2xlKGNoYXIgKmNuYW1lLCBjaGFyICpwbmFtZSwgUGFyYW0gcG0s
IGludCBmdW5jLAogCQkgICAgRFBVVFMoIXRkcCwgIkJVRzogbm8gam9pbiBjaGFyYWN0ZXIgdG8g
dXBkYXRlIik7CiAJICAgIH0KIAkgICAgaWYgKGFzZy0+dmFsdWUuc2NhbGFyICYmCi0JCSEocG0g
PSBhc3NpZ25zcGFyYW0ocG5hbWUsIHp0cmR1cChhc2ctPnZhbHVlLnNjYWxhciksIDApKSkKKwkJ
IShwbSA9IGFzc2lnbnNwYXJhbShwbmFtZSwgenRyZHVwKGFzZy0+dmFsdWUuc2NhbGFyKSwgZmxh
Z3MpKSkKIAkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIGlmIChhc2ctPmZsYWdzICYgQVNHX0FSUkFZ
KSB7Ci0JICAgIGludCBmbGFncyA9IChhc2ctPmZsYWdzICYgQVNHX0tFWV9WQUxVRSkgPyBBU1NQ
TV9LRVlfVkFMVUUgOiAwOworCSAgICBmbGFncyB8PSAoYXNnLT5mbGFncyAmIEFTR19LRVlfVkFM
VUUpID8gQVNTUE1fS0VZX1ZBTFVFIDogMDsKIAkgICAgaWYgKCEocG0gPSBhc3NpZ25hcGFyYW0o
cG5hbWUsIGFzZy0+dmFsdWUuYXJyYXkgPwogCQkJCSB6bGlua2xpc3QyYXJyYXkoYXNnLT52YWx1
ZS5hcnJheSwgMSkgOgogCQkJCSBta2FycmF5KE5VTEwpLCBmbGFncykpKQpAQCAtMjM0OCw2ICsy
MzQ5LDkgQEAgdHlwZXNldF9zaW5nbGUoY2hhciAqY25hbWUsIGNoYXIgKnBuYW1lLCBQYXJhbSBw
bSwgaW50IGZ1bmMsCiAJb24gfD0gfm9mZiAmIChQTV9SRUFET05MWXxQTV9FWFBPUlRFRCkgJiBw
bS0+bm9kZS5mbGFnczsKIAkvKiAuLi5idXQgdHVybiBvZmYgZXhpc3RpbmcgcmVhZG9ubHkgc28g
d2UgY2FuIGRlbGV0ZSBpdCAqLwogCXBtLT5ub2RlLmZsYWdzICY9IH5QTV9SRUFET05MWTsKKwkv
KiBIYWNrIHRvIGZvcmNlIGdldHNwYXJhbSBiZWxvdyB0byB1c2UgdGhlIHJlZmVyZW5jZSdzIG93
biB2YWx1ZSAqLworCWlmIChvZmYgJiBQTV9OQU1FUkVGKQorCSAgICBwbS0+bm9kZS5mbGFncyAm
PSB+UE1fTkFNRVJFRjsKIAkvKgogCSAqIElmIHdlJ3JlIGp1c3QgY2hhbmdpbmcgdGhlIHR5cGUs
IHdlIHNob3VsZCBrZWVwIHRoZQogCSAqIHZhcmlhYmxlIGF0IHRoZSBjdXJyZW50IGxldmVsIG9m
IGxvY2FsbmVzcy4KQEAgLTIzNjEsNiArMjM2NSwxMiBAQCB0eXBlc2V0X3NpbmdsZShjaGFyICpj
bmFtZSwgY2hhciAqcG5hbWUsIFBhcmFtIHBtLCBpbnQgZnVuYywKIAkgKiBpbXBsaWNhdGlvbnMu
KQogCSAqLwogCWlmICghQVNHX1ZBTFVFUChhc2cpICYmICEoKHBtLT5ub2RlLmZsYWdzfG9uKSAm
IChQTV9BUlJBWXxQTV9IQVNIRUQpKSkgeworCSAgICAvKgorCSAgICAgKiBSZWx5aW5nIG9uIHBu
YW1lIGlzIGZ1bmRhbWVudGFsbHkgd3JvbmcuIElmIHRoZSBvcmlnaW5hbCBwbSB3YXMKKwkgICAg
ICogYSByZWZlcmVuY2UsIHRoZSByZXNvbHZlZCBwbmFtZSBtYXkgcmVmZXIgdG8gYSBoaWRkZW4g
cGFyYW1ldGVyLgorCSAgICAgKiBJbiB0aGF0IGNhc2UsIGdldHNwYXJhbSB3cm9uZ2x5IHJldHVy
bnMgdGhlIHZhbHVlIG9mIHRoZSBoaWRpbmcKKwkgICAgICogcGFyYW1ldGVyLgorCSAgICAgKi8K
IAkgICAgYXNnLT52YWx1ZS5zY2FsYXIgPSBkdXBzdHJpbmcoZ2V0c3BhcmFtKHBuYW1lKSk7CiAJ
ICAgIGFzZy0+ZmxhZ3MgPSAwOwogCX0KQEAgLTMxMDUsNDIgKzMxMTUsNiBAQCBiaW5fdHlwZXNl
dChjaGFyICpuYW1lLCBjaGFyICoqYXJndiwgTGlua0xpc3QgYXNzaWducywgT3B0aW9ucyBvcHMs
IGludCBmdW5jKQogCSAgICBjb250aW51ZTsKIAl9CiAKLQlpZiAob24gJiBQTV9OQU1FUkVGKSB7
Ci0JICAgIGlmIChhc2ctPnZhbHVlLnNjYWxhciAmJgotCQkoKHBtID0gKFBhcmFtKXBhcmFtdGFi
LT5nZXRub2RlKHBhcmFtdGFiLCBhc2ctPnZhbHVlLnNjYWxhcikpICYmCi0JCSAocG0tPm5vZGUu
ZmxhZ3MgJiBQTV9OQU1FUkVGKSkpIHsKLQkJaWYgKHBtLT5ub2RlLmZsYWdzICYgUE1fU1BFQ0lB
TCkgewotCQkgICAgendhcm5uYW0obmFtZSwgIiVzOiBpbnZhbGlkIHJlZmVyZW5jZSIsIHBtLT5u
b2RlLm5hbSk7Ci0JCSAgICByZXR1cm52YWwgPSAxOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkg
ICAgfQotCSAgICBpZiAoaG4pIHsKLQkJLyogbmFtZXJlZnMgYWx3YXlzIHN0YXJ0IG92ZXIgZnJl
c2ggKi8KLQkJaWYgKCgoUGFyYW0paG4pLT5sZXZlbCA+PSBsb2NhbGxldmVsIHx8Ci0JCSAgICAo
IShvbiAmIFBNX0xPQ0FMKSAmJiAoKFBhcmFtKWhuKS0+bGV2ZWwgPCBsb2NhbGxldmVsKSkgewot
CQkgICAgUGFyYW0gb2xkcG0gPSAoUGFyYW0paG47Ci0JCSAgICBpZiAoIWFzZy0+dmFsdWUuc2Nh
bGFyICYmCi0JCQlQTV9UWVBFKG9sZHBtLT5ub2RlLmZsYWdzKSA9PSBQTV9TQ0FMQVIgJiYKLQkJ
CW9sZHBtLT51LnN0cikKLQkJCWFzZy0+dmFsdWUuc2NhbGFyID0gZHVwc3RyaW5nKG9sZHBtLT51
LnN0cik7Ci0JCSAgICAvKiBEZWZlciByZWFkLW9ubHkgZXJyb3IgdG8gdHlwZXNldF9zaW5nbGUo
KSAqLwotCQkgICAgaWYgKCEoaG4tPmZsYWdzICYgUE1fUkVBRE9OTFkpKSB7Ci0JCQl1bnNldHBh
cmFtX3BtKG9sZHBtLCAwLCAxKTsKLQkJCWhuID0gTlVMTDsKLQkJICAgIH0KLQkJfQotCQkvKiBQ
YXNzaW5nIGEgTlVMTCBwbSB0byB0eXBlc2V0X3NpbmdsZSgpIG1ha2VzIHRoZQotCQkgKiBuYW1l
cmVmIHJlYWQtb25seSBiZWZvcmUgYXNzaWdubWVudCwgd2hpY2ggYnJlYWtzCi0JCSAqICAgdHlw
ZXNldCAtcm4gcmVmPXZhcgotCQkgKiBzbyB0aGlzIGlzIHNwZWNpYWwtY2FzZWQgdG8gcGVybWl0
IHRoYXQgYWN0aW9uCi0JCSAqIGxpa2UgYXNzaWduLWF0LWNyZWF0ZSBmb3Igb3RoZXIgcGFyYW1l
dGVyIHR5cGVzLgotCQkgKi8KLQkJaWYgKGhuICYmICEoaG4tPmZsYWdzICYgUE1fUkVBRE9OTFkp
KQotCQkgICAgaG4gPSBOVUxMOwotCSAgICB9Ci0JfQotCiAJaWYgKCF0eXBlc2V0X3NpbmdsZShu
YW1lLCBhc2ctPm5hbWUsIChQYXJhbSlobiwKIAkJCSAgICBmdW5jLCBvbiwgb2ZmLCByb2ZmLCBh
c2csIE5VTEwsCiAJCQkgICAgb3BzLCAwKSkKZGlmZiAtLWdpdCBhL1NyYy9wYXJhbXMuYyBiL1Ny
Yy9wYXJhbXMuYwppbmRleCA3MTZkZDY2YzMuLjFhNDYzOGI2OSAxMDA2NDQKLS0tIGEvU3JjL3Bh
cmFtcy5jCisrKyBiL1NyYy9wYXJhbXMuYwpAQCAtMzE0Myw2ICszMTQzLDcgQEAgYXNzaWduc3Bh
cmFtKGNoYXIgKnMsIGNoYXIgKnZhbCwgaW50IGZsYWdzKQogICAgIHNpemVfdCBsdmFyOwogICAg
IG1udW1iZXIgbGhzLCByaHM7CiAgICAgaW50IHNzdGFydCwgY3JlYXRlZCA9IDA7CisgICAgaW50
IHNjYW5mbGFncyA9IGZsYWdzICYgQVNTUE1fTk9OQU1FUkVGID8gU0NBTlBNX05PTkFNRVJFRiA6
IDA7CiAKICAgICBpZiAoIWlzaWRlbnQocykpIHsKIAl6ZXJyKCJub3QgYW4gaWRlbnRpZmllcjog
JXMiLCBzKTsKQEAgLTMxNTMsNyArMzE1NCw3IEBAIGFzc2lnbnNwYXJhbShjaGFyICpzLCBjaGFy
ICp2YWwsIGludCBmbGFncykKICAgICBxdWV1ZV9zaWduYWxzKCk7CiAgICAgaWYgKChzcyA9IHN0
cmNocihzLCAnWycpKSkgewogCSpzcyA9ICdcMCc7Ci0JaWYgKCEodiA9IGdldHZhbHVlKCZ2YnVm
LCAmcywgMSkpKSB7CisJaWYgKCEodiA9IGZldGNodmFsdWUoJnZidWYsICZzLCAxLCBzY2FuZmxh
Z3MpKSkgewogCSAgICBjcmVhdGVwYXJhbSh0LCBQTV9BUlJBWSk7CiAJICAgIGNyZWF0ZWQgPSAx
OwogCX0gZWxzZSB7CkBAIC0zMTc0LDcgKzMxNzUsNyBAQCBhc3NpZ25zcGFyYW0oY2hhciAqcywg
Y2hhciAqdmFsLCBpbnQgZmxhZ3MpCiAJKnNzID0gJ1snOwogCXYgPSBOVUxMOwogICAgIH0gZWxz
ZSB7Ci0JaWYgKCEodiA9IGdldHZhbHVlKCZ2YnVmLCAmcywgMSkpKSB7CisJaWYgKCEodiA9IGZl
dGNodmFsdWUoJnZidWYsICZzLCAxLCBzY2FuZmxhZ3MpKSkgewogCSAgICBjcmVhdGVwYXJhbSh0
LCBQTV9TQ0FMQVIpOwogCSAgICBjcmVhdGVkID0gMTsKIAl9IGVsc2UgaWYgKCgoKHYtPnBtLT5u
b2RlLmZsYWdzICYgUE1fQVJSQVkpICYmCkBAIC0zMTkyLDcgKzMxOTMsNyBAQCBhc3NpZ25zcGFy
YW0oY2hhciAqcywgY2hhciAqdmFsLCBpbnQgZmxhZ3MpCiAJICAgIHYgPSBOVUxMOwogCX0KICAg
ICB9Ci0gICAgaWYgKCF2ICYmICEodiA9IGdldHZhbHVlKCZ2YnVmLCAmdCwgMSkpKSB7CisgICAg
aWYgKCF2ICYmICEodiA9IGZldGNodmFsdWUoJnZidWYsICZ0LCAxLCBzY2FuZmxhZ3MpKSkgewog
CXpzZnJlZSh2YWwpOwogCXVucXVldWVfc2lnbmFscygpOwogCS8qIGVycmZsYWcgfD0gRVJSRkxB
R19FUlJPUjsgKi8KQEAgLTMzMDUsNiArMzMwNiw3IEBAIGFzc2lnbmFwYXJhbShjaGFyICpzLCBj
aGFyICoqdmFsLCBpbnQgZmxhZ3MpCiAgICAgY2hhciAqc3M7CiAgICAgaW50IGNyZWF0ZWQgPSAw
OwogICAgIGludCBtYXlfd2Fybl9hYm91dF9uZXN0ZWRfdmFycyA9IDE7CisgICAgaW50IHNjYW5m
bGFncyA9IGZsYWdzICYgQVNTUE1fTk9OQU1FUkVGID8gU0NBTlBNX05PTkFNRVJFRiA6IDA7CiAK
ICAgICBpZiAoIWlzaWRlbnQocykpIHsKIAl6ZXJyKCJub3QgYW4gaWRlbnRpZmllcjogJXMiLCBz
KTsKQEAgLTMzMTUsNyArMzMxNyw3IEBAIGFzc2lnbmFwYXJhbShjaGFyICpzLCBjaGFyICoqdmFs
LCBpbnQgZmxhZ3MpCiAgICAgcXVldWVfc2lnbmFscygpOwogICAgIGlmICgoc3MgPSBzdHJjaHIo
cywgJ1snKSkpIHsKIAkqc3MgPSAnXDAnOwotCWlmICghKHYgPSBnZXR2YWx1ZSgmdmJ1ZiwgJnMs
IDEpKSkgeworCWlmICghKHYgPSBmZXRjaHZhbHVlKCZ2YnVmLCAmcywgMSwgc2NhbmZsYWdzKSkp
IHsKIAkgICAgY3JlYXRlcGFyYW0odCwgUE1fQVJSQVkpOwogCSAgICBjcmVhdGVkID0gMTsKIAl9
IGVsc2UgewpAQCAtMzMzMiw3ICszMzM0LDcgQEAgYXNzaWduYXBhcmFtKGNoYXIgKnMsIGNoYXIg
Kip2YWwsIGludCBmbGFncykKIAl9CiAJdiA9IE5VTEw7CiAgICAgfSBlbHNlIHsKLQlpZiAoISh2
ID0gZmV0Y2h2YWx1ZSgmdmJ1ZiwgJnMsIDEsIFNDQU5QTV9BU1NJR05JTkcpKSkgeworCWlmICgh
KHYgPSBmZXRjaHZhbHVlKCZ2YnVmLCAmcywgMSwgc2NhbmZsYWdzIHwgU0NBTlBNX0FTU0lHTklO
RykpKSB7CiAJICAgIGNyZWF0ZXBhcmFtKHQsIFBNX0FSUkFZKTsKIAkgICAgY3JlYXRlZCA9IDE7
CiAJfSBlbHNlIGlmICh2LT5wbS0+bm9kZS5mbGFncyAmIFBNX05BTUVSRUYpIHsKQEAgLTMzNjMs
NyArMzM2NSw3IEBAIGFzc2lnbmFwYXJhbShjaGFyICpzLCBjaGFyICoqdmFsLCBpbnQgZmxhZ3Mp
CiAJfQogICAgIH0KICAgICBpZiAoIXYpCi0JaWYgKCEodiA9IGZldGNodmFsdWUoJnZidWYsICZ0
LCAxLCBTQ0FOUE1fQVNTSUdOSU5HKSkpIHsKKwlpZiAoISh2ID0gZmV0Y2h2YWx1ZSgmdmJ1Ziwg
JnQsIDEsIHNjYW5mbGFncyB8IFNDQU5QTV9BU1NJR05JTkcpKSkgewogCSAgICB1bnF1ZXVlX3Np
Z25hbHMoKTsKIAkgICAgZnJlZWFycmF5KHZhbCk7CiAJICAgIC8qIGVycmZsYWcgfD0gRVJSRkxB
R19FUlJPUjsgKi8KZGlmZiAtLWdpdCBhL1NyYy96c2guaCBiL1NyYy96c2guaAppbmRleCA1YTk4
OWZmNDcuLmQ0NTQwM2UwYiAxMDA2NDQKLS0tIGEvU3JjL3pzaC5oCisrKyBiL1NyYy96c2guaApA
QCAtMjE0MSw3ICsyMTQxLDkgQEAgZW51bSB7CiAgICAgICogVGhpcyBpcyBub3JtYWwgZm9yIGFz
c29jaWF0aXZlIGFycmF5cyBidXQgdmFyaWFudCBiZWhhdmlvdXIgZm9yCiAgICAgICogbm9ybWFs
IGFycmF5cy4KICAgICAgKi8KLSAgICBBU1NQTV9LRVlfVkFMVUUgPSAxIDw8IDQKKyAgICBBU1NQ
TV9LRVlfVkFMVUUgPSAxIDw8IDQsCisgICAgLyogTmFtZWQgcmVmZXJlbmNlcyBhcmUgbm90IGZv
bGxvd2VkICovCisgICAgQVNTUE1fTk9OQU1FUkVGID0gMSA8PCA1CiB9OwogCiAvKiBub2RlIGZv
ciBuYW1lZCBkaXJlY3RvcnkgaGFzaCB0YWJsZSAobmFtZWRkaXJ0YWIpICovCmRpZmYgLS1naXQg
YS9UZXN0L0IwMnR5cGVzZXQuenRzdCBiL1Rlc3QvQjAydHlwZXNldC56dHN0CmluZGV4IGZlOWVi
NTVlYi4uNGM3ODY0ODkzIDEwMDY0NAotLS0gYS9UZXN0L0IwMnR5cGVzZXQuenRzdAorKysgYi9U
ZXN0L0IwMnR5cGVzZXQuenRzdApAQCAtMTE5NCw2ICsxMTk0LDk5IEBAIEY6VGhpcyBpcyBhIGJ1
ZywgdGhlIG5vbiAtaCB2YXJpYWJsZSBzaG91bGQgbm90IGhpZGUgdGhlIGF1dG9sb2FkIHZhcmlh
YmxlCiA+ej0KID52PQogCisgem1vZGxvYWQgLXUgenNoL3JhbmRvbQorICgpIHsgeyB0eXBlc2V0
IC1nIC1pIFNSQU5ET00gMj4mMSB9IGFsd2F5cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfQorICgp
IHsgeyB0eXBlc2V0IC1nIC1hIFNSQU5ET00gMj4mMSB9IGFsd2F5cyB7IFRSWV9CTE9DS19FUlJP
Uj0wIH0gfQorICgpIHsgeyB0eXBlc2V0IC1nIC1uIFNSQU5ET00gMj4mMSB9IGFsd2F5cyB7IFRS
WV9CTE9DS19FUlJPUj0wIH0gfQorIGVjaG8gej0keyhNKSR7KGYpJHsgem1vZGxvYWQgLWFwfX06
IypTUkFORE9NKn0KKzA6R2xvYmFsIHBhcmFtZXRlciBjYW4ndCBjaGFuZ2UgdHlwZSBvZiBhdXRv
bG9hZGVkIHBhcmFtZXRlcgorPihhbm9uKTp0eXBlc2V0OiBTUkFORE9NOiBjYW4ndCBjaGFuZ2Ug
dHlwZSBvZiBhdXRvbG9hZGVkIHBhcmFtZXRlcgorPihhbm9uKTp0eXBlc2V0OiBTUkFORE9NOiBj
YW4ndCBjaGFuZ2UgdHlwZSBvZiBhdXRvbG9hZGVkIHBhcmFtZXRlcgorPihhbm9uKTp0eXBlc2V0
OiBTUkFORE9NOiBjYW4ndCBjaGFuZ2UgdHlwZSBvZiBhdXRvbG9hZGVkIHBhcmFtZXRlcgorPno9
U1JBTkRPTSAoenNoL3JhbmRvbSkKKworIHptb2Rsb2FkIC11IHpzaC9yYW5kb20KKyAoKSB7IHsg
dHlwZXNldCAgICBTUkFORE9NIDI+JjEgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJST1I9MCB9IH0K
KyAoKSB7IHsgdHlwZXNldCAtaSBTUkFORE9NIDI+JjEgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJS
T1I9MCB9IH0KKyAoKSB7IHsgdHlwZXNldCAtYSBTUkFORE9NIDI+JjEgfSBhbHdheXMgeyBUUllf
QkxPQ0tfRVJST1I9MCB9IH0KKyAoKSB7IHsgdHlwZXNldCAtbiBTUkFORE9NIDI+JjEgfSBhbHdh
eXMgeyBUUllfQkxPQ0tfRVJST1I9MCB9IH0KKyBlY2hvIHo9JHsoTSkkeyhmKSR7IHptb2Rsb2Fk
IC1hcH19OiMqU1JBTkRPTSp9CiswOkxvY2FsIG5vbiAtaCBwYXJhbWV0ZXIgY2FuIGhpZGUgYXV0
b2xvYWRlZCBwYXJhbWV0ZXIKKz56PVNSQU5ET00gKHpzaC9yYW5kb20pCisKKyAoKSB7IHsgdHlw
ZXNldCAtZyAraSBFVUlEIDI+JjEgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJST1I9MCB9IH0KKyAo
KSB7IHsgdHlwZXNldCAtZyAtaSBIT01FIDI+JjEgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJST1I9
MCB9IH0KKyAoKSB7IHsgdHlwZXNldCAtZyAtYSBIT01FIDI+JjEgfSBhbHdheXMgeyBUUllfQkxP
Q0tfRVJST1I9MCB9IH0KKyAoICgpIHsgeyB0eXBlc2V0IC1nIC1uIEhPTUUgMj4mMSB9IGFsd2F5
cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfSApCisgdHlwZXNldCAtcCBFVUlEIEhPTUUKKzBxOkds
b2JhbCBwYXJhbWV0ZXIgY2FuJ3QgY2hhbmdlIHR5cGUgb2Ygc3BlY2lhbCBwYXJhbWV0ZXIKKz4o
YW5vbik6dHlwZXNldDogRVVJRDogY2FuJ3QgY2hhbmdlIHR5cGUgb2YgYSBzcGVjaWFsIHBhcmFt
ZXRlcgorPihhbm9uKTp0eXBlc2V0OiBIT01FOiBjYW4ndCBjaGFuZ2UgdHlwZSBvZiBhIHNwZWNp
YWwgcGFyYW1ldGVyCis+KGFub24pOnR5cGVzZXQ6IEhPTUU6IGNhbid0IGNoYW5nZSB0eXBlIG9m
IGEgc3BlY2lhbCBwYXJhbWV0ZXIKKz4oYW5vbik6dHlwZXNldDogSE9NRTogY2FuJ3QgY2hhbmdl
IHR5cGUgb2YgYSBzcGVjaWFsIHBhcmFtZXRlcgorPnR5cGVzZXQgLWcgLWkxMCBFVUlEPSRFVUlE
Cis+ZXhwb3J0IEhPTUU9JEhPTUUKKworICgpIHsgeyB0eXBlc2V0ICtpIEVVSUQgMj4mMSB9IGFs
d2F5cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfQorICgpIHsgeyB0eXBlc2V0IC1pIEhPTUUgMj4m
MSB9IGFsd2F5cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfQorICgpIHsgeyB0eXBlc2V0IC1hIEhP
TUUgMj4mMSB9IGFsd2F5cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfQorICgpIHsgeyB0eXBlc2V0
IC1uIEhPTUUgMj4mMSB9IGFsd2F5cyB7IFRSWV9CTE9DS19FUlJPUj0wIH0gfQorIHR5cGVzZXQg
LXAgRVVJRCBIT01FCiswcTpMb2NhbCBub24gLWggcGFyYW1ldGVyIGNhbid0IGhpZGUgc3BlY2lh
bCBwYXJhbWV0ZXIKKz4oYW5vbik6dHlwZXNldDogRVVJRDogY2FuJ3QgY2hhbmdlIHR5cGUgb2Yg
YSBzcGVjaWFsIHBhcmFtZXRlcgorPihhbm9uKTp0eXBlc2V0OiBIT01FOiBjYW4ndCBjaGFuZ2Ug
dHlwZSBvZiBhIHNwZWNpYWwgcGFyYW1ldGVyCis+KGFub24pOnR5cGVzZXQ6IEhPTUU6IGNhbid0
IGNoYW5nZSB0eXBlIG9mIGEgc3BlY2lhbCBwYXJhbWV0ZXIKKz4oYW5vbik6dHlwZXNldDogSE9N
RTogY2FuJ3QgY2hhbmdlIHR5cGUgb2YgYSBzcGVjaWFsIHBhcmFtZXRlcgorPnR5cGVzZXQgLWcg
LWkxMCBFVUlEPSRFVUlECis+ZXhwb3J0IEhPTUU9JEhPTUUKKworICgpIHsgdHlwZXNldCAtaCAr
aSBFVUlEIDI+JjE7IHR5cGVzZXQgLXAgRVVJRCB9CisgKCkgeyB0eXBlc2V0IC1oIC1pIEhPTUUg
Mj4mMTsgdHlwZXNldCAtcCBIT01FIH0KKyAoKSB7IHR5cGVzZXQgLWggLWEgSE9NRSAyPiYxOyB0
eXBlc2V0IC1wIEhPTUUgfQorICgpIHsgdHlwZXNldCAtaCAtbiBIT01FIDI+JjE7IHR5cGVzZXQg
LXAgSE9NRSB9CisgdHlwZXNldCAtcCBFVUlEIEhPTUUKKzBxOkxvY2FsIC1oIHBhcmFtZXRlciBj
YW4gaGlkZSBzcGVjaWFsIHBhcmFtZXRlcgorPnR5cGVzZXQgLWggRVVJRD0nJworPnR5cGVzZXQg
LWloIEhPTUU9MAorPnR5cGVzZXQgLWFoIEhPTUU9KCAgKQorRjpCVUc6InR5cGVzZXQgLWggLW4g
SE9NRSIgc2hvdWxkIGJlIGFsbG93ZWQKKz4oYW5vbik6dHlwZXNldDogLWggbm90IGFsbG93ZWQg
d2l0aCAtbgorPmV4cG9ydCBIT01FPSRIT01FCis+dHlwZXNldCAtZyAtaTEwIEVVSUQ9JEVVSUQK
Kz5leHBvcnQgSE9NRT0kSE9NRQorCisgY2hlY2soKSB7CisgICBlY2hvICJUZXN0aW5nIFwibG9j
YWwgJDEgJDI9JHszfTxOPlwiIgorICAgeyBsb2NhbCAkMSAtciAkMj0kezN9MSAyPiYxICYmIHR5
cGVzZXQgLXAgJDIgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJST1I9MCB9CisgICB7IGxvY2FsICAg
IC1yICQyPSR7M30yIDI+JjEgJiYgdHlwZXNldCAtcCAkMiB9IGFsd2F5cyB7IFRSWV9CTE9DS19F
UlJPUj0wIH0KKyAgIHsgbG9jYWwgJDEgICAgJDI9JHszfTMgMj4mMSAmJiB0eXBlc2V0IC1wICQy
IH0gYWx3YXlzIHsgVFJZX0JMT0NLX0VSUk9SPTAgfQorICAgeyBsb2NhbCAkMSAtciAkMj0kezN9
NCAyPiYxICYmIHR5cGVzZXQgLXAgJDIgfSBhbHdheXMgeyBUUllfQkxPQ0tfRVJST1I9MCB9Cisg
ICB7IGxvY2FsICQxICtyICQyPSR7M301IDI+JjEgJiYgdHlwZXNldCAtcCAkMiB9IGFsd2F5cyB7
IFRSWV9CTE9DS19FUlJPUj0wIH0KKyB9CisgY2hlY2sgIiIgc3RyIHMKKyBjaGVjayAtaSBpbnQg
MQorIGNoZWNrIC1uIHJlZiB2CiswOk5vbiArciBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBjYW4ndCBj
aGFuZ2UvcmVwbGFjZSByZWFkb25seSBwYXJhbWV0ZXIKKz5UZXN0aW5nICJsb2NhbCAgc3RyPXM8
Tj4iCis+dHlwZXNldCAtciBzdHI9czEKKz5jaGVjazozOiByZWFkLW9ubHkgdmFyaWFibGU6IHN0
cgorPmNoZWNrOjQ6IHJlYWQtb25seSB2YXJpYWJsZTogc3RyCis+Y2hlY2s6NTogcmVhZC1vbmx5
IHZhcmlhYmxlOiBzdHIKKz50eXBlc2V0IHN0cj1zNQorPlRlc3RpbmcgImxvY2FsIC1pIGludD0x
PE4+IgorPnR5cGVzZXQgLWlyIGludD0xMQorPmNoZWNrOjM6IHJlYWQtb25seSB2YXJpYWJsZTog
aW50Cis+Y2hlY2s6NDogcmVhZC1vbmx5IHZhcmlhYmxlOiBpbnQKKz5jaGVjazo1OiByZWFkLW9u
bHkgdmFyaWFibGU6IGludAorPnR5cGVzZXQgLWkgaW50PTE1Cis+VGVzdGluZyAibG9jYWwgLW4g
cmVmPXY8Tj4iCis+dHlwZXNldCAtcm4gcmVmPXYxCis+dHlwZXNldCAtcm4gcmVmPXYxCitGOiJ0
eXBlc2V0IC1yIHJlZj12MiIgc3VjY2VlZHMgYmVjYXVzZSBpdCBkZXJlZmVyZW5jZXMgInJlZiIg
YW5kIGFzc2lnbnMgInYxIiB3aXRoICJ2MiIKKz5jaGVjazpsb2NhbDo0OiByZWY6IHJlYWQtb25s
eSByZWZlcmVuY2UKKz5jaGVjazpsb2NhbDo1OiByZWY6IHJlYWQtb25seSByZWZlcmVuY2UKKz50
eXBlc2V0IC1uIHJlZj12NQorCiAgKCkgewogICAgdHlwZXNldCAtRiBmMT1uYW4gZjI9aW5mIGYz
PS1pbmYKICAgIHR5cGVzZXQgLXAgZjEgZjIgZjMKZGlmZiAtLWdpdCBhL1Rlc3QvSzAxbmFtZXJl
Zi56dHN0IGIvVGVzdC9LMDFuYW1lcmVmLnp0c3QKaW5kZXggNTA4MmQxMDExLi43N2IxZTE4MDMg
MTAwNjQ0Ci0tLSBhL1Rlc3QvSzAxbmFtZXJlZi56dHN0CisrKyBiL1Rlc3QvSzAxbmFtZXJlZi56
dHN0CkBAIC0xMTA3LDMyICsxMTA3LDMwIEBAIEY6Q2hlY2tpbmcgZm9yIGEgYnVnIGluIHptb2Rs
b2FkIHRoYXQgYWZmZWN0cyBsYXRlciB0ZXN0cwogIHVuc2V0IC1uIHJlZgogIHR5cGVzZXQgLXJu
IHJlZj1STwogIHR5cGVzZXQgLXAgcmVmCi0gKHR5cGVzZXQgLW4gcmVmPVJXKQorICh0eXBlc2V0
IC1uIHJlZj1SVyAyPiYxICYmIHR5cGVzZXQgLXAgcmVmKQogIHByaW50IHN0YXR1czogJD8gZXhw
ZWN0ZWQ6IDEKICB0eXBlc2V0ICtyIC1uIHJlZgogIHR5cGVzZXQgLXAgcmVmCiAgdHlwZXNldCAt
ciArbiByZWYKICB0eXBlc2V0IC1wIHJlZgotICh0eXBlc2V0IC1ybiByZWYpCi0gcHJpbnQgc3Rh
dHVzOiAkPyBleHBlY3RlZDogMQotIHR5cGVzZXQgK3IgLW4gcmVmPVJXCSMgQXNzaWdubWVudCBv
Y2N1cnMgYWZ0ZXIgdHlwZSBjaGFuZ2UsCi0gdHlwZXNldCAtcCByZWYgUk8JIyBzbyBSTz1SVyBo
ZXJlLiAgUG90ZW50aWFsbHkgY29uZnVzaW5nLgotIHR5cGVzZXQgLXIgLW4gcmVmPVJYCSMgTm8g
dHlwZSBjaGFuZ2UsIHNvIHJlZmVyZW50IGNoYW5nZXMgLi4uCi0gdHlwZXNldCAtcCByZWYgUk8J
IyAuLi4gYW5kIHByZXZpb3VzIHJlZmVyZXJlbnQgZG9lcyBub3QuCi0gdHlwZXNldCArcm4gcmVm
PVJXCSMgSGVyZSByZWY9UlcsIGFnYWluIHR5cGUgY2hhbmdlZCBmaXJzdC4KKyAodHlwZXNldCAt
cm4gcmVmIDI+JjEgJiYgdHlwZXNldCAtcCByZWYpCisgcHJpbnQgc3RhdHVzOiAkPyBleHBlY3Rl
ZDogMAorIHR5cGVzZXQgK3IgLW4gcmVmPVJXCisgdHlwZXNldCAtcCByZWYKKyB0eXBlc2V0IC1y
IC1uIHJlZj1SWAorIHR5cGVzZXQgLXAgcmVmCisgdHlwZXNldCArcm4gcmVmPVJXCiAgdHlwZXNl
dCAtcCByZWYKIDA6YWRkIGFuZCByZW1vdmUgcmVhZG9ubHkgYXR0cmlidXRlIHdpdGggcmVmZXJl
bmNlcwogPnR5cGVzZXQgLXJuIHJlZj1STwotKj8qOiByZWY6IHJlYWQtb25seSByZWZlcmVuY2UK
Kz4oZXZhbCk6dHlwZXNldDo0OiByZWY6IHJlYWQtb25seSByZWZlcmVuY2UKID5zdGF0dXM6IDEg
ZXhwZWN0ZWQ6IDEKID50eXBlc2V0IC1uIHJlZj1STwogPnR5cGVzZXQgLXIgcmVmPVJPCi0qPyo6
IHJlZjogcmVhZC1vbmx5IHZhcmlhYmxlCi0+c3RhdHVzOiAxIGV4cGVjdGVkOiAxCi0+dHlwZXNl
dCAtbiByZWY9Uk8KLT50eXBlc2V0IC1nIFJPPVJXCis+dHlwZXNldCAtcm4gcmVmPVJPCis+c3Rh
dHVzOiAwIGV4cGVjdGVkOiAwCis+dHlwZXNldCAtbiByZWY9UlcKID50eXBlc2V0IC1ybiByZWY9
UlgKLT50eXBlc2V0IC1nIFJPPVJXCiA+dHlwZXNldCByZWY9UlcKIAogICgpIHsKZGlmZiAtLWdp
dCBhL1Rlc3QvVjEwcHJpdmF0ZS56dHN0IGIvVGVzdC9WMTBwcml2YXRlLnp0c3QKaW5kZXggMjU2
ODQ0YmUxLi5mM2FkN2I2YjkgMTAwNjQ0Ci0tLSBhL1Rlc3QvVjEwcHJpdmF0ZS56dHN0CisrKyBi
L1Rlc3QvVjEwcHJpdmF0ZS56dHN0CkBAIC0zMDQsMzkgKzMwNCw0NCBAQCBGOmZ1dHVyZSByZXZp
c2lvbiB3aWxsIGNyZWF0ZSBhIGdsb2JhbCB3aXRoIHRoaXMgYXNzaWdubWVudAogIHR5cGVzZXQg
dG9wPVRPUAogICgpIHsKICAgbG9jYWwgLVAgLW4gdGVzdD10b3AKLSAgcHJpbnQgJHRvcAorICBw
cmludCAkdGVzdAorICB0ZXN0PXRvcAorICBwcmludCAkdGVzdAogICAoKSB7IHByaW50IFVQOiAk
dGVzdCB9CiAgfQorIHByaW50ICR0b3AKIDA6bmFtZXJlZiBjYW4gYmUgZGVjbGFyZWQgcHJpdmF0
ZQogPlRPUAorPnRvcAogPlVQOgorPnRvcAogCiAgKCkgewogICAgdHlwZXNldCAtYSBhcnkKICAg
IGxvY2FsIC1QIC1uIHJlZj1hcnkKICAgIHsKLSAgICAoKXsKLSAgICAgcmVmPVhYCSMgU2hvdWxk
IGJlIGFuIGVycm9yCi0gICAgIHR5cGVzZXQgLXAgYXJ5IHJlZgorICAgICgpIHsKKyAgICAgcmVm
PVhYIDI+JjEJIyBTaG91bGQgYmUgYW4gZXJyb3IKKyAgICAgZWNobyBOT1QgUkVBQ0hFRAogICAg
IH0KICAgIH0gYWx3YXlzIHsKICAgICBUUllfQkxPQ0tfRVJST1I9MAogICAgIHR5cGVzZXQgLXAg
YXJ5IHJlZgogICAgfQogIH0KLSB0eXBlc2V0IC1wIGFyeQorIHR5cGVzZXQgLXAgYXJ5IDI+JjEK
IDE6YXNzaWdubWVudCB0byBwcml2YXRlIG5hbWVyZWYgaW4gd3Jvbmcgc2NvcGUsIHBhcnQgMQor
Pihhbm9uKToxOiByZWY6IGNhbid0IG1vZGlmeSByZWFkLW9ubHkgcGFyYW1ldGVyCiA+dHlwZXNl
dCAtYSBhcnkKID50eXBlc2V0IC1obiByZWY9YXJ5Ci0qPypyZWY6IGNhbid0IG1vZGlmeSByZWFk
LW9ubHkgcGFyYW1ldGVyCi0qPypubyBzdWNoIHZhcmlhYmxlOiBhcnkKKz4oZXZhbCk6dHlwZXNl
dDoxNDogbm8gc3VjaCB2YXJpYWJsZTogYXJ5CiAKICAoKSB7CiAgICB0eXBlc2V0IC1hIGFyeQog
ICAgbG9jYWwgLVAgLW4gcmVmPWFyeQogICAgewogICAgICgpewotICAgICB0eXBlc2V0IHJlZj1Y
WAkjIFNob3VsZCBjcmVhdGUgYSBsb2NhbAorICAgICB0eXBlc2V0IHJlZj1YWCAyPiYxCSMgU2hv
dWxkIGNyZWF0ZSBhIGxvY2FsCiAgICAgIHR5cGVzZXQgLXAgYXJ5IHJlZgogICAgIH0KICAgIH0g
YWx3YXlzIHsKQEAgLTM0NCw1MyArMzQ5LDg5IEBAIEY6ZnV0dXJlIHJldmlzaW9uIHdpbGwgY3Jl
YXRlIGEgZ2xvYmFsIHdpdGggdGhpcyBhc3NpZ25tZW50CiAgICAgdHlwZXNldCAtcCBhcnkgcmVm
CiAgICB9CiAgfQotIHR5cGVzZXQgLXAgYXJ5CisgdHlwZXNldCAtcCBhcnkgMj4mMQogMTphc3Np
Z25tZW50IHRvIHByaXZhdGUgbmFtZXJlZiBpbiB3cm9uZyBzY29wZSwgcGFydCAyCiA+dHlwZXNl
dCAtZyAtYSBhcnkKID50eXBlc2V0IHJlZj1YWAogPnR5cGVzZXQgLWEgYXJ5CiA+dHlwZXNldCAt
aG4gcmVmPWFyeQotKj8qbm8gc3VjaCB2YXJpYWJsZTogYXJ5Cis+KGV2YWwpOnR5cGVzZXQ6MTQ6
IG5vIHN1Y2ggdmFyaWFibGU6IGFyeQogCiAgKCkgeworICAgdHlwZXNldCB2YWw9TE9DQUwKICAg
IHR5cGVzZXQgLW4gcHRyMT1wdHIyCiAgICBwcml2YXRlIC1uIHB0cjIJIyBUWVBFU0VUX1RPX1VO
U0VUIG1ha2VzIHRoaXMgbm90IGEgInBsYWNlaG9sZGVyIgogICAgdHlwZXNldCAtcCBwdHIxIHB0
cjIKLSAgIHR5cGVzZXQgdmFsPUxPQ0FMCiAgICAoKSB7Ci0gICAgIHB0cjE9dmFsCQkjIFRlc3Qg
ZGllcyBoZXJlIGFzIHB0cjIgaXMgcHJpdmF0ZSBhbmQgdW5zZXQKLSAgICAgdHlwZXNldCAtbgot
ICAgICBwcmludGYgIiVzPSVzXG4iIHB0cjEgIiRwdHIxIiBwdHIyICIkcHRyMiIKKyAgICAgcHRy
MT12YWwgMj4mMQkJIyBUZXN0IGRpZXMgaGVyZSBhcyBwdHIyIGlzIHByaXZhdGUKKyAgICAgZWNo
byBOT1QgUkVBQ0hFRAogICAgfQotICAgdHlwZXNldCAtcCBwdHIxIHB0cjIKKyAgIGVjaG8gTk9U
IFJFQUNIRUQKICB9Ci0gdHlwZXNldCAtcCBwdHIyCisgZWNobyBOT1QgUkVBQ0hFRAogMTp1cC1y
ZWZlcmVuY2UgZm9yIHByaXZhdGUgbmFtZXJlZnMsIGVuZCB1bnNldCBhbmQgbm90IGluIHNjb3Bl
CiBGOlNlZSBLMDFuYW1lcmVmLnp0c3QgdXAtcmVmZXJlbmNlIHBhcnQgNQogRjpIZXJlIHB0cjEg
ZmluZHMgcHJpdmF0ZSBwdHIyIGJ5IHNjb3BlIG1pc21hdGNoCiA+dHlwZXNldCAtbiBwdHIxPXB0
cjIKID50eXBlc2V0IC1obiBwdHIyCi0/KGFub24pOjE6IHJlYWQtb25seSB2YXJpYWJsZTogcHRy
MgorPihhbm9uKToxOiByZWFkLW9ubHkgdmFyaWFibGU6IHB0cjIKIAogICgpIHsKKyAgIHR5cGVz
ZXQgdmFsPUxPQ0FMCiAgICB0eXBlc2V0IC1uIHB0cjE9cHRyMgogICAgcHJpdmF0ZSAtbiBwdHIy
PQkjIEFzc2lnbm1lbnQgbWFrZXMgdGhpcyBhIHBsYWNlaG9sZGVyLCBub3QgdW5zZXQKICAgIHR5
cGVzZXQgLXAgcHRyMSBwdHIyCisgICAoKSB7CisgICAgIHB0cjE9dmFsIDI+JjEJCSMgVGVzdCBk
aWVzIGhlcmUgYXMgcHRyMiBpcyBwcml2YXRlCisgICAgIGVjaG8gTk9UIFJFQUNIRUQKKyAgIH0K
KyAgIGVjaG8gTk9UIFJFQUNIRUQKKyB9CisgZWNobyBOT1QgUkVBQ0hFRAorMTp1cC1yZWZlcmVu
Y2UgZm9yIHByaXZhdGUgbmFtZXJlZnMsIGVuZCBpcyBwbGFjZWhvbGRlciBhbmQgbm90IGluIHNj
b3BlCitGOlNlZSBLMDFuYW1lcmVmLnp0c3QgdXAtcmVmZXJlbmNlIHBhcnQgNQorRjpIZXJlIHB0
cjEgZmluZHMgcHJpdmF0ZSBwdHIyIGJ5IHNjb3BlIG1pc21hdGNoCis+dHlwZXNldCAtbiBwdHIx
PXB0cjIKKz50eXBlc2V0IC1obiBwdHIyPScnCis+KGFub24pOjE6IHB0cjE6IGNhbid0IG1vZGlm
eSByZWFkLW9ubHkgcGFyYW1ldGVyCisKKyAoKSB7CiAgICB0eXBlc2V0IHZhbD1MT0NBTAorICAg
dHlwZXNldCAtbiBwdHIxPXB0cjIKKyAgIHByaXZhdGUgLW4gcHRyMj12YWwJIyBBc3NpZ25tZW50
IG1ha2VzIHRoaXMgYSByZWZlcmVuY2UgdG8gZXhpc3RpbmcgdmFsCisgICB0eXBlc2V0IC1wIHB0
cjEgcHRyMgogICAgKCkgewotICAgICBwdHIxPXZhbAkJIyBUZXN0IGRpZXMgaGVyZSBhcyBwdHIy
IGlzIHByaXZhdGUgYW5kIHVuaW5pdGlhbGl6ZWQKLSAgICAgdHlwZXNldCAtbgotICAgICBwcmlu
dGYgIiVzPSVzXG4iIHB0cjEgIiRwdHIxIiBwdHIyICIkcHRyMiIKKyAgICAgcHRyMT12YWwgMj4m
MQkJIyBUZXN0IGRpZXMgaGVyZSBhcyBwdHIyIGlzIHByaXZhdGUKKyAgICAgZWNobyBOT1QgUkVB
Q0hFRAogICAgfQorICAgZWNobyBOT1QgUkVBQ0hFRAorIH0KKyBlY2hvIE5PVCBSRUFDSEVECisx
OnVwLXJlZmVyZW5jZSBmb3IgcHJpdmF0ZSBuYW1lcmVmcywgZW5kIHJlZmVycyBleGlzdGluZyB2
YXJpYWJsZSBhbmQgbm90IGluIHNjb3BlCitGOlNlZSBLMDFuYW1lcmVmLnp0c3QgdXAtcmVmZXJl
bmNlIHBhcnQgNQorRjpIZXJlIHB0cjEgZmluZHMgcHJpdmF0ZSBwdHIyIGJ5IHNjb3BlIG1pc21h
dGNoCis+dHlwZXNldCAtbiBwdHIxPXB0cjIKKz50eXBlc2V0IC1obiBwdHIyPXZhbAorPihhbm9u
KToxOiBwdHIxOiBjYW4ndCBtb2RpZnkgcmVhZC1vbmx5IHBhcmFtZXRlcgorCisgKCkgeworICAg
dHlwZXNldCB2YWw9TE9DQUwKKyAgIHR5cGVzZXQgLW4gcHRyMT1wdHIyCisgICBwcml2YXRlIC1u
IHB0cjI9Zm9vCSMgQXNzaWdubWVudCBtYWtlcyB0aGlzIGEgcmVmZXJlbmNlIHRvIG5vdC15ZXQt
ZGVmaW5lZCBmb28KICAgIHR5cGVzZXQgLXAgcHRyMSBwdHIyCisgICAoKSB7CisgICAgIHB0cjE9
dmFsIDI+JjEJCSMgVGVzdCBkaWVzIGhlcmUgYXMgcHRyMiBpcyBwcml2YXRlCisgICAgIGVjaG8g
Tk9UIFJFQUNIRUQKKyAgIH0KKyAgIGVjaG8gTk9UIFJFQUNIRUQKICB9Ci0gdHlwZXNldCAtcCBw
dHIyCi0xOnVwLXJlZmVyZW5jZSBmb3IgcHJpdmF0ZSBuYW1lcmVmcywgZW5kIG5vdCBpbiBzY29w
ZQorIGVjaG8gTk9UIFJFQUNIRUQKKzE6dXAtcmVmZXJlbmNlIGZvciBwcml2YXRlIG5hbWVyZWZz
LCBlbmQgcmVmZXJzIG5vdC15ZXQtZGVmaW5lZCB2YXJpYWJsZSBhbmQgbm90IGluIHNjb3BlCiBG
OlNlZSBLMDFuYW1lcmVmLnp0c3QgdXAtcmVmZXJlbmNlIHBhcnQgNQogRjpIZXJlIHB0cjEgZmlu
ZHMgcHJpdmF0ZSBwdHIyIGJ5IHNjb3BlIG1pc21hdGNoCiA+dHlwZXNldCAtbiBwdHIxPXB0cjIK
LT50eXBlc2V0IC1obiBwdHIyPScnCi0/KGFub24pOjE6IHB0cjE6IGNhbid0IG1vZGlmeSByZWFk
LW9ubHkgcGFyYW1ldGVyCis+dHlwZXNldCAtaG4gcHRyMj1mb28KKz4oYW5vbik6MTogcHRyMTog
Y2FuJ3QgbW9kaWZ5IHJlYWQtb25seSBwYXJhbWV0ZXIKIAogIHR5cGVzZXQgcHRyMgogICgpIHsK
QEAgLTQwMSw3ICs0NDIsNyBAQCBGOkhlcmUgcHRyMSBmaW5kcyBwcml2YXRlIHB0cjIgYnkgc2Nv
cGUgbWlzbWF0Y2gKICAgICgpIHsKICAgICAgcHRyMT12YWwKICAgICAgdHlwZXNldCAtbgotICAg
ICBwcmludGYgIiVzPSVzXG4iIHB0cjEgIiRwdHIxIiBwdHIyICIkcHRyMiIKKyAgICAgcHJpbnRm
ICJwcmludDolcz0lc1xuIiBwdHIxICIkcHRyMSIgcHRyMiAiJHB0cjIiCiAgICB9CiAgICB0eXBl
c2V0IC1wIHB0cjEgcHRyMgogIH0KQEAgLTQxMywyNCArNDU0LDM4IEBAIEY6SGVyZSBwdHIxIHBv
aW50cyB0byBnbG9iYWwgcHRyMiBzbyBhc3NpZ25tZW50IHN1Y2NlZWRzCiA+dHlwZXNldCAtaG4g
cHRyMgogPnB0cjE9cHRyMgogPnB0cjI9dmFsCi0+cHRyMT12YWwKLT5wdHIyPXZhbAorPnByaW50
OnB0cjE9dmFsCis+cHJpbnQ6cHRyMj12YWwKID50eXBlc2V0IC1uIHB0cjE9cHRyMgogPnR5cGVz
ZXQgLWhuIHB0cjIKID50eXBlc2V0IHB0cjI9dmFsCiAKKyAoKSB7CisgICBzZXRvcHQgbG9jYWxv
cHRpb25zIGVycnJldHVybgorICAgcHJpdmF0ZSAtbiBwdHIyPXZhbAorICAgdHlwZXNldCAtbiBw
dHIxPXB0cjIgMj4mMQorICAgcHRyMT1mb28KKyAgIHR5cGVzZXQgLXAgcHRyMSBwdHIyIHZhbAor
IH0KKyB1bnNldCB2YWwKKzA6dXAtcmVmZXJlbmNlIGZvciBwcml2YXRlIG5hbWVyZWZzLCBlbmQg
aXMgc2V0IGFuZCBpbiBzY29wZSBidXQgcHJpdmF0ZQorPnR5cGVzZXQgLW4gcHRyMT1wdHIyCis+
dHlwZXNldCAtaG4gcHRyMj12YWwKKz50eXBlc2V0IC1nIHZhbD1mb28KKwogICgpIHsKICAgIHNl
dG9wdCBsb2NhbG9wdGlvbnMgZXJycmV0dXJuCiAgICBwcml2YXRlIC1uIHB0cjIKLSAgIHR5cGVz
ZXQgLW4gcHRyMT1wdHIyCi0gICBlY2hvIE5PVCBSRUFDSEVECisgICB0eXBlc2V0IC1uIHB0cjE9
cHRyMiAyPiYxCisgICBwdHIxPXZhbAorICAgcHRyMT1mb28KKyAgIHR5cGVzZXQgLXAgcHRyMSBw
dHIyIHZhbAogIH0KLSB0eXBlc2V0IC1wIHB0cjEgcHRyMgotMTp1cC1yZWZlcmVuY2UgZm9yIHBy
aXZhdGUgbmFtZXJlZnMsIGVuZCBpcyBpbiBzY29wZSBidXQgcHJpdmF0ZQotRjpTaG91bGQgd2Ug
YWxsb3cgInB1YmxpYyIgbmFtZXJlZnMgdG8gcHJpdmF0ZSBwYXJhbWV0ZXJzPwotKj8qcHRyMjog
aW52YWxpZCByZWZlcmVuY2UKLSo/Km5vIHN1Y2ggdmFyaWFibGU6IHB0cjEKLSo/Km5vIHN1Y2gg
dmFyaWFibGU6IHB0cjIKKyB1bnNldCB2YWwKKzA6dXAtcmVmZXJlbmNlIGZvciBwcml2YXRlIG5h
bWVyZWZzLCBlbmQgaXMgdW5zZXQgYW5kIGluIHNjb3BlIGJ1dCBwcml2YXRlCis+dHlwZXNldCAt
biBwdHIxPXB0cjIKKz50eXBlc2V0IC1obiBwdHIyPXZhbAorPnR5cGVzZXQgLWcgdmFsPWZvbwog
CiAgKCkgewogICAgdHlwZXNldCBwdHIyPWZvbwpAQCAtNDM4LDEzICs0OTMsMTMgQEAgRjpTaG91
bGQgd2UgYWxsb3cgInB1YmxpYyIgbmFtZXJlZnMgdG8gcHJpdmF0ZSBwYXJhbWV0ZXJzPwogICAg
KCkgewogICAgICBzZXRvcHQgbG9jYWxvcHRpb25zIGVycnJldHVybgogICAgICBwcml2YXRlIC1u
IHB0cjIKLSAgICAgdHlwZXNldCAtbiBwdHIxPXB0cjIKLSAgICAgZWNobyBOT1QgUkVBQ0hFRAor
ICAgICB0eXBlc2V0IC1uIHB0cjE9cHRyMiAyPiYxCisgICAgIHR5cGVzZXQgLXAgcHRyMSBwdHIy
CiAgICB9CiAgfQotMTpyZWdyZXNzaW9uIHRlc3QgZm9yIGludmFsaWQgcmVmZXJlbmNlIGRldGVj
dGlvbgotRjpTaG91bGQgd2UgYWxsb3cgInB1YmxpYyIgbmFtZXJlZnMgdG8gcHJpdmF0ZSBwYXJh
bWV0ZXJzPwotKj8qcHRyMjogaW52YWxpZCByZWZlcmVuY2UKKzA6cmVncmVzc2lvbiB0ZXN0IGZv
ciBpbnZhbGlkIHJlZmVyZW5jZSBkZXRlY3Rpb24KKz50eXBlc2V0IC1uIHB0cjE9cHRyMgorPnR5
cGVzZXQgLWhuIHB0cjIKIAogICgpIHsKICAgIHByaXZhdGUgeD0xCg==
--0000000000007bcb2306576fb66c--