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] |
>Number: 1519 >Category: c++ >Synopsis: compiler error while building qt program under rh7.0 >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Dec 27 18:46:01 PST 2000 >Closed-Date: >Last-Modified: >Originator: John Spooner >Release: 2.96 20000731 Red Hat 7.0 >Organization: >Environment: Red Hat 7. (Digital Hi Note Pentium ii laptop) >Description: I cannot build the program when adding a slot and including the .moc fle internal error 20000116 at class.c line 5102 >How-To-Repeat: g++ -save-temps -lqt -slots.cpp -o slots >Fix: chuck gcc and use java >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="slots.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="slots.ii" IyAxICJzbG90cy5jcHAiCgojIDIgInNsb3RzLmgiIDEKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMTEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMg MzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDE5OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwp0eXBlZGVmIHVuc2lnbmVk IGludCBzaXplX3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMi IHsKCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAg IGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJf bWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIg Kl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50 IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCiMgMTYzICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRv dWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg ICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3Eg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgdGhyb3cgKCk7CiMgMjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJs ZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAg IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50 IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy b3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRl cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAg IHRocm93ICgpOwojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICps NjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2Nv bnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCiMg MjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCmV4dGVybiAiQyIgewoKCiMgMzAgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBf X2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRf dCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2lu dCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lu b190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlw ZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25n IF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50 IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lk X3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlw ZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190 Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Js a190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lk X3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50 IF9fZmRfbWFzazsKCgojIDEwOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVm IHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgLyAoOCAqIHNp emVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90 OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxv bmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBl ZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRf dDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0 eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf X3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgoKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5 cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKc3RydWN0IF9f c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9p bmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9j awp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVm IHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBz dHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwog IGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0 OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0 dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2Nf bG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoK dHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0 eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsK ICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19t X293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xv Y2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhr aW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90 OwoKCiMgMTQwICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCiMgMTY2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9f dV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50 IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7 CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoK dHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA1OCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5 cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlw ZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0 eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgOTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0 eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRl ZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVk ZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMjcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5 cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwoKIyA5MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg Mwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwoKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0 Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE4NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlf XykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElf XykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf XykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElf XykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMy X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVk ZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsK CgoKCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIwNyAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMSAzCgoKCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKdHlwZWRlZiBp bnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxv bmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsK ICB9IF9fc2lnc2V0X3Q7CgojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoK CiMgMTA1ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAg bG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwoKIyAzOSAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZh bDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7 CgoKIyA3NCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gaW50IHNlbGVjdCAo aW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAg ICAgICAgX19mZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAg IF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCiMgOTIgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKfQoKIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzCgoKCiMgMjI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Js a2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0 eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NiAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCn0KCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRl cm4gaW50MzJfdCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20g KHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3Rh dGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNl dHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21f ZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJf dCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJh bmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAo c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg ICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3Jh bmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo YXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIg Kl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFu ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFu ZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2Vl ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpl eHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBs b25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBp bnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1 bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz XSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3Bh cmFtWzddKSB0aHJvdyAoKTsKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQg c2hvcnQgaW50IHhbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYVszXTsKICAgIHVuc2lnbmVk IHNob3J0IGludCBjOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOwogICAgaW50IGlu aXQ7CiAgfTsKCgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hv cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpf X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBu cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0 IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19z ZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAo KTsKIyA1MjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChz aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0 ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVh bGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCgojIDI2ICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQg KmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1NDYgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXpl KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19m dW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpf X2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhy b3cgKCk7CmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywg dm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9p ZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu X18pKTsKCiMgNTg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1 cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVw bGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCB1bnNldGVudiAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJv dyAoKTsKIyA2MjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1w IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChj aGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCiMg NjYyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg Kl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19j b21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKCgoKCgoKZXh0 ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19i YXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUs IF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19i YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9f Y29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9u ZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzAwICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu dCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MTggIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJv dyAoKTsKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNo YXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwK ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFl Y3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRo cm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2Nv bnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2Mg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdj dG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6 ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25z dCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVs ZW0pIHRocm93ICgpOwoKCgoKCn0KCiMgMiAic2xvdHMuaCIgMgoKIyAzMyAiL3Vzci9saWIvcXQt Mi4yLjAvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMSAzCiMgMzMgIi91c3IvbGliL3F0LTIuMi4w L2luY2x1ZGUvcXdpZGdldC5oIiAxIDMKIyAzNCAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9x d2luZG93ZGVmcy5oIiAxIDMKIyAzMyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xb2JqZWN0 ZGVmcy5oIiAxIDMKIyAzMTIgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcWdsb2JhbC5oIiAx IDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVz aG9ydDsKdHlwZWRlZiB1bnNpZ25lZCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7 CnR5cGVkZWYgY2hhciAqcGNoYXI7CnR5cGVkZWYgdWNoYXIgKnB1Y2hhcjsKdHlwZWRlZiBjb25z dCBjaGFyICpwY2NoYXI7CgoKCgoKCgpjb25zdCBib29sIEZBTFNFID0gMDsKY29uc3QgYm9vbCBU UlVFID0gITA7CiMgMzUwICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FnbG9iYWwuaCIgMwpp bmxpbmUgaW50IHFSb3VuZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChk KzAuNSkgOiBpbnQoZC0wLjUpOwp9CiMgMzYyICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3Fn bG9iYWwuaCIgMwoKdHlwZWRlZiBzaWduZWQgY2hhciBJTlQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNo YXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQgSU5UMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlO VDE2Owp0eXBlZGVmIGludCBJTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOwoKCnR5 cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUV9VSU5UODsK dHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFFfVUlOVDE2Owp0 eXBlZGVmIGludCBRX0lOVDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBRX1VJTlQzMjsKdHlwZWRl ZiBsb25nIFFfSU5UNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBRX1VJTlQ2NDsKCgoKCgpjbGFz cyBRRGF0YVN0cmVhbTsKCgoKCgoKCgoKIyAzNiAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9x ZmVhdHVyZXMuaCIgMSAzCiMgMzk0ICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FnbG9iYWwu aCIgMiAzCiMgNDMxICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FnbG9iYWwuaCIgMwogY29u c3QgY2hhciAqcVZlcnNpb24oKTsKIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNpemUsIGJvb2wg KmJpZ0VuZGlhbiApOwoKCgoKCgojIDQ5MyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xZ2xv YmFsLmgiIDMKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1 dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxV2FybmluZyggY29uc3Qg Y2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikp KQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVf XyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgoKCgoKCgogdm9pZCBkZWJ1ZyggY29uc3Qg Y2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikp KQoKOwoKIHZvaWQgd2FybmluZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRl X18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZvaWQgZmF0YWwoIGNvbnN0IGNoYXIg KiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsK CgojIDU1MiAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xZ2xvYmFsLmgiIDMKIGJvb2wgcXRf Y2hlY2tfcG9pbnRlciggYm9vbCBjLCBjb25zdCBjaGFyICosIGludCApOwoKCgoKCgoKZW51bSBR dE1zZ1R5cGUgeyBRdERlYnVnTXNnLCBRdFdhcm5pbmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5cGVk ZWYgdm9pZCAoKm1zZ19oYW5kbGVyKShRdE1zZ1R5cGUsIGNvbnN0IGNoYXIgKik7CiBtc2dfaGFu ZGxlciBxSW5zdGFsbE1zZ0hhbmRsZXIoIG1zZ19oYW5kbGVyICk7CgoKIHZvaWQgcVN1cHByZXNz T2Jzb2xldGVXYXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCgoKIHZvaWQgcU9ic29sZXRlKCBjb25z dCBjaGFyICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpuZXdmdW5jICk7CiB2b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2Jq LCBjb25zdCBjaGFyICpvbGRmdW5jICk7CiB2b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqbWVz c2FnZSApOwojIDMzICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FvYmplY3RkZWZzLmgiIDIg MwojIDEwNiAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xb2JqZWN0ZGVmcy5oIiAzCmNsYXNz IFFPYmplY3Q7CmNsYXNzIFFNZXRhT2JqZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVj dGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxp c3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlzdEl0OwpjbGFzcyBRU2lnbmFsRGljdDsKY2xhc3MgUVNp Z25hbERpY3RJdDsKY2xhc3MgUU9iamVjdExpc3Q7CmNsYXNzIFFPYmplY3RMaXN0SXQ7CmNsYXNz IFFNZW1iZXJEaWN0OwoKCiMgMzQgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXdpbmRvd2Rl ZnMuaCIgMiAzCgojIDM0ICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FzdHJpbmcuaCIgMSAz CiMgMzQgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcWNzdHJpbmcuaCIgMSAzCiMgMzMgIi91 c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcWFycmF5LmgiIDEgMwojIDMzICIvdXNyL2xpYi9xdC0y LjIuMC9pbmNsdWRlL3FnYXJyYXkuaCIgMSAzCiMgMzYgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1 ZGUvcXNoYXJlZC5oIiAxIDMKc3RydWN0IFFTaGFyZWQKewogICAgUVNoYXJlZCgpIHsgY291bnQg PSAxOyB9CiAgICB2b2lkIHJlZigpIHsgY291bnQrKzsgfQogICAgYm9vbCBkZXJlZigpIHsgcmV0 dXJuICEtLWNvdW50OyB9CiAgICB1aW50IGNvdW50Owp9OwoKCiMgMzMgIi91c3IvbGliL3F0LTIu Mi4wL2luY2x1ZGUvcWdhcnJheS5oIiAyIDMKCgoKY2xhc3MgUUdBcnJheQp7CmZyaWVuZCBjbGFz cyBRQnVmZmVyOwpwdWJsaWM6CgogICAgc3RydWN0IGFycmF5X2RhdGEgOiBwdWJsaWMgUVNoYXJl ZCB7CiAgICAgICAgYXJyYXlfZGF0YSgpIHsgZGF0YT0wOyBsZW49MDsgfQogICAgICAgIGNoYXIg KmRhdGE7CiAgICAgICAgdWludCBsZW47CiAgICB9OwogICAgUUdBcnJheSgpOwpwcm90ZWN0ZWQ6 CiAgICBRR0FycmF5KCBpbnQsIGludCApOwogICAgUUdBcnJheSggaW50IHNpemUgKTsKICAgIFFH QXJyYXkoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIHZpcnR1YWwgflFHQXJyYXkoKTsKCiAgICBR R0FycmF5ICZvcGVyYXRvcj0oIGNvbnN0IFFHQXJyYXkgJmEgKSB7IHJldHVybiBhc3NpZ24oIGEg KTsgfQoKICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKSB7IGR1cGxpY2F0ZSgqdGhpcyk7IH0KCiAg ICBjaGFyICpkYXRhKCkgY29uc3QgeyByZXR1cm4gc2hkLT5kYXRhOyB9CiAgICB1aW50IG5yZWZz KCkgY29uc3QgeyByZXR1cm4gc2hkLT5jb3VudDsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyBy ZXR1cm4gc2hkLT5sZW47IH0KICAgIGJvb2wgaXNFcXVhbCggY29uc3QgUUdBcnJheSAmYSApIGNv bnN0OwoKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwoIGNv bnN0IGNoYXIgKmQsIGludCBsZW4sIHVpbnQgc3ogKTsKCiAgICBRR0FycmF5ICZhc3NpZ24oIGNv bnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmFzc2lnbiggY29uc3QgY2hhciAqZCwgdWlu dCBsZW4gKTsKICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgUUdBcnJheSAmYSApOwogICAg UUdBcnJheSAmZHVwbGljYXRlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgdm9pZCBz dG9yZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBhcnJheV9kYXRhICpzaGFyZWRC bG9jaygpIGNvbnN0IHsgcmV0dXJuIHNoZDsgfQogICAgdm9pZCBzZXRTaGFyZWRCbG9jayggYXJy YXlfZGF0YSAqcCApIHsgc2hkPShhcnJheV9kYXRhKilwOyB9CgogICAgUUdBcnJheSAmc2V0UmF3 RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgcmVzZXRSYXdEYXRhKCBj b25zdCBjaGFyICpkLCB1aW50IGxlbiApOwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyICpkLCB1 aW50IGluZGV4LCB1aW50IHN6ICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIg KmQsIHVpbnQgc3ogKSBjb25zdDsKCiAgICB2b2lkIHNvcnQoIHVpbnQgc3ogKTsKICAgIGludCBi c2VhcmNoKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgY2hhciAqYXQoIHVp bnQgaW5kZXggKSBjb25zdDsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwgY29uc3Qg Y2hhciAqZCwgdWludCBzeiApOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCBhcnJheV9kYXRhICpu ZXdEYXRhKCk7CiAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YSggYXJyYXlfZGF0YSAqcCApOwoK cHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIG1zZ19pbmRleCggdWludCApOwogICAgYXJyYXlfZGF0 YSAqc2hkOwp9OwoKCmlubGluZSBjaGFyICpRR0FycmF5OjphdCggdWludCBpbmRleCApIGNvbnN0 CnsKCiAgICBpZiAoIGluZGV4ID49IHNpemUoKSApIHsKICAgICAgICBtc2dfaW5kZXgoIGluZGV4 ICk7CiAgICAgICAgaW5kZXggPSAwOwogICAgfQoKICAgIHJldHVybiAmc2hkLT5kYXRhW2luZGV4 XTsKfQoKCiMgMzMgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcWFycmF5LmgiIDIgMwoKCgp0 ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1Ymxp YzoKICAgIHR5cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUqIENv bnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAg UUFycmF5KCBpbnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBRQXJy YXkoKSB7fQogICAgUUFycmF5KCBpbnQgc2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0eXBl KSkge30KICAgIFFBcnJheSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9 CiAgIH5RQXJyYXkoKSB7fQogICAgUUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFycmF5 PHR5cGU+ICZhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRQXJy YXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0IHsg cmV0dXJuICh0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3Qg eyByZXR1cm4gUUdBcnJheTo6bnJlZnMoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1 cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVvZih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0 IHsgcmV0dXJuIHNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdB cnJheTo6c2l6ZSgpID09IDA7IH0KICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdB cnJheTo6ZGF0YSgpID09IDA7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJldHVy biBRR0FycmF5OjpyZXNpemUoc2l6ZSpzaXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5jYXRl KCB1aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsg fQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAgICB7 IHJldHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9CiAg ICB2b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBlPiBj b3B5KCkgY29uc3QKICAgICAgICB7IFFBcnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGlj YXRlKCp0aGlzKTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0eXBl PiYgYSApCiAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEp OyB9CiAgICBRQXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAg ICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipz aXplb2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFycmF5 PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBs aWNhdGUoYSk7IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1 aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0 ZSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3RGF0 YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+ JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBy ZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5Ojpy ZXNldFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCggY29u c3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZp bmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25zdCB0 eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hhciop JmQsc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNpemVv Zih0eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAg ICB7IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlwZSkp OyB9CiAgICB0eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4g KHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgdHlw ZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICop UUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25zdCB0 eXBlKigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAg ICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJu IGlzRXF1YWwoYSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+ICZh ICkgY29uc3QgeyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyBy ZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBzaXpl KCk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0K ICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgpOyB9 Cn07CgoKIyAzNCAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xY3N0cmluZy5oIiAyIDMKCgoK IyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKZXh0ZXJuICJDIiB7CgoKCgoKCgoKZXh0 ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpf X3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2Nw eSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny YywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9f Y29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywg aW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgojIDc3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNw eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0 aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z dCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKIyAxMjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAq c3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ry Y2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKIyAxNjcgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAq X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z dCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25z dCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCiMgMTg5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAo Y2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2 ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CiMgMjIwICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAq X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgMjMxICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3Jf ciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsK CgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3Qs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3Mx LCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgojIDI3NiAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl cm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z Miwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK IyAzMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFy ICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKIyAzNjkgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMwp9CgojIDM3ICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3Fjc3RyaW5nLmgiIDIg MwojIDY4ICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3Fjc3RyaW5nLmgiIDMKIHZvaWQgKnFt ZW1tb3ZlKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdWludCBsZW4gKTsKCgoKCgogY2hh ciAqcXN0cmR1cCggY29uc3QgY2hhciAqICk7CgogaW5saW5lIHVpbnQgY3N0cmxlbiggY29uc3Qg Y2hhciAqc3RyICkKeyByZXR1cm4gc3RybGVuKHN0cik7IH0KCiBpbmxpbmUgdWludCBxc3RybGVu KCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiBzdHIgPyBzdHJsZW4oc3RyKSA6IDA7IH0KCiBp bmxpbmUgY2hhciAqY3N0cmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVy biBzdHJjcHkoZHN0LHNyYyk7IH0KCiBpbmxpbmUgY2hhciAqcXN0cmNweSggY2hhciAqZHN0LCBj b25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzcmMgPyBzdHJjcHkoZHN0LCBzcmMpIDogMDsgfQoK IGNoYXIgKnFzdHJuY3B5KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdWludCBsZW4gKTsK CiBpbmxpbmUgaW50IGNzdHJjbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIg KQp7IHJldHVybiBzdHJjbXAoc3RyMSxzdHIyKTsgfQoKIGlubGluZSBpbnQgcXN0cmNtcCggY29u c3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiApCnsgcmV0dXJuIChzdHIxICYmIHN0cjIp ID8gc3RyY21wKHN0cjEsc3RyMikgOiAoaW50KSgobG9uZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0K CiBpbmxpbmUgaW50IGNzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIy LCB1aW50IGxlbiApCnsgcmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxlbik7IH0KCiBpbmxpbmUg aW50IHFzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxl biApCnsgcmV0dXJuIChzdHIxICYmIHN0cjIpID8gc3RybmNtcChzdHIxLHN0cjIsbGVuKSA6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKGxvbmcpc3RyMiAtIChsb25nKXN0cjEpOyB9 CgogaW50IHFzdHJpY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoKIGludCBxc3Ry bmljbXAoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1aW50IGxlbiApOwoKCgoKCgojIDEz NyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xY3N0cmluZy5oIiAzCiBRX1VJTlQxNiBxQ2hl Y2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVpbnQgbGVuICk7CgoKCgoKCgoKdHlwZWRlZiBRQXJyYXk8 Y2hhcj4gUUJ5dGVBcnJheTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0 cmVhbSAmLCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR RGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxNjMgIi91c3IvbGliL3F0LTIuMi4wL2lu Y2x1ZGUvcWNzdHJpbmcuaCIgMwpjbGFzcyBRUmVnRXhwOwoKY2xhc3MgUUNTdHJpbmcgOiBwdWJs aWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30KICAgIFFDU3RyaW5nKCBp bnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZzICkgOiBRQnl0ZUFycmF5 KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3RyaW5nKCBj b25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CgogICAgUUNTdHJpbmcgJm9wZXJhdG9yPSgg Y29uc3QgUUNTdHJpbmcgJnMgKTsKICAgIFFDU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IGNoYXIg KnN0ciApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25z dDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICBib29sIHJlc2l6ZSggdWludCBuZXdsZW4g KTsKICAgIGJvb2wgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CiAgICBib29sIGZpbGwoIGNoYXIgYywg aW50IGxlbiA9IC0xICk7CgogICAgUUNTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFDU3RyaW5n ICZzcHJpbnRmKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOwoKICAgIGludCBmaW5kKCBjaGFy IGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25z dCBjaGFyICpzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBm aW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7CiAgICBpbnQgZmluZFJl diggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmlu ZFJldiggY29uc3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7 CiAgICBpbnQgZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9LTEgKSBjb25zdDsK ICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBj b250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBj b250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdCggdWlu dCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAg UUNTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZmZmZmZmZmKSBjb25zdDsKCiAg ICBRQ1N0cmluZyBsZWZ0SnVzdGlmeSggdWludCB3aWR0aCwgY2hhciBmaWxsPScgJywgYm9vbCB0 cnVuYz1GQUxTRSljb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0SnVzdGlmeSggdWludCB3aWR0aCwg Y2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAgIFFDU3RyaW5nIGxvd2Vy KCkgY29uc3Q7CiAgICBRQ1N0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFDU3RyaW5nIHN0cmlw V2hpdGVTcGFjZSgpIGNvbnN0OwogICAgUUNTdHJpbmcgc2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29u c3Q7CgogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgY2hhciAqICk7CiAg ICBRQ1N0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjaGFyICk7CiAgICBRQ1N0cmluZyAmYXBw ZW5kKCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZwcmVwZW5kKCBjb25zdCBjaGFyICog KTsKICAgIFFDU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRQ1N0 cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IGNoYXIgKiApOwogICAg UUNTdHJpbmcgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAgJiwgY29uc3QgY2hhciAqICk7CgogICAg c2hvcnQgdG9TaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdXNob3J0IHRvVVNob3J0KCBi b29sICpvaz0wICkgY29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAg IHVpbnQgdG9VSW50KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBsb25nIHRvTG9uZyggYm9vbCAq b2s9MCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9MCApIGNvbnN0OwogICAg ZmxvYXQgdG9GbG9hdCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgZG91YmxlIHRvRG91YmxlKCBi b29sICpvaz0wICkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNldFN0ciggY29uc3QgY2hhciAqcyAp OwogICAgUUNTdHJpbmcgJnNldE51bSggc2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVz aG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggaW50ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVt KCB1aW50ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBsb25nICk7CiAgICBRQ1N0cmluZyAmc2V0 TnVtKCB1bG9uZyApOwogICAgUUNTdHJpbmcgJnNldE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGlu dCBwcmVjPTYgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBmPSdnJywgaW50 IHByZWM9NiApOwoKICAgIGJvb2wgc2V0RXhwYW5kKCB1aW50IGluZGV4LCBjaGFyIGMgKTsKCiAg ICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyICooKSBjb25zdDsKICAgIFFDU3RyaW5n ICZvcGVyYXRvcis9KCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3RyaW5nICZvcGVyYXRvcis9 KCBjaGFyIGMgKTsKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVh bSAmLCBjb25zdCBRQ1N0cmluZyAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFT dHJlYW0gJiwgUUNTdHJpbmcgJiApOwoKCgoKCgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpv cGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICkKeyByZXR1cm4gKFFDU3RyaW5nJilhc3NpZ24o IHMgKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBjaGFy ICpzdHIgKQp7IHJldHVybiAoUUNTdHJpbmcmKWR1cGxpY2F0ZSggc3RyLCBxc3RybGVuKHN0cikr MSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gZGF0 YSgpID09IDA7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1 cm4gZGF0YSgpID09IDAgfHwgKmRhdGEoKSA9PSAnXDAnOyB9CgppbmxpbmUgdWludCBRQ1N0cmlu Zzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gcXN0cmxlbiggZGF0YSgpICk7IH0KCmlubGluZSBi b29sIFFDU3RyaW5nOjp0cnVuY2F0ZSggdWludCBwb3MgKQp7IHJldHVybiByZXNpemUocG9zKzEp OyB9CgppbmxpbmUgUUNTdHJpbmcgUUNTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRQ1N0 cmluZyggZGF0YSgpICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnByZXBlbmQoIGNv bnN0IGNoYXIgKnMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFDU3RyaW5nICZR Q1N0cmluZzo6YXBwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsg fQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBzaG9ydCBuICkKeyByZXR1cm4g c2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIHVz aG9ydCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZR Q1N0cmluZzo6c2V0TnVtKCBpbnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5s aW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1aW50IG4gKQp7IHJldHVybiBzZXROdW0o KHVsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGZsb2F0IG4s IGNoYXIgZiwgaW50IHByZWMgKQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSluLGYscHJlYyk7IH0K CmlubGluZSBRQ1N0cmluZzo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QKeyByZXR1cm4g KGNvbnN0IGNoYXIgKilkYXRhKCk7IH0KCgoKCgoKIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNv bnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChz MS5kYXRhKCksczIuZGF0YSgpKSA9PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29u c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0 YSgpLHMyKSA9PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqczEs IGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA9PSAw OyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBR Q1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpICE9IDA7 IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNo YXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpICE9IDA7IH0KCiBpbmxpbmUg Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyBy ZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpICE9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRv cjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0 cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA8IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwo IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMx LmRhdGEoKSxzMikgPCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBjaGFyICpz MSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDwg MDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg Y2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPD0gMDsgfQoKIGlubGlu ZSBib29sIG9wZXJhdG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7 IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPD0gMDsgfQoKIGlubGluZSBib29sIG9wZXJh dG9yPiggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJj bXAoczEuZGF0YSgpLHMyKSA+IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IGNo YXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEo KSkgPiAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUUNTdHJpbmcgJnMxLCBj b25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA+PSAwOyB9Cgog aW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZz MiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+PSAwOyB9CgogaW5saW5lIFFDU3Ry aW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7 CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJu IHRtcDsKfQoKIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwg Y29uc3QgY2hhciAqczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1w ICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNv bnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMx ICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIFFDU3RyaW5nIG9w ZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUUNTdHJpbmcgdG1w KCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUg UUNTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBR Q1N0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1w Owp9CgojIDM0ICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FzdHJpbmcuaCIgMiAzCgoKCgoK CgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hhclJlZjsKCmNsYXNzIFFD aGFyIHsKcHVibGljOgogICAgUUNoYXIoKTsKICAgIFFDaGFyKCBjaGFyIGMgKTsKICAgIFFDaGFy KCB1Y2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIgYywgdWNoYXIgciApOwogICAgUUNoYXIoIGNv bnN0IFFDaGFyJiBjICk7CiAgICBRQ2hhciggdXNob3J0IHJjICk7CiAgICBRQ2hhciggc2hvcnQg cmMgKTsKICAgIFFDaGFyKCB1aW50IHJjICk7CiAgICBRQ2hhciggaW50IHJjICk7CgogICAgc3Rh dGljIGNvbnN0IFFDaGFyIG51bGw7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgcmVwbGFjZW1lbnQ7 CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyTWFyazsKICAgIHN0YXRpYyBjb25zdCBR Q2hhciBieXRlT3JkZXJTd2FwcGVkOwogICAgc3RhdGljIGNvbnN0IFFDaGFyIG5ic3A7CgoKCiAg ICBlbnVtIENhdGVnb3J5CiAgICB7CiAgICAgICAgTm9DYXRlZ29yeSwKCiAgICAgICAgTWFya19O b25TcGFjaW5nLAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywKICAgICAgICBNYXJrX0Vu Y2xvc2luZywKCiAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCwKICAgICAgICBOdW1iZXJfTGV0 dGVyLAogICAgICAgIE51bWJlcl9PdGhlciwKCiAgICAgICAgU2VwYXJhdG9yX1NwYWNlLAogICAg ICAgIFNlcGFyYXRvcl9MaW5lLAogICAgICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGgsCgogICAgICAg IE90aGVyX0NvbnRyb2wsCiAgICAgICAgT3RoZXJfRm9ybWF0LAogICAgICAgIE90aGVyX1N1cnJv Z2F0ZSwKICAgICAgICBPdGhlcl9Qcml2YXRlVXNlLAogICAgICAgIE90aGVyX05vdEFzc2lnbmVk LAoKICAgICAgICBMZXR0ZXJfVXBwZXJjYXNlLAogICAgICAgIExldHRlcl9Mb3dlcmNhc2UsCiAg ICAgICAgTGV0dGVyX1RpdGxlY2FzZSwKICAgICAgICBMZXR0ZXJfTW9kaWZpZXIsCiAgICAgICAg TGV0dGVyX090aGVyLAoKICAgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IsCiAgICAgICAgUHVu Y3R1YXRpb25fRGFzaywKICAgICAgICBQdW5jdHVhdGlvbl9PcGVuLAogICAgICAgIFB1bmN0dWF0 aW9uX0Nsb3NlLAogICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSwKICAgICAgICBQdW5j dHVhdGlvbl9GaW5hbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX090aGVyLAoKICAgICAgICBT eW1ib2xfTWF0aCwKICAgICAgICBTeW1ib2xfQ3VycmVuY3ksCiAgICAgICAgU3ltYm9sX01vZGlm aWVyLAogICAgICAgIFN5bWJvbF9PdGhlcgogICAgfTsKCiAgICBlbnVtIERpcmVjdGlvbgogICAg ewogICAgICAgIERpckwsIERpclIsIERpckVOLCBEaXJFUywgRGlyRVQsIERpckFOLCBEaXJDUywg RGlyQiwgRGlyUywgRGlyV1MsIERpck9OLAogICAgICAgIERpckxSRSwgRGlyTFJPLCBEaXJBTCwg RGlyUkxFLCBEaXJSTE8sIERpclBERiwgRGlyTlNNLCBEaXJCTgogICAgfTsKCiAgICBlbnVtIERl Y29tcG9zaXRpb24KICAgIHsKICAgICAgICBTaW5nbGUsIENhbm9uaWNhbCwgRm9udCwgTm9CcmVh aywgSW5pdGlhbCwgTWVkaWFsLAogICAgICAgIEZpbmFsLCBJc29sYXRlZCwgQ2lyY2xlLCBTdXBl ciwgU3ViLCBWZXJ0aWNhbCwKICAgICAgICBXaWRlLCBOYXJyb3csIFNtYWxsLCBTcXVhcmUsIENv bXBhdCwgRnJhY3Rpb24KICAgIH07CgogICAgZW51bSBKb2luaW5nCiAgICB7CiAgICAgICAgT3Ro ZXJKb2luaW5nLCBEdWFsLCBSaWdodCwgQ2VudGVyCiAgICB9OwoKCgogICAgaW50IGRpZ2l0VmFs dWUoKSBjb25zdDsKICAgIFFDaGFyIGxvd2VyKCkgY29uc3Q7CiAgICBRQ2hhciB1cHBlcigpIGNv bnN0OwoKICAgIENhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Q7CiAgICBEaXJlY3Rpb24gZGlyZWN0 aW9uKCkgY29uc3Q7CiAgICBKb2luaW5nIGpvaW5pbmcoKSBjb25zdDsKICAgIGJvb2wgbWlycm9y ZWQoKSBjb25zdDsKICAgIFFDaGFyIG1pcnJvcmVkQ2hhcigpIGNvbnN0OwogICAgUVN0cmluZyBk ZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWco KSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0IHsgcmV0dXJuIHJ3ID8gMCA6IGNsOyB9 CiAgICB1c2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIChydyA8PCA4KSB8IGNsOyB9CgoK ICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29s IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50 KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3QoKSBjb25zdDsKICAgIGJvb2wgaXNTcGFjZSgpIGNv bnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0ZXIoKSBjb25zdDsK ICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0ZXJPck51bWJlcigpIGNv bnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3Q7CgogICAgdWNoYXImIGNlbGwoKSB7IHJldHVy biBjbDsgfQogICAgdWNoYXImIHJvdygpIHsgcmV0dXJuIHJ3OyB9CiAgICB1Y2hhciBjZWxsKCkg Y29uc3QgeyByZXR1cm4gY2w7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHJ3OyB9 CgogICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVyZWQoKSB7IHJldHVybiAoaW50KW5ldF9vcmRl cmVkID09IDE7IH0KCiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09KCBjaGFyIGNoLCBR Q2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09KCBRQ2hhciBjLCBjaGFy IGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIg YzIgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFDaGFyIGMxLCBRQ2hhciBj MiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggY2hhciBjaCwgUUNoYXIgYyAp OwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIgYywgY2hhciBjaCApOwog ICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYywgY2hhciBjaCApOwogICAg ZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJp ZW5kIGlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFyIGMyICk7Cgpwcml2YXRl OgoKCgogICAgdWNoYXIgcnc7CiAgICB1Y2hhciBjbDsKCgoKICAgIGVudW0geyBuZXRfb3JkZXJl ZCA9IDEgfTsKIyAxOTIgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXN0cmluZy5oIiAzCn07 CgppbmxpbmUgUUNoYXI6OlFDaGFyKCkKewogICAgcncgPSAwOyBjbCA9IDA7CgoKCn0KaW5saW5l IFFDaGFyOjpRQ2hhciggY2hhciBjICkKewogICAgcncgPSAwOyBjbCA9ICh1Y2hhciljOwoKCgp9 CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMgKQp7CiAgICBydyA9IDA7IGNsID0gYzsKCgoK fQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICkKewogICAgcncgPSByOyBj bCA9IGM7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggY29uc3QgUUNoYXImIGMgKQp7CiAgICBy dyA9IGMucnc7IGNsID0gYy5jbDsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMg KQp7CiAgICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYp OwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHNob3J0IHJjICkKewogICAgcncgPSAodWNoYXIp KChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6 OlFDaGFyKCB1aW50IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0g KHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQgcmMgKQp7CiAg ICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9 CgoKaW5saW5lIGludCBvcGVyYXRvcj09KCBjaGFyIGNoLCBRQ2hhciBjICkKewogICAgcmV0dXJu IGNoID09IGMuY2wgJiYgIWMucnc7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I9PSggUUNoYXIgYywg Y2hhciBjaCApCnsKICAgIHJldHVybiBjaCA9PSBjLmNsICYmICFjLnJ3Owp9CgppbmxpbmUgaW50 IG9wZXJhdG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5jbCA9PSBj Mi5jbAogICAgICAgICYmIGMxLnJ3ID09IGMyLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0o IFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5jbCAhPSBjMi5jbAogICAgICAg IHx8IGMxLnJ3ICE9IGMyLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFD aGFyIGMgKQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9w ZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBj LnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICBy ZXR1cm4gIShjaCA8IGMuY2wgfHwgYy5ydyk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hh ciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBjaCA8PSBjLmNsIHx8IGMucnc7Cn0KCmlubGlu ZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLnJ3 ID4gYzIucncKICAgICAgICA/IEZBTFNFCiAgICAgICAgOiBjMS5ydyA8IGMyLnJ3CiAgICAgICAg ICAgID8gVFJVRQogICAgICAgICAgICA6IGMxLmNsIDw9IGMyLmNsOwp9CgppbmxpbmUgaW50IG9w ZXJhdG9yPj0oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiBjaCA8PSBjOyB9CmlubGluZSBp bnQgb3BlcmF0b3I+PSggY2hhciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuIGMgPD0gY2g7IH0KaW5s aW5lIGludCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBj MTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggUUNoYXIgYywgY2hhciBjaCApIHsgcmV0dXJuICEo Y2g8PWMpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1 cm4gIShjPD1jaCk7IH0KaW5saW5lIGludCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiAp IHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggUUNoYXIgYywgY2hh ciBjaCApIHsgcmV0dXJuICEoY2g+PWMpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+KCBjaGFyIGNo LCBRQ2hhciBjICkgeyByZXR1cm4gIShjPj1jaCk7IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFD aGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5n RGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAgIHVuaWNv ZGUoMCksIGFzY2lpKDApLCBsZW4oMCksIG1heGwoMCksIGRpcnR5YXNjaWkoMCkgeyByZWYoKTsg fQogICAgUVN0cmluZ0RhdGEoUUNoYXIgKnUsIHVpbnQgbCwgdWludCBtKSA6CiAgICAgICAgdW5p Y29kZSh1KSwgYXNjaWkoMCksIGxlbihsKSwgbWF4bChtKSwgZGlydHlhc2NpaSgwKSB7IH0KCiAg ICB+UVN0cmluZ0RhdGEoKSB7IGlmICggdW5pY29kZSApIGRlbGV0ZVtdICgoY2hhciopdW5pY29k ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICggYXNjaWkgKSBkZWxldGVbXSBhc2NpaTsgfQoK ICAgIHZvaWQgZGVsZXRlU2VsZigpOwogICAgUUNoYXIgKnVuaWNvZGU7CiAgICBjaGFyICphc2Np aTsKICAgIHVpbnQgbGVuOwogICAgdWludCBtYXhsOjMwOwogICAgdWludCBkaXJ0eWFzY2lpOjE7 Cn07CgoKY2xhc3MgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJpbmcoKTsKICAgIFFTdHJpbmco IFFDaGFyICk7CiAgICBRU3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcoIGNv bnN0IFFCeXRlQXJyYXkmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWlu dCBsZW5ndGggKTsKCiAgICBRU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICB+UVN0cmlu ZygpOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmICk7CgogICAgUVN0 cmluZyAmb3BlcmF0b3I9KCBjb25zdCBjaGFyICogKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0o IGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBRQ2hhciBjICk7CiAg ICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25zdCBRU3RyaW5n IG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0 OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1bmNhdGUoIHVpbnQgcG9zICk7 CgoKCgogICAgdm9pZCBmaWxsKCBRQ2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBRU3RyaW5n IGNvcHkoKSBjb25zdDsKCiAgICBRU3RyaW5nIGFyZyhsb25nIGEsIGludCBmaWVsZHdpZHRoPTAs IGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHVsb25nIGEsIGludCBmaWVsZHdp ZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKGludCBhLCBpbnQgZmll bGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1aW50IGEsIGlu dCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHNob3J0 IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJn KHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3Ry aW5nIGFyZyhjaGFyIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmco UUNoYXIgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhjb25zdCBR U3RyaW5nJiBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKGRvdWJs ZSBhLCBpbnQgZmllbGR3aWR0aD0wLCBjaGFyIGZtdD0nZycsIGludCBwcmVjPS0xKSBjb25zdDsK CiAgICBRU3RyaW5nICZzcHJpbnRmKCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLiApCgogICAgICAg IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQoKICAgICAgICA7CgogICAg aW50IGZpbmQoIFFDaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAg IGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAg IGludCBmaW5kKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUg KSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29u c3Q7CgogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIqIHN0ciwgaW50IGluZGV4PTAgKSBjb25zdDsK CiAgICBpbnQgZmluZFJldiggUUNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNv bnN0OwogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUp IGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4PS0x LCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwg aW50IGluZGV4PS0xICkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIqIHN0ciwg aW50IGluZGV4PS0xICkgY29uc3Q7CgogICAgaW50IGNvbnRhaW5zKCBRQ2hhciBjLCBib29sIGNz PVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBj b25zdAogICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGNvbnRhaW5zKFFDaGFyKGMpLCBjcyk7 IH0KCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIqIHN0ciwgYm9vbCBjcz1UUlVFICkgY29u c3Q7CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgY3M9VFJVRSAp IGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBRUmVnRXhwICYgKSBjb25zdDsKCiAgICBR U3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxl biApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZm ZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZp bGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdodEp1c3RpZnko IHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAg UVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFT dHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVT cGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUVN0 cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwg dWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNoYXIgKTsKICAg IFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGlu ZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5n ICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiAp OwogICAgUVN0cmluZyAmcHJlcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmcHJlcGVuZCggUUNo YXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmlu ZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmcmVwbGFjZSgg dWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVw bGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwgdWludCBjbGVuICk7CiAg ICBRU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IFFTdHJpbmcgJiApOwoK ICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1 c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBpbnQg dG9JbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1aW50IHRvVUludCgg Ym9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpv az0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9MCwg aW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25z dDsKICAgIGRvdWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFTdHJpbmcg JnNldE51bSggc2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIHVzaG9y dCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggaW50LCBpbnQgYmFzZT0xMCAp OwogICAgUVN0cmluZyAmc2V0TnVtKCB1aW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAm c2V0TnVtKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1bG9uZywg aW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGlu dCBwcmVjPTYgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQg cHJlYz02ICk7CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25nLCBpbnQgYmFzZT0xMCAp OwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJhc2U9MTApOwogICAgc3Rh dGljIFFTdHJpbmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmlu ZyBudW1iZXIoIHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlcigg ZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9pZCBzZXRFeHBhbmQoIHVp bnQgaW5kZXgsIFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBRU3Ry aW5nICZzdHIgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yKz0oIFFDaGFyIGMgKTsKICAgIFFTdHJp bmcgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwoKCiAgICBRQ2hhciBhdCggdWludCBpICkgY29uc3QK ICAgICAgICB7IHJldHVybiBpPGQtPmxlbiA/IGQtPnVuaWNvZGVbaV0gOiBRQ2hhcjo6bnVsbDsg fQogICAgUUNoYXIgb3BlcmF0b3JbXSggaW50IGkgKSBjb25zdCB7IHJldHVybiBhdCgodWludClp KTsgfQogICAgUUNoYXJSZWYgYXQoIHVpbnQgaSApOwogICAgUUNoYXJSZWYgb3BlcmF0b3JbXSgg aW50IGkgKTsKCiAgICBRQ2hhciBjb25zdHJlZih1aW50IGkpIGNvbnN0CiAgICAgICAgeyByZXR1 cm4gYXQoaSk7IH0KICAgIFFDaGFyJiByZWYodWludCBpKQogICAgICAgIHsKICAgICAgICAgICAg aWYgKGQtPmNvdW50IT0xIHx8IGk+PWQtPmxlbikKICAgICAgICAgICAgICAgIHN1YmF0KGkpOwog ICAgICAgICAgICBkLT5kaXJ0eWFzY2lpPTE7CiAgICAgICAgICAgIHJldHVybiBkLT51bmljb2Rl W2ldOwogICAgICAgIH0KCiAgICBjb25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJu IGQtPnVuaWNvZGU7IH0KICAgIGNvbnN0IGNoYXIqIGFzY2lpKCkgY29uc3Q7CiAgICBjb25zdCBj aGFyKiBsYXRpbjEoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3Qg Y2hhciosIGludCBsZW49LTEpOwoKICAgIFFDU3RyaW5nIHV0ZjgoKSBjb25zdDsKICAgIHN0YXRp YyBRU3RyaW5nIGZyb21VdGY4KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmlu ZyBsb2NhbDhCaXQoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21Mb2NhbDhCaXQoY29u c3QgY2hhciosIGludCBsZW49LTEpOwogICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdDsKCiAgICBv cGVyYXRvciBjb25zdCBjaGFyICooKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBR U3RyaW5nICZzZXRVbmljb2RlKCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWludCBsZW4gKTsKICAg IFFTdHJpbmcgJnNldFVuaWNvZGVDb2RlcyggY29uc3QgdXNob3J0KiB1bmljb2RlX2FzX3VzaG9y dHMsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRMYXRpbjEoIGNvbnN0IGNoYXIqLCBpbnQg bGVuPS0xICk7CgogICAgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMgKSBjb25zdDsKICAg IHN0YXRpYyBpbnQgY29tcGFyZSggY29uc3QgUVN0cmluZyYgczEsIGNvbnN0IFFTdHJpbmcmIHMy ICkKICAgICAgICB7IHJldHVybiBzMS5jb21wYXJlKHMyKTsgfQoKCiAgICBmcmllbmQgUURhdGFT dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmcgJiApOwoKCiAgICB2b2lk IGNvbXBvc2UoKTsKICAgIFFDaGFyOjpEaXJlY3Rpb24gYmFzaWNEaXJlY3Rpb24oKTsKICAgIFFT dHJpbmcgdmlzdWFsKGludCBpbmRleCA9IDAsIGludCBsZW4gPSAtMSk7CgoKICAgIGNvbnN0IGNo YXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBib29sIHN0YXJ0c1dp dGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVN0cmluZyggaW50IHNp emUsIGJvb2wgZHVtbXkgKTsKCiAgICB2b2lkIGRlcmVmKCk7CiAgICB2b2lkIHJlYWxfZGV0YWNo KCk7CiAgICB2b2lkIHNldExlbmd0aCggdWludCBwb3MgKTsKICAgIHZvaWQgc3ViYXQoIHVpbnQg KTsKICAgIGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50JiBsZW4pIGNvbnN0OwoKICAgIHN0YXRp YyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IGNoYXIqLCB1aW50ICogbGVuLCB1aW50IG1h eGxlbj0odWludCktMSApOwogICAgc3RhdGljIFFDaGFyKiBhc2NpaVRvVW5pY29kZSggY29uc3Qg UUJ5dGVBcnJheSYsIHVpbnQgKiBsZW4gKTsKICAgIHN0YXRpYyBjaGFyKiB1bmljb2RlVG9Bc2Np aSggY29uc3QgUUNoYXIqLCB1aW50IGxlbiApOwoKICAgIFFTdHJpbmdEYXRhICpkOwogICAgc3Rh dGljIFFTdHJpbmdEYXRhKiBzaGFyZWRfbnVsbDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogbWFr ZVNoYXJlZE51bGwoKTsKCiAgICBmcmllbmQgY2xhc3MgUUNvbnN0U3RyaW5nOwogICAgUVN0cmlu ZyhRU3RyaW5nRGF0YSogZGQsIGJvb2wgKSA6IGQoZGQpIHsgfQp9OwoKY2xhc3MgUUNoYXJSZWYg ewogICAgZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5nJiBzOwogICAgdWludCBwOwog ICAgUUNoYXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBzKCpzdHIpLCBwKHBvcykgeyB9 CgpwdWJsaWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0 cmVmKHApLnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBzLmNv bnN0cmVmKHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7 IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFy IGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9 KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3Bl cmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJu ICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1y YzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMu cmVmKHApPXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJj ICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0o aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNo YXIgKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsgfQoKCiAgICBib29sIGlzTnVsbCgp IGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3Qg eyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNv bnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2Uo KSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01h cmsoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTWFyaygpOyB9CiAgICBib29sIGlz TGV0dGVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBi b29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9 CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0 dGVyT3JOdW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25z dHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu IHMuY29uc3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBRQ2hhciBsb3dlcigpIHsgcmV0dXJu IHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNoYXIgdXBwZXIoKSB7IHJldHVybiBzLmNv bnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25z dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rp b24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsg fQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmluZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYo cCkuam9pbmluZygpOyB9CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25z dHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJl dHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9CiAgICBRU3RyaW5nIGRlY29tcG9z aXRpb24oKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb24oKTsgfQog ICAgUUNoYXI6OkRlY29tcG9zaXRpb24gZGVjb21wb3NpdGlvblRhZygpIGNvbnN0IHsgcmV0dXJu IHMuY29uc3RyZWYocCkuZGVjb21wb3NpdGlvblRhZygpOyB9CgoKICAgIHVjaGFyIGNlbGwoKSBj b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNlbGwoKTsgfQogICAgdWNoYXIgcm93KCkgY29u c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5yb3coKTsgfQoKfTsKCmlubGluZSBRQ2hhclJlZiBR U3RyaW5nOjphdCggdWludCBpICkgeyByZXR1cm4gUUNoYXJSZWYodGhpcyxpKTsgfQppbmxpbmUg UUNoYXJSZWYgUVN0cmluZzo6b3BlcmF0b3JbXSggaW50IGkgKSB7IHJldHVybiBhdCgodWludClp KTsgfQoKCmNsYXNzIFFDb25zdFN0cmluZyA6IHByaXZhdGUgUVN0cmluZyB7CnB1YmxpYzoKICAg IFFDb25zdFN0cmluZyggUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CiAgICB+UUNvbnN0 U3RyaW5nKCk7CiAgICBjb25zdCBRU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiAqdGhp czsgfQp9OwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv bnN0IFFTdHJpbmcgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs IFFTdHJpbmcgJiApOwojIDYzMSAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xc3RyaW5nLmgi IDMKaW5saW5lIFFTdHJpbmc6OlFTdHJpbmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8gc2hhcmVk X251bGwgOiBtYWtlU2hhcmVkTnVsbCgpKQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5lIFFTdHJp bmc6On5RU3RyaW5nKCkKewogICAgaWYgKCBkLT5kZXJlZigpICkKICAgICAgICBkLT5kZWxldGVT ZWxmKCk7Cn0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIFFDaGFyIGMgKQp7 IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpv cGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0cmluZyhRQ2hhcihjKSk7IH0K CmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHVuaWNvZGUoKSA9 PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25zdAp7IHJldHVybiBp c051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4g ZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4g bGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6Y29weSgpIGNvbnN0Cnsg cmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVw ZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMpOyB9CgppbmxpbmUg UVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMp OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY2hhciBjICkKeyByZXR1cm4g aW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFT dHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFT dHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGlu ZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0o Yyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHNob3J0IG4sIGludCBiYXNl ICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0 cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVsb25n KW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBpbnQgbiwgaW50 IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5n ICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKHVs b25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBmbG9hdCBu LCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9 CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQg YmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9Cgpp bmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlu bGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5s aW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJh c2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlu bGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5kZXgsIGJvb2wgY3MgKSBjb25z dAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9CgppbmxpbmUgaW50IFFTdHJp bmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzKSBjb25zdAp7IHJldHVybiBm aW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5saW5lIGludCBRU3RyaW5nOjpm aW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0dXJuIGZpbmQoUVN0 cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6Zmlu ZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kUmV2 KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoKCgoKCgogYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0 b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0 b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJh dG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVy YXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVy YXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiBib29sIG9w ZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVy YXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRv cjw9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I9 PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPigg Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPj0oIGNv bnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvciE9KCBjb25z dCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBj aGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hh ciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIg KnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAq czEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgoKIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29u c3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAoIHMx ICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKIGlubGluZSBRU3RyaW5nIG9w ZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKewogICAgUVN0cmlu ZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMShzMik7CiAgICByZXR1 cm4gdG1wOwp9CgogaW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29u c3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5nIHRtcCA9IFFTdHJpbmc6OmZyb21MYXRpbjEo IHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKIGlubGluZSBRU3RyaW5n IG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0 bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIFFTdHJp bmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFTdHJpbmcg dG1wKCBzMSApOwogICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRU3Ry aW5nIG9wZXJhdG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmlu ZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9Cgog aW5saW5lIFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsK ICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJu IHRtcDsKfQoKIyAzNSAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAy IDMKCiMgMzYgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxIDMKY2xh c3MgUUNvbG9yOwpjbGFzcyBRQ3Vyc29yOwoKCmNsYXNzIFF0IHsKcHVibGljOgogICAgc3RhdGlj IGNvbnN0IFFDb2xvciAmIGNvbG9yMDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjb2xvcjE7 CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgYmxhY2s7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9y ICYgd2hpdGU7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0dyYXk7CiAgICBzdGF0aWMg Y29uc3QgUUNvbG9yICYgZ3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBsaWdodEdyYXk7 CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgcmVkOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAm IGdyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGJsdWU7CiAgICBzdGF0aWMgY29uc3Qg UUNvbG9yICYgY3lhbjsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBtYWdlbnRhOwogICAgc3Rh dGljIGNvbnN0IFFDb2xvciAmIHllbGxvdzsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJr UmVkOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtHcmVlbjsKICAgIHN0YXRpYyBjb25z dCBRQ29sb3IgJiBkYXJrQmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrQ3lhbjsK ICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrTWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCBR Q29sb3IgJiBkYXJrWWVsbG93OwoKCiAgICBlbnVtIEJ1dHRvblN0YXRlIHsKICAgICAgICBOb0J1 dHRvbiA9IDB4MDAwMCwKICAgICAgICBMZWZ0QnV0dG9uID0gMHgwMDAxLAogICAgICAgIFJpZ2h0 QnV0dG9uID0gMHgwMDAyLAogICAgICAgIE1pZEJ1dHRvbiA9IDB4MDAwNCwKICAgICAgICBNb3Vz ZUJ1dHRvbk1hc2sgPSAweDAwMDcsCiAgICAgICAgU2hpZnRCdXR0b24gPSAweDAwMDgsCiAgICAg ICAgQ29udHJvbEJ1dHRvbiA9IDB4MDAxMCwKICAgICAgICBBbHRCdXR0b24gPSAweDAwMjAsCiAg ICAgICAgS2V5QnV0dG9uTWFzayA9IDB4MDAzOCwKICAgICAgICBLZXlwYWQgPSAweDQwMDAKICAg IH07CgoKICAgIGVudW0gT3JpZW50YXRpb24gewogICAgICAgIEhvcml6b250YWwsCiAgICAgICAg VmVydGljYWwKICAgIH07CgoKCgogICAgZW51bSBBbGlnbm1lbnRGbGFncyB7CiAgICAgICAgQWxp Z25MZWZ0ID0gMHgwMDAxLAogICAgICAgIEFsaWduUmlnaHQgPSAweDAwMDIsCiAgICAgICAgQWxp Z25IQ2VudGVyID0gMHgwMDA0LAogICAgICAgIEFsaWduVG9wID0gMHgwMDA4LAogICAgICAgIEFs aWduQm90dG9tID0gMHgwMDEwLAogICAgICAgIEFsaWduVkNlbnRlciA9IDB4MDAyMCwKICAgICAg ICBBbGlnbkNlbnRlciA9IEFsaWduVkNlbnRlciB8IEFsaWduSENlbnRlciwKCiAgICAgICAgU2lu Z2xlTGluZSA9IDB4MDA0MCwKICAgICAgICBEb250Q2xpcCA9IDB4MDA4MCwKICAgICAgICBFeHBh bmRUYWJzID0gMHgwMTAwLAogICAgICAgIFNob3dQcmVmaXggPSAweDAyMDAsCiAgICAgICAgV29y ZEJyZWFrID0gMHgwNDAwLAogICAgICAgIERvbnRQcmludCA9IDB4MTAwMAogICAgfTsKCgogICAg ZW51bSBXaWRnZXRTdGF0ZSB7CiAgICAgICAgV1N0YXRlX0NyZWF0ZWQgPSAweDAwMDAwMDAxLAog ICAgICAgIFdTdGF0ZV9EaXNhYmxlZCA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1N0YXRlX1Zpc2li bGUgPSAweDAwMDAwMDA0LAogICAgICAgIFdTdGF0ZV9Gb3JjZUhpZGUgPSAweDAwMDAwMDA4LAog ICAgICAgIFdTdGF0ZV9Pd25DdXJzb3IgPSAweDAwMDAwMDEwLAogICAgICAgIFdTdGF0ZV9Nb3Vz ZVRyYWNraW5nID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3RhdGVfQ29tcHJlc3NLZXlzID0gMHgw MDAwMDA0MCwKICAgICAgICBXU3RhdGVfQmxvY2tVcGRhdGVzID0gMHgwMDAwMDA4MCwKICAgICAg ICBXU3RhdGVfSW5QYWludEV2ZW50ID0gMHgwMDAwMDEwMCwKICAgICAgICBXU3RhdGVfUmVwYXJl bnRlZCA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0YXRlX0NvbmZpZ1BlbmRpbmcgPSAweDAwMDAw NDAwLAogICAgICAgIFdTdGF0ZV9SZXNpemVkID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3RhdGVf QXV0b01hc2sgPSAweDAwMDAxMDAwLAogICAgICAgIFdTdGF0ZV9Qb2xpc2hlZCA9IDB4MDAwMDIw MDAsCiAgICAgICAgV1N0YXRlX0RORCA9IDB4MDAwMDQwMDAsCiAgICAgICAgV1N0YXRlX01vZGFs ID0gMHgwMDAwODAwMCwKICAgICAgICBXU3RhdGVfUmVzZXJ2ZWQxID0gMHgwMDAxMDAwMCwKICAg ICAgICBXU3RhdGVfUmVzZXJ2ZWQyID0gMHgwMDAyMDAwMCwKICAgICAgICBXU3RhdGVfUmVzZXJ2 ZWQzID0gMHgwMDA0MDAwMCwKICAgICAgICBXU3RhdGVfTWF4aW1pemVkID0gMHgwMDA4MDAwMCwK ICAgICAgICBXU3RhdGVfVHJhbnNsYXRlQmFja2dyb3VuZCA9IDB4MDAxMDAwMDAsCiAgICAgICAg V1N0YXRlX0ZvcmNlRGlzYWJsZWQgPSAweDAwMjAwMDAwLAogICAgICAgIFdTdGF0ZV9FeHBvc2Vk ID0gMHgwMDQwMDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdGbGFnczsKCgogICAgZW51 bSBXaWRnZXRGbGFncyB7CiAgICAgICAgV1R5cGVfVG9wTGV2ZWwgPSAweDAwMDAwMDAxLAogICAg ICAgIFdUeXBlX01vZGFsID0gMHgwMDAwMDAwMiwKICAgICAgICBXVHlwZV9Qb3B1cCA9IDB4MDAw MDAwMDQsCiAgICAgICAgV1R5cGVfRGVza3RvcCA9IDB4MDAwMDAwMDgsCiAgICAgICAgV1R5cGVf TWFzayA9IDB4MDAwMDAwMGYsCgogICAgICAgIFdTdHlsZV9DdXN0b21pemUgPSAweDAwMDAwMDEw LAogICAgICAgIFdTdHlsZV9Ob3JtYWxCb3JkZXIgPSAweDAwMDAwMDIwLAogICAgICAgIFdTdHls ZV9EaWFsb2dCb3JkZXIgPSAweDAwMDAwMDQwLAogICAgICAgIFdTdHlsZV9Ob0JvcmRlciA9IDB4 MDAwMDAwMDAsCiAgICAgICAgV1N0eWxlX1RpdGxlID0gMHgwMDAwMDA4MCwKICAgICAgICBXU3R5 bGVfU3lzTWVudSA9IDB4MDAwMDAxMDAsCiAgICAgICAgV1N0eWxlX01pbmltaXplID0gMHgwMDAw MDIwMCwKICAgICAgICBXU3R5bGVfTWF4aW1pemUgPSAweDAwMDAwNDAwLAogICAgICAgIFdTdHls ZV9NaW5NYXggPSBXU3R5bGVfTWluaW1pemUgfCBXU3R5bGVfTWF4aW1pemUsCiAgICAgICAgV1N0 eWxlX1Rvb2wgPSAweDAwMDAwODAwLAogICAgICAgIFdTdHlsZV9TdGF5c09uVG9wID0gMHgwMDAw MTAwMCwKICAgICAgICBXU3R5bGVfRGlhbG9nID0gMHgwMDAwMjAwMCwKICAgICAgICBXU3R5bGVf Q29udGV4dEhlbHAgPSAweDAwMDA0MDAwLAogICAgICAgIFdTdHlsZV9Ob0JvcmRlckV4ID0gMHgw MDAwODAwMCwKICAgICAgICBXU3R5bGVfTWFzayA9IDB4MDAwMGZmZjAsCgogICAgICAgIFdEZXN0 cnVjdGl2ZUNsb3NlID0gMHgwMDAxMDAwMCwKICAgICAgICBXUGFpbnREZXNrdG9wID0gMHgwMDAy MDAwMCwKICAgICAgICBXUGFpbnRVbmNsaXBwZWQgPSAweDAwMDQwMDAwLAogICAgICAgIFdQYWlu dENsZXZlciA9IDB4MDAwODAwMDAsCiAgICAgICAgV1Jlc2l6ZU5vRXJhc2UgPSAweDAwMTAwMDAw LAogICAgICAgIFdNb3VzZU5vTWFzayA9IDB4MDAyMDAwMDAsCiAgICAgICAgV05vcnRoV2VzdEdy YXZpdHkgPSAweDAwNDAwMDAwLAogICAgICAgIFdSZXBhaW50Tm9FcmFzZSA9IDB4MDA4MDAwMDAs CiAgICAgICAgV1gxMUJ5cGFzc1dNID0gMHgwMTAwMDAwMAogICAgfTsKCgoKCiAgICBlbnVtIElt YWdlQ29udmVyc2lvbkZsYWdzIHsKICAgICAgICBDb2xvck1vZGVfTWFzayA9IDB4MDAwMDAwMDMs CiAgICAgICAgQXV0b0NvbG9yID0gMHgwMDAwMDAwMCwKICAgICAgICBDb2xvck9ubHkgPSAweDAw MDAwMDAzLAogICAgICAgIE1vbm9Pbmx5ID0gMHgwMDAwMDAwMiwKCgogICAgICAgIEFscGhhRGl0 aGVyX01hc2sgPSAweDAwMDAwMDBjLAogICAgICAgIFRocmVzaG9sZEFscGhhRGl0aGVyID0gMHgw MDAwMDAwMCwKICAgICAgICBPcmRlcmVkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA0LAogICAgICAg IERpZmZ1c2VBbHBoYURpdGhlciA9IDB4MDAwMDAwMDgsCiAgICAgICAgTm9BbHBoYSA9IDB4MDAw MDAwMGMsCgogICAgICAgIERpdGhlcl9NYXNrID0gMHgwMDAwMDAzMCwKICAgICAgICBEaWZmdXNl RGl0aGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBPcmRlcmVkRGl0aGVyID0gMHgwMDAwMDAxMCwK ICAgICAgICBUaHJlc2hvbGREaXRoZXIgPSAweDAwMDAwMDIwLAoKCiAgICAgICAgRGl0aGVyTW9k ZV9NYXNrID0gMHgwMDAwMDBjMCwKICAgICAgICBBdXRvRGl0aGVyID0gMHgwMDAwMDAwMCwKICAg ICAgICBQcmVmZXJEaXRoZXIgPSAweDAwMDAwMDQwLAogICAgICAgIEF2b2lkRGl0aGVyID0gMHgw MDAwMDA4MAogICAgfTsKCiAgICBlbnVtIEJHTW9kZSB7CiAgICAgICAgVHJhbnNwYXJlbnRNb2Rl LAogICAgICAgIE9wYXF1ZU1vZGUKICAgIH07CgogICAgZW51bSBQYWludFVuaXQgewogICAgICAg IFBpeGVsVW5pdCwKICAgICAgICBMb01ldHJpY1VuaXQsCiAgICAgICAgSGlNZXRyaWNVbml0LAog ICAgICAgIExvRW5nbGlzaFVuaXQsCiAgICAgICAgSGlFbmdsaXNoVW5pdCwKICAgICAgICBUd2lw c1VuaXQKICAgIH07CgogICAgZW51bSBHVUlTdHlsZSB7CiAgICAgICAgTWFjU3R5bGUsCiAgICAg ICAgV2luZG93c1N0eWxlLAogICAgICAgIFdpbjNTdHlsZSwKICAgICAgICBQTVN0eWxlLAogICAg ICAgIE1vdGlmU3R5bGUKICAgIH07CgogICAgZW51bSBNb2RpZmllciB7CiAgICAgICAgU0hJRlQg PSAweDAwMjAwMDAwLAogICAgICAgIENUUkwgPSAweDAwNDAwMDAwLAogICAgICAgIEFMVCA9IDB4 MDA4MDAwMDAsCiAgICAgICAgTU9ESUZJRVJfTUFTSyA9IDB4MDBlMDAwMDAsCiAgICAgICAgVU5J Q09ERV9BQ0NFTCA9IDB4MTAwMDAwMDAsCgogICAgICAgIEFTQ0lJX0FDQ0VMID0gVU5JQ09ERV9B Q0NFTAogICAgfTsKCiAgICBlbnVtIEtleSB7CiAgICAgICAgS2V5X0VzY2FwZSA9IDB4MTAwMCwK ICAgICAgICBLZXlfVGFiID0gMHgxMDAxLAogICAgICAgIEtleV9CYWNrdGFiID0gMHgxMDAyLCBL ZXlfQmFja1RhYiA9IEtleV9CYWNrdGFiLAogICAgICAgIEtleV9CYWNrc3BhY2UgPSAweDEwMDMs IEtleV9CYWNrU3BhY2UgPSBLZXlfQmFja3NwYWNlLAogICAgICAgIEtleV9SZXR1cm4gPSAweDEw MDQsCiAgICAgICAgS2V5X0VudGVyID0gMHgxMDA1LAogICAgICAgIEtleV9JbnNlcnQgPSAweDEw MDYsCiAgICAgICAgS2V5X0RlbGV0ZSA9IDB4MTAwNywKICAgICAgICBLZXlfUGF1c2UgPSAweDEw MDgsCiAgICAgICAgS2V5X1ByaW50ID0gMHgxMDA5LAogICAgICAgIEtleV9TeXNSZXEgPSAweDEw MGEsCiAgICAgICAgS2V5X0hvbWUgPSAweDEwMTAsCiAgICAgICAgS2V5X0VuZCA9IDB4MTAxMSwK ICAgICAgICBLZXlfTGVmdCA9IDB4MTAxMiwKICAgICAgICBLZXlfVXAgPSAweDEwMTMsCiAgICAg ICAgS2V5X1JpZ2h0ID0gMHgxMDE0LAogICAgICAgIEtleV9Eb3duID0gMHgxMDE1LAogICAgICAg IEtleV9QcmlvciA9IDB4MTAxNiwgS2V5X1BhZ2VVcCA9IEtleV9QcmlvciwKICAgICAgICBLZXlf TmV4dCA9IDB4MTAxNywgS2V5X1BhZ2VEb3duID0gS2V5X05leHQsCiAgICAgICAgS2V5X1NoaWZ0 ID0gMHgxMDIwLAogICAgICAgIEtleV9Db250cm9sID0gMHgxMDIxLAogICAgICAgIEtleV9NZXRh ID0gMHgxMDIyLAogICAgICAgIEtleV9BbHQgPSAweDEwMjMsCiAgICAgICAgS2V5X0NhcHNMb2Nr ID0gMHgxMDI0LAogICAgICAgIEtleV9OdW1Mb2NrID0gMHgxMDI1LAogICAgICAgIEtleV9TY3Jv bGxMb2NrID0gMHgxMDI2LAogICAgICAgIEtleV9GMSA9IDB4MTAzMCwKICAgICAgICBLZXlfRjIg PSAweDEwMzEsCiAgICAgICAgS2V5X0YzID0gMHgxMDMyLAogICAgICAgIEtleV9GNCA9IDB4MTAz MywKICAgICAgICBLZXlfRjUgPSAweDEwMzQsCiAgICAgICAgS2V5X0Y2ID0gMHgxMDM1LAogICAg ICAgIEtleV9GNyA9IDB4MTAzNiwKICAgICAgICBLZXlfRjggPSAweDEwMzcsCiAgICAgICAgS2V5 X0Y5ID0gMHgxMDM4LAogICAgICAgIEtleV9GMTAgPSAweDEwMzksCiAgICAgICAgS2V5X0YxMSA9 IDB4MTAzYSwKICAgICAgICBLZXlfRjEyID0gMHgxMDNiLAogICAgICAgIEtleV9GMTMgPSAweDEw M2MsCiAgICAgICAgS2V5X0YxNCA9IDB4MTAzZCwKICAgICAgICBLZXlfRjE1ID0gMHgxMDNlLAog ICAgICAgIEtleV9GMTYgPSAweDEwM2YsCiAgICAgICAgS2V5X0YxNyA9IDB4MTA0MCwKICAgICAg ICBLZXlfRjE4ID0gMHgxMDQxLAogICAgICAgIEtleV9GMTkgPSAweDEwNDIsCiAgICAgICAgS2V5 X0YyMCA9IDB4MTA0MywKICAgICAgICBLZXlfRjIxID0gMHgxMDQ0LAogICAgICAgIEtleV9GMjIg PSAweDEwNDUsCiAgICAgICAgS2V5X0YyMyA9IDB4MTA0NiwKICAgICAgICBLZXlfRjI0ID0gMHgx MDQ3LAogICAgICAgIEtleV9GMjUgPSAweDEwNDgsCiAgICAgICAgS2V5X0YyNiA9IDB4MTA0OSwK ICAgICAgICBLZXlfRjI3ID0gMHgxMDRhLAogICAgICAgIEtleV9GMjggPSAweDEwNGIsCiAgICAg ICAgS2V5X0YyOSA9IDB4MTA0YywKICAgICAgICBLZXlfRjMwID0gMHgxMDRkLAogICAgICAgIEtl eV9GMzEgPSAweDEwNGUsCiAgICAgICAgS2V5X0YzMiA9IDB4MTA0ZiwKICAgICAgICBLZXlfRjMz ID0gMHgxMDUwLAogICAgICAgIEtleV9GMzQgPSAweDEwNTEsCiAgICAgICAgS2V5X0YzNSA9IDB4 MTA1MiwKICAgICAgICBLZXlfU3VwZXJfTCA9IDB4MTA1MywKICAgICAgICBLZXlfU3VwZXJfUiA9 IDB4MTA1NCwKICAgICAgICBLZXlfTWVudSA9IDB4MTA1NSwKICAgICAgICBLZXlfSHlwZXJfTCA9 IDB4MTA1NiwKICAgICAgICBLZXlfSHlwZXJfUiA9IDB4MTA1NywKICAgICAgICBLZXlfSGVscCA9 IDB4MTA1OCwKICAgICAgICBLZXlfU3BhY2UgPSAweDIwLAogICAgICAgIEtleV9BbnkgPSBLZXlf U3BhY2UsCiAgICAgICAgS2V5X0V4Y2xhbSA9IDB4MjEsCiAgICAgICAgS2V5X1F1b3RlRGJsID0g MHgyMiwKICAgICAgICBLZXlfTnVtYmVyU2lnbiA9IDB4MjMsCiAgICAgICAgS2V5X0RvbGxhciA9 IDB4MjQsCiAgICAgICAgS2V5X1BlcmNlbnQgPSAweDI1LAogICAgICAgIEtleV9BbXBlcnNhbmQg PSAweDI2LAogICAgICAgIEtleV9BcG9zdHJvcGhlID0gMHgyNywKICAgICAgICBLZXlfUGFyZW5M ZWZ0ID0gMHgyOCwKICAgICAgICBLZXlfUGFyZW5SaWdodCA9IDB4MjksCiAgICAgICAgS2V5X0Fz dGVyaXNrID0gMHgyYSwKICAgICAgICBLZXlfUGx1cyA9IDB4MmIsCiAgICAgICAgS2V5X0NvbW1h ID0gMHgyYywKICAgICAgICBLZXlfTWludXMgPSAweDJkLAogICAgICAgIEtleV9QZXJpb2QgPSAw eDJlLAogICAgICAgIEtleV9TbGFzaCA9IDB4MmYsCiAgICAgICAgS2V5XzAgPSAweDMwLAogICAg ICAgIEtleV8xID0gMHgzMSwKICAgICAgICBLZXlfMiA9IDB4MzIsCiAgICAgICAgS2V5XzMgPSAw eDMzLAogICAgICAgIEtleV80ID0gMHgzNCwKICAgICAgICBLZXlfNSA9IDB4MzUsCiAgICAgICAg S2V5XzYgPSAweDM2LAogICAgICAgIEtleV83ID0gMHgzNywKICAgICAgICBLZXlfOCA9IDB4Mzgs CiAgICAgICAgS2V5XzkgPSAweDM5LAogICAgICAgIEtleV9Db2xvbiA9IDB4M2EsCiAgICAgICAg S2V5X1NlbWljb2xvbiA9IDB4M2IsCiAgICAgICAgS2V5X0xlc3MgPSAweDNjLAogICAgICAgIEtl eV9FcXVhbCA9IDB4M2QsCiAgICAgICAgS2V5X0dyZWF0ZXIgPSAweDNlLAogICAgICAgIEtleV9R dWVzdGlvbiA9IDB4M2YsCiAgICAgICAgS2V5X0F0ID0gMHg0MCwKICAgICAgICBLZXlfQSA9IDB4 NDEsCiAgICAgICAgS2V5X0IgPSAweDQyLAogICAgICAgIEtleV9DID0gMHg0MywKICAgICAgICBL ZXlfRCA9IDB4NDQsCiAgICAgICAgS2V5X0UgPSAweDQ1LAogICAgICAgIEtleV9GID0gMHg0NiwK ICAgICAgICBLZXlfRyA9IDB4NDcsCiAgICAgICAgS2V5X0ggPSAweDQ4LAogICAgICAgIEtleV9J ID0gMHg0OSwKICAgICAgICBLZXlfSiA9IDB4NGEsCiAgICAgICAgS2V5X0sgPSAweDRiLAogICAg ICAgIEtleV9MID0gMHg0YywKICAgICAgICBLZXlfTSA9IDB4NGQsCiAgICAgICAgS2V5X04gPSAw eDRlLAogICAgICAgIEtleV9PID0gMHg0ZiwKICAgICAgICBLZXlfUCA9IDB4NTAsCiAgICAgICAg S2V5X1EgPSAweDUxLAogICAgICAgIEtleV9SID0gMHg1MiwKICAgICAgICBLZXlfUyA9IDB4NTMs CiAgICAgICAgS2V5X1QgPSAweDU0LAogICAgICAgIEtleV9VID0gMHg1NSwKICAgICAgICBLZXlf ViA9IDB4NTYsCiAgICAgICAgS2V5X1cgPSAweDU3LAogICAgICAgIEtleV9YID0gMHg1OCwKICAg ICAgICBLZXlfWSA9IDB4NTksCiAgICAgICAgS2V5X1ogPSAweDVhLAogICAgICAgIEtleV9CcmFj a2V0TGVmdCA9IDB4NWIsCiAgICAgICAgS2V5X0JhY2tzbGFzaCA9IDB4NWMsCiAgICAgICAgS2V5 X0JyYWNrZXRSaWdodCA9IDB4NWQsCiAgICAgICAgS2V5X0FzY2lpQ2lyY3VtID0gMHg1ZSwKICAg ICAgICBLZXlfVW5kZXJzY29yZSA9IDB4NWYsCiAgICAgICAgS2V5X1F1b3RlTGVmdCA9IDB4NjAs CiAgICAgICAgS2V5X0JyYWNlTGVmdCA9IDB4N2IsCiAgICAgICAgS2V5X0JhciA9IDB4N2MsCiAg ICAgICAgS2V5X0JyYWNlUmlnaHQgPSAweDdkLAogICAgICAgIEtleV9Bc2NpaVRpbGRlID0gMHg3 ZSwKCgoKICAgICAgICBLZXlfbm9icmVha3NwYWNlID0gMHgwYTAsCiAgICAgICAgS2V5X2V4Y2xh bWRvd24gPSAweDBhMSwKICAgICAgICBLZXlfY2VudCA9IDB4MGEyLAogICAgICAgIEtleV9zdGVy bGluZyA9IDB4MGEzLAogICAgICAgIEtleV9jdXJyZW5jeSA9IDB4MGE0LAogICAgICAgIEtleV95 ZW4gPSAweDBhNSwKICAgICAgICBLZXlfYnJva2VuYmFyID0gMHgwYTYsCiAgICAgICAgS2V5X3Nl Y3Rpb24gPSAweDBhNywKICAgICAgICBLZXlfZGlhZXJlc2lzID0gMHgwYTgsCiAgICAgICAgS2V5 X2NvcHlyaWdodCA9IDB4MGE5LAogICAgICAgIEtleV9vcmRmZW1pbmluZSA9IDB4MGFhLAogICAg ICAgIEtleV9ndWlsbGVtb3RsZWZ0ID0gMHgwYWIsCiAgICAgICAgS2V5X25vdHNpZ24gPSAweDBh YywKICAgICAgICBLZXlfaHlwaGVuID0gMHgwYWQsCiAgICAgICAgS2V5X3JlZ2lzdGVyZWQgPSAw eDBhZSwKICAgICAgICBLZXlfbWFjcm9uID0gMHgwYWYsCiAgICAgICAgS2V5X2RlZ3JlZSA9IDB4 MGIwLAogICAgICAgIEtleV9wbHVzbWludXMgPSAweDBiMSwKICAgICAgICBLZXlfdHdvc3VwZXJp b3IgPSAweDBiMiwKICAgICAgICBLZXlfdGhyZWVzdXBlcmlvciA9IDB4MGIzLAogICAgICAgIEtl eV9hY3V0ZSA9IDB4MGI0LAogICAgICAgIEtleV9tdSA9IDB4MGI1LAogICAgICAgIEtleV9wYXJh Z3JhcGggPSAweDBiNiwKICAgICAgICBLZXlfcGVyaW9kY2VudGVyZWQgPSAweDBiNywKICAgICAg ICBLZXlfY2VkaWxsYSA9IDB4MGI4LAogICAgICAgIEtleV9vbmVzdXBlcmlvciA9IDB4MGI5LAog ICAgICAgIEtleV9tYXNjdWxpbmUgPSAweDBiYSwKICAgICAgICBLZXlfZ3VpbGxlbW90cmlnaHQg PSAweDBiYiwKICAgICAgICBLZXlfb25lcXVhcnRlciA9IDB4MGJjLAogICAgICAgIEtleV9vbmVo YWxmID0gMHgwYmQsCiAgICAgICAgS2V5X3RocmVlcXVhcnRlcnMgPSAweDBiZSwKICAgICAgICBL ZXlfcXVlc3Rpb25kb3duID0gMHgwYmYsCiAgICAgICAgS2V5X0FncmF2ZSA9IDB4MGMwLAogICAg ICAgIEtleV9BYWN1dGUgPSAweDBjMSwKICAgICAgICBLZXlfQWNpcmN1bWZsZXggPSAweDBjMiwK ICAgICAgICBLZXlfQXRpbGRlID0gMHgwYzMsCiAgICAgICAgS2V5X0FkaWFlcmVzaXMgPSAweDBj NCwKICAgICAgICBLZXlfQXJpbmcgPSAweDBjNSwKICAgICAgICBLZXlfQUUgPSAweDBjNiwKICAg ICAgICBLZXlfQ2NlZGlsbGEgPSAweDBjNywKICAgICAgICBLZXlfRWdyYXZlID0gMHgwYzgsCiAg ICAgICAgS2V5X0VhY3V0ZSA9IDB4MGM5LAogICAgICAgIEtleV9FY2lyY3VtZmxleCA9IDB4MGNh LAogICAgICAgIEtleV9FZGlhZXJlc2lzID0gMHgwY2IsCiAgICAgICAgS2V5X0lncmF2ZSA9IDB4 MGNjLAogICAgICAgIEtleV9JYWN1dGUgPSAweDBjZCwKICAgICAgICBLZXlfSWNpcmN1bWZsZXgg PSAweDBjZSwKICAgICAgICBLZXlfSWRpYWVyZXNpcyA9IDB4MGNmLAogICAgICAgIEtleV9FVEgg PSAweDBkMCwKICAgICAgICBLZXlfTnRpbGRlID0gMHgwZDEsCiAgICAgICAgS2V5X09ncmF2ZSA9 IDB4MGQyLAogICAgICAgIEtleV9PYWN1dGUgPSAweDBkMywKICAgICAgICBLZXlfT2NpcmN1bWZs ZXggPSAweDBkNCwKICAgICAgICBLZXlfT3RpbGRlID0gMHgwZDUsCiAgICAgICAgS2V5X09kaWFl cmVzaXMgPSAweDBkNiwKICAgICAgICBLZXlfbXVsdGlwbHkgPSAweDBkNywKICAgICAgICBLZXlf T29ibGlxdWUgPSAweDBkOCwKICAgICAgICBLZXlfVWdyYXZlID0gMHgwZDksCiAgICAgICAgS2V5 X1VhY3V0ZSA9IDB4MGRhLAogICAgICAgIEtleV9VY2lyY3VtZmxleCA9IDB4MGRiLAogICAgICAg IEtleV9VZGlhZXJlc2lzID0gMHgwZGMsCiAgICAgICAgS2V5X1lhY3V0ZSA9IDB4MGRkLAogICAg ICAgIEtleV9USE9STiA9IDB4MGRlLAogICAgICAgIEtleV9zc2hhcnAgPSAweDBkZiwKICAgICAg ICBLZXlfYWdyYXZlID0gMHgwZTAsCiAgICAgICAgS2V5X2FhY3V0ZSA9IDB4MGUxLAogICAgICAg IEtleV9hY2lyY3VtZmxleCA9IDB4MGUyLAogICAgICAgIEtleV9hdGlsZGUgPSAweDBlMywKICAg ICAgICBLZXlfYWRpYWVyZXNpcyA9IDB4MGU0LAogICAgICAgIEtleV9hcmluZyA9IDB4MGU1LAog ICAgICAgIEtleV9hZSA9IDB4MGU2LAogICAgICAgIEtleV9jY2VkaWxsYSA9IDB4MGU3LAogICAg ICAgIEtleV9lZ3JhdmUgPSAweDBlOCwKICAgICAgICBLZXlfZWFjdXRlID0gMHgwZTksCiAgICAg ICAgS2V5X2VjaXJjdW1mbGV4ID0gMHgwZWEsCiAgICAgICAgS2V5X2VkaWFlcmVzaXMgPSAweDBl YiwKICAgICAgICBLZXlfaWdyYXZlID0gMHgwZWMsCiAgICAgICAgS2V5X2lhY3V0ZSA9IDB4MGVk LAogICAgICAgIEtleV9pY2lyY3VtZmxleCA9IDB4MGVlLAogICAgICAgIEtleV9pZGlhZXJlc2lz ID0gMHgwZWYsCiAgICAgICAgS2V5X2V0aCA9IDB4MGYwLAogICAgICAgIEtleV9udGlsZGUgPSAw eDBmMSwKICAgICAgICBLZXlfb2dyYXZlID0gMHgwZjIsCiAgICAgICAgS2V5X29hY3V0ZSA9IDB4 MGYzLAogICAgICAgIEtleV9vY2lyY3VtZmxleCA9IDB4MGY0LAogICAgICAgIEtleV9vdGlsZGUg PSAweDBmNSwKICAgICAgICBLZXlfb2RpYWVyZXNpcyA9IDB4MGY2LAogICAgICAgIEtleV9kaXZp c2lvbiA9IDB4MGY3LAogICAgICAgIEtleV9vc2xhc2ggPSAweDBmOCwKICAgICAgICBLZXlfdWdy YXZlID0gMHgwZjksCiAgICAgICAgS2V5X3VhY3V0ZSA9IDB4MGZhLAogICAgICAgIEtleV91Y2ly Y3VtZmxleCA9IDB4MGZiLAogICAgICAgIEtleV91ZGlhZXJlc2lzID0gMHgwZmMsCiAgICAgICAg S2V5X3lhY3V0ZSA9IDB4MGZkLAogICAgICAgIEtleV90aG9ybiA9IDB4MGZlLAogICAgICAgIEtl eV95ZGlhZXJlc2lzID0gMHgwZmYsCgogICAgICAgIEtleV91bmtub3duID0gMHhmZmZmCiAgICB9 OwoKICAgIGVudW0gQXJyb3dUeXBlIHsKICAgICAgICBVcEFycm93LAogICAgICAgIERvd25BcnJv dywKICAgICAgICBMZWZ0QXJyb3csCiAgICAgICAgUmlnaHRBcnJvdwogICAgfTsKCgogICAgZW51 bSBSYXN0ZXJPcCB7CiAgICAgICAgQ29weVJPUCwKICAgICAgICBPclJPUCwKICAgICAgICBYb3JS T1AsCiAgICAgICAgTm90QW5kUk9QLAogICAgICAgIEVyYXNlUk9QPU5vdEFuZFJPUCwKICAgICAg ICBOb3RDb3B5Uk9QLAogICAgICAgIE5vdE9yUk9QLAogICAgICAgIE5vdFhvclJPUCwKICAgICAg ICBBbmRST1AsIE5vdEVyYXNlUk9QPUFuZFJPUCwKICAgICAgICBOb3RST1AsCiAgICAgICAgQ2xl YXJST1AsCiAgICAgICAgU2V0Uk9QLAogICAgICAgIE5vcFJPUCwKICAgICAgICBBbmROb3RST1As CiAgICAgICAgT3JOb3RST1AsCiAgICAgICAgTmFuZFJPUCwKICAgICAgICBOb3JST1AsIExhc3RS T1A9Tm9yUk9QCiAgICB9OwoKCiAgICBlbnVtIFBlblN0eWxlIHsKICAgICAgICBOb1BlbiwKICAg ICAgICBTb2xpZExpbmUsCiAgICAgICAgRGFzaExpbmUsCiAgICAgICAgRG90TGluZSwKICAgICAg ICBEYXNoRG90TGluZSwKICAgICAgICBEYXNoRG90RG90TGluZSwKICAgICAgICBNUGVuU3R5bGUg PSAweDBmCiAgICB9OwoKICAgIGVudW0gUGVuQ2FwU3R5bGUgewogICAgICAgIEZsYXRDYXAgPSAw eDAwLAogICAgICAgIFNxdWFyZUNhcCA9IDB4MTAsCiAgICAgICAgUm91bmRDYXAgPSAweDIwLAog ICAgICAgIE1QZW5DYXBTdHlsZSA9IDB4MzAKICAgIH07CgogICAgZW51bSBQZW5Kb2luU3R5bGUg ewogICAgICAgIE1pdGVySm9pbiA9IDB4MDAsCiAgICAgICAgQmV2ZWxKb2luID0gMHg0MCwKICAg ICAgICBSb3VuZEpvaW4gPSAweDgwLAogICAgICAgIE1QZW5Kb2luU3R5bGUgPSAweGMwCiAgICB9 OwoKICAgIGVudW0gQnJ1c2hTdHlsZSB7CiAgICAgICAgTm9CcnVzaCwKICAgICAgICBTb2xpZFBh dHRlcm4sCiAgICAgICAgRGVuc2UxUGF0dGVybiwKICAgICAgICBEZW5zZTJQYXR0ZXJuLAogICAg ICAgIERlbnNlM1BhdHRlcm4sCiAgICAgICAgRGVuc2U0UGF0dGVybiwKICAgICAgICBEZW5zZTVQ YXR0ZXJuLAogICAgICAgIERlbnNlNlBhdHRlcm4sCiAgICAgICAgRGVuc2U3UGF0dGVybiwKICAg ICAgICBIb3JQYXR0ZXJuLAogICAgICAgIFZlclBhdHRlcm4sCiAgICAgICAgQ3Jvc3NQYXR0ZXJu LAogICAgICAgIEJEaWFnUGF0dGVybiwKICAgICAgICBGRGlhZ1BhdHRlcm4sCiAgICAgICAgRGlh Z0Nyb3NzUGF0dGVybiwKICAgICAgICBDdXN0b21QYXR0ZXJuPTI0CiAgICB9OwoKICAgIGVudW0g V2luZG93c1ZlcnNpb24gewogICAgICAgIFdWXzMycyA9IDB4MDAwMSwKICAgICAgICBXVl85NSA9 IDB4MDAwMiwKICAgICAgICBXVl85OCA9IDB4MDAwMywKICAgICAgICBXVl9ET1NfYmFzZWQgPSAw eDAwMGYsCgogICAgICAgIFdWX05UID0gMHgwMDEwLAogICAgICAgIFdWXzIwMDAgPSAweDAwMjAs CiAgICAgICAgV1ZfTlRfYmFzZWQgPSAweDAwZjAKICAgIH07CgogICAgZW51bSBVSUVmZmVjdCB7 CiAgICAgICAgVUlfR2VuZXJhbCwKICAgICAgICBVSV9BbmltYXRlTWVudSwKICAgICAgICBVSV9G YWRlTWVudSwKICAgICAgICBVSV9BbmltYXRlQ29tYm8sCiAgICAgICAgVUlfQW5pbWF0ZVRvb2x0 aXAsCiAgICAgICAgVUlfRmFkZVRvb2x0aXAKICAgIH07CgoKCgogICAgc3RhdGljIGNvbnN0IFFD dXJzb3IgJiBhcnJvd0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgdXBBcnJvd0N1 cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgY3Jvc3NDdXJzb3I7CiAgICBzdGF0aWMg Y29uc3QgUUN1cnNvciAmIHdhaXRDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGli ZWFtQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplVmVyQ3Vyc29yOwogICAg c3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplSG9yQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFD dXJzb3IgJiBzaXplQkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVG RGlhZ0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUFsbEN1cnNvcjsKICAg IHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgYmxhbmtDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1 cnNvciAmIHNwbGl0VkN1cnNvcjsKCiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNwbGl0SEN1 cnNvcjsKCiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHBvaW50aW5nSGFuZEN1cnNvcjsKICAg IHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgZm9yYmlkZGVuQ3Vyc29yOwoKCiAgICBlbnVtIFRleHRG b3JtYXQgewogICAgICAgIFBsYWluVGV4dCwKICAgICAgICBSaWNoVGV4dCwKICAgICAgICBBdXRv VGV4dAogICAgfTsKfTsKCgpjbGFzcyBRSW50ZXJuYWwgewpwdWJsaWM6CiAgICBlbnVtIFBhaW50 RGV2aWNlRmxhZ3MgewogICAgICAgIFVuZGVmaW5lZERldmljZSA9IDB4MDAsCiAgICAgICAgV2lk Z2V0ID0gMHgwMSwKICAgICAgICBQaXhtYXAgPSAweDAyLAogICAgICAgIFByaW50ZXIgPSAweDAz LAogICAgICAgIFBpY3R1cmUgPSAweDA0LAogICAgICAgIFN5c3RlbSA9IDB4MDUsCiAgICAgICAg RGV2aWNlVHlwZU1hc2sgPSAweDBmLAogICAgICAgIEV4dGVybmFsRGV2aWNlID0gMHgxMAogICAg fTsKfTsKCiMgMzYgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIgMiAz CgoKCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRl L2xpbWl0cy5oIiAxIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIu OTYvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt cmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk ZS9saW1pdHMuaCIgMSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEg MwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMTI3ICIvdXNyL2lu Y2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi IDIgMwoKCgoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp bnV4LzIuOTYvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIv aTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAzOSAiL3Vzci9s aWIvcXQtMi4yLjAvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAyIDMKCgoKY2xhc3MgUVBhaW50RGV2 aWNlOwpjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lk Z2V0TWFwcGVyOwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3Vw OwpjbGFzcyBRUGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6 ZTsKY2xhc3MgUVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3Mg UVJlZ2lvbjsKY2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZv OwpjbGFzcyBRUGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFw OwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdl SU87CmNsYXNzIFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBR VGltZXI7CmNsYXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExp c3Q7CmNsYXNzIFFXaWRnZXRMaXN0SXQ7CgoKCgojIDEwOCAiL3Vzci9saWIvcXQtMi4yLjAvaW5j bHVkZS9xd2luZG93ZGVmcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IFdJZDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgSEFORExFOwoKCnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5Owp0 eXBlZGVmIHVuaW9uIF9YRXZlbnQgWEV2ZW50Owp0eXBlZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlw ZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKCiBEaXNwbGF5ICpxdF94ZGlzcGxheSgpOwog aW50IHF0X3hzY3JlZW4oKTsKIFdJZCBxdF94cm9vdHdpbigpOwogR0MgcXRfeGdldF9yZWFkb25s eV9nYyggYm9vbCBtb25vY2hyb21lPUZBTFNFICk7CiBHQyBxdF94Z2V0X3RlbXBfZ2MoIGJvb2wg bW9ub2Nocm9tZT1GQUxTRSApOwoKIyAxMzQgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXdp bmRvd2RlZnMuaCIgMwpjbGFzcyBRQXBwbGljYXRpb247CgoKCgoKCgoKdHlwZWRlZiBRX0lOVDMy IFFDT09SRDsKY29uc3QgUUNPT1JEIFFDT09SRF9NQVggPSAyMTQ3NDgzNjQ3Owpjb25zdCBRQ09P UkQgUUNPT1JEX01JTiA9IC1RQ09PUkRfTUFYIC0gMTsKCnR5cGVkZWYgdW5zaWduZWQgaW50IFFS Z2I7CgogY2hhciAqcUFwcE5hbWUoKTsKCgoKCnR5cGVkZWYgdm9pZCAoKlFfQ2xlYW5VcEZ1bmN0 aW9uKSgpOwogdm9pZCBxQWRkUG9zdFJvdXRpbmUoIFFfQ2xlYW5VcEZ1bmN0aW9uICk7CiB2b2lk IHFSZW1vdmVQb3N0Um91dGluZSggUV9DbGVhblVwRnVuY3Rpb24gKTsKCgogdm9pZCAqcXRfZmlu ZF9vYmpfY2hpbGQoIFFPYmplY3QgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKIyAz MyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xd2lkZ2V0LmgiIDIgMwoKIyAzNiAiL3Vzci9s aWIvcXQtMi4yLjAvaW5jbHVkZS9xb2JqZWN0LmgiIDEgMwojIDM0ICIvdXNyL2xpYi9xdC0yLjIu MC9pbmNsdWRlL3FldmVudC5oIiAxIDMKIyAzNCAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9x cmVnaW9uLmgiIDEgMwojIDMzICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FyZWN0LmgiIDEg MwojIDMzICIvdXNyL2xpYi9xdC0yLjIuMC9pbmNsdWRlL3FzaXplLmgiIDEgMwojIDM2ICIvdXNy L2xpYi9xdC0yLjIuMC9pbmNsdWRlL3Fwb2ludC5oIiAxIDMKY2xhc3MgUVBvaW50CnsKcHVibGlj OgogICAgUVBvaW50KCk7CiAgICBRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyApOwoKICAgIGJv b2wgaXNOdWxsKCkgY29uc3Q7CgogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7 CiAgICB2b2lkIHNldFgoIGludCB4ICk7CiAgICB2b2lkIHNldFkoIGludCB5ICk7CgogICAgaW50 IG1hbmhhdHRhbkxlbmd0aCgpIGNvbnN0OwoKICAgIFFDT09SRCAmcngoKTsKICAgIFFDT09SRCAm cnkoKTsKCiAgICBRUG9pbnQgJm9wZXJhdG9yKz0oIGNvbnN0IFFQb2ludCAmcCApOwogICAgUVBv aW50ICZvcGVyYXRvci09KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2ludCAmb3BlcmF0b3Iq PSggaW50IGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IqPSggZG91YmxlIGMgKTsKICAgIFFQb2lu dCAmb3BlcmF0b3IvPSggaW50IGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IvPSggZG91YmxlIGMg KTsKCiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICYsIGNv bnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg UVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVy YXRvcisoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGlu ZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAg IGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICYsIGludCApOwog ICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFQb2ludCAmICk7 CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmLCBkb3Vi bGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggZG91YmxlLCBjb25zdCBR UG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9p bnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQg JiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2lu dCAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJv KCk7CgoKCgoKICAgIFFDT09SRCB4cDsKICAgIFFDT09SRCB5cDsKCn07CgoKCgoKCiBRRGF0YVN0 cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVBvaW50ICYgKTsKIFFEYXRh U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUG9pbnQgJiApOwoKCgoKCgppbmxp bmUgUVBvaW50OjpRUG9pbnQoKQp7IHhwPTA7IHlwPTA7IH0KCmlubGluZSBRUG9pbnQ6OlFQb2lu dCggaW50IHhwb3MsIGludCB5cG9zICkKeyB4cD0oUUNPT1JEKXhwb3M7IHlwPShRQ09PUkQpeXBv czsgfQoKaW5saW5lIGJvb2wgUVBvaW50Ojppc051bGwoKSBjb25zdAp7IHJldHVybiB4cCA9PSAw ICYmIHlwID09IDA7IH0KCmlubGluZSBpbnQgUVBvaW50Ojp4KCkgY29uc3QKeyByZXR1cm4geHA7 IH0KCmlubGluZSBpbnQgUVBvaW50Ojp5KCkgY29uc3QKeyByZXR1cm4geXA7IH0KCmlubGluZSB2 b2lkIFFQb2ludDo6c2V0WCggaW50IHggKQp7IHhwID0gKFFDT09SRCl4OyB9CgppbmxpbmUgdm9p ZCBRUG9pbnQ6OnNldFkoIGludCB5ICkKeyB5cCA9IChRQ09PUkQpeTsgfQoKaW5saW5lIFFDT09S RCAmUVBvaW50OjpyeCgpCnsgcmV0dXJuIHhwOyB9CgppbmxpbmUgUUNPT1JEICZRUG9pbnQ6OnJ5 KCkKeyByZXR1cm4geXA7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IrPSggY29u c3QgUVBvaW50ICZwICkKeyB4cCs9cC54cDsgeXArPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5s aW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvci09KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwLT1w LnhwOyB5cC09cC55cDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9w ZXJhdG9yKj0oIGludCBjICkKeyB4cCo9KFFDT09SRCljOyB5cCo9KFFDT09SRCljOyByZXR1cm4g KnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IqPSggZG91YmxlIGMgKQp7 IHhwPShRQ09PUkQpKHhwKmMpOyB5cD0oUUNPT1JEKSh5cCpjKTsgcmV0dXJuICp0aGlzOyB9Cgpp bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAy ICkKeyByZXR1cm4gcDEueHAgPT0gcDIueHAgJiYgcDEueXAgPT0gcDIueXA7IH0KCmlubGluZSBi b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJl dHVybiBwMS54cCAhPSBwMi54cCB8fCBwMS55cCAhPSBwMi55cDsgfQoKaW5saW5lIFFQb2ludCBv cGVyYXRvcisoIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBR UG9pbnQocDEueHArcDIueHAsIHAxLnlwK3AyLnlwKTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRv ci0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBRUG9pbnQo cDEueHAtcDIueHAsIHAxLnlwLXAyLnlwKTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNv bnN0IFFQb2ludCAmcCwgaW50IGMgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMpOyB9 CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0 dXJuIFFQb2ludChwLnhwKmMsIHAueXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBj b25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKeyByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAueHAq YyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggZG91Ymxl IGMsIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAo UUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvci0oIGNvbnN0IFFQb2lu dCAmcCApCnsgcmV0dXJuIFFQb2ludCgtcC54cCwgLXAueXApOyB9CgppbmxpbmUgUVBvaW50ICZR UG9pbnQ6Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICB3 YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgeHAvPShRQ09PUkQpYzsKICAgIHlwLz0oUUNPT1JEKWM7 CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSgg ZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVy bygpOwoKICAgIHhwPShRQ09PUkQpKHhwL2MpOwogICAgeXA9KFFDT09SRCkoeXAvYyk7CiAgICBy ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJnAs IGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICBRUG9pbnQ6Ondhcm5pbmdEaXZC eVplcm8oKTsKCiAgICByZXR1cm4gUVBvaW50KHAueHAvYywgcC55cC9jKTsKfQoKaW5saW5lIFFQ b2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMgKQp7CgogICAgaWYgKCBj ID09IDAuMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJu IFFQb2ludCgoUUNPT1JEKShwLnhwL2MpLCAoUUNPT1JEKShwLnlwL2MpKTsKfQoKCiMgMzMgIi91 c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXNpemUuaCIgMiAzCgoKCmNsYXNzIFFTaXplCnsKcHVi bGljOgogICAgUVNpemUoKTsKICAgIFFTaXplKCBpbnQgdywgaW50IGggKTsKCiAgICBib29sIGlz TnVsbCgpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQo KSBjb25zdDsKCiAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsK ICAgIHZvaWQgc2V0V2lkdGgoIGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsK ICAgIHZvaWQgdHJhbnNwb3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUg JiApIGNvbnN0OwogICAgUVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7Cgog ICAgUUNPT1JEICZyd2lkdGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZv cGVyYXRvcis9KCBjb25zdCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3Qg UVNpemUgJiApOwogICAgUVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3Bl cmF0b3IqPSggZG91YmxlIGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAg UVNpemUgJm9wZXJhdG9yLz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9w ZXJhdG9yPT0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxp bmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBm cmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUg JiApOwogICAgZnJpZW5kIGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNv bnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBR U2l6ZSAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNv bnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBR U2l6ZSAmLCBkb3VibGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3Vi bGUsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBj b25zdCBRU2l6ZSAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBj b25zdCBRU2l6ZSAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5n RGl2QnlaZXJvKCk7CgogICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCgoKCgogUURh dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTaXplICYgKTsKIFFE YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU2l6ZSAmICk7CgoKCgoKCmlu bGluZSBRU2l6ZTo6UVNpemUoKQp7IHdkID0gaHQgPSAtMTsgfQoKaW5saW5lIFFTaXplOjpRU2l6 ZSggaW50IHcsIGludCBoICkKeyB3ZD0oUUNPT1JEKXc7IGh0PShRQ09PUkQpaDsgfQoKaW5saW5l IGJvb2wgUVNpemU6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHdkPT0wICYmIGh0PT0wOyB9Cgpp bmxpbmUgYm9vbCBRU2l6ZTo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIHdkPDEgfHwgaHQ8MTsg fQoKaW5saW5lIGJvb2wgUVNpemU6OmlzVmFsaWQoKSBjb25zdAp7IHJldHVybiB3ZD49MCAmJiBo dD49MDsgfQoKaW5saW5lIGludCBRU2l6ZTo6d2lkdGgoKSBjb25zdAp7IHJldHVybiB3ZDsgfQoK aW5saW5lIGludCBRU2l6ZTo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gaHQ7IH0KCmlubGluZSB2 b2lkIFFTaXplOjpzZXRXaWR0aCggaW50IHcgKQp7IHdkPShRQ09PUkQpdzsgfQoKaW5saW5lIHZv aWQgUVNpemU6OnNldEhlaWdodCggaW50IGggKQp7IGh0PShRQ09PUkQpaDsgfQoKaW5saW5lIFFD T09SRCAmUVNpemU6OnJ3aWR0aCgpCnsgcmV0dXJuIHdkOyB9CgppbmxpbmUgUUNPT1JEICZRU2l6 ZTo6cmhlaWdodCgpCnsgcmV0dXJuIGh0OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRv cis9KCBjb25zdCBRU2l6ZSAmcyApCnsgd2QrPXMud2Q7IGh0Kz1zLmh0OyByZXR1cm4gKnRoaXM7 IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yLT0oIGNvbnN0IFFTaXplICZzICkKeyB3 ZC09cy53ZDsgaHQtPXMuaHQ7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6 b3BlcmF0b3IqPSggaW50IGMgKQp7IHdkKj0oUUNPT1JEKWM7IGh0Kj0oUUNPT1JEKWM7IHJldHVy biAqdGhpczsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IqPSggZG91YmxlIGMgKQp7 IHdkPShRQ09PUkQpKHdkKmMpOyBodD0oUUNPT1JEKShodCpjKTsgcmV0dXJuICp0aGlzOyB9Cgpp bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiAp CnsgcmV0dXJuIHMxLndkID09IHMyLndkICYmIHMxLmh0ID09IHMyLmh0OyB9CgppbmxpbmUgYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJu IHMxLndkICE9IHMyLndkIHx8IHMxLmh0ICE9IHMyLmh0OyB9CgppbmxpbmUgUVNpemUgb3BlcmF0 b3IrKCBjb25zdCBRU2l6ZSAmIHMxLCBjb25zdCBRU2l6ZSAmIHMyICkKeyByZXR1cm4gUVNpemUo czEud2QrczIud2QsIHMxLmh0K3MyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yLSggY29u c3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVybiBRU2l6ZShzMS53ZC1zMi53 ZCwgczEuaHQtczIuaHQpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAm cywgaW50IGMgKQp7IHJldHVybiBRU2l6ZShzLndkKmMsIHMuaHQqYyk7IH0KCmlubGluZSBRU2l6 ZSBvcGVyYXRvciooIGludCBjLCBjb25zdCBRU2l6ZSAmcyApCnsgcmV0dXJuIFFTaXplKHMud2Qq Yywgcy5odCpjKTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJnMsIGRv dWJsZSBjICkKeyByZXR1cm4gUVNpemUoKFFDT09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpj KSk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRU2l6ZSAmcyAp CnsgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQqYykpOyB9Cgpp bmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0g MCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHdkLz0oUUNPT1JEKWM7IGh0Lz0o UUNPT1JEKWM7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJh dG9yLz0oIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdE aXZCeVplcm8oKTsKCiAgICB3ZD0oUUNPT1JEKSh3ZC9jKTsgaHQ9KFFDT09SRCkoaHQvYyk7CiAg ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICZz LCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVNpemU6Ondhcm5pbmdEaXZC eVplcm8oKTsKCiAgICByZXR1cm4gUVNpemUocy53ZC9jLCBzLmh0L2MpOwp9CgppbmxpbmUgUVNp emUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09 IDAuMCApCiAgICAgICAgUVNpemU6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVNp emUoKFFDT09SRCkocy53ZC9jKSwgKFFDT09SRCkocy5odC9jKSk7Cn0KCmlubGluZSBRU2l6ZSBR U2l6ZTo6ZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiBvdGhlclNpemUgKSBjb25zdAp7CiAgICBy ZXR1cm4gUVNpemUoICgod2QpID4gKG90aGVyU2l6ZS53ZCkgPyAod2QpIDogKG90aGVyU2l6ZS53 ZCkpLCAoKGh0KSA+IChvdGhlclNpemUuaHQpID8gKGh0KSA6IChvdGhlclNpemUuaHQpKSApOwp9 CgppbmxpbmUgUVNpemUgUVNpemU6OmJvdW5kZWRUbyggY29uc3QgUVNpemUgJiBvdGhlclNpemUg KSBjb25zdAp7CiAgICByZXR1cm4gUVNpemUoICgod2QpIDwgKG90aGVyU2l6ZS53ZCkgPyAod2Qp IDogKG90aGVyU2l6ZS53ZCkpLCAoKGh0KSA8IChvdGhlclNpemUuaHQpID8gKGh0KSA6IChvdGhl clNpemUuaHQpKSApOwp9CgoKIyAzMyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xcmVjdC5o IiAyIDMKCgoKCgoKCmNsYXNzIFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEg PSAwOyB4MiA9IHkyID0gLTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNv bnN0IFFQb2ludCAmYm90dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxl ZnQsIGNvbnN0IFFTaXplICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGlu dCB3aWR0aCwgaW50IGhlaWdodCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s IGlzRW1wdHkoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9y bWFsaXplKCkgY29uc3Q7CgogICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25z dDsKICAgIGludCByaWdodCgpIGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFD T09SRCAmckxlZnQoKTsKICAgIFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsK ICAgIFFDT09SRCAmckJvdHRvbSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNv bnN0OwogICAgdm9pZCBzZXRMZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBv cyApOwogICAgdm9pZCBzZXRSaWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGlu dCBwb3MgKTsKICAgIHZvaWQgc2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsK CiAgICBRUG9pbnQgdG9wTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbVJpZ2h0KCkgY29u c3Q7CiAgICBRUG9pbnQgdG9wUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkg Y29uc3Q7CiAgICBRUG9pbnQgY2VudGVyKCkgY29uc3Q7CgogICAgdm9pZCByZWN0KCBpbnQgKngs IGludCAqeSwgaW50ICp3LCBpbnQgKmggKSBjb25zdDsKICAgIHZvaWQgY29vcmRzKCBpbnQgKngx LCBpbnQgKnkxLCBpbnQgKngyLCBpbnQgKnkyICkgY29uc3Q7CgogICAgdm9pZCBtb3ZlVG9wTGVm dCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBv aW50ICZwICk7CiAgICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2 b2lkIG1vdmVCb3R0b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRl ciggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsK CiAgICB2b2lkIHNldFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lk IHNldENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUg c2l6ZSgpIGNvbnN0OwogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29u c3Q7CiAgICB2b2lkIHNldFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBo ICk7CiAgICB2b2lkIHNldFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0 b3J8KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVj dCAmcikgY29uc3Q7CiAgICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBR UmVjdCYgb3BlcmF0b3ImPShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29u c3QgUVBvaW50ICZwLCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlu cyggaW50IHgsIGludCB5LCBib29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250 YWlucyggY29uc3QgUVJlY3QgJnIsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVj dCB1bml0ZSggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIFFSZWN0IGludGVyc2VjdCggY29u c3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIGJvb2wgaW50ZXJzZWN0cyggY29uc3QgUVJlY3QgJnIg KSBjb25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25z dCBRUmVjdCAmICk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBj b25zdCBRUmVjdCAmICk7Cgpwcml2YXRlOgoKCgoKCgogICAgUUNPT1JEIHgxOwogICAgUUNPT1JE IHkxOwogICAgUUNPT1JEIHgyOwogICAgUUNPT1JEIHkyOwoKfTsKCiBib29sIG9wZXJhdG9yPT0o IGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg UVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwo IFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+ KCBRRGF0YVN0cmVhbSAmLCBRUmVjdCAmICk7CgoKCgoKCmlubGluZSBRUmVjdDo6UVJlY3QoIGlu dCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKQp7CiAgICB4MSA9IChRQ09P UkQpbGVmdDsKICAgIHkxID0gKFFDT09SRCl0b3A7CiAgICB4MiA9IChRQ09PUkQpKGxlZnQrd2lk dGgtMSk7CiAgICB5MiA9IChRQ09PUkQpKHRvcCtoZWlnaHQtMSk7Cn0KCmlubGluZSBib29sIFFS ZWN0Ojppc051bGwoKSBjb25zdAp7IHJldHVybiB4MiA9PSB4MS0xICYmIHkyID09IHkxLTE7IH0K CmlubGluZSBib29sIFFSZWN0Ojppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4geDEgPiB4MiB8fCB5 MSA+IHkyOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHgx IDw9IHgyICYmIHkxIDw9IHkyOyB9CgppbmxpbmUgaW50IFFSZWN0OjpsZWZ0KCkgY29uc3QKeyBy ZXR1cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnRvcCgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9 CgppbmxpbmUgaW50IFFSZWN0OjpyaWdodCgpIGNvbnN0CnsgcmV0dXJuIHgyOyB9CgppbmxpbmUg aW50IFFSZWN0Ojpib3R0b20oKSBjb25zdAp7IHJldHVybiB5MjsgfQoKaW5saW5lIFFDT09SRCAm UVJlY3Q6OnJMZWZ0KCkKeyByZXR1cm4geDE7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6clRv cCgpCnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJSaWdodCgpCnsgcmV0 dXJuIHgyOyB9CgppbmxpbmUgUUNPT1JEICYgUVJlY3Q6OnJCb3R0b20oKQp7IHJldHVybiB5Mjsg fQoKaW5saW5lIGludCBRUmVjdDo6eCgpIGNvbnN0CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50 IFFSZWN0Ojp5KCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRM ZWZ0KCBpbnQgcG9zICkKeyB4MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6 c2V0VG9wKCBpbnQgcG9zICkKeyB5MSA9IChRQ09PUkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVj dDo6c2V0UmlnaHQoIGludCBwb3MgKQp7IHgyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lk IFFSZWN0OjpzZXRCb3R0b20oIGludCBwb3MgKQp7IHkyID0gKFFDT09SRClwb3M7IH0KCmlubGlu ZSB2b2lkIFFSZWN0OjpzZXRYKCBpbnQgeCApCnsgeDEgPSAoUUNPT1JEKXg7IH0KCmlubGluZSB2 b2lkIFFSZWN0OjpzZXRZKCBpbnQgeSApCnsgeTEgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRUG9p bnQgUVJlY3Q6OnRvcExlZnQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDEsIHkxKTsgfQoKaW5s aW5lIFFQb2ludCBRUmVjdDo6Ym90dG9tUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDIs IHkyKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wUmlnaHQoKSBjb25zdAp7IHJldHVybiBR UG9pbnQoeDIsIHkxKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6Ym90dG9tTGVmdCgpIGNvbnN0 CnsgcmV0dXJuIFFQb2ludCh4MSwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0OjpjZW50ZXIo KSBjb25zdAp7IHJldHVybiBRUG9pbnQoKHgxK3gyKS8yLCAoeTEreTIpLzIpOyB9CgppbmxpbmUg aW50IFFSZWN0Ojp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHgyIC0geDEgKyAxOyB9CgppbmxpbmUg aW50IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiB5MiAtIHkxICsgMTsgfQoKaW5saW5l IFFTaXplIFFSZWN0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gUVNpemUoeDIteDErMSwgeTIteTEr MSk7IH0KCgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFpbnMoIGNvbnN0IFFQb2ludCAmcCwgYm9v bCBwcm9wZXIgKSBjb25zdAp7CiAgICBpZiAoIHByb3BlciApCiAgICAgICAgcmV0dXJuIHAueCgp ID4geDEgJiYgcC54KCkgPCB4MiAmJgogICAgICAgICAgICAgICBwLnkoKSA+IHkxICYmIHAueSgp IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHAueCgpID49IHgxICYmIHAueCgpIDw9IHgy ICYmCiAgICAgICAgICAgICAgIHAueSgpID49IHkxICYmIHAueSgpIDw9IHkyOwp9CgoKaW5saW5l IGJvb2wgUVJlY3Q6OmNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkgY29uc3QK ewogICAgaWYgKCBwcm9wZXIgKQogICAgICAgIHJldHVybiB4ID4geDEgJiYgeCA8IHgyICYmCiAg ICAgICAgICAgICAgIHkgPiB5MSAmJiB5IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHgg Pj0geDEgJiYgeCA8PSB4MiAmJgogICAgICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0K CiMgMzQgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXJlZ2lvbi5oIiAyIDMKCgoKCmNsYXNz IFFSZWdpb24KewpwdWJsaWM6CiAgICBlbnVtIFJlZ2lvblR5cGUgeyBSZWN0YW5nbGUsIEVsbGlw c2UgfTsKCiAgICBRUmVnaW9uKCk7CiAgICBRUmVnaW9uKCBpbnQgeCwgaW50IHksIGludCB3LCBp bnQgaCwgUmVnaW9uVHlwZSA9IFJlY3RhbmdsZSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJlY3Qg JiwgUmVnaW9uVHlwZSA9IFJlY3RhbmdsZSApOwogICAgUVJlZ2lvbiggY29uc3QgUVBvaW50QXJy YXkgJiwgYm9vbCB3aW5kaW5nPUZBTFNFICk7CiAgICBRUmVnaW9uKCBjb25zdCBRUmVnaW9uICYg KTsKICAgIFFSZWdpb24oIGNvbnN0IFFCaXRtYXAgJiApOwogICB+UVJlZ2lvbigpOwogICAgUVJl Z2lvbiAmb3BlcmF0b3I9KCBjb25zdCBRUmVnaW9uICYgKTsKCiAgICBib29sIGlzTnVsbCgpIGNv bnN0OwogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CgogICAgYm9vbCBjb250YWlucyggY29uc3Qg UVBvaW50ICZwICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciApIGNv bnN0OwoKICAgIHZvaWQgdHJhbnNsYXRlKCBpbnQgZHgsIGludCBkeSApOwoKICAgIFFSZWdpb24g dW5pdGUoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBpbnRlcnNlY3QoIGNv bnN0IFFSZWdpb24gJikgY29uc3Q7CiAgICBRUmVnaW9uIHN1YnRyYWN0KCBjb25zdCBRUmVnaW9u ICYgKSBjb25zdDsKICAgIFFSZWdpb24gZW9yKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKCiAg ICBRUmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKICAgIFFBcnJheTxRUmVjdD4gcmVjdHMoKSBj b25zdDsKICAgIHZvaWQgc2V0UmVjdHMoIGNvbnN0IFFSZWN0ICosIGludCApOwoKICAgIFFSZWdp b24gb3BlcmF0b3J8KCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gb3BlcmF0 b3IrKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gb3BlcmF0b3ImKCBjb25z dCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gb3BlcmF0b3ItKCBjb25zdCBRUmVnaW9u ICYgKSBjb25zdDsKICAgIFFSZWdpb24gb3BlcmF0b3JeKCBjb25zdCBRUmVnaW9uICYgKSBjb25z dDsKICAgIFFSZWdpb24mIG9wZXJhdG9yfD0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lv biYgb3BlcmF0b3IrPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvciY9 KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yLT0oIGNvbnN0IFFSZWdp b24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3JePSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAg Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0 b3IhPSggY29uc3QgUVJlZ2lvbiAmciApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgIHsg cmV0dXJuICEob3BlcmF0b3I9PShyKSk7IH0KCgoKCiAgICBSZWdpb24gaGFuZGxlKCkgY29uc3Qg eyByZXR1cm4gZGF0YS0+cmduOyB9CiMgOTYgIi91c3IvbGliL3F0LTIuMi4wL2luY2x1ZGUvcXJl Z2lvbi5oIiAzCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt ICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+ KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBib29s ICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CgoKCiAgICB2 b2lkIGV4ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsKICAgIHN0cnVjdCBR UmVnaW9uRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKICAgICAgICBSZWdpb24gcmduOwoKCgoK CiAgICAgICAgYm9vbCBpc19udWxsOwogICAgfSAqZGF0YTsKfTsKCgojIDEzOSAiL3Vzci9saWIv cXQtMi4yLjAvaW5jbHVkZS9xcmVnaW9uLmgiIDMKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR RGF0YVN0cmVhbSAmLCBjb25zdCBRUmVnaW9uICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+ KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKIyAzNCAiL3Vzci9saWIvcXQtMi4yLjAvaW5j bHVkZS9xZXZlbnQuaCIgMiAzCgoKIyAzNyAiL3Vzci9saWIvcXQtMi4yLjAvaW5jbHVkZS9xbWlt ZS5oIiAxIDMKY2xhc3MgUU1pbWVTb3VyY2UgewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RTWltZVNv dXJjZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0gMCApIGNvbnN0 ID0gMDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsKICAg IHZpcnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25zdCA9IDA7 Cn07CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnlEYXRhOwpjbGFzcyBRU3RyaW5nTGlzdDsKCmNs YXNzIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAgIFFNaW1lU291cmNlRmFjdG9yeSgp OwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7CgogICAgc3RhdGljIFFNaW1lU291 cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRG YWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CgogICAgdmlydHVhbCBjb25zdCBRTWltZVNv dXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkgY29uc3Q7CiAgICB2aXJ0dWFsIFFT dHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFic19vcl9yZWxfbmFtZSwgY29uc3Qg UVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25z dCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0 OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29u c3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldEltYWdlKCBjb25zdCBRU3Ry aW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwogICAgdmlydHVhbCB2b2lkIHNldFBp eG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFQaXhtYXAmIHBtICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIFFNaW1lU291cmNl KiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBhdGgoIGNvbnN0IFFTdHJpbmdMaXN0 JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0aCgpIGNvbnN0OwogICAgdm9pZCBh ZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlbnNp b25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNoYXIqIG1pbWV0eXBlICk7Cgpwcml2 YXRlOgogICAgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsKfTsKCiMgMzYgIi91c3IvbGliL3F0 LTIuMi4wL2luY2x1ZGUvcWV2ZW50LmgiIDIgMwoKCgpjbGFzcyBRRXZlbnQ6IHB1YmxpYyBRdAp7 CnB1YmxpYzoKICAgIGVudW0gVHlwZSB7CgoKCgoKCiAgICAgICAgTm9uZSA9IDAsCgoKICAgICAg ICBUaW1lciA9IDEsCiAgICAgICAgTW91c2VCdXR0b25QcmVzcyA9IDIsCiAgICAgICAgTW91c2VC dXR0b25SZWxlYXNlID0gMywKICAgICAgICBNb3VzZUJ1dHRvbkRibENsaWNrPSA0LAogICAgICAg IE1vdXNlTW92ZSA9IDUsCiAgICAgICAgS2V5UHJlc3MgPSA2LAogICAgICAgIEtleVJlbGVhc2Ug PSA3LAogICAgICAgIEZvY3VzSW4gPSA4LAogICAgICAgIEZvY3VzT3V0ID0gOSwKICAgICAgICBF bnRlciA9IDEwLAogICAgICAgIExlYXZlID0gMTEsCiAgICAgICAgUGFpbnQgPSAxMiwKICAgICAg ICBNb3ZlID0gMTMsCiAgICAgICAgUmVzaXplID0gMTQsCiAgICAgICAgQ3JlYXRlID0gMTUsCiAg ICAgICAgRGVzdHJveSA9IDE2LAogICAgICAgIFNob3cgPSAxNywKICAgICAgICBIaWRlID0gMTgs CiAgICAgICAgQ2xvc2UgPSAxOSwKICAgICAgICBRdWl0ID0gMjAsCiAgICAgICAgUmVwYXJlbnQg PSAyMSwKICAgICAgICBTaG93TWluaW1pemVkID0gMjIsCiAgICAgICAgU2hvd05vcm1hbCA9IDIz LAogICAgICAgIFdpbmRvd0FjdGl2YXRlID0gMjQsCiAgICAgICAgV2luZG93RGVhY3RpdmF0ZSA9 IDI1LAogICAgICAgIFNob3dUb1BhcmVudCA9IDI2LAogICAgICAgIEhpZGVUb1BhcmVudCA9IDI3 LAogICAgICAgIFNob3dNYXhpbWl6ZWQgPSAyOCwKICAgICAgICBBY2NlbCA9IDMwLAogICAgICAg IFdoZWVsID0gMzEsCiAgICAgICAgQWNjZWxBdmFpbGFibGUgPSAzMiwKICAgICAgICBDYXB0aW9u Q2hhbmdlID0gMzMsCiAgICAgICAgSWNvbkNoYW5nZSA9IDM0LAogICAgICAgIFBhcmVudEZvbnRD aGFuZ2UgPSAzNSwKICAgICAgICBBcHBsaWNhdGlvbkZvbnRDaGFuZ2UgPSAzNiwKICAgICAgICBQ YXJlbnRQYWxldHRlQ2hhbmdlID0gMzcsCiAgICAgICAgQXBwbGljYXRpb25QYWxldHRlQ2hhbmdl ID0gMzgsCiAgICAgICAgQ2xpcGJvYXJkID0gNDAsCiAgICAgICAgU3BlZWNoID0gNDIsCiAgICAg ICAgU29ja0FjdCA9IDUwLAogICAgICAgIERyYWdFbnRlciA9IDYwLAogICAgICAgIERyYWdNb3Zl ID0gNjEsCiAgICAgICAgRHJhZ0xlYXZlID0gNjIsCiAgICAgICAgRHJvcCA9IDYzLAogICAgICAg IERyYWdSZXNwb25zZSA9IDY0LAogICAgICAgIENoaWxkSW5zZXJ0ZWQgPSA3MCwKICAgICAgICBD aGlsZFJlbW92ZWQgPSA3MSwKICAgICAgICBMYXlvdXRIaW50ID0gNzIsCiAgICAgICAgU2hvd1dp bmRvd1JlcXVlc3QgPSA3MywKICAgICAgICBBY3RpdmF0ZUNvbnRyb2wgPSA4MCwKICAgICAgICBE ZWFjdGl2YXRlQ29udHJvbCA9IDgxLAogICAgICAgIFVzZXIgPSAxMDAwCiAgICB9OwoKICAgIFFF dmVudCggVHlwZSB0eXBlICkgOiB0KHR5cGUpLCBwb3N0ZWQoRkFMU0UpIHt9CiAgICB2aXJ0dWFs IH5RRXZlbnQoKTsKICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0KcHJvdGVjdGVk OgogICAgVHlwZSB0Owpwcml2YXRlOgogICAgYm9vbCBwb3N0ZWQ7CgoKCgogICAgZnJpZW5kIGNs YXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoK CmNsYXNzIFFUaW1lckV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFUaW1lckV2 ZW50KCBpbnQgdGltZXJJZCApCiAgICAgICAgOiBRRXZlbnQoVGltZXIpLCBpZCh0aW1lcklkKSB7 fQogICAgaW50IHRpbWVySWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQpwcm90ZWN0ZWQ6CiAgICBp bnQgaWQ7Cn07CgoKY2xhc3MgUU1vdXNlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgog ICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50ICZwb3MsIGludCBidXR0b24s IGludCBzdGF0ZSApOwoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAm cG9zLCBjb25zdCBRUG9pbnQmZ2xvYmFsUG9zLAogICAgICAgICAgICAgICAgIGludCBidXR0b24s IGludCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIHAocG9zKSwgZyhnbG9iYWxQb3Mp LCBiKGJ1dHRvbikscygodXNob3J0KXN0YXRlKSB7fTsKCiAgICBjb25zdCBRUG9pbnQgJnBvcygp IGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zKCkgY29uc3Qg eyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBwLngoKTsgfQogICAgaW50 IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2JhbFgoKSBjb25zdCB7IHJl dHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBnLnkoKTsgfQog ICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gKEJ1dHRvblN0YXRlKSBiOyB9 CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIChCdXR0b25TdGF0ZSkgczsg fQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigpIGNvbnN0Owpwcm90ZWN0ZWQ6CiAgICBRUG9p bnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGI7CiAgICB1c2hvcnQgczsKfTsKCgoKY2xhc3Mg UVdoZWVsRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVdoZWVsRXZlbnQoIGNv bnN0IFFQb2ludCAmcG9zLCBpbnQgZGVsdGEsIGludCBzdGF0ZSApOwogICAgUVdoZWVsRXZlbnQo IGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQmIGdsb2JhbFBvcywgaW50IGRlbHRhLCBp bnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KFdoZWVsKSwgcChwb3MpLCBnKGdsb2JhbFBvcyks IGQoZGVsdGEpLCBzKCh1c2hvcnQpc3RhdGUpLAogICAgICAgICAgYWNjcHQoVFJVRSkge30KICAg IGludCBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkg Y29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7 IHJldHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQg eSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0 dXJuIGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9CiAg ICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAg ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2Nl cHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7 IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIGludCBkOwogICAg dXNob3J0IHM7CiAgICBib29sIGFjY3B0Owp9OwoKCmNsYXNzIFFLZXlFdmVudCA6IHB1YmxpYyBR RXZlbnQKewpwdWJsaWM6CiAgICBRS2V5RXZlbnQoIFR5cGUgdHlwZSwgaW50IGtleSwgaW50IGFz Y2lpLCBpbnQgc3RhdGUsCiAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0PVFTdHJp bmc6Om51bGwsIGJvb2wgYXV0b3JlcD1GQUxTRSwgdXNob3J0IGNvdW50PTEgKQogICAgICAgIDog UUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGsoKHVzaG9ydClrZXkpLCBzKCh1c2hvcnQpc3RhdGUp LAogICAgICAgICAgICBhKCh1Y2hhcilhc2NpaSksIGFjY3B0KFRSVUUpLCBhdXRvcihhdXRvcmVw KSwgYyhjb3VudCkge30KICAgIGludCBrZXkoKSBjb25zdCB7IHJldHVybiBrOyB9CiAgICBpbnQg YXNjaWkoKSBjb25zdCB7IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0 IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkg Y29uc3Q7CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAg UVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBib29sIGlzQXV0b1JlcGVh dCgpIGNvbnN0IHsgcmV0dXJuIGF1dG9yOyB9CiAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVy biBpbnQoYyk7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQg aWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRU3RyaW5nIHR4dDsK ICAgIHVzaG9ydCBrLCBzOwogICAgdWNoYXIgYTsKICAgIHVpbnQgYWNjcHQ6MTsKICAgIHVpbnQg YXV0b3I6MTsKICAgIHVzaG9ydCBjOwp9OwoKCmNsYXNzIFFGb2N1c0V2ZW50IDogcHVibGljIFFF dmVudAp7CnB1YmxpYzoKCiAgICBRRm9jdXNFdmVudCggVHlwZSB0eXBlICkKICAgICAgICA6IFFF dmVudCh0eXBlKSB7fQoKICAgIGJvb2wgZ290Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg PT0gRm9jdXNJbjsgfQogICAgYm9vbCBsb3N0Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg PT0gRm9jdXNPdXQ7IH0KCiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBUYWIsIEFjdGl2ZVdpbmRv dywgUG9wdXAsIFNob3J0Y3V0LCBPdGhlciB9OwogICAgc3RhdGljIFJlYXNvbiByZWFzb24oKTsK ICAgIHN0YXRpYyB2b2lkIHNldFJlYXNvbiggUmVhc29uIHJlYXNvbiApOwogICAgc3RhdGljIHZv aWQgcmVzZXRSZWFzb24oKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgUmVhc29uIG1fcmVhc29uOwog ICAgc3RhdGljIFJlYXNvbiBwcmV2X3JlYXNvbjsKfTsKCgpjbGFzcyBRUGFpbnRFdmVudCA6IHB1 YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUGFpbnRFdmVudCggY29uc3QgUVJlZ2lvbiYgcGFp bnRSZWdpb24sIGJvb2wgZXJhc2VkID0gVFJVRSkKICAgICAgICA6IFFFdmVudChQYWludC