<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>71122</bug_id>
          
          <creation_ts>2004-11-13 22:53 0000</creation_ts>
          <short_desc>Patch to add lossless cropping support to jpegtran</short_desc>
          <delta_ts>2005-09-06 15:37:58 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          <bug_file_loc>http://sylvana.net/jpegcrop/jpegtran/</bug_file_loc>
          
          
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>nnd3@benj.dropbear.id.au</reporter>
          <assigned_to>graphics@gentoo.org</assigned_to>
          <cc>gentoo@karlt.net</cc>

      

      
          <long_desc isprivate="0">
            <who>nnd3@benj.dropbear.id.au</who>
            <bug_when>2004-11-13 22:53:42 0000</bug_when>
            <thetext>There is a patch available at http://sylvana.net/jpegcrop/croppatch.tar.gz, which adds support for lossless cropping to jpegtran. 

The tarball just needs to be extracted in the jpeg-6b directory, and the new options will be available after compilation and install.

Reproducible: Always
Steps to Reproduce:
1. tar zxvf jpegsrc.v6b.tar.gz
2. cd jpeg-6b
3. tar zxvf croppatch.tar.gz
4. ./configure &amp;&amp; make as per current ebuild.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mailing@dremer.org</who>
            <bug_when>2005-05-01 06:35:37 0000</bug_when>
            <thetext>I join the request to add it to the official ebuild.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>gentoo@karlt.net</who>
            <bug_when>2005-07-22 20:48:04 0000</bug_when>
            <thetext>Created an attachment (id=64104)
croppatch patch with man page

This is http://sylvana.net/jpegcrop/croppatch.tar.gz, together with a
corresponding update to the man page borrowed from Debian, in a form suitable
for epatch.

Lossless cropping has been available in jpegtran in Debian for years, so I
think it is safe to include it in Gentoo now.

Note that http://sylvana.net/jpegcrop/croppatch.tar.gz includes a touch up to
the exif format so that

  jpegtran -copy all -progressive 

now gives the same result as

  jhead -cmd &apos;jpegtran -progressive &amp;i &gt; &amp;o&apos;
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2005-09-06 15:37:58 0000</bug_when>
            <thetext>fixed in jpeg-6b-r6</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64104</attachid>
            <date>2005-07-22 20:48 0000</date>
            <desc>croppatch patch with man page</desc>
            <filename>crop.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGpwZWctNmIvamVycm9yLmgJU3VuIE9jdCAxOSAwNzo1OToxMCAxOTk3CisrKyBqcGVnLTZi
X3AyMDAzMDkyMi9qZXJyb3IuaAlNb24gTWFyICA2IDExOjM0OjI3IDIwMDAKQEAgLTQ1LDYgKzQ1
LDcgQEAKIEpNRVNTQUdFKEpFUlJfQkFEX0FMTE9DX0NIVU5LLCAiTUFYX0FMTE9DX0NIVU5LIGlz
IHdyb25nLCBwbGVhc2UgZml4IikKIEpNRVNTQUdFKEpFUlJfQkFEX0JVRkZFUl9NT0RFLCAiQm9n
dXMgYnVmZmVyIGNvbnRyb2wgbW9kZSIpCiBKTUVTU0FHRShKRVJSX0JBRF9DT01QT05FTlRfSUQs
ICJJbnZhbGlkIGNvbXBvbmVudCBJRCAlZCBpbiBTT1MiKQorSk1FU1NBR0UoSkVSUl9CQURfQ1JP
UF9TUEVDLCAiSW52YWxpZCBjcm9wIHJlcXVlc3QiKQogSk1FU1NBR0UoSkVSUl9CQURfRENUX0NP
RUYsICJEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlIikKIEpNRVNTQUdFKEpFUlJfQkFEX0RD
VFNJWkUsICJJRENUIG91dHB1dCBibG9jayBzaXplICVkIG5vdCBzdXBwb3J0ZWQiKQogSk1FU1NB
R0UoSkVSUl9CQURfSFVGRl9UQUJMRSwgIkJvZ3VzIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiIp
Ci0tLSBqcGVnLTZiL2pwZWd0cmFuLmMJVGh1IEp1bCAyNCAxNDozNzoyNiAxOTk3CisrKyBqcGVn
LTZiX3AyMDAzMDkyMi9qcGVndHJhbi5jCU1vbiBTZXAgMjIgMDc6MzA6MjEgMjAwMwpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiBqcGVndHJhbi5jCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5
OTcsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDEsIFRob21hcyBH
LiBMYW5lLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3Jv
dXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNl
LCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC02NCw4ICs2NCwxMCBA
QAogI2VuZGlmCiAjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICJT
d2l0Y2hlcyBmb3IgbW9kaWZ5aW5nIHRoZSBpbWFnZTpcbiIpOworICBmcHJpbnRmKHN0ZGVyciwg
IiAgLWNyb3AgV3hIK1grWSAgQ3JvcCB0byBhIHJlY3Rhbmd1bGFyIHN1YmFyZWFcbiIpOwogICBm
cHJpbnRmKHN0ZGVyciwgIiAgLWdyYXlzY2FsZSAgICAgUmVkdWNlIHRvIGdyYXlzY2FsZSAob21p
dCBjb2xvciBkYXRhKVxuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiICAtZmxpcCBbaG9yaXpvbnRh
bHx2ZXJ0aWNhbF0gIE1pcnJvciBpbWFnZSAobGVmdC1yaWdodCBvciB0b3AtYm90dG9tKVxuIik7
CisgIGZwcmludGYoc3RkZXJyLCAiICAtcGVyZmVjdCAgICAgICBGYWlsIGlmIHRoZXJlIGlzIG5v
bi10cmFuc2Zvcm1hYmxlIGVkZ2UgYmxvY2tzXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC1y
b3RhdGUgWzkwfDE4MHwyNzBdICAgICAgICAgUm90YXRlIGltYWdlIChkZWdyZWVzIGNsb2Nrd2lz
ZSlcbiIpOwogICBmcHJpbnRmKHN0ZGVyciwgIiAgLXRyYW5zcG9zZSAgICAgVHJhbnNwb3NlIGlt
YWdlXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC10cmFuc3ZlcnNlICAgIFRyYW5zdmVyc2Ug
dHJhbnNwb3NlIGltYWdlXG4iKTsKQEAgLTEzMyw3ICsxMzUsOSBAQAogICBjb3B5b3B0aW9uID0g
SkNPUFlPUFRfREVGQVVMVDsKICAgdHJhbnNmb3Jtb3B0aW9uLnRyYW5zZm9ybSA9IEpYRk9STV9O
T05FOwogICB0cmFuc2Zvcm1vcHRpb24udHJpbSA9IEZBTFNFOworICB0cmFuc2Zvcm1vcHRpb24u
cGVyZmVjdCA9IEZBTFNFOwogICB0cmFuc2Zvcm1vcHRpb24uZm9yY2VfZ3JheXNjYWxlID0gRkFM
U0U7CisgIHRyYW5zZm9ybW9wdGlvbi5jcm9wID0gRkFMU0U7CiAgIGNpbmZvLT5lcnItPnRyYWNl
X2xldmVsID0gMDsKIAogICAvKiBTY2FuIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhZGp1c3QgcGFy
YW1ldGVycyAqLwpAQCAtMTYwLDcgKzE2NCw3IEBACiAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CiAjZW5kaWYKIAotICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiY29weSIsIDEpKSB7Cisg
ICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjb3B5IiwgMikpIHsKICAgICAgIC8qIFNlbGVj
dCB3aGljaCBleHRyYSBtYXJrZXJzIHRvIGNvcHkuICovCiAgICAgICBpZiAoKythcmduID49IGFy
Z2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwogCXVzYWdlKCk7CkBAIC0xNzMsNiAr
MTc3LDIwIEBACiAgICAgICB9IGVsc2UKIAl1c2FnZSgpOwogCisgICAgfSBlbHNlIGlmIChrZXlt
YXRjaChhcmcsICJjcm9wIiwgMikpIHsKKyAgICAgIC8qIFBlcmZvcm0gbG9zc2xlc3MgY3JvcHBp
bmcuICovCisjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJn
YykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisJdXNhZ2UoKTsKKyAgICAgIGlmICgh
IGp0cmFuc2Zvcm1fcGFyc2VfY3JvcF9zcGVjKCZ0cmFuc2Zvcm1vcHRpb24sIGFyZ3ZbYXJnbl0p
KSB7CisJZnByaW50ZihzdGRlcnIsICIlczogYm9ndXMgLWNyb3AgYXJndW1lbnQgJyVzJ1xuIiwK
KwkJcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0K
KyNlbHNlCisgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9OT05FKTsJLyogZm9yY2UgYW4g
ZXJyb3IgKi8KKyNlbmRpZgorCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkZWJ1ZyIs
IDEpIHx8IGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgewogICAgICAgLyogRW5hYmxlIGRl
YnVnIHByaW50b3V0cy4gKi8KICAgICAgIC8qIE9uIGZpcnN0IC1kLCBwcmludCB2ZXJzaW9uIGlk
ZW50aWZpY2F0aW9uICovCkBAIC0yMzMsNyArMjUxLDEyIEBACiAJdXNhZ2UoKTsKICAgICAgIG91
dGZpbGVuYW1lID0gYXJndlthcmduXTsJLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8K
IAotICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicHJvZ3Jlc3NpdmUiLCAxKSkgeworICAg
IH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicGVyZmVjdCIsIDIpKSB7CisgICAgICAvKiBGYWls
IGlmIHRoZXJlIGlzIGFueSBwYXJ0aWFsIGVkZ2UgTUNVcyB0aGF0IHRoZSB0cmFuc2Zvcm0gY2Fu
J3QKKyAgICAgICAqIGhhbmRsZS4gKi8KKyAgICAgIHRyYW5zZm9ybW9wdGlvbi5wZXJmZWN0ID0g
VFJVRTsKKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicHJvZ3Jlc3NpdmUiLCAyKSkg
ewogICAgICAgLyogU2VsZWN0IHNpbXBsZSBwcm9ncmVzc2l2ZSBtb2RlLiAqLwogI2lmZGVmIENf
UFJPR1JFU1NJVkVfU1VQUE9SVEVECiAgICAgICBzaW1wbGVfcHJvZ3Jlc3NpdmUgPSBUUlVFOwpA
QCAtMzQyLDggKzM2NSwxMCBAQAogICBqdmlydF9iYXJyYXlfcHRyICogc3JjX2NvZWZfYXJyYXlz
OwogICBqdmlydF9iYXJyYXlfcHRyICogZHN0X2NvZWZfYXJyYXlzOwogICBpbnQgZmlsZV9pbmRl
eDsKLSAgRklMRSAqIGlucHV0X2ZpbGU7Ci0gIEZJTEUgKiBvdXRwdXRfZmlsZTsKKyAgLyogV2Ug
YXNzdW1lIGFsbC1pbi1tZW1vcnkgcHJvY2Vzc2luZyBhbmQgY2FuIHRoZXJlZm9yZSB1c2Ugb25s
eSBhCisgICAqIHNpbmdsZSBmaWxlIHBvaW50ZXIgZm9yIHNlcXVlbnRpYWwgaW5wdXQgYW5kIG91
dHB1dCBvcGVyYXRpb24uIAorICAgKi8KKyAgRklMRSAqIGZwOwogCiAgIC8qIE9uIE1hYywgZmV0
Y2ggYSBjb21tYW5kIGxpbmUuICovCiAjaWZkZWYgVVNFX0NDT01NQU5ECkBAIC00MDYsMjQgKzQz
MSwxMyBAQAogCiAgIC8qIE9wZW4gdGhlIGlucHV0IGZpbGUuICovCiAgIGlmIChmaWxlX2luZGV4
IDwgYXJnYykgewotICAgIGlmICgoaW5wdXRfZmlsZSA9IGZvcGVuKGFyZ3ZbZmlsZV9pbmRleF0s
IFJFQURfQklOQVJZKSkgPT0gTlVMTCkgewotICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2Fu
J3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGFyZ3ZbZmlsZV9pbmRleF0pOworICAgIGlmICgoZnAg
PSBmb3Blbihhcmd2W2ZpbGVfaW5kZXhdLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAg
IGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXMgZm9yIHJlYWRpbmdcbiIsIHByb2du
YW1lLCBhcmd2W2ZpbGVfaW5kZXhdKTsKICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICB9
CiAgIH0gZWxzZSB7CiAgICAgLyogZGVmYXVsdCBpbnB1dCBmaWxlIGlzIHN0ZGluICovCi0gICAg
aW5wdXRfZmlsZSA9IHJlYWRfc3RkaW4oKTsKLSAgfQotCi0gIC8qIE9wZW4gdGhlIG91dHB1dCBm
aWxlLiAqLwotICBpZiAob3V0ZmlsZW5hbWUgIT0gTlVMTCkgewotICAgIGlmICgob3V0cHV0X2Zp
bGUgPSBmb3BlbihvdXRmaWxlbmFtZSwgV1JJVEVfQklOQVJZKSkgPT0gTlVMTCkgewotICAgICAg
ZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIG91dGZpbGVu
YW1lKTsKLSAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAg
LyogZGVmYXVsdCBvdXRwdXQgZmlsZSBpcyBzdGRvdXQgKi8KLSAgICBvdXRwdXRfZmlsZSA9IHdy
aXRlX3N0ZG91dCgpOworICAgIGZwID0gcmVhZF9zdGRpbigpOwogICB9CiAKICNpZmRlZiBQUk9H
UkVTU19SRVBPUlQKQEAgLTQzMSw3ICs0NDUsNyBAQAogI2VuZGlmCiAKICAgLyogU3BlY2lmeSBk
YXRhIHNvdXJjZSBmb3IgZGVjb21wcmVzc2lvbiAqLwotICBqcGVnX3N0ZGlvX3NyYygmc3JjaW5m
bywgaW5wdXRfZmlsZSk7CisgIGpwZWdfc3RkaW9fc3JjKCZzcmNpbmZvLCBmcCk7CiAKICAgLyog
RW5hYmxlIHNhdmluZyBvZiBleHRyYSBtYXJrZXJzIHRoYXQgd2Ugd2FudCB0byBjb3B5ICovCiAg
IGpjb3B5X21hcmtlcnNfc2V0dXAoJnNyY2luZm8sIGNvcHlvcHRpb24pOwpAQCAtNDQzLDYgKzQ1
NywxNSBAQAogICAgKiBqcGVnX3JlYWRfY29lZmZpY2llbnRzIHNvIHRoYXQgbWVtb3J5IGFsbG9j
YXRpb24gd2lsbCBiZSBkb25lIHJpZ2h0LgogICAgKi8KICNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRF
RAorICAvKiBGYWlscyByaWdodCBhd2F5IGlmIC1wZXJmZWN0IGlzIGdpdmVuIGFuZCB0cmFuc2Zv
cm1hdGlvbiBpcyBub3QgcGVyZmVjdC4KKyAgICovCisgIGlmICh0cmFuc2Zvcm1vcHRpb24ucGVy
ZmVjdCAmJgorICAgICAgIWp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0oc3JjaW5mby5pbWFn
ZV93aWR0aCwgc3JjaW5mby5pbWFnZV9oZWlnaHQsCisgICAgICBzcmNpbmZvLm1heF9oX3NhbXBf
ZmFjdG9yICogRENUU0laRSwgc3JjaW5mby5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUsCisg
ICAgICB0cmFuc2Zvcm1vcHRpb24udHJhbnNmb3JtKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAi
JXM6IHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwZXJmZWN0XG4iLCBwcm9nbmFtZSk7CisgICAgZXhp
dChFWElUX0ZBSUxVUkUpOworICB9CiAgIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UoJnNy
Y2luZm8sICZ0cmFuc2Zvcm1vcHRpb24pOwogI2VuZGlmCiAKQEAgLTQ2MywxMSArNDg2LDMyIEBA
CiAgIGRzdF9jb2VmX2FycmF5cyA9IHNyY19jb2VmX2FycmF5czsKICNlbmRpZgogCisgIC8qIENs
b3NlIGlucHV0IGZpbGUsIGlmIHdlIG9wZW5lZCBpdC4KKyAgICogTm90ZTogd2UgYXNzdW1lIHRo
YXQganBlZ19yZWFkX2NvZWZmaWNpZW50cyBjb25zdW1lZCBhbGwgaW5wdXQKKyAgICogdW50aWwg
SlBFR19SRUFDSEVEX0VPSSwgYW5kIHRoYXQganBlZ19maW5pc2hfZGVjb21wcmVzcyB3aWxsCisg
ICAqIG9ubHkgY29uc3VtZSBtb3JlIHdoaWxlICghIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNo
ZWQpLgorICAgKiBXZSBjYW5ub3QgY2FsbCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGhlcmUgc2lu
Y2Ugd2Ugc3RpbGwgbmVlZCB0aGUKKyAgICogdmlydHVhbCBhcnJheXMgYWxsb2NhdGVkIGZyb20g
dGhlIHNvdXJjZSBvYmplY3QgZm9yIHByb2Nlc3NpbmcuCisgICAqLworICBpZiAoZnAgIT0gc3Rk
aW4pCisgICAgZmNsb3NlKGZwKTsKKworICAvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZS4gKi8KKyAg
aWYgKG91dGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICBpZiAoKGZwID0gZm9wZW4ob3V0ZmlsZW5h
bWUsIFdSSVRFX0JJTkFSWSkpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6
IGNhbid0IG9wZW4gJXMgZm9yIHdyaXRpbmdcbiIsIHByb2duYW1lLCBvdXRmaWxlbmFtZSk7Cisg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGRlZmF1
bHQgb3V0cHV0IGZpbGUgaXMgc3Rkb3V0ICovCisgICAgZnAgPSB3cml0ZV9zdGRvdXQoKTsKKyAg
fQorCiAgIC8qIEFkanVzdCBkZWZhdWx0IGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYnkgcmUtcGFy
c2luZyB0aGUgb3B0aW9ucyAqLwogICBmaWxlX2luZGV4ID0gcGFyc2Vfc3dpdGNoZXMoJmRzdGlu
Zm8sIGFyZ2MsIGFyZ3YsIDAsIFRSVUUpOwogCiAgIC8qIFNwZWNpZnkgZGF0YSBkZXN0aW5hdGlv
biBmb3IgY29tcHJlc3Npb24gKi8KLSAganBlZ19zdGRpb19kZXN0KCZkc3RpbmZvLCBvdXRwdXRf
ZmlsZSk7CisgIGpwZWdfc3RkaW9fZGVzdCgmZHN0aW5mbywgZnApOwogCiAgIC8qIFN0YXJ0IGNv
bXByZXNzb3IgKG5vdGUgbm8gaW1hZ2UgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuIGhlcmUpICov
CiAgIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzKCZkc3RpbmZvLCBkc3RfY29lZl9hcnJheXMpOwpA
QCAtNDg4LDExICs1MzIsOSBAQAogICAodm9pZCkganBlZ19maW5pc2hfZGVjb21wcmVzcygmc3Jj
aW5mbyk7CiAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZzcmNpbmZvKTsKIAotICAvKiBDbG9z
ZSBmaWxlcywgaWYgd2Ugb3BlbmVkIHRoZW0gKi8KLSAgaWYgKGlucHV0X2ZpbGUgIT0gc3RkaW4p
Ci0gICAgZmNsb3NlKGlucHV0X2ZpbGUpOwotICBpZiAob3V0cHV0X2ZpbGUgIT0gc3Rkb3V0KQot
ICAgIGZjbG9zZShvdXRwdXRfZmlsZSk7CisgIC8qIENsb3NlIG91dHB1dCBmaWxlLCBpZiB3ZSBv
cGVuZWQgaXQgKi8KKyAgaWYgKGZwICE9IHN0ZG91dCkKKyAgICBmY2xvc2UoZnApOwogCiAjaWZk
ZWYgUFJPR1JFU1NfUkVQT1JUCiAgIGVuZF9wcm9ncmVzc19tb25pdG9yKChqX2NvbW1vbl9wdHIp
ICZkc3RpbmZvKTsKLS0tIGpwZWctNmIvdHJhbnN1cHAuYwlTdW4gQXVnIDEwIDEyOjE1OjI2IDE5
OTcKKysrIGpwZWctNmJfcDIwMDMwOTIyL3RyYW5zdXBwLmMJTW9uIFNlcCAyMiAwODo1MDozMyAy
MDAzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHRyYW5zdXBwLmMKICAqCi0gKiBDb3B5cmlnaHQg
KEMpIDE5OTcsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEsIFRo
b21hcyBHLiBMYW5lLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQ
RUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBh
bmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMCw2ICsy
MCw3IEBACiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCiAjaW5j
bHVkZSAidHJhbnN1cHAuaCIJCS8qIE15IG93biBleHRlcm5hbCBpbnRlcmZhY2UgKi8KKyNpbmNs
dWRlIDxjdHlwZS5oPgkJLyogdG8gZGVjbGFyZSBpc2RpZ2l0KCkgKi8KIAogCiAjaWYgVFJBTlNG
T1JNU19TVVBQT1JURUQKQEAgLTI4LDcgKzI5LDggQEAKICAqIExvc3NsZXNzIGltYWdlIHRyYW5z
Zm9ybWF0aW9uIHJvdXRpbmVzLiAgVGhlc2Ugcm91dGluZXMgd29yayBvbiBEQ1QKICAqIGNvZWZm
aWNpZW50IGFycmF5cyBhbmQgdGh1cyBkbyBub3QgcmVxdWlyZSBhbnkgbG9zc3kgZGVjb21wcmVz
c2lvbgogICogb3IgcmVjb21wcmVzc2lvbiBvZiB0aGUgaW1hZ2UuCi0gKiBUaGFua3MgdG8gR3Vp
ZG8gVm9sbGJlZGluZyBmb3IgdGhlIGluaXRpYWwgZGVzaWduIGFuZCBjb2RlIG9mIHRoaXMgZmVh
dHVyZS4KKyAqIFRoYW5rcyB0byBHdWlkbyBWb2xsYmVkaW5nIGZvciB0aGUgaW5pdGlhbCBkZXNp
Z24gYW5kIGNvZGUgb2YgdGhpcyBmZWF0dXJlLAorICogYW5kIHRvIEJlbiBKYWNrc29uIGZvciBp
bnRyb2R1Y2luZyB0aGUgY3JvcHBpbmcgZmVhdHVyZS4KICAqCiAgKiBIb3Jpem9udGFsIGZsaXBw
aW5nIGlzIGRvbmUgaW4tcGxhY2UsIHVzaW5nIGEgc2luZ2xlIHRvcC10by1ib3R0b20KICAqIHBh
c3MgdGhyb3VnaCB0aGUgdmlydHVhbCBzb3VyY2UgYXJyYXkuICBJdCB3aWxsIHRodXMgYmUgbXVj
aCB0aGUKQEAgLTQyLDYgKzQ0LDEzIEBACiAgKiBhcnJheXMgZm9yIG1vc3Qgb2YgdGhlIHRyYW5z
Zm9ybXMuICBUaGF0IGNvdWxkIHJlc3VsdCBpbiBtdWNoIHRocmFzaGluZwogICogaWYgdGhlIGlt
YWdlIGlzIGxhcmdlciB0aGFuIG1haW4gbWVtb3J5LgogICoKKyAqIElmIGNyb3BwaW5nIG9yIHRy
aW1taW5nIGlzIGludm9sdmVkLCB0aGUgZGVzdGluYXRpb24gYXJyYXlzIG1heSBiZSBzbWFsbGVy
CisgKiB0aGFuIHRoZSBzb3VyY2UgYXJyYXlzLiAgTm90ZSBpdCBpcyBub3QgcG9zc2libGUgdG8g
ZG8gaG9yaXpvbnRhbCBmbGlwCisgKiBpbi1wbGFjZSB3aGVuIGEgbm9uemVybyBZIGNyb3Agb2Zm
c2V0IGlzIHNwZWNpZmllZCwgc2luY2Ugd2UnZCBoYXZlIHRvIG1vdmUKKyAqIGRhdGEgZnJvbSBv
bmUgYmxvY2sgcm93IHRvIGFub3RoZXIgYnV0IHRoZSB2aXJ0dWFsIGFycmF5IG1hbmFnZXIgZG9l
c24ndAorICogZ3VhcmFudGVlIHdlIGNhbiB0b3VjaCBtb3JlIHRoYW4gb25lIHJvdyBhdCBhIHRp
bWUuICBTbyBpbiB0aGF0IGNhc2UsCisgKiB3ZSBoYXZlIHRvIHVzZSBhIHNlcGFyYXRlIGRlc3Rp
bmF0aW9uIGFycmF5LgorICoKICAqIFNvbWUgbm90ZXMgYWJvdXQgdGhlIG9wZXJhdGluZyBlbnZp
cm9ubWVudCBvZiB0aGUgaW5kaXZpZHVhbCB0cmFuc2Zvcm0KICAqIHJvdXRpbmVzOgogICogMS4g
Qm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB2aXJ0dWFsIGFycmF5cyBhcmUgYWxsb2Nh
dGVkIGZyb20gdGhlCkBAIC01NCwyMCArNjMsNjUgQEAKICAqICAgIGFuZCB3ZSBtYXkgYXMgd2Vs
bCB0YWtlIHRoYXQgYXMgdGhlIGVmZmVjdGl2ZSBpTUNVIHNpemUuCiAgKiA0LiBXaGVuICJ0cmlt
IiBpcyBpbiBlZmZlY3QsIHRoZSBkZXN0aW5hdGlvbidzIGRpbWVuc2lvbnMgd2lsbCBiZSB0aGUK
ICAqICAgIHRyaW1tZWQgdmFsdWVzIGJ1dCB0aGUgc291cmNlJ3Mgd2lsbCBiZSB1bnRyaW1tZWQu
Ci0gKiA1LiBBbGwgdGhlIHJvdXRpbmVzIGFzc3VtZSB0aGF0IHRoZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGJ1ZmZlcnMgYXJlCisgKiA1LiBXaGVuICJjcm9wIiBpcyBpbiBlZmZlY3QsIHRoZSBk
ZXN0aW5hdGlvbidzIGRpbWVuc2lvbnMgd2lsbCBiZSB0aGUKKyAqICAgIGNyb3BwZWQgdmFsdWVz
IGJ1dCB0aGUgc291cmNlJ3Mgd2lsbCBiZSB1bmNyb3BwZWQuICBFYWNoIHRyYW5zZm9ybQorICog
ICAgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcGlja2luZyB1cCBzb3VyY2UgZGF0YSBzdGFy
dGluZyBhdCB0aGUKKyAqICAgIGNvcnJlY3QgWCBhbmQgWSBvZmZzZXQgZm9yIHRoZSBjcm9wIHJl
Z2lvbi4gIChUaGUgWCBhbmQgWSBvZmZzZXRzCisgKiAgICBwYXNzZWQgdG8gdGhlIHRyYW5zZm9y
bSByb3V0aW5lcyBhcmUgbWVhc3VyZWQgaW4gaU1DVSBibG9ja3Mgb2YgdGhlCisgKiAgICBkZXN0
aW5hdGlvbi4pCisgKiA2LiBBbGwgdGhlIHJvdXRpbmVzIGFzc3VtZSB0aGF0IHRoZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlCiAgKiAgICBwYWRkZWQgb3V0IHRvIGEgZnVsbCBp
TUNVIGJvdW5kYXJ5LiAgVGhpcyBpcyB0cnVlLCBhbHRob3VnaCBmb3IgdGhlCiAgKiAgICBzb3Vy
Y2UgYnVmZmVyIGl0IGlzIGFuIHVuZG9jdW1lbnRlZCBwcm9wZXJ0eSBvZiBqZGNvZWZjdC5jLgot
ICogTm90ZXMgMiwzLDQgYm9pbCBkb3duIHRvIHRoaXM6IGdlbmVyYWxseSB3ZSBzaG91bGQgdXNl
IHRoZSBkZXN0aW5hdGlvbidzCi0gKiBkaW1lbnNpb25zIGFuZCBpZ25vcmUgdGhlIHNvdXJjZSdz
LgogICovCiAKIAogTE9DQUwodm9pZCkKLWRvX2ZsaXBfaCAoal9kZWNvbXByZXNzX3B0ciBzcmNp
bmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19j
b2VmX2FycmF5cykKLS8qIEhvcml6b250YWwgZmxpcDsgZG9uZSBpbi1wbGFjZSwgc28gbm8gc2Vw
YXJhdGUgZGVzdCBhcnJheSBpcyByZXF1aXJlZCAqLworZG9fY3JvcCAoal9kZWNvbXByZXNzX3B0
ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCSBKRElNRU5TSU9OIHhfY3JvcF9v
ZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKwkganZpcnRfYmFycmF5X3B0ciAqc3Jj
X2NvZWZfYXJyYXlzLAorCSBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiBD
cm9wLiAgVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBubyByb3RhdGUvZmxpcCBpcyByZXF1ZXN0ZWQg
d2l0aCB0aGUgY3JvcC4gKi8KIHsKLSAgSkRJTUVOU0lPTiBNQ1VfY29scywgY29tcF93aWR0aCwg
YmxrX3gsIGJsa195OworICBKRElNRU5TSU9OIGRzdF9ibGtfeSwgeF9jcm9wX2Jsb2NrcywgeV9j
cm9wX2Jsb2NrczsKKyAgaW50IGNpLCBvZmZzZXRfeTsKKyAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZl
ciwgZHN0X2J1ZmZlcjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICAvKiBX
ZSBzaW1wbHkgaGF2ZSB0byBjb3B5IHRoZSByaWdodCBhbW91bnQgb2YgZGF0YSAodGhlIGRlc3Rp
bmF0aW9uJ3MKKyAgICogaW1hZ2Ugc2l6ZSkgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIFggYW5kIFkg
b2Zmc2V0cyBpbiB0aGUgc291cmNlLgorICAgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5m
by0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9p
bmZvICsgY2k7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5o
X3NhbXBfZmFjdG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0
ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNv
bXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CisJIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBf
ZmFjdG9yKSB7CisgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0
X2JhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwg
ZHN0X2Jsa195LAorCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7
CisgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkK
KwkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKwkgZHN0X2Js
a195ICsgeV9jcm9wX2Jsb2NrcywKKwkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0
b3IsIEZBTFNFKTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHIt
PnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKKwlqY29weV9ibG9ja19yb3coc3JjX2J1ZmZl
cltvZmZzZXRfeV0gKyB4X2Nyb3BfYmxvY2tzLAorCQkJZHN0X2J1ZmZlcltvZmZzZXRfeV0sCisJ
CQljb21wcHRyLT53aWR0aF9pbl9ibG9ja3MpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisK
K0xPQ0FMKHZvaWQpCitkb19mbGlwX2hfbm9fY3JvcCAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZv
LCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCQkgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQs
CisJCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cykKKy8qIEhvcml6b250YWwg
ZmxpcDsgZG9uZSBpbi1wbGFjZSwgc28gbm8gc2VwYXJhdGUgZGVzdCBhcnJheSBpcyByZXF1aXJl
ZC4KKyAqIE5COiB0aGlzIG9ubHkgd29ya3Mgd2hlbiB5X2Nyb3Bfb2Zmc2V0IGlzIHplcm8uCisg
Ki8KK3sKKyAgSkRJTUVOU0lPTiBNQ1VfY29scywgY29tcF93aWR0aCwgYmxrX3gsIGJsa195LCB4
X2Nyb3BfYmxvY2tzOwogICBpbnQgY2ksIGssIG9mZnNldF95OwogICBKQkxPQ0tBUlJBWSBidWZm
ZXI7CiAgIEpDT0VGUFRSIHB0cjEsIHB0cjI7CkBAIC03OSwxNyArMTMzLDE5IEBACiAgICAqIG1p
cnJvcmluZyBieSBjaGFuZ2luZyB0aGUgc2lnbnMgb2Ygb2RkLW51bWJlcmVkIGNvbHVtbnMuCiAg
ICAqIFBhcnRpYWwgaU1DVXMgYXQgdGhlIHJpZ2h0IGVkZ2UgYXJlIGxlZnQgdW50b3VjaGVkLgog
ICAgKi8KLSAgTUNVX2NvbHMgPSBkc3RpbmZvLT5pbWFnZV93aWR0aCAvIChkc3RpbmZvLT5tYXhf
aF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOworICBNQ1VfY29scyA9IHNyY2luZm8tPmltYWdlX3dp
ZHRoIC8gKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSk7CiAKICAgZm9yIChj
aSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRy
ID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CiAgICAgY29tcF93aWR0aCA9IE1DVV9jb2xzICog
Y29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNl
dCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChibGtfeSA9IDA7IGJsa195IDwg
Y29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKIAkgYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2Zh
Y3RvcikgewogICAgICAgYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJh
eSkKIAkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwgYmxrX3ks
CiAJIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKICAgICAgIGZv
ciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNl
dF95KyspIHsKKwkvKiBEbyB0aGUgbWlycm9yaW5nICovCiAJZm9yIChibGtfeCA9IDA7IGJsa194
ICogMiA8IGNvbXBfd2lkdGg7IGJsa194KyspIHsKIAkgIHB0cjEgPSBidWZmZXJbb2Zmc2V0X3ld
W2Jsa194XTsKIAkgIHB0cjIgPSBidWZmZXJbb2Zmc2V0X3ldW2NvbXBfd2lkdGggLSBibGtfeCAt
IDFdOwpAQCAtMTA1LDYgKzE2MSw3OSBAQAogCSAgICAqcHRyMisrID0gLXRlbXAxOwogCSAgfQog
CX0KKwlpZiAoeF9jcm9wX2Jsb2NrcyA+IDApIHsKKwkgIC8qIE5vdyBsZWZ0LWp1c3RpZnkgdGhl
IHBvcnRpb24gb2YgdGhlIGRhdGEgdG8gYmUga2VwdC4KKwkgICAqIFdlIGNhbid0IHVzZSBhIHNp
bmdsZSBqY29weV9ibG9ja19yb3coKSBjYWxsIGJlY2F1c2UgdGhhdCByb3V0aW5lCisJICAgKiBk
ZXBlbmRzIG9uIG1lbWNweSgpLCB3aG9zZSBiZWhhdmlvciBpcyB1bnNwZWNpZmllZCBmb3Igb3Zl
cmxhcHBpbmcKKwkgICAqIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlYXMuICBTaWdoLgorCSAg
ICovCisJICBmb3IgKGJsa194ID0gMDsgYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7
IGJsa194KyspIHsKKwkgICAgamNvcHlfYmxvY2tfcm93KGJ1ZmZlcltvZmZzZXRfeV0gKyBibGtf
eCArIHhfY3JvcF9ibG9ja3MsCisJCQkgICAgYnVmZmVyW29mZnNldF95XSArIGJsa194LAorCQkJ
ICAgIChKRElNRU5TSU9OKSAxKTsKKwkgIH0KKwl9CisgICAgICB9CisgICAgfQorICB9Cit9CisK
KworTE9DQUwodm9pZCkKK2RvX2ZsaXBfaCAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2Nv
bXByZXNzX3B0ciBkc3RpbmZvLAorCSAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVO
U0lPTiB5X2Nyb3Bfb2Zmc2V0LAorCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5
cywKKwkgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisvKiBIb3Jpem9udGFs
IGZsaXAgaW4gZ2VuZXJhbCBjcm9wcGluZyBjYXNlICovCit7CisgIEpESU1FTlNJT04gTUNVX2Nv
bHMsIGNvbXBfd2lkdGgsIGRzdF9ibGtfeCwgZHN0X2Jsa195OworICBKRElNRU5TSU9OIHhfY3Jv
cF9ibG9ja3MsIHlfY3JvcF9ibG9ja3M7CisgIGludCBjaSwgaywgb2Zmc2V0X3k7CisgIEpCTE9D
S0FSUkFZIHNyY19idWZmZXIsIGRzdF9idWZmZXI7CisgIEpCTE9DS1JPVyBzcmNfcm93X3B0ciwg
ZHN0X3Jvd19wdHI7CisgIEpDT0VGUFRSIHNyY19wdHIsIGRzdF9wdHI7CisgIGpwZWdfY29tcG9u
ZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogSGVyZSB3ZSBtdXN0IG91dHB1dCBpbnRvIGEgc2Vw
YXJhdGUgYXJyYXkgYmVjYXVzZSB3ZSBjYW4ndCB0b3VjaAorICAgKiBkaWZmZXJlbnQgcm93cyBv
ZiBhIHNpbmdsZSB2aXJ0dWFsIGFycmF5IHNpbXVsdGFuZW91c2x5LiAgT3RoZXJ3aXNlLAorICAg
KiB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoZSByb3V0aW5lIGFib3ZlLgorICAg
Ki8KKyAgTUNVX2NvbHMgPSBzcmNpbmZvLT5pbWFnZV93aWR0aCAvIChkc3RpbmZvLT5tYXhfaF9z
YW1wX2ZhY3RvciAqIERDVFNJWkUpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51
bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGRzdGluZm8tPmNvbXBfaW5mbyAr
IGNpOworICAgIGNvbXBfd2lkdGggPSBNQ1VfY29scyAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7
CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFj
dG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+dl9zYW1w
X2ZhY3RvcjsKKyAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhl
aWdodF9pbl9ibG9ja3M7CisJIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7
CisgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkK
KwkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195
LAorCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICBz
cmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKwkoKGpfY29t
bW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKwkgZHN0X2Jsa195ICsgeV9j
cm9wX2Jsb2NrcywKKwkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNF
KTsKKyAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9m
YWN0b3I7IG9mZnNldF95KyspIHsKKwlkc3Rfcm93X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ld
OworCXNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeV07CisJZm9yIChkc3RfYmxrX3gg
PSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7IGRzdF9ibGtfeCsrKSB7
CisJICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKwkgICAg
LyogRG8gdGhlIG1pcnJvcmFibGUgYmxvY2tzICovCisJICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0
cltkc3RfYmxrX3hdOworCSAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbY29tcF93aWR0aCAtIHhf
Y3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLSAxXTsKKwkgICAgLyogdGhpcyB1bnJvbGxlZCBsb29w
IGRvZXNuJ3QgbmVlZCB0byBrbm93IHdoaWNoIHJvdyBpdCdzIG9uLi4uICovCisJICAgIGZvciAo
ayA9IDA7IGsgPCBEQ1RTSVpFMjsgayArPSAyKSB7CisJICAgICAgKmRzdF9wdHIrKyA9ICpzcmNf
cHRyKys7CSAvKiBjb3B5IGV2ZW4gY29sdW1uICovCisJICAgICAgKmRzdF9wdHIrKyA9IC0gKnNy
Y19wdHIrKzsgLyogY29weSBvZGQgY29sdW1uIHdpdGggc2lnbiBjaGFuZ2UgKi8KKwkgICAgfQor
CSAgfSBlbHNlIHsKKwkgICAgLyogQ29weSBsYXN0IHBhcnRpYWwgYmxvY2socykgdmVyYmF0aW0g
Ki8KKwkgICAgamNvcHlfYmxvY2tfcm93KHNyY19yb3dfcHRyICsgZHN0X2Jsa194ICsgeF9jcm9w
X2Jsb2NrcywKKwkJCSAgICBkc3Rfcm93X3B0ciArIGRzdF9ibGtfeCwKKwkJCSAgICAoSkRJTUVO
U0lPTikgMSk7CisJICB9CisJfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTEzLDExICsyNDIs
MTMgQEAKIAogTE9DQUwodm9pZCkKIGRvX2ZsaXBfdiAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZv
LCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCSAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwg
SkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAogCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2Vm
X2FycmF5cywKIAkgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCiAvKiBWZXJ0
aWNhbCBmbGlwICovCiB7CiAgIEpESU1FTlNJT04gTUNVX3Jvd3MsIGNvbXBfaGVpZ2h0LCBkc3Rf
YmxrX3gsIGRzdF9ibGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxv
Y2tzOwogICBpbnQgY2ksIGksIGosIG9mZnNldF95OwogICBKQkxPQ0tBUlJBWSBzcmNfYnVmZmVy
LCBkc3RfYnVmZmVyOwogICBKQkxPQ0tST1cgc3JjX3Jvd19wdHIsIGRzdF9yb3dfcHRyOwpAQCAt
MTMxLDMzICsyNjIsMzggQEAKICAgICogb2Ygb2RkLW51bWJlcmVkIHJvd3MuCiAgICAqIFBhcnRp
YWwgaU1DVXMgYXQgdGhlIGJvdHRvbSBlZGdlIGFyZSBjb3BpZWQgdmVyYmF0aW0uCiAgICAqLwot
ICBNQ1Vfcm93cyA9IGRzdGluZm8tPmltYWdlX2hlaWdodCAvIChkc3RpbmZvLT5tYXhfdl9zYW1w
X2ZhY3RvciAqIERDVFNJWkUpOworICBNQ1Vfcm93cyA9IHNyY2luZm8tPmltYWdlX2hlaWdodCAv
IChkc3RpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOwogCiAgIGZvciAoY2kgPSAw
OyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CiAgICAgY29tcHB0ciA9IGRz
dGluZm8tPmNvbXBfaW5mbyArIGNpOwogICAgIGNvbXBfaGVpZ2h0ID0gTUNVX3Jvd3MgKiBjb21w
cHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICog
Y29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNl
dCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3Rf
YmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwogCSBkc3RfYmxrX3kgKz0gY29tcHB0
ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5h
Y2Nlc3NfdmlydF9iYXJyYXkpCiAJKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2Fy
cmF5c1tjaV0sIGRzdF9ibGtfeSwKIAkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0
b3IsIFRSVUUpOwotICAgICAgaWYgKGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisgICAgICBp
ZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CiAJLyogUm93IGlz
IHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLwogCXNyY19idWZmZXIgPSAoKnNyY2luZm8t
Pm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQogCSAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIHNy
Y19jb2VmX2FycmF5c1tjaV0sCi0JICAgY29tcF9oZWlnaHQgLSBkc3RfYmxrX3kgLSAoSkRJTUVO
U0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKwkgICBjb21wX2hlaWdodCAtIHlfY3JvcF9i
bG9ja3MgLSBkc3RfYmxrX3kgLQorCSAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFj
dG9yLAogCSAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CiAg
ICAgICB9IGVsc2UgewogCS8qIEJvdHRvbS1lZGdlIGJsb2NrcyB3aWxsIGJlIGNvcGllZCB2ZXJi
YXRpbS4gKi8KIAlzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJh
eSkKLQkgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBkc3Rf
YmxrX3ksCisJICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwK
KwkgICBkc3RfYmxrX3kgKyB5X2Nyb3BfYmxvY2tzLAogCSAgIChKRElNRU5TSU9OKSBjb21wcHRy
LT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CiAgICAgICB9CiAgICAgICBmb3IgKG9mZnNldF95ID0g
MDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7Ci0JaWYg
KGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisJaWYgKHlfY3JvcF9ibG9ja3MgKyBkc3RfYmxr
X3kgPCBjb21wX2hlaWdodCkgewogCSAgLyogUm93IGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBh
cmVhLiAqLwogCSAgZHN0X3Jvd19wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XTsKIAkgIHNyY19y
b3dfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT52X3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3kgLSAx
XTsKKwkgIHNyY19yb3dfcHRyICs9IHhfY3JvcF9ibG9ja3M7CiAJICBmb3IgKGRzdF9ibGtfeCA9
IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKIAkgICAgICAgZHN0X2Js
a194KyspIHsKIAkgICAgZHN0X3B0ciA9IGRzdF9yb3dfcHRyW2RzdF9ibGtfeF07CkBAIC0xNzMs
NyArMzA5LDggQEAKIAkgIH0KIAl9IGVsc2UgewogCSAgLyogSnVzdCBjb3B5IHJvdyB2ZXJiYXRp
bS4gKi8KLQkgIGpjb3B5X2Jsb2NrX3JvdyhzcmNfYnVmZmVyW29mZnNldF95XSwgZHN0X2J1ZmZl
cltvZmZzZXRfeV0sCisJICBqY29weV9ibG9ja19yb3coc3JjX2J1ZmZlcltvZmZzZXRfeV0gKyB4
X2Nyb3BfYmxvY2tzLAorCQkJICBkc3RfYnVmZmVyW29mZnNldF95XSwKIAkJCSAgY29tcHB0ci0+
d2lkdGhfaW5fYmxvY2tzKTsKIAl9CiAgICAgICB9CkBAIC0xODQsMTEgKzMyMSwxMiBAQAogCiBM
T0NBTCh2b2lkKQogZG9fdHJhbnNwb3NlIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29t
cHJlc3NfcHRyIGRzdGluZm8sCisJICAgICAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0LCBKRElN
RU5TSU9OIHlfY3JvcF9vZmZzZXQsCiAJICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZf
YXJyYXlzLAogCSAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKIC8qIFRy
YW5zcG9zZSBzb3VyY2UgaW50byBkZXN0aW5hdGlvbiAqLwogewotICBKRElNRU5TSU9OIGRzdF9i
bGtfeCwgZHN0X2Jsa195OworICBKRElNRU5TSU9OIGRzdF9ibGtfeCwgZHN0X2Jsa195LCB4X2Ny
b3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOwogICBpbnQgY2ksIGksIGosIG9mZnNldF94LCBvZmZz
ZXRfeTsKICAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwgZHN0X2J1ZmZlcjsKICAgSkNPRUZQVFIg
c3JjX3B0ciwgZHN0X3B0cjsKQEAgLTIwMSw2ICszMzksOCBAQAogICAgKi8KICAgZm9yIChjaSA9
IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0g
ZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZz
ZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bf
b2Zmc2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7
IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CiAJIGRzdF9ibGtfeSArPSBj
b21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5t
ZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKQEAgLTIxMCwxMSArMzUwLDEyIEBACiAJZm9yIChkc3Rf
YmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CiAJICAgICBk
c3RfYmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgewogCSAgc3JjX2J1ZmZlciA9ICgq
c3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAgICgoal9jb21tb25fcHRyKSBz
cmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3gsCisJICAgICgoal9jb21tb25f
cHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorCSAgICAgZHN0X2Jsa194ICsgeF9j
cm9wX2Jsb2NrcywKIAkgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBG
QUxTRSk7CiAJICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBf
ZmFjdG9yOyBvZmZzZXRfeCsrKSB7Ci0JICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94
XVtkc3RfYmxrX3kgKyBvZmZzZXRfeV07CiAJICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNl
dF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisJICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29m
ZnNldF94XVtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOwogCSAgICBmb3Ig
KGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQogCSAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpF
OyBqKyspCiAJCWRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CkBA
IC0yMjgsNiArMzY5LDcgQEAKIAogTE9DQUwodm9pZCkKIGRvX3JvdF85MCAoal9kZWNvbXByZXNz
X3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCSAgIEpESU1FTlNJT04geF9j
cm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAogCSAgIGp2aXJ0X2JhcnJheV9w
dHIgKnNyY19jb2VmX2FycmF5cywKIAkgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJh
eXMpCiAvKiA5MCBkZWdyZWUgcm90YXRpb24gaXMgZXF1aXZhbGVudCB0bwpAQCAtMjM3LDYgKzM3
OSw3IEBACiAgKi8KIHsKICAgSkRJTUVOU0lPTiBNQ1VfY29scywgY29tcF93aWR0aCwgZHN0X2Js
a194LCBkc3RfYmxrX3k7CisgIEpESU1FTlNJT04geF9jcm9wX2Jsb2NrcywgeV9jcm9wX2Jsb2Nr
czsKICAgaW50IGNpLCBpLCBqLCBvZmZzZXRfeCwgb2Zmc2V0X3k7CiAgIEpCTE9DS0FSUkFZIHNy
Y19idWZmZXIsIGRzdF9idWZmZXI7CiAgIEpDT0VGUFRSIHNyY19wdHIsIGRzdF9wdHI7CkBAIC0y
NDYsMTEgKzM4OSwxMyBAQAogICAgKiBhdCB0aGUgKG91dHB1dCkgcmlnaHQgZWRnZSBwcm9wZXJs
eS4gIFRoZXkganVzdCBnZXQgdHJhbnNwb3NlZCBhbmQKICAgICogbm90IG1pcnJvcmVkLgogICAg
Ki8KLSAgTUNVX2NvbHMgPSBkc3RpbmZvLT5pbWFnZV93aWR0aCAvIChkc3RpbmZvLT5tYXhfaF9z
YW1wX2ZhY3RvciAqIERDVFNJWkUpOworICBNQ1VfY29scyA9IHNyY2luZm8tPmltYWdlX2hlaWdo
dCAvIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOwogCiAgIGZvciAoY2kg
PSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CiAgICAgY29tcHB0ciA9
IGRzdGluZm8tPmNvbXBfaW5mbyArIGNpOwogICAgIGNvbXBfd2lkdGggPSBNQ1VfY29scyAqIGNv
bXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQg
KiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zm
c2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRz
dF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CiAJIGRzdF9ibGtfeSArPSBjb21w
cHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0t
PmFjY2Vzc192aXJ0X2JhcnJheSkKQEAgLTI1OSwxNSArNDA0LDI2IEBACiAgICAgICBmb3IgKG9m
ZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsr
KSB7CiAJZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9i
bG9ja3M7CiAJICAgICBkc3RfYmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgewotCSAg
c3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAgICgo
al9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3gsCi0J
ICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworCSAgaWYg
KHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisJICAgIC8qIEJsb2Nr
IGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworCSAgICBzcmNfYnVmZmVyID0gKCpz
cmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKwkgICAgICAoKGpfY29tbW9uX3B0cikg
c3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKwkgICAgICAgY29tcF93aWR0aCAtIHhfY3Jv
cF9ibG9ja3MgLSBkc3RfYmxrX3ggLQorCSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9z
YW1wX2ZhY3RvciwKKwkgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3Is
IEZBTFNFKTsKKwkgIH0gZWxzZSB7CisJICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2Vk
IGJ1dCBub3QgbWlycm9yZWQuICovCisJICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+
YWNjZXNzX3ZpcnRfYmFycmF5KQorCSAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNf
Y29lZl9hcnJheXNbY2ldLAorCSAgICAgICBkc3RfYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAorCSAg
ICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworCSAgfQog
CSAgZm9yIChvZmZzZXRfeCA9IDA7IG9mZnNldF94IDwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjsg
b2Zmc2V0X3grKykgewotCSAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF1bZHN0X2Js
a195ICsgb2Zmc2V0X3ldOwotCSAgICBpZiAoZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworCSAg
ICBkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOwor
CSAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKIAkgICAg
ICAvKiBCbG9jayBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KLQkgICAgICBkc3Rf
cHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV0KLQkJW2NvbXBfd2lkdGggLSBkc3RfYmxrX3ggLSBv
ZmZzZXRfeCAtIDFdOworCSAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPmhfc2Ft
cF9mYWN0b3IgLSBvZmZzZXRfeCAtIDFdCisJCVtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3Jv
cF9ibG9ja3NdOwogCSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKIAkJZm9y
IChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKIAkJICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNy
Y19wdHJbaSpEQ1RTSVpFK2pdOwpAQCAtMjc3LDcgKzQzMyw4IEBACiAJICAgICAgfQogCSAgICB9
IGVsc2UgewogCSAgICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2VkIGJ1dCBub3QgbWly
cm9yZWQuICovCi0JICAgICAgZHN0X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ldW2RzdF9ibGtf
eCArIG9mZnNldF94XTsKKwkgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KKwkJ
W2RzdF9ibGtfeSArIG9mZnNldF95ICsgeV9jcm9wX2Jsb2Nrc107CiAJICAgICAgZm9yIChpID0g
MDsgaSA8IERDVFNJWkU7IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKIAkJ
ICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwpAQCAtMjkyLDYg
KzQ0OSw3IEBACiAKIExPQ0FMKHZvaWQpCiBkb19yb3RfMjcwIChqX2RlY29tcHJlc3NfcHRyIHNy
Y2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisJICAgIEpESU1FTlNJT04geF9jcm9wX29m
ZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAogCSAgICBqdmlydF9iYXJyYXlfcHRyICpz
cmNfY29lZl9hcnJheXMsCiAJICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykK
IC8qIDI3MCBkZWdyZWUgcm90YXRpb24gaXMgZXF1aXZhbGVudCB0bwpAQCAtMzAxLDYgKzQ1OSw3
IEBACiAgKi8KIHsKICAgSkRJTUVOU0lPTiBNQ1Vfcm93cywgY29tcF9oZWlnaHQsIGRzdF9ibGtf
eCwgZHN0X2Jsa195OworICBKRElNRU5TSU9OIHhfY3JvcF9ibG9ja3MsIHlfY3JvcF9ibG9ja3M7
CiAgIGludCBjaSwgaSwgaiwgb2Zmc2V0X3gsIG9mZnNldF95OwogICBKQkxPQ0tBUlJBWSBzcmNf
YnVmZmVyLCBkc3RfYnVmZmVyOwogICBKQ09FRlBUUiBzcmNfcHRyLCBkc3RfcHRyOwpAQCAtMzEw
LDExICs0NjksMTMgQEAKICAgICogYXQgdGhlIChvdXRwdXQpIGJvdHRvbSBlZGdlIHByb3Blcmx5
LiAgVGhleSBqdXN0IGdldCB0cmFuc3Bvc2VkIGFuZAogICAgKiBub3QgbWlycm9yZWQuCiAgICAq
LwotICBNQ1Vfcm93cyA9IGRzdGluZm8tPmltYWdlX2hlaWdodCAvIChkc3RpbmZvLT5tYXhfdl9z
YW1wX2ZhY3RvciAqIERDVFNJWkUpOworICBNQ1Vfcm93cyA9IHNyY2luZm8tPmltYWdlX3dpZHRo
IC8gKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSk7CiAKICAgZm9yIChjaSA9
IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0g
ZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CiAgICAgY29tcF9oZWlnaHQgPSBNQ1Vfcm93cyAqIGNv
bXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQg
KiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zm
c2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRz
dF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7CiAJIGRzdF9ibGtfeSArPSBjb21w
cHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0t
PmFjY2Vzc192aXJ0X2JhcnJheSkKQEAgLTMyNCwxNCArNDg1LDE1IEBACiAJZm9yIChkc3RfYmxr
X3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CiAJICAgICBkc3Rf
YmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgewogCSAgc3JjX2J1ZmZlciA9ICgqc3Jj
aW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAgICgoal9jb21tb25fcHRyKSBzcmNp
bmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3gsCisJICAgICgoal9jb21tb25fcHRy
KSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorCSAgICAgZHN0X2Jsa194ICsgeF9jcm9w
X2Jsb2NrcywKIAkgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxT
RSk7CiAJICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBfZmFj
dG9yOyBvZmZzZXRfeCsrKSB7CiAJICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtk
c3RfYmxrX3ggKyBvZmZzZXRfeF07Ci0JICAgIGlmIChkc3RfYmxrX3kgPCBjb21wX2hlaWdodCkg
eworCSAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CiAJ
ICAgICAgLyogQmxvY2sgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCiAJICAgICAg
c3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdCi0JCVtjb21wX2hlaWdodCAtIGRzdF9ibGtf
eSAtIG9mZnNldF95IC0gMV07CisJCVtjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3Rf
YmxrX3kgLSBvZmZzZXRfeSAtIDFdOwogCSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBp
KyspIHsKIAkJZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgewogCQkgIGRzdF9wdHJbaipE
Q1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CkBAIC0zNDEsNyArNTAzLDggQEAKIAkg
ICAgICB9CiAJICAgIH0gZWxzZSB7CiAJICAgICAgLyogRWRnZSBibG9ja3MgYXJlIHRyYW5zcG9z
ZWQgYnV0IG5vdCBtaXJyb3JlZC4gKi8KLQkgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZz
ZXRfeF1bZHN0X2Jsa195ICsgb2Zmc2V0X3ldOworCSAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVy
W29mZnNldF94XQorCQlbZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKIAkg
ICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQogCQlmb3IgKGogPSAwOyBqIDwgRENU
U0laRTsgaisrKQogCQkgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUr
al07CkBAIC0zNTYsNiArNTE5LDcgQEAKIAogTE9DQUwodm9pZCkKIGRvX3JvdF8xODAgKGpfZGVj
b21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKKwkgICAgSkRJTUVO
U0lPTiB4X2Nyb3Bfb2Zmc2V0LCBKRElNRU5TSU9OIHlfY3JvcF9vZmZzZXQsCiAJICAgIGp2aXJ0
X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKIAkgICAganZpcnRfYmFycmF5X3B0ciAqZHN0
X2NvZWZfYXJyYXlzKQogLyogMTgwIGRlZ3JlZSByb3RhdGlvbiBpcyBlcXVpdmFsZW50IHRvCkBA
IC0zNjUsODkgKzUyOSw5MyBAQAogICovCiB7CiAgIEpESU1FTlNJT04gTUNVX2NvbHMsIE1DVV9y
b3dzLCBjb21wX3dpZHRoLCBjb21wX2hlaWdodCwgZHN0X2Jsa194LCBkc3RfYmxrX3k7CisgIEpE
SU1FTlNJT04geF9jcm9wX2Jsb2NrcywgeV9jcm9wX2Jsb2NrczsKICAgaW50IGNpLCBpLCBqLCBv
ZmZzZXRfeTsKICAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwgZHN0X2J1ZmZlcjsKICAgSkJMT0NL
Uk9XIHNyY19yb3dfcHRyLCBkc3Rfcm93X3B0cjsKICAgSkNPRUZQVFIgc3JjX3B0ciwgZHN0X3B0
cjsKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKIAotICBNQ1VfY29scyA9IGRzdGlu
Zm8tPmltYWdlX3dpZHRoIC8gKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSk7
Ci0gIE1DVV9yb3dzID0gZHN0aW5mby0+aW1hZ2VfaGVpZ2h0IC8gKGRzdGluZm8tPm1heF92X3Nh
bXBfZmFjdG9yICogRENUU0laRSk7CisgIE1DVV9jb2xzID0gc3JjaW5mby0+aW1hZ2Vfd2lkdGgg
LyAoZHN0aW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKTsKKyAgTUNVX3Jvd3MgPSBz
cmNpbmZvLT5pbWFnZV9oZWlnaHQgLyAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RT
SVpFKTsKIAogICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2kr
KykgewogICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKICAgICBjb21wX3dp
ZHRoID0gTUNVX2NvbHMgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIGNvbXBfaGVpZ2h0
ID0gTUNVX3Jvd3MgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3Mg
PSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxv
Y2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChk
c3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwogCSBk
c3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9
ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCiAJKChqX2NvbW1vbl9wdHIpIHNy
Y2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKIAkgKEpESU1FTlNJT04pIGNv
bXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOwotICAgICAgaWYgKGRzdF9ibGtfeSA8IGNvbXBf
aGVpZ2h0KSB7CisgICAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVp
Z2h0KSB7CiAJLyogUm93IGlzIHdpdGhpbiB0aGUgdmVydGljYWxseSBtaXJyb3JhYmxlIGFyZWEu
ICovCiAJc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCiAJ
ICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKLQkgICBjb21w
X2hlaWdodCAtIGRzdF9ibGtfeSAtIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9y
LAorCSAgIGNvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtCisJICAgKEpE
SU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCiAJICAgKEpESU1FTlNJT04pIGNvbXBw
dHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKICAgICAgIH0gZWxzZSB7CiAJLyogQm90dG9tLWVk
Z2Ugcm93cyBhcmUgb25seSBtaXJyb3JlZCBob3Jpem9udGFsbHkuICovCiAJc3JjX2J1ZmZlciA9
ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAoKGpfY29tbW9uX3B0cikg
c3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorCSAgKChqX2NvbW1vbl9w
dHIpIHNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisJICAgZHN0X2Jsa195ICsgeV9jcm9w
X2Jsb2NrcywKIAkgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0Up
OwogICAgICAgfQogICAgICAgZm9yIChvZmZzZXRfeSA9IDA7IG9mZnNldF95IDwgY29tcHB0ci0+
dl9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3krKykgewotCWlmIChkc3RfYmxrX3kgPCBjb21wX2hlaWdo
dCkgeworCWRzdF9yb3dfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV07CisJaWYgKHlfY3JvcF9i
bG9ja3MgKyBkc3RfYmxrX3kgPCBjb21wX2hlaWdodCkgewogCSAgLyogUm93IGlzIHdpdGhpbiB0
aGUgbWlycm9yYWJsZSBhcmVhLiAqLwotCSAgZHN0X3Jvd19wdHIgPSBkc3RfYnVmZmVyW29mZnNl
dF95XTsKIAkgIHNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT52X3NhbXBfZmFjdG9y
IC0gb2Zmc2V0X3kgLSAxXTsKLQkgIC8qIFByb2Nlc3MgdGhlIGJsb2NrcyB0aGF0IGNhbiBiZSBt
aXJyb3JlZCBib3RoIHdheXMuICovCi0JICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8
IGNvbXBfd2lkdGg7IGRzdF9ibGtfeCsrKSB7CisJICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9i
bGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgZHN0X2Jsa194KyspIHsKIAkgICAgZHN0
X3B0ciA9IGRzdF9yb3dfcHRyW2RzdF9ibGtfeF07Ci0JICAgIHNyY19wdHIgPSBzcmNfcm93X3B0
cltjb21wX3dpZHRoIC0gZHN0X2Jsa194IC0gMV07Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RT
SVpFOyBpICs9IDIpIHsKLQkgICAgICAvKiBGb3IgZXZlbiByb3csIG5lZ2F0ZSBldmVyeSBvZGQg
Y29sdW1uLiAqLwotCSAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqICs9IDIpIHsKLQkJ
KmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7Ci0JCSpkc3RfcHRyKysgPSAtICpzcmNfcHRyKys7CisJ
ICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworCSAgICAg
IC8qIFByb2Nlc3MgdGhlIGJsb2NrcyB0aGF0IGNhbiBiZSBtaXJyb3JlZCBib3RoIHdheXMuICov
CisJICAgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tz
IC0gZHN0X2Jsa194IC0gMV07CisJICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0g
MikgeworCQkvKiBGb3IgZXZlbiByb3csIG5lZ2F0ZSBldmVyeSBvZGQgY29sdW1uLiAqLworCQlm
b3IgKGogPSAwOyBqIDwgRENUU0laRTsgaiArPSAyKSB7CisJCSAgKmRzdF9wdHIrKyA9ICpzcmNf
cHRyKys7CisJCSAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKwkJfQorCQkvKiBGb3Igb2Rk
IHJvdywgbmVnYXRlIGV2ZXJ5IGV2ZW4gY29sdW1uLiAqLworCQlmb3IgKGogPSAwOyBqIDwgRENU
U0laRTsgaiArPSAyKSB7CisJCSAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKwkJICAqZHN0
X3B0cisrID0gKnNyY19wdHIrKzsKKwkJfQogCSAgICAgIH0KLQkgICAgICAvKiBGb3Igb2RkIHJv
dywgbmVnYXRlIGV2ZXJ5IGV2ZW4gY29sdW1uLiAqLwotCSAgICAgIGZvciAoaiA9IDA7IGogPCBE
Q1RTSVpFOyBqICs9IDIpIHsKLQkJKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKLQkJKmRzdF9w
dHIrKyA9ICpzcmNfcHRyKys7CisJICAgIH0gZWxzZSB7CisJICAgICAgLyogQW55IHJlbWFpbmlu
ZyByaWdodC1lZGdlIGJsb2NrcyBhcmUgb25seSBtaXJyb3JlZCB2ZXJ0aWNhbGx5LiAqLworCSAg
ICAgIHNyY19wdHIgPSBzcmNfcm93X3B0clt4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194XTsKKwkg
ICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSArPSAyKSB7CisJCWZvciAoaiA9IDA7IGog
PCBEQ1RTSVpFOyBqKyspCisJCSAgKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7CisJCWZvciAoaiA9
IDA7IGogPCBEQ1RTSVpFOyBqKyspCisJCSAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKIAkg
ICAgICB9CiAJICAgIH0KIAkgIH0KLQkgIC8qIEFueSByZW1haW5pbmcgcmlnaHQtZWRnZSBibG9j
a3MgYXJlIG9ubHkgbWlycm9yZWQgdmVydGljYWxseS4gKi8KLQkgIGZvciAoOyBkc3RfYmxrX3gg
PCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7IGRzdF9ibGtfeCsrKSB7Ci0JICAgIGRzdF9wdHIg
PSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOwotCSAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbZHN0
X2Jsa194XTsKLQkgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0gMikgewotCSAgICAg
IGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCi0JCSpkc3RfcHRyKysgPSAqc3JjX3B0cisr
OwotCSAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCi0JCSpkc3RfcHRyKysgPSAt
ICpzcmNfcHRyKys7Ci0JICAgIH0KLQkgIH0KIAl9IGVsc2UgewogCSAgLyogUmVtYWluaW5nIHJv
d3MgYXJlIGp1c3QgbWlycm9yZWQgaG9yaXpvbnRhbGx5LiAqLwotCSAgZHN0X3Jvd19wdHIgPSBk
c3RfYnVmZmVyW29mZnNldF95XTsKIAkgIHNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRf
eV07Ci0JICAvKiBQcm9jZXNzIHRoZSBibG9ja3MgdGhhdCBjYW4gYmUgbWlycm9yZWQuICovCi0J
ICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBfd2lkdGg7IGRzdF9ibGtfeCsr
KSB7Ci0JICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOwotCSAgICBzcmNfcHRy
ID0gc3JjX3Jvd19wdHJbY29tcF93aWR0aCAtIGRzdF9ibGtfeCAtIDFdOwotCSAgICBmb3IgKGkg
PSAwOyBpIDwgRENUU0laRTI7IGkgKz0gMikgewotCSAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0
cisrOwotCSAgICAgICpkc3RfcHRyKysgPSAtICpzcmNfcHRyKys7CisJICBmb3IgKGRzdF9ibGtf
eCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgZHN0X2Jsa194Kysp
IHsKKwkgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisJ
ICAgICAgLyogUHJvY2VzcyB0aGUgYmxvY2tzIHRoYXQgY2FuIGJlIG1pcnJvcmVkLiAqLworCSAg
ICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOworCSAgICAgIHNyY19wdHIgPSBz
cmNfcm93X3B0cltjb21wX3dpZHRoIC0geF9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeCAtIDFdOwor
CSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSArPSAyKSB7CisJCSpkc3RfcHRyKysg
PSAqc3JjX3B0cisrOworCQkqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOworCSAgICAgIH0KKwkg
ICAgfSBlbHNlIHsKKwkgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFy
ZSBvbmx5IGNvcGllZC4gKi8KKwkgICAgICBqY29weV9ibG9ja19yb3coc3JjX3Jvd19wdHIgKyBk
c3RfYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAorCQkJICAgICAgZHN0X3Jvd19wdHIgKyBkc3RfYmxr
X3gsCisJCQkgICAgICAoSkRJTUVOU0lPTikgMSk7CiAJICAgIH0KIAkgIH0KLQkgIC8qIEFueSBy
ZW1haW5pbmcgcmlnaHQtZWRnZSBibG9ja3MgYXJlIG9ubHkgY29waWVkLiAqLwotCSAgZm9yICg7
IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgZHN0X2Jsa194KyspIHsKLQkg
ICAgZHN0X3B0ciA9IGRzdF9yb3dfcHRyW2RzdF9ibGtfeF07Ci0JICAgIHNyY19wdHIgPSBzcmNf
cm93X3B0cltkc3RfYmxrX3hdOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykK
LQkgICAgICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKLQkgIH0KIAl9CiAgICAgICB9CiAgICAg
fQpAQCAtNDU3LDYgKzYyNSw3IEBACiAKIExPQ0FMKHZvaWQpCiBkb190cmFuc3ZlcnNlIChqX2Rl
Y29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisJICAgICAgIEpE
SU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAogCSAgICAg
ICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCiAJICAgICAgIGp2aXJ0X2JhcnJh
eV9wdHIgKmRzdF9jb2VmX2FycmF5cykKIC8qIFRyYW5zdmVyc2UgdHJhbnNwb3NlIGlzIGVxdWl2
YWxlbnQgdG8KQEAgLTQ3MCwxOCArNjM5LDIxIEBACiAgKi8KIHsKICAgSkRJTUVOU0lPTiBNQ1Vf
Y29scywgTUNVX3Jvd3MsIGNvbXBfd2lkdGgsIGNvbXBfaGVpZ2h0LCBkc3RfYmxrX3gsIGRzdF9i
bGtfeTsKKyAgSkRJTUVOU0lPTiB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOwogICBpbnQg
Y2ksIGksIGosIG9mZnNldF94LCBvZmZzZXRfeTsKICAgSkJMT0NLQVJSQVkgc3JjX2J1ZmZlciwg
ZHN0X2J1ZmZlcjsKICAgSkNPRUZQVFIgc3JjX3B0ciwgZHN0X3B0cjsKICAganBlZ19jb21wb25l
bnRfaW5mbyAqY29tcHB0cjsKIAotICBNQ1VfY29scyA9IGRzdGluZm8tPmltYWdlX3dpZHRoIC8g
KGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSk7Ci0gIE1DVV9yb3dzID0gZHN0
aW5mby0+aW1hZ2VfaGVpZ2h0IC8gKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0la
RSk7CisgIE1DVV9jb2xzID0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0IC8gKGRzdGluZm8tPm1heF9o
X3NhbXBfZmFjdG9yICogRENUU0laRSk7CisgIE1DVV9yb3dzID0gc3JjaW5mby0+aW1hZ2Vfd2lk
dGggLyAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKTsKIAogICBmb3IgKGNp
ID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgIGNvbXBwdHIg
PSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKICAgICBjb21wX3dpZHRoID0gTUNVX2NvbHMgKiBj
b21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIGNvbXBfaGVpZ2h0ID0gTUNVX3Jvd3MgKiBjb21w
cHRyLT52X3NhbXBfZmFjdG9yOworICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICog
Y29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNl
dCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3Rf
YmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwogCSBkc3RfYmxrX3kgKz0gY29tcHB0
ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5h
Y2Nlc3NfdmlydF9iYXJyYXkpCkBAIC00OTAsMTcgKzY2MiwyNiBAQAogICAgICAgZm9yIChvZmZz
ZXRfeSA9IDA7IG9mZnNldF95IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3krKykg
ewogCWZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxv
Y2tzOwogCSAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKLQkgIHNy
Y19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSAgICAoKGpf
Y29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa194LAotCSAg
ICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKwkgIGlmICh4
X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworCSAgICAvKiBCbG9jayBp
cyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KKwkgICAgc3JjX2J1ZmZlciA9ICgqc3Jj
aW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisJICAgICAgKChqX2NvbW1vbl9wdHIpIHNy
Y2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisJICAgICAgIGNvbXBfd2lkdGggLSB4X2Nyb3Bf
YmxvY2tzIC0gZHN0X2Jsa194IC0KKwkgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2Ft
cF9mYWN0b3IsCisJICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBG
QUxTRSk7CisJICB9IGVsc2UgeworCSAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFj
Y2Vzc192aXJ0X2JhcnJheSkKKwkgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2Nv
ZWZfYXJyYXlzW2NpXSwKKwkgICAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKwkgICAg
ICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKwkgIH0KIAkg
IGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9m
ZnNldF94KyspIHsKLQkgICAgaWYgKGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7Ci0JICAgICAg
c3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdCi0JCVtjb21wX2hlaWdodCAtIGRzdF9ibGtf
eSAtIG9mZnNldF95IC0gMV07Ci0JICAgICAgaWYgKGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsK
KwkgICAgZHN0X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ldW2RzdF9ibGtfeCArIG9mZnNldF94
XTsKKwkgICAgaWYgKHlfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3kgPCBjb21wX2hlaWdodCkgewor
CSAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgewogCQkv
KiBCbG9jayBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KLQkJZHN0X3B0ciA9IGRz
dF9idWZmZXJbb2Zmc2V0X3ldCi0JCSAgW2NvbXBfd2lkdGggLSBkc3RfYmxrX3ggLSBvZmZzZXRf
eCAtIDFdOworCQlzcmNfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC0g
b2Zmc2V0X3ggLSAxXQorCQkgIFtjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3RfYmxr
X3kgLSBvZmZzZXRfeSAtIDFdOwogCQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CiAJ
CSAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgewogCQkgICAgZHN0X3B0cltqKkRDVFNJ
WkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKQEAgLTUxNiw3ICs2OTcsOCBAQAogCQl9CiAJ
ICAgICAgfSBlbHNlIHsKIAkJLyogUmlnaHQtZWRnZSBibG9ja3MgYXJlIG1pcnJvcmVkIGluIHkg
b25seSAqLwotCQlkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zm
c2V0X3hdOworCQlzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KKwkJICBbY29tcF9oZWln
aHQgLSB5X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa195IC0gb2Zmc2V0X3kgLSAxXTsKIAkJZm9yIChp
ID0gMDsgaSA8IERDVFNJWkU7IGkrKykgewogCQkgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBq
KyspIHsKIAkJICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07
CkBAIC01MjYsMTEgKzcwOCwxMCBAQAogCQl9CiAJICAgICAgfQogCSAgICB9IGVsc2UgewotCSAg
ICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XVtkc3RfYmxrX3kgKyBvZmZzZXRfeV07
Ci0JICAgICAgaWYgKGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKwkgICAgICBpZiAoeF9jcm9w
X2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKIAkJLyogQm90dG9tLWVkZ2UgYmxv
Y2tzIGFyZSBtaXJyb3JlZCBpbiB4IG9ubHkgKi8KLQkJZHN0X3B0ciA9IGRzdF9idWZmZXJbb2Zm
c2V0X3ldCi0JCSAgW2NvbXBfd2lkdGggLSBkc3RfYmxrX3ggLSBvZmZzZXRfeCAtIDFdOworCQlz
cmNfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3ggLSAx
XQorCQkgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOwogCQlmb3IgKGkg
PSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CiAJCSAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGor
KykKIAkJICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CkBA
IC01NDAsNyArNzIxLDggQEAKIAkJfQogCSAgICAgIH0gZWxzZSB7CiAJCS8qIEF0IGxvd2VyIHJp
Z2h0IGNvcm5lciwganVzdCB0cmFuc3Bvc2UsIG5vIG1pcnJvcmluZyAqLwotCQlkc3RfcHRyID0g
ZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOworCQlzcmNfcHRyID0g
c3JjX2J1ZmZlcltvZmZzZXRfeF0KKwkJICBbZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3Bf
YmxvY2tzXTsKIAkJZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKIAkJICBmb3IgKGogPSAw
OyBqIDwgRENUU0laRTsgaisrKQogCQkgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRy
W2kqRENUU0laRStqXTsKQEAgLTU1NCw4ICs3MzYsMTE2IEBACiB9CiAKIAorLyogUGFyc2UgYW4g
dW5zaWduZWQgaW50ZWdlcjogc3Vicm91dGluZSBmb3IganRyYW5zZm9ybV9wYXJzZV9jcm9wX3Nw
ZWMuCisgKiBSZXR1cm5zIFRSVUUgaWYgdmFsaWQgaW50ZWdlciBmb3VuZCwgRkFMU0UgaWYgbm90
LgorICogKnN0cnB0ciBpcyBhZHZhbmNlZCBvdmVyIHRoZSBkaWdpdCBzdHJpbmcsIGFuZCAqcmVz
dWx0IGlzIHNldCB0byBpdHMgdmFsdWUuCisgKi8KKworTE9DQUwoYm9vbGVhbikKK2p0X3JlYWRf
aW50ZWdlciAoY29uc3QgY2hhciAqKiBzdHJwdHIsIEpESU1FTlNJT04gKiByZXN1bHQpCit7Cisg
IGNvbnN0IGNoYXIgKiBwdHIgPSAqc3RycHRyOworICBKRElNRU5TSU9OIHZhbCA9IDA7CisKKyAg
Zm9yICg7IGlzZGlnaXQoKnB0cik7IHB0cisrKSB7CisgICAgdmFsID0gdmFsICogMTAgKyAoSkRJ
TUVOU0lPTikgKCpwdHIgLSAnMCcpOworICB9CisgICpyZXN1bHQgPSB2YWw7CisgIGlmIChwdHIg
PT0gKnN0cnB0cikKKyAgICByZXR1cm4gRkFMU0U7CQkvKiBvb3BzLCBubyBkaWdpdHMgKi8KKyAg
KnN0cnB0ciA9IHB0cjsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyogUGFyc2UgYSBjcm9wIHNw
ZWNpZmljYXRpb24gKHdyaXR0ZW4gaW4gWDExIGdlb21ldHJ5IHN0eWxlKS4KKyAqIFRoZSByb3V0
aW5lIHJldHVybnMgVFJVRSBpZiB0aGUgc3BlYyBzdHJpbmcgaXMgdmFsaWQsIEZBTFNFIGlmIG5v
dC4KKyAqCisgKiBUaGUgY3JvcCBzcGVjIHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgZm9ybWF0Cisg
Kgk8d2lkdGg+eDxoZWlnaHQ+eystfTx4b2Zmc2V0PnsrLX08eW9mZnNldD4KKyAqIHdoZXJlIHdp
ZHRoLCBoZWlnaHQsIHhvZmZzZXQsIGFuZCB5b2Zmc2V0IGFyZSB1bnNpZ25lZCBpbnRlZ2Vycy4K
KyAqIEVhY2ggb2YgdGhlIGVsZW1lbnRzIGNhbiBiZSBvbWl0dGVkIHRvIGluZGljYXRlIGEgZGVm
YXVsdCB2YWx1ZS4KKyAqIChBIHdlYWtuZXNzIG9mIHRoaXMgc3R5bGUgaXMgdGhhdCBpdCBpcyBu
b3QgcG9zc2libGUgdG8gb21pdCB4b2Zmc2V0CisgKiB3aGlsZSBzcGVjaWZ5aW5nIHlvZmZzZXQs
IHNpbmNlIHRoZXkgbG9vayBhbGlrZS4pCisgKgorICogVGhpcyBjb2RlIGlzIGxvb3NlbHkgYmFz
ZWQgb24gWFBhcnNlR2VvbWV0cnkgZnJvbSB0aGUgWDExIGRpc3RyaWJ1dGlvbi4KKyAqLworCitH
TE9CQUwoYm9vbGVhbikKK2p0cmFuc2Zvcm1fcGFyc2VfY3JvcF9zcGVjIChqcGVnX3RyYW5zZm9y
bV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpzcGVjKQoreworICBpbmZvLT5jcm9wID0gRkFMU0U7
CisgIGluZm8tPmNyb3Bfd2lkdGhfc2V0ID0gSkNST1BfVU5TRVQ7CisgIGluZm8tPmNyb3BfaGVp
Z2h0X3NldCA9IEpDUk9QX1VOU0VUOworICBpbmZvLT5jcm9wX3hvZmZzZXRfc2V0ID0gSkNST1Bf
VU5TRVQ7CisgIGluZm8tPmNyb3BfeW9mZnNldF9zZXQgPSBKQ1JPUF9VTlNFVDsKKworICBpZiAo
aXNkaWdpdCgqc3BlYykpIHsKKyAgICAvKiBmZXRjaCB3aWR0aCAqLworICAgIGlmICghIGp0X3Jl
YWRfaW50ZWdlcigmc3BlYywgJmluZm8tPmNyb3Bfd2lkdGgpKQorICAgICAgcmV0dXJuIEZBTFNF
OworICAgIGluZm8tPmNyb3Bfd2lkdGhfc2V0ID0gSkNST1BfUE9TOworICB9CisgIGlmICgqc3Bl
YyA9PSAneCcgfHwgKnNwZWMgPT0gJ1gnKSB7CQorICAgIC8qIGZldGNoIGhlaWdodCAqLworICAg
IHNwZWMrKzsKKyAgICBpZiAoISBqdF9yZWFkX2ludGVnZXIoJnNwZWMsICZpbmZvLT5jcm9wX2hl
aWdodCkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgaW5mby0+Y3JvcF9oZWlnaHRfc2V0ID0g
SkNST1BfUE9TOworICB9CisgIGlmICgqc3BlYyA9PSAnKycgfHwgKnNwZWMgPT0gJy0nKSB7Cisg
ICAgLyogZmV0Y2ggeG9mZnNldCAqLworICAgIGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPSAoKnNw
ZWMgPT0gJy0nKSA/IEpDUk9QX05FRyA6IEpDUk9QX1BPUzsKKyAgICBzcGVjKys7CisgICAgaWYg
KCEganRfcmVhZF9pbnRlZ2VyKCZzcGVjLCAmaW5mby0+Y3JvcF94b2Zmc2V0KSkKKyAgICAgIHJl
dHVybiBGQUxTRTsKKyAgfQorICBpZiAoKnNwZWMgPT0gJysnIHx8ICpzcGVjID09ICctJykgewor
ICAgIC8qIGZldGNoIHlvZmZzZXQgKi8KKyAgICBpbmZvLT5jcm9wX3lvZmZzZXRfc2V0ID0gKCpz
cGVjID09ICctJykgPyBKQ1JPUF9ORUcgOiBKQ1JPUF9QT1M7CisgICAgc3BlYysrOworICAgIGlm
ICghIGp0X3JlYWRfaW50ZWdlcigmc3BlYywgJmluZm8tPmNyb3BfeW9mZnNldCkpCisgICAgICBy
ZXR1cm4gRkFMU0U7CisgIH0KKyAgLyogV2UgaGFkIGJldHRlciBoYXZlIGdvdHRlbiB0byB0aGUg
ZW5kIG9mIHRoZSBzdHJpbmcuICovCisgIGlmICgqc3BlYyAhPSAnXDAnKQorICAgIHJldHVybiBG
QUxTRTsKKyAgaW5mby0+Y3JvcCA9IFRSVUU7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qIFRy
aW0gb2ZmIGFueSBwYXJ0aWFsIGlNQ1VzIG9uIHRoZSBpbmRpY2F0ZWQgZGVzdGluYXRpb24gZWRn
ZSAqLworCitMT0NBTCh2b2lkKQordHJpbV9yaWdodF9lZGdlIChqcGVnX3RyYW5zZm9ybV9pbmZv
ICppbmZvLCBKRElNRU5TSU9OIGZ1bGxfd2lkdGgpCit7CisgIEpESU1FTlNJT04gTUNVX2NvbHM7
CisKKyAgTUNVX2NvbHMgPSBpbmZvLT5vdXRwdXRfd2lkdGggLyAoaW5mby0+bWF4X2hfc2FtcF9m
YWN0b3IgKiBEQ1RTSVpFKTsKKyAgaWYgKE1DVV9jb2xzID4gMCAmJiBpbmZvLT54X2Nyb3Bfb2Zm
c2V0ICsgTUNVX2NvbHMgPT0KKyAgICAgIGZ1bGxfd2lkdGggLyAoaW5mby0+bWF4X2hfc2FtcF9m
YWN0b3IgKiBEQ1RTSVpFKSkKKyAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBNQ1VfY29scyAqIChp
bmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOworfQorCitMT0NBTCh2b2lkKQordHJp
bV9ib3R0b21fZWRnZSAoanBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbywgSkRJTUVOU0lPTiBmdWxs
X2hlaWdodCkKK3sKKyAgSkRJTUVOU0lPTiBNQ1Vfcm93czsKKworICBNQ1Vfcm93cyA9IGluZm8t
Pm91dHB1dF9oZWlnaHQgLyAoaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKTsKKyAg
aWYgKE1DVV9yb3dzID4gMCAmJiBpbmZvLT55X2Nyb3Bfb2Zmc2V0ICsgTUNVX3Jvd3MgPT0KKyAg
ICAgIGZ1bGxfaGVpZ2h0IC8gKGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpCisg
ICAgaW5mby0+b3V0cHV0X2hlaWdodCA9IE1DVV9yb3dzICogKGluZm8tPm1heF92X3NhbXBfZmFj
dG9yICogRENUU0laRSk7Cit9CisKKwogLyogUmVxdWVzdCBhbnkgcmVxdWlyZWQgd29ya3NwYWNl
LgogICoKKyAqIFRoaXMgcm91dGluZSBmaWd1cmVzIG91dCB0aGUgc2l6ZSB0aGF0IHRoZSBvdXRw
dXQgaW1hZ2Ugd2lsbCBiZQorICogKHdoaWNoIGltcGxpZXMgdGhhdCBhbGwgdGhlIHRyYW5zZm9y
bSBwYXJhbWV0ZXJzIG11c3QgYmUgc2V0IGJlZm9yZQorICogaXQgaXMgY2FsbGVkKS4KKyAqCiAg
KiBXZSBhbGxvY2F0ZSB0aGUgd29ya3NwYWNlIHZpcnR1YWwgYXJyYXlzIGZyb20gdGhlIHNvdXJj
ZSBkZWNvbXByZXNzaW9uCiAgKiBvYmplY3QsIHNvIHRoYXQgYWxsIHRoZSBhcnJheXMgKGJvdGgg
dGhlIG9yaWdpbmFsIGRhdGEgYW5kIHRoZSB3b3Jrc3BhY2UpCiAgKiB3aWxsIGJlIHRha2VuIGlu
dG8gYWNjb3VudCB3aGlsZSBtYWtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zLgpAQCAt
NTY5LDkgKzg1OSwxMyBAQAogCQkJICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKIHsK
ICAganZpcnRfYmFycmF5X3B0ciAqY29lZl9hcnJheXMgPSBOVUxMOworICBib29sZWFuIG5lZWRf
d29ya3NwYWNlLCB0cmFuc3Bvc2VfaXQ7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7
Ci0gIGludCBjaTsKKyAgSkRJTUVOU0lPTiB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aF9pbl9pTUNV
cywgaGVpZ2h0X2luX2lNQ1VzOworICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrcywgaGVpZ2h0
X2luX2Jsb2NrczsKKyAgaW50IGNpLCBoX3NhbXBfZmFjdG9yLCB2X3NhbXBfZmFjdG9yOwogCisg
IC8qIERldGVybWluZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBvdXRwdXQgaW1hZ2UgKi8KICAg
aWYgKGluZm8tPmZvcmNlX2dyYXlzY2FsZSAmJgogICAgICAgc3JjaW5mby0+anBlZ19jb2xvcl9z
cGFjZSA9PSBKQ1NfWUNiQ3IgJiYKICAgICAgIHNyY2luZm8tPm51bV9jb21wb25lbnRzID09IDMp
IHsKQEAgLTU4MSw1NSArODc1LDE4MSBAQAogICAgIC8qIFByb2Nlc3MgYWxsIHRoZSBjb21wb25l
bnRzICovCiAgICAgaW5mby0+bnVtX2NvbXBvbmVudHMgPSBzcmNpbmZvLT5udW1fY29tcG9uZW50
czsKICAgfQorICAvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBvdXRwdXQgY29tcG9uZW50LCBmb3Jj
ZSB0aGUgaU1DVSBzaXplIHRvIGJlIDE7CisgICAqIGVsc2UgdXNlIHRoZSBzb3VyY2UgaU1DVSBz
aXplLiAgKFRoaXMgYWxsb3dzIHVzIHRvIGRvIHRoZSByaWdodCB0aGluZworICAgKiB3aGVuIHJl
ZHVjaW5nIGNvbG9yIHRvIGdyYXlzY2FsZSwgYW5kIGFsc28gcHJvdmlkZXMgYSBoYW5keSB3YXkg
b2YKKyAgICogY2xlYW5pbmcgdXAgImZ1bm55IiBncmF5c2NhbGUgaW1hZ2VzIHdob3NlIHNhbXBs
aW5nIGZhY3RvcnMgYXJlIG5vdCAxeDEuKQorICAgKi8KIAogICBzd2l0Y2ggKGluZm8tPnRyYW5z
Zm9ybSkgeworICBjYXNlIEpYRk9STV9UUkFOU1BPU0U6CisgIGNhc2UgSlhGT1JNX1RSQU5TVkVS
U0U6CisgIGNhc2UgSlhGT1JNX1JPVF85MDoKKyAgY2FzZSBKWEZPUk1fUk9UXzI3MDoKKyAgICBp
bmZvLT5vdXRwdXRfd2lkdGggPSBzcmNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgaW5mby0+b3V0
cHV0X2hlaWdodCA9IHNyY2luZm8tPmltYWdlX3dpZHRoOworICAgIGlmIChpbmZvLT5udW1fY29t
cG9uZW50cyA9PSAxKSB7CisgICAgICBpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7CisgICAg
ICBpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGluZm8t
Pm1heF9oX3NhbXBfZmFjdG9yID0gc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgICAgICBp
bmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IHNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yOworICAg
IH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBzcmNp
bmZvLT5pbWFnZV93aWR0aDsKKyAgICBpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gc3JjaW5mby0+aW1h
Z2VfaGVpZ2h0OworICAgIGlmIChpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSB7CisgICAgICBp
bmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7CisgICAgICBpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rv
ciA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIGluZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gc3Jj
aW5mby0+bWF4X2hfc2FtcF9mYWN0b3I7CisgICAgICBpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9
IHNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIH0KKyAgICBicmVhazsKKyAgfQorCisg
IC8qIElmIGNyb3BwaW5nIGhhcyBiZWVuIHJlcXVlc3RlZCwgY29tcHV0ZSB0aGUgY3JvcCBhcmVh
J3MgcG9zaXRpb24gYW5kCisgICAqIGRpbWVuc2lvbnMsIGVuc3VyaW5nIHRoYXQgaXRzIHVwcGVy
IGxlZnQgY29ybmVyIGZhbGxzIGF0IGFuIGlNQ1UgYm91bmRhcnkuCisgICAqLworICBpZiAoaW5m
by0+Y3JvcCkgeworICAgIC8qIEluc2VydCBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zZXQgY3JvcCBw
YXJhbWV0ZXJzICovCisgICAgaWYgKGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPT0gSkNST1BfVU5T
RVQpCisgICAgICBpbmZvLT5jcm9wX3hvZmZzZXQgPSAwOwkvKiBkZWZhdWx0IHRvICswICovCisg
ICAgaWYgKGluZm8tPmNyb3BfeW9mZnNldF9zZXQgPT0gSkNST1BfVU5TRVQpCisgICAgICBpbmZv
LT5jcm9wX3lvZmZzZXQgPSAwOwkvKiBkZWZhdWx0IHRvICswICovCisgICAgaWYgKGluZm8tPmNy
b3BfeG9mZnNldCA+PSBpbmZvLT5vdXRwdXRfd2lkdGggfHwKKwlpbmZvLT5jcm9wX3lvZmZzZXQg
Pj0gaW5mby0+b3V0cHV0X2hlaWdodCkKKyAgICAgIEVSUkVYSVQoc3JjaW5mbywgSkVSUl9CQURf
Q1JPUF9TUEVDKTsKKyAgICBpZiAoaW5mby0+Y3JvcF93aWR0aF9zZXQgPT0gSkNST1BfVU5TRVQp
CisgICAgICBpbmZvLT5jcm9wX3dpZHRoID0gaW5mby0+b3V0cHV0X3dpZHRoIC0gaW5mby0+Y3Jv
cF94b2Zmc2V0OworICAgIGlmIChpbmZvLT5jcm9wX2hlaWdodF9zZXQgPT0gSkNST1BfVU5TRVQp
CisgICAgICBpbmZvLT5jcm9wX2hlaWdodCA9IGluZm8tPm91dHB1dF9oZWlnaHQgLSBpbmZvLT5j
cm9wX3lvZmZzZXQ7CisgICAgLyogRW5zdXJlIHBhcmFtZXRlcnMgYXJlIHZhbGlkICovCisgICAg
aWYgKGluZm8tPmNyb3Bfd2lkdGggPD0gMCB8fCBpbmZvLT5jcm9wX3dpZHRoID4gaW5mby0+b3V0
cHV0X3dpZHRoIHx8CisJaW5mby0+Y3JvcF9oZWlnaHQgPD0gMCB8fCBpbmZvLT5jcm9wX2hlaWdo
dCA+IGluZm8tPm91dHB1dF9oZWlnaHQgfHwKKwlpbmZvLT5jcm9wX3hvZmZzZXQgPiBpbmZvLT5v
dXRwdXRfd2lkdGggLSBpbmZvLT5jcm9wX3dpZHRoIHx8CisJaW5mby0+Y3JvcF95b2Zmc2V0ID4g
aW5mby0+b3V0cHV0X2hlaWdodCAtIGluZm8tPmNyb3BfaGVpZ2h0KQorICAgICAgRVJSRVhJVChz
cmNpbmZvLCBKRVJSX0JBRF9DUk9QX1NQRUMpOworICAgIC8qIENvbnZlcnQgbmVnYXRpdmUgY3Jv
cCBvZmZzZXRzIGludG8gcmVndWxhciBvZmZzZXRzICovCisgICAgaWYgKGluZm8tPmNyb3BfeG9m
ZnNldF9zZXQgPT0gSkNST1BfTkVHKQorICAgICAgeG9mZnNldCA9IGluZm8tPm91dHB1dF93aWR0
aCAtIGluZm8tPmNyb3Bfd2lkdGggLSBpbmZvLT5jcm9wX3hvZmZzZXQ7CisgICAgZWxzZQorICAg
ICAgeG9mZnNldCA9IGluZm8tPmNyb3BfeG9mZnNldDsKKyAgICBpZiAoaW5mby0+Y3JvcF95b2Zm
c2V0X3NldCA9PSBKQ1JPUF9ORUcpCisgICAgICB5b2Zmc2V0ID0gaW5mby0+b3V0cHV0X2hlaWdo
dCAtIGluZm8tPmNyb3BfaGVpZ2h0IC0gaW5mby0+Y3JvcF95b2Zmc2V0OworICAgIGVsc2UKKyAg
ICAgIHlvZmZzZXQgPSBpbmZvLT5jcm9wX3lvZmZzZXQ7CisgICAgLyogTm93IGFkanVzdCBzbyB0
aGF0IHVwcGVyIGxlZnQgY29ybmVyIGZhbGxzIGF0IGFuIGlNQ1UgYm91bmRhcnkgKi8KKyAgICBp
bmZvLT5vdXRwdXRfd2lkdGggPQorICAgICAgaW5mby0+Y3JvcF93aWR0aCArICh4b2Zmc2V0ICUg
KGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIGluZm8tPm91dHB1dF9o
ZWlnaHQgPQorICAgICAgaW5mby0+Y3JvcF9oZWlnaHQgKyAoeW9mZnNldCAlIChpbmZvLT5tYXhf
dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICAvKiBTYXZlIHgveSBvZmZzZXRzIG1lYXN1
cmVkIGluIGlNQ1VzICovCisgICAgaW5mby0+eF9jcm9wX29mZnNldCA9IHhvZmZzZXQgLyAoaW5m
by0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKTsKKyAgICBpbmZvLT55X2Nyb3Bfb2Zmc2V0
ID0geW9mZnNldCAvIChpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOworICB9IGVs
c2UgeworICAgIGluZm8tPnhfY3JvcF9vZmZzZXQgPSAwOworICAgIGluZm8tPnlfY3JvcF9vZmZz
ZXQgPSAwOworICB9CisKKyAgLyogRmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgd29ya3NwYWNl
IGFycmF5cywKKyAgICogYW5kIGlmIHNvIHdoZXRoZXIgdGhleSBhcmUgdHJhbnNwb3NlZCByZWxh
dGl2ZSB0byB0aGUgc291cmNlLgorICAgKi8KKyAgbmVlZF93b3Jrc3BhY2UgPSBGQUxTRTsKKyAg
dHJhbnNwb3NlX2l0ID0gRkFMU0U7CisgIHN3aXRjaCAoaW5mby0+dHJhbnNmb3JtKSB7CiAgIGNh
c2UgSlhGT1JNX05PTkU6CisgICAgaWYgKGluZm8tPnhfY3JvcF9vZmZzZXQgIT0gMCB8fCBpbmZv
LT55X2Nyb3Bfb2Zmc2V0ICE9IDApCisgICAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7CisgICAg
LyogTm8gd29ya3NwYWNlIG5lZWRlZCBpZiBuZWl0aGVyIGNyb3BwaW5nIG5vciB0cmFuc2Zvcm1p
bmcgKi8KKyAgICBicmVhazsKICAgY2FzZSBKWEZPUk1fRkxJUF9IOgotICAgIC8qIERvbid0IG5l
ZWQgYSB3b3Jrc3BhY2UgYXJyYXkgKi8KKyAgICBpZiAoaW5mby0+dHJpbSkKKyAgICAgIHRyaW1f
cmlnaHRfZWRnZShpbmZvLCBzcmNpbmZvLT5pbWFnZV93aWR0aCk7CisgICAgaWYgKGluZm8tPnlf
Y3JvcF9vZmZzZXQgIT0gMCkKKyAgICAgIG5lZWRfd29ya3NwYWNlID0gVFJVRTsKKyAgICAvKiBk
b19mbGlwX2hfbm9fY3JvcCBkb2Vzbid0IG5lZWQgYSB3b3Jrc3BhY2UgYXJyYXkgKi8KICAgICBi
cmVhazsKICAgY2FzZSBKWEZPUk1fRkxJUF9WOgotICBjYXNlIEpYRk9STV9ST1RfMTgwOgotICAg
IC8qIE5lZWQgd29ya3NwYWNlIGFycmF5cyBoYXZpbmcgc2FtZSBkaW1lbnNpb25zIGFzIHNvdXJj
ZSBpbWFnZS4KLSAgICAgKiBOb3RlIHRoYXQgd2UgYWxsb2NhdGUgYXJyYXlzIHBhZGRlZCBvdXQg
dG8gdGhlIG5leHQgaU1DVSBib3VuZGFyeSwKLSAgICAgKiBzbyB0aGF0IHRyYW5zZm9ybSByb3V0
aW5lcyBuZWVkIG5vdCB3b3JyeSBhYm91dCBtaXNzaW5nIGVkZ2UgYmxvY2tzLgotICAgICAqLwot
ICAgIGNvZWZfYXJyYXlzID0gKGp2aXJ0X2JhcnJheV9wdHIgKikKLSAgICAgICgqc3JjaW5mby0+
bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIEpQT09MX0lNQUdFLAot
CVNJWkVPRihqdmlydF9iYXJyYXlfcHRyKSAqIGluZm8tPm51bV9jb21wb25lbnRzKTsKLSAgICBm
b3IgKGNpID0gMDsgY2kgPCBpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewotICAgICAgY29t
cHB0ciA9IHNyY2luZm8tPmNvbXBfaW5mbyArIGNpOwotICAgICAgY29lZl9hcnJheXNbY2ldID0g
KCpzcmNpbmZvLT5tZW0tPnJlcXVlc3RfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIHNy
Y2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9u
ZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAotCQkJCShsb25nKSBjb21wcHRyLT5oX3NhbXBf
ZmFjdG9yKSwKLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0
X2luX2Jsb2NrcywKLQkJCQkobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCi0JIChKRElN
RU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKLSAgICB9CisgICAgaWYgKGluZm8tPnRy
aW0pCisgICAgICB0cmltX2JvdHRvbV9lZGdlKGluZm8sIHNyY2luZm8tPmltYWdlX2hlaWdodCk7
CisgICAgLyogTmVlZCB3b3Jrc3BhY2UgYXJyYXlzIGhhdmluZyBzYW1lIGRpbWVuc2lvbnMgYXMg
c291cmNlIGltYWdlLiAqLworICAgIG5lZWRfd29ya3NwYWNlID0gVFJVRTsKICAgICBicmVhazsK
ICAgY2FzZSBKWEZPUk1fVFJBTlNQT1NFOgorICAgIC8qIHRyYW5zcG9zZSBkb2VzIE5PVCBoYXZl
IHRvIHRyaW0gYW55dGhpbmcgKi8KKyAgICAvKiBOZWVkIHdvcmtzcGFjZSBhcnJheXMgaGF2aW5n
IHRyYW5zcG9zZWQgZGltZW5zaW9ucy4gKi8KKyAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7Cisg
ICAgdHJhbnNwb3NlX2l0ID0gVFJVRTsKKyAgICBicmVhazsKICAgY2FzZSBKWEZPUk1fVFJBTlNW
RVJTRToKKyAgICBpZiAoaW5mby0+dHJpbSkgeworICAgICAgdHJpbV9yaWdodF9lZGdlKGluZm8s
IHNyY2luZm8tPmltYWdlX2hlaWdodCk7CisgICAgICB0cmltX2JvdHRvbV9lZGdlKGluZm8sIHNy
Y2luZm8tPmltYWdlX3dpZHRoKTsKKyAgICB9CisgICAgLyogTmVlZCB3b3Jrc3BhY2UgYXJyYXlz
IGhhdmluZyB0cmFuc3Bvc2VkIGRpbWVuc2lvbnMuICovCisgICAgbmVlZF93b3Jrc3BhY2UgPSBU
UlVFOworICAgIHRyYW5zcG9zZV9pdCA9IFRSVUU7CisgICAgYnJlYWs7CiAgIGNhc2UgSlhGT1JN
X1JPVF85MDoKKyAgICBpZiAoaW5mby0+dHJpbSkKKyAgICAgIHRyaW1fcmlnaHRfZWRnZShpbmZv
LCBzcmNpbmZvLT5pbWFnZV9oZWlnaHQpOworICAgIC8qIE5lZWQgd29ya3NwYWNlIGFycmF5cyBo
YXZpbmcgdHJhbnNwb3NlZCBkaW1lbnNpb25zLiAqLworICAgIG5lZWRfd29ya3NwYWNlID0gVFJV
RTsKKyAgICB0cmFuc3Bvc2VfaXQgPSBUUlVFOworICAgIGJyZWFrOworICBjYXNlIEpYRk9STV9S
T1RfMTgwOgorICAgIGlmIChpbmZvLT50cmltKSB7CisgICAgICB0cmltX3JpZ2h0X2VkZ2UoaW5m
bywgc3JjaW5mby0+aW1hZ2Vfd2lkdGgpOworICAgICAgdHJpbV9ib3R0b21fZWRnZShpbmZvLCBz
cmNpbmZvLT5pbWFnZV9oZWlnaHQpOworICAgIH0KKyAgICAvKiBOZWVkIHdvcmtzcGFjZSBhcnJh
eXMgaGF2aW5nIHNhbWUgZGltZW5zaW9ucyBhcyBzb3VyY2UgaW1hZ2UuICovCisgICAgbmVlZF93
b3Jrc3BhY2UgPSBUUlVFOworICAgIGJyZWFrOwogICBjYXNlIEpYRk9STV9ST1RfMjcwOgotICAg
IC8qIE5lZWQgd29ya3NwYWNlIGFycmF5cyBoYXZpbmcgdHJhbnNwb3NlZCBkaW1lbnNpb25zLgot
ICAgICAqIE5vdGUgdGhhdCB3ZSBhbGxvY2F0ZSBhcnJheXMgcGFkZGVkIG91dCB0byB0aGUgbmV4
dCBpTUNVIGJvdW5kYXJ5LAotICAgICAqIHNvIHRoYXQgdHJhbnNmb3JtIHJvdXRpbmVzIG5lZWQg
bm90IHdvcnJ5IGFib3V0IG1pc3NpbmcgZWRnZSBibG9ja3MuCi0gICAgICovCisgICAgaWYgKGlu
Zm8tPnRyaW0pCisgICAgICB0cmltX2JvdHRvbV9lZGdlKGluZm8sIHNyY2luZm8tPmltYWdlX3dp
ZHRoKTsKKyAgICAvKiBOZWVkIHdvcmtzcGFjZSBhcnJheXMgaGF2aW5nIHRyYW5zcG9zZWQgZGlt
ZW5zaW9ucy4gKi8KKyAgICBuZWVkX3dvcmtzcGFjZSA9IFRSVUU7CisgICAgdHJhbnNwb3NlX2l0
ID0gVFJVRTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIEFsbG9jYXRlIHdvcmtzcGFjZSBpZiBu
ZWVkZWQuCisgICAqIE5vdGUgdGhhdCB3ZSBhbGxvY2F0ZSBhcnJheXMgcGFkZGVkIG91dCB0byB0
aGUgbmV4dCBpTUNVIGJvdW5kYXJ5LAorICAgKiBzbyB0aGF0IHRyYW5zZm9ybSByb3V0aW5lcyBu
ZWVkIG5vdCB3b3JyeSBhYm91dCBtaXNzaW5nIGVkZ2UgYmxvY2tzLgorICAgKi8KKyAgaWYgKG5l
ZWRfd29ya3NwYWNlKSB7CiAgICAgY29lZl9hcnJheXMgPSAoanZpcnRfYmFycmF5X3B0ciAqKQog
ICAgICAgKCpzcmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgc3JjaW5m
bywgSlBPT0xfSU1BR0UsCi0JU0laRU9GKGp2aXJ0X2JhcnJheV9wdHIpICogaW5mby0+bnVtX2Nv
bXBvbmVudHMpOworCQlTSVpFT0YoanZpcnRfYmFycmF5X3B0cikgKiBpbmZvLT5udW1fY29tcG9u
ZW50cyk7CisgICAgd2lkdGhfaW5faU1DVXMgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91
bmRfdXAoKGxvbmcpIGluZm8tPm91dHB1dF93aWR0aCwKKwkJICAgIChsb25nKSAoaW5mby0+bWF4
X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgaGVpZ2h0X2luX2lNQ1VzID0gKEpESU1F
TlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBpbmZvLT5vdXRwdXRfaGVpZ2h0LAor
CQkgICAgKGxvbmcpIChpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICBm
b3IgKGNpID0gMDsgY2kgPCBpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgICAgY29t
cHB0ciA9IHNyY2luZm8tPmNvbXBfaW5mbyArIGNpOworICAgICAgaWYgKGluZm8tPm51bV9jb21w
b25lbnRzID09IDEpIHsKKwkvKiB3ZSdyZSBnb2luZyB0byBmb3JjZSBzYW1wIGZhY3RvcnMgdG8g
MXgxIGluIHRoaXMgY2FzZSAqLworCWhfc2FtcF9mYWN0b3IgPSB2X3NhbXBfZmFjdG9yID0gMTsK
KyAgICAgIH0gZWxzZSBpZiAodHJhbnNwb3NlX2l0KSB7CisJaF9zYW1wX2ZhY3RvciA9IGNvbXBw
dHItPnZfc2FtcF9mYWN0b3I7CisJdl9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPmhfc2FtcF9mYWN0
b3I7CisgICAgICB9IGVsc2UgeworCWhfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT5oX3NhbXBfZmFj
dG9yOworCXZfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgICAgfQor
ICAgICAgd2lkdGhfaW5fYmxvY2tzID0gd2lkdGhfaW5faU1DVXMgKiBoX3NhbXBfZmFjdG9yOwor
ICAgICAgaGVpZ2h0X2luX2Jsb2NrcyA9IGhlaWdodF9pbl9pTUNVcyAqIHZfc2FtcF9mYWN0b3I7
CiAgICAgICBjb2VmX2FycmF5c1tjaV0gPSAoKnNyY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X2Jh
cnJheSkKIAkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAotCSAo
SkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzLAot
CQkJCShsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSwKLQkgKEpESU1FTlNJT04pIGpyb3Vu
ZF91cCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAotCQkJCShsb25nKSBjb21wcHRy
LT5oX3NhbXBfZmFjdG9yKSwKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3Ip
OworCSB3aWR0aF9pbl9ibG9ja3MsIGhlaWdodF9pbl9ibG9ja3MsIChKRElNRU5TSU9OKSB2X3Nh
bXBfZmFjdG9yKTsKICAgICB9Ci0gICAgYnJlYWs7CiAgIH0KKwogICBpbmZvLT53b3Jrc3BhY2Vf
Y29lZl9hcnJheXMgPSBjb2VmX2FycmF5czsKIH0KIApAQCAtNjQyLDE0ICsxMDYyLDggQEAKICAg
aW50IHRibG5vLCBpLCBqLCBjaSwgaXRlbXA7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBw
dHI7CiAgIEpRVUFOVF9UQkwgKnF0YmxwdHI7Ci0gIEpESU1FTlNJT04gZHRlbXA7CiAgIFVJTlQx
NiBxdGVtcDsKIAotICAvKiBUcmFuc3Bvc2UgYmFzaWMgaW1hZ2UgZGltZW5zaW9ucyAqLwotICBk
dGVtcCA9IGRzdGluZm8tPmltYWdlX3dpZHRoOwotICBkc3RpbmZvLT5pbWFnZV93aWR0aCA9IGRz
dGluZm8tPmltYWdlX2hlaWdodDsKLSAgZHN0aW5mby0+aW1hZ2VfaGVpZ2h0ID0gZHRlbXA7Ci0K
ICAgLyogVHJhbnNwb3NlIHNhbXBsaW5nIGZhY3RvcnMgKi8KICAgZm9yIChjaSA9IDA7IGNpIDwg
ZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+
Y29tcF9pbmZvICsgY2k7CkBAIC02NzQsNDYgKzEwODgsMTU5IEBACiB9CiAKIAotLyogVHJpbSBv
ZmYgYW55IHBhcnRpYWwgaU1DVXMgb24gdGhlIGluZGljYXRlZCBkZXN0aW5hdGlvbiBlZGdlICov
CisvKiBBZGp1c3QgRXhpZiBpbWFnZSBwYXJhbWV0ZXJzLgorICoKKyAqIFdlIHRyeSB0byBhZGp1
c3QgdGhlIFRhZ3MgRXhpZkltYWdlV2lkdGggYW5kIEV4aWZJbWFnZUhlaWdodCBpZiBwb3NzaWJs
ZS4KKyAqLwogCiBMT0NBTCh2b2lkKQotdHJpbV9yaWdodF9lZGdlIChqX2NvbXByZXNzX3B0ciBk
c3RpbmZvKQorYWRqdXN0X2V4aWZfcGFyYW1ldGVycyAoSk9DVEVUIEZBUiAqIGRhdGEsIHVuc2ln
bmVkIGludCBsZW5ndGgsCisJCQlKRElNRU5TSU9OIG5ld193aWR0aCwgSkRJTUVOU0lPTiBuZXdf
aGVpZ2h0KQogewotICBpbnQgY2ksIG1heF9oX3NhbXBfZmFjdG9yOwotICBKRElNRU5TSU9OIE1D
VV9jb2xzOworICBib29sZWFuIGlzX21vdG9yb2xhOyAvKiBGbGFnIGZvciBieXRlIG9yZGVyICov
CisgIHVuc2lnbmVkIGludCBudW1iZXJfb2ZfdGFncywgdGFnbnVtOworICB1bnNpZ25lZCBpbnQg
Zmlyc3RvZmZzZXQsIG9mZnNldDsKKyAgSkRJTUVOU0lPTiBuZXdfdmFsdWU7CiAKLSAgLyogV2Ug
aGF2ZSB0byBjb21wdXRlIG1heF9oX3NhbXBfZmFjdG9yIG91cnNlbHZlcywKLSAgICogYmVjYXVz
ZSBpdCBoYXNuJ3QgYmVlbiBzZXQgeWV0IGluIHRoZSBkZXN0aW5hdGlvbgotICAgKiAoYW5kIHdl
IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzb3VyY2UncyB2YWx1ZSkuCi0gICAqLwotICBtYXhfaF9z
YW1wX2ZhY3RvciA9IDE7Ci0gIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25l
bnRzOyBjaSsrKSB7Ci0gICAgaW50IGhfc2FtcF9mYWN0b3IgPSBkc3RpbmZvLT5jb21wX2luZm9b
Y2ldLmhfc2FtcF9mYWN0b3I7Ci0gICAgbWF4X2hfc2FtcF9mYWN0b3IgPSBNQVgobWF4X2hfc2Ft
cF9mYWN0b3IsIGhfc2FtcF9mYWN0b3IpOworICBpZiAobGVuZ3RoIDwgMTIpIHJldHVybjsgLyog
TGVuZ3RoIG9mIGFuIElGRCBlbnRyeSAqLworCisgIC8qIERpc2NvdmVyIGJ5dGUgb3JkZXIgKi8K
KyAgaWYgKEdFVEpPQ1RFVChkYXRhWzBdKSA9PSAweDQ5ICYmIEdFVEpPQ1RFVChkYXRhWzFdKSA9
PSAweDQ5KQorICAgIGlzX21vdG9yb2xhID0gRkFMU0U7CisgIGVsc2UgaWYgKEdFVEpPQ1RFVChk
YXRhWzBdKSA9PSAweDREICYmIEdFVEpPQ1RFVChkYXRhWzFdKSA9PSAweDREKQorICAgIGlzX21v
dG9yb2xhID0gVFJVRTsKKyAgZWxzZQorICAgIHJldHVybjsKKworICAvKiBDaGVjayBUYWcgTWFy
ayAqLworICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbMl0pICE9
IDApIHJldHVybjsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbM10pICE9IDB4MkEpIHJldHVybjsK
KyAgfSBlbHNlIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbM10pICE9IDApIHJldHVybjsKKyAg
ICBpZiAoR0VUSk9DVEVUKGRhdGFbMl0pICE9IDB4MkEpIHJldHVybjsKICAgfQotICBNQ1VfY29s
cyA9IGRzdGluZm8tPmltYWdlX3dpZHRoIC8gKG1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSk7
Ci0gIGlmIChNQ1VfY29scyA+IDApCQkvKiBjYW4ndCB0cmltIHRvIDAgcGl4ZWxzICovCi0gICAg
ZHN0aW5mby0+aW1hZ2Vfd2lkdGggPSBNQ1VfY29scyAqIChtYXhfaF9zYW1wX2ZhY3RvciAqIERD
VFNJWkUpOwotfQogCi1MT0NBTCh2b2lkKQotdHJpbV9ib3R0b21fZWRnZSAoal9jb21wcmVzc19w
dHIgZHN0aW5mbykKLXsKLSAgaW50IGNpLCBtYXhfdl9zYW1wX2ZhY3RvcjsKLSAgSkRJTUVOU0lP
TiBNQ1Vfcm93czsKKyAgLyogR2V0IGZpcnN0IElGRCBvZmZzZXQgKG9mZnNldCB0byBJRkQwKSAq
LworICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbNF0pICE9IDAp
IHJldHVybjsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbNV0pICE9IDApIHJldHVybjsKKyAgICBm
aXJzdG9mZnNldCA9IEdFVEpPQ1RFVChkYXRhWzZdKTsKKyAgICBmaXJzdG9mZnNldCA8PD0gODsK
KyAgICBmaXJzdG9mZnNldCArPSBHRVRKT0NURVQoZGF0YVs3XSk7CisgIH0gZWxzZSB7CisgICAg
aWYgKEdFVEpPQ1RFVChkYXRhWzddKSAhPSAwKSByZXR1cm47CisgICAgaWYgKEdFVEpPQ1RFVChk
YXRhWzZdKSAhPSAwKSByZXR1cm47CisgICAgZmlyc3RvZmZzZXQgPSBHRVRKT0NURVQoZGF0YVs1
XSk7CisgICAgZmlyc3RvZmZzZXQgPDw9IDg7CisgICAgZmlyc3RvZmZzZXQgKz0gR0VUSk9DVEVU
KGRhdGFbNF0pOworICB9CisgIGlmIChmaXJzdG9mZnNldCA+IGxlbmd0aCAtIDIpIHJldHVybjsg
LyogY2hlY2sgZW5kIG9mIGRhdGEgc2VnbWVudCAqLwogCi0gIC8qIFdlIGhhdmUgdG8gY29tcHV0
ZSBtYXhfdl9zYW1wX2ZhY3RvciBvdXJzZWx2ZXMsCi0gICAqIGJlY2F1c2UgaXQgaGFzbid0IGJl
ZW4gc2V0IHlldCBpbiB0aGUgZGVzdGluYXRpb24KLSAgICogKGFuZCB3ZSBkb24ndCB3YW50IHRv
IHVzZSB0aGUgc291cmNlJ3MgdmFsdWUpLgotICAgKi8KLSAgbWF4X3Zfc2FtcF9mYWN0b3IgPSAx
OwotICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewot
ICAgIGludCB2X3NhbXBfZmFjdG9yID0gZHN0aW5mby0+Y29tcF9pbmZvW2NpXS52X3NhbXBfZmFj
dG9yOwotICAgIG1heF92X3NhbXBfZmFjdG9yID0gTUFYKG1heF92X3NhbXBfZmFjdG9yLCB2X3Nh
bXBfZmFjdG9yKTsKKyAgLyogR2V0IHRoZSBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgY29u
dGFpbmVkIGluIHRoaXMgSUZEICovCisgIGlmIChpc19tb3Rvcm9sYSkgeworICAgIG51bWJlcl9v
Zl90YWdzID0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXRdKTsKKyAgICBudW1iZXJfb2ZfdGFn
cyA8PD0gODsKKyAgICBudW1iZXJfb2ZfdGFncyArPSBHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNl
dCsxXSk7CisgIH0gZWxzZSB7CisgICAgbnVtYmVyX29mX3RhZ3MgPSBHRVRKT0NURVQoZGF0YVtm
aXJzdG9mZnNldCsxXSk7CisgICAgbnVtYmVyX29mX3RhZ3MgPDw9IDg7CisgICAgbnVtYmVyX29m
X3RhZ3MgKz0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXRdKTsKICAgfQotICBNQ1Vfcm93cyA9
IGRzdGluZm8tPmltYWdlX2hlaWdodCAvIChtYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpOwot
ICBpZiAoTUNVX3Jvd3MgPiAwKQkJLyogY2FuJ3QgdHJpbSB0byAwIHBpeGVscyAqLwotICAgIGRz
dGluZm8tPmltYWdlX2hlaWdodCA9IE1DVV9yb3dzICogKG1heF92X3NhbXBfZmFjdG9yICogRENU
U0laRSk7CisgIGlmIChudW1iZXJfb2ZfdGFncyA9PSAwKSByZXR1cm47CisgIGZpcnN0b2Zmc2V0
ICs9IDI7CisKKyAgLyogU2VhcmNoIGZvciBFeGlmU3ViSUZEIG9mZnNldCBUYWcgaW4gSUZEMCAq
LworICBmb3IgKDs7KSB7CisgICAgaWYgKGZpcnN0b2Zmc2V0ID4gbGVuZ3RoIC0gMTIpIHJldHVy
bjsgLyogY2hlY2sgZW5kIG9mIGRhdGEgc2VnbWVudCAqLworICAgIC8qIEdldCBUYWcgbnVtYmVy
ICovCisgICAgaWYgKGlzX21vdG9yb2xhKSB7CisgICAgICB0YWdudW0gPSBHRVRKT0NURVQoZGF0
YVtmaXJzdG9mZnNldF0pOworICAgICAgdGFnbnVtIDw8PSA4OworICAgICAgdGFnbnVtICs9IEdF
VEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0KzFdKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFnbnVt
ID0gR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQrMV0pOworICAgICAgdGFnbnVtIDw8PSA4Owor
ICAgICAgdGFnbnVtICs9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zmc2V0XSk7CisgICAgfQorICAg
IGlmICh0YWdudW0gPT0gMHg4NzY5KSBicmVhazsgLyogZm91bmQgRXhpZlN1YklGRCBvZmZzZXQg
VGFnICovCisgICAgaWYgKC0tbnVtYmVyX29mX3RhZ3MgPT0gMCkgcmV0dXJuOworICAgIGZpcnN0
b2Zmc2V0ICs9IDEyOworICB9CisKKyAgLyogR2V0IHRoZSBFeGlmU3ViSUZEIG9mZnNldCAqLwor
ICBpZiAoaXNfbW90b3JvbGEpIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQr
OF0pICE9IDApIHJldHVybjsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbZmlyc3RvZmZzZXQrOV0p
ICE9IDApIHJldHVybjsKKyAgICBvZmZzZXQgPSBHRVRKT0NURVQoZGF0YVtmaXJzdG9mZnNldCsx
MF0pOworICAgIG9mZnNldCA8PD0gODsKKyAgICBvZmZzZXQgKz0gR0VUSk9DVEVUKGRhdGFbZmly
c3RvZmZzZXQrMTFdKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoR0VUSk9DVEVUKGRhdGFbZmlyc3Rv
ZmZzZXQrMTFdKSAhPSAwKSByZXR1cm47CisgICAgaWYgKEdFVEpPQ1RFVChkYXRhW2ZpcnN0b2Zm
c2V0KzEwXSkgIT0gMCkgcmV0dXJuOworICAgIG9mZnNldCA9IEdFVEpPQ1RFVChkYXRhW2ZpcnN0
b2Zmc2V0KzldKTsKKyAgICBvZmZzZXQgPDw9IDg7CisgICAgb2Zmc2V0ICs9IEdFVEpPQ1RFVChk
YXRhW2ZpcnN0b2Zmc2V0KzhdKTsKKyAgfQorICBpZiAob2Zmc2V0ID4gbGVuZ3RoIC0gMikgcmV0
dXJuOyAvKiBjaGVjayBlbmQgb2YgZGF0YSBzZWdtZW50ICovCisKKyAgLyogR2V0IHRoZSBudW1i
ZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgY29udGFpbmVkIGluIHRoaXMgU3ViSUZEICovCisgIGlm
IChpc19tb3Rvcm9sYSkgeworICAgIG51bWJlcl9vZl90YWdzID0gR0VUSk9DVEVUKGRhdGFbb2Zm
c2V0XSk7CisgICAgbnVtYmVyX29mX3RhZ3MgPDw9IDg7CisgICAgbnVtYmVyX29mX3RhZ3MgKz0g
R0VUSk9DVEVUKGRhdGFbb2Zmc2V0KzFdKTsKKyAgfSBlbHNlIHsKKyAgICBudW1iZXJfb2ZfdGFn
cyA9IEdFVEpPQ1RFVChkYXRhW29mZnNldCsxXSk7CisgICAgbnVtYmVyX29mX3RhZ3MgPDw9IDg7
CisgICAgbnVtYmVyX29mX3RhZ3MgKz0gR0VUSk9DVEVUKGRhdGFbb2Zmc2V0XSk7CisgIH0KKyAg
aWYgKG51bWJlcl9vZl90YWdzIDwgMikgcmV0dXJuOworICBvZmZzZXQgKz0gMjsKKworICAvKiBT
ZWFyY2ggZm9yIEV4aWZJbWFnZVdpZHRoIGFuZCBFeGlmSW1hZ2VIZWlnaHQgVGFncyBpbiB0aGlz
IFN1YklGRCAqLworICBkbyB7CisgICAgaWYgKG9mZnNldCA+IGxlbmd0aCAtIDEyKSByZXR1cm47
IC8qIGNoZWNrIGVuZCBvZiBkYXRhIHNlZ21lbnQgKi8KKyAgICAvKiBHZXQgVGFnIG51bWJlciAq
LworICAgIGlmIChpc19tb3Rvcm9sYSkgeworICAgICAgdGFnbnVtID0gR0VUSk9DVEVUKGRhdGFb
b2Zmc2V0XSk7CisgICAgICB0YWdudW0gPDw9IDg7CisgICAgICB0YWdudW0gKz0gR0VUSk9DVEVU
KGRhdGFbb2Zmc2V0KzFdKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFnbnVtID0gR0VUSk9DVEVU
KGRhdGFbb2Zmc2V0KzFdKTsKKyAgICAgIHRhZ251bSA8PD0gODsKKyAgICAgIHRhZ251bSArPSBH
RVRKT0NURVQoZGF0YVtvZmZzZXRdKTsKKyAgICB9CisgICAgaWYgKHRhZ251bSA9PSAweEEwMDIg
fHwgdGFnbnVtID09IDB4QTAwMykgeworICAgICAgaWYgKHRhZ251bSA9PSAweEEwMDIpCisJbmV3
X3ZhbHVlID0gbmV3X3dpZHRoOyAvKiBFeGlmSW1hZ2VXaWR0aCBUYWcgKi8KKyAgICAgIGVsc2UK
KwluZXdfdmFsdWUgPSBuZXdfaGVpZ2h0OyAvKiBFeGlmSW1hZ2VIZWlnaHQgVGFnICovCisgICAg
ICBpZiAoaXNfbW90b3JvbGEpIHsKKwlkYXRhW29mZnNldCsyXSA9IDA7IC8qIEZvcm1hdCA9IHVu
c2lnbmVkIGxvbmcgKDQgb2N0ZXRzKSAqLworCWRhdGFbb2Zmc2V0KzNdID0gNDsKKwlkYXRhW29m
ZnNldCs0XSA9IDA7IC8qIE51bWJlciBPZiBDb21wb25lbnRzID0gMSAqLworCWRhdGFbb2Zmc2V0
KzVdID0gMDsKKwlkYXRhW29mZnNldCs2XSA9IDA7CisJZGF0YVtvZmZzZXQrN10gPSAxOworCWRh
dGFbb2Zmc2V0KzhdID0gMDsKKwlkYXRhW29mZnNldCs5XSA9IDA7CisJZGF0YVtvZmZzZXQrMTBd
ID0gKEpPQ1RFVCkoKG5ld192YWx1ZSA+PiA4KSAmIDB4RkYpOworCWRhdGFbb2Zmc2V0KzExXSA9
IChKT0NURVQpKG5ld192YWx1ZSAmIDB4RkYpOworICAgICAgfSBlbHNlIHsKKwlkYXRhW29mZnNl
dCsyXSA9IDQ7IC8qIEZvcm1hdCA9IHVuc2lnbmVkIGxvbmcgKDQgb2N0ZXRzKSAqLworCWRhdGFb
b2Zmc2V0KzNdID0gMDsKKwlkYXRhW29mZnNldCs0XSA9IDE7IC8qIE51bWJlciBPZiBDb21wb25l
bnRzID0gMSAqLworCWRhdGFbb2Zmc2V0KzVdID0gMDsKKwlkYXRhW29mZnNldCs2XSA9IDA7CisJ
ZGF0YVtvZmZzZXQrN10gPSAwOworCWRhdGFbb2Zmc2V0KzhdID0gKEpPQ1RFVCkobmV3X3ZhbHVl
ICYgMHhGRik7CisJZGF0YVtvZmZzZXQrOV0gPSAoSk9DVEVUKSgobmV3X3ZhbHVlID4+IDgpICYg
MHhGRik7CisJZGF0YVtvZmZzZXQrMTBdID0gMDsKKwlkYXRhW29mZnNldCsxMV0gPSAwOworICAg
ICAgfQorICAgIH0KKyAgICBvZmZzZXQgKz0gMTI7CisgIH0gd2hpbGUgKC0tbnVtYmVyX29mX3Rh
Z3MpOwogfQogCiAKQEAgLTczNiwxOCArMTI2MywyMiBAQAogewogICAvKiBJZiBmb3JjZS10by1n
cmF5c2NhbGUgaXMgcmVxdWVzdGVkLCBhZGp1c3QgZGVzdGluYXRpb24gcGFyYW1ldGVycyAqLwog
ICBpZiAoaW5mby0+Zm9yY2VfZ3JheXNjYWxlKSB7Ci0gICAgLyogV2UgdXNlIGpwZWdfc2V0X2Nv
bG9yc3BhY2UgdG8gbWFrZSBzdXJlIHN1YnNpZGlhcnkgc2V0dGluZ3MgZ2V0IGZpeGVkCi0gICAg
ICogcHJvcGVybHkuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSB0YXJnZXQgaF9zYW1wX2ZhY3Rv
ciAmIHZfc2FtcF9mYWN0b3IKLSAgICAgKiB3aWxsIGdldCBzZXQgdG8gMSwgd2hpY2ggdHlwaWNh
bGx5IHdvbid0IG1hdGNoIHRoZSBzb3VyY2UuCi0gICAgICogSW4gZmFjdCB3ZSBkbyB0aGlzIGV2
ZW4gaWYgdGhlIHNvdXJjZSBpcyBhbHJlYWR5IGdyYXlzY2FsZTsgdGhhdAotICAgICAqIHByb3Zp
ZGVzIGFuIGVhc3kgd2F5IG9mIGNvZXJjaW5nIGEgZ3JheXNjYWxlIEpQRUcgd2l0aCBmdW5ueSBz
YW1wbGluZwotICAgICAqIGZhY3RvcnMgdG8gdGhlIGN1c3RvbWFyeSAxLDEuICAoU29tZSBkZWNv
ZGVycyBmYWlsIG9uIG90aGVyIGZhY3RvcnMuKQorICAgIC8qIEZpcnN0LCBlbnN1cmUgd2UgaGF2
ZSBZQ2JDciBvciBncmF5c2NhbGUgZGF0YSwgYW5kIHRoYXQgdGhlIHNvdXJjZSdzCisgICAgICog
WSBjaGFubmVsIGlzIGZ1bGwgcmVzb2x1dGlvbi4gIChObyByZWFzb25hYmxlIHBlcnNvbiB3b3Vs
ZCBtYWtlIFkKKyAgICAgKiBiZSBsZXNzIHRoYW4gZnVsbCByZXNvbHV0aW9uLCBzbyBhY3R1YWxs
eSBjb3Bpbmcgd2l0aCB0aGF0IGNhc2UKKyAgICAgKiBpc24ndCB3b3J0aCBleHRyYSBjb2RlIHNw
YWNlLiAgQnV0IHdlIGNoZWNrIGl0IHRvIGF2b2lkIGNyYXNoaW5nLikKICAgICAgKi8KLSAgICBp
ZiAoKGRzdGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyICYmCi0JIGRzdGluZm8t
Pm51bV9jb21wb25lbnRzID09IDMpIHx8Ci0JKGRzdGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0g
SkNTX0dSQVlTQ0FMRSAmJgotCSBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSkgewotICAg
ICAgLyogV2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgc291cmNlJ3MgcXVhbnRpemF0aW9uIHRhYmxl
IG51bWJlci4gKi8KKyAgICBpZiAoKChkc3RpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19Z
Q2JDciAmJgorCSAgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMykgfHwKKwkgKGRzdGluZm8t
PmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSAmJgorCSAgZHN0aW5mby0+bnVtX2Nv
bXBvbmVudHMgPT0gMSkpICYmCisJc3JjaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3Ig
PT0gc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKwlzcmNpbmZvLT5jb21wX2luZm9bMF0u
dl9zYW1wX2ZhY3RvciA9PSBzcmNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgLyog
V2UgdXNlIGpwZWdfc2V0X2NvbG9yc3BhY2UgdG8gbWFrZSBzdXJlIHN1YnNpZGlhcnkgc2V0dGlu
Z3MgZ2V0IGZpeGVkCisgICAgICAgKiBwcm9wZXJseS4gIEFtb25nIG90aGVyIHRoaW5ncywgaXQg
c2V0cyB0aGUgdGFyZ2V0IGhfc2FtcF9mYWN0b3IgJgorICAgICAgICogdl9zYW1wX2ZhY3RvciB0
byAxLCB3aGljaCB0eXBpY2FsbHkgd29uJ3QgbWF0Y2ggdGhlIHNvdXJjZS4KKyAgICAgICAqIFdl
IGhhdmUgdG8gcHJlc2VydmUgdGhlIHNvdXJjZSdzIHF1YW50aXphdGlvbiB0YWJsZSBudW1iZXIs
IGhvd2V2ZXIuCisgICAgICAgKi8KICAgICAgIGludCBzdl9xdWFudF90Ymxfbm8gPSBkc3RpbmZv
LT5jb21wX2luZm9bMF0ucXVhbnRfdGJsX25vOwogICAgICAganBlZ19zZXRfY29sb3JzcGFjZShk
c3RpbmZvLCBKQ1NfR1JBWVNDQUxFKTsKICAgICAgIGRzdGluZm8tPmNvbXBfaW5mb1swXS5xdWFu
dF90Ymxfbm8gPSBzdl9xdWFudF90Ymxfbm87CkBAIC03NTUsNTAgKzEyODYsNTIgQEAKICAgICAg
IC8qIFNvcnJ5LCBjYW4ndCBkbyBpdCAqLwogICAgICAgRVJSRVhJVChkc3RpbmZvLCBKRVJSX0NP
TlZFUlNJT05fTk9USU1QTCk7CiAgICAgfQorICB9IGVsc2UgaWYgKGluZm8tPm51bV9jb21wb25l
bnRzID09IDEpIHsKKyAgICAvKiBGb3IgYSBzaW5nbGUtY29tcG9uZW50IHNvdXJjZSwgd2UgZm9y
Y2UgdGhlIGRlc3RpbmF0aW9uIHNhbXBsaW5nIGZhY3RvcnMKKyAgICAgKiB0byAxeDEsIHdpdGgg
b3Igd2l0aG91dCBmb3JjZV9ncmF5c2NhbGUuICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHNvbWUK
KyAgICAgKiBkZWNvZGVycyBjaG9rZSBvbiBncmF5c2NhbGUgaW1hZ2VzIHdpdGggb3RoZXIgc2Ft
cGxpbmcgZmFjdG9ycy4KKyAgICAgKi8KKyAgICBkc3RpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1w
X2ZhY3RvciA9IDE7CisgICAgZHN0aW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPSAx
OwogICB9CiAKLSAgLyogQ29ycmVjdCB0aGUgZGVzdGluYXRpb24ncyBpbWFnZSBkaW1lbnNpb25z
IGV0YyBpZiBuZWNlc3NhcnkgKi8KKyAgLyogQ29ycmVjdCB0aGUgZGVzdGluYXRpb24ncyBpbWFn
ZSBkaW1lbnNpb25zIGFzIG5lY2Vzc2FyeQorICAgKiBmb3IgY3JvcCBhbmQgcm90YXRlL2ZsaXAg
b3BlcmF0aW9ucy4KKyAgICovCisgIGRzdGluZm8tPmltYWdlX3dpZHRoID0gaW5mby0+b3V0cHV0
X3dpZHRoOworICBkc3RpbmZvLT5pbWFnZV9oZWlnaHQgPSBpbmZvLT5vdXRwdXRfaGVpZ2h0Owor
CisgIC8qIFRyYW5zcG9zZSBkZXN0aW5hdGlvbiBpbWFnZSBwYXJhbWV0ZXJzICovCiAgIHN3aXRj
aCAoaW5mby0+dHJhbnNmb3JtKSB7Ci0gIGNhc2UgSlhGT1JNX05PTkU6Ci0gICAgLyogTm90aGlu
ZyB0byBkbyAqLwotICAgIGJyZWFrOwotICBjYXNlIEpYRk9STV9GTElQX0g6Ci0gICAgaWYgKGlu
Zm8tPnRyaW0pCi0gICAgICB0cmltX3JpZ2h0X2VkZ2UoZHN0aW5mbyk7Ci0gICAgYnJlYWs7Ci0g
IGNhc2UgSlhGT1JNX0ZMSVBfVjoKLSAgICBpZiAoaW5mby0+dHJpbSkKLSAgICAgIHRyaW1fYm90
dG9tX2VkZ2UoZHN0aW5mbyk7Ci0gICAgYnJlYWs7CiAgIGNhc2UgSlhGT1JNX1RSQU5TUE9TRToK
LSAgICB0cmFuc3Bvc2VfY3JpdGljYWxfcGFyYW1ldGVycyhkc3RpbmZvKTsKLSAgICAvKiB0cmFu
c3Bvc2UgZG9lcyBOT1QgaGF2ZSB0byB0cmltIGFueXRoaW5nICovCi0gICAgYnJlYWs7CiAgIGNh
c2UgSlhGT1JNX1RSQU5TVkVSU0U6Ci0gICAgdHJhbnNwb3NlX2NyaXRpY2FsX3BhcmFtZXRlcnMo
ZHN0aW5mbyk7Ci0gICAgaWYgKGluZm8tPnRyaW0pIHsKLSAgICAgIHRyaW1fcmlnaHRfZWRnZShk
c3RpbmZvKTsKLSAgICAgIHRyaW1fYm90dG9tX2VkZ2UoZHN0aW5mbyk7Ci0gICAgfQotICAgIGJy
ZWFrOwogICBjYXNlIEpYRk9STV9ST1RfOTA6Ci0gICAgdHJhbnNwb3NlX2NyaXRpY2FsX3BhcmFt
ZXRlcnMoZHN0aW5mbyk7Ci0gICAgaWYgKGluZm8tPnRyaW0pCi0gICAgICB0cmltX3JpZ2h0X2Vk
Z2UoZHN0aW5mbyk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgSlhGT1JNX1JPVF8xODA6Ci0gICAgaWYg
KGluZm8tPnRyaW0pIHsKLSAgICAgIHRyaW1fcmlnaHRfZWRnZShkc3RpbmZvKTsKLSAgICAgIHRy
aW1fYm90dG9tX2VkZ2UoZHN0aW5mbyk7Ci0gICAgfQotICAgIGJyZWFrOwogICBjYXNlIEpYRk9S
TV9ST1RfMjcwOgogICAgIHRyYW5zcG9zZV9jcml0aWNhbF9wYXJhbWV0ZXJzKGRzdGluZm8pOwot
ICAgIGlmIChpbmZvLT50cmltKQotICAgICAgdHJpbV9ib3R0b21fZWRnZShkc3RpbmZvKTsKICAg
ICBicmVhazsKICAgfQogCisgIC8qIEFkanVzdCBFeGlmIHByb3BlcnRpZXMgKi8KKyAgaWYgKHNy
Y2luZm8tPm1hcmtlcl9saXN0ICE9IE5VTEwgJiYKKyAgICAgIHNyY2luZm8tPm1hcmtlcl9saXN0
LT5tYXJrZXIgPT0gSlBFR19BUFAwKzEgJiYKKyAgICAgIHNyY2luZm8tPm1hcmtlcl9saXN0LT5k
YXRhX2xlbmd0aCA+PSA2ICYmCisgICAgICBHRVRKT0NURVQoc3JjaW5mby0+bWFya2VyX2xpc3Qt
PmRhdGFbMF0pID09IDB4NDUgJiYKKyAgICAgIEdFVEpPQ1RFVChzcmNpbmZvLT5tYXJrZXJfbGlz
dC0+ZGF0YVsxXSkgPT0gMHg3OCAmJgorICAgICAgR0VUSk9DVEVUKHNyY2luZm8tPm1hcmtlcl9s
aXN0LT5kYXRhWzJdKSA9PSAweDY5ICYmCisgICAgICBHRVRKT0NURVQoc3JjaW5mby0+bWFya2Vy
X2xpc3QtPmRhdGFbM10pID09IDB4NjYgJiYKKyAgICAgIEdFVEpPQ1RFVChzcmNpbmZvLT5tYXJr
ZXJfbGlzdC0+ZGF0YVs0XSkgPT0gMCAmJgorICAgICAgR0VUSk9DVEVUKHNyY2luZm8tPm1hcmtl
cl9saXN0LT5kYXRhWzVdKSA9PSAwKSB7CisgICAgLyogU3VwcHJlc3Mgb3V0cHV0IG9mIEpGSUYg
bWFya2VyICovCisgICAgZHN0aW5mby0+d3JpdGVfSkZJRl9oZWFkZXIgPSBGQUxTRTsKKyAgICAv
KiBBZGp1c3QgRXhpZiBpbWFnZSBwYXJhbWV0ZXJzICovCisgICAgaWYgKGRzdGluZm8tPmltYWdl
X3dpZHRoICE9IHNyY2luZm8tPmltYWdlX3dpZHRoIHx8CisJZHN0aW5mby0+aW1hZ2VfaGVpZ2h0
ICE9IHNyY2luZm8tPmltYWdlX2hlaWdodCkKKyAgICAgIC8qIEFsaWduIGRhdGEgc2VnbWVudCB0
byBzdGFydCBvZiBUSUZGIHN0cnVjdHVyZSBmb3IgcGFyc2luZyAqLworICAgICAgYWRqdXN0X2V4
aWZfcGFyYW1ldGVycyhzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YSArIDYsCisJc3JjaW5mby0+
bWFya2VyX2xpc3QtPmRhdGFfbGVuZ3RoIC0gNiwKKwlkc3RpbmZvLT5pbWFnZV93aWR0aCwgZHN0
aW5mby0+aW1hZ2VfaGVpZ2h0KTsKKyAgfQorCiAgIC8qIFJldHVybiB0aGUgYXBwcm9wcmlhdGUg
b3V0cHV0IGRhdGEgc2V0ICovCiAgIGlmIChpbmZvLT53b3Jrc3BhY2VfY29lZl9hcnJheXMgIT0g
TlVMTCkKICAgICByZXR1cm4gaW5mby0+d29ya3NwYWNlX2NvZWZfYXJyYXlzOwpAQCAtODE2LDQw
ICsxMzQ5LDEwOCBAQAogICovCiAKIEdMT0JBTCh2b2lkKQotanRyYW5zZm9ybV9leGVjdXRlX3Ry
YW5zZm9ybWF0aW9uIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCi0JCQkJICAgal9jb21wcmVz
c19wdHIgZHN0aW5mbywKLQkJCQkgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMs
Ci0JCQkJICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKK2p0cmFuc2Zvcm1fZXhlY3V0ZV90
cmFuc2Zvcm0gKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywKKwkJCSAgICAgIGpfY29tcHJlc3Nf
cHRyIGRzdGluZm8sCisJCQkgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMs
CisJCQkgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKQogewogICBqdmlydF9iYXJyYXlf
cHRyICpkc3RfY29lZl9hcnJheXMgPSBpbmZvLT53b3Jrc3BhY2VfY29lZl9hcnJheXM7CiAKKyAg
LyogTm90ZTogY29uZGl0aW9ucyB0ZXN0ZWQgaGVyZSBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gc3dp
dGNoIHN0YXRlbWVudAorICAgKiBpbiBqdHJhbnNmb3JtX3JlcXVlc3Rfd29ya3NwYWNlKCkKKyAg
ICovCiAgIHN3aXRjaCAoaW5mby0+dHJhbnNmb3JtKSB7CiAgIGNhc2UgSlhGT1JNX05PTkU6Cisg
ICAgaWYgKGluZm8tPnhfY3JvcF9vZmZzZXQgIT0gMCB8fCBpbmZvLT55X2Nyb3Bfb2Zmc2V0ICE9
IDApCisgICAgICBkb19jcm9wKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQs
IGluZm8tPnlfY3JvcF9vZmZzZXQsCisJICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9h
cnJheXMpOwogICAgIGJyZWFrOwogICBjYXNlIEpYRk9STV9GTElQX0g6Ci0gICAgZG9fZmxpcF9o
KHNyY2luZm8sIGRzdGluZm8sIHNyY19jb2VmX2FycmF5cyk7CisgICAgaWYgKGluZm8tPnlfY3Jv
cF9vZmZzZXQgIT0gMCkKKyAgICAgIGRvX2ZsaXBfaChzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54
X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAorCQlzcmNfY29lZl9hcnJheXMsIGRz
dF9jb2VmX2FycmF5cyk7CisgICAgZWxzZQorICAgICAgZG9fZmxpcF9oX25vX2Nyb3Aoc3JjaW5m
bywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwKKwkJCXNyY19jb2VmX2FycmF5cyk7CiAg
ICAgYnJlYWs7CiAgIGNhc2UgSlhGT1JNX0ZMSVBfVjoKLSAgICBkb19mbGlwX3Yoc3JjaW5mbywg
ZHN0aW5mbywgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgIGRvX2ZsaXBf
dihzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zm
c2V0LAorCSAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKICAgICBicmVh
azsKICAgY2FzZSBKWEZPUk1fVFJBTlNQT1NFOgotICAgIGRvX3RyYW5zcG9zZShzcmNpbmZvLCBk
c3RpbmZvLCBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgZG9fdHJhbnNw
b3NlKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9v
ZmZzZXQsCisJCSBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CiAgICAgYnJlYWs7
CiAgIGNhc2UgSlhGT1JNX1RSQU5TVkVSU0U6Ci0gICAgZG9fdHJhbnN2ZXJzZShzcmNpbmZvLCBk
c3RpbmZvLCBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgZG9fdHJhbnN2
ZXJzZShzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bf
b2Zmc2V0LAorCQkgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKICAgICBicmVh
azsKICAgY2FzZSBKWEZPUk1fUk9UXzkwOgotICAgIGRvX3JvdF85MChzcmNpbmZvLCBkc3RpbmZv
LCBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgZG9fcm90XzkwKHNyY2lu
Zm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCisJ
ICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGJyZWFrOwogICBj
YXNlIEpYRk9STV9ST1RfMTgwOgotICAgIGRvX3JvdF8xODAoc3JjaW5mbywgZHN0aW5mbywgc3Jj
X2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgIGRvX3JvdF8xODAoc3JjaW5mbywg
ZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKwkgICAg
ICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGJyZWFrOwogICBjYXNl
IEpYRk9STV9ST1RfMjcwOgotICAgIGRvX3JvdF8yNzAoc3JjaW5mbywgZHN0aW5mbywgc3JjX2Nv
ZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgIGRvX3JvdF8yNzAoc3JjaW5mbywgZHN0
aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKKwkgICAgICAg
c3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGJyZWFrOwogICB9CiB9CiAK
Ky8qIGp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0KKyAqCisgKiBEZXRlcm1pbmUgd2hldGhl
ciBsb3NzbGVzcyB0cmFuc2Zvcm1hdGlvbiBpcyBwZXJmZWN0bHkKKyAqIHBvc3NpYmxlIGZvciBh
IHNwZWNpZmllZCBpbWFnZSBhbmQgdHJhbnNmb3JtYXRpb24uCisgKgorICogSW5wdXRzOgorICog
ICBpbWFnZV93aWR0aCwgaW1hZ2VfaGVpZ2h0OiBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucy4KKyAq
ICAgTUNVX3dpZHRoLCBNQ1VfaGVpZ2h0OiBwaXhlbCBkaW1lbnNpb25zIG9mIE1DVS4KKyAqICAg
dHJhbnNmb3JtOiB0cmFuc2Zvcm1hdGlvbiBpZGVudGlmaWVyLgorICogUGFyYW1ldGVyIHNvdXJj
ZXMgZnJvbSBpbml0aWFsaXplZCBqcGVnX3N0cnVjdAorICogKGFmdGVyIHJlYWRpbmcgc291cmNl
IGhlYWRlcik6CisgKiAgIGltYWdlX3dpZHRoID0gY2luZm8uaW1hZ2Vfd2lkdGgKKyAqICAgaW1h
Z2VfaGVpZ2h0ID0gY2luZm8uaW1hZ2VfaGVpZ2h0CisgKiAgIE1DVV93aWR0aCA9IGNpbmZvLm1h
eF9oX3NhbXBfZmFjdG9yICogRENUU0laRQorICogICBNQ1VfaGVpZ2h0ID0gY2luZm8ubWF4X3Zf
c2FtcF9mYWN0b3IgKiBEQ1RTSVpFCisgKiBSZXN1bHQ6CisgKiAgIFRSVUUgPSBwZXJmZWN0IHRy
YW5zZm9ybWF0aW9uIHBvc3NpYmxlCisgKiAgIEZBTFNFID0gcGVyZmVjdCB0cmFuc2Zvcm1hdGlv
biBub3QgcG9zc2libGUKKyAqICAgICAgICAgICAobWF5IHVzZSBjdXN0b20gYWN0aW9uIHRoZW4p
CisgKi8KKworR0xPQkFMKGJvb2xlYW4pCitqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtKEpE
SU1FTlNJT04gaW1hZ2Vfd2lkdGgsIEpESU1FTlNJT04gaW1hZ2VfaGVpZ2h0LAorCQkJICAgICBp
bnQgTUNVX3dpZHRoLCBpbnQgTUNVX2hlaWdodCwKKwkJCSAgICAgSlhGT1JNX0NPREUgdHJhbnNm
b3JtKQoreworICBib29sZWFuIHJlc3VsdCA9IFRSVUU7IC8qIGluaXRpYWxpemUgVFJVRSAqLwor
CisgIHN3aXRjaCAodHJhbnNmb3JtKSB7CisgIGNhc2UgSlhGT1JNX0ZMSVBfSDoKKyAgY2FzZSBK
WEZPUk1fUk9UXzI3MDoKKyAgICBpZiAoaW1hZ2Vfd2lkdGggJSAoSkRJTUVOU0lPTikgTUNVX3dp
ZHRoKQorICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgSlhGT1JNX0ZM
SVBfVjoKKyAgY2FzZSBKWEZPUk1fUk9UXzkwOgorICAgIGlmIChpbWFnZV9oZWlnaHQgJSAoSkRJ
TUVOU0lPTikgTUNVX2hlaWdodCkKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIGJyZWFrOwor
ICBjYXNlIEpYRk9STV9UUkFOU1ZFUlNFOgorICBjYXNlIEpYRk9STV9ST1RfMTgwOgorICAgIGlm
IChpbWFnZV93aWR0aCAlIChKRElNRU5TSU9OKSBNQ1Vfd2lkdGgpCisgICAgICByZXN1bHQgPSBG
QUxTRTsKKyAgICBpZiAoaW1hZ2VfaGVpZ2h0ICUgKEpESU1FTlNJT04pIE1DVV9oZWlnaHQpCisg
ICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7
Cit9CisKICNlbmRpZiAvKiBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAqLwogCiAKLS0tIGpwZWctNmIv
dHJhbnN1cHAuaAlUaHUgSnVsIDI0IDE0OjM5OjEyIDE5OTcKKysrIGpwZWctNmJfcDIwMDMwOTIy
L3RyYW5zdXBwLmgJTW9uIFNlcCAyMiAwODo1MzowOCAyMDAzCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIHRyYW5zdXBwLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcsIFRob21hcyBHLiBMYW5l
LgorICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEsIFRob21hcyBHLiBMYW5lLgogICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAq
IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFu
eWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMiwzMiArMjIsNiBAQAogI2RlZmluZSBUUkFOU0ZP
Uk1TX1NVUFBPUlRFRCAxCQkvKiAwIGRpc2FibGVzIHRyYW5zZm9ybSBjb2RlICovCiAjZW5kaWYK
IAotLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFp
bi1kYW1hZ2VkIGxpbmtlcnMuICovCi0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVT
Ci0jZGVmaW5lIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UJCWpUclJlcXVlc3QKLSNkZWZp
bmUganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycwkJalRyQWRqdXN0Ci0jZGVmaW5lIGp0cmFu
c2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbglqVHJFeGVjCi0jZGVmaW5lIGpjb3B5X21hcmtl
cnNfc2V0dXAJCQlqQ01ya1NldHVwCi0jZGVmaW5lIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQkJCWpD
TXJrRXhlYwotI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KLQotCi0vKgot
ICogQ29kZXMgZm9yIHN1cHBvcnRlZCB0eXBlcyBvZiBpbWFnZSB0cmFuc2Zvcm1hdGlvbnMuCi0g
Ki8KLQotdHlwZWRlZiBlbnVtIHsKLQlKWEZPUk1fTk9ORSwJCS8qIG5vIHRyYW5zZm9ybWF0aW9u
ICovCi0JSlhGT1JNX0ZMSVBfSCwJCS8qIGhvcml6b250YWwgZmxpcCAqLwotCUpYRk9STV9GTElQ
X1YsCQkvKiB2ZXJ0aWNhbCBmbGlwICovCi0JSlhGT1JNX1RSQU5TUE9TRSwJLyogdHJhbnNwb3Nl
IGFjcm9zcyBVTC10by1MUiBheGlzICovCi0JSlhGT1JNX1RSQU5TVkVSU0UsCS8qIHRyYW5zcG9z
ZSBhY3Jvc3MgVVItdG8tTEwgYXhpcyAqLwotCUpYRk9STV9ST1RfOTAsCQkvKiA5MC1kZWdyZWUg
Y2xvY2t3aXNlIHJvdGF0aW9uICovCi0JSlhGT1JNX1JPVF8xODAsCQkvKiAxODAtZGVncmVlIHJv
dGF0aW9uICovCi0JSlhGT1JNX1JPVF8yNzAJCS8qIDI3MC1kZWdyZWUgY2xvY2t3aXNlIChvciA5
MCBjY3cpICovCi19IEpYRk9STV9DT0RFOwotCiAvKgogICogQWx0aG91Z2ggcm90YXRpbmcgYW5k
IGZsaXBwaW5nIGRhdGEgZXhwcmVzc2VkIGFzIERDVCBjb2VmZmljaWVudHMgaXMgbm90CiAgKiBo
YXJkLCB0aGVyZSBpcyBhbiBhc3ltbWV0cnkgaW4gdGhlIEpQRUcgZm9ybWF0IHNwZWNpZmljYXRp
b24gZm9yIGltYWdlcwpAQCAtNzUsNiArNDksMTkgQEAKICAqIChGb3IgZXhhbXBsZSwgLXJvdCAy
NzAgLXRyaW0gdHJpbXMgb25seSB0aGUgYm90dG9tIGVkZ2UsIGJ1dCAtcm90IDkwIC10cmltCiAg
KiBmb2xsb3dlZCBieSAtcm90IDE4MCAtdHJpbSB0cmltcyBib3RoIGVkZ2VzLikKICAqCisgKiBX
ZSBhbHNvIG9mZmVyIGEgbG9zc2xlc3MtY3JvcCBvcHRpb24sIHdoaWNoIGRpc2NhcmRzIGRhdGEg
b3V0c2lkZSBhIGdpdmVuCisgKiBpbWFnZSByZWdpb24gYnV0IGxvc3NsZXNzbHkgcHJlc2VydmVz
IHdoYXQgaXMgaW5zaWRlLiAgTGlrZSB0aGUgcm90YXRlIGFuZAorICogZmxpcCB0cmFuc2Zvcm1z
LCBsb3NzbGVzcyBjcm9wIGlzIHJlc3RyaWN0ZWQgYnkgdGhlIEpQRUcgZm9ybWF0OiB0aGUgdXBw
ZXIKKyAqIGxlZnQgY29ybmVyIG9mIHRoZSBzZWxlY3RlZCByZWdpb24gbXVzdCBmYWxsIG9uIGFu
IGlNQ1UgYm91bmRhcnkuICBJZiB0aGlzCisgKiBkb2VzIG5vdCBob2xkIGZvciB0aGUgZ2l2ZW4g
Y3JvcCBwYXJhbWV0ZXJzLCB3ZSBzaWxlbnRseSBtb3ZlIHRoZSB1cHBlciBsZWZ0CisgKiBjb3Ju
ZXIgdXAgYW5kL29yIGxlZnQgdG8gbWFrZSBpdCBzbywgc2ltdWx0YW5lb3VzbHkgaW5jcmVhc2lu
ZyB0aGUgcmVnaW9uCisgKiBkaW1lbnNpb25zIHRvIGtlZXAgdGhlIGxvd2VyIHJpZ2h0IGNyb3Ag
Y29ybmVyIHVuY2hhbmdlZC4gIChUaHVzLCB0aGUKKyAqIG91dHB1dCBpbWFnZSBjb3ZlcnMgYXQg
bGVhc3QgdGhlIHJlcXVlc3RlZCByZWdpb24sIGJ1dCBtYXkgY292ZXIgbW9yZS4pCisgKgorICog
SWYgYm90aCBjcm9wIGFuZCBhIHJvdGF0ZS9mbGlwIHRyYW5zZm9ybSBhcmUgcmVxdWVzdGVkLCB0
aGUgY3JvcCBpcyBhcHBsaWVkCisgKiBsYXN0IC0tLSB0aGF0IGlzLCB0aGUgY3JvcCByZWdpb24g
aXMgc3BlY2lmaWVkIGluIHRlcm1zIG9mIHRoZSBkZXN0aW5hdGlvbgorICogaW1hZ2UuCisgKgog
ICogV2UgYWxzbyBvZmZlciBhICJmb3JjZSB0byBncmF5c2NhbGUiIG9wdGlvbiwgd2hpY2ggc2lt
cGx5IGRpc2NhcmRzIHRoZQogICogY2hyb21pbmFuY2UgY2hhbm5lbHMgb2YgYSBZQ2JDciBpbWFn
ZS4gIFRoaXMgaXMgbG9zc2xlc3MgaW4gdGhlIHNlbnNlIHRoYXQKICAqIHRoZSBsdW1pbmFuY2Ug
Y2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseS4gIEl0J3Mgbm90IHRoZSBzYW1lIGtpbmQgb2YK
QEAgLTgzLDIwICs3MCw4OSBAQAogICogYmUgYXdhcmUgb2YgdGhlIG9wdGlvbiB0byBrbm93IGhv
dyBtYW55IGNvbXBvbmVudHMgdG8gd29yayBvbi4KICAqLwogCisKKy8qIFNob3J0IGZvcm1zIG9m
IGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAq
LworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqdHJhbnNmb3Jt
X3BhcnNlX2Nyb3Bfc3BlYwlqVHJQYXJDcm9wCisjZGVmaW5lIGp0cmFuc2Zvcm1fcmVxdWVzdF93
b3Jrc3BhY2UJalRyUmVxdWVzdAorI2RlZmluZSBqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJz
CWpUckFkanVzdAorI2RlZmluZSBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtCWpUckV4ZWMK
KyNkZWZpbmUganRyYW5zZm9ybV9wZXJmZWN0X3RyYW5zZm9ybQlqVHJQZXJmZWN0CisjZGVmaW5l
IGpjb3B5X21hcmtlcnNfc2V0dXAJCWpDTXJrU2V0dXAKKyNkZWZpbmUgamNvcHlfbWFya2Vyc19l
eGVjdXRlCQlqQ01ya0V4ZWMKKyNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICov
CisKKworLyoKKyAqIENvZGVzIGZvciBzdXBwb3J0ZWQgdHlwZXMgb2YgaW1hZ2UgdHJhbnNmb3Jt
YXRpb25zLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJSlhGT1JNX05PTkUsCQkvKiBubyB0cmFu
c2Zvcm1hdGlvbiAqLworCUpYRk9STV9GTElQX0gsCQkvKiBob3Jpem9udGFsIGZsaXAgKi8KKwlK
WEZPUk1fRkxJUF9WLAkJLyogdmVydGljYWwgZmxpcCAqLworCUpYRk9STV9UUkFOU1BPU0UsCS8q
IHRyYW5zcG9zZSBhY3Jvc3MgVUwtdG8tTFIgYXhpcyAqLworCUpYRk9STV9UUkFOU1ZFUlNFLAkv
KiB0cmFuc3Bvc2UgYWNyb3NzIFVSLXRvLUxMIGF4aXMgKi8KKwlKWEZPUk1fUk9UXzkwLAkJLyog
OTAtZGVncmVlIGNsb2Nrd2lzZSByb3RhdGlvbiAqLworCUpYRk9STV9ST1RfMTgwLAkJLyogMTgw
LWRlZ3JlZSByb3RhdGlvbiAqLworCUpYRk9STV9ST1RfMjcwCQkvKiAyNzAtZGVncmVlIGNsb2Nr
d2lzZSAob3IgOTAgY2N3KSAqLworfSBKWEZPUk1fQ09ERTsKKworLyoKKyAqIENvZGVzIGZvciBj
cm9wIHBhcmFtZXRlcnMsIHdoaWNoIGNhbiBpbmRpdmlkdWFsbHkgYmUgdW5zcGVjaWZpZWQsCisg
KiBwb3NpdGl2ZSwgb3IgbmVnYXRpdmUuICAoTmVnYXRpdmUgd2lkdGggb3IgaGVpZ2h0IG1ha2Vz
IG5vIHNlbnNlLCB0aG91Z2guKQorICovCisKK3R5cGVkZWYgZW51bSB7CisJSkNST1BfVU5TRVQs
CisJSkNST1BfUE9TLAorCUpDUk9QX05FRworfSBKQ1JPUF9DT0RFOworCisvKgorICogVHJhbnNm
b3JtIHBhcmFtZXRlcnMgc3RydWN0LgorICogTkI6IGFwcGxpY2F0aW9uIG11c3Qgbm90IGNoYW5n
ZSBhbnkgZWxlbWVudHMgb2YgdGhpcyBzdHJ1Y3QgYWZ0ZXIKKyAqIGNhbGxpbmcganRyYW5zZm9y
bV9yZXF1ZXN0X3dvcmtzcGFjZS4KKyAqLworCiB0eXBlZGVmIHN0cnVjdCB7CiAgIC8qIE9wdGlv
bnM6IHNldCBieSBjYWxsZXIgKi8KICAgSlhGT1JNX0NPREUgdHJhbnNmb3JtOwkvKiBpbWFnZSB0
cmFuc2Zvcm0gb3BlcmF0b3IgKi8KKyAgYm9vbGVhbiBwZXJmZWN0OwkJLyogaWYgVFJVRSwgZmFp
bCBpZiBwYXJ0aWFsIE1DVXMgYXJlIHJlcXVlc3RlZCAqLwogICBib29sZWFuIHRyaW07CQkJLyog
aWYgVFJVRSwgdHJpbSBwYXJ0aWFsIE1DVXMgYXMgbmVlZGVkICovCiAgIGJvb2xlYW4gZm9yY2Vf
Z3JheXNjYWxlOwkvKiBpZiBUUlVFLCBjb252ZXJ0IGNvbG9yIGltYWdlIHRvIGdyYXlzY2FsZSAq
LworICBib29sZWFuIGNyb3A7CQkJLyogaWYgVFJVRSwgY3JvcCBzb3VyY2UgaW1hZ2UgKi8KKwor
ICAvKiBDcm9wIHBhcmFtZXRlcnM6IGFwcGxpY2F0aW9uIG5lZWQgbm90IHNldCB0aGVzZSB1bmxl
c3MgY3JvcCBpcyBUUlVFLgorICAgKiBUaGVzZSBjYW4gYmUgZmlsbGVkIGluIGJ5IGp0cmFuc2Zv
cm1fcGFyc2VfY3JvcF9zcGVjKCkuCisgICAqLworICBKRElNRU5TSU9OIGNyb3Bfd2lkdGg7CS8q
IFdpZHRoIG9mIHNlbGVjdGVkIHJlZ2lvbiAqLworICBKQ1JPUF9DT0RFIGNyb3Bfd2lkdGhfc2V0
OworICBKRElNRU5TSU9OIGNyb3BfaGVpZ2h0OwkvKiBIZWlnaHQgb2Ygc2VsZWN0ZWQgcmVnaW9u
ICovCisgIEpDUk9QX0NPREUgY3JvcF9oZWlnaHRfc2V0OworICBKRElNRU5TSU9OIGNyb3BfeG9m
ZnNldDsJLyogWCBvZmZzZXQgb2Ygc2VsZWN0ZWQgcmVnaW9uICovCisgIEpDUk9QX0NPREUgY3Jv
cF94b2Zmc2V0X3NldDsJLyogKG5lZ2F0aXZlIG1lYXN1cmVzIGZyb20gcmlnaHQgZWRnZSkgKi8K
KyAgSkRJTUVOU0lPTiBjcm9wX3lvZmZzZXQ7CS8qIFkgb2Zmc2V0IG9mIHNlbGVjdGVkIHJlZ2lv
biAqLworICBKQ1JPUF9DT0RFIGNyb3BfeW9mZnNldF9zZXQ7CS8qIChuZWdhdGl2ZSBtZWFzdXJl
cyBmcm9tIGJvdHRvbSBlZGdlKSAqLwogCiAgIC8qIEludGVybmFsIHdvcmtzcGFjZTogY2FsbGVy
IHNob3VsZCBub3QgdG91Y2ggdGhlc2UgKi8KICAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBv
ZiBjb21wb25lbnRzIGluIHdvcmtzcGFjZSAqLwogICBqdmlydF9iYXJyYXlfcHRyICogd29ya3Nw
YWNlX2NvZWZfYXJyYXlzOyAvKiB3b3Jrc3BhY2UgZm9yIHRyYW5zZm9ybWF0aW9ucyAqLworICBK
RElNRU5TSU9OIG91dHB1dF93aWR0aDsJLyogY3JvcHBlZCBkZXN0aW5hdGlvbiBkaW1lbnNpb25z
ICovCisgIEpESU1FTlNJT04gb3V0cHV0X2hlaWdodDsKKyAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zm
c2V0OwkvKiBkZXN0aW5hdGlvbiBjcm9wIG9mZnNldHMgbWVhc3VyZWQgaW4gaU1DVXMgKi8KKyAg
SkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0OworICBpbnQgbWF4X2hfc2FtcF9mYWN0b3I7CS8qIGRl
c3RpbmF0aW9uIGlNQ1Ugc2l6ZSAqLworICBpbnQgbWF4X3Zfc2FtcF9mYWN0b3I7CiB9IGpwZWdf
dHJhbnNmb3JtX2luZm87CiAKIAogI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVECiAKKy8qIFBhcnNl
IGEgY3JvcCBzcGVjaWZpY2F0aW9uICh3cml0dGVuIGluIFgxMSBnZW9tZXRyeSBzdHlsZSkgKi8K
K0VYVEVSTihib29sZWFuKSBqdHJhbnNmb3JtX3BhcnNlX2Nyb3Bfc3BlYworCUpQUCgoanBlZ190
cmFuc2Zvcm1faW5mbyAqaW5mbywgY29uc3QgY2hhciAqc3BlYykpOwogLyogUmVxdWVzdCBhbnkg
cmVxdWlyZWQgd29ya3NwYWNlICovCiBFWFRFUk4odm9pZCkganRyYW5zZm9ybV9yZXF1ZXN0X3dv
cmtzcGFjZQogCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqcGVnX3RyYW5zZm9ybV9p
bmZvICppbmZvKSk7CkBAIC0xMDYsMTAgKzE2MiwyNCBAQAogCSAgICAganZpcnRfYmFycmF5X3B0
ciAqc3JjX2NvZWZfYXJyYXlzLAogCSAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykpOwog
LyogRXhlY3V0ZSB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLCBpZiBhbnkgKi8KLUVYVEVSTih2
b2lkKSBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtYXRpb24KK0VYVEVSTih2b2lkKSBqdHJh
bnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtCiAJSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8s
IGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCiAJICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29l
Zl9hcnJheXMsCiAJICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7CisvKiBEZXRlcm1p
bmUgd2hldGhlciBsb3NzbGVzcyB0cmFuc2Zvcm1hdGlvbiBpcyBwZXJmZWN0bHkKKyAqIHBvc3Np
YmxlIGZvciBhIHNwZWNpZmllZCBpbWFnZSBhbmQgdHJhbnNmb3JtYXRpb24uCisgKi8KK0VYVEVS
Tihib29sZWFuKSBqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtCisJSlBQKChKRElNRU5TSU9O
IGltYWdlX3dpZHRoLCBKRElNRU5TSU9OIGltYWdlX2hlaWdodCwKKwkgICAgIGludCBNQ1Vfd2lk
dGgsIGludCBNQ1VfaGVpZ2h0LAorCSAgICAgSlhGT1JNX0NPREUgdHJhbnNmb3JtKSk7CisKKy8q
IGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm0gdXNlZCB0byBiZSBjYWxsZWQKKyAqIGp0cmFu
c2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbiwgYnV0IHNvbWUgY29tcGlsZXJzIGNvbXBsYWlu
IGFib3V0CisgKiByb3V0aW5lIG5hbWVzIHRoYXQgbG9uZy4gIFRoaXMgbWFjcm8gaXMgaGVyZSB0
byBhdm9pZCBicmVha2luZyBhbnkKKyAqIG9sZCBzb3VyY2UgY29kZSB0aGF0IHVzZXMgdGhlIG9y
aWdpbmFsIG5hbWUuLi4KKyAqLworI2RlZmluZSBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3Jt
YXRpb24JanRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybQogCiAjZW5kaWYgLyogVFJBTlNGT1JN
U19TVVBQT1JURUQgKi8KIAotLS0ganBlZy02Yi9qcGVndHJhbi4xCU1vbiBBdWcgIDQgMDg6MDE6
MDEgMTk5NworKysganBlZy02Yl9wMjAwMzA5MjIvanBlZ3RyYW4uMQlNb24gTWF5ICA5IDA0OjI5
OjM0IDIwMDUKQEAgLTEzMSw2ICsxMzEsNDAgQEAKIC5CIFwtcm90IDE4MCAtdHJpbQogdHJpbXMg
Ym90aCBlZGdlcy4KIC5QUAorSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgYnkgcGVyZmVjdCB0
cmFuc2Zvcm1hdGlvbiwgYWRkIHRoZQorLkIgXC1wZXJmZWN0Citzd2l0Y2g6CisuVFAKKy5CIFwt
cGVyZmVjdAorRmFpbHMgd2l0aCBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgbm90
IHBlcmZlY3QuIEZvciBleGFtcGxlCit5b3UgbWF5IHdhbnQgdG8gZG8KKy5UUAorLkIgKGpwZWd0
cmFuIFwtcm90IDkwIC1wZXJmZWN0IGZvby5qcGcgfHwgZGpwZWcgZm9vLmpwZ3wgcG5tZmxpcCBc
LXI5MCB8IGNqcGVnKQordG8gZG8gYSBwZXJmZWN0IHJvdGF0aW9uIGlmIGF2YWlsYWJsZSBvciBh
biBhcHByb3hpbWF0ZWQgb25lIGlmCitub3QuCisuUFAKK1dlIGFsc28gb2ZmZXIgYSBsb3NzbGVz
cy1jcm9wIG9wdGlvbiwgd2hpY2ggZGlzY2FyZHMgZGF0YSBvdXRzaWRlIGEgZ2l2ZW4KK2ltYWdl
IHJlZ2lvbiBidXQgbG9zc2xlc3NseSBwcmVzZXJ2ZXMgd2hhdCBpcyBpbnNpZGUuICBMaWtlIHRo
ZSByb3RhdGUgYW5kCitmbGlwIHRyYW5zZm9ybXMsIGxvc3NsZXNzIGNyb3AgaXMgcmVzdHJpY3Rl
ZCBieSB0aGUgSlBFRyBmb3JtYXQ6IHRoZSB1cHBlcgorbGVmdCBjb3JuZXIgb2YgdGhlIHNlbGVj
dGVkIHJlZ2lvbiBtdXN0IGZhbGwgb24gYW4gaU1DVSBib3VuZGFyeS4gIElmIHRoaXMKK2RvZXMg
bm90IGhvbGQgZm9yIHRoZSBnaXZlbiBjcm9wIHBhcmFtZXRlcnMsIHdlIHNpbGVudGx5IG1vdmUg
dGhlIHVwcGVyIGxlZnQKK2Nvcm5lciB1cCBhbmQvb3IgbGVmdCB0byBtYWtlIGl0IHNvLCBzaW11
bHRhbmVvdXNseSBpbmNyZWFzaW5nIHRoZSByZWdpb24KK2RpbWVuc2lvbnMgdG8ga2VlcCB0aGUg
bG93ZXIgcmlnaHQgY3JvcCBjb3JuZXIgdW5jaGFuZ2VkLiAgKFRodXMsIHRoZQorb3V0cHV0IGlt
YWdlIGNvdmVycyBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIHJlZ2lvbiwgYnV0IG1heSBjb3ZlciBt
b3JlLikKKworTm90ZTogCisuQiBcLXBlcmZlY3QKK2FuZAorLkIgbG9zc2xlc3MtY3JvcAorYXJl
IGVuaGFuY2VtZW50cyBmcm9tIGh0dHA6Ly9zeWx2YW5hLm5ldC9qcGVnY3JvcC8gdGhhdCBtYXkg
bm90IGJlIGF2YWlsYWJsZSBvbgorbm9uLUdlbnRvbyAoYW5kIG5vbi1EZWJpYW4pIHN5c3RlbXMu
CisKK1RoZSBpbWFnZSBjYW4gYmUgbG9zc2xlc3NseSBjcm9wcGVkIGJ5IGdpdmluZyB0aGUgc3dp
dGNoOgorLlRQCisuQiBcLWNyb3AgV3hIK1grWQorQ3JvcCB0byBhIHJlY3Rhbmd1bGFyIHN1YmFy
ZWEgb2Ygd2lkdGggVywgaGVpZ2h0IEggc3RhcnRpbmcgYXQgcG9pbnQgWCxZLgorLlBQCisuUFAK
IEFub3RoZXIgbm90LXN0cmljdGx5LWxvc3NsZXNzIHRyYW5zZm9ybWF0aW9uIHN3aXRjaCBpczoK
IC5UUAogLkIgXC1ncmF5c2NhbGUKQEAgLTIzMSw3ICsyNjUsOSBAQAogLlBQCiBUaGUgdHJhbnNm
b3JtIG9wdGlvbnMgY2FuJ3QgdHJhbnNmb3JtIG9kZC1zaXplIGltYWdlcyBwZXJmZWN0bHkuICBV
c2UKIC5CIFwtdHJpbQotaWYgeW91IGRvbid0IGxpa2UgdGhlIHJlc3VsdHMgd2l0aG91dCBpdC4K
K29yCisuQiBcLXBlcmZlY3QKK2lmIHlvdSBkb24ndCBsaWtlIHRoZSByZXN1bHRzLgogLlBQCiBU
aGUgZW50aXJlIGltYWdlIGlzIHJlYWQgaW50byBtZW1vcnkgYW5kIHRoZW4gd3JpdHRlbiBvdXQg
YWdhaW4sIGV2ZW4gaW4KIGNhc2VzIHdoZXJlIHRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeS4g
IEV4cGVjdCBzd2FwcGluZyBvbiBsYXJnZSBpbWFnZXMsCg==
</data>        

          </attachment>
    </bug>

</bugzilla>