delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2016/01/14/20:52:37

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:in-reply-to:references:date:message-id:subject:from:to
:content-type;
bh=VP0UDiNw2a27UY+O+tk84hfwxlWn7fGqpw0+PXOrjZ0=;
b=odkZSNWPCIKpXKOJD5Xf4hhxDUp3LXtVcxRZy97u0XxiJ/7uFuVF0ELNJblc5Ew5Us
WtstpOswHqac8JfkhkmVEeviJJtz4iNXhQXIFDWymSzUxPp5Al65dbFY7WlK9CAFIPqt
M6PUKwDhv/mr4KXPS7adegQ6JHACYUyycTC1/yJcyUmrOMMbFfTQnhKnbXhIlwq/k98V
DkgSsE0+VMiDSJtxLcKaDOP5/+Rir8pw8b8xIPfZXUuxBtJpLxM/aIir9MQ+SjMU3Rzz
GyWibHCPevcbiMe6RNkQXxdYz5/uirJ03S2We30+LtTEMYMYZDqfApwNR7kbLCZwq46O
Xouw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20130820;
h=x-gm-message-state:mime-version:in-reply-to:references:date
:message-id:subject:from:to:content-type;
bh=VP0UDiNw2a27UY+O+tk84hfwxlWn7fGqpw0+PXOrjZ0=;
b=ILntfBwH0kzvLfsC5SVWESMmMJLPCQIVBGY59vAY6zy9CwfwpYA9HYg6lD0ncTt7bi
U3MTuHPAOMQ4X8b+SXuTJkssuJTz8X7YvcY5jTlWX+tp0g6YmGBlxHmkquc9StVNZOSs
zv0Eq80TFSMUeGHLLv9QjFwmweefKtJzqZGCnNTOMcKkITjPj1HYiVFzL2sMW4E3hk1j
Yp+7QSy70TUXXESAUrKacUiVVCEL12SEWzqEBItU2ayXjeILhuIeNBy215D5HT//Qn7o
6g8pSKSFpjM379pO3sqKP+rP3aaSb05IS67DukSqT2Jgu0QEQskFGdyhPg+LszDFHye9
bMgw==
X-Gm-Message-State: ALoCoQlgoEjaZdX+mfjsanTdqKMJ7Ye1hkD45ukvKVdQ77MndYToQ+BaJb9hkS0pWxf/eYnEk0n41z/T1RMXszdjR/gR4Qpw0g==
MIME-Version: 1.0
X-Received: by 10.194.6.98 with SMTP id z2mr6948138wjz.101.1452822660251; Thu,
14 Jan 2016 17:51:00 -0800 (PST)
In-Reply-To: <56982D5A.1020706@prochac.sk>
References: <CAC4O8c8tTutWKvXFA-nfcmUiUGYbOY1_5171Vf3WDk09Tmx3yw AT mail DOT gmail DOT com>
<56982D5A DOT 1020706 AT prochac DOT sk>
Date: Thu, 14 Jan 2016 16:51:00 -0900
Message-ID: <CAC4O8c93jC=qRPAHnzBCrVYONGnyvQ55qv5yQ-vor8es-0_meg@mail.gmail.com>
Subject: Re: [geda-user] LP1532611 (modular fie formats) fixes
From: "Britton Kerin (britton DOT kerin AT gmail DOT com) [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
To: geda-user AT delorie DOT com
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--047d7b5d3e64967bb5052955a20e
Content-Type: multipart/alternative; boundary=047d7b5d3e64967bb0052955a20c

--047d7b5d3e64967bb0052955a20c
Content-Type: text/plain; charset=UTF-8

On Thu, Jan 14, 2016 at 2:20 PM, Milan Prochac (milan AT prochac DOT sk) [via
geda-user AT delorie DOT com] <geda-user AT delorie DOT com> wrote:

> On 12. 1. 2016 20:23, Britton Kerin (britton DOT kerin AT gmail DOT com) [via
> geda-user AT delorie DOT com] wrote:
>
>>
>> I'm working on this branch there are some minor issues.  I'll push fixes
>> to LP1532611_fixes
>>
>>
> Can you share details about the issues? I guess I can identify the culprit
> and prepare fix faster
>

Attached is a patch showing roughly what I've found.  The fftemplate.c is
entirely in this patch but I didn't change anything in it besides including
assert.h I think.

It comes down to a little more honoring of default format (e.g. making sure
its in default position in format list in SaveAs, checks that only one
defualt format is specified, and stuff to take care of situation where
PCB->Filename is known and PCB->Fileformat not.  Some or all of that last
category of change may be uneeded with the patch you propose for invalid
file arguments (which I think is the right fix for that).

I'd like for you to "own" this code for sure as you can almost surely
improve it faster and better, but I'd like to start using it as well.  If
you aren't wanting to use git yet it would be nice to get you synced up
with a repository version (one way or another, either you can sync to
home/bert/LP1532611 or we could declare the edits in that branch premature
and restart it with a new patch from you).  You can then send patches to
whoever owns the branch so people can track it.

Britton

--047d7b5d3e64967bb0052955a20c
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><div class=3D"gmail_quote">=
On Thu, Jan 14, 2016 at 2:20 PM, Milan Prochac (<a href=3D"mailto:milan AT pro=
chac.sk">milan AT prochac DOT sk</a>) [via <a href=3D"mailto:geda-user AT delorie DOT com=
">geda-user AT delorie DOT com</a>] <span dir=3D"ltr">&lt;<a href=3D"mailto:geda-u=
ser AT delorie DOT com" target=3D"_blank">geda-user AT delorie DOT com</a>&gt;</span> wro=
te:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">On 12. 1. 2016 20:23=
, Britton Kerin (<a href=3D"mailto:britton DOT kerin AT gmail DOT com" target=3D"_blan=
k">britton DOT kerin AT gmail DOT com</a>) [via <a href=3D"mailto:geda-user AT delorie DOT co=
m" target=3D"_blank">geda-user AT delorie DOT com</a>] wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<br>
I&#39;m working on this branch there are some minor issues.=C2=A0 I&#39;ll =
push fixes to LP1532611_fixes<br>
<br>
</blockquote>
<br></span>
Can you share details about the issues? I guess I can identify the culprit =
and prepare fix faster<br></blockquote><div><br></div><div style=3D"">Attac=
hed is a patch showing roughly what I&#39;ve found.=C2=A0 The fftemplate.c =
is entirely in this patch but I didn&#39;t change anything in it besides in=
cluding assert.h I think.</div><div style=3D""><br></div><div style=3D"">It=
 comes down to a little more honoring of default format (e.g. making sure i=
ts in default position in format list in SaveAs, checks that only one defua=
lt format is specified, and stuff to take care of situation where PCB-&gt;F=
ilename is known and PCB-&gt;Fileformat not.=C2=A0 Some or all of that last=
 category of change may be uneeded with the patch you propose for invalid f=
ile arguments (which I think is the right fix for that).=C2=A0</div><div>=
=C2=A0</div><div style=3D"">I&#39;d like for you to &quot;own&quot; this co=
de for sure as you can almost surely improve it faster and better, but I&#3=
9;d like to start using it as well.=C2=A0 If you aren&#39;t wanting to use =
git yet it would be nice to get you synced up with a repository version (on=
e way or another, either you can sync to home/bert/LP1532611 or we could de=
clare the edits in that branch premature and restart it with a new patch fr=
om you).=C2=A0 You can then send patches to whoever owns the branch so peop=
le can track it.</div><div style=3D""><br></div><div style=3D"">Britton</di=
v></div><br></div></div>

--047d7b5d3e64967bb0052955a20c--
--047d7b5d3e64967bb5052955a20e
Content-Type: application/octet-stream; name=file_format_fixes
Content-Disposition: attachment; filename=file_format_fixes
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ijf0nvhz0

G1sxbWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMbW20KG1sxbWluZGV4
IGJkNzRkYjMuLjMxMGM0NzEgMTAwNjQ0G1ttChtbMW0tLS0gYS9jb25maWd1cmUuYWMbW20KG1sx
bSsrKyBiL2NvbmZpZ3VyZS5hYxtbbQobWzM2bUBAIC0xMDQzLDYgKzEwNDMsMTAgQEAbW20gG1tt
ZmkbW20KIAlETUFMTE9DX0xJQlM9IiIbW20KIF0pG1ttCiAbW20KG1szMm0rG1ttG1szMm0jIEZJ
WE1FOiB0aGlzIGlzIGEgc3RpbGwtaGFja2lzaCB3YXkgdG8gZ2V0IGxpYnlhbWwgbGlua2VkIGlu
LCBpdCBwcm9iYWJseSB3YW50cxtbbQobWzMybSsbW20bWzMybSMgYSBmZWF0dXJlIHJlcXVlc3Qg
b3B0aW9uIGF0IGxlYXN0G1ttChtbMzJtKxtbbRtbMzJtQUNfQ0hFQ0tfTElCKHlhbWwseWFtbF9w
YXJzZXJfaW5pdGlhbGl6ZSwsQUNfTVNHX0VSUk9SKFtwcm9ibGVtIHdpdGggbGlieWFtbF0pKRtb
bQobWzMybSsbW20KICMgLS0tLS0tLS0tLS0tLSBFbGVjdHJpY0ZlbmNlIC0tLS0tLS0tLS0tLS0t
LS0tLS0bW20KIGRubCBFbGVjdHJpY0ZlbmNlIGNoZWNrcxtbbQogd2l0aF9lZmVuY2U9bm8bW20K
G1sxbWRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0bW20KG1sx
bWluZGV4IDY5YTRkZjIuLjQ0YmJjYzYgMTAwNjQ0G1ttChtbMW0tLS0gYS9zcmMvTWFrZWZpbGUu
YW0bW20KG1sxbSsrKyBiL3NyYy9NYWtlZmlsZS5hbRtbbQobWzM2bUBAIC02NCw2ICs2NCw3IEBA
G1ttIBtbbVBDQl9TUkNTID0gXBtbbQogCWVkaWZfcGFyc2UuaCBcG1ttCiAJZXJyb3IuYyBcG1tt
CiAJZXJyb3IuaCBcG1ttChtbMzJtKxtbbQkbWzMybWZmdGVtcGxhdGUuYyBcG1ttCiAJZmlsZS5j
IFwbW20KIAlmaWxlLmggXBtbbQogCWZpbmQuYyBcG1ttChtbMzZtQEAgLTIxOCw3ICsyMTksNyBA
QBtbbSAbW21jaGVja19QUk9HUkFNUyA9IHVuaXR0ZXN0G1ttCiBjaGVja19TQ1JJUFRTID0gdW5p
dHRlc3QbW20KIFRFU1RTID0gdW5pdHRlc3QbW20KIBtbbQobWzMxbS0jIEFjdGlvbiwgQXR0cmli
dXRlLCBhbmQgRmxhZyBsaXN0cy4bW20KG1szMm0rG1ttG1szMm0jIEFjdGlvbiwgQXR0cmlidXRl
LCBGbGFnLCBhbmQgRm9ybWF0IGxpc3RzLhtbbQogY29yZV9saXN0cy5oIDogJHtQQ0JfU1JDU30g
TWFrZWZpbGUbW20KIAl0cnVlID4gJEAbW20KIAkoZm9yIGYgaW4gJHtQQ0JfU1JDU30gOyBkbyBj
YXQgJChzcmNkaXIpLyQkZiA7IGRvbmUpIHwgZ3JlcCAiXlJFR0lTVEVSIiA+ICRALnRtcBtbbQob
WzFtZGlmZiAtLWdpdCBhL3NyYy9hY3Rpb24uYyBiL3NyYy9hY3Rpb24uYxtbbQobWzFtaW5kZXgg
MmNmZDZhOS4uM2IxYjA2NCAxMDA2NDQbW20KG1sxbS0tLSBhL3NyYy9hY3Rpb24uYxtbbQobWzFt
KysrIGIvc3JjL2FjdGlvbi5jG1ttChtbMzZtQEAgLTU3NDgsMTQgKzU3NDgsMjYgQEAbW20gG1tt
QWN0aW9uU2F2ZVRvIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIENvb3JkIHgsIENvb3JkIHkpG1tt
CiAgIGNoYXIgKmZvcm1hdDsbW20KIBtbbQogICBmdW5jdGlvbiA9IEFSRyAoMCk7G1ttChtbMzJt
KxtbbQogICAbW20KG1szMW0tICBpZiAoICEgZnVuY3Rpb24gfHwgc3RyY2FzZWNtcCAoZnVuY3Rp
b24sICJMYXlvdXQiKSA9PSAwKRtbbQobWzMxbS0gICAgextbbQobWzMxbS0gICAgICBpZiAoU2F2
ZVBDQldpdGhGb3JtYXQgKFBDQiwgUENCLT5GaWxlbmFtZSwgUENCLT5GaWxlZm9ybWF0KSA9PSAw
KRtbbQobWzMybSsbW20bWzMybSAgaWYgKCAoISBmdW5jdGlvbikgfHwgKHN0cmNhc2VjbXAgKGZ1
bmN0aW9uLCAiTGF5b3V0IikgPT0gMCkgKRtbbQobWzMybSsbW20bWzMybSAgICB7G1ttChtbMzJt
KxtbbRtbMzJtICAgICAgLy8gQXQgbGVhc3QgaW4gdGhlIGNhc2Ugb24gYW4gaW52b2NhdGlvbiBs
aWtlICdwY2IgaW52YWxpZF9maWxlLnBjYicsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gd2Ug
ZW5kIHVwIGF0IHRoaXMgcG9pbnQgd2l0aCBQQ0ItPkZpbGVuYW1lIHNldCBidXQgUENCLT5GaWxl
Zm9ybWF0G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gbm90IHNldC4gIFByZS1maWxlLWZvcm1h
dC1wbHVnaW4gcGNiIHNlZW1zIHRvIGp1c3QgcHV0IGEgcGFyc2UgRVJST1IbW20KG1szMm0rG1tt
G1szMm0gICAgICAvLyBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGxvZyBhbmQgc3RhcnQgZWRpdGlu
ZyBhIG5ldyBibGFuayBwY2IsIGFuZBtbbQobWzMybSsbW20bWzMybSAgICAgIC8vIHRoZW4gd2hl
biBhIHN1YnNlcXVlbnQgc2F2ZSBoYXBwZW5zIGl0IHB1dHMgYSB2YWxpZCBmaWxlIGluIHBsYWNl
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gb2YgdGhlIGdpdmVuIGludmFsaWQgb25lLiAgVGhp
cyBzZWVtcyBwcmV0dHkgd2VpcmQgdG8gbWUgYW5kIEknZBtbbQobWzMybSsbW20bWzMybSAgICAg
IC8vIHJhdGhlciBoYXZlIGEgbXVjaCBtb3JlIHByb21pbmVudCBzaG93LXN0b3BwaW5nIGVycm9y
IG1lc3NhZ2UgYnV0G1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gZm9yIG5vdyBhdCBsZWFzdCB3
ZSdyZSBnb2luZyB0byBjYXJyeSBvbiB0aGUgdHJhZGl0aW9uLCB3aGljaCBtZWFucxtbbQobWzMy
bSsbW20bWzMybSAgICAgIC8vIHdlIGhhdmUgdG8gdXNlIHRoZSBkZWZhdWx0IGZvcm1hdCBpbiB0
aGlzIHNpdHVhdGlvbi4bW20KG1szMm0rG1ttG1szMm0gICAgICBmb3JtYXQbW20KG1szMm0rG1tt
G1szMm0gICAgICAgID0gUENCLT5GaWxlZm9ybWF0ID8gUENCLT5GaWxlZm9ybWF0IDogaGlkX2dl
dF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoU2F2ZVBD
QldpdGhGb3JtYXQgKFBDQiwgUENCLT5GaWxlbmFtZSwgZm9ybWF0KSA9PSAwKRtbbQogICAgICAg
ICBTZXRDaGFuZ2VkRmxhZyAoZmFsc2UpOxtbbQogICAgICAgcmV0dXJuIDA7G1ttCiAgICAgfRtb
bQobWzMxbS0bW20KG1szMm0rG1ttG1s0MW0gIBtbbQogICBpZiAoYXJnYyA8IDIgKRtbbQogICAg
IEFGQUlMIChzYXZldG8pOxtbbQogG1ttChtbMzZtQEAgLTU3NjYsNiArNTc3OCw3IEBAG1ttIBtb
bUFjdGlvblNhdmVUbyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBDb29yZCB4LCBDb29yZCB5KRtb
bQogICAgIGZvcm1hdCA9IChQQ0ItPkZpbGVmb3JtYXQpP1BDQi0+RmlsZWZvcm1hdDpoaWRfZ2V0
X2RlZmF1bHRfZm9ybWF0X2lkICgpOxtbbQogICB9G1ttCiAbW20KG1szMm0rG1ttCiAgIGlmIChz
dHJjYXNlY21wIChmdW5jdGlvbiwgIkxheW91dEFzIikgPT0gMCkbW20KICAgICB7G1ttCiAgICAg
ICBpZiAoU2F2ZVBDQldpdGhGb3JtYXQgKFBDQiwgbmFtZSwgZm9ybWF0KSA9PSAwKRtbbQobWzFt
ZGlmZiAtLWdpdCBhL3NyYy9mZnRlbXBsYXRlLmMgYi9zcmMvZmZ0ZW1wbGF0ZS5jG1ttChtbMW1u
ZXcgZmlsZSBtb2RlIDEwMDY0NBtbbQobWzFtaW5kZXggMDAwMDAwMC4uNGYyMGI1MRtbbQobWzFt
LS0tIC9kZXYvbnVsbBtbbQobWzFtKysrIGIvc3JjL2ZmdGVtcGxhdGUuYxtbbQobWzM2bUBAIC0w
LDAgKzEsMzAxIEBAG1ttChtbMzJtKxtbbRtbMzJt77u/LyohG1ttChtbMzJtKxtbbRtbMzJtICog
XGZpbGUgc2ZmLXRlbXBsYXRlLmMbW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMy
bSAqIFxicmllZiB0ZW1wbGF0ZSBmaWxlIGZvciBwbHVnZ2FibGUgZmlsZSBmb3JtYXRzLhtbbQob
WzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogPGhyPhtbbQobWzMybSsbW20bWzMy
bSAqG1ttChtbMzJtKxtbbRtbMzJtICogPGgxPjxiPkNvcHlyaWdodC48L2I+PC9oMT5cbhtbbQob
WzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogUENCLCBpbnRlcmFjdGl2ZSBwcmlu
dGVkIGNpcmN1aXQgYm9hcmQgZGVzaWduG1ttChtbMzJtKxtbbRtbMzJtICobW20KG1szMm0rG1tt
G1szMm0gKiBDb3B5cmlnaHQgKEMpIDE5OTQsMTk5NSwxOTk2LDE5OTcsMTk5OCwyMDA1LDIwMDYg
VGhvbWFzIE5hdRtbbQobWzMybSsbW20bWzMybSAqG1ttChtbMzJtKxtbbRtbMzJtICogVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkbW20KG1szMm0rG1ttG1szMm0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieRtbbQobWzMybSsbW20bWzMybSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yG1ttChtbMzJtKxtbbRtbMzJtICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4bW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMybSAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLBtb
bQobWzMybSsbW20bWzMybSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mG1ttChtbMzJtKxtbbRtbMzJtICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZRtbbQobWzMy
bSsbW20bWzMybSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
G1ttChtbMzJtKxtbbRtbMzJtICobW20KG1szMm0rG1ttG1szMm0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZRtbbQobWzMy
bSsbW20bWzMybSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlG1ttChtbMzJtKxtbbRtbMzJtICogRm91bmRhdGlvbiwgSW5jLiwgNjc1
IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuG1ttChtbMzJtKxtbbRtbMzJtICob
W20KG1szMm0rG1ttG1szMm0gKiBDb250YWN0IGFkZHJlc3NlcyBmb3IgcGFwZXIgbWFpbCBhbmQg
RW1haWw6G1ttChtbMzJtKxtbbRtbMzJtICogVGhvbWFzIE5hdSwgU2NobGVoZW53ZWcgMTUsIDg4
NDcxIEJhdXN0ZXR0ZW4sIEdlcm1hbnkbW20KG1szMm0rG1ttG1szMm0gKiBUaG9tYXMuTmF1QHJ6
LnVuaS11bG0uZGUbW20KG1szMm0rG1ttG1szMm0gKhtbbQobWzMybSsbW20bWzMybSAqIFxub3Rl
IEhvdyB0byBjb21waWxlIChpbmNsdWRlIHBhdGhzIGNhbiBkaWZmZXIsIGRlcGVuZGluZyBvbiB5
b3VyIHN5c3RlbSk6G1ttChtbMzJtKxtbbRtbMzJtICogICAgZ2NjIC1JPHBjYnJvb3Q+L3NyYyAt
STxwY2Jyb290PiAtSS91c3IvaW5jbHVkZS9nbGliLTIuMCAtSS91c3IvbGliNjQvZ2xpYi0yLjAv
aW5jbHVkZSAtREhBVkVfQ09ORklHX0ggLWZQSUMgLXNoYXJlZCBmZnRlbXBsYXRlLmMgLW8gZmZ0
ZW1wbGF0ZS5zbxtbbQobWzMybSsbW20bWzMybSAqICAgIC0gPHBjYnJvb3Q+IGlzIHRoZSBsb2Nh
dGlvbiBvZiAqY29uZmlndXJlZCogUENCIHNvdWNlIHRyZWUgKGNvbmZpZy5oIGlzIGF2YWlsYWJs
ZSkbW20KG1szMm0rG1ttG1szMm0gKiAgICAtIGNvcHkgdGhlIC5zbyBmaWxlIGludG8gb25lIG9m
IHBsdWdpbiBkaXJlY3RvcmllcyAoZS5nLiB+Ly5wY2IvcGx1Z2lucykbW20KG1szMm0rG1ttG1sz
Mm0gKiAgICAtIHNldCBleGVjdXRhYmxlIGZsYWcbW20KG1szMm0rG1ttG1szMm0gKi8bW20KG1sz
Mm0rG1ttChtbMzJtKxtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9DT05G
SUdfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJjb25maWcuaCIbW20KG1szMm0rG1ttG1sz
Mm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPGFzc2VydC5oPhtb
bQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSBtbbQobWzMy
bSsbW20bWzMybSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYb
W20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImdsb2JhbC5oIhtbbQobWzMybSsb
W20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8ZGlyZW50Lmg+G1ttChtbMzJtKxtbbQobWzMybSsb
W20bWzMybSNpbmNsdWRlIDxlcnJuby5oPhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZk
ZWYgSEFWRV9QV0RfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlIDxwd2QuaD4bW20KG1szMm0r
G1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHN0cmlu
Zy5oPhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8dGltZS5oPhtbbQobWzMy
bSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gbW20KG1szMm0rG1tt
G1szMm0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPhtbbQobWzMybSsbW20bWzMybSNlbmRpZhtbbQob
WzMybSsbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8c3lzL3N0YXQuaD4bW20KG1szMm0rG1tt
ChtbMzJtKxtbbRtbMzJtI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9IG1ttChtbMzJtKxtbbRtbMzJt
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYbW20KG1szMm0r
G1ttChtbMzJtKxtbbRtbMzJtI2lmZGVmIEhBVkVfTkVUREJfSBtbbQobWzMybSsbW20bWzMybSNp
bmNsdWRlIDxuZXRkYi5oPhtbbQobWzMybSsbW20bWzMybSNlbmRpZhtbbQobWzMybSsbW20KG1sz
Mm0rG1ttG1szMm0jaW5jbHVkZSA8c3RkaW8uaD4bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJt
I2lmZGVmIEhBVkVfU1RETElCX0gbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8c3RkbGliLmg+
G1ttChtbMzJtKxtbbRtbMzJtI2VuZGlmG1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSNpZmRl
ZiBIQVZFX1NUUklOR19IG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHN0cmluZy5oPhtbbQob
WzMybSsbW20bWzMybSNlbmRpZhtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0jaWZkZWYgSEFW
RV9VTklTVERfSBtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlIDx1bmlzdGQuaD4bW20KG1szMm0r
G1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPHlhbWwu
aD4bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImJ1ZmZlci5oIhtbbQobWzMy
bSsbW20bWzMybSNpbmNsdWRlICJjaGFuZ2UuaCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAi
Y3JlYXRlLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImNyb3NzaGFpci5oIhtbbQobWzMy
bSsbW20bWzMybSNpbmNsdWRlICJkYXRhLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgImVk
aWZfcGFyc2UuaCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAiZXJyb3IuaCIbW20KG1szMm0r
G1ttG1szMm0jaW5jbHVkZSAiZmlsZS5oIhtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJoaWQu
aCIbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSAibGF5ZXJmbGFncy5oIhtbbQobWzMybSsbW20b
WzMybSNpbmNsdWRlICJtaXNjLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgIm15bWVtLmgi
G1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInBhcnNlX2wuaCIbW20KG1szMm0rG1ttG1szMm0j
aW5jbHVkZSAicGNiLXByaW50Zi5oIhtbbQobWzMybSsbW20bWzMybSNpbmNsdWRlICJwb2x5Z29u
LmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInJhdHMuaCIbW20KG1szMm0rG1ttG1szMm0j
aW5jbHVkZSAicmVtb3ZlLmgiG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgInNldC5oIhtbbQob
WzMybSsbW20bWzMybSNpbmNsdWRlICJzdHJmbGFncy5oIhtbbQobWzMybSsbW20KG1szMm0rG1tt
G1szMm0jaWZkZWYgSEFWRV9MSUJETUFMTE9DG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1ZGUgPGRt
YWxsb2MuaD4bW20KG1szMm0rG1ttG1szMm0jZW5kaWYbW20KG1szMm0rG1ttChtbMzJtKxtbbQob
WzMybSsbW20bWzMybSNkZWZpbmUgREVNT19GSUxFX1ZFUlNJT05fSU1QTEVNRU5URUQgMjAxMTA2
MDMbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5j
dGlvbiB0byBjaGVjayBmaWxlIGZvcm1hdBtbbQobWzMybSsbW20bWzMybSogIGZ1bmN0aW9uIHNo
b3VsZCByZXR1cm4gMCwgdGhlIGZpbGUgcHJvdmlkZWQgaXMgb2Ygc3BlY2lmaWVkIGZvcm1hdCwg
b3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlLhtbbQobWzMybSsbW20bWzMybSogIFRoaXMgZnVuY3Rp
b24gaXMgb3B0aW9uYWw7IGlmIGl0IGlzIG5vdCBwcm92aWRlZCwgdGhlIHN5c3RlbSB0cmllcyB0
byBsb2FkIHRoZSBmaWxlLiBJZiBsb2FkaW5nIGZhaWxzLBtbbQobWzMybSsbW20bWzMybSogIGl0
IGlzIHN1cHBvc2VkIHRoYXQgZmlsZSBmb3JtYXQgaXMgbm90IGNvcnJlY3QuG1ttChtbMzJtKxtb
bRtbMzJtKi8bW20KG1szMm0rG1ttG1szMm1pbnQbW20KG1szMm0rG1ttG1szMm1DaGVja0RlbW9G
aWxlKGNoYXIgKmZpbGVuYW1lKRtbbQobWzMybSsbW20bWzMybXsbW20KG1szMm0rG1ttG1szMm0g
IGNoYXIgKmxhc3RfZG90ID0gcmluZGV4IChmaWxlbmFtZSwgJy4nKTsbW20KG1szMm0rG1ttG1sz
Mm0gIHJldHVybiBzdHJjbXAgKGxhc3RfZG90LCAiLnlwY2IiKTsbW20KG1szMm0rG1ttG1szMm19
G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybS8qG1ttChtbMzJtKxtbbRtbMzJtKiAgRnVuY3Rp
b24gdG8gY2hlY2sgc3VwcG9ydGVkIHZlcnNpb24bW20KG1szMm0rG1ttG1szMm0qICBmdW5jdGlv
biBzaG91bGQgcmV0dXJuIDAsIGlmIHN1cHBvcnRzIHRoZSBwcm92aWRlZCBkYXRhIHN0cnVjdHVy
ZSB2ZXJzaW9uIChhdCBsZWFzdCBtaW5pbWFsIG9uZSkbW20KG1szMm0rG1ttG1szMm0qICBmdW5j
dGlvbiBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIHZhbHVlLCBpZiBkb2VzIG5vdCBzdXBwb3J0IHRo
ZSB2ZXJzaW9uIG9mIGRhdHlhIHN0cnVjdHVyZXMuG1ttChtbMzJtKxtbbRtbMzJtKi8bW20KG1sz
Mm0rG1ttG1szMm1pbnQbW20KG1szMm0rG1ttG1szMm1DaGVja0RlbW9WZXJzaW9uKHVuc2lnbmVk
IGxvbmcgY3VycmVudCwgdW5zaWduZWQgbG9uZyBtaW5pbWFsKRtbbQobWzMybSsbW20bWzMybXsb
W20KG1szMm0rG1ttG1szMm0gICAgcmV0dXJuIChERU1PX0ZJTEVfVkVSU0lPTl9JTVBMRU1FTlRF
RCA+PSBtaW5pbWFsKT8wOjE7G1ttChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0r
G1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5jdGlvbiB0byBzYXZl
IGxheW91dCB0byBzcGVjaWZpZWQgZmlsZRtbbQobWzMybSsbW20bWzMybSogIEZ1bmN0aW9ucyBz
YXZlcyBjb250ZW5zIG9mIFBDQnR5cGUgc3RydWN0dXJlIHRvIHNwZWNpZmllZCBmaWxlG1ttChtb
MzJtKxtbbRtbMzJtKiAgUmV0dXJucyAwLCBpZiBzdWNjZWVkZWQsIG90aGVyIHZhbHVlIGluZGlj
YXRlcyBlcnJvci4bW20KG1szMm0rG1ttG1szMm0qICBObyB1c2VyIGludGVyYWN0aW9ucyBhcmUg
bmVjZXNzYXJ5LhtbbQobWzMybSsbW20bWzMybSovG1ttChtbMzJtKxtbbRtbMzJtaW50G1ttChtb
MzJtKxtbbRtbMzJtU2F2ZURlbW8oUENCVHlwZSAqcGNiLCBjaGFyICpmaWxlbmFtZSkbW20KG1sz
Mm0rG1ttG1szMm17G1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2VtaXR0ZXJfdCBlbWl0dGVyOxtb
bQobWzMybSsbW20bWzMybSAgeWFtbF9ldmVudF90IGV2ZW50OxtbbQobWzMybSsbW20bWzMybSAg
aW50IHJldHVybl9jb2RlOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICAv
KiBDcmVhdGUgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQobWzMybSsbW20bWzMybSAgeWFtbF9l
bWl0dGVyX2luaXRpYWxpemUoJmVtaXR0ZXIpOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJt
KxtbbRtbMzJtICAvKiBTZXQgYSBmaWxlIG91dHB1dC4gKi8bW20KG1szMm0rG1ttG1szMm0gIEZJ
TEUgKm91dHB1dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOxtbbQobWzMybSsbW20bWzMybSAgaWYg
KCBvdXRwdXQgPT0gTlVMTCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgLy8gRklYTUU6IHJlbW92
ZSB0aGlzIGZwcmludGYgc29tZWRheRtbbQobWzMybSsbW20bWzMybSAgICBmcHJpbnRmICgbW20K
G1szMm0rG1ttG1szMm0gICAgICAgIHN0ZGVyciwbW20KG1szMm0rG1ttG1szMm0gICAgICAgICIl
czogJWk6ICVzOiBmb3BlbigpIGZhaWxlZCB0byBvcGVuICVzIGZvciB3cml0aW5nOiAlcyIsG1tt
ChtbMzJtKxtbbRtbMzJtICAgICAgICBfX0ZJTEVfXywbW20KG1szMm0rG1ttG1szMm0gICAgICAg
IF9fTElORV9fLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgX19mdW5jX18sG1ttChtbMzJtKxtb
bRtbMzJtICAgICAgICBmaWxlbmFtZSwbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHN0cmVycm9y
IChlcnJubykgKTsbW20KG1szMm0rG1ttG1szMm0gICAgcmV0dXJuIDE7G1ttChtbMzJtKxtbbRtb
MzJtICB9G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIHlhbWxfZW1pdHRl
cl9zZXRfb3V0cHV0X2ZpbGUoJmVtaXR0ZXIsIG91dHB1dCk7G1ttChtbMzJtKxtbbQobWzMybSsb
W20bWzMybSAgLyogQ3JlYXRlIGFuZCBlbWl0IHRoZSBTVFJFQU0tU1RBUlQgZXZlbnQuICovG1tt
ChtbMzJtKxtbbRtbMzJtICB5YW1sX3N0cmVhbV9zdGFydF9ldmVudF9pbml0aWFsaXplKCZldmVu
dCwgWUFNTF9VVEY4X0VOQ09ESU5HKTsbW20KG1szMm0rG1ttG1szMm0gIGlmICgheWFtbF9lbWl0
dGVyX2VtaXQoJmVtaXR0ZXIsICZldmVudCkpG1ttChtbMzJtKxtbbRtbMzJtICAgICAgZ290byBl
cnJvcjsbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2RvY3VtZW50X3N0YXJ0X2V2
ZW50X2luaXRpYWxpemUoJmV2ZW50LCBOVUxMLCBOVUxMLCBOVUxMLCAxKTsbW20KG1szMm0rG1tt
G1szMm0gIGlmICgheWFtbF9lbWl0dGVyX2VtaXQoJmVtaXR0ZXIsICZldmVudCkpG1ttChtbMzJt
KxtbbRtbMzJtICAgICAgZ290byBlcnJvcjsbW20KG1szMm0rG1ttG1s0MW0gIBtbbQobWzMybSsb
W20bWzMybSAgZXZlbnQudHlwZSA9IFlBTUxfU0NBTEFSX0VWRU5UOxtbbRtbNDFtIBtbbQobWzMy
bSsbW20bWzMybSAgZXZlbnQuZGF0YS5zY2FsYXIuYW5jaG9yID0gTlVMTDsbW20KG1szMm0rG1tt
G1szMm0gIGV2ZW50LmRhdGEuc2NhbGFyLnRhZyA9IE5VTEw7G1ttChtbMzJtKxtbbRtbMzJtICBl
dmVudC5kYXRhLnNjYWxhci52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cmR1cCAoImJhciIp
OxtbbQobWzMybSsbW20bWzMybSAgZXZlbnQuZGF0YS5zY2FsYXIubGVuZ3RoID0gc3RybGVuICgi
YmFyIik7G1ttChtbMzJtKxtbbRtbMzJtICBldmVudC5kYXRhLnNjYWxhci5wbGFpbl9pbXBsaWNp
dCA9IDE7G1ttChtbMzJtKxtbbRtbMzJtICBldmVudC5kYXRhLnNjYWxhci5xdW90ZWRfaW1wbGlj
aXQgPSBmYWxzZTsbW20KG1szMm0rG1ttG1szMm0gIGV2ZW50LnN0YXJ0X21hcmsgPSAoeWFtbF9t
YXJrX3QpIHsgMCwgMCwgMCB9OxtbbQobWzMybSsbW20bWzMybSAgZXZlbnQuc3RhcnRfbWFyayA9
ICh5YW1sX21hcmtfdCkgeyAxLCAxLCAxIH07G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlhbWxf
ZW1pdHRlcl9lbWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICBnb3Rv
IGVycm9yOxtbbQobWzMybSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICAvKhtbbQobWzMy
bSsbW20bWzMybSAgICAuLi4bW20KG1szMm0rG1ttG1szMm0gICAgRW1pdCBtb3JlIGV2ZW50cy4b
W20KG1szMm0rG1ttG1szMm0gICAgLi4uG1ttChtbMzJtKxtbbRtbMzJtICAqLxtbbQobWzMybSsb
W20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICB5YW1sX2RvY3VtZW50X2VuZF9ldmVudF9pbml0
aWFsaXplKCZldmVudCwgMSk7G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlhbWxfZW1pdHRlcl9l
bWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICAgIGdvdG8gZXJyb3I7
G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIC8qIENyZWF0ZSBhbmQgZW1p
dCB0aGUgU1RSRUFNLUVORCBldmVudC4gKi8bW20KG1szMm0rG1ttG1szMm0gIHlhbWxfc3RyZWFt
X2VuZF9ldmVudF9pbml0aWFsaXplKCZldmVudCk7G1ttChtbMzJtKxtbbRtbMzJtICBpZiAoIXlh
bWxfZW1pdHRlcl9lbWl0KCZlbWl0dGVyLCAmZXZlbnQpKRtbbQobWzMybSsbW20bWzMybSAgICAg
IGdvdG8gZXJyb3I7G1ttChtbMzJtKxtbbRtbNDFtICAbW20KG1szMm0rG1ttG1szMm0gIC8qIERl
c3Ryb3kgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQobWzMybSsbW20bWzMybSAgeWFtbF9lbWl0
dGVyX2RlbGV0ZSgmZW1pdHRlcik7G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSAgLy8gRklY
TUU6IG5lZWRzIHJldHVybiBjb2RlIGNoZWNrG1ttChtbMzJtKxtbbRtbMzJtICByZXR1cm5fY29k
ZSA9IGZjbG9zZSAob3V0cHV0KTsbW20KG1szMm0rG1ttG1szMm0gIGlmICggcmV0dXJuX2NvZGUg
IT0gMCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgZnByaW50ZiAoG1ttChtbMzJtKxtbbRtbMzJt
ICAgICAgICBzdGRlcnIsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAiJXM6ICVpOiAlczogZmNs
b3NlKCkgZmFpbGVkOiAlcyIsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBfX0ZJTEVfXywbW20K
G1szMm0rG1ttG1szMm0gICAgICAgIF9fTElORV9fLBtbbQobWzMybSsbW20bWzMybSAgICAgICAg
X19mdW5jX18sG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBzdHJlcnJvciAoZXJybm8pICk7G1tt
ChtbMzJtKxtbbRtbMzJtICAgIHJldHVybiAxOxtbbQobWzMybSsbW20bWzMybSAgfRtbbQobWzMy
bSsbW20bWzQxbSAgG1ttChtbMzJtKxtbbRtbMzJtICByZXR1cm4gMDsbW20KG1szMm0rG1ttG1s0
MW0gIBtbbQobWzMybSsbW20bWzMybSAgLyogT24gZXJyb3IuICovG1ttChtbMzJtKxtbbRtbMzJt
ICBlcnJvcjobW20KG1szMm0rG1ttG1szMm0gIGZwcmludGYgKHN0ZGVyciwgIllBTUwgZW1pc3Np
b24gZmFpbGVkOiAlc1xuIiwgIGVtaXR0ZXIucHJvYmxlbSk7G1ttChtbMzJtKxtbbRtbNDFtICAb
W20KG1szMm0rG1ttG1szMm0gIC8qIERlc3Ryb3kgdGhlIEVtaXR0ZXIgb2JqZWN0LiAqLxtbbQob
WzMybSsbW20bWzMybSAgeWFtbF9lbWl0dGVyX2RlbGV0ZSgmZW1pdHRlcik7G1ttChtbMzJtKxtb
bQobWzMybSsbW20bWzMybSAgLy8gRklYTUU6IG5lZWRzIHJldHVybiBjb2RlIGNoZWNrG1ttChtb
MzJtKxtbbRtbMzJtICBmY2xvc2UgKG91dHB1dCk7G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMy
bSAgcmV0dXJuIDE7G1ttChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0rG1ttChtb
MzJtKxtbbRtbMzJtLyobW20KG1szMm0rG1ttG1szMm0qICBGdW5jdGlvbiB0byBsb2FkIGxheW91
dCBmcm9tIHNwZWNpZmllZCBmaWxlG1ttChtbMzJtKxtbbRtbMzJtKiAgRnVuY3Rpb25zIGZpbGxz
IHByb3ZpZGVkIFBDQnR5cGUgc3RydWN0dXJlIHdpdGggZGF0YRtbbQobWzMybSsbW20bWzMybSog
IFJldHVybnMgMCwgaWYgc3VjY2VlZGVkLCBvdGhlciB2YWx1ZSBpbmRpY2F0ZXMgZXJyb3IuG1tt
ChtbMzJtKxtbbRtbMzJtKiAgTm8gdXNlciBpbnRlcmFjdGlvbnMgYXJlIG5lY2Vzc2FyeS4bW20K
G1szMm0rG1ttG1szMm0qLxtbbQobWzMybSsbW20bWzMybWludBtbbQobWzMybSsbW20bWzMybVBh
cnNlRGVtbyhQQ0JUeXBlICpwY2IsIGNoYXIgKmZpbGVuYW1lKRtbbQobWzMybSsbW20bWzMybXsb
W20KG1szMm0rG1ttG1szMm0gIC8qIEZvbGxvZmluZyBmdW5jdGlvbiBjYWxsIGlzIHBsYWNlaG9s
ZGVyLCB3aGljaCBjcmVhdGVzIGVtcHR5IGJvYXJkICovG1ttChtbMzJtKxtbbRtbNDFtICAbW20K
G1szMm0rG1ttG1szMm0gIENyZWF0ZU5ld1BDQlBvc3QgKHBjYiwgMSk7IC8qIFJFTU9WRSBNRSEh
ISIgKi8bW20KG1szMm0rG1ttG1s0MW0gIBtbbQobWzMybSsbW20bWzMybSAgcmV0dXJuIDA7G1tt
ChtbMzJtKxtbbRtbMzJtfRtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0vKhtbbQobWzMybSsb
W20bWzMybSogIEFycmF5IG9mIGZpbGUgZm9ybWF0IHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmVzOhtb
bQobWzMybSsbW20bWzMybSogICAgLSB1bmlxdWUgaWRlbnRpZmljdGlvbiBzdHJpbmcbW20KG1sz
Mm0rG1ttG1szMm0qICAgIC0gbmFtZSBzaG93biBpbiBPcGVuL1NhdmUgZGlhbG9ncxtbbQobWzMy
bSsbW20bWzMybSogICAgLSBwb2ludGVyIHRvIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGZpbGUg
cGF0dGVybnMbW20KG1szMm0rG1ttG1szMm0qICAgIC0gbWltZS10eXBlG1ttChtbMzJtKxtbbRtb
MzJtKiAgICAtIGZpbGUgZm9ybWF0IGlzIGRlZmF1bHQgZm9ybWF0ICgxKRtbbQobWzMybSsbW20b
WzMybSogICAgLSBmdW5jdGlvbiB0byBjaGVjayBmb3JtYXQgdmVyc2lvbhtbbQobWzMybSsbW20b
WzMybSogICAgLSBmdW5jdGlvbiB0byBjaGVjayBpZiBmaWxlIGlzIG9mIGFjY2VwdGFibGUgZm9y
bWF0G1ttChtbMzJtKxtbbRtbMzJtKiAgICAtIGZ1bmN0aW9uIHRvIGxvYWQgbGF5b3V0G1ttChtb
MzJtKxtbbRtbMzJtKiAgICAtIGZ1bmN0aW9uIHRvIHNhdmUgbGF5b3V0G1ttChtbMzJtKxtbbRtb
MzJtKiAgICAtIGZ1bmN0aW9uIHRvIGxvYWQgZWxlbWVudChzKSAtIG5vdCBpbXBsZW1lbnRlZCB5
ZXQbW20KG1szMm0rG1ttG1szMm0qICAgIC0gZnVuY3Rpb24gdG8gc2F2ZSBlbGVtZW50KHMpIC0g
bm90IGltcGxlbWVudGVkIHlldBtbbQobWzMybSsbW20bWzMybSovG1ttChtbMzJtKxtbbQobWzMy
bSsbW20bWzMybXN0YXRpYyBjaGFyICpkZW1vX2Zvcm1hdF9saXN0X3BhdHRlcm5zW109eyIqLnlw
Y2IiLCAiKi5ZUENCIiwgMH07G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybXN0YXRpYyBISURf
Rm9ybWF0IGRlbW9fZm9ybWF0X2xpc3RbXT17G1ttChtbMzJtKxtbbRtbMzJtICAvKhtbbQobWzMy
bSsbW20bWzMybSAgeyJ5cGNiIiwiWUFNTCBQQ0IiLCBkZW1vX2Zvcm1hdF9saXN0X3BhdHRlcm5z
LCAiYXBwbGljYXRpb24veC1wY2ItbGF5b3V0IiwgMCwgKHZvaWQgKilDaGVja0RlbW9WZXJzaW9u
LCAodm9pZCAqKUNoZWNrRGVtb0ZpbGUsICh2b2lkICopUGFyc2VEZW1vLCAodm9pZCAqKVNhdmVE
ZW1vLCAwLCAwfRtbbQobWzMybSsbW20bWzMybSAgKi8bW20KG1szMm0rG1ttG1szMm0gIC8vIEZJ
WE1FOiBmb3IgdGhlIG1vbWVudCB3ZSBjaGFuZ2UgUGFyc2VEZW1vIHRvIE5VTEwsIHdoaWNoIHRl
bGxzIHRoZSBzeXN0ZW0bW20KG1szMm0rG1ttG1szMm0gIC8vIHRoYXQgdGhlcmUgaXMgbm8gbG9h
ZCBmb3JtYXQsIHNvIGl0IHdvbid0IGNvbnNpZGVyIHRoZSBmaWxlIHRydWx5IHNhdmVkG1ttChtb
MzJtKxtbbRtbMzJtICAvLyBpZiBpdCdzIG9ubHkgYmVlbiBzYXZlZCBpbiB5cGNiIGZvcm1hdCAo
YmVjYXVzZSBpdCBjYW4ndCBiZSBsb2FkZWQgYWdhaW4pG1ttChtbMzJtKxtbbRtbMzJtICB7Inlw
Y2IiLCJZQU1MIFBDQiIsIGRlbW9fZm9ybWF0X2xpc3RfcGF0dGVybnMsICJhcHBsaWNhdGlvbi94
LXBjYi1sYXlvdXQiLCAwLCAodm9pZCAqKUNoZWNrRGVtb1ZlcnNpb24sICh2b2lkICopQ2hlY2tE
ZW1vRmlsZSwgKHZvaWQgKilQYXJzZURlbW8sICh2b2lkICopU2F2ZURlbW8sIDAsIDB9G1ttChtb
MzJtKxtbbRtbMzJtfTsbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtUkVHSVNURVJfRk9STUFU
UyAoZGVtb19mb3JtYXRfbGlzdCkbW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJtLyobW20KG1sz
Mm0rG1ttG1szMm0qIFBsdWdpbiByZWdpc3RyYXRpb24uIFJlbmFtZSBpdCB0byBoaWRfPGJhc2Vu
YW1lPl9pbml0G1ttChtbMzJtKxtbbRtbMzJtKi8bW20KG1szMm0rG1ttChtbMzJtKxtbbRtbMzJt
dm9pZBtbbQobWzMybSsbW20bWzMybWhpZF9mZnRlbXBsYXRlX2luaXQoKRtbbQobWzMybSsbW20b
WzMybXsbW20KG1szMm0rG1ttG1szMm0gIHJlZ2lzdGVyX2RlbW9fZm9ybWF0X2xpc3QoKTsbW20K
G1szMm0rG1ttG1szMm19G1ttChtbMW1kaWZmIC0tZ2l0IGEvc3JjL2ZpbGUuYyBiL3NyYy9maWxl
LmMbW20KG1sxbWluZGV4IDVhZjc2MjQuLmQwZjk4ZWEgMTAwNjQ0G1ttChtbMW0tLS0gYS9zcmMv
ZmlsZS5jG1ttChtbMW0rKysgYi9zcmMvZmlsZS5jG1ttChtbMzZtQEAgLTQzLDYgKzQzLDggQEAb
W20KIBtbbQogI2luY2x1ZGUgImdsb2JhbC5oIhtbbQogG1ttChtbMzJtKxtbbRtbMzJtI2luY2x1
ZGUgPGFzc2VydC5oPhtbbQobWzMybSsbW20KICNpbmNsdWRlIDxkaXJlbnQuaD4bW20KICNpZmRl
ZiBIQVZFX1BXRF9IG1ttCiAjaW5jbHVkZSA8cHdkLmg+G1ttChtbMzZtQEAgLTEyNyw5ICsxMjks
NiBAQBtbbSAbW21zdGF0aWMgaW50IFdyaXRlUGlwZSAoY2hhciAqLCBib29sKTsbW20KIHN0YXRp
YyBpbnQgUGFyc2VMaWJyYXJ5VHJlZSAodm9pZCk7G1ttCiBzdGF0aWMgaW50IExvYWROZXdsaWJG
b290cHJpbnRzRnJvbURpcihjaGFyICpwYXRoLCBjaGFyICp0b3BwYXRoLCBib29sIHJlY3Vyc2l2
ZSk7G1ttCiAbW20KG1szMW0tLy9leHRlcm4gaW50IFNhdmVQQ0JXaXRoRm9ybWF0IChQQ0JUeXBl
ICpwY2IsIGNoYXIgKmZpbGVuYW1lLCBjaGFyICpmaWxlZm9ybWF0KTsbW20KG1szMW0tLy9leHRl
cm4gaW50IExvYWRQQ0JXaXRoRm9ybWF0IChQQ0JUeXBlICoqcGNiLCBjaGFyICpmaWxlbmFtZSwg
Y2hhciAqZmlsZWZvcm1hdCwgY2hhciAqKm5ld19mb3JtYXQpOxtbbQobWzMxbS0bW20KIC8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLRtbbQogICogRmxhZyBoZWxwZXIgZnVuY3Rpb25zG1ttCiAgKi8bW20K
G1szNm1AQCAtMTA3OSw4ICsxMDc4LDE4IEBAG1ttIBtbbUJhY2t1cCAodm9pZCkbW20KIAkgIGV4
aXQgKDEpOxtbbQogCX0bW20KICAgICAgIHNwcmludGYgKGZpbGVuYW1lLCAiJXN+IiwgUENCLT5G
aWxlbmFtZSk7G1ttChtbMzFtLSAgICAgIGZpbGVmb3JtYXQgPSBQQ0ItPkZpbGVmb3JtYXQ7G1tt
ChtbMzFtLSBwcmludGYoIkI6ICVzXG4iLGZpbGVmb3JtYXQpOxtbbQobWzMybSsbW20KG1szMm0r
G1ttG1szMm0gICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgY2FzZSBvbiBhbiBpbnZvY2F0aW9uIGxp
a2UgJ3BjYiBpbnZhbGlkX2ZpbGUucGNiJywbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyB3ZSBl
bmQgdXAgYXQgdGhpcyBwb2ludCB3aXRoIFBDQi0+RmlsZW5hbWUgc2V0IGJ1dCBQQ0ItPkZpbGVm
b3JtYXQbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyBub3Qgc2V0LiAgUHJlLWZpbGUtZm9ybWF0
LXBsdWdpbiBwY2Igc2VlbXMgdG8ganVzdCBwdXQgYSBwYXJzZSBFUlJPUhtbbQobWzMybSsbW20b
WzMybSAgICAgIC8vIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbG9nIGFuZCBzdGFydCBlZGl0aW5n
IGEgbmV3IGJsYW5rIHBjYiwgYW5kG1ttChtbMzJtKxtbbRtbMzJtICAgICAgLy8gdGhlbiB3aGVu
IGEgc3Vic2VxdWVudCBzYXZlIGhhcHBlbnMgaXQgcHV0cyBhIHZhbGlkIGZpbGUgaW4gcGxhY2Ub
W20KG1szMm0rG1ttG1szMm0gICAgICAvLyBvZiB0aGUgZ2l2ZW4gaW52YWxpZCBvbmUuICBUaGlz
IHNlZW1zIHByZXR0eSB3ZWlyZCB0byBtZSBhbmQgSSdkG1ttChtbMzJtKxtbbRtbMzJtICAgICAg
Ly8gcmF0aGVyIGhhdmUgYSBtdWNoIG1vcmUgcHJvbWluZW50IHNob3ctc3RvcHBpbmcgZXJyb3Ig
bWVzc2FnZSBidXQbW20KG1szMm0rG1ttG1szMm0gICAgICAvLyBmb3Igbm93IGF0IGxlYXN0IHdl
J3JlIGdvaW5nIHRvIGNhcnJ5IG9uIHRoZSB0cmFkaXRpb24sIHdoaWNoIG1lYW5zG1ttChtbMzJt
KxtbbRtbMzJtICAgICAgLy8gd2UgaGF2ZSB0byB1c2UgdGhlIGRlZmF1bHQgZm9ybWF0IGluIHRo
aXMgc2l0dWF0aW9uLhtbbQobWzMybSsbW20bWzMybSAgICAgIGZpbGVmb3JtYXQbW20KG1szMm0r
G1ttG1szMm0gICAgICAgID0gUENCLT5GaWxlZm9ybWF0ID8gUENCLT5GaWxlZm9ybWF0IDogaGlk
X2dldF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KICAgICB9G1ttCiAgIGVsc2UbW20KICAgICB7
G1ttChtbMzZtQEAgLTExMDMsNiArMTExMiw3IEBAG1ttIBtbbUJhY2t1cCAodm9pZCkbW20KICAg
U2V0dGluZ3MuU2F2ZUNvbW1hbmQgPSBzYXZlX3NhdmVjb21tYW5kOxtbbQogG1ttCiAgIGZyZWUg
KGZpbGVuYW1lKTsbW20KG1szMm0rG1ttCiB9G1ttCiAbW20KICNpZiAhZGVmaW5lZChIQVNfQVRF
WElUKSAmJiAhZGVmaW5lZChIQVNfT05fRVhJVCkbW20KG1szNm1AQCAtMTY5Myw4ICsxNzAzLDkg
QEAbW20gG1ttc3RhdGljIEhJRF9Gb3JtYXQgKiphbGxfZm9ybWF0cyA9IDA7G1ttCiAJMTogZGF0
YSBPSxtbbQogICAgaWQgPT0gTlVMTCAtPiBmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHNw
ZWNpZmljIGZvcm1hdBtbbQogKi8bW20KG1szMm0rG1ttCiBpbnQbW20KG1szMW0taGlkX2dldF9m
aWxlX2Zvcm1hdChpbnQgaWR4LCBpbnQgbG9hZF9zYXZlLCBjaGFyICoqaWQsIGNoYXIgKipuYW1l
LCBjaGFyICoqbWltZSwgY2hhciAqKipwYXR0ZXJucykbW20KG1szMm0rG1ttG1szMm1oaWRfZ2V0
X2ZpbGVfZm9ybWF0KGludCBpZHgsIGludCBsb2FkX3NhdmUsIGludCAqaXNfZGVmYXVsdCwgY2hh
ciAqKmlkLCBjaGFyICoqbmFtZSwgY2hhciAqKm1pbWUsIGNoYXIgKioqcGF0dGVybnMpG1ttCiB7
G1ttCiAgICAgaWYgKGlkeCA+PSBuX2Zvcm1hdHMpG1ttCiAgICAgICAgIHJldHVybiAwOxtbbQob
WzM2bUBAIC0xNzA0LDYgKzE3MTUsNyBAQBtbbSAbW21oaWRfZ2V0X2ZpbGVfZm9ybWF0KGludCBp
ZHgsIGludCBsb2FkX3NhdmUsIGNoYXIgKippZCwgY2hhciAqKm5hbWUsIGNoYXIgKiptaW1lLBtb
bQogCXJldHVybiAxOxtbbQogICAgICAgfRtbbQogG1ttChtbMzJtKxtbbRtbMzJtICAgICppc19k
ZWZhdWx0ID0gYWxsX2Zvcm1hdHNbaWR4XS0+ZGVmYXVsdF9mb3JtYXQ7G1ttCiAgICAgKmlkID0g
YWxsX2Zvcm1hdHNbaWR4XS0+aWQ7G1ttCiAgICAgKm5hbWUgPSBhbGxfZm9ybWF0c1tpZHhdLT5k
ZXNjcmlwdGlvbjsbW20KICAgICAqbWltZSA9IGFsbF9mb3JtYXRzW2lkeF0tPm1pbWV0eXBlOxtb
bQobWzM2bUBAIC0xNzU2LDEzICsxNzY4LDE3IEBAG1ttIBtbbWNoYXIgKhtbbQogaGlkX2dldF9k
ZWZhdWx0X2Zvcm1hdF9pZCAoY2hhciAqZGVzYykbW20KIHsbW20KICAgaW50IGk7G1ttChtbMzJt
KxtbbRtbMzJtICBjaGFyICpyZXN1bHQgPSBOVUxMOxtbbQogG1ttCiAgIGZvciAoaSA9IDA7IGkg
PCBuX2Zvcm1hdHM7IGkrKykbW20KICAgICB7G1ttChtbMzFtLSAgICAgIGlmIChhbGxfZm9ybWF0
c1tpXS0+ZGVmYXVsdF9mb3JtYXQpG1ttChtbMzFtLSAgICAgICAgcmV0dXJuIGFsbF9mb3JtYXRz
W2ldLT5pZDsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoYWxsX2Zvcm1hdHNbaV0tPmRlZmF1
bHRfZm9ybWF0KSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBhc3NlcnQgKHJlc3VsdCA9PSBO
VUxMKTsgICAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgZGVmYXVsdCBmb3JtYXQbW20KG1sz
Mm0rG1ttG1szMm0gICAgICAgIHJlc3VsdCA9IGFsbF9mb3JtYXRzW2ldLT5pZDsbW20KG1szMm0r
G1ttG1szMm0gICAgICB9G1ttCiAgICAgfRtbbQobWzMxbS0gIHJldHVybiBOVUxMOxtbbQobWzMy
bSsbW20KG1szMm0rG1ttG1szMm0gIHJldHVybiByZXN1bHQ7G1ttCiB9G1ttCiAbW20KIGV4dGVy
biBpbnQgaGlkX2ZpbGVfZm9ybWF0X2xvYWRhYmxlKGNoYXIgKmlkKRtbbQobWzFtZGlmZiAtLWdp
dCBhL3NyYy9oaWQuaCBiL3NyYy9oaWQuaBtbbQobWzFtaW5kZXggZDg1NTNhMy4uNzhmMjI2NSAx
MDA2NDQbW20KG1sxbS0tLSBhL3NyYy9oaWQuaBtbbQobWzFtKysrIGIvc3JjL2hpZC5oG1ttChtb
MzZtQEAgLTI5MCw2ICsyOTAsNyBAQBtbbSAbW21leHRlcm4gIkMiG1ttCiAgIH0gSElEX0Zvcm1h
dDsbW20KIBtbbQogICBleHRlcm4gdm9pZCBoaWRfcmVnaXN0ZXJfZm9ybWF0cyAoSElEX0Zvcm1h
dCAqLCBpbnQpOxtbbQobWzMybSsbW20bWzMybSAgLy8gRklYTUU6IHRoZXNlIGRlZmluaXRpb25z
IGNvdWxkIHN0YW5kIGFuIGV4cGxpY2l0IHZvaWQgaW4gYXJnIGxpc3QbW20KICNkZWZpbmUgUkVH
SVNURVJfRk9STUFUUyhhKSBISURDT05DQVQodm9pZCByZWdpc3Rlcl8sYSkgKClcG1ttCiB7IGhp
ZF9yZWdpc3Rlcl9mb3JtYXRzKGEsIHNpemVvZihhKS9zaXplb2YoYVswXSkpOyB9G1ttCiAbW20K
G1szNm1AQCAtMjk3LDcgKzI5OCw3IEBAG1ttIBtbbWV4dGVybiAiQyIbW20KIGV4dGVybiBjaGFy
ICogaGlkX2dldF9mb3JtYXRfaWRfYnlfZGVzYyAoY2hhciAqZGVzYyk7G1ttCiBleHRlcm4gY2hh
ciAqIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2lkeCAoaW50KTsbW20KIGV4dGVybiBjaGFyICogaGlk
X2dldF9kZWZhdWx0X2Zvcm1hdF9pZCAoKTsbW20KG1szMW0tZXh0ZXJuIGludCBoaWRfZ2V0X2Zp
bGVfZm9ybWF0KGludCBpZHgsIGludCBsb2FkX3NhdmUsIGNoYXIgKippZCwgY2hhciAqKm5hbWUs
IGNoYXIgKiptaW1lLCBjaGFyICoqKnBhdHRlcm5zKTsbW20KG1szMm0rG1ttG1szMm1leHRlcm4g
aW50IGhpZF9nZXRfZmlsZV9mb3JtYXQoaW50IGlkeCwgaW50IGxvYWRfc2F2ZSwgaW50ICppc19k
ZWZhdWx0LCBjaGFyICoqaWQsIGNoYXIgKipuYW1lLCBjaGFyICoqbWltZSwgY2hhciAqKipwYXR0
ZXJucyk7G1ttCiBleHRlcm4gaW50IGhpZF9maWxlX2Zvcm1hdF9sb2FkYWJsZShjaGFyICppZCk7
G1ttCiAbW20KIBtbbQobWzFtZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d0a2hpZC1tYWluLmMg
Yi9zcmMvaGlkL2d0ay9ndGtoaWQtbWFpbi5jG1ttChtbMW1pbmRleCAzNWZlMDNhLi4wZjJjYzJi
IDEwMDY0NBtbbQobWzFtLS0tIGEvc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYxtbbQobWzFtKysr
IGIvc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYxtbbQobWzM2bUBAIC0xMzUxLDEwICsxMzUxLDEy
IEBAG1ttIBtbbVNhdmUgKGludCBhcmdjLCBjaGFyICoqYXJndiwgQ29vcmQgeCwgQ29vcmQgeSkb
W20KIAkgICAqIEFjdGlvblNhdmVUbygpIHdpbGwgaWdub3JlIHRoZSBuZXcgZmlsZSBuYW1lIHdl
G1ttCiAJICAgKiBqdXN0IG9idGFpbmVkLhtbbQogCSAgICovG1ttChtbMzFtLQkgIGlmIChzdHJj
YXNlY21wIChmdW5jdGlvbiwgIkxheW91dCIpID09IDApG1ttChtbMzJtKxtbbQkbWzMybSAgaWYg
KHN0cmNhc2VjbXAgKGZ1bmN0aW9uLCAiTGF5b3V0IikgPT0gMCkgextbbQogCSAgICBoaWRfYWN0
aW9ubCAoIlNhdmVUbyIsICJMYXlvdXRBcyIsIG5hbWUsIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2Rl
c2MoY3VycmVudF9mb3JtYXQpLCBOVUxMKTsbW20KG1szMW0tCSAgZWxzZRtbbQobWzMybSsbW20b
WzMybSAgICAgICAgICB9G1ttChtbMzJtKxtbbQkbWzMybSAgZWxzZSB7G1ttCiAJICAgIGhpZF9h
Y3Rpb25sICgiU2F2ZVRvIiwgZnVuY3Rpb24sIG5hbWUsIGhpZF9nZXRfZm9ybWF0X2lkX2J5X2Rl
c2MoY3VycmVudF9mb3JtYXQpLCBOVUxMKTsbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgfRtb
bQogCX0bW20KICAgICAgIGdfZnJlZSAobmFtZSk7G1ttCiAgICAgfRtbbQobWzFtZGlmZiAtLWdp
dCBhL3NyYy9oaWQvZ3RrL2d1aS1kaWFsb2cuYyBiL3NyYy9oaWQvZ3RrL2d1aS1kaWFsb2cuYxtb
bQobWzFtaW5kZXggOWM1N2NiMi4uZjI0MWQ0OCAxMDA2NDQbW20KG1sxbS0tLSBhL3NyYy9oaWQv
Z3RrL2d1aS1kaWFsb2cuYxtbbQobWzFtKysrIGIvc3JjL2hpZC9ndGsvZ3VpLWRpYWxvZy5jG1tt
ChtbMzZtQEAgLTM1LDYgKzM1LDggQEAbW20KICNpbmNsdWRlICJkYXRhLmgiG1ttCiAjaW5jbHVk
ZSAiZ3VpLmgiG1ttCiAbW20KG1szMm0rG1ttG1szMm0jaW5jbHVkZSA8YXNzZXJ0Lmg+G1ttChtb
MzJtKxtbbQogI2lmZGVmIEhBVkVfTElCRE1BTExPQxtbbQogI2luY2x1ZGUgPGRtYWxsb2MuaD4b
W20KICNlbmRpZhtbbQobWzM2bUBAIC0zMDgsMjEgKzMxMCw2NSBAQBtbbSAbW21naGlkX2RpYWxv
Z19maWxlX3NlbGVjdF9vcGVuIChnY2hhciAqIHRpdGxlLCBnY2hhciAqKiBwYXRoLCBnY2hhciAq
IHNob3J0Y3V0cykbW20KICAgICAvKiBhZGQgYSBmaWx0ZXIgZm9yIGxheW91dCBmaWxlcyAqLxtb
bQogICAgIEd0a0ZpbGVGaWx0ZXIgKnBjYl9maWx0ZXI7G1ttCiAgICAgaW50IGlkeCA9IDAsIHBp
OxtbbQobWzMybSsbW20bWzMybSAgICBpbnQgaXNfZGVmYXVsdF9mb3JtYXQ7G1ttCiAgICAgY2hh
ciAqZmlsdGVyX2lkLCAqZmlsdGVyX25hbWUsICpmaWx0ZXJfbWltZSwgKipmaWx0ZXJfcGF0dGVy
bnM7G1ttCiAbW20KG1szMW0tICAgIHdoaWxlIChoaWRfZ2V0X2ZpbGVfZm9ybWF0KGlkeCwgMCwg
JmZpbHRlcl9pZCwgJmZpbHRlcl9uYW1lLCAmZmlsdGVyX21pbWUsICZmaWx0ZXJfcGF0dGVybnMp
KSB7G1ttChtbMzFtLSAgICAgICAgaWYgKGZpbHRlcl9pZCAhPSBOVUxMICkgextbbQobWzMxbS0g
ICAgICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldyAoKTsbW20KG1szMW0t
ICAgICAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX3NldF9uYW1lIChwY2JfZmlsdGVyLCBmaWx0ZXJf
bmFtZSk7G1ttChtbMzFtLSAgICAgICAgICAgIGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBl
IChwY2JfZmlsdGVyLCBmaWx0ZXJfbWltZSk7G1ttChtbMzFtLQkgICAgcGkgPSAwOxtbbQobWzMx
bS0JICAgIHdoaWxlIChmaWx0ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzFtLQkJZ3Rr
X2ZpbGVfZmlsdGVyX2FkZF9wYXR0ZXJuIChwY2JfZmlsdGVyLCBmaWx0ZXJfcGF0dGVybnNbcGld
KTsbW20KG1szMW0tCQlwaSsrOxtbbQobWzMxbS0JICAgIH0bW20KG1szMW0tICAgICAgICAgICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9hZGRfZmlsdGVyIChHVEtfRklMRV9DSE9PU0VSIChkaWFsb2cpLCBw
Y2JfZmlsdGVyKTsbW20KG1szMW0tCX0bW20KG1szMW0tICAgICAgICBpZHgrKzsbW20KG1szMm0r
G1ttChtbMzJtKxtbbRtbMzJtICAgIC8vIFRoZSBkZWZhdWx0IGZvcm1hdCBzaG91bGQgZ28gYXQg
dGhlIHRvcCBvZiB0aGUgZmlsdGVyIGxpc3QuICBGSVhNRTobW20KG1szMm0rG1ttG1szMm0gICAg
Ly8gYWN0dWFsbHkgaXQgc2hvdWxkIHBlcmhhcHMgYmUgdGhlIGRlZmF1bHQgb3B0aW9uLCByYXRo
ZXIgdGhhbiAiYWxsIhtbbQobWzMybSsbW20bWzMybSAgICAvLyAod2hpY2ggaXMgYWxyZWFkeSBh
ZGRlZCBhYm92ZSkuG1ttChtbMzJtKxtbbRtbMzJtICAgIGJvb2wgZm91bmRfZGVmYXVsdCA9IGZh
bHNlOxtbbQobWzMybSsbW20bWzMybSAgICB3aGlsZSAoG1ttChtbMzJtKxtbbRtbMzJtICAgICAg
ICBoaWRfZ2V0X2ZpbGVfZm9ybWF0ICgbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgaWR4LBtb
bQobWzMybSsbW20bWzMybSAgICAgICAgICAwLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAm
aXNfZGVmYXVsdF9mb3JtYXQsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfaWQs
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfbmFtZSwbW20KG1szMm0rG1ttG1sz
Mm0gICAgICAgICAgJmZpbHRlcl9taW1lLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmls
dGVyX3BhdHRlcm5zICkgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgaWYgKCBpc19kZWZhdWx0
X2Zvcm1hdCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIC8vIFRoZSBkZWZhdWx0IGZvcm1h
dCBoYWQgYmV0dGVyIGJlIGJ1aWx0LWluIGFuZCBjYXBhYmxlIG9mIGxvYWQbW20KG1szMm0rG1tt
G1szMm0gICAgICAgIGFzc2VydCAoZmlsdGVyX2lkICE9IE5VTEwpOxtbbRtbNDFtICAbW20KG1sz
Mm0rG1ttG1szMm0gICAgICAgIC8vIFRoZXJlIGJldHRlciBub3QgYmUgbW9yZSB0aGFuIG9uZSBk
ZWZhdWx0LiAgRklYTUU6IE1lc3NhZ2UgZm9yIHRoaXMbW20KG1szMm0rG1ttG1szMm0gICAgICAg
IC8vIGFzIHdlbGwgaW4gY2FzZSBvZiBzY3Jld2VkLXVwIHBsdWdpbnMgdGhhdCB3YW50IHRvIHNl
dCBkZWZhdWx0PxtbbQobWzMybSsbW20bWzMybSAgICAgICAgYXNzZXJ0ICghIGZvdW5kX2RlZmF1
bHQpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZm91bmRfZGVmYXVsdCA9IHRydWU7G1ttChtb
MzJtKxtbbRtbMzJtICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldyAoKTsb
W20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2ZpbHRlcl9zZXRfbmFtZSAocGNiX2Zp
bHRlciwgZmlsdGVyX25hbWUpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZ3RrX2ZpbGVfZmls
dGVyX2FkZF9taW1lX3R5cGUgKHBjYl9maWx0ZXIsIGZpbHRlcl9taW1lKTsbW20KG1szMm0rG1tt
G1szMm0gICAgICAgIHBpID0gMDsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHdoaWxlIChmaWx0
ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIGd0a19m
aWxlX2ZpbHRlcl9hZGRfcGF0dGVybiAocGNiX2ZpbHRlciwgZmlsdGVyX3BhdHRlcm5zW3BpXSk7
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIHBpKys7G1ttChtbMzJtKxtbbRtbMzJtICAgICAg
ICB9G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9jaG9vc2VyX2FkZF9maWx0ZXIg
KEdUS19GSUxFX0NIT09TRVIgKGRpYWxvZyksIHBjYl9maWx0ZXIpOxtbbQobWzMybSsbW20bWzMy
bSAgICAgIH0bW20KG1szMm0rG1ttG1szMm0gICAgICBpZHgrKzsbW20KG1szMm0rG1ttG1szMm0g
ICAgfRtbbQobWzMybSsbW20KG1szMm0rG1ttG1szMm0gICAgLy8gTm93IGFkZCBhbGwgdGhlIG90
aGVyIG5vbi1kZWZhdWx0IGZvcm1hdHMbW20KG1szMm0rG1ttG1szMm0gICAgaWR4ID0gMDsbW20K
G1szMm0rG1ttG1szMm0gICAgd2hpbGUgKBtbbQobWzMybSsbW20bWzMybSAgICAgICAgaGlkX2dl
dF9maWxlX2Zvcm1hdCAoG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIGlkeCwbW20KG1szMm0r
G1ttG1szMm0gICAgICAgICAgMCwbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgJmlzX2RlZmF1
bHRfZm9ybWF0LBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmlsdGVyX2lkLCAmZmlsdGVy
X25hbWUsG1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgICZmaWx0ZXJfbWltZSwbW20KG1szMm0r
G1ttG1szMm0gICAgICAgICAgJmZpbHRlcl9wYXR0ZXJucyApICkgextbbQobWzMybSsbW20bWzMy
bSAgICAgIGlmIChmaWx0ZXJfaWQgIT0gTlVMTCAmJiAoISBpc19kZWZhdWx0X2Zvcm1hdCkgKSB7
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBwY2JfZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25l
dyAoKTsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2ZpbHRlcl9zZXRfbmFtZSAo
cGNiX2ZpbHRlciwgZmlsdGVyX25hbWUpOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgZ3RrX2Zp
bGVfZmlsdGVyX2FkZF9taW1lX3R5cGUgKHBjYl9maWx0ZXIsIGZpbHRlcl9taW1lKTsbW20KG1sz
Mm0rG1ttG1szMm0gICAgICAgIHBpID0gMDsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIHdoaWxl
IChmaWx0ZXJfcGF0dGVybnNbcGldICE9IDAgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAg
IGd0a19maWxlX2ZpbHRlcl9hZGRfcGF0dGVybiAocGNiX2ZpbHRlciwgZmlsdGVyX3BhdHRlcm5z
W3BpXSk7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICAgIHBpKys7G1ttChtbMzJtKxtbbRtbMzJt
ICAgICAgICB9G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9jaG9vc2VyX2FkZF9m
aWx0ZXIgKEdUS19GSUxFX0NIT09TRVIgKGRpYWxvZyksIHBjYl9maWx0ZXIpOxtbbQobWzMybSsb
W20bWzMybSAgICAgIH0bW20KG1szMm0rG1ttG1szMm0gICAgICBpZHgrKzsbW20KICAgICB9G1tt
CiAgIH0bW20KIBtbbQobWzM2bUBAIC01MDUsMTAgKzU1MSw0NSBAQBtbbSAbW21naGlkX2RpYWxv
Z19maWxlX3NlbGVjdF9zYXZlIChnY2hhciAqIHRpdGxlLCBnY2hhciAqKiBwYXRoLCBnY2hhciAq
KiBmb3JtYXQsIGdjaBtbbQogICBpZiAoZm9ybWF0ICE9IE5VTEwgKSB7G1ttCiAgICAgR3RrRmls
ZUZpbHRlciAqcGNiX2ZpbHRlcjsbW20KICAgICBpbnQgaWR4ID0gMCwgcGk7G1ttChtbMzJtKxtb
bRtbMzJtICAgIGludCBpc19kZWZhdWx0X2Zvcm1hdDsbW20KICAgICBjaGFyICpmaWx0ZXJfaWQs
ICpmaWx0ZXJfbmFtZSwgKmZpbHRlcl9taW1lLCAqKmZpbHRlcl9wYXR0ZXJuczsbW20KIBtbbQob
WzMxbS0gICAgd2hpbGUgKGhpZF9nZXRfZmlsZV9mb3JtYXQoaWR4LCAwLCAmZmlsdGVyX2lkLCAm
ZmlsdGVyX25hbWUsICZmaWx0ZXJfbWltZSwgJmZpbHRlcl9wYXR0ZXJucykpIHsbW20KG1szMW0t
ICAgICAgICBpZiAoZmlsdGVyX2lkICE9IE5VTEwgKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgIC8v
IFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgZm9ybWF0IGdldHMgYWRkZWQg
dG8gdGhlIGZpbHRlchtbbQobWzMybSsbW20bWzMybSAgICAvLyBmaXJzdCwgc28gdGhhdCBpdCBl
bmRzIHVwIGFzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhbmQgYXQgdGhlIHRvcCBvZhtbbQobWzMy
bSsbW20bWzMybSAgICAvLyB0aGUgbGlzdCBpbiB0aGUgR1VJG1ttChtbMzJtKxtbbRtbMzJtICAg
IGJvb2wgZm91bmRfZGVmYXVsdCA9IGZhbHNlOxtbbQobWzMybSsbW20bWzMybSAgICB3aGlsZSAo
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBoaWRfZ2V0X2ZpbGVfZm9ybWF0ICgbW20KG1szMm0r
G1ttG1szMm0gICAgICAgICAgaWR4LBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAwLBtbbQob
WzMybSsbW20bWzMybSAgICAgICAgICAmaXNfZGVmYXVsdF9mb3JtYXQsG1ttChtbMzJtKxtbbRtb
MzJtICAgICAgICAgICZmaWx0ZXJfaWQsICZmaWx0ZXJfbmFtZSwbW20KG1szMm0rG1ttG1szMm0g
ICAgICAgICAgJmZpbHRlcl9taW1lLBtbbQobWzMybSsbW20bWzMybSAgICAgICAgICAmZmlsdGVy
X3BhdHRlcm5zKSApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICBpZiAoIGlzX2RlZmF1bHRfZm9y
bWF0ICkgextbbQobWzMybSsbW20bWzMybSAgICAgICAgLy8gVGhlIGRlZmF1bHQgZm9ybWF0IGhh
ZCBiZXR0ZXIgYmUgYnVpbHQtaW4gYW5kIGNhcGFibGUgb2Ygc2F2ZRtbbQobWzMybSsbW20bWzMy
bSAgICAgICAgYXNzZXJ0IChmaWx0ZXJfaWQgIT0gTlVMTCk7G1ttG1s0MW0gIBtbbQobWzMybSsb
W20bWzMybSAgICAgICAgLy8gVGhlcmUgYmV0dGVyIG5vdCBiZSBtb3JlIHRoYW4gb25lIGRlZmF1
bHQuICBGSVhNRTogTWVzc2FnZSBmb3IgdGhpcxtbbQobWzMybSsbW20bWzMybSAgICAgICAgLy8g
YXMgd2VsbCBpbiBjYXNlIG9mIHNjcmV3ZWQtdXAgcGx1Z2lucyB0aGF0IHdhbnQgdG8gc2V0IGRl
ZmF1bHQ/G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBhc3NlcnQgKCEgZm91bmRfZGVmYXVsdCk7
G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBmb3VuZF9kZWZhdWx0ID0gdHJ1ZTsbW20KG1szMm0r
G1ttG1szMm0gICAgICAgIHBjYl9maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3ICgpOxtbbQob
WzMybSsbW20bWzMybSAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX3NldF9uYW1lIChwY2JfZmlsdGVy
LCBmaWx0ZXJfbmFtZSk7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBndGtfZmlsZV9maWx0ZXJf
YWRkX21pbWVfdHlwZSAocGNiX2ZpbHRlciwgZmlsdGVyX21pbWUpOxtbbQobWzMybSsbW20bWzMy
bSAgICAgICAgcGkgPSAwOxtbbQobWzMybSsbW20bWzMybSAgICAgICAgd2hpbGUgKGZpbHRlcl9w
YXR0ZXJuc1twaV0gIT0gMCApIHsbW20KG1szMm0rG1ttG1szMm0gICAgICAgICAgZ3RrX2ZpbGVf
ZmlsdGVyX2FkZF9wYXR0ZXJuIChwY2JfZmlsdGVyLCBmaWx0ZXJfcGF0dGVybnNbcGldKTsbW20K
G1szMm0rG1ttG1szMm0gICAgICAgICAgcGkrKzsbW20KG1szMm0rG1ttG1szMm0gICAgICAgIH0b
W20KG1szMm0rG1ttG1szMm0gICAgICAgIGd0a19maWxlX2Nob29zZXJfYWRkX2ZpbHRlciAoR1RL
X0ZJTEVfQ0hPT1NFUiAoZGlhbG9nKSwgcGNiX2ZpbHRlcik7G1ttChtbMzJtKxtbbRtbMzJtICAg
ICAgfRtbbQobWzMybSsbW20bWzMybSAgICAgIGlkeCsrOxtbbQobWzMybSsbW20bWzMybSAgICB9
G1ttChtbMzJtKxtbbQobWzMybSsbW20bWzMybSAgICAvLyBOb3cgYWRkIGFsbCB0aGUgb3RoZXIg
bm9uLWRlZmF1bHQgZm9ybWF0cxtbbQobWzMybSsbW20bWzMybSAgICBpZHggPSAwOxtbbQobWzMy
bSsbW20bWzMybSAgICB3aGlsZSAoaGlkX2dldF9maWxlX2Zvcm1hdChpZHgsIDAsICZpc19kZWZh
dWx0X2Zvcm1hdCwgJmZpbHRlcl9pZCwgJmZpbHRlcl9uYW1lLCAmZmlsdGVyX21pbWUsICZmaWx0
ZXJfcGF0dGVybnMpKSB7G1ttChtbMzJtKxtbbRtbMzJtICAgICAgICBpZiAoZmlsdGVyX2lkICE9
IE5VTEwgJiYgKCEgaXNfZGVmYXVsdF9mb3JtYXQpICkgextbbQogICAgICAgICAgICAgcGNiX2Zp
bHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcgKCk7G1ttCiAgICAgICAgICAgICBndGtfZmlsZV9m
aWx0ZXJfc2V0X25hbWUgKHBjYl9maWx0ZXIsIGZpbHRlcl9uYW1lKTsbW20KICAgICAgICAgICAg
IGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBlIChwY2JfZmlsdGVyLCBmaWx0ZXJfbWltZSk7
G1ttCg==
--047d7b5d3e64967bb5052955a20e--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019