This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/989: Internal error: Floating point exception.



>Number:         989
>Category:       c
>Synopsis:       Internal error: Floating point exception.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 05 05:06:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Hans Terlouw
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
uname -a :
Linux backlund 2.2.16-22 #1 Tue Aug 22 16:49:06 EDT 2000 i686 unknown
>Description:
g77 -v -save-temps -c -D_BSD_SOURCE -Dntohl=ntohl -D__g77__=2 -O -I. -I/Software/users/gipsy/inc -I- -I/usr/include -ansi -pedantic -Wall descr.c
descr.c:1055: Internal error: Floating point exception.

this error does not occur when "-O" is omitted.
>How-To-Repeat:
I hope descr.c and descr.i are sufficient. If not, I will
collect everything needed.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="descr.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="descr.i"

IyAxICJkZXNjci5jIgojIDEwICJkZXNjci5jIgojIDM0ICIvU29mdHdhcmUvdXNlcnMvZ2lwc3kv
aW5jL3N0ZGRlZi5oIiAxCiMgNDggIi9Tb2Z0d2FyZS91c2Vycy9naXBzeS9pbmMvc3RkZGVmLmgi
CiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5z
aWduZWQgaW50IHNpemVfdDsKIyAyODcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu
dXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyA0
OCAiL1NvZnR3YXJlL3VzZXJzL2dpcHN5L2luYy9zdGRkZWYuaCIgMgojIDEwICJkZXNjci5jIiAy
CgojIDIyOCAiL1NvZnR3YXJlL3VzZXJzL2dpcHN5L2luYy9zdGRsaWIuaCIgMQp0eXBlZGVmIHN0
cnVjdCB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICBsb25nIHF1b3Q7CiAgICBsb25nIHJlbTsKfSBsZGl2X3Q7CgojIDM4MiAiL1NvZnR3
YXJlL3VzZXJzL2dpcHN5L2luYy9zdGRsaWIuaCIKZXh0ZXJuIGNoYXIgKmdldGVudihjb25zdCBj
aGFyICpuYW1lKTsKZXh0ZXJuIGRpdl90IGRpdihpbnQgbnVtLCBpbnQgZGVub20pOwpleHRlcm4g
ZG91YmxlIGF0b2YoY29uc3QgY2hhciAqcyk7CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNo
YXIgKnMsIGNoYXIgKiplbmRwKTsKZXh0ZXJuIGludCBhYnMoaW50IG4pOwpleHRlcm4gaW50IGF0
ZXhpdCh2b2lkICgqZmNuKSh2b2lkKSk7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICpzKTsK
ZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRlcm4gaW50IHN5c3RlbShjb25zdCBjaGFyKnMpOwpl
eHRlcm4gbGRpdl90IGxkaXYobG9uZyBudW0sIGxvbmcgZGVub20pOwpleHRlcm4gbG9uZyBhdG9s
KGNvbnN0IGNoYXIgKnMpOwpleHRlcm4gbG9uZyBsYWJzKGxvbmcgbik7CmV4dGVybiBsb25nIHN0
cnRvbChjb25zdCBjaGFyICpzLCBjaGFyICoqZW5kcCwgaW50IGJhc2UpOwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBzdHJ0b3VsKGNvbnN0IGNoYXIgKnMsIGNoYXIgKiplbmRwLCBpbnQgYmFzZSk7CmV4
dGVybiB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gdm9pZCBleGl0KGludCBzdGF0dXMpOwpleHRl
cm4gdm9pZCBmcmVlKHZvaWQgKnApOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICpiYXNlLCBzaXpl
X3QgbixzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY21wKShjb25z
dCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQg
c2VlZCk7CmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAq
YmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIHNpemVfdCBzaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKmtleXZhbCwgY29uc3Qg
dm9pZCAqZGF0dW0pKTsKZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXplX3Qgbm9iaiwgc2l6ZV90IHNp
emUpOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKTsKZXh0ZXJuIHZvaWQgKnJlYWxs
b2Modm9pZCAqcCwgc2l6ZV90IHNpemUpOwoKIyAxMSAiZGVzY3IuYyIgMgoKIyA1MyAiL1NvZnR3
YXJlL3VzZXJzL2dpcHN5L2luYy9naXBzeWMuaCIgMQojIDQ2ICIvU29mdHdhcmUvdXNlcnMvZ2lw
c3kvaW5jL2YyY3Z2ZGVmcy5oIiAxCnR5cGVkZWYgaW50IGZpbnQ7CnR5cGVkZWYgaW50IGJvb2w7
CnR5cGVkZWYgc3RydWN0IHsgY2hhciAqYTsgZmludCBsOyB9IGZjaGFyOwp0eXBlZGVmIHN0cnVj
dCB7IGZsb2F0IHI7IGZsb2F0IGk7IH0gY29tcGxleDsKIyA1MyAiL1NvZnR3YXJlL3VzZXJzL2dp
cHN5L2luYy9naXBzeWMuaCIgMgoKCgoKCgoKZXh0ZXJuIGludCBjaGFyMnN0cihmY2hhciBmYyxj
aGFyICpjYyxpbnQgbGVuKTsKZXh0ZXJuIGludCBzdHIyY2hhcihjaGFyICpjYyxmY2hhciBmYyk7
CmV4dGVybiBmY2hhciB0b2ZjaGFyIChjaGFyICpjYyk7CmV4dGVybiBjaGFyICp6YWRkKGZjaGFy
IGZjKTsKCiMgMTIgImRlc2NyLmMiIDIKCiMgMTU1ICIvU29mdHdhcmUvdXNlcnMvZ2lwc3kvaW5j
L3N0cmluZy5oIiAxCmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqcywgY29uc3QgY2hhciAqY3Qp
OwpleHRlcm4gY2hhciAqc3RybmNweSggY2hhciAqcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBu
KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICpzLCBjb25zdCBjaGFyICpjdCk7CmV4dGVybiBj
aGFyICpzdHJuY2F0KGNoYXIgKnMsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3Qgbik7CmV4dGVybiBj
aGFyICpzdHJjaHIoY29uc3QgY2hhciAqY3MsIGludCBjKTsKZXh0ZXJuIGNoYXIgKnN0cnJjaHIo
Y29uc3QgY2hhciAqY3MsIGludCBjKTsKZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAq
Y3MsIGNvbnN0IGNoYXIgKmN0KTsKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICpjcywg
Y29uc3QgY2hhciAqY3QpOwpleHRlcm4gY2hhciAqc3RyZXJyb3Ioc2l6ZV90IG4pOwpleHRlcm4g
Y2hhciAqc3RydG9rKGNoYXIgKnMsIGNvbnN0IGNoYXIgKmN0KTsKZXh0ZXJuIGludCBtZW1jbXAo
Y29uc3Qgdm9pZCAqY3MsIGNvbnN0IHZvaWQgKmN0LCBzaXplX3Qgbik7CmV4dGVybiBpbnQgc3Ry
Y21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CmV4dGVybiBpbnQgc3RybmNtcChj
b25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBuKTsKZXh0ZXJuIHNpemVfdCBz
dHJzcG4oY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKZXh0ZXJuIHNpemVfdCBzdHJj
c3BuKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CmV4dGVybiBzaXplX3Qgc3RybGVu
KGNvbnN0IGNoYXIgKmNzKTsKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICpzLCBjb25zdCB2b2lk
ICpjdCwgc2l6ZV90IG4pOwpleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICpzLCBjb25zdCB2b2lk
ICpjdCwgc2l6ZV90IG4pOwpleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKmNzLCBpbnQg
Yywgc2l6ZV90IG4pOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qg
bik7CgojIDEzICJkZXNjci5jIiAyCgojIDEgIi9Tb2Z0d2FyZS91c2Vycy9naXBzeS9pbmMvbmJp
dHMuaCIgMQpleHRlcm4gZmludCBuYml0c19jKGZpbnQgKik7CiMgMTQgImRlc2NyLmMiIDIKCiMg
NCAiL1NvZnR3YXJlL3VzZXJzL2dpcHN5L2luYy9zd2FwZmludC5oIiAxCmV4dGVybiBmaW50IHN3
YXBmaW50KGZpbnQgYXJnKTsKIyAxNSAiZGVzY3IuYyIgMgoKIyA2ICJzZXJ2ZXIuaCIgMQojIDYg
Im9iamVjdC5oIiAxCnR5cGVkZWYgdm9pZCAqb2JqZWN0OwojIDYgInNlcnZlci5oIiAyCgojIDMg
ImxpbmtlZGxpc3QuaCIgMQp0eXBlZGVmIHZvaWQgKipsaXN0aWQ7CnR5cGVkZWYgdm9pZCAqaXRl
cmlkOwoKZXh0ZXJuIGxpc3RpZCBOZXdMaXN0KHZvaWQpOwpleHRlcm4gdm9pZCBEZWxldGVMaXN0
KGxpc3RpZCk7CmV4dGVybiB2b2lkIEluc2VydEhlYWQobGlzdGlkLCB2b2lkICopOwpleHRlcm4g
dm9pZCAqSGVhZFZhbHVlKGxpc3RpZCk7CmV4dGVybiB2b2lkICpSZW1vdmVIZWFkKGxpc3RpZCk7
CmV4dGVybiB2b2lkICpSZW1vdmVUYWlsKGxpc3RpZCk7CmV4dGVybiB2b2lkIFJlbW92ZVZhbHVl
KGxpc3RpZCwgdm9pZCAqKTsKZXh0ZXJuIGludCBWYWx1ZVByZXNlbnQobGlzdGlkLCB2b2lkICop
OwpleHRlcm4gaXRlcmlkIE5ld0l0ZXIobGlzdGlkKTsKZXh0ZXJuIHZvaWQgKkN1cnJlbnRWYWx1
ZShpdGVyaWQpOwpleHRlcm4gdm9pZCAqTmV4dFZhbHVlKGl0ZXJpZCk7CmV4dGVybiB2b2lkICpS
ZW1vdmVDdXJyZW50KGl0ZXJpZCk7CmV4dGVybiB2b2lkIERlbGV0ZUl0ZXIoaXRlcmlkKTsKIyA3
ICJzZXJ2ZXIuaCIgMgoKIyAxNiAibWFpbmxvb3AuaCIgMQp0eXBlZGVmIHZvaWQgKmlkZW50Owpl
eHRlcm4gdm9pZCBNYWluTG9vcCh2b2lkKTsKZXh0ZXJuIGlkZW50IFNjaGVkdWxlUmVhZCh2b2lk
KCopKCksaW50LHZvaWQqKTsKZXh0ZXJuIGlkZW50IFNjaGVkdWxlV3JpdGUodm9pZCgqKSgpLGlu
dCx2b2lkKik7CmV4dGVybiBpZGVudCBTY2hlZHVsZVRpbWVyKHZvaWQoKikoKSxpbnQsdm9pZCop
OwpleHRlcm4gdm9pZCBEZXNjaGVkdWxlKGlkZW50Kik7CmV4dGVybiB2b2lkIERlc2NoZWR1bGVB
bGwodm9pZCk7CiMgOCAic2VydmVyLmgiIDIKIyAxOSAic2VydmVyLmgiCnR5cGVkZWYgc3RydWN0
IF9zcnZzdGF0IHsKICAgaWRlbnQgdXg7CiAgIGlkZW50IGluOwogICBpbnQgaW5pdHNpemU7CiAg
IGludCBleHRlbmRzaXplOwogICBpbnQgcHJpbWU7CiAgIGZpbnQgcHdkdzsKICAgZmludCBwd2Ry
OwogICBvYmplY3QgbG9ja2VkOwogICBpbnQgbmxvY2tzOwogICBsaXN0aWQgbG9ja3dhaXQ7CiAg
IGludCBlcnJvcjsKfSBfc3J2c3RhdCwgKnNydnN0YXQ7CgojIDE2ICJkZXNjci5jIiAyCgojIDMg
ImFsbG9jLmgiIDEKZXh0ZXJuIHZvaWQgKk1hbGxvYyAoaW50IHNpemUpOwpleHRlcm4gdm9pZCAq
UmVhbGxvYyAodm9pZCAqb3JpZywgaW50IG5ld3NpemUpOwpleHRlcm4gdm9pZCAqQ2FsbG9jIChp
bnQgbmVsZW0sIGludCBlbHNpemUpOwpleHRlcm4gdm9pZCBGcmVlICh2b2lkKiBwdHIpOwpleHRl
cm4gY2hhciAqU3RyRHVwIChjaGFyICpvcmlnKTsKIyAxNyAiZGVzY3IuYyIgMgoKIyA0ICJnZHNk
ZXNjci5oIiAxCiMgMjMgIi9Tb2Z0d2FyZS91c2Vycy9naXBzeS9pbmMvZ2RzY29tLmgiIDEKCiMg
MzIgIi9Tb2Z0d2FyZS91c2Vycy9naXBzeS9pbmMvZ2RzcGFyYW1zLmgiIDEKdHlwZWRlZiBzdHJ1
Y3QgewogICBkb3VibGUgb3JpZ2luWzIwXTsKICAgZmludCBzaXplIFsyMF07CiAgIGZpbnQgZmFj
dG9yWzIwKzFdOwogICBmaW50IG5heGlzOwogICBjaGFyIG5hbWUgWzI1Nl07Cn0gZ2RzX2Nvb3Jk
OwoKIyAyNCAiL1NvZnR3YXJlL3VzZXJzL2dpcHN5L2luYy9nZHNjb20uaCIgMgojIDczICIvU29m
dHdhcmUvdXNlcnMvZ2lwc3kvaW5jL2dkc2NvbS5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgIGZpbnQg
Y29kZTsKICAgZmludCBpZDsKICAgZmludCBpbW07Cn0gX2dkc1JlcUhlYWQsICpnZHNSZXFIZWFk
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICBfZ2RzUmVxSGVhZCBoZWFkOwp9IF9nZHNSZXF1ZXN0LCAq
Z2RzUmVxdWVzdCwKICBfc2V0Q2xvc2UsICpzZXRDbG9zZSwKICBfc2V0RnR5cGUsICpzZXRGdHlw
ZSwKICBfc2V0SXR5cGUsICpzZXRJdHlwZSwKICBfc2V0TG9jaywgKnNldExvY2ssCiAgX3NldFVu
bG9jaywgKnNldFVubG9jaywKICBfc2V0UmhlZCwgKnNldFJoZWQsCiAgX3NldFdoZWQsKnNldFdo
ZWQsCiAgX3NldE9wdGltaXplLCpzZXRPcHRpbWl6ZSwKICBfc2V0U3luYywqc2V0U3luYywKICBf
c2V0UHJpbWUsKnNldFByaW1lLAogIF9zZXROaXRlbXMsKnNldE5pdGVtczsKCnR5cGVkZWYgc3Ry
dWN0IHsKICBfZ2RzUmVxSGVhZCBoZWFkOwogICBmaW50IHB3ZDsKICAgZmludCB2ZXJzaW9uOwog
ICBmaW50IHN1YnZlcnNpb247Cn0gX2dkc0Nvbm5lY3QsICpnZHNDb25uZWN0OwoKdHlwZWRlZiBz
dHJ1Y3QgewogICBfZ2RzUmVxSGVhZCBoZWFkOwogICBmaW50IHNpemU7CiAgIGZpbnQgaW5jcjsK
ICAgZmludCBwcmltZTsKICAgY2hhciBuYW1lWzI1Nl07Cn0gX3NldENyZWF0ZSwgKnNldENyZWF0
ZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgX2dkc1JlcUhlYWQgaGVhZDsKICAgY2hhciBuYW1lWzI1
Nl07Cn0gX3NldERlbGV0ZSwgKnNldERlbGV0ZSwKICBfc2V0RXhpc3QsICpzZXRFeGlzdDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgX2dkc1JlcUhlYWQgaGVhZDsKICAgY2hhciBvbGRuYW1lWzI1Nl07
CiAgIGNoYXIgbmV3bmFtZVsyNTZdOwp9IF9zZXRSZW5hbWUsICpzZXRSZW5hbWU7Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgIF9nZHNSZXFIZWFkIGhlYWQ7CiAgIGZpbnQgaW5jcjsKICAgY2hhciBuYW1l
WzI1Nl07Cn0gX3NldE9wZW4sICpzZXRPcGVuOwoKdHlwZWRlZiBzdHJ1Y3QgewogICBfZ2RzUmVx
SGVhZCBoZWFkOwogICBjaGFyIG5hbWVbMjU2XTsKfSBfc2V0UmVjb3ZlciwgKnNldFJlY292ZXI7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgIF9nZHNSZXFIZWFkIGhlYWQ7CiAgIGZpbnQgbGV2ZWw7CiAg
IGZpbnQgbmVsZW1zOwogICBmaW50IHBvc2l0aW9uOwogICBmaW50IGN1cnI7CiAgIGZpbnQgbGVu
Z3RoOwogICBmaW50IGFrcmVjOwogICBmaW50IHJrcmVjOwogICBjaGFyIHR5cGU7CiAgIGNoYXIg
bmFtZVsyMV07Cn0gX2RzY1dyaXRlLCAqZHNjV3JpdGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgIF9n
ZHNSZXFIZWFkIGhlYWQ7CiAgIGZpbnQgbGV2ZWw7CiAgIGZpbnQgbmVsZW1zOwogICBmaW50IHBv
c2l0aW9uOwogICBmaW50IGFic2xldjsKICAgY2hhciB0eXBlOwogICBjaGFyIG5hbWVbMjFdOwp9
IF9kc2NSZWFkLCAqZHNjUmVhZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgX2dkc1JlcUhlYWQgaGVh
ZDsKICAgZmludCBsZXZlbDsKICAgY2hhciBuYW1lWzIxXTsKfSBfZHNjRGVsZXRlLCAqZHNjRGVs
ZXRlLAogIF9kc2NSZXdpbmQsICpkc2NSZXdpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgIF9nZHNS
ZXFIZWFkIGhlYWQ7CiAgIGZpbnQgbGV2ZWw7CiAgIGNoYXIgbmFtZVsyMV07Cn0gX2RzY0RlbGFs
bCwgKmRzY0RlbGFsbDsKCnR5cGVkZWYgc3RydWN0IHsKICAgX2dkc1JlcUhlYWQgaGVhZDsKICAg
ZmludCBsZXZlbDsKICAgY2hhciBuYW1lWzIxXTsKfSBfZHNjTGVuZ3RoLCAqZHNjTGVuZ3RoLAog
IF9kc2NUeXBlLCAqZHNjVHlwZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgX2dkc1JlcUhlYWQgaGVh
ZDsKICAgZmludCBsZXZlbDsKICAgZmludCBpbmRleDsKfSBfZHNjRmluZCwgKmRzY0ZpbmQ7Cgp0
eXBlZGVmIHVuaW9uIHsKICAgX2dkc1JlcXVlc3QgZ2RzcmVxdWVzdDsKICAgX2dkc0Nvbm5lY3Qg
c3J2Y29ubmVjdDsKICAgX3NldENsb3NlIHNldGNsb3NlOwogICBfc2V0RnR5cGUgc2V0ZnR5cGU7
CiAgIF9zZXRJdHlwZSBzZXRpdHlwZTsKICAgX3NldFJlbmFtZSBzZXRyZW5hbWU7CiAgIF9zZXRM
b2NrIHNldGxvY2s7CiAgIF9zZXRVbmxvY2sgc2V0dW5sb2NrOwogICBfc2V0Q3JlYXRlIHNldGNy
ZWF0ZTsKICAgX3NldERlbGV0ZSBzZXRkZWxldGU7CiAgIF9zZXRFeGlzdCBzZXRleGlzdDsKICAg
X3NldE9wZW4gc2V0b3BlbjsKICAgX3NldFJoZWQgc2V0cmhlZDsKICAgX3NldFdoZWQgc2V0d2hl
ZDsKICAgX3NldE9wdGltaXplIHNldG9wdGltaXplOwogICBfc2V0U3luYyBzZXRzeW5jOwogICBf
c2V0UHJpbWUgc2V0cHJpbWU7CiAgIF9zZXROaXRlbXMgc2V0bml0ZW1zOwogICBfc2V0UmVjb3Zl
ciBzZXRyZWNvdmVyOwogICBfZHNjV3JpdGUgZHNjd3JpdGU7CiAgIF9kc2NSZWFkIGRzY3JlYWQ7
CiAgIF9kc2NEZWxhbGwgZHNjZGVsYWxsOwogICBfZHNjTGVuZ3RoIGRzY2xlbmd0aDsKICAgX2Rz
Y1Jld2luZCBkc2NyZXdpbmQ7CiAgIF9kc2NUeXBlIGRzY3R5cGU7CiAgIF9kc2NGaW5kIGRzY2Zp
bmQ7Cn0gX3VSZXF1ZXN0OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9nZHNSZXBseSB7CiAgIGZpbnQg
cmVzdWx0OwogICBmaW50IGxlbmd0aDsKfSBfZ2RzUmVwbHksICpnZHNSZXBseTsKCiMgNCAiZ2Rz
ZGVzY3IuaCIgMgojIDE1ICJnZHNkZXNjci5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgIGZpbnQga2V5
X2luZDsKICAgZmludCBsZW5ndGg7CiAgIGZpbnQgcmVhZHBvczsKICAgZmludCBsZXZlbDsKICAg
ZmludCBuZXh0X2tleTsKICAgZmludCBuZXh0X2V4dDsKICAgZmludCBsYXN0X2V4dDsKICAgZmlu
dCBjdXJyX2V4dDsKICAgY2hhciB0eXBlOwogICBjaGFyIG5hbWVbMjFdOwp9IF9rZXloZWFkLCAq
a2V5aGVhZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgZmludCBrZXlfaW5kOwogICBmaW50IG5leHRf
ZXh0Owp9IF9leHRoZWFkLCAqZXh0aGVhZDsKCiMgNDEgImdkc2Rlc2NyLmgiCnR5cGVkZWYgc3Ry
dWN0IHsKICAgX2tleWhlYWQgaDsKICAgY2hhciBhbGlnbm1lbnRbKChzaXplb2YoZmludCkpKygo
c2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUoc2l6
ZW9mKGZpbnQpKSldOwogICBjaGFyIGRhdGFbKDIwMC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXpl
b2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5
aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKV07Cn0gX2tleXJlYywgKmtleXJlYzsKCnR5cGVkZWYg
c3RydWN0IHsKICAgX2V4dGhlYWQgaDsKICAgY2hhciBhbGlnbm1lbnRbKChzaXplb2YoZmludCkp
Kygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9leHRoZWFkKSktKHNpemVvZihfZXh0aGVhZCkpKSUo
c2l6ZW9mKGZpbnQpKSldOwogICBjaGFyIGRhdGFbKDIwMC0oc2l6ZW9mKF9leHRoZWFkKSktKChz
aXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9leHRoZWFkKSktKHNpemVvZihf
ZXh0aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKV07Cn0gX2V4dHJlYywgKmV4dHJlYzsKCnR5cGVk
ZWYgdW5pb24gewogICBfa2V5cmVjIGtleTsKICAgX2V4dHJlYyBleHQ7Cn0gX3JlY29yZCwgKnJl
Y29yZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgZmludCB2ZXJzaW9uOwogICBmaW50IHN1YnZlcnNp
b247CgogICBmaW50IG9uZTsKICAgZmludCBvc2RlcDsKCiAgIGRvdWJsZSBheF9vcmlnaW5bMjBd
OwogICBmaW50IGF4X3NpemUgWzIwXTsKICAgZmludCBheF9mYWN0b3JbMjArMV07CiAgIGZpbnQg
bmF4aXM7CiAgIGZpbnQgbml0ZW1zOwogICBmaW50IHJlc2VydmVkMjsKICAgZmludCByZXNlcnZl
ZDM7CiAgIGZpbnQgcmVjX3N0YXJ0OwogICBmaW50IG5fYWxsb2M7CiAgIGZpbnQgbWF4cmVjOwog
ICBmaW50IG5fYnVjazsKICAgZmludCBzcGFyZV9maW50WzhdOwogICBmaW50IGZyZWU7CiAgIGZp
bnQgaGFzaF90YWJbMV07Cn0gX2hlYWRlciwgKmhlYWRlcjsKCnR5cGVkZWYgdW5pb257CiAgIF9o
ZWFkZXIgaDsKICAgX3JlY29yZCByWzFdOwp9IF9kc2NmaWxlLCAqZHNjZmlsZTsKIyAxOCAiZGVz
Y3IuYyIgMgoKCiMgNSAiZmlsZS5oIiAxCmV4dGVybiBpbnQgT3BlbkZpbGUoY2hhciAqbmFtZSwg
Y2hhciAqZXh0LCBpbnQgKnJlYWRvbmx5KTsKZXh0ZXJuIGludCBDcmVhdGVGaWxlKGNoYXIgKnNl
dG5hbWUsIGNoYXIqIGV4dCwgaW50IHNpemUpOwpleHRlcm4gaW50IENsb3NlRmlsZShpbnQgKmZk
KTsKZXh0ZXJuIGludCBGaWxlU2l6ZShpbnQgZmQpOwpleHRlcm4gaW50IEV4dGVuZEZpbGUoaW50
IGZkLCBpbnQgaW5jcmVtZW50KTsKZXh0ZXJuIGludCBSZWFkRmlsZShpbnQgZmQsIHZvaWQgKmNv
bnRlbnRzKTsKZXh0ZXJuIGludCBXcml0ZUZpbGUoaW50IGZkLCB2b2lkICpjb250ZW50cyk7CmV4
dGVybiBpbnQgVXBkYXRlRmlsZShpbnQgZmQsIGludCBtb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqY29udGVudHMsIHZvaWQgKmJpdG1hcCwgaW50IGJsb2Nrc2l6ZSk7CiMgMjAgImRl
c2NyLmMiIDIKCiMgNSAiY2xpZW50bWdyLmgiIDEKdHlwZWRlZiBlbnVtIHtMT0NBTCxSRU1PVEV9
IGNvbnR5cGU7CmV4dGVybiB2b2lkIE5ld0NsaWVudChpbnQgZmQsIGNvbnR5cGUgY29ubik7CmV4
dGVybiB2b2lkIERlbGV0ZUNsaWVudChvYmplY3QgY2xpZW50KTsKZXh0ZXJuIGludCBQdXRCdWZm
ZXIob2JqZWN0IGNsaWVudCwgdm9pZCAqZGF0YSwgaW50IG5ieXRlcyk7CmV4dGVybiBpbnQgUHV0
RmludChvYmplY3QgY3VycmlkLCBmaW50IHNyY3R5cGUsIGZpbnQgKmRhdGEsIGludCBuZWxlbXMp
OwpleHRlcm4gaW50IFB1dEZsb2F0KG9iamVjdCBjdXJyaWQsIGZpbnQgc3JjdHlwZSwgZmxvYXQg
KmRhdGEsIGludCBuZWxlbXMpOwpleHRlcm4gaW50IFB1dERvdWJsZShvYmplY3QgY3VycmlkLCBm
aW50IHNyY3R5cGUsIGRvdWJsZSAqZGF0YSwgaW50IG5lbGVtcyk7CmV4dGVybiBpbnQgR2V0QnVm
ZmVyKG9iamVjdCBjdXJyaWQsIHZvaWQgKmRhdGEsIGludCBuYnl0ZXMpOwpleHRlcm4gaW50IEdl
dEZpbnQob2JqZWN0IGN1cnJpZCwgZmludCBkc3R0eXBlLCBmaW50ICpkYXRhLCBpbnQgbmVsZW1z
KTsKZXh0ZXJuIGludCBHZXRGbG9hdChvYmplY3QgY3VycmlkLCBmaW50IGRzdHR5cGUsIGZsb2F0
ICpkYXRhLCBpbnQgbmVsZW1zKTsKZXh0ZXJuIGludCBHZXREb3VibGUob2JqZWN0IGN1cnJpZCwg
ZmludCBkc3R0eXBlLCBkb3VibGUgKmRhdGEsIGludCBuZWxlbXMpOwpleHRlcm4gaW50IENsaWVu
dEJ1ZmZlcihvYmplY3QgY2xpZW50LCBpbnQgc2l6ZSk7CmV4dGVybiBpbnQgQ2xpZW50UGVybShv
YmplY3QgY2xpZW50LCBpbnQgcGVybSk7CmV4dGVybiBmaW50IENsaWVudEZpbnQob2JqZWN0IGN1
cnJpZCwgZmludCBjZik7CmV4dGVybiBnZHNSZXF1ZXN0IENsaWVudFJlcXVlc3Qob2JqZWN0IGNs
aWVudCk7CmV4dGVybiB2b2lkIFJlYWREYXRhKG9iamVjdCBjbGllbnQpOwpleHRlcm4gdm9pZCBX
cml0ZURhdGEob2JqZWN0IGNsaWVudCk7CmV4dGVybiBpbnQgV3JpdGVSZXBseShvYmplY3QgY2xp
ZW50LCBpbnQgY29kZSwgaW50IGxlbmd0aCk7CmV4dGVybiB2b2lkIFNjaGVkdWxlSW9kb25lKG9i
amVjdCBjbGllbnQsIHZvaWQoKnByb2MpKCkpOwpleHRlcm4gdm9pZCBBZGRTZXQob2JqZWN0IGNs
aWVudCwgb2JqZWN0IHNldCk7CmV4dGVybiB2b2lkIFJlbW92ZVNldChvYmplY3QgY2xpZW50LCBv
YmplY3Qgc2V0KTsKZXh0ZXJuIHZvaWQgSW5pdENsaWVudCh2b2lkKTsKIyAyMSAiZGVzY3IuYyIg
MgoKIyAzICJwcmltZXMuaCIgMQpleHRlcm4gaW50IE5leHRQcmltZShpbnQgeCk7CiMgMjIgImRl
c2NyLmMiIDIKCiMgNyAiZGVzY3IuaCIgMQpleHRlcm4gb2JqZWN0IE5ld0Rlc2NyKGNoYXIgKm5h
bWUsIGludCBpbml0c2l6ZSwgaW50IGV4dGVuZHNpemUsIGludCBwcmltZSk7CmV4dGVybiB2b2lk
IERlbGV0ZURlc2NyKG9iamVjdCk7CmV4dGVybiB2b2lkIFVwZGF0ZURlc2NyKG9iamVjdCwgaW50
KTsKZXh0ZXJuIHZvaWQgTG9ja0Rlc2NyKG9iamVjdCBkc2NvYmosIGludCBsb2NrKTsKZXh0ZXJu
IGludCBEZXNjclJlYWRvbmx5KG9iamVjdCk7CmV4dGVybiBmaW50IERlc2NyRnR5cGUob2JqZWN0
IGRzY29iaik7CmV4dGVybiBmaW50IERlc2NySXR5cGUob2JqZWN0IGRzY29iaik7CmV4dGVybiBm
aW50IERlc2NyUHJpbWUob2JqZWN0IGRzY29iaik7CmV4dGVybiBmaW50IERlc2NyTml0ZW1zKG9i
amVjdCBkc2NvYmopOwpleHRlcm4gaW50IERlc2NyUmhlYWQob2JqZWN0IGNsaWVudCwgb2JqZWN0
IGRzY29iaik7CmV4dGVybiBpbnQgRGVzY3JXaGVhZChvYmplY3QgY2xpZW50LCBvYmplY3QgZHNj
b2JqKTsKZXh0ZXJuIGludCBEZXNjclJlYWQob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7
CmV4dGVybiBpbnQgRGVzY3JEZWxldGUob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7CmV4
dGVybiBpbnQgRGVzY3JMZW5ndGgob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7CmV4dGVy
biBpbnQgRGVzY3JSZXdpbmQob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7CmV4dGVybiBp
bnQgRGVzY3JXcml0ZShvYmplY3QgY2xpZW50LCBvYmplY3QgZHNjb2JqKTsKZXh0ZXJuIGludCBE
ZXNjcldyaXRleChvYmplY3QgY2xpZW50LCBvYmplY3QgZHNjb2JqKTsKZXh0ZXJuIGludCBEZXNj
ckZpbmQob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7CmV4dGVybiBpbnQgRGVzY3JEZWxh
bGwob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaik7CmV4dGVybiBpbnQgRGVzY3JPcHRpbWl6
ZShvYmplY3QgZHNjb2JqKTsKZXh0ZXJuIGZpbnQgUmVjb3ZlckRlc2NyKGNoYXIgKm5hbWUpOwoj
IDIzICJkZXNjci5jIiAyCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICBpbnQgcmVjbm87CiAgIGZp
bnQgbGV2ZWw7CiAgIGNoYXIgbmFtZVsyMV07Cn0gX2tleWxldiwgKmtleWxldjsKCnR5cGVkZWYg
c3RydWN0IHsKICAgaWRlbnQgY2hhbmdlZDsKICAgaW50ICpiaXRtYXA7CiAgIGludCBmZDsKICAg
aW50IGxvY2s7CiAgIGRzY2ZpbGUgZmlsZTsKICAgaW50IHNpemU7CiAgIGludCBleHRlbmRzaXpl
OwogICBpbnQgcmVhZG9ubHk7CiAgIGZpbnQgaXR5cGU7CiAgIGZpbnQgZnR5cGU7CiAgIGtleWxl
diBrZXl0YWI7CiAgIGludCBua2V5czsKICAgaW50IHNhZmU7Cn0gX2Rlc2NyLCAqZGVzY3I7CgoK
CiMgODggImRlc2NyLmMiCmV4dGVybiBzcnZzdGF0IHNlcnZlcjsKCnN0YXRpYyBpbnQgQ2hlY2tE
ZXNjcihkZXNjcik7CnN0YXRpYyB2b2lkIEluaXREZXNjciAoZGVzY3IsIGZpbnQpOwpzdGF0aWMg
dm9pZCB1cGRhdGVyKGlkZW50LCBkZXNjcik7CgpzdGF0aWMgaW50IEFsbG9jYXRlKGRlc2NyIHNl
dCk7CnN0YXRpYyB2b2lkIERlYWxsb2NhdGUoZGVzY3IsaW50LGludCxpbnQpOwpzdGF0aWMgdm9p
ZCBJbnNlcnRLZXlSZWMoZGVzY3Igc2V0LCBpbnQgYnVjaywgaW50IHJlY25vLCBpbnQgcHJldik7
CnN0YXRpYyB2b2lkIEluc2VydEV4dFJlYyhkZXNjciBzZXQsIGludCByZWNubywgaW50IHByZXYp
OwpzdGF0aWMgaW50IEhhc2goY2hhciAqbmFtZSwgZmludCBjb29yZCwgaW50IHByaW1lKTsKc3Rh
dGljIHZvaWQgRmluZEl0ZW0oZHNjZmlsZSBmaWxlLCBjaGFyICpuYW1lLCBmaW50IGxldmVsLCBp
bnQgKmJ1Y2tubywKICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJyZW50LCBpbnQgKnByZXZp
b3VzKTsKc3RhdGljIGZpbnQgSGlnaGVyKGRzY2ZpbGUgc2V0LCBmaW50IGxldmVsLCBmaW50ICpj
dHJsKTsKc3RhdGljIGludCBMZXZDbXAoZHNjZmlsZSBzZXQsIGZpbnQgbGV2MSwgZmludCBsZXYy
KTsKc3RhdGljIGludCBFeHRlbmREZXNjcihkZXNjciBjdXJyZW50KTsKIyAxMTMgImRlc2NyLmMi
CmV4dGVybiBvYmplY3QgTmV3RGVzY3IoY2hhciAqbmFtZSwgaW50IGluaXRzaXplLCBpbnQgZXh0
ZW5kc2l6ZSwgaW50IHByaW1lKQp7CiAgIGRlc2NyIHJlc3VsdD0oKF9kZXNjciAqKUNhbGxvYygx
LHNpemVvZihfZGVzY3IpKSk7CgogICByZXN1bHQtPmV4dGVuZHNpemUgPSBleHRlbmRzaXplP2V4
dGVuZHNpemU6c2VydmVyLT5leHRlbmRzaXplOwogICBpZiAoIWluaXRzaXplKSB7CiAgICAgIHJl
c3VsdC0+ZmQgPSBPcGVuRmlsZShuYW1lLCIuZGVzY3IiLCZyZXN1bHQtPnJlYWRvbmx5KTsKICAg
ICAgaWYgKCFyZXN1bHQtPmZkKSB7CiAgICAgICAgIHNlcnZlci0+ZXJyb3IgPSAtNTsKICAgICAg
ICAgRGVsZXRlRGVzY3IocmVzdWx0KTsKICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAg
ICB9CiAgICAgIHJlc3VsdC0+c2l6ZSA9IEZpbGVTaXplKHJlc3VsdC0+ZmQpOwogICAgICBpZiAo
cmVzdWx0LT5zaXplIDwgc2l6ZW9mKF9oZWFkZXIpKSB7CiAgICAgICAgIHNlcnZlci0+ZXJyb3Ig
PSAtNjA7CiAgICAgICAgIERlbGV0ZURlc2NyKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiAoKHZv
aWQgKikwKTsKICAgICAgfQogICAgICByZXN1bHQtPmZpbGUgPSAoZHNjZmlsZSltYWxsb2MocmVz
dWx0LT5zaXplKTsKICAgICAgaWYgKCFyZXN1bHQtPmZpbGUpIHsKICAgICAgICAgc2VydmVyLT5l
cnJvciA9IC01ODsKICAgICAgICAgRGVsZXRlRGVzY3IocmVzdWx0KTsKICAgICAgICAgcmV0dXJu
ICgodm9pZCAqKTApOwogICAgICB9CiAgICAgIGlmIChSZWFkRmlsZShyZXN1bHQtPmZkLCByZXN1
bHQtPmZpbGUpKSB7CiAgICAgICAgIHNlcnZlci0+ZXJyb3IgPSAtNTsKICAgICAgICAgRGVsZXRl
RGVzY3IocmVzdWx0KTsKICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICB9CiAgICAg
IGlmICghcmVzdWx0LT5yZWFkb25seSkgewogICAgICAgICByZXN1bHQtPmJpdG1hcCA9CiAgICAg
ICAgICAoaW50KiljYWxsb2MoKCgocmVzdWx0LT5zaXplKS0xKS8oc2l6ZW9mKGludCkqMjAwKjgp
KzEpLHNpemVvZihpbnQpKTsKICAgICAgICAgaWYgKCFyZXN1bHQtPmJpdG1hcCkgewogICAgICAg
ICAgICBzZXJ2ZXItPmVycm9yID0gLTU4OwogICAgICAgICAgICBEZWxldGVEZXNjcihyZXN1bHQp
OwogICAgICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgIH0KICAgICAgfSBlbHNl
IHsKICAgICAgICAgQ2xvc2VGaWxlKCZyZXN1bHQtPmZkKTsKICAgICAgfQogICAgICBpZiAoc2Vy
dmVyLT5lcnJvciA9IENoZWNrRGVzY3IocmVzdWx0KSkgewogICAgICAgICBEZWxldGVEZXNjcihy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgIH0KICAgICAgaWYgKCFy
ZXN1bHQtPnJlYWRvbmx5KSB7CiAgICAgICAgIGhlYWRlciBoZWFkID0oaGVhZGVyKXJlc3VsdC0+
ZmlsZTsKICAgICAgICAgZmludCBvbmUgPWhlYWQtPm9uZTsKICAgICAgICAgZmludCBuaXRlbXMg
PShvbmU9PTEgPyBoZWFkLT5uaXRlbXMgOiBzd2FwZmludChoZWFkLT5uaXRlbXMpKTsKICAgICAg
ICAgZmludCBuX2J1Y2sgPShvbmU9PTEgPyBoZWFkLT5uX2J1Y2sgOiBzd2FwZmludChoZWFkLT5u
X2J1Y2spKTsKICAgICAgICAgZmludCBuX2FsbG9jPShvbmU9PTEgPyBoZWFkLT5uX2FsbG9jIDog
c3dhcGZpbnQoaGVhZC0+bl9hbGxvYykpOwogICAgICAgICBmaW50IG1heHJlYyA9KG9uZT09MSA/
IGhlYWQtPm1heHJlYyA6IHN3YXBmaW50KGhlYWQtPm1heHJlYykpOwoKICAgICAgICAgaWYgKG5p
dGVtcz4oMipuX2J1Y2spIHx8IChtYXhyZWMtbl9hbGxvYykqMjAwPnJlc3VsdC0+ZXh0ZW5kc2l6
ZSkKICAgICAgICAgICAgKHZvaWQpRGVzY3JPcHRpbWl6ZShyZXN1bHQpOwogICAgICB9CiAgIH0g
ZWxzZSB7CiAgICAgIHByaW1lID0gTmV4dFByaW1lKHByaW1lP3ByaW1lOnNlcnZlci0+cHJpbWUp
OwogICAgICBpbml0c2l6ZSA9ICgoKHByaW1lKnNpemVvZihmaW50KStzaXplb2YoX2hlYWRlcikr
MTAqMjAwKSk+KGluaXRzaXplKT8oKHByaW1lKnNpemVvZihmaW50KStzaXplb2YoX2hlYWRlcikr
MTAqMjAwKSk6KGluaXRzaXplKSk7CiAgICAgIHJlc3VsdC0+c2l6ZSA9IGluaXRzaXplOwogICAg
ICByZXN1bHQtPmZpbGUgPSAoZHNjZmlsZSltYWxsb2MocmVzdWx0LT5zaXplKTsKICAgICAgaWYg
KCFyZXN1bHQtPmZpbGUpIHsKICAgICAgICAgc2VydmVyLT5lcnJvciA9IC01ODsKICAgICAgICAg
RGVsZXRlRGVzY3IocmVzdWx0KTsKICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICB9
CiAgICAgIHJlc3VsdC0+Yml0bWFwID0KICAgICAgIChpbnQqKWNhbGxvYygoKChyZXN1bHQtPnNp
emUpLTEpLyhzaXplb2YoaW50KSoyMDAqOCkrMSksc2l6ZW9mKGludCkpOwogICAgICBpZiAoIXJl
c3VsdC0+Yml0bWFwKSB7CiAgICAgICAgIHNlcnZlci0+ZXJyb3IgPSAtNTg7CiAgICAgICAgIERl
bGV0ZURlc2NyKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgICAgfQog
ICAgICBJbml0RGVzY3IocmVzdWx0LHByaW1lKTsKICAgICAgcmVzdWx0LT5mZCA9IENyZWF0ZUZp
bGUobmFtZSwiLmRlc2NyIixyZXN1bHQtPnNpemUpOwogICAgICBpZiAoIXJlc3VsdC0+ZmQpIHsK
ICAgICAgICAgc2VydmVyLT5lcnJvciA9IC04OwogICAgICAgICBEZWxldGVEZXNjcihyZXN1bHQp
OwogICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgIH0KICAgICAgVXBkYXRlRGVzY3Io
cmVzdWx0LCAxKTsKICAgfQogICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpleHRlcm4gdm9pZCBE
ZWxldGVEZXNjcihvYmplY3QgZHNjb2JqKQp7CiAgIGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRzY29i
ajsKCiAgIERlc2NoZWR1bGUoJmN1cnJlbnQtPmNoYW5nZWQpOwogICBpZiAoY3VycmVudC0+Yml0
bWFwKSB7RnJlZShjdXJyZW50LT5iaXRtYXApOyBjdXJyZW50LT5iaXRtYXA9KCh2b2lkICopMCk7
fTsKICAgaWYgKGN1cnJlbnQtPmZkKSBDbG9zZUZpbGUoJmN1cnJlbnQtPmZkKTsKICAgaWYgKGN1
cnJlbnQtPmZpbGUpIHtGcmVlKGN1cnJlbnQtPmZpbGUpOyBjdXJyZW50LT5maWxlPSgodm9pZCAq
KTApO307CiAgIGlmIChjdXJyZW50LT5rZXl0YWIpIHtGcmVlKGN1cnJlbnQtPmtleXRhYik7IGN1
cnJlbnQtPmtleXRhYj0oKHZvaWQgKikwKTt9OwogICB7RnJlZShjdXJyZW50KTsgY3VycmVudD0o
KHZvaWQgKikwKTt9Owp9CiMgMjIzICJkZXNjci5jIgpleHRlcm4gdm9pZCBMb2NrRGVzY3Iob2Jq
ZWN0IGRzY29iaiwgaW50IGxvY2spCnsKICAgZGVzY3IgY3VycmVudD0oZGVzY3IpZHNjb2JqOwoK
ICAgY3VycmVudC0+bG9jayA9IGxvY2s7Cn0KCgoKCgoKZXh0ZXJuIGZpbnQgRGVzY3JGdHlwZShv
YmplY3QgZHNjb2JqKQp7CiAgIHJldHVybiAoKGRlc2NyKWRzY29iaiktPmZ0eXBlOwp9CgoKCgoK
CmV4dGVybiBmaW50IERlc2NySXR5cGUob2JqZWN0IGRzY29iaikKewogICByZXR1cm4gKChkZXNj
cilkc2NvYmopLT5pdHlwZTsKfQoKCgoKCgpleHRlcm4gZmludCBEZXNjclByaW1lKG9iamVjdCBk
c2NvYmopCnsKICAgaGVhZGVyIGhlYWQ9KGhlYWRlcikoKGRlc2NyKWRzY29iaiktPmZpbGU7CiAg
IGZpbnQgb25lPWhlYWQtPm9uZTsKICAgcmV0dXJuIChvbmU9PTEgPyBoZWFkLT5uX2J1Y2sgOiBz
d2FwZmludChoZWFkLT5uX2J1Y2spKTsKfQoKCgoKCgpleHRlcm4gZmludCBEZXNjck5pdGVtcyhv
YmplY3QgZHNjb2JqKQp7CiAgIGhlYWRlciBoZWFkPShoZWFkZXIpKChkZXNjcilkc2NvYmopLT5m
aWxlOwogICBmaW50IG9uZT1oZWFkLT5vbmU7CiAgIHJldHVybiAob25lPT0xID8gaGVhZC0+bml0
ZW1zIDogc3dhcGZpbnQoaGVhZC0+bml0ZW1zKSk7Cn0KCgoKCgoKZXh0ZXJuIGludCBEZXNjclJl
YWRvbmx5KG9iamVjdCBkc2NvYmopCnsKICAgcmV0dXJuICgoZGVzY3IpZHNjb2JqKS0+cmVhZG9u
bHk7Cn0KCgoKCgoKZXh0ZXJuIHZvaWQgVXBkYXRlRGVzY3Iob2JqZWN0IGRzY29iaiwgaW50IG1v
ZGUpCnsKICAgZGVzY3IgY3VycmVudD0oZGVzY3IpZHNjb2JqOwoKICAgaWYgKCFjdXJyZW50LT5y
ZWFkb25seSAmJiBjdXJyZW50LT5jaGFuZ2VkKSB7CiAgICAgICh2b2lkKVVwZGF0ZUZpbGUoY3Vy
cmVudC0+ZmQsIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+ZmlsZSwgY3Vy
cmVudC0+Yml0bWFwLCAyMDApOwogICAgICBEZXNjaGVkdWxlKCZjdXJyZW50LT5jaGFuZ2VkKTsK
ICAgfQp9CgoKCgoKCgpleHRlcm4gaW50IERlc2NyUmhlYWQob2JqZWN0IGNsaWVudCwgb2JqZWN0
IGRzY29iaikKewogICBkZXNjciBjdXJyZW50PShkZXNjcilkc2NvYmo7CiAgIGhlYWRlciBoZWFk
PShoZWFkZXIpY3VycmVudC0+ZmlsZTsKCiAgIFB1dERvdWJsZShjbGllbnQsIGN1cnJlbnQtPmZ0
eXBlLCBoZWFkLT5heF9vcmlnaW4sIDIwKTsKICAgUHV0RmludChjbGllbnQsIGN1cnJlbnQtPml0
eXBlLCBoZWFkLT5heF9zaXplLCAyMCk7CiAgIFB1dEZpbnQoY2xpZW50LCBjdXJyZW50LT5pdHlw
ZSwgaGVhZC0+YXhfZmFjdG9yLCAyMCsxKTsKICAgUHV0RmludChjbGllbnQsIGN1cnJlbnQtPml0
eXBlLCAmaGVhZC0+bmF4aXMsIDEpOwogICByZXR1cm4gMDsKfQoKCgoKCgoKZXh0ZXJuIGludCBE
ZXNjcldoZWFkKG9iamVjdCBjbGllbnQsIG9iamVjdCBkc2NvYmopCnsKICAgZGVzY3IgY3VycmVu
dD0oZGVzY3IpZHNjb2JqOwogICBoZWFkZXIgaGVhZD0oaGVhZGVyKWN1cnJlbnQtPmZpbGU7Cgog
ICBHZXREb3VibGUoY2xpZW50LCBjdXJyZW50LT5mdHlwZSwgaGVhZC0+YXhfb3JpZ2luLCAyMCk7
CiAgIEdldEZpbnQoY2xpZW50LCBjdXJyZW50LT5pdHlwZSwgaGVhZC0+YXhfc2l6ZSwgMjApOwog
ICBHZXRGaW50KGNsaWVudCwgY3VycmVudC0+aXR5cGUsIGhlYWQtPmF4X2ZhY3RvciwgMjArMSk7
CiAgIEdldEZpbnQoY2xpZW50LCBjdXJyZW50LT5pdHlwZSwgJmhlYWQtPm5heGlzLCAxKTsKCiAg
IGlmICghKGN1cnJlbnQpLT5jaGFuZ2VkICYmICEoY3VycmVudCktPnJlYWRvbmx5KSAoY3VycmVu
dCktPmNoYW5nZWQgPSBTY2hlZHVsZVRpbWVyKHVwZGF0ZXIsKDUgKjYwICoxMDAwICoxKSxjdXJy
ZW50KTsKICAgcmV0dXJuIDA7Cn0KCgoKCgoKZXh0ZXJuIGludCBEZXNjckRlbGV0ZShvYmplY3Qg
Y2xpZW50LCBvYmplY3QgZHNjb2JqKQp7CiAgIGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRzY29iajsK
ICAgZHNjRGVsZXRlIHJlcXVlc3Q9KGRzY0RlbGV0ZSlDbGllbnRSZXF1ZXN0KGNsaWVudCk7CiAg
IGZpbnQgbGV2ZWw9cmVxdWVzdC0+bGV2ZWw7CiAgIGludCBidWNrLCBjdXJyLCBwcmV2OwoKICAg
RmluZEl0ZW0oY3VycmVudC0+ZmlsZSwgcmVxdWVzdC0+bmFtZSwgbGV2ZWwsICZidWNrLCAmY3Vy
ciwgJnByZXYpOwogICBpZiAoY3Vycj4wKSB7CiAgICAgIERlYWxsb2NhdGUoY3VycmVudCwgYnVj
aywgY3VyciwgcHJldik7CiAgICAgIGlmICghKGN1cnJlbnQpLT5jaGFuZ2VkICYmICEoY3VycmVu
dCktPnJlYWRvbmx5KSAoY3VycmVudCktPmNoYW5nZWQgPSBTY2hlZHVsZVRpbWVyKHVwZGF0ZXIs
KDUgKjYwICoxMDAwICoxKSxjdXJyZW50KTsKICAgICAgcmV0dXJuIDA7CiAgIH0gZWxzZSByZXR1
cm4gLTM7Cn0KCgoKCgoKZXh0ZXJuIGludCBEZXNjckxlbmd0aChvYmplY3QgY2xpZW50LCBvYmpl
Y3QgZHNjb2JqKQp7CiAgIGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRzY29iajsKICAgcmVjb3JkIHJl
Yz0ocmVjb3JkKWN1cnJlbnQtPmZpbGU7CiAgIGRzY0xlbmd0aCByZXF1ZXN0PShkc2NMZW5ndGgp
Q2xpZW50UmVxdWVzdChjbGllbnQpOwogICBmaW50IGxldmVsPXJlcXVlc3QtPmxldmVsOwogICBp
bnQgYnVjaywgY3VyciwgcHJldjsKCiAgIEZpbmRJdGVtKGN1cnJlbnQtPmZpbGUsIHJlcXVlc3Qt
Pm5hbWUsIGxldmVsLCAmYnVjaywgJmN1cnIsICZwcmV2KTsKICAgaWYgKGN1cnI+MCkgewogICAg
ICBQdXRGaW50KGNsaWVudCwgY3VycmVudC0+aXR5cGUsICZyZWNbY3Vycl0ua2V5LmgubGVuZ3Ro
LDEpOwogICAgICByZXR1cm4gMDsKICAgfSBlbHNlIHJldHVybiAtNjsKfQoKCgoKCgoKZXh0ZXJu
IGludCBEZXNjclJld2luZChvYmplY3QgY2xpZW50LCBvYmplY3QgZHNjb2JqKQp7CiAgIGRlc2Ny
IGN1cnJlbnQ9KGRlc2NyKWRzY29iajsKICAgaGVhZGVyIGhlYWQ9KGhlYWRlciljdXJyZW50LT5m
aWxlOwogICBmaW50IG9uZT1oZWFkLT5vbmU7CiAgIHJlY29yZCByZWM9KHJlY29yZCljdXJyZW50
LT5maWxlOwogICBkc2NSZXdpbmQgcmVxdWVzdD0oZHNjUmV3aW5kKUNsaWVudFJlcXVlc3QoY2xp
ZW50KTsKICAgZmludCBsZXZlbD1yZXF1ZXN0LT5sZXZlbDsKICAgaW50IGJ1Y2ssIGN1cnIsIHBy
ZXY7CgogICBGaW5kSXRlbShjdXJyZW50LT5maWxlLCByZXF1ZXN0LT5uYW1lLCBsZXZlbCwgJmJ1
Y2ssICZjdXJyLCAmcHJldik7CiAgIGlmIChjdXJyPjApIHsKICAgICAgKCgoa2V5aGVhZCkmKHJl
Y1tjdXJyXSkpKS0+cmVhZHBvcyA9IChvbmU9PTEgPyAwIDogc3dhcGZpbnQoMCkpOwogICAgICAo
KChrZXloZWFkKSYocmVjW2N1cnJdKSkpLT5jdXJyX2V4dCA9IChvbmU9PTEgPyBjdXJyIDogc3dh
cGZpbnQoY3VycikpOwogICAgICByZXR1cm4gMDsKICAgfSBlbHNlIHJldHVybiAtNzsKfQoKCgoK
CgpleHRlcm4gaW50IERlc2NyUmVhZChvYmplY3QgY2xpZW50LCBvYmplY3QgZHNjb2JqKQp7CiAg
IGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRzY29iajsKICAgaGVhZGVyIGhlYWQ9KGhlYWRlciljdXJy
ZW50LT5maWxlOwogICBmaW50IG9uZT1oZWFkLT5vbmU7CiAgIHJlY29yZCByZWM9KHJlY29yZClo
ZWFkOwogICBkc2NSZWFkIHJlcXVlc3Q9KGRzY1JlYWQpQ2xpZW50UmVxdWVzdChjbGllbnQpOwog
ICBpbnQgYnVjaywgY3VyciwgcHJldjsKICAgZmludCBybGV2ZWw9cmVxdWVzdC0+bGV2ZWw7CiAg
IGZpbnQgbGV2ZWw9cmxldmVsLCBjdHJsPS0xLCBwb3MsIGxlbmd0aCwgbmVsZW1zOwogICBmaW50
IGFrcmVjLCBya3JlYywgcnRyZWMsIGFyZWMsIHJyZWMsIGZpcnN0LCBwcnJlYywgbmV3cG9zOwog
ICBpbnQgbnRyYW5zLCByZXN1bHQ7CgogICBpZiAocmVxdWVzdC0+YWJzbGV2KSB7CiAgICAgIEZp
bmRJdGVtKGN1cnJlbnQtPmZpbGUsIHJlcXVlc3QtPm5hbWUsIGxldmVsLCAmYnVjaywgJmN1cnIs
ICZwcmV2KTsKICAgfSBlbHNlIHsKICAgICAgbGV2ZWwgPSBybGV2ZWw7CiAgICAgIHdoaWxlICgx
KSB7CiAgICAgICAgIEZpbmRJdGVtKGN1cnJlbnQtPmZpbGUsIHJlcXVlc3QtPm5hbWUsIGxldmVs
LCAmYnVjaywgJmN1cnIsICZwcmV2KTsKICAgICAgICAgaWYgKChsZXZlbD09MCl8fChjdXJyIT0w
KSkgYnJlYWs7CiAgICAgICAgIGxldmVsID0gSGlnaGVyKGN1cnJlbnQtPmZpbGUsIHJsZXZlbCwg
JmN0cmwpOwogICAgICB9CiAgIH0KICAgaWYgKCFjdXJyKSByZXR1cm4gLTM7CiAgIHBvcyA9IHJl
cXVlc3QtPnBvc2l0aW9uID8gcmVxdWVzdC0+cG9zaXRpb24gOiAob25lPT0xID8gKChrZXloZWFk
KSYocmVjW2N1cnJdKSktPnJlYWRwb3MgOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNbY3Vycl0p
KS0+cmVhZHBvcykpKzE7CiAgIGxlbmd0aCA9IChvbmU9PTEgPyAoKGtleWhlYWQpJihyZWNbY3Vy
cl0pKS0+bGVuZ3RoIDogc3dhcGZpbnQoKChrZXloZWFkKSYocmVjW2N1cnJdKSktPmxlbmd0aCkp
OwogICBpZiAocG9zPmxlbmd0aCkgcmV0dXJuIC00OwogICBuZWxlbXMgPSByZXF1ZXN0LT5uZWxl
bXM+MCA/IHJlcXVlc3QtPm5lbGVtcyA6IGxlbmd0aC1wb3MrMTsKICAgaWYgKHBvcytuZWxlbXMt
MSA+IGxlbmd0aCApIG5lbGVtcyA9IGxlbmd0aC1wb3MrMTsKICAgcmVzdWx0ID0gQ2xpZW50QnVm
ZmVyKGNsaWVudCwgbmVsZW1zKTsKICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKICAgbmV3
cG9zID0gcG9zK25lbGVtcy0xOwogICBQdXRGaW50KGNsaWVudCwgMSwgJmxldmVsLCAxKTsKCiAg
IGFrcmVjID0gKG9uZT09MSA/ICgoa2V5aGVhZCkmKHJlY1tjdXJyXSkpLT5jdXJyX2V4dCA6IHN3
YXBmaW50KCgoa2V5aGVhZCkmKHJlY1tjdXJyXSkpLT5jdXJyX2V4dCkpOwogICBya3JlYyA9ICgo
KChvbmU9PTEgPyAoKGtleWhlYWQpJihyZWNbY3Vycl0pKS0+cmVhZHBvcyA6IHN3YXBmaW50KCgo
a2V5aGVhZCkmKHJlY1tjdXJyXSkpLT5yZWFkcG9zKSkpKygoMjAwLShzaXplb2YoX2V4dGhlYWQp
KS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2YoX2V4dGhlYWQpKS0oc2l6
ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkpKSApKS0oKDIwMC0oc2l6ZW9mKF9rZXloZWFk
KSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNp
emVvZihfa2V5aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKSktMSkvKCgyMDAtKHNpemVvZihfZXh0
aGVhZCkpLSgoc2l6ZW9mKGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkp
LShzaXplb2YoX2V4dGhlYWQpKSklKHNpemVvZihmaW50KSkpICkpKTsKICAgcnRyZWMgPSAoKChw
b3MpKygoMjAwLShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmlu
dCkpKihzaXplb2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkp
KSApKS0oKDIwMC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZp
bnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUoc2l6ZW9mKGZpbnQp
KSkgKSktMSkvKCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgoc2l6ZW9mKGZpbnQpKSsoKHNpemVv
ZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShzaXplb2YoX2V4dGhlYWQpKSklKHNpemVvZihm
aW50KSkpICkpKTsKICAgaWYgKHJ0cmVjID49IHJrcmVjKSB7CiAgICAgIHJyZWMgPSBya3JlYzsK
ICAgICAgYXJlYyA9IGFrcmVjOwogICB9IGVsc2UgewogICAgICBycmVjID0gMDsKICAgICAgYXJl
YyA9IGN1cnI7CiAgIH0KICAgZm9yICg7IHJyZWM8cnRyZWM7IHJyZWMrKykgYXJlYyA9IChvbmU9
PTEgPyAoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1th
cmVjXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6IHN3
YXBmaW50KCgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5rZXlfaW5kID8gKChrZXloZWFkKSYocmVj
W2FyZWNdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYocmVjW2FyZWNdKSktPm5leHRfZXh0KSk7
CiAgIGlmIChycmVjPT0wKSBmaXJzdCA9IHBvcy0xOyBlbHNlIGZpcnN0ID0gKHBvcy0oMjAwLShz
aXplb2YoX2tleWhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2Yo
X2tleWhlYWQpKS0oc2l6ZW9mKF9rZXloZWFkKSkpJShzaXplb2YoZmludCkpKSApLTEpJSgoMjAw
LShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXpl
b2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkpKSApKTsKICAg
aWYgKHJyZWM9PTApIHsKICAgICAgbnRyYW5zID0gKChuZWxlbXMpPCgoMjAwLShzaXplb2YoX2tl
eWhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2YoX2tleWhlYWQp
KS0oc2l6ZW9mKF9rZXloZWFkKSkpJShzaXplb2YoZmludCkpKSApLWZpcnN0KT8obmVsZW1zKToo
KDIwMC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSoo
c2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKS1m
aXJzdCkpOwogICAgICBQdXRCdWZmZXIoY2xpZW50LHJlY1thcmVjXS5rZXkuZGF0YStmaXJzdCxu
dHJhbnMpOwogICAgICBuZWxlbXMgLT0gbnRyYW5zOwogICAgICBwcnJlYyA9IGFyZWM7CiAgICAg
IGFyZWMgPSAob25lPT0xID8gKChleHRoZWFkKSYocmVjW2FyZWNdKSktPmtleV9pbmQgPyAoKGtl
eWhlYWQpJihyZWNbYXJlY10pKS0+bmV4dF9leHQgOiAoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+
bmV4dF9leHQgOiBzd2FwZmludCgoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+a2V5X2luZCA/ICgo
a2V5aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1thcmVjXSkp
LT5uZXh0X2V4dCkpOwogICAgICBmaXJzdCA9IDA7CiAgIH0KICAgd2hpbGUgKG5lbGVtcykgewog
ICAgICBudHJhbnMgPSAoKG5lbGVtcyk8KCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgoc2l6ZW9m
KGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShzaXplb2YoX2V4dGhl
YWQpKSklKHNpemVvZihmaW50KSkpICktZmlyc3QpPyhuZWxlbXMpOigoMjAwLShzaXplb2YoX2V4
dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2YoX2V4dGhlYWQp
KS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkpKSApLWZpcnN0KSk7CiAgICAgIFB1
dEJ1ZmZlcihjbGllbnQscmVjW2FyZWNdLmV4dC5kYXRhK2ZpcnN0LG50cmFucyk7CiAgICAgIG5l
bGVtcyAtPSBudHJhbnM7CiAgICAgIHBycmVjID0gYXJlYzsKICAgICAgYXJlYyA9IChvbmU9PTEg
PyAoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1thcmVj
XSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6IHN3YXBm
aW50KCgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5rZXlfaW5kID8gKChrZXloZWFkKSYocmVjW2Fy
ZWNdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYocmVjW2FyZWNdKSktPm5leHRfZXh0KSk7CiAg
ICAgIGZpcnN0ID0gMDsKICAgfQogICAoKChrZXloZWFkKSYocmVjW2N1cnJdKSkpLT5jdXJyX2V4
dCA9IChvbmU9PTEgPyBwcnJlYyA6IHN3YXBmaW50KHBycmVjKSk7CiAgICgoKGtleWhlYWQpJihy
ZWNbY3Vycl0pKSktPnJlYWRwb3MgPSAob25lPT0xID8gbmV3cG9zIDogc3dhcGZpbnQobmV3cG9z
KSk7CiAgIHJldHVybiAwOwp9CiMgNDg0ICJkZXNjci5jIgpleHRlcm4gaW50IERlc2NyV3JpdGUo
b2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaikKewogICBkZXNjciBjdXJyZW50PShkZXNjcilk
c2NvYmo7CiAgIGhlYWRlciBoZWFkPShoZWFkZXIpY3VycmVudC0+ZmlsZTsKICAgZmludCBvbmU9
aGVhZC0+b25lOwogICByZWNvcmQgcmVjPShyZWNvcmQpaGVhZDsKICAgZHNjV3JpdGUgcmVxdWVz
dD0oZHNjV3JpdGUpQ2xpZW50UmVxdWVzdChjbGllbnQpOwogICBmaW50IGxldmVsPXJlcXVlc3Qt
PmxldmVsOwogICBpbnQgYnVjaywgY3VyciwgbmV4dCwgcHJldiwgcmVjbm87CiAgIGZpbnQgbGVu
Z3RoLCBhdl9sZW4sIHRnX2xlbjsKICAgaW50IHJlc3VsdDsKCiAgIHJlc3VsdCA9IENsaWVudEJ1
ZmZlcihjbGllbnQscmVxdWVzdC0+bmVsZW1zKTsKICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3Vs
dDsKICAgRmluZEl0ZW0oY3VycmVudC0+ZmlsZSwgcmVxdWVzdC0+bmFtZSwgbGV2ZWwsICZidWNr
LCAmY3VyciwgJnByZXYpOwogICBpZiAoY3Vycj09MCkgewogICAgICBjdXJyID0gQWxsb2NhdGUo
Y3VycmVudCk7CiAgICAgIGlmIChjdXJyPD0wKSB7CiAgICAgICAgIGZpbnQgcmVzdWx0PUV4dGVu
ZERlc2NyKGN1cnJlbnQpOwogICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0OwogICAg
ICAgICBoZWFkID0gKGhlYWRlciljdXJyZW50LT5maWxlOwogICAgICAgICByZWMgPSAocmVjb3Jk
KWhlYWQ7CiAgICAgICAgIGN1cnIgPSBBbGxvY2F0ZShjdXJyZW50KTsKICAgICAgfQogICAgICBp
ZiAoY3Vycjw9MCkgcmV0dXJuIHNlcnZlci0+ZXJyb3I7CiAgICAgICgoKGtleWhlYWQpJihyZWNb
Y3Vycl0pKSktPmtleV9pbmQgPSAob25lPT0xID8gMSA6IHN3YXBmaW50KDEpKTsKICAgICAgKCgo
a2V5aGVhZCkmKHJlY1tjdXJyXSkpKS0+bmV4dF9leHQgPSAob25lPT0xID8gMCA6IHN3YXBmaW50
KDApKTsKICAgICAgKCgoa2V5aGVhZCkmKHJlY1tjdXJyXSkpKS0+Y3Vycl9leHQgPSAob25lPT0x
ID8gY3VyciA6IHN3YXBmaW50KGN1cnIpKTsKICAgICAgKCgoa2V5aGVhZCkmKHJlY1tjdXJyXSkp
KS0+bGFzdF9leHQgPSAob25lPT0xID8gY3VyciA6IHN3YXBmaW50KGN1cnIpKTsKICAgICAgKCgo
a2V5aGVhZCkmKHJlY1tjdXJyXSkpKS0+bGVuZ3RoID0gKG9uZT09MSA/IDAgOiBzd2FwZmludCgw
KSk7CiAgICAgICgoKGtleWhlYWQpJihyZWNbY3Vycl0pKSktPnJlYWRwb3MgPSAob25lPT0xID8g
MCA6IHN3YXBmaW50KDApKTsKICAgICAgc3RyY3B5KHJlY1tjdXJyXS5rZXkuaC5uYW1lLHJlcXVl
c3QtPm5hbWUpOwogICAgICAoKChrZXloZWFkKSYocmVjW2N1cnJdKSkpLT5sZXZlbCA9IChvbmU9
PTEgPyBsZXZlbCA6IHN3YXBmaW50KGxldmVsKSk7CiAgICAgICgoKGtleWhlYWQpJihyZWNbY3Vy
cl0pKSktPnR5cGUgPSAob25lPT0xID8gMCA6IHN3YXBmaW50KDApKTsKICAgICAgSW5zZXJ0S2V5
UmVjKGN1cnJlbnQsIGJ1Y2ssIGN1cnIsIHByZXYpOwogICAgICAoaGVhZCktPm5pdGVtcyA9IChv
bmU9PTEgPyAoIChvbmU9PTEgP2hlYWQtPm5pdGVtcyA6IHN3YXBmaW50KGhlYWQtPm5pdGVtcykp
KzEpIDogc3dhcGZpbnQoKCAob25lPT0xID9oZWFkLT5uaXRlbXMgOiBzd2FwZmludChoZWFkLT5u
aXRlbXMpKSsxKSkpOwogICB9CiAgIGxlbmd0aCA9IChvbmU9PTEgPyAoKGtleWhlYWQpJihyZWNb
Y3Vycl0pKS0+bGVuZ3RoIDogc3dhcGZpbnQoKChrZXloZWFkKSYocmVjW2N1cnJdKSktPmxlbmd0
aCkpOwogICBhdl9sZW4gPSAoMjAwLShzaXplb2YoX2tleWhlYWQpKS0oKHNpemVvZihmaW50KSkr
KChzaXplb2YoZmludCkpKihzaXplb2YoX2tleWhlYWQpKS0oc2l6ZW9mKF9rZXloZWFkKSkpJShz
aXplb2YoZmludCkpKSApICsgKCgoKGxlbmd0aCkrKCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgo
c2l6ZW9mKGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShzaXplb2Yo
X2V4dGhlYWQpKSklKHNpemVvZihmaW50KSkpICkpLSgoMjAwLShzaXplb2YoX2tleWhlYWQpKS0o
KHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2YoX2tleWhlYWQpKS0oc2l6ZW9m
KF9rZXloZWFkKSkpJShzaXplb2YoZmludCkpKSApKS0xKS8oKDIwMC0oc2l6ZW9mKF9leHRoZWFk
KSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9leHRoZWFkKSktKHNp
emVvZihfZXh0aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKSkpKSooKDIwMC0oc2l6ZW9mKF9leHRo
ZWFkKSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9leHRoZWFkKSkt
KHNpemVvZihfZXh0aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKSk7CiAgIGlmIChyZXF1ZXN0LT5w
b3NpdGlvbj09MCkgcmVxdWVzdC0+cG9zaXRpb24gPSBsZW5ndGgrMTsKICAgaWYgKHJlcXVlc3Qt
PnBvc2l0aW9uID4gbGVuZ3RoKzEpIHJldHVybiAtMjsKICAgaWYgKHJlcXVlc3QtPm5lbGVtczw9
MCkKICAgICAgcmVxdWVzdC0+bmVsZW1zID0gKCgxKT4obGVuZ3RoLXJlcXVlc3QtPnBvc2l0aW9u
KzEpPygxKToobGVuZ3RoLXJlcXVlc3QtPnBvc2l0aW9uKzEpKTsKICAgcmVjbm8gPSAob25lPT0x
ID8gKChrZXloZWFkKSYocmVjW2N1cnJdKSktPmxhc3RfZXh0IDogc3dhcGZpbnQoKChrZXloZWFk
KSYocmVjW2N1cnJdKSktPmxhc3RfZXh0KSk7CiAgIHJlcXVlc3QtPmFrcmVjID0gcmVjbm87CiAg
IHJlcXVlc3QtPnJrcmVjID0gKCgoKG9uZT09MSA/ICgoa2V5aGVhZCkmKHJlY1tjdXJyXSkpLT5s
ZW5ndGggOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNbY3Vycl0pKS0+bGVuZ3RoKSkpKygoMjAw
LShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXpl
b2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkpKSApKS0oKDIw
MC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXplb2YoZmludCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6
ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUoc2l6ZW9mKGZpbnQpKSkgKSktMSkv
KCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgoc2l6ZW9mKGZpbnQpKSsoKHNpemVvZihmaW50KSkq
KHNpemVvZihfZXh0aGVhZCkpLShzaXplb2YoX2V4dGhlYWQpKSklKHNpemVvZihmaW50KSkpICkp
KTsKICAgdGdfbGVuID0gcmVxdWVzdC0+cG9zaXRpb24gKyByZXF1ZXN0LT5uZWxlbXMgLSAxOwog
ICB3aGlsZSAoYXZfbGVuIDwgdGdfbGVuKSB7CiAgICAgIG5leHQgPSBBbGxvY2F0ZShjdXJyZW50
KTsKICAgICAgaWYgKG5leHQ8PTApIHsKICAgICAgICAgc2VydmVyLT5lcnJvciA9IEV4dGVuZERl
c2NyKGN1cnJlbnQpOwogICAgICAgICBpZiAoIXNlcnZlci0+ZXJyb3IpIHsKICAgICAgICAgICAg
aGVhZCA9IChoZWFkZXIpY3VycmVudC0+ZmlsZTsKICAgICAgICAgICAgcmVjID0gKHJlY29yZClo
ZWFkOwogICAgICAgICAgICBuZXh0ID0gQWxsb2NhdGUoY3VycmVudCk7CiAgICAgICAgIH0KICAg
ICAgfQogICAgICBpZiAobmV4dDw9MCkgewogICAgICAgICAoKChrZXloZWFkKSYocmVjW2N1cnJd
KSkpLT5sZW5ndGggPSAob25lPT0xID8gYXZfbGVuIDogc3dhcGZpbnQoYXZfbGVuKSk7CiAgICAg
ICAgICgoKGtleWhlYWQpJihyZWNbY3Vycl0pKSktPmxhc3RfZXh0ID0gKG9uZT09MSA/IHJlY25v
IDogc3dhcGZpbnQocmVjbm8pKTsKICAgICAgICAgcmV0dXJuIHNlcnZlci0+ZXJyb3I7CiAgICAg
IH0KICAgICAgSW5zZXJ0RXh0UmVjKGN1cnJlbnQsIG5leHQsIHJlY25vKTsKICAgICAgcmVjbm8g
PSBuZXh0OwogICAgICBhdl9sZW4gKz0gKCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgoc2l6ZW9m
KGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShzaXplb2YoX2V4dGhl
YWQpKSklKHNpemVvZihmaW50KSkpICkpOwogICB9CiAgIGxlbmd0aCA9ICgobGVuZ3RoKT4odGdf
bGVuKT8obGVuZ3RoKToodGdfbGVuKSk7CiAgICgoKGtleWhlYWQpJihyZWNbY3Vycl0pKSktPmxl
bmd0aCA9IChvbmU9PTEgPyBsZW5ndGggOiBzd2FwZmludChsZW5ndGgpKTsKICAgKCgoa2V5aGVh
ZCkmKHJlY1tjdXJyXSkpKS0+bGFzdF9leHQgPSAob25lPT0xID8gcmVjbm8gOiBzd2FwZmludChy
ZWNubykpOwogICByZXF1ZXN0LT5jdXJyID0gY3VycjsKICAgcmVxdWVzdC0+bGVuZ3RoID0gbGVu
Z3RoOwoKICAgaWYgKCEoY3VycmVudCktPmNoYW5nZWQgJiYgIShjdXJyZW50KS0+cmVhZG9ubHkp
IChjdXJyZW50KS0+Y2hhbmdlZCA9IFNjaGVkdWxlVGltZXIodXBkYXRlciwoNSAqNjAgKjEwMDAg
KjEpLGN1cnJlbnQpOwogICByZXR1cm4gMDsKfQoKCgoKZXh0ZXJuIGludCBEZXNjcldyaXRleChv
YmplY3QgY2xpZW50LCBvYmplY3QgZHNjb2JqKQp7CiAgIGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRz
Y29iajsKICAgaGVhZGVyIGhlYWQ9KGhlYWRlciljdXJyZW50LT5maWxlOwogICBmaW50IG9uZT1o
ZWFkLT5vbmU7CiAgIHJlY29yZCByZWM9KHJlY29yZCljdXJyZW50LT5maWxlOwogICBkc2NXcml0
ZSByZXF1ZXN0PShkc2NXcml0ZSlDbGllbnRSZXF1ZXN0KGNsaWVudCk7CiAgIGludCBjdXJyPXJl
cXVlc3QtPmN1cnI7CiAgIGZpbnQgcG9zPXJlcXVlc3QtPnBvc2l0aW9uOwogICBmaW50IG5lbGVt
cz1yZXF1ZXN0LT5uZWxlbXM7CiAgIGZpbnQgYWtyZWMsIHJrcmVjLCBydHJlYywgYXJlYywgcnJl
YywgZmlyc3QsIHBycmVjOwogICBpbnQgbnRyYW5zOwoKICAgaWYgKHN0cmNtcChyZWNbcmVxdWVz
dC0+Y3Vycl0ua2V5LmgubmFtZSxyZXF1ZXN0LT5uYW1lKSkgcmV0dXJuIC0xOwogICBpZiAoKG9u
ZT09MSA/IHJlY1tyZXF1ZXN0LT5jdXJyXS5rZXkuaC5sZW5ndGggOiBzd2FwZmludChyZWNbcmVx
dWVzdC0+Y3Vycl0ua2V5LmgubGVuZ3RoKSkgPCByZXF1ZXN0LT5sZW5ndGgpIHJldHVybiAtMTsK
ICAgYWtyZWMgPSByZXF1ZXN0LT5ha3JlYzsKICAgcmtyZWMgPSByZXF1ZXN0LT5ya3JlYzsKICAg
cnRyZWMgPSAoKChwb3MpKygoMjAwLShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkr
KChzaXplb2YoZmludCkpKihzaXplb2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShz
aXplb2YoZmludCkpKSApKS0oKDIwMC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXplb2YoZmludCkp
Kygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUo
c2l6ZW9mKGZpbnQpKSkgKSktMSkvKCgyMDAtKHNpemVvZihfZXh0aGVhZCkpLSgoc2l6ZW9mKGZp
bnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShzaXplb2YoX2V4dGhlYWQp
KSklKHNpemVvZihmaW50KSkpICkpKTsKICAgaWYgKHJ0cmVjID49IHJrcmVjKSB7CiAgICAgIHJy
ZWMgPSBya3JlYzsKICAgICAgYXJlYyA9IGFrcmVjOwogICB9IGVsc2UgewogICAgICBycmVjID0g
MDsKICAgICAgYXJlYyA9IGN1cnI7CiAgIH0KICAgZm9yICg7IHJyZWM8cnRyZWM7IHJyZWMrKykg
YXJlYyA9IChvbmU9PTEgPyAoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+a2V5X2luZCA/ICgoa2V5
aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5u
ZXh0X2V4dCA6IHN3YXBmaW50KCgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5rZXlfaW5kID8gKChr
ZXloZWFkKSYocmVjW2FyZWNdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYocmVjW2FyZWNdKSkt
Pm5leHRfZXh0KSk7CiAgIGlmIChycmVjPT0wKSBmaXJzdCA9IHBvcy0xOyBlbHNlIGZpcnN0ID0g
KHBvcy0oMjAwLShzaXplb2YoX2tleWhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmlu
dCkpKihzaXplb2YoX2tleWhlYWQpKS0oc2l6ZW9mKF9rZXloZWFkKSkpJShzaXplb2YoZmludCkp
KSApLTEpJSgoMjAwLShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2Yo
ZmludCkpKihzaXplb2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmlu
dCkpKSApKTsKICAgaWYgKHJyZWM9PTApIHsKICAgICAgbnRyYW5zID0gKChuZWxlbXMpPCgoMjAw
LShzaXplb2YoX2tleWhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXpl
b2YoX2tleWhlYWQpKS0oc2l6ZW9mKF9rZXloZWFkKSkpJShzaXplb2YoZmludCkpKSApLWZpcnN0
KT8obmVsZW1zKTooKDIwMC0oc2l6ZW9mKF9rZXloZWFkKSktKChzaXplb2YoZmludCkpKygoc2l6
ZW9mKGZpbnQpKSooc2l6ZW9mKF9rZXloZWFkKSktKHNpemVvZihfa2V5aGVhZCkpKSUoc2l6ZW9m
KGZpbnQpKSkgKS1maXJzdCkpOwogICAgICBHZXRCdWZmZXIoY2xpZW50LHJlY1thcmVjXS5rZXku
ZGF0YStmaXJzdCxudHJhbnMpOwogICAgICBuZWxlbXMgLT0gbnRyYW5zOwogICAgICBwcnJlYyA9
IGFyZWM7CiAgICAgIGFyZWMgPSAob25lPT0xID8gKChleHRoZWFkKSYocmVjW2FyZWNdKSktPmtl
eV9pbmQgPyAoKGtleWhlYWQpJihyZWNbYXJlY10pKS0+bmV4dF9leHQgOiAoKGV4dGhlYWQpJihy
ZWNbYXJlY10pKS0+bmV4dF9leHQgOiBzd2FwZmludCgoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+
a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkm
KHJlY1thcmVjXSkpLT5uZXh0X2V4dCkpOwogICAgICBmaXJzdCA9IDA7CiAgIH0KICAgd2hpbGUg
KG5lbGVtcykgewogICAgICBudHJhbnMgPSAoKG5lbGVtcyk8KCgyMDAtKHNpemVvZihfZXh0aGVh
ZCkpLSgoc2l6ZW9mKGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShz
aXplb2YoX2V4dGhlYWQpKSklKHNpemVvZihmaW50KSkpICktZmlyc3QpPyhuZWxlbXMpOigoMjAw
LShzaXplb2YoX2V4dGhlYWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXpl
b2YoX2V4dGhlYWQpKS0oc2l6ZW9mKF9leHRoZWFkKSkpJShzaXplb2YoZmludCkpKSApLWZpcnN0
KSk7CiAgICAgIEdldEJ1ZmZlcihjbGllbnQscmVjW2FyZWNdLmV4dC5kYXRhK2ZpcnN0LG50cmFu
cyk7CiAgICAgIG5lbGVtcyAtPSBudHJhbnM7CiAgICAgIHBycmVjID0gYXJlYzsKICAgICAgYXJl
YyA9IChvbmU9PTEgPyAoKGV4dGhlYWQpJihyZWNbYXJlY10pKS0+a2V5X2luZCA/ICgoa2V5aGVh
ZCkmKHJlY1thcmVjXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5uZXh0
X2V4dCA6IHN3YXBmaW50KCgoZXh0aGVhZCkmKHJlY1thcmVjXSkpLT5rZXlfaW5kID8gKChrZXlo
ZWFkKSYocmVjW2FyZWNdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYocmVjW2FyZWNdKSktPm5l
eHRfZXh0KSk7CiAgICAgIGZpcnN0ID0gMDsKICAgfQoKICAgaWYgKCEoY3VycmVudCktPmNoYW5n
ZWQgJiYgIShjdXJyZW50KS0+cmVhZG9ubHkpIChjdXJyZW50KS0+Y2hhbmdlZCA9IFNjaGVkdWxl
VGltZXIodXBkYXRlciwoNSAqNjAgKjEwMDAgKjEpLGN1cnJlbnQpOwogICByZXR1cm4gMDsKfQoK
CgoKCgoKZXh0ZXJuIGludCBEZXNjckZpbmQob2JqZWN0IGNsaWVudCwgb2JqZWN0IGRzY29iaikK
ewogICBkZXNjciBjdXJyZW50PShkZXNjcilkc2NvYmo7CiAgIGhlYWRlciBoZWFkPShoZWFkZXIp
Y3VycmVudC0+ZmlsZTsKICAgZmludCBvbmU9aGVhZC0+b25lOwogICByZWNvcmQgcmVjPShyZWNv
cmQpaGVhZDsKICAgZmludCAqaHRhYj1oZWFkLT5oYXNoX3RhYjsKICAgZmludCBuYnVrPShvbmU9
PTEgPyBoZWFkLT5uX2J1Y2sgOiBzd2FwZmludChoZWFkLT5uX2J1Y2spKTsKICAgZHNjRmluZCBy
ZXF1ZXN0PShkc2NGaW5kKUNsaWVudFJlcXVlc3QoY2xpZW50KTsKICAgZmludCBpbmRleD1yZXF1
ZXN0LT5pbmRleDsKICAgZmludCBsZXZlbCwgcmxldmVsPXJlcXVlc3QtPmxldmVsOwogICBpbnQg
aWJ1aywgbml0ZW1zOwoKICAgaWYgKGluZGV4PDApIGluZGV4ID0gMDsKICAgaWYgKCFpbmRleCkg
ewogICAgICBpZiAoY3VycmVudC0+a2V5dGFiKSB7RnJlZShjdXJyZW50LT5rZXl0YWIpOyBjdXJy
ZW50LT5rZXl0YWI9KCh2b2lkICopMCk7fTsKICAgICAgbml0ZW1zID0gKG9uZT09MSA/IGhlYWQt
Pm5pdGVtcyA6IHN3YXBmaW50KGhlYWQtPm5pdGVtcykpOwogICAgICBpZiAoIW5pdGVtcykgcmV0
dXJuIC0zOwogICAgICBjdXJyZW50LT5rZXl0YWIgPSAoKF9rZXlsZXYgKilDYWxsb2Mobml0ZW1z
LHNpemVvZihfa2V5bGV2KSkpOwogICAgICBpZiAoIWN1cnJlbnQtPmtleXRhYikgcmV0dXJuIC01
ODsKICAgICAgbml0ZW1zID0gMDsKICAgICAgZm9yIChpYnVrPTA7IGlidWs8bmJ1azsgaWJ1aysr
KSB7CiAgICAgICAgIGludCBrPShvbmU9PTEgPyBodGFiW2lidWtdIDogc3dhcGZpbnQoaHRhYltp
YnVrXSkpOwogICAgICAgICB3aGlsZSAoaykgewogICAgICAgICAgICBsZXZlbCA9IChvbmU9PTEg
PyAoKGtleWhlYWQpJihyZWNba10pKS0+bGV2ZWwgOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNb
a10pKS0+bGV2ZWwpKTsKICAgICAgICAgICAgaWYgKHJsZXZlbD09MHg3RkZGRkZGRnx8TGV2Q21w
KChkc2NmaWxlKWhlYWQsIGxldmVsLCBybGV2ZWwpPj0wKSB7CiAgICAgICAgICAgICAgIGN1cnJl
bnQtPmtleXRhYltuaXRlbXNdLnJlY25vID0gazsKICAgICAgICAgICAgICAgY3VycmVudC0+a2V5
dGFiW25pdGVtc10ubGV2ZWwgPSAob25lPT0xID8gKChrZXloZWFkKSYocmVjW2tdKSktPmxldmVs
IDogc3dhcGZpbnQoKChrZXloZWFkKSYocmVjW2tdKSktPmxldmVsKSk7CiAgICAgICAgICAgICAg
IHN0cmNweShjdXJyZW50LT5rZXl0YWJbbml0ZW1zXS5uYW1lLHJlY1trXS5rZXkuaC5uYW1lKTsK
ICAgICAgICAgICAgICAgbml0ZW1zKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgayA9IChv
bmU9PTEgPyAoKGtleWhlYWQpJihyZWNba10pKS0+bmV4dF9rZXkgOiBzd2FwZmludCgoKGtleWhl
YWQpJihyZWNba10pKS0+bmV4dF9rZXkpKTsKICAgICAgICAgfQogICAgICB9CiAgICAgIGN1cnJl
bnQtPm5rZXlzID0gbml0ZW1zOwogICB9CiAgIGlmICghY3VycmVudC0+a2V5dGFiKSByZXR1cm4g
LTM7CiAgIHdoaWxlIChpbmRleCA8IGN1cnJlbnQtPm5rZXlzKSB7CiAgICAgIGludCByZWNubz1j
dXJyZW50LT5rZXl0YWJbaW5kZXhdLnJlY25vOwogICAgICBpZiAoKG9uZT09MSA/ICgoa2V5aGVh
ZCkmKHJlY1tyZWNub10pKS0+bGV2ZWwgOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNbcmVjbm9d
KSktPmxldmVsKSk9PWN1cnJlbnQtPmtleXRhYltpbmRleF0ubGV2ZWwgJiYKICAgICAgICAgICFz
dHJjbXAocmVjW3JlY25vXS5rZXkuaC5uYW1lLGN1cnJlbnQtPmtleXRhYltpbmRleF0ubmFtZSkp
IHsKICAgICAgICAgUHV0RmludChjbGllbnQsMSwmY3VycmVudC0+a2V5dGFiW2luZGV4XS5sZXZl
bCwxKTsKICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgUHV0RmludChjbGllbnQsMSwmaW5kZXgs
MSk7CiAgICAgICAgIFB1dEJ1ZmZlcihjbGllbnQsY3VycmVudC0+a2V5dGFiW2luZGV4LTFdLm5h
bWUsMjEpOwogICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBpbmRleCsrOwogICB9CiAg
IHJldHVybiAtMzsKfQoKCgoKCgoKZXh0ZXJuIGludCBEZXNjckRlbGFsbChvYmplY3QgY2xpZW50
LCBvYmplY3QgZHNjb2JqKQp7CiAgIGRlc2NyIGN1cnJlbnQ9KGRlc2NyKWRzY29iajsKICAgaGVh
ZGVyIGhlYWQ9KGhlYWRlciljdXJyZW50LT5maWxlOwogICBmaW50IG9uZT1oZWFkLT5vbmU7CiAg
IHJlY29yZCByZWM9KHJlY29yZCloZWFkOwogICBmaW50ICpodGFiPWhlYWQtPmhhc2hfdGFiOwog
ICBmaW50IG5idWs9aGVhZC0+bl9idWNrOwogICBkc2NEZWxhbGwgcmVxdWVzdD0oZHNjRGVsYWxs
KUNsaWVudFJlcXVlc3QoY2xpZW50KTsKICAgZmludCBsZXZlbD1yZXF1ZXN0LT5sZXZlbDsKICAg
aW50IGlidWs7CiAgIGludCByZXN1bHQ9LTM7CgogICBmb3IgKGlidWs9MDsgaWJ1azxuYnVrOyBp
YnVrKyspIHsKICAgICAgaW50IGs9KG9uZT09MSA/IGh0YWJbaWJ1a10gOiBzd2FwZmludChodGFi
W2lidWtdKSk7CiAgICAgIGludCBwcmV2PTA7CiAgICAgIHdoaWxlIChrKSB7CiAgICAgICAgIGlm
ICghc3RyY21wKHJlY1trXS5rZXkuaC5uYW1lLHJlcXVlc3QtPm5hbWUpKSB7CiAgICAgICAgICAg
IGZpbnQgZmxldmVsPShvbmU9PTEgPyAoKGtleWhlYWQpJihyZWNba10pKS0+bGV2ZWwgOiBzd2Fw
ZmludCgoKGtleWhlYWQpJihyZWNba10pKS0+bGV2ZWwpKTsKICAgICAgICAgICAgaWYgKGZsZXZl
bCA8PSBsZXZlbCkgewogICAgICAgICAgICAgICBpbnQgZHJlYz1rOwogICAgICAgICAgICAgICBr
ID0gKG9uZT09MSA/ICgoa2V5aGVhZCkmKHJlY1trXSkpLT5uZXh0X2tleSA6IHN3YXBmaW50KCgo
a2V5aGVhZCkmKHJlY1trXSkpLT5uZXh0X2tleSkpOwogICAgICAgICAgICAgICBEZWFsbG9jYXRl
KGN1cnJlbnQsIGlidWssIGRyZWMsIHByZXYpOwogICAgICAgICAgICAgICByZXN1bHQgPSAwOwog
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHByZXYgPSBrOwogICAgICAgICBrID0gKG9uZT09MSA/ICgoa2V5aGVhZCkmKHJlY1trXSkpLT5u
ZXh0X2tleSA6IHN3YXBmaW50KCgoa2V5aGVhZCkmKHJlY1trXSkpLT5uZXh0X2tleSkpOwogICAg
ICB9CiAgIH0KICAgaWYgKHJlc3VsdD09MCkgaWYgKCEoY3VycmVudCktPmNoYW5nZWQgJiYgIShj
dXJyZW50KS0+cmVhZG9ubHkpIChjdXJyZW50KS0+Y2hhbmdlZCA9IFNjaGVkdWxlVGltZXIodXBk
YXRlciwoNSAqNjAgKjEwMDAgKjEpLGN1cnJlbnQpOwogICByZXR1cm4gcmVzdWx0Owp9CiMgNzE3
ICJkZXNjci5jIgpleHRlcm4gaW50IERlc2NyT3B0aW1pemUob2JqZWN0IGRzY29iaikKewogICBp
bnQgbmV3cHJpbWU7CiAgIGludCBuZXdzaXplOwogICBkZXNjciBjdXJyZW50PShkZXNjcilkc2Nv
Ymo7CiAgIGRzY2ZpbGUgY3VyZmlsZT1jdXJyZW50LT5maWxlLCBuZXdmaWxlOwogICBpbnQgKm5l
d2JpdG1hcDsKICAgaW50IGksIG5fYWxsb2MsIG5pdGVtcywgbl9idWNrOwogICBpbnQgb25lPWN1
cmZpbGUtPmgub25lOwoKCiAgIGlmIChjdXJyZW50LT5yZWFkb25seSkgcmV0dXJuIC01MTsKICAg
aWYgKGN1cnJlbnQtPmxvY2spIHJldHVybiAtNTI7CiAgIFVwZGF0ZURlc2NyKGRzY29iaiwgMSk7
CiAgIG5ld3ByaW1lID0gTmV4dFByaW1lKCgoc2VydmVyLT5wcmltZSk+KChvbmU9PTEgPyBjdXJm
aWxlLT5oLm5pdGVtcyA6IHN3YXBmaW50KGN1cmZpbGUtPmgubml0ZW1zKSkpPyhzZXJ2ZXItPnBy
aW1lKTooKG9uZT09MSA/IGN1cmZpbGUtPmgubml0ZW1zIDogc3dhcGZpbnQoY3VyZmlsZS0+aC5u
aXRlbXMpKSkpKTsKICAgbl9idWNrID0gKG9uZT09MSA/IGN1cmZpbGUtPmgubl9idWNrIDogc3dh
cGZpbnQoY3VyZmlsZS0+aC5uX2J1Y2spKTsKICAgbmV3c2l6ZSA9ICgoY3VycmVudC0+c2l6ZSk+
KGN1cnJlbnQtPnNpemUrKG5ld3ByaW1lLW5fYnVjaykqc2l6ZW9mKGZpbnQpKT8oY3VycmVudC0+
c2l6ZSk6KGN1cnJlbnQtPnNpemUrKG5ld3ByaW1lLW5fYnVjaykqc2l6ZW9mKGZpbnQpKSk7Cgog
ICBuZXdzaXplICs9IGN1cnJlbnQtPmV4dGVuZHNpemU7CiAgIG5ld2JpdG1hcCA9IChpbnQqKWNh
bGxvYygoKChuZXdzaXplKS0xKS8oc2l6ZW9mKGludCkqMjAwKjgpKzEpLHNpemVvZihpbnQpKTsK
ICAgaWYgKCFuZXdiaXRtYXApIHJldHVybiAtNTg7CiAgIG5ld2ZpbGUgPSAoZHNjZmlsZSltYWxs
b2MobmV3c2l6ZSk7CiAgIGlmICghbmV3ZmlsZSkgewogICAgICBmcmVlKG5ld2JpdG1hcCk7CiAg
ICAgIHJldHVybiAtNTg7CiAgIH0KICAgaWYgKG5ld3NpemUgPiBjdXJyZW50LT5zaXplKSB7CiAg
ICAgIGlmIChFeHRlbmRGaWxlKGN1cnJlbnQtPmZkLCBuZXdzaXplIC0gY3VycmVudC0+c2l6ZSkp
IHsKICAgICAgICAgZnJlZShuZXdiaXRtYXApOwogICAgICAgICBmcmVlKG5ld2ZpbGUpOwogICAg
ICAgICByZXR1cm4gLTMzOwogICAgICB9CiAgICAgIGN1cnJlbnQtPnNpemUgPSBuZXdzaXplOwog
ICB9CgogICBtZW1jcHkobmV3ZmlsZSxjdXJmaWxlLHNpemVvZihfaGVhZGVyKSk7CiAgIG5ld2Zp
bGUtPmguZnJlZSA9IDA7CiAgIG5ld2ZpbGUtPmgucmVjX3N0YXJ0ID0gKG9uZT09MSA/ICggc2l6
ZW9mKF9kc2NmaWxlKQoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArc2l6ZW9m
KGZpbnQpKihuZXdwcmltZS0xKQojIDc1OSAiZGVzY3IuYyIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArc2l6ZW9mKF9yZWNvcmQpLTEgKQojIDc1OSAiZGVzY3IuYyIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zaXplb2YoX3JlY29y
ZCkgOiBzd2FwZmludCgoIHNpemVvZihfZHNjZmlsZSkKIyA3NTkgImRlc2NyLmMiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgK3NpemVvZihmaW50KSoobmV3cHJpbWUtMSkKIyA3NTkg
ImRlc2NyLmMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3NpemVvZihfcmVjb3Jk
KS0xICkKIyA3NTkgImRlc2NyLmMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvc2l6ZW9mKF9yZWNvcmQpKSk7CiAgIG5pdGVtcyA9IDA7CiAgIG5f
YWxsb2MgPSAob25lPT0xID8gbmV3ZmlsZS0+aC5yZWNfc3RhcnQgOiBzd2FwZmludChuZXdmaWxl
LT5oLnJlY19zdGFydCkpOwogICBuZXdmaWxlLT5oLm5fYnVjayA9IChvbmU9PTEgPyBuZXdwcmlt
ZSA6IHN3YXBmaW50KG5ld3ByaW1lKSk7CiAgIGZvciAoaT0wOyBpPG5ld3ByaW1lOyBpKyspIG5l
d2ZpbGUtPmguaGFzaF90YWJbaV0gPSAwOwoKICAgZm9yIChpPTA7IGk8bl9idWNrOyBpKyspIHsK
ICAgICAgaW50IGs9KG9uZT09MSA/IGN1cmZpbGUtPmguaGFzaF90YWJbaV0gOiBzd2FwZmludChj
dXJmaWxlLT5oLmhhc2hfdGFiW2ldKSk7CiAgICAgIHdoaWxlIChrKSB7CiAgICAgICAgIGtleXJl
YyBvbGRrZXk9KGtleXJlYykmY3VyZmlsZS0+cltrXTsKICAgICAgICAga2V5cmVjIG5ld2tleT0o
a2V5cmVjKSZuZXdmaWxlLT5yWysrbl9hbGxvY107CiAgICAgICAgIGludCBuZXdidWs9SGFzaChv
bGRrZXktPmgubmFtZSwob25lPT0xID8gb2xka2V5LT5oLmxldmVsIDogc3dhcGZpbnQob2xka2V5
LT5oLmxldmVsKSksbmV3cHJpbWUpOwogICAgICAgICBpbnQgZXh0ID0ob25lPT0xID8gb2xka2V5
LT5oLm5leHRfZXh0IDogc3dhcGZpbnQob2xka2V5LT5oLm5leHRfZXh0KSk7CiAgICAgICAgIGlu
dCBsYXN0ID1uX2FsbG9jOwoKICAgICAgICAgbml0ZW1zKys7CiAgICAgICAgIG1lbWNweShuZXdr
ZXksb2xka2V5LDIwMCk7CiAgICAgICAgIG5ld2tleS0+aC5uZXh0X2tleSA9IG5ld2ZpbGUtPmgu
aGFzaF90YWJbbmV3YnVrXTsKICAgICAgICAgbmV3ZmlsZS0+aC5oYXNoX3RhYltuZXdidWtdID0g
KG9uZT09MSA/IG5fYWxsb2MgOiBzd2FwZmludChuX2FsbG9jKSk7CiAgICAgICAgIG5ld2tleS0+
aC5yZWFkcG9zID0gMDsKICAgICAgICAgbmV3a2V5LT5oLmN1cnJfZXh0ID0gKG9uZT09MSA/IG5f
YWxsb2MgOiBzd2FwZmludChuX2FsbG9jKSk7CiAgICAgICAgIGlmIChleHQpIG5ld2tleS0+aC5u
ZXh0X2V4dCA9IChvbmU9PTEgPyBuX2FsbG9jKzEgOiBzd2FwZmludChuX2FsbG9jKzEpKTsKICAg
ICAgICAgd2hpbGUgKGV4dCkgewogICAgICAgICAgICBleHRyZWMgb2xkZXh0PShleHRyZWMpJmN1
cmZpbGUtPnJbZXh0XTsKICAgICAgICAgICAgZXh0cmVjIG5ld2V4dD0oZXh0cmVjKSZuZXdmaWxl
LT5yWysrbl9hbGxvY107CgogICAgICAgICAgICBsYXN0ID0gbl9hbGxvYzsKICAgICAgICAgICAg
bWVtY3B5KG5ld2V4dCxvbGRleHQsMjAwKTsKICAgICAgICAgICAgZXh0ID0gKG9uZT09MSA/IG9s
ZGV4dC0+aC5uZXh0X2V4dCA6IHN3YXBmaW50KG9sZGV4dC0+aC5uZXh0X2V4dCkpOwogICAgICAg
ICAgICBpZiAoZXh0KSBuZXdleHQtPmgubmV4dF9leHQgPSAob25lPT0xID8gbl9hbGxvYysxIDog
c3dhcGZpbnQobl9hbGxvYysxKSk7CiAgICAgICAgIH0KICAgICAgICAgbmV3a2V5LT5oLmxhc3Rf
ZXh0ID0gKG9uZT09MSA/IGxhc3QgOiBzd2FwZmludChsYXN0KSk7CiAgICAgICAgIGsgPSAob25l
PT0xID8gb2xka2V5LT5oLm5leHRfa2V5IDogc3dhcGZpbnQob2xka2V5LT5oLm5leHRfa2V5KSk7
CiAgICAgIH0KICAgfQogICBuZXdmaWxlLT5oLm5pdGVtcyA9IChvbmU9PTEgPyBuaXRlbXMgOiBz
d2FwZmludChuaXRlbXMpKTsKICAgbmV3ZmlsZS0+aC5uX2FsbG9jID0gKG9uZT09MSA/IG5fYWxs
b2MgOiBzd2FwZmludChuX2FsbG9jKSk7CgogICBmcmVlKGN1cnJlbnQtPmJpdG1hcCk7CiAgIGN1
cnJlbnQtPmJpdG1hcCA9IG5ld2JpdG1hcDsKICAgZnJlZShjdXJyZW50LT5maWxlKTsKICAgY3Vy
cmVudC0+ZmlsZSA9IG5ld2ZpbGU7CiAgIGN1cnJlbnQtPnNpemUgPSAoKChuX2FsbG9jKzErMTAp
KjIwMCk8KGN1cnJlbnQtPnNpemUpPygobl9hbGxvYysxKzEwKSoyMDApOihjdXJyZW50LT5zaXpl
KSk7CiAgIG5ld2ZpbGUtPmgubWF4cmVjID0gKG9uZT09MSA/IGN1cnJlbnQtPnNpemUvMjAwLTEg
OiBzd2FwZmludChjdXJyZW50LT5zaXplLzIwMC0xKSk7CiAgICh2b2lkKWZ0cnVuY2F0ZShjdXJy
ZW50LT5mZCwgY3VycmVudC0+c2l6ZSk7CiAgICh2b2lkKVdyaXRlRmlsZShjdXJyZW50LT5mZCwg
Y3VycmVudC0+ZmlsZSk7CiAgIHJldHVybiAwOwp9CgoKCgoKCgpleHRlcm4gZmludCBSZWNvdmVy
RGVzY3IoY2hhciAqbmFtZSkKewogICBoZWFkZXIgZmlsZTsKICAgaW50IGVycm9ycz0wOwogICBp
bnQgZmQsIHJlYWRvbmx5LCBzaXplLCBpYnVrOwogICBmaW50IG9uZSwgKmh0YWIsIG5idWssIHJl
Y19zdGFydCwgcmVjbm8sIHByZXZyZWMsIG1heHJlYzsKICAgcmVjb3JkIHJlYzsKCiAgIGZkID0g
T3BlbkZpbGUobmFtZSwiLmRlc2NyIiwmcmVhZG9ubHkpOwogICBpZiAoIWZkKSByZXR1cm4gLTU7
CiAgIGlmIChyZWFkb25seSkgewogICAgICBDbG9zZUZpbGUoJmZkKTsKICAgICAgcmV0dXJuIC01
MTsKICAgfQoKICAgc2l6ZSA9IEZpbGVTaXplKGZkKTsKICAgaWYgKHNpemU8c2l6ZW9mKF9oZWFk
ZXIpKSB7CiAgICAgIENsb3NlRmlsZSgmZmQpOwogICAgICByZXR1cm4gLTYwOwogICB9CgogICBm
aWxlID0gKGhlYWRlciltYWxsb2Moc2l6ZSk7CiAgIGlmICghZmlsZSkgewogICAgICBDbG9zZUZp
bGUoJmZkKTsKICAgICAgcmV0dXJuIC01ODsKICAgfQoKICAgaWYgKFJlYWRGaWxlKGZkLCBmaWxl
KSkgewogICAgICBDbG9zZUZpbGUoJmZkKTsKICAgICAgcmV0dXJuIC01OwogICB9CgogICBpZiAo
KGZpbGUtPnZlcnNpb24hPTIpICYmIChmaWxlLT52ZXJzaW9uIT1zd2FwZmludCgyKSkpIHsKICAg
ICAgQ2xvc2VGaWxlKCZmZCk7CiAgICAgIHJldHVybiAtNDg7CiAgIH0KCiAgIG9uZSA9IChmaWxl
LT52ZXJzaW9uPT0yKT8xOnN3YXBmaW50KDEpOwoKICAgbWF4cmVjID0gc2l6ZS8yMDAtMTsKICAg
aWYgKG1heHJlYzwob25lPT0xID8gZmlsZS0+bWF4cmVjIDogc3dhcGZpbnQoZmlsZS0+bWF4cmVj
KSkpIHsKICAgICAgZXJyb3JzKys7CiAgIH0KICAgZmlsZS0+bWF4cmVjID0gKG9uZT09MSA/IG1h
eHJlYyA6IHN3YXBmaW50KG1heHJlYykpOwoKICAgaHRhYiA9IGZpbGUtPmhhc2hfdGFiOwogICBu
YnVrID0gKG9uZT09MSA/IGZpbGUtPm5fYnVjayA6IHN3YXBmaW50KGZpbGUtPm5fYnVjaykpOwog
ICByZWNfc3RhcnQgPSAob25lPT0xID8gZmlsZS0+cmVjX3N0YXJ0IDogc3dhcGZpbnQoZmlsZS0+
cmVjX3N0YXJ0KSk7CiAgIHJlYyA9IChyZWNvcmQpZmlsZTsKCiAgIHJlY25vID0gKG9uZT09MSA/
IGZpbGUtPmZyZWUgOiBzd2FwZmludChmaWxlLT5mcmVlKSk7CiAgIGlmIChyZWNubyAmJiAocmVj
bm88cmVjX3N0YXJ0IHx8IHJlY25vPm1heHJlYykgKSB7CiAgICAgIGVycm9ycysrOwogICAgICBm
aWxlLT5mcmVlID0gMDsKICAgfQogICBmb3IgKHJlY25vPShvbmU9PTEgPyBmaWxlLT5mcmVlIDog
c3dhcGZpbnQoZmlsZS0+ZnJlZSkpOyByZWNubzsgcmVjbm89KG9uZT09MSA/ICgoZXh0aGVhZCkm
KHJlY1tyZWNub10pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1tyZWNub10pKS0+bmV4dF9l
eHQgOiAoKGV4dGhlYWQpJihyZWNbcmVjbm9dKSktPm5leHRfZXh0IDogc3dhcGZpbnQoKChleHRo
ZWFkKSYocmVjW3JlY25vXSkpLT5rZXlfaW5kID8gKChrZXloZWFkKSYocmVjW3JlY25vXSkpLT5u
ZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1tyZWNub10pKS0+bmV4dF9leHQpKSkgewogICAgICBp
ZiAocmVjbm88cmVjX3N0YXJ0IHx8IHJlY25vPm1heHJlYykgewogICAgICAgICBlcnJvcnMrKzsK
ICAgICAgICAgKCgoZXh0aGVhZCkmKHJlY1twcmV2cmVjXSkpKS0+bmV4dF9leHQgPSAob25lPT0x
ID8gMCA6IHN3YXBmaW50KDApKTsKICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcHJldnJl
YyA9IHJlY25vOwogICB9CgogICBmb3IgKGlidWs9MDsgaWJ1azxuYnVrOyBpYnVrKyspIHsKICAg
ICAgaW50IGs9KG9uZT09MSA/IGh0YWJbaWJ1a10gOiBzd2FwZmludChodGFiW2lidWtdKSk7CiAg
ICAgIGlmIChrICYmICggazxyZWNfc3RhcnQgfHwgaz5tYXhyZWMgKSApIHsKICAgICAgICAgZXJy
b3JzKys7CiAgICAgICAgIGh0YWJbaWJ1a10gPSAwOwogICAgICAgICBrID0gMDsKICAgICAgfQog
ICAgICB3aGlsZSAoaykgewogICAgICAgICBmaW50IGxlbmd0aD0oMjAwLShzaXplb2YoX2tleWhl
YWQpKS0oKHNpemVvZihmaW50KSkrKChzaXplb2YoZmludCkpKihzaXplb2YoX2tleWhlYWQpKS0o
c2l6ZW9mKF9rZXloZWFkKSkpJShzaXplb2YoZmludCkpKSApLSgyMDAtKHNpemVvZihfZXh0aGVh
ZCkpLSgoc2l6ZW9mKGZpbnQpKSsoKHNpemVvZihmaW50KSkqKHNpemVvZihfZXh0aGVhZCkpLShz
aXplb2YoX2V4dGhlYWQpKSklKHNpemVvZihmaW50KSkpICk7CiAgICAgICAgIGludCBuZXh0azsK
ICAgICAgICAgZm9yIChyZWNubz1rOyByZWNubzsgcmVjbm89KG9uZT09MSA/ICgoZXh0aGVhZCkm
KHJlY1tyZWNub10pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1tyZWNub10pKS0+bmV4dF9l
eHQgOiAoKGV4dGhlYWQpJihyZWNbcmVjbm9dKSktPm5leHRfZXh0IDogc3dhcGZpbnQoKChleHRo
ZWFkKSYocmVjW3JlY25vXSkpLT5rZXlfaW5kID8gKChrZXloZWFkKSYocmVjW3JlY25vXSkpLT5u
ZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1tyZWNub10pKS0+bmV4dF9leHQpKSkgewogICAgICAg
ICAgICBpZiAocmVjbm88cmVjX3N0YXJ0IHx8IHJlY25vPm1heHJlYykgewogICAgICAgICAgICAg
ICBlcnJvcnMrKzsKICAgICAgICAgICAgICAgaWYgKHByZXZyZWM9PWspIHsKICAgICAgICAgICAg
ICAgICAgKCgoa2V5aGVhZCkmKHJlY1twcmV2cmVjXSkpKS0+bmV4dF9leHQgPSAob25lPT0xID8g
MCA6IHN3YXBmaW50KDApKTsKICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgKCgoZXh0aGVhZCkmKHJlY1twcmV2cmVjXSkpKS0+bmV4dF9leHQgPSAob25lPT0xID8gMCA6
IHN3YXBmaW50KDApKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKG9uZT09
MSA/ICgoa2V5aGVhZCkmKHJlY1trXSkpLT5sZW5ndGggOiBzd2FwZmludCgoKGtleWhlYWQpJihy
ZWNba10pKS0+bGVuZ3RoKSk+bGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICgoKGtleWhlYWQp
JihyZWNba10pKSktPmxlbmd0aCA9IChvbmU9PTEgPyBsZW5ndGggOiBzd2FwZmludChsZW5ndGgp
KTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBsZW5ndGggKz0gKDIwMC0oc2l6ZW9mKF9leHRoZWFkKSktKChzaXplb2YoZmlu
dCkpKygoc2l6ZW9mKGZpbnQpKSooc2l6ZW9mKF9leHRoZWFkKSktKHNpemVvZihfZXh0aGVhZCkp
KSUoc2l6ZW9mKGZpbnQpKSkgKTsKICAgICAgICAgfQogICAgICAgICBuZXh0ayA9IChvbmU9PTEg
PyAoKGtleWhlYWQpJihyZWNba10pKS0+bmV4dF9rZXkgOiBzd2FwZmludCgoKGtleWhlYWQpJihy
ZWNba10pKS0+bmV4dF9rZXkpKTsKICAgICAgICAgaWYgKG5leHRrICYmIChuZXh0azxyZWNfc3Rh
cnQgfHwgbmV4dGs+bWF4cmVjKSApIHsKICAgICAgICAgICAgZXJyb3JzKys7CiAgICAgICAgICAg
ICgoKGtleWhlYWQpJihyZWNba10pKSktPm5leHRfa2V5ID0gKG9uZT09MSA/IDAgOiBzd2FwZmlu
dCgwKSk7CiAgICAgICAgICAgIGsgPSAwOwogICAgICAgICB9IGVsc2UgayA9IG5leHRrOwogICAg
ICB9CiAgIH0KICAgaWYgKGVycm9ycykgKHZvaWQpV3JpdGVGaWxlKGZkLCBmaWxlKTsKICAgQ2xv
c2VGaWxlKCZmZCk7CiAgIHJldHVybiAwOwp9CgoKCgoKCnN0YXRpYyBpbnQgRXh0ZW5kRGVzY3Io
ZGVzY3IgY3VycmVudCkKewogICBkc2NmaWxlIG5ld2ZpbGU7CiAgIGludCAqbmV3Yml0bWFwOwog
ICBpbnQgbmV3c2l6ZT1jdXJyZW50LT5zaXplK2N1cnJlbnQtPmV4dGVuZHNpemU7CgogICBuZXdi
aXRtYXAgPSAoaW50KiljYWxsb2MoKCgobmV3c2l6ZSktMSkvKHNpemVvZihpbnQpKjIwMCo4KSsx
KSxzaXplb2YoaW50KSk7CiAgIGlmICghbmV3Yml0bWFwKSByZXR1cm4gLTU4OwogICBuZXdmaWxl
ID0gKGRzY2ZpbGUpcmVhbGxvYyhjdXJyZW50LT5maWxlLG5ld3NpemUpOwogICBpZiAoIW5ld2Zp
bGUpIHsKICAgICAgZnJlZShuZXdiaXRtYXApOwogICAgICByZXR1cm4gLTU4OwogICB9CiAgIGlm
IChFeHRlbmRGaWxlKGN1cnJlbnQtPmZkLCBjdXJyZW50LT5leHRlbmRzaXplKSkgcmV0dXJuIC0z
MzsKICAgbWVtY3B5KG5ld2JpdG1hcCwgY3VycmVudC0+Yml0bWFwLCAoKChjdXJyZW50LT5zaXpl
KS0xKS8oc2l6ZW9mKGludCkqMjAwKjgpKzEpKTsKICAgZnJlZShjdXJyZW50LT5iaXRtYXApOwog
ICBjdXJyZW50LT5iaXRtYXAgPSBuZXdiaXRtYXA7CiAgIGN1cnJlbnQtPmZpbGUgPSBuZXdmaWxl
OwogICBjdXJyZW50LT5zaXplID0gbmV3c2l6ZTsKICAgcmV0dXJuIENoZWNrRGVzY3IoY3VycmVu
dCk7Cn0KIyA5NTIgImRlc2NyLmMiCnN0YXRpYyBpbnQgQ2hlY2tEZXNjcihkZXNjciBjdXJyZW50
KQp7CiAgIGhlYWRlciBmaWxlPShoZWFkZXIpY3VycmVudC0+ZmlsZTsKICAgZmludCBvbmU7CiAg
IGZpbnQgbWF4cmVjOwoKCgogICBpZiAoKGZpbGUtPnZlcnNpb24hPTIpICYmIChmaWxlLT52ZXJz
aW9uIT1zd2FwZmludCgyKSkpCiAgICAgIHJldHVybiAtNDg7CgoKCgoKICAgaWYgKGZpbGUtPnN1
YnZlcnNpb24gPT0gMCkgewogICAgICB1bmlvbiB7CiAgICAgICAgIGZpbnQgbDsKICAgICAgICAg
Y2hhciBiW3NpemVvZihmaW50KV07CiAgICAgIH0gdSwgdjsKCiAgICAgIGZpbGUtPm9uZSA9IChm
aWxlLT52ZXJzaW9uPT0yKT8xOnN3YXBmaW50KDEpOwogICAgICB2LmwgPSBmaWxlLT5vbmU7CiAg
ICAgIHUubCA9IDA7CiAgICAgIGlmICh2LmJbMF0pIHsKICAgICAgICAgdS5iWzBdID0gMTsKICAg
ICAgfSBlbHNlIHsKICAgICAgICAgdS5iWzBdID0gMDsKICAgICAgfQogICAgICBmaWxlLT5vc2Rl
cCA9IHUubDsKICAgICAgb25lID0gZmlsZS0+b25lOwogICAgICAoZmlsZSktPnN1YnZlcnNpb24g
PSAob25lPT0xID8gMSA6IHN3YXBmaW50KDEpKTsKCiAgICAgIGlmICghKGN1cnJlbnQpLT5jaGFu
Z2VkICYmICEoY3VycmVudCktPnJlYWRvbmx5KSAoY3VycmVudCktPmNoYW5nZWQgPSBTY2hlZHVs
ZVRpbWVyKHVwZGF0ZXIsKDUgKjYwICoxMDAwICoxKSxjdXJyZW50KTsKICAgfQoKICAgb25lID0g
ZmlsZS0+b25lOwoKCgogICBtYXhyZWMgPSBjdXJyZW50LT5zaXplLzIwMC0xOwogICBpZiAobWF4
cmVjIDwgKGZpbGUtPm9uZT09MSA/IGZpbGUtPm1heHJlYyA6IHN3YXBmaW50KGZpbGUtPm1heHJl
YykpKSB7CiAgICAgIHJldHVybiAtMzc7CiAgIH0KCgoKICAgaWYgKCFjdXJyZW50LT5zYWZlKSB7
CiAgICAgIGludCBuaXRlbXMsIGlidWs7CiAgICAgIGZpbnQgKmh0YWI9ZmlsZS0+aGFzaF90YWI7
CiAgICAgIGZpbnQgbmJ1ayA9KG9uZT09MSA/IGZpbGUtPm5fYnVjayA6IHN3YXBmaW50KGZpbGUt
Pm5fYnVjaykpOwogICAgICBmaW50IHJlY19zdGFydD0ob25lPT0xID8gZmlsZS0+cmVjX3N0YXJ0
IDogc3dhcGZpbnQoZmlsZS0+cmVjX3N0YXJ0KSk7CiAgICAgIGZpbnQgbWF4cmVjPShvbmU9PTEg
PyBmaWxlLT5tYXhyZWMgOiBzd2FwZmludChmaWxlLT5tYXhyZWMpKTsKICAgICAgcmVjb3JkIHJl
Yz0ocmVjb3JkKWZpbGU7CiAgICAgIGZpbnQgcmVjbm87CgogICAgICBmb3IgKHJlY25vPShmaWxl
LT5vbmU9PTEgPyBmaWxlLT5mcmVlIDogc3dhcGZpbnQoZmlsZS0+ZnJlZSkpOyByZWNubzsgcmVj
bm89KG9uZT09MSA/ICgoZXh0aGVhZCkmKHJlY1tyZWNub10pKS0+a2V5X2luZCA/ICgoa2V5aGVh
ZCkmKHJlY1tyZWNub10pKS0+bmV4dF9leHQgOiAoKGV4dGhlYWQpJihyZWNbcmVjbm9dKSktPm5l
eHRfZXh0IDogc3dhcGZpbnQoKChleHRoZWFkKSYocmVjW3JlY25vXSkpLT5rZXlfaW5kID8gKChr
ZXloZWFkKSYocmVjW3JlY25vXSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY1tyZWNub10p
KS0+bmV4dF9leHQpKSkKICAgICAgICAgaWYgKHJlY25vPHJlY19zdGFydCB8fCByZWNubz5tYXhy
ZWMpIHJldHVybiAtMzg7CgogICAgICBuaXRlbXMgPSAwOwogICAgICBmb3IgKGlidWs9MDsgaWJ1
azxuYnVrOyBpYnVrKyspIHsKICAgICAgICAgaW50IGs9KG9uZT09MSA/IGh0YWJbaWJ1a10gOiBz
d2FwZmludChodGFiW2lidWtdKSk7CiAgICAgICAgIHdoaWxlIChrKSB7CiAgICAgICAgICAgIGZv
ciAocmVjbm89azsgcmVjbm87IHJlY25vPShvbmU9PTEgPyAoKGV4dGhlYWQpJihyZWNbcmVjbm9d
KSktPmtleV9pbmQgPyAoKGtleWhlYWQpJihyZWNbcmVjbm9dKSktPm5leHRfZXh0IDogKChleHRo
ZWFkKSYocmVjW3JlY25vXSkpLT5uZXh0X2V4dCA6IHN3YXBmaW50KCgoZXh0aGVhZCkmKHJlY1ty
ZWNub10pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY1tyZWNub10pKS0+bmV4dF9leHQgOiAo
KGV4dGhlYWQpJihyZWNbcmVjbm9dKSktPm5leHRfZXh0KSkpCiAgICAgICAgICAgICAgIGlmIChy
ZWNubzxyZWNfc3RhcnQgfHwgcmVjbm8+bWF4cmVjKSByZXR1cm4gLTM4OwogICAgICAgICAgICBu
aXRlbXMrKzsKICAgICAgICAgICAgayA9IChvbmU9PTEgPyAoKGtleWhlYWQpJihyZWNba10pKS0+
bmV4dF9rZXkgOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNba10pKS0+bmV4dF9rZXkpKTsKICAg
ICAgICAgfQogICAgICB9CiAgICAgIGlmICggKChmaWxlLT5vbmU9PTEgPyBmaWxlLT5zdWJ2ZXJz
aW9uIDogc3dhcGZpbnQoZmlsZS0+c3VidmVyc2lvbikpPDIpIHx8CiAgICAgICAgICAgKChmaWxl
LT5vbmU9PTEgPyBmaWxlLT5uaXRlbXMgOiBzd2FwZmludChmaWxlLT5uaXRlbXMpKSE9bml0ZW1z
KSApIHsKICAgICAgICAgKGZpbGUpLT5uaXRlbXMgPSAob25lPT0xID8gbml0ZW1zIDogc3dhcGZp
bnQobml0ZW1zKSk7CiAgICAgICAgIChmaWxlKS0+c3VidmVyc2lvbiA9IChvbmU9PTEgPyAyIDog
c3dhcGZpbnQoMikpOwoKICAgICAgICAgaWYgKCEoY3VycmVudCktPmNoYW5nZWQgJiYgIShjdXJy
ZW50KS0+cmVhZG9ubHkpIChjdXJyZW50KS0+Y2hhbmdlZCA9IFNjaGVkdWxlVGltZXIodXBkYXRl
ciwoNSAqNjAgKjEwMDAgKjEpLGN1cnJlbnQpOwogICAgICB9CiAgICAgIGN1cnJlbnQtPnNhZmUr
KzsKICAgfQoKCgogICBpZiAobWF4cmVjID4gKGZpbGUtPm9uZT09MSA/IGZpbGUtPm1heHJlYyA6
IHN3YXBmaW50KGZpbGUtPm1heHJlYykpKSB7CiAgICAgIGZpbGUtPm1heHJlYyA9IChmaWxlLT5v
bmU9PTEgPyBtYXhyZWMgOiBzd2FwZmludChtYXhyZWMpKTsKCiAgICAgIGlmICghKGN1cnJlbnQp
LT5jaGFuZ2VkICYmICEoY3VycmVudCktPnJlYWRvbmx5KSAoY3VycmVudCktPmNoYW5nZWQgPSBT
Y2hlZHVsZVRpbWVyKHVwZGF0ZXIsKDUgKjYwICoxMDAwICoxKSxjdXJyZW50KTsKICAgfQoKCgog
ICB7CiAgICAgIHVuaW9uIHsKICAgICAgICAgZmludCBpOwogICAgICAgICBjaGFyIGJbc2l6ZW9m
KGZpbnQpXTsKICAgICAgfSB1OwogICAgICB1LmkgPSBmaWxlLT5vc2RlcDsKICAgICAgY3VycmVu
dC0+ZnR5cGUgPSB1LmJbMF07CiAgIH0KCgoKICAgY3VycmVudC0+aXR5cGUgPSAxOwogICBpZiAo
ZmlsZS0+b25lICE9IDEpIGN1cnJlbnQtPml0eXBlID0gIWN1cnJlbnQtPml0eXBlOwogICByZXR1
cm4gMDsKfQoKCgoKCgpzdGF0aWMgdm9pZCBJbml0RGVzY3IoZGVzY3IgY3VycmVudCwgZmludCBw
cmltZSkKewogICBkc2NmaWxlIGZpbGU9KGRzY2ZpbGUpY3VycmVudC0+ZmlsZTsKCiAgIGZpbGUt
PmguZnJlZSA9IDA7CiAgIGZpbGUtPmgucmVjX3N0YXJ0ID0KICAgICAgICAgICAgICAgICAgICAg
ICggc2l6ZW9mKF9kc2NmaWxlKQogICAgICAgICAgICAgICAgICAgICAgK3NpemVvZihmaW50KSoo
cHJpbWUtMSkKICAgICAgICAgICAgICAgICAgICAgICtzaXplb2YoX3JlY29yZCktMSApCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9zaXplb2YoX3JlY29yZCk7CiAg
IGZpbGUtPmgubml0ZW1zID0gMDsKICAgZmlsZS0+aC5tYXhyZWMgPSAwOwogICBmaWxlLT5oLm5f
YWxsb2MgPSBmaWxlLT5oLnJlY19zdGFydDsKICAgZmlsZS0+aC5uX2J1Y2sgPSBwcmltZTsKICAg
Zm9yICggOyAwPHByaW1lLS07IGZpbGUtPmguaGFzaF90YWJbcHJpbWVdID0gMCApOwoKICAgZmls
ZS0+aC52ZXJzaW9uID0gMjsKICAgZmlsZS0+aC5zdWJ2ZXJzaW9uID0gMjsKICAgewogICAgICB1
bmlvbiB7CiAgICAgICBmaW50IGw7CiAgICAgICBjaGFyIGJbc2l6ZW9mKGZpbnQpXTsKICAgICAg
fSB1OwoKICAgICAgZmlsZS0+aC5vbmUgPSAxOwogICAgICB1LmwgPSAwOwogICAgICB1LmJbMF0g
PSAxOwogICAgICBmaWxlLT5oLm9zZGVwID0gdS5sOwogICB9CiAgIGZpbGUtPmgubmF4aXMgPSAw
OwogICBmaWxlLT5oLmF4X2ZhY3RvclswXSA9IDE7CiAgICh2b2lkKUNoZWNrRGVzY3IoY3VycmVu
dCk7CgogICBpZiAoIShjdXJyZW50KS0+Y2hhbmdlZCAmJiAhKGN1cnJlbnQpLT5yZWFkb25seSkg
KGN1cnJlbnQpLT5jaGFuZ2VkID0gU2NoZWR1bGVUaW1lcih1cGRhdGVyLCg1ICo2MCAqMTAwMCAq
MSksY3VycmVudCk7Cn0KCgoKCgoKCnN0YXRpYyB2b2lkIHVwZGF0ZXIoaWRlbnQgaWQsIGRlc2Ny
IGN1cnJlbnQpCnsKICAgaWYgKCFjdXJyZW50LT5sb2NrKSBVcGRhdGVEZXNjcihjdXJyZW50LCAx
KTsKfQojIDExMTcgImRlc2NyLmMiCnN0YXRpYyBpbnQgQWxsb2NhdGUoZGVzY3Igc2V0KQp7CiAg
IGhlYWRlciBoZWFkPShoZWFkZXIpc2V0LT5maWxlOwogICByZWNvcmQgcmVjcz0ocmVjb3JkKXNl
dC0+ZmlsZTsKICAgaW50IG9uZT1oZWFkLT5vbmU7CiAgIGludCBhbGxvYzsKICAgaW50IHJlc3Vs
dD0wOwoKICAgaWYgKGhlYWQtPmZyZWUpIHsKICAgICAgcmVzdWx0ID0gKG9uZT09MSA/IGhlYWQt
PmZyZWUgOiBzd2FwZmludChoZWFkLT5mcmVlKSk7CiAgICAgIChoZWFkKS0+ZnJlZSA9IChvbmU9
PTEgPyAob25lPT0xID8oKGV4dGhlYWQpJihyZWNzW3Jlc3VsdF0pKS0+a2V5X2luZCA/ICgoa2V5
aGVhZCkmKHJlY3NbcmVzdWx0XSkpLT5uZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY3NbcmVzdWx0
XSkpLT5uZXh0X2V4dCA6IHN3YXBmaW50KCgoZXh0aGVhZCkmKHJlY3NbcmVzdWx0XSkpLT5rZXlf
aW5kID8gKChrZXloZWFkKSYocmVjc1tyZXN1bHRdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYo
cmVjc1tyZXN1bHRdKSktPm5leHRfZXh0KSkgOiBzd2FwZmludCgob25lPT0xID8oKGV4dGhlYWQp
JihyZWNzW3Jlc3VsdF0pKS0+a2V5X2luZCA/ICgoa2V5aGVhZCkmKHJlY3NbcmVzdWx0XSkpLT5u
ZXh0X2V4dCA6ICgoZXh0aGVhZCkmKHJlY3NbcmVzdWx0XSkpLT5uZXh0X2V4dCA6IHN3YXBmaW50
KCgoZXh0aGVhZCkmKHJlY3NbcmVzdWx0XSkpLT5rZXlfaW5kID8gKChrZXloZWFkKSYocmVjc1ty
ZXN1bHRdKSktPm5leHRfZXh0IDogKChleHRoZWFkKSYocmVjc1tyZXN1bHRdKSktPm5leHRfZXh0
KSkpKTsKICAgfSBlbHNlIHsKICAgICAgYWxsb2MgPSAob25lPT0xID8gaGVhZC0+bl9hbGxvYyA6
IHN3YXBmaW50KGhlYWQtPm5fYWxsb2MpKTsKICAgICAgaWYgKGFsbG9jIDwgKG9uZT09MSA/IGhl
YWQtPm1heHJlYyA6IHN3YXBmaW50KGhlYWQtPm1heHJlYykpKSB7CiAgICAgICAgIHJlc3VsdCA9
ICsrYWxsb2M7CiAgICAgICAgIChoZWFkKS0+bl9hbGxvYyA9IChvbmU9PTEgPyBhbGxvYyA6IHN3
YXBmaW50KGFsbG9jKSk7CiAgICAgIH0KICAgfQoKICAgcmV0dXJuIHJlc3VsdDsKfQojIDExNTQg
ImRlc2NyLmMiCnN0YXRpYyB2b2lkIERlYWxsb2NhdGUoZGVzY3Igc2V0LCBpbnQgYnVjaywgaW50
IHJlYywgaW50IHByZXYpCnsKICAgaGVhZGVyIGhlYWQ9KGhlYWRlcilzZXQtPmZpbGU7CiAgIHJl
Y29yZCByZWNzPShyZWNvcmQpc2V0LT5maWxlOwogICBpbnQgb25lPWhlYWQtPm9uZTsKICAgaW50
IGxhc3Q7CgogICBpZiAocHJldj09MCkgewogICAgICBoZWFkLT5oYXNoX3RhYltidWNrXSA9IHJl
Y3NbcmVjXS5rZXkuaC5uZXh0X2tleTsKICAgfSBlbHNlIHsKICAgICAgcmVjc1twcmV2XS5rZXku
aC5uZXh0X2tleSA9IHJlY3NbcmVjXS5rZXkuaC5uZXh0X2tleTsKICAgfQoKICAgbGFzdCA9IChv
bmU9PTEgPyAoKGtleWhlYWQpJihyZWNzW3JlY10pKS0+bGFzdF9leHQgOiBzd2FwZmludCgoKGtl
eWhlYWQpJihyZWNzW3JlY10pKS0+bGFzdF9leHQpKTsKICAgcmVjc1tyZWNdLmV4dC5oLm5leHRf
ZXh0ID0gcmVjc1tyZWNdLmtleS5oLm5leHRfZXh0OwogICByZWNzW2xhc3RdLmV4dC5oLm5leHRf
ZXh0ID0gaGVhZC0+ZnJlZTsKICAgKGhlYWQpLT5mcmVlID0gKG9uZT09MSA/IHJlYyA6IHN3YXBm
aW50KHJlYykpOwogICAoaGVhZCktPm5pdGVtcyA9IChvbmU9PTEgPyAoIChvbmU9PTEgP2hlYWQt
Pm5pdGVtcyA6IHN3YXBmaW50KGhlYWQtPm5pdGVtcykpLTEpIDogc3dhcGZpbnQoKCAob25lPT0x
ID9oZWFkLT5uaXRlbXMgOiBzd2FwZmludChoZWFkLT5uaXRlbXMpKS0xKSkpOwogICByZWNzW3Jl
Y10uZXh0Lmgua2V5X2luZCA9IDA7Cgp9CiMgMTE4NyAiZGVzY3IuYyIKc3RhdGljIHZvaWQgSW5z
ZXJ0S2V5UmVjKGRlc2NyIHNldCwgaW50IGJ1Y2ssIGludCByZWNubywgaW50IHByZXYpCnsKICAg
ZHNjZmlsZSBmaWxlPShkc2NmaWxlKXNldC0+ZmlsZTsKCiAgIGlmIChwcmV2KSB7CiAgICAgZmls
ZS0+cltyZWNub10ua2V5LmgubmV4dF9rZXkgPSBmaWxlLT5yW3ByZXZdLmtleS5oLm5leHRfa2V5
OwogICAgIGZpbGUtPnJbcHJldl0ua2V5LmgubmV4dF9rZXkgPSAoZmlsZS0+aC5vbmU9PTEgPyBy
ZWNubyA6IHN3YXBmaW50KHJlY25vKSk7CiAgIH0gZWxzZSB7CiAgICAgZmlsZS0+cltyZWNub10u
a2V5LmgubmV4dF9rZXkgPSBmaWxlLT5oLmhhc2hfdGFiW2J1Y2tdOwogICAgIGZpbGUtPmguaGFz
aF90YWJbYnVja10gPSAoZmlsZS0+aC5vbmU9PTEgPyByZWNubyA6IHN3YXBmaW50KHJlY25vKSk7
CiAgIH0KCn0KIyAxMjExICJkZXNjci5jIgpzdGF0aWMgdm9pZCBJbnNlcnRFeHRSZWMoZGVzY3Ig
c2V0LCBpbnQgcmVjbm8sIGludCBwcmV2KQp7CiAgIGRzY2ZpbGUgZmlsZT0oZHNjZmlsZSlzZXQt
PmZpbGU7CgogICBmaWxlLT5yW3JlY25vXS5leHQuaC5uZXh0X2V4dCA9IDA7CiAgIGZpbGUtPnJb
cmVjbm9dLmV4dC5oLmtleV9pbmQgPSAwOwogICBpZiAoZmlsZS0+cltwcmV2XS5rZXkuaC5rZXlf
aW5kKSB7CiAgICAgIGZpbGUtPnJbcHJldl0ua2V5LmgubmV4dF9leHQgPSAoZmlsZS0+aC5vbmU9
PTEgPyByZWNubyA6IHN3YXBmaW50KHJlY25vKSk7CiAgIH0gZWxzZSB7CiAgICAgIGZpbGUtPnJb
cHJldl0uZXh0LmgubmV4dF9leHQgPSAoZmlsZS0+aC5vbmU9PTEgPyByZWNubyA6IHN3YXBmaW50
KHJlY25vKSk7CiAgIH0KCn0KIyAxMjM4ICJkZXNjci5jIgpzdGF0aWMgaW50IEhhc2goY2hhciBu
YW1lW10sZmludCBjb29yZCxpbnQgcHJpbWUpCnsKICAgY29uc3QgbWF4bGVuPTE1OwogICBmaW50
IGg7CiAgIGludCBpOwoKICAgaCA9IG5hbWVbMF07CiAgIGZvciggaT0xIDsgaTxtYXhsZW4gJiYg
bmFtZVtpXSE9MDsgaSsrKSBoID0gMipoICsgbmFtZVtpXTsKICAgcmV0dXJuICgoaCAlIHByaW1l
KStjb29yZCkgJSBwcmltZTsKfQojIDEyNjcgImRlc2NyLmMiCnN0YXRpYyB2b2lkIEZpbmRJdGVt
KGRzY2ZpbGUgZmlsZSwgY2hhciAqbmFtZSwgZmludCBsZXZlbCwgaW50ICpidWNrbm8sCiAgICAg
ICAgICAgICAgICAgICAgIGludCAqY3VycmVudCwgaW50ICpwcmV2aW91cykKewogICBoZWFkZXIg
aGVhZD0oaGVhZGVyKWZpbGU7CiAgIHJlY29yZCByZWNzPShyZWNvcmQpZmlsZTsKICAgaW50IG9u
ZT1oZWFkLT5vbmU7CgogICAqcHJldmlvdXMgPSAwOwogICAqYnVja25vID0gSGFzaChuYW1lLGxl
dmVsLChvbmU9PTEgPyBoZWFkLT5uX2J1Y2sgOiBzd2FwZmludChoZWFkLT5uX2J1Y2spKSk7CiAg
ICpjdXJyZW50ID0gKG9uZT09MSA/IGhlYWQtPmhhc2hfdGFiWypidWNrbm9dIDogc3dhcGZpbnQo
aGVhZC0+aGFzaF90YWJbKmJ1Y2tub10pKTsKICAgd2hpbGUgKCpjdXJyZW50ICE9IDApIHsKICAg
ICAgaWYgKGxldmVsPT0ob25lPT0xID8gKChrZXloZWFkKSYocmVjc1sqY3VycmVudF0pKS0+bGV2
ZWwgOiBzd2FwZmludCgoKGtleWhlYWQpJihyZWNzWypjdXJyZW50XSkpLT5sZXZlbCkpCiAgICAg
ICAgICAmJiAhc3RyY21wKG5hbWUscmVjc1sqY3VycmVudF0ua2V5LmgubmFtZSkpIGJyZWFrOwog
ICAgICAqcHJldmlvdXMgPSAqY3VycmVudDsKICAgICAgKmN1cnJlbnQgPSAob25lPT0xID8gKChr
ZXloZWFkKSYocmVjc1sqY3VycmVudF0pKS0+bmV4dF9rZXkgOiBzd2FwZmludCgoKGtleWhlYWQp
JihyZWNzWypjdXJyZW50XSkpLT5uZXh0X2tleSkpOwogICB9Cn0KIyAxMjk3ICJkZXNjci5jIgpz
dGF0aWMgZmludCBIaWdoZXIoZHNjZmlsZSBzZXQsIGZpbnQgbGV2ZWwsIGZpbnQgKmN0cmwpCnsK
ICAgaGVhZGVyIGhlYWQ9KGhlYWRlcilzZXQ7CiAgIHN0YXRpYyBmaW50IGNvb3JkWzIwXTsKICAg
c3RhdGljIGludCBheG51bVsyMF07CiAgIHN0YXRpYyBpbnQgbmF4ZGVmLCBuZHRyeTsKICAgaW50
IG1hc2s7CiAgIGludCBvbmU9aGVhZC0+b25lOwogICBmaW50IGksIGxldl9vdXQ7CgoKCgogICBp
ZiAoKmN0cmw8MCkgewogICAgICBmaW50IG5heGlzOwogICAgICBpbnQgaiwgY3VyYXg7CiAgICAg
IG5heGRlZiA9IDA7CiAgICAgIG5heGlzID0gKG9uZT09MSA/IGhlYWQtPm5heGlzIDogc3dhcGZp
bnQoaGVhZC0+bmF4aXMpKTsKICAgICAgZm9yICggaj0wOyBqIDwgbmF4aXM7IGorKyApIHsKICAg
ICAgICAgY3VyYXggPSAobGV2ZWwgJSAob25lPT0xID8gc2V0LT5oLmF4X2ZhY3RvcltqKzFdIDog
c3dhcGZpbnQoc2V0LT5oLmF4X2ZhY3RvcltqKzFdKSkpIC8KICAgICAgICAgICAgKG9uZT09MSA/
IHNldC0+aC5heF9mYWN0b3Jbal0gOiBzd2FwZmludChzZXQtPmguYXhfZmFjdG9yW2pdKSk7CiAg
ICAgICAgIGlmIChjdXJheCkgewogICAgICAgICAgICBheG51bVtuYXhkZWZdID0gajsKICAgICAg
ICAgICAgY29vcmRbbmF4ZGVmKytdID0gY3VyYXg7CiAgICAgICAgIH0KICAgICAgfQogICAgICBp
ZiAobmF4ZGVmPDIpIHJldHVybiAoZmludCkwOwogICAgICBuZHRyeSA9IG5heGRlZjsKICAgICAg
KmN0cmwgPSAwOwogICB9CgoKCgoKCiAgIGRvIHsKICAgICAgaWYgKCpjdHJsPT0wKSB7CiAgICAg
ICAgIG5kdHJ5LS07CiAgICAgIH0KICAgICAgbWFzayA9IDA7CiAgICAgIGZvciAoaT0qY3RybDsg
aTwgKDE8PG5heGRlZik7IGkrKykgewogICAgICAgICBpZiAobmJpdHNfYygmaSk9PW5kdHJ5KSB7
CiAgICAgICAgICAgIG1hc2sgPSBpOwogICAgICAgICAgICpjdHJsID0gKGkrMSklKDE8PG5heGRl
Zik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG1hc2sp
IGJyZWFrOwogICAgICAqY3RybCA9IDA7CiAgIH0gd2hpbGUgKG5kdHJ5PjApOwoKCgoKICBsZXZf
b3V0ID0gMDsKICBmb3IgKGk9MDsgaTxuYXhkZWY7IGkrKykgewogICAgIGlmIChtYXNrJjEpIGxl
dl9vdXQgKz0gY29vcmRbaV0gKiAob25lPT0xID8gc2V0LT5oLmF4X2ZhY3RvcltheG51bVtpXV0g
OiBzd2FwZmludChzZXQtPmguYXhfZmFjdG9yW2F4bnVtW2ldXSkpOwogICAgIG1hc2sgPSBtYXNr
Pj4xOwogIH0KICByZXR1cm4gbGV2X291dDsKfQojIDEzNjcgImRlc2NyLmMiCnN0YXRpYyBpbnQg
TGV2Q21wKGRzY2ZpbGUgc2V0LCBmaW50IGxldmVsMSwgZmludCBsZXZlbDIpCnsKICAgZmludCBj
dHJsPS0xOwoKICAgaWYgKGxldmVsMT09bGV2ZWwyKSByZXR1cm4gMDsKCiAgIHdoaWxlIChsZXZl
bDIpIHsKICAgICAgbGV2ZWwyID0gSGlnaGVyKHNldCwgbGV2ZWwyLCAmY3RybCk7CiAgICAgIGlm
IChsZXZlbDEgPT0gbGV2ZWwyKSByZXR1cm4gKzE7CiAgIH0KCiAgIHJldHVybiAtMTsKfQo=

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]