>Number: 6964 >Category: c >Synopsis: Internal compiler error using -O2 but ok using -O0 >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Fri Jun 07 14:26:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Jari Häkkinen >Release: gcc version 3.1.1 20020605 (prerelease) >Organization: >Environment: i686-pc-linux-gnu/kernel 2.4.18-4 >Description: I am trying to run the test after compiling the latest CVS version of GNU Scientific Library, but the compiler aborts. Asked GSL mailing list for support but the consensus was that this error should be reported to gcc development team. A plain 'configure' was used when gcc was compiled. Compilation command: /usr/local/bin/gcc -DHAVE_CONFIG_H -I. -I. -O2 -c test.c gives the below respons. Compilation is ok if optimization is turned off (-O0). In file included from test.c:61: test_complex_source.c: In function `test_complex_float_trap': test_complex_source.c:258: Internal compiler error in subst, at combine.c:3546 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="test.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.i" IyAxICJ0ZXN0LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJ0 ZXN0LmMiCiMgMjAgInRlc3QuYyIKIyAxICJjb25maWcuaCIgMQojIDIxICJ0ZXN0LmMiIDIKCgoK CgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAy OTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMjEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEu MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVk IGludCBzaXplX3Q7CiMgMjk0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90Owoj IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9 IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25n IGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4dGVybiBkb3Vi bGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n IGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0cikgOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGlu dCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpleHRl cm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UpCiAgICAgOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpfX2V4 dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoj IDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50 ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK ICAgICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUg X19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXAp IDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoK CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0 b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25n IGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAg cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQojIDMyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAg cmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0 cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50 ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9f YmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f YmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBs b25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBf X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVy biBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxp bmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRv bCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUg bG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChf X25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsK ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoj IDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGlu dCBfX24pIDsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAx IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hv cnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBf X3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f dV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90Owoj IDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19p bnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNo b3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7 CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWlu dDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2 NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2 NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9f ZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsK dHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVk ZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBf X3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6 ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGlt NjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVm IGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoK dHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0 eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3Bp ZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGlu dCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9f dV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoK CnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Zp bGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9m Zl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh ZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vz ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3Rh dHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRf YXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1 Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGlu dCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0Owog IHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9j azsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293 bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7 Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5k Owp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90Owoj IDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy IDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hh ciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2lu dDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBl ZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlw ZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA2MSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVk ZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRl ZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBl ZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl ZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBf X3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVm IF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwoj IDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgy ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90Owoj IDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMg MTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMiAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVm IGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSld OwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1l LmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7 CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1l LmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwK ICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsK IyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25k c190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoK dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8g KDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9f ZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgoK CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CiMgMTE4 ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIx OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAyMzAgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Js a2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMg MjYyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCiMgMzkxICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJu IHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICpp bml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRz dGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBp bnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRz dGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYs CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVy biBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoK CmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGlu dCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7 CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBs cmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp bnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVy biBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4 dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQg c2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0 ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpz dHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAg IHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f YzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcg aW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBp bnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3Ig KGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAg OwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwK ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4 dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI3ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNp emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19z aXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9p ZCAqX19wdHIpIDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAi L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAz CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoK CmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1NDcgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19z aXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl dHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsK CgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p ZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50 IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgNTg3ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRl cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1 ZSwgaW50IF9fcmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyMyAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt cGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoj IDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFy ICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2Nv bW1hbmQpIDsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVh bHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgq X19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CiMgNjg5ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9p ZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl eHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRl cm4gaW50IGFicyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g bG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CiMgNzEwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9f bnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAg IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFy ICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7 CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj aGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2 dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoK CgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSA7CgoK ZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgoKZXh0 ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSA7CgoKCmV4dGVybiBz aXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7Cgpl eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f bikKICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNw b25zZSkgOwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9h ZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgOwoKCgoKCgojIDI3ICJ0ZXN0 LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9m Y250bC5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDEgMwojIDEzNiAi L3Vzci9pbmNsdWRlL2JpdHMvZmNudGwuaCIgMwpzdHJ1Y3QgZmxvY2sKICB7CiAgICBzaG9ydCBp bnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxfd2hlbmNlOwoKICAgIF9fb2ZmX3QgbF9zdGFydDsK ICAgIF9fb2ZmX3QgbF9sZW47CgoKCgogICAgX19waWRfdCBsX3BpZDsKICB9OwojIDM0ICIvdXNy L2luY2x1ZGUvZmNudGwuaCIgMiAzCiMgNjAgIi91c3IvaW5jbHVkZS9mY250bC5oIiAzCmV4dGVy biBpbnQgZmNudGwgKGludCBfX2ZkLCBpbnQgX19jbWQsIC4uLikgOwoKCgoKCmV4dGVybiBpbnQg b3BlbiAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIDsKIyA4MyAiL3Vz ci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2Zp bGUsIF9fbW9kZV90IF9fbW9kZSkgOwojIDExMiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0 ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgOwojIDE2 NSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKCiMgMjggInRlc3QuYyIgMgojIDEgIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAx IDMKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoj IDU0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIg Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25m aWcuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3 aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRl X3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7 CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlw ZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9 IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpf X2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy ICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAo dm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh ciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBj aGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0 KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19l bmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252 X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJh bnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsK ICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoK CgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpf X3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRl cjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0 IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl ZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgog IGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19v dXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVy OwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9f bWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu czsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7 CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5m byBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0 cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252 X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I SV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEg MwojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2lu Y2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz dDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBf SU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxF ICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07 CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3Bh cnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoK CiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9f cmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7 CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lP X2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNl OwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoK ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXpl OwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47 CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg X0lPX2xvY2tfdCAqX2xvY2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm NjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50 IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAo dm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVj dCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk aW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4g c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tp ZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVf dCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVm IGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQg X193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgMzk2 ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM RSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3Zl cmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP X0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3 aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0 ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBf SU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM RSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg OwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZv aWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr ZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y ZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f c3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz aXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2Zm NjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUg KiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf SU9fRklMRSAqKSA7CiMgNzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19m cG9zX3QgZnBvc190OwojIDEzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp b19saW0uaCIgMSAzCiMgMTM5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0 ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQg cmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpl eHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE3MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KnRtcG5hbSAoY2hhciAqX19zKSA7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9f cykgOwojIDE4OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAq X19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGlu dCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgOwojIDIxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4g KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgMjQyICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklM RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CiMgMjY1ICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIg Kl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg IGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYg KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0 ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpIDsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzM2ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50 IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJu IGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwojIDM2MiAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRj IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoK ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdl dGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0 ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9j a2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2Nr ZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoK ZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNo YXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkKICAgICA7CiMgNDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqZ2V0cyAoY2hh ciAqX19zKSA7CiMgNDUyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKIyA0NjIg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJu IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3Qg ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVy biBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRl X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9u ZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxF ICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwojIDUw NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRl L3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChG SUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSA7CiMgNTQyICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAo RklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoK CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu IGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25z dCBjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKIyA1NzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZmls ZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpf X2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG SUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsK IyA2MjAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsK CgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZv aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjQxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp by5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAoc3Rk b3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2b2lk KQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQK Z2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9w dHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQg Y2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQK Z2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRy ID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQg Y2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBp bnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9 CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNo YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIr KyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGlu dCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+ X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hh cl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRy ID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2ln bmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVf cHRyKysgPSAoX19jKSkpOwp9CiMgMTExICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmV4 dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1 cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lubGlu ZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0 cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjQyICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiMgMjkg InRlc3QuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGguaCIgMSAzCiMgMjIgIi91 c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEg MwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi IDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hY29z IChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJs ZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbjIg KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHNp biAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSA7CgpleHRl cm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUg X194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3Vi bGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkg OwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zaW5o IChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91 YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBk b3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUg X194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUg X19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGlu dCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAq X19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4 cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25l bnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f bG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIG1vZGYg KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3Vi bGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUg X194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3Vi bGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19s b2diIChkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg MwpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91 YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0 IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSA7CgoKCmV4 dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJs ZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gZG91YmxlIGNi cnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIDsKCgoK CgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19jZWlsIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRv dWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZt b2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFs dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChk b3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu dCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0 ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRv dWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNh bmQgKGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBf X2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gaW50 IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAo ZG91YmxlKSA7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEg KGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91Ymxl IF9fam4gKGludCwgZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4g ZG91YmxlIF9feTAgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJu IGRvdWJsZSBfX3kxIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsg ZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJm IChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUg ZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRv dWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsK IyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZ2Ft bWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRl cm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91 YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBk b3VibGUgcmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9f eCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpl eHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4g ZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBk b3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3Nj YWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAo ZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194 LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGlu dCBfX2lsb2diIChkb3VibGUgX194KSA7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoj IDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh bGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g ZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194 KSA7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2lu ZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4g ZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBf X3ksIGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQg X194KSA7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19j b3NmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fc2luZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194 KSA7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgOwojIDc4ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19jb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0 IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQg dGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSA7CgoK CmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zaGYg KGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIDsKCgoKCgpleHRlcm4gZmxv YXQgZXhwZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgOwoj IDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGZyZXhw ZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChm bG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0 IF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gs IGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9h dCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxv YXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgOyBleHRlcm4gZmxvYXQgX19tb2Rm ZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZs b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBm bG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9f eCkgOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xv Z2JmIChmbG9hdCBfX3gpIDsKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAz CmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQg X19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxv YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZs b2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9faHlwb3Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxv YXQgY2VpbGYgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoK CgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9h dCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRy ZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194 KSA7IGV4dGVybiBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4g ZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjA5ICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQp IDsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkg OyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxv YXQpIDsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MGYg KGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkxZiAo ZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeW5mIChp bnQsIGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoKCgoKCmV4dGVy biBmbG9hdCBlcmZmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgOwpleHRl cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgOwpl eHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxv YXQpIDsKIyAyMzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9h dCBnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoK ZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4g ZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJu IGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9f eCkgOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVy biBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQg X19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2Nh bGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0 IF9feCwgZmxvYXQgX19uKSA7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBp bnQgX19uKSA7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoK CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZs b2F0IF9feCkgOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNs dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1 NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFj b3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcg ZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu IGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAo bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25n IGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29z bCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3Vi bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBs b25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3Vi bGUgX194KSA7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkg OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDYgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwg KGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVy biBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkg OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGxvZzEwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAo bG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25n IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBf X3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSA7CiMgMTQzICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUg c3FydGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9u ZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj YnJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25n IGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJs ZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Y2VpbGwgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3Js IChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3Vi bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m aW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVt bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBs b25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwojIDIwOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGludCBf X2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91 YmxlIGoxbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRv dWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVy biBsb25nIGRvdWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3Vi bGUgeTBsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91 YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50 LCBsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3Vi bGUpIDsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVy ZmNsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3Vi bGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSA7CiMgMjM4ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJs ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3Np Z25nYW1wKSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRl cm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4 dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWlu ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikg OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f bikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBf X24pIDsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50 IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMg MjQwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEs CiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05f VFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjY1ICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBleGNlcHRpb24KCiAgewogICAgaW50IHR5cGU7 CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRv dWJsZSByZXR2YWw7CiAgfTsKCgoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IGV4Y2VwdGlv biAqX19leGMpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSA7IGV4dGVybiBf X2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAw LjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9f c2duZiAoZmxvYXQpIDsgZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7 IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194 ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQyNiAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbjIg KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg X19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp LCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f YXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg fQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs dWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs dWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIg ImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAi Y2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA0NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp bmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJl dHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xh dGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f cmVzdWx0OyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3Vs dDsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1cm4g X19idWlsdGluX2ZhYnMgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9h dCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2Zh YnNsIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRv dWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NyAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbiAo ZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSki KTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQg X194KSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQx OyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVy biBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3Nn bjFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAo bG9uZyBkb3VibGUgX194KSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hs ZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hp WzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgw MDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTMgIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZsb29y IChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f Y3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3 dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg JTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog OiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZs b29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50 IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBf X2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk Y3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi IDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDQg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91Ymxl IGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7 IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3Zv bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cp KTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAo ImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50 IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1 MjIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91 YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMg NTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBp ZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkg X192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxk bG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194 KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9n MXBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFi c2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUg PSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQi ICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzFw bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChf X2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3Zh bHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJc blx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDog InN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo aW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f c2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFw bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAq IF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxv bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gp OyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkg KyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGFjb3NoIChkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3gg LSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFj b3NoZiAoZmxvYXQgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjAp ICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFj b3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3gg LSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl IGF0YW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wg KF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkg KiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAu NSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsg fSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBs b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoK CmV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsg cmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f eCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90 bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f eCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nYiAoZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRv dWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9f anVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0 ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAo X194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2di bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQi IDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192 YWx1ZTsgfQojIDY1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBf X2lubGluZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBk b3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6 ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9f eSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGRyZW1m IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAi ZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZh IiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9f dmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg aW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0 c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAo X19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFs dWU7IH0KIyA2NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p bmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KQp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9f CiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDog X194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+IDMxKSk7Cn0K IyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwoKIyAyMyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfbWF0aC5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZ3NsL2dzbF9zeXMuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3N5cy5o IiAzCgoKZG91YmxlIGdzbF9sb2cxcCAoY29uc3QgZG91YmxlIHgpOwpkb3VibGUgZ3NsX2V4cG0x IChjb25zdCBkb3VibGUgeCk7CmRvdWJsZSBnc2xfaHlwb3QgKGNvbnN0IGRvdWJsZSB4LCBjb25z dCBkb3VibGUgeSk7CmRvdWJsZSBnc2xfYWNvc2ggKGNvbnN0IGRvdWJsZSB4KTsKZG91YmxlIGdz bF9hc2luaCAoY29uc3QgZG91YmxlIHgpOwpkb3VibGUgZ3NsX2F0YW5oIChjb25zdCBkb3VibGUg eCk7CgppbnQgZ3NsX2lzbmFuIChjb25zdCBkb3VibGUgeCk7CmludCBnc2xfaXNpbmYgKGNvbnN0 IGRvdWJsZSB4KTsKaW50IGdzbF9maW5pdGUgKGNvbnN0IGRvdWJsZSB4KTsKCmRvdWJsZSBnc2xf bmFuICh2b2lkKTsKZG91YmxlIGdzbF9wb3NpbmYgKHZvaWQpOwpkb3VibGUgZ3NsX25lZ2luZiAo dm9pZCk7CmRvdWJsZSBnc2xfZmRpdiAoY29uc3QgZG91YmxlIHgsIGNvbnN0IGRvdWJsZSB5KTsK CmRvdWJsZSBnc2xfY29lcmNlX2RvdWJsZSAoY29uc3QgZG91YmxlIHgpOwpmbG9hdCBnc2xfY29l cmNlX2Zsb2F0IChjb25zdCBmbG9hdCB4KTsKbG9uZyBkb3VibGUgZ3NsX2NvZXJjZV9sb25nX2Rv dWJsZSAoY29uc3QgbG9uZyBkb3VibGUgeCk7CgoKIyAyNCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf bWF0aC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYWNoaW5lLmgiIDEgMwoKCgoK IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoK CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5j bHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlt aXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4 MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAi L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgv bGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMg MTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNs dWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgi IDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbG9jYWwv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAz CiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA2ICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF9tYWNoaW5lLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyA3ICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF9tYWNoaW5lLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ByZWNpc2lvbi5oIiAxIDMKIyAzNSAiL3Vz ci9pbmNsdWRlL2dzbC9nc2xfcHJlY2lzaW9uLmgiIDMKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBp bnQgZ3NsX3ByZWNfdDsKIyA1NSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfcHJlY2lzaW9uLmgiIDMK ZXh0ZXJuIGNvbnN0IGRvdWJsZSBnc2xfcHJlY19lcHNbXTsKZXh0ZXJuIGNvbnN0IGRvdWJsZSBn c2xfcHJlY19zcXJ0X2Vwc1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9wcmVjX3Jvb3QzX2Vw c1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9wcmVjX3Jvb3Q0X2Vwc1tdOwpleHRlcm4gY29u c3QgZG91YmxlIGdzbF9wcmVjX3Jvb3Q1X2Vwc1tdOwpleHRlcm4gY29uc3QgZG91YmxlIGdzbF9w cmVjX3Jvb3Q2X2Vwc1tdOwoKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX25hbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRl L2dzbC9nc2xfbWF0aC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9wb3dfaW50Lmgi IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9wb3dfaW50LmgiIDMKCgoKZXh0ZXJuIGlu bGluZSBkb3VibGUgZ3NsX3Bvd18yKGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3Vi bGUgZ3NsX3Bvd18zKGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bv d180KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd181KGNvbnN0 IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd182KGNvbnN0IGRvdWJsZSB4 KTsKZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bvd183KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJu IGlubGluZSBkb3VibGUgZ3NsX3Bvd184KGNvbnN0IGRvdWJsZSB4KTsKZXh0ZXJuIGlubGluZSBk b3VibGUgZ3NsX3Bvd185KGNvbnN0IGRvdWJsZSB4KTsKCmV4dGVybiBpbmxpbmUgZG91YmxlIGdz bF9wb3dfMihjb25zdCBkb3VibGUgeCkgeyByZXR1cm4geCp4OyB9CmV4dGVybiBpbmxpbmUgZG91 YmxlIGdzbF9wb3dfMyhjb25zdCBkb3VibGUgeCkgeyByZXR1cm4geCp4Kng7IH0KZXh0ZXJuIGlu bGluZSBkb3VibGUgZ3NsX3Bvd180KGNvbnN0IGRvdWJsZSB4KSB7IGRvdWJsZSB4MiA9IHgqeDsg cmV0dXJuIHgyKngyOyB9CmV4dGVybiBpbmxpbmUgZG91YmxlIGdzbF9wb3dfNShjb25zdCBkb3Vi bGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IHJldHVybiB4Mip4Mip4OyB9CmV4dGVybiBpbmxpbmUg ZG91YmxlIGdzbF9wb3dfNihjb25zdCBkb3VibGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IHJldHVy biB4Mip4Mip4MjsgfQpleHRlcm4gaW5saW5lIGRvdWJsZSBnc2xfcG93XzcoY29uc3QgZG91Ymxl IHgpIHsgZG91YmxlIHgzID0geCp4Kng7IHJldHVybiB4Myp4Myp4OyB9CmV4dGVybiBpbmxpbmUg ZG91YmxlIGdzbF9wb3dfOChjb25zdCBkb3VibGUgeCkgeyBkb3VibGUgeDIgPSB4Kng7IGRvdWJs ZSB4NCA9IHgyKngyOyByZXR1cm4geDQqeDQ7IH0KZXh0ZXJuIGlubGluZSBkb3VibGUgZ3NsX3Bv d185KGNvbnN0IGRvdWJsZSB4KSB7IGRvdWJsZSB4MyA9IHgqeCp4OyByZXR1cm4geDMqeDMqeDM7 IH0KIyA2NCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfcG93X2ludC5oIiAzCmRvdWJsZSBnc2xfcG93 X2ludChkb3VibGUgeCwgaW50IG4pOwoKCiMgMjggIi91c3IvaW5jbHVkZS9nc2wvZ3NsX21hdGgu aCIgMiAzCiMgMTA4ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKCiMgMTI2ICIvdXNy L2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKZG91YmxlIGdzbF9tYXggKGRvdWJsZSBhLCBkb3Vi bGUgYik7CmRvdWJsZSBnc2xfbWluIChkb3VibGUgYSwgZG91YmxlIGIpOwoKCgoKZXh0ZXJuIGlu bGluZSBpbnQgR1NMX01BWF9JTlQgKGludCBhLCBpbnQgYik7CmV4dGVybiBpbmxpbmUgaW50IEdT TF9NSU5fSU5UIChpbnQgYSwgaW50IGIpOwpleHRlcm4gaW5saW5lIGRvdWJsZSBHU0xfTUFYX0RC TCAoZG91YmxlIGEsIGRvdWJsZSBiKTsKZXh0ZXJuIGlubGluZSBkb3VibGUgR1NMX01JTl9EQkwg KGRvdWJsZSBhLCBkb3VibGUgYik7CmV4dGVybiBpbmxpbmUgbG9uZyBkb3VibGUgR1NMX01BWF9M REJMIChsb25nIGRvdWJsZSBhLCBsb25nIGRvdWJsZSBiKTsKZXh0ZXJuIGlubGluZSBsb25nIGRv dWJsZSBHU0xfTUlOX0xEQkwgKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIpOwoKZXh0ZXJu IGlubGluZSBpbnQKR1NMX01BWF9JTlQgKGludCBhLCBpbnQgYikKewogIHJldHVybiAoKGEpID4g KGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQKR1NMX01JTl9JTlQgKGludCBh LCBpbnQgYikKewogIHJldHVybiAoKGEpIDwgKGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlu bGluZSBkb3VibGUKR1NMX01BWF9EQkwgKGRvdWJsZSBhLCBkb3VibGUgYikKewogIHJldHVybiAo KGEpID4gKGIpID8gKGEpIDogKGIpKTsKfQoKZXh0ZXJuIGlubGluZSBkb3VibGUKR1NMX01JTl9E QkwgKGRvdWJsZSBhLCBkb3VibGUgYikKewogIHJldHVybiAoKGEpIDwgKGIpID8gKGEpIDogKGIp KTsKfQoKZXh0ZXJuIGlubGluZSBsb25nIGRvdWJsZQpHU0xfTUFYX0xEQkwgKGxvbmcgZG91Ymxl IGEsIGxvbmcgZG91YmxlIGIpCnsKICByZXR1cm4gKChhKSA+IChiKSA/IChhKSA6IChiKSk7Cn0K CmV4dGVybiBpbmxpbmUgbG9uZyBkb3VibGUKR1NMX01JTl9MREJMIChsb25nIGRvdWJsZSBhLCBs b25nIGRvdWJsZSBiKQp7CiAgcmV0dXJuICgoYSkgPCAoYikgPyAoYSkgOiAoYikpOwp9CiMgMTg1 ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKc3RydWN0IGdzbF9mdW5jdGlvbl9zdHJ1 Y3QKewogIGRvdWJsZSAoKiBmdW5jdGlvbikgKGRvdWJsZSB4LCB2b2lkICogcGFyYW1zKTsKICB2 b2lkICogcGFyYW1zOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Z1bmN0aW9uX3N0cnVjdCBnc2xf ZnVuY3Rpb24gOwoKCgoKCnN0cnVjdCBnc2xfZnVuY3Rpb25fZmRmX3N0cnVjdAp7CiAgZG91Ymxl ICgqIGYpIChkb3VibGUgeCwgdm9pZCAqIHBhcmFtcyk7CiAgZG91YmxlICgqIGRmKSAoZG91Ymxl IHgsIHZvaWQgKiBwYXJhbXMpOwogIHZvaWQgKCogZmRmKSAoZG91YmxlIHgsIHZvaWQgKiBwYXJh bXMsIGRvdWJsZSAqIGYsIGRvdWJsZSAqIGRmKTsKICB2b2lkICogcGFyYW1zOwp9OwoKdHlwZWRl ZiBzdHJ1Y3QgZ3NsX2Z1bmN0aW9uX2ZkZl9zdHJ1Y3QgZ3NsX2Z1bmN0aW9uX2ZkZiA7CiMgMjE0 ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9tYXRoLmgiIDMKc3RydWN0IGdzbF9mdW5jdGlvbl92ZWNf c3RydWN0CnsKICBpbnQgKCogZnVuY3Rpb24pIChkb3VibGUgeCwgZG91YmxlIHlbXSwgdm9pZCAq IHBhcmFtcyk7CiAgdm9pZCAqIHBhcmFtczsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9mdW5jdGlv bl92ZWNfc3RydWN0IGdzbF9mdW5jdGlvbl92ZWMgOwoKCgoKIyAzMCAidGVzdC5jIiAyCiMgMSAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9n c2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1 ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2dzbC9nc2xfZXJybm8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Vycm5v LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9l cnJuby5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5v LmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9p bmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5o IiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5v OwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU5ICIvdXNyL2lu Y2x1ZGUvZXJybm8uaCIgMwoKIyAyNSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfZXJybm8uaCIgMiAz CiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Vycm5vLmgiIDMKCgplbnVtIHsKICBHU0xfU1VD Q0VTUyA9IDAsCiAgR1NMX0ZBSUxVUkUgPSAtMSwKICBHU0xfQ09OVElOVUUgPSAtMiwKICBHU0xf RURPTSA9IDEsCiAgR1NMX0VSQU5HRSA9IDIsCiAgR1NMX0VGQVVMVCA9IDMsCiAgR1NMX0VJTlZB TCA9IDQsCiAgR1NMX0VGQUlMRUQgPSA1LAogIEdTTF9FRkFDVE9SID0gNiwKICBHU0xfRVNBTklU WSA9IDcsCiAgR1NMX0VOT01FTSA9IDgsCiAgR1NMX0VCQURGVU5DID0gOSwKICBHU0xfRVJVTkFX QVkgPSAxMCwKICBHU0xfRU1BWElURVIgPSAxMSwKICBHU0xfRVpFUk9ESVYgPSAxMiwKICBHU0xf RUJBRFRPTCA9IDEzLAogIEdTTF9FVE9MID0gMTQsCiAgR1NMX0VVTkRSRkxXID0gMTUsCiAgR1NM X0VPVlJGTFcgPSAxNiwKICBHU0xfRUxPU1MgPSAxNywKICBHU0xfRVJPVU5EID0gMTgsCiAgR1NM X0VCQURMRU4gPSAxOSwKICBHU0xfRU5PVFNRUiA9IDIwLAogIEdTTF9FU0lORyA9IDIxLAogIEdT TF9FRElWRVJHRSA9IDIyLAogIEdTTF9FVU5TVVAgPSAyMywKICBHU0xfRVVOSU1QTCA9IDI0LAog IEdTTF9FQ0FDSEUgPSAyNSwKICBHU0xfRVRBQkxFID0gMjYsCiAgR1NMX0VOT1BST0cgPSAyNywK ICBHU0xfRU5PUFJPR0ogPSAyOCwKICBHU0xfRVRPTEYgPSAyOSwKICBHU0xfRVRPTFggPSAzMCwK ICBHU0xfRVRPTEcgPSAzMSwKICBHU0xfRU9GID0gMzIKfSA7Cgp2b2lkIGdzbF9lcnJvciAoY29u c3QgY2hhciAqIHJlYXNvbiwgY29uc3QgY2hhciAqIGZpbGUsIGludCBsaW5lLAogICAgICAgICAg ICAgICAgaW50IGdzbF9lcnJubyk7Cgp2b2lkIGdzbF93YXJuaW5nIChjb25zdCBjaGFyICogcmVh c29uLCBjb25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgIGludCBn c2xfZXJybm8pIDsKCnZvaWQgZ3NsX3N0cmVhbV9wcmludGYgKGNvbnN0IGNoYXIgKmxhYmVsLCBj b25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3Qg Y2hhciAqcmVhc29uKTsKCmNvbnN0IGNoYXIgKiBnc2xfc3RyZXJyb3IgKGNvbnN0IGludCBnc2xf ZXJybm8pOwoKdHlwZWRlZiB2b2lkIGdzbF9lcnJvcl9oYW5kbGVyX3QgKGNvbnN0IGNoYXIgKiBy ZWFzb24sIGNvbnN0IGNoYXIgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGxpbmUsIGludCBnc2xfZXJybm8pOwoKdHlwZWRlZiB2b2lkIGdzbF9zdHJlYW1faGFu ZGxlcl90IChjb25zdCBjaGFyICogbGFiZWwsIGNvbnN0IGNoYXIgKiBmaWxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICogcmVhc29uKTsK CmdzbF9lcnJvcl9oYW5kbGVyX3QgKgpnc2xfc2V0X2Vycm9yX2hhbmRsZXIgKGdzbF9lcnJvcl9o YW5kbGVyX3QgKiBuZXdfaGFuZGxlcik7Cgpnc2xfZXJyb3JfaGFuZGxlcl90ICoKZ3NsX3NldF9l cnJvcl9oYW5kbGVyX29mZiAodm9pZCk7Cgpnc2xfc3RyZWFtX2hhbmRsZXJfdCAqCmdzbF9zZXRf c3RyZWFtX2hhbmRsZXIgKGdzbF9zdHJlYW1faGFuZGxlcl90ICogbmV3X2hhbmRsZXIpOwoKRklM RSAqIGdzbF9zZXRfc3RyZWFtIChGSUxFICogbmV3X3N0cmVhbSk7CiMgMTU2ICIvdXNyL2luY2x1 ZGUvZ3NsL2dzbF9lcnJuby5oIiAzCmV4dGVybiBpbnQgZ3NsX3dhcm5pbmdzX29mZiA7CiMgMTgw ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9lcnJuby5oIiAzCgojIDI1ICIvdXNyL2luY2x1ZGUvZ3Ns L2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF9jb21wbGV4LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9jb21wbGV4 LmgiIDMKCgoKCnR5cGVkZWYgZG91YmxlICogZ3NsX2NvbXBsZXhfcGFja2VkIDsKdHlwZWRlZiBm bG9hdCAqIGdzbF9jb21wbGV4X3BhY2tlZF9mbG9hdCA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBn c2xfY29tcGxleF9wYWNrZWRfbG9uZ19kb3VibGUgOwoKdHlwZWRlZiBjb25zdCBkb3VibGUgKiBn c2xfY29uc3RfY29tcGxleF9wYWNrZWQgOwp0eXBlZGVmIGNvbnN0IGZsb2F0ICogZ3NsX2NvbnN0 X2NvbXBsZXhfcGFja2VkX2Zsb2F0IDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j b25zdF9jb21wbGV4X3BhY2tlZF9sb25nX2RvdWJsZSA7CgoKCnR5cGVkZWYgZG91YmxlICogZ3Ns X2NvbXBsZXhfcGFja2VkX2FycmF5IDsKdHlwZWRlZiBmbG9hdCAqIGdzbF9jb21wbGV4X3BhY2tl ZF9hcnJheV9mbG9hdCA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBnc2xfY29tcGxleF9wYWNrZWRf YXJyYXlfbG9uZ19kb3VibGUgOwoKdHlwZWRlZiBjb25zdCBkb3VibGUgKiBnc2xfY29uc3RfY29t cGxleF9wYWNrZWRfYXJyYXkgOwp0eXBlZGVmIGNvbnN0IGZsb2F0ICogZ3NsX2NvbnN0X2NvbXBs ZXhfcGFja2VkX2FycmF5X2Zsb2F0IDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j b25zdF9jb21wbGV4X3BhY2tlZF9hcnJheV9sb25nX2RvdWJsZSA7CgoKCgoKCgp0eXBlZGVmIGRv dWJsZSAqIGdzbF9jb21wbGV4X3BhY2tlZF9wdHIgOwp0eXBlZGVmIGZsb2F0ICogZ3NsX2NvbXBs ZXhfcGFja2VkX2Zsb2F0X3B0ciA7CnR5cGVkZWYgbG9uZyBkb3VibGUgKiBnc2xfY29tcGxleF9w YWNrZWRfbG9uZ19kb3VibGVfcHRyIDsKCnR5cGVkZWYgY29uc3QgZG91YmxlICogZ3NsX2NvbnN0 X2NvbXBsZXhfcGFja2VkX3B0ciA7CnR5cGVkZWYgY29uc3QgZmxvYXQgKiBnc2xfY29uc3RfY29t cGxleF9wYWNrZWRfZmxvYXRfcHRyIDsKdHlwZWRlZiBjb25zdCBsb25nIGRvdWJsZSAqIGdzbF9j b25zdF9jb21wbGV4X3BhY2tlZF9sb25nX2RvdWJsZV9wdHIgOwoKCnR5cGVkZWYgc3RydWN0CiAg ewogICAgbG9uZyBkb3VibGUgZGF0WzJdOwogIH0KZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGU7Cgp0 eXBlZGVmIHN0cnVjdAogIHsKICAgIGRvdWJsZSBkYXRbMl07CiAgfQpnc2xfY29tcGxleDsKCnR5 cGVkZWYgc3RydWN0CiAgewogICAgZmxvYXQgZGF0WzJdOwogIH0KZ3NsX2NvbXBsZXhfZmxvYXQ7 CiMgMTAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9jb21wbGV4LmgiIDMKCiMgMjYgIi91c3IvaW5j bHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs dWRlL2dzbC9nc2xfdmVjdG9yX2xvbmdfZG91YmxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3Ns L2dzbF9ibG9ja19sb25nX2RvdWJsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf YmxvY2tfbG9uZ19kb3VibGUuaCIgMwoKCnN0cnVjdCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfc3Ry dWN0CnsKICBzaXplX3Qgc2l6ZTsKICBsb25nIGRvdWJsZSAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry dWN0IGdzbF9ibG9ja19sb25nX2RvdWJsZV9zdHJ1Y3QgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlOwoK Z3NsX2Jsb2NrX2xvbmdfZG91YmxlICpnc2xfYmxvY2tfbG9uZ19kb3VibGVfYWxsb2MgKGNvbnN0 IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICpnc2xfYmxvY2tfbG9uZ19kb3VibGVf Y2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlX2ZyZWUg KGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwoKaW50IGdzbF9ibG9ja19sb25nX2RvdWJsZV9m cmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICogYik7CmludCBnc2xf YmxvY2tfbG9uZ19kb3VibGVfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfYmxvY2tf bG9uZ19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2RvdWJsZV9mc2NhbmYgKEZJTEUg KiBzdHJlYW0sIGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwppbnQgZ3NsX2Jsb2NrX2xvbmdf ZG91YmxlX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19sb25nX2RvdWJs ZSAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlX3Jh d19mcmVhZCAoRklMRSAqIHN0cmVhbSwgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3Qgbiwg Y29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2Z3cml0 ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3Qgbiwg Y29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2ZzY2Fu ZiAoRklMRSAqIHN0cmVhbSwgbG9uZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qg c2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfbG9uZ19kb3VibGVfcmF3X2ZwcmludGYgKEZJ TEUgKiBzdHJlYW0sIGNvbnN0IGxvbmcgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0 IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2xv bmdfZG91YmxlX3NpemUgKGNvbnN0IGdzbF9ibG9ja19sb25nX2RvdWJsZSAqIGIpOwpsb25nIGRv dWJsZSAqIGdzbF9ibG9ja19sb25nX2RvdWJsZV9kYXRhIChjb25zdCBnc2xfYmxvY2tfbG9uZ19k b3VibGUgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9uZ19kb3Vi bGUuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZS5o IiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAg bG9uZyBkb3VibGUgKmRhdGE7CiAgZ3NsX2Jsb2NrX2xvbmdfZG91YmxlICpibG9jazsKICBpbnQg b3duZXI7Cn0KZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZTsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xf dmVjdG9yX2xvbmdfZG91YmxlIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3 OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3IGdzbF92ZWN0b3JfbG9uZ19k b3VibGVfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlIHZl Y3RvcjsKfSBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3OwoKdHlwZWRlZiBjb25z dCBfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3IGdzbF92ZWN0b3JfbG9uZ19kb3Vi bGVfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKmdzbF92ZWN0b3JfbG9u Z19kb3VibGVfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAq Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0 b3JfbG9uZ19kb3VibGUgKmdzbF92ZWN0b3JfbG9uZ19kb3VibGVfYWxsb2NfZnJvbV9ibG9jayAo Z3NsX2Jsb2NrX2xvbmdfZG91YmxlICogYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqZ3NsX3ZlY3Rvcl9sb25n X2RvdWJsZV9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3Ns X3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CgoK Cl9nc2xfdmVjdG9yX2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3 X2FycmF5IChsb25nIGRvdWJsZSAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3Vi bGVfdmlldwpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGxv bmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9y X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IGxvbmcgZG91YmxlICp2LCBzaXpl X3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfbG9u Z19kb3VibGVfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgbG9uZyBkb3VibGUg KmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfbG9u Z19kb3VibGVfc3VidmVjdG9yIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICp2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfbG9uZ19k b3VibGVfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICp2LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9u Z19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2NvbnN0X3N1YnZlY3Rv ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29uc3Rfdmlldwpnc2xfdmVjdG9y X2xvbmdfZG91YmxlX2NvbnN0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoY29uc3QgZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBuKTsKCgoKbG9uZyBkb3VibGUgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJs ZV9nZXQgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7 CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUg KiB2LCBjb25zdCBzaXplX3QgaSwgbG9uZyBkb3VibGUgeCk7Cgpsb25nIGRvdWJsZSAqZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBz aXplX3QgaSk7CmNvbnN0IGxvbmcgZG91YmxlICpnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2NvbnN0 X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpKTsK CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9sb25nX2Rv dWJsZSAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0X2FsbCAoZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSAqIHYsIGxvbmcgZG91YmxlIHgpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv dWJsZV9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBzaXplX3QgaSk7Cgpp bnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9md3JpdGUgKEZJ TEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2KTsKaW50IGdzbF92 ZWN0b3JfbG9uZ19kb3VibGVfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2xvbmdf ZG91YmxlICogdik7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZwcmludGYgKEZJTEUgKiBz dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfbG9uZ19k b3VibGVfbWVtY3B5IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogZGVzdCwgY29uc3QgZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZSAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9yZXZl cnNlIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv dWJsZV9zd2FwIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdiwgZ3NsX3ZlY3Rvcl9sb25nX2Rv dWJsZSAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zd2FwX2VsZW1lbnRzIChnc2xf dmVjdG9yX2xvbmdfZG91YmxlICogdiwgY29uc3Qgc2l6ZV90IGksIGNvbnN0IHNpemVfdCBqKTsK CmxvbmcgZG91YmxlIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWF4IChjb25zdCBnc2xfdmVjdG9y X2xvbmdfZG91YmxlICogdik7CmxvbmcgZG91YmxlIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWlu IChjb25zdCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25n X2RvdWJsZV9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBsb25nIGRv dWJsZSAqIG1pbl9vdXQsIGxvbmcgZG91YmxlICogbWF4X291dCk7CgpzaXplX3QgZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZV9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2 KTsKc2l6ZV90IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWluX2luZGV4IChjb25zdCBnc2xfdmVj dG9yX2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9taW5tYXhf aW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBzaXplX3QgKiBpbWluLCBz aXplX3QgKiBpbWF4KTsKCmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZCAoZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBiKTsKaW50 IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc3ViIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogYSwg Y29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9sb25nX2Rv dWJsZV9tdWwgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2xv bmdfZG91YmxlICogYik7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2RpdiAoZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBiKTsKaW50 IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2NhbGUgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiBh LCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZF9jb25zdGFu dCAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xf dmVjdG9yX2xvbmdfZG91YmxlX2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAq IHYpOwoKZXh0ZXJuIGludCBnc2xfY2hlY2tfcmFuZ2U7CgoKCmV4dGVybiBpbmxpbmUKbG9uZyBk b3VibGUKZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZ19k b3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF92ZWN0b3JfbG9uZ19kb3VibGUuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4g MCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsK fQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0IChnc2xfdmVj dG9yX2xvbmdfZG91YmxlICogdiwgY29uc3Qgc2l6ZV90IGksIGxvbmcgZG91YmxlIHgpCnsKCiAg aWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQg b2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2xvbmdfZG91YmxlLmgiLCAx ODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFb aSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCmxvbmcgZG91YmxlICoKZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBz aXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJv ciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9u Z19kb3VibGUuaCIsIDIwMCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog ICAgfQoKICByZXR1cm4gKGxvbmcgZG91YmxlICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7 Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgbG9uZyBkb3VibGUgKgpnc2xfdmVjdG9yX2xvbmdfZG91 YmxlX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNp emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25n X2RvdWJsZS5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAg ICB9CgogIHJldHVybiAoY29uc3QgbG9uZyBkb3VibGUgKikgKHYtPmRhdGEgKyBpICogdi0+c3Ry aWRlKTsKfQoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xv bmdfZG91YmxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4 LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv dWJsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2xvbmdf ZG91YmxlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2xv bmdfZG91YmxlLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfc3Ry dWN0CnsKICBzaXplX3Qgc2l6ZTsKICBsb25nIGRvdWJsZSAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry dWN0IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX3N0cnVjdCBnc2xfYmxvY2tfY29tcGxl eF9sb25nX2RvdWJsZTsKCmdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICpnc2xfYmxvY2tf Y29tcGxleF9sb25nX2RvdWJsZV9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY29t cGxleF9sb25nX2RvdWJsZSAqZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfY2FsbG9jIChj b25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAo Z3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKCmludCBnc2xfYmxvY2tfY29tcGxl eF9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9u Z19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX2Z3cml0ZSAo RklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsK aW50IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwg Z3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4 X2xvbmdfZG91YmxlX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21w bGV4X2xvbmdfZG91YmxlICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tf Y29tcGxleF9sb25nX2RvdWJsZV9yYXdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGxvbmcgZG91Ymxl ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2Nr X2NvbXBsZXhfbG9uZ19kb3VibGVfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgbG9u ZyBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBn c2xfYmxvY2tfY29tcGxleF9sb25nX2RvdWJsZV9yYXdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBs b25nIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50 IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlX3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFt LCBjb25zdCBsb25nIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3Ry aWRlLCBjb25zdCBjaGFyICpmb3JtYXQpOwoKc2l6ZV90IGdzbF9ibG9ja19jb21wbGV4X2xvbmdf ZG91YmxlX3NpemUgKGNvbnN0IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICogYik7Cmxv bmcgZG91YmxlICogZ3NsX2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGVfZGF0YSAoY29uc3QgZ3Ns X2Jsb2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiKTsKCgojIDI5ICIvdXNyL2luY2x1ZGUvZ3Ns L2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRl L2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUuaCIgMwoKCnR5cGVkZWYgc3RydWN0 CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGxvbmcgZG91YmxlICpkYXRhOwog IGdzbF9ibG9ja19jb21wbGV4X2xvbmdfZG91YmxlICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3Ns X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlOwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0 b3JfY29tcGxleF9sb25nX2RvdWJsZSB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29tcGxleF9sb25n X2RvdWJsZV92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Zp ZXcgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7 CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9y X2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k b3VibGVfY29uc3RfdmlldzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICpnc2xf dmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3Zl Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf Y2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUg Kgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Js b2NrX2NvbXBsZXhfbG9uZ19kb3VibGUgKiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9y X2NvbXBsZXhfbG9uZ19kb3VibGUgKgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxs b2NfZnJvbV92ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZz ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp emVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2Zy ZWUgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYpOwoKCgpfZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Zp ZXdfYXJyYXkgKGxvbmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV92aWV3 CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChs b25nIGRvdWJsZSAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91 YmxlX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X3ZpZXdf YXJyYXkgKGNvbnN0IGxvbmcgZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv dWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF92aWV3 X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBsb25nIGRvdWJsZSAqYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rv cl9jb21wbGV4X2xvbmdfZG91YmxlX3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf ZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu KTsKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21w bGV4X2xvbmdfZG91YmxlX3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4 X2xvbmdfZG91YmxlICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs ZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF9zdWJ2ZWN0 b3IgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqYmFzZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92 ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZV9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3Jf Y29tcGxleF9sb25nX2RvdWJsZSAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xf dmVjdG9yX2xvbmdfZG91YmxlX3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3Jl YWwgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqdik7CgpfZ3NsX3ZlY3Rvcl9sb25n X2RvdWJsZV92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9pbWFnIChnc2xfdmVj dG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKnYpOwoKX2dzbF92ZWN0b3JfbG9uZ19kb3VibGVfY29u c3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfcmVhbCAoY29uc3Qg Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICp2KTsKCl9nc2xfdmVjdG9yX2xvbmdfZG91 YmxlX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2NvbnN0X2ltYWcg KGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqdik7CgoKCgpnc2xfY29tcGxl eF9sb25nX2RvdWJsZQpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0IChjb25zdCBn c2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lk IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdzbF9jb21wbGV4X2xvbmdfZG91YmxlIHopOwoKZ3NsX2NvbXBsZXhfbG9uZ19k b3VibGUKKmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9wdHIgKGdzbF92ZWN0b3JfY29t cGxleF9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCmNvbnN0IGdzbF9jb21wbGV4 X2xvbmdfZG91YmxlCipnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfY29uc3RfcHRyIChj b25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LCBjb25zdCBzaXplX3QgaSk7 Cgp2b2lkIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXRfemVybyAoZ3NsX3ZlY3Rv cl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf ZG91YmxlX3NldF9hbGwgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4X2xvbmdfZG91Ymxl IHopOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3NldF9iYXNpcyAoZ3NsX3Zl Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3Jf Y29tcGxleF9sb25nX2RvdWJsZV9mcmVhZCAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7 CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZndyaXRlIChGSUxFICogc3RyZWFt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlICogdik7CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi bGVfZnNjYW5mIChGSUxFICogc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CmludCBnc2xfdmVjdG9y X2NvbXBsZXhfbG9uZ19kb3VibGVfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k b3VibGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX21lbWNweSAo Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlICogc3JjKTsKCmludCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19k b3VibGVfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CgppbnQg Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3N3YXAgKGdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZSAqIHYsIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHcpOwppbnQg Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3Jf Y29tcGxleF9sb25nX2RvdWJsZSAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7 CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2lzbnVsbCAoY29uc3QgZ3NsX3Zl Y3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5n ZTsKCgoKZXh0ZXJuIGlubGluZQpnc2xfY29tcGxleF9sb25nX2RvdWJsZQpnc2xfdmVjdG9yX2Nv bXBsZXhfbG9uZ19kb3VibGVfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi bGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoK ICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBjb25zdCBnc2xfY29tcGxleF9sb25nX2Rv dWJsZSB6ZXJvID0ge3swLCAwfX07CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9m IHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl LmgiLCAxOTIsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIHplcm8gOyB9IHdoaWxlICgwKTsKICAgIH0K CiAgcmV0dXJuICooKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikmKCh2KS0+ZGF0YVsyKihpKSoo diktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZV9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpLCBnc2xfY29tcGxleF9sb25n X2RvdWJsZSB6KQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vy cm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlLmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGls ZSAoMCk7CiAgICB9CgogICooKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikmKCh2KS0+ZGF0YVsy KihpKSoodiktPnN0cmlkZV0pKSA9IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXhfbG9u Z19kb3VibGUgKgpnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfcHRyIChnc2xfdmVjdG9y X2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdz bF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0 b3JfY29tcGxleF9sb25nX2RvdWJsZS5oIiwgMjIwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsg fSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoKGdzbF9jb21wbGV4X2xvbmdfZG91YmxlKikm KCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQpjb25zdCBn c2xfY29tcGxleF9sb25nX2RvdWJsZSAqCmdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9j b25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChp ID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJh bmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlLmgi LCAyMzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0 dXJuICgoZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3Ry aWRlXSkpOwp9CgoKCgoKIyA1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZG91YmxlLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9kb3VibGUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVk ZS9nc2wvZ3NsX3ZlY3Rvcl9kb3VibGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Js b2NrX2RvdWJsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfZG91Ymxl LmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgZG91Ymxl ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3N0cnVjdCBnc2xfYmxvY2s7Cgpn c2xfYmxvY2sgKmdzbF9ibG9ja19hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2sgKmdz bF9ibG9ja19jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfZnJlZSAoZ3Ns X2Jsb2NrICogYik7CgppbnQgZ3NsX2Jsb2NrX2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xfYmxv Y2sgKiBiKTsKaW50IGdzbF9ibG9ja19md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9i bG9jayAqIGIpOwppbnQgZ3NsX2Jsb2NrX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2Nr ICogYik7CmludCBnc2xfYmxvY2tfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Js b2NrICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfcmF3X2ZyZWFkIChG SUxFICogc3RyZWFtLCBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0 cmlkZSk7CmludCBnc2xfYmxvY2tfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZG91 YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Js b2NrX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGRvdWJsZSAqIGIsIGNvbnN0IHNpemVfdCBu LCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19yYXdfZnByaW50ZiAoRklMRSAq IHN0cmVhbSwgY29uc3QgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX3NpemUgKGNvbnN0 IGdzbF9ibG9jayAqIGIpOwpkb3VibGUgKiBnc2xfYmxvY2tfZGF0YSAoY29uc3QgZ3NsX2Jsb2Nr ICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5oIiAyIDMK IyAzNyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5oIiAzCgoKdHlwZWRlZiBz dHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAgZG91YmxlICpkYXRhOwog IGdzbF9ibG9jayAqYmxvY2s7CiAgaW50IG93bmVyOwp9CmdzbF92ZWN0b3I7Cgp0eXBlZGVmIHN0 cnVjdAp7CiAgZ3NsX3ZlY3RvciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfdmlldzsKCnR5cGVkZWYg X2dzbF92ZWN0b3JfdmlldyBnc2xfdmVjdG9yX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3Ns X3ZlY3RvciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3Qg X2dzbF92ZWN0b3JfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbnN0X3ZpZXc7CgoKCgpnc2xfdmVj dG9yICpnc2xfdmVjdG9yX2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF92ZWN0b3IgKmdzbF92 ZWN0b3JfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yICpnc2xfdmVjdG9yX2Fs bG9jX2Zyb21fYmxvY2sgKGdzbF9ibG9jayAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3IgKmdzbF92ZWN0b3JfYWxsb2NfZnJvbV92 ZWN0b3IgKGdzbF92ZWN0b3IgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfZnJlZSAoZ3NsX3ZlY3RvciAqIHYpOwoK CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0b3Jfdmlld19hcnJheSAoZG91YmxlICp2LCBzaXpl X3Qgbik7CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0b3Jfdmlld19hcnJheV93aXRoX3N0cmlk ZSAoZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbnN0X3ZpZXdf YXJyYXkgKGNvbnN0IGRvdWJsZSAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29uc3Rfdmll dwpnc2xfdmVjdG9yX2NvbnN0X3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGRvdWJsZSAq YmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3ZpZXcKZ3NsX3ZlY3Rvcl9zdWJ2ZWN0b3IgKGdzbF92 ZWN0b3IgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3ZpZXcKZ3NsX3ZlY3Rv cl9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3IgKnYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0 b3JfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yICp2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29uc3Rf c3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yICp2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgpkb3VibGUg Z3NsX3ZlY3Rvcl9nZXQgKGNvbnN0IGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZv aWQgZ3NsX3ZlY3Rvcl9zZXQgKGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSwgZG91Ymxl IHgpOwoKZG91YmxlICpnc2xfdmVjdG9yX3B0ciAoZ3NsX3ZlY3RvciAqIHYsIGNvbnN0IHNpemVf dCBpKTsKY29uc3QgZG91YmxlICpnc2xfdmVjdG9yX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rv ciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9zZXRfemVybyAoZ3NsX3Zl Y3RvciAqIHYpOwp2b2lkIGdzbF92ZWN0b3Jfc2V0X2FsbCAoZ3NsX3ZlY3RvciAqIHYsIGRvdWJs ZSB4KTsKaW50IGdzbF92ZWN0b3Jfc2V0X2Jhc2lzIChnc2xfdmVjdG9yICogdiwgc2l6ZV90IGkp OwoKaW50IGdzbF92ZWN0b3JfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3IgKiB2KTsK aW50IGdzbF92ZWN0b3JfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yICog dik7CmludCBnc2xfdmVjdG9yX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3RvciAqIHYp OwppbnQgZ3NsX3ZlY3Rvcl9mcHJpbnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9y ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0KTsK CmludCBnc2xfdmVjdG9yX21lbWNweSAoZ3NsX3ZlY3RvciAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0 b3IgKiBzcmMpOwoKaW50IGdzbF92ZWN0b3JfcmV2ZXJzZSAoZ3NsX3ZlY3RvciAqIHYpOwoKaW50 IGdzbF92ZWN0b3Jfc3dhcCAoZ3NsX3ZlY3RvciAqIHYsIGdzbF92ZWN0b3IgKiB3KTsKaW50IGdz bF92ZWN0b3Jfc3dhcF9lbGVtZW50cyAoZ3NsX3ZlY3RvciAqIHYsIGNvbnN0IHNpemVfdCBpLCBj b25zdCBzaXplX3Qgaik7Cgpkb3VibGUgZ3NsX3ZlY3Rvcl9tYXggKGNvbnN0IGdzbF92ZWN0b3Ig KiB2KTsKZG91YmxlIGdzbF92ZWN0b3JfbWluIChjb25zdCBnc2xfdmVjdG9yICogdik7CnZvaWQg Z3NsX3ZlY3Rvcl9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3IgKiB2LCBkb3VibGUgKiBtaW5fb3V0 LCBkb3VibGUgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX21heF9pbmRleCAoY29uc3Qg Z3NsX3ZlY3RvciAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9taW5faW5kZXggKGNvbnN0IGdzbF92 ZWN0b3IgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rv ciAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfYWRk IChnc2xfdmVjdG9yICogYSwgY29uc3QgZ3NsX3ZlY3RvciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9z dWIgKGdzbF92ZWN0b3IgKiBhLCBjb25zdCBnc2xfdmVjdG9yICogYik7CmludCBnc2xfdmVjdG9y X211bCAoZ3NsX3ZlY3RvciAqIGEsIGNvbnN0IGdzbF92ZWN0b3IgKiBiKTsKaW50IGdzbF92ZWN0 b3JfZGl2IChnc2xfdmVjdG9yICogYSwgY29uc3QgZ3NsX3ZlY3RvciAqIGIpOwppbnQgZ3NsX3Zl Y3Rvcl9zY2FsZSAoZ3NsX3ZlY3RvciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0 b3JfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdz bF92ZWN0b3JfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yICogdik7CgpleHRlcm4gaW50IGdzbF9j aGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQpkb3VibGUKZ3NsX3ZlY3Rvcl9nZXQgKGNvbnN0 IGdzbF92ZWN0b3IgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQog ICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2lu Y2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZG91YmxlLmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJu IDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07 Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3NldCAoZ3NsX3ZlY3RvciAqIHYsIGNv bnN0IHNpemVfdCBpLCBkb3VibGUgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAg ICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3Ns L2dzbF92ZWN0b3JfZG91YmxlLmgiLCAxODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGls ZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5s aW5lCmRvdWJsZSAqCmdzbF92ZWN0b3JfcHRyIChnc2xfdmVjdG9yICogdiwgY29uc3Qgc2l6ZV90 IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJp bmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2RvdWJsZS5o IiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl dHVybiAoZG91YmxlICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxp bmUKY29uc3QgZG91YmxlICoKZ3NsX3ZlY3Rvcl9jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3Ig KiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBk byB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dz bF92ZWN0b3JfZG91YmxlLmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxl ICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBkb3VibGUgKikgKHYtPmRhdGEgKyBpICogdi0+ c3RyaWRlKTsKfQoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4 X2RvdWJsZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY29tcGxleF9k b3VibGUuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX2NvbXBsZXhfZG91 YmxlLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXhfc3RydWN0CnsKICBzaXplX3Qgc2l6 ZTsKICBkb3VibGUgKmRhdGE7Cn07Cgp0eXBlZGVmIHN0cnVjdCBnc2xfYmxvY2tfY29tcGxleF9z dHJ1Y3QgZ3NsX2Jsb2NrX2NvbXBsZXg7Cgpnc2xfYmxvY2tfY29tcGxleCAqZ3NsX2Jsb2NrX2Nv bXBsZXhfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX2NvbXBsZXggKmdzbF9ibG9j a19jb21wbGV4X2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwp2b2lkIGdzbF9ibG9ja19jb21wbGV4 X2ZyZWUgKGdzbF9ibG9ja19jb21wbGV4ICogYik7CgppbnQgZ3NsX2Jsb2NrX2NvbXBsZXhfZnJl YWQgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9ja19jb21wbGV4ICogYik7CmludCBnc2xfYmxvY2tf Y29tcGxleF9md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21wbGV4ICog Yik7CmludCBnc2xfYmxvY2tfY29tcGxleF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9j a19jb21wbGV4ICogYik7CmludCBnc2xfYmxvY2tfY29tcGxleF9mcHJpbnRmIChGSUxFICogc3Ry ZWFtLCBjb25zdCBnc2xfYmxvY2tfY29tcGxleCAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7Cgpp bnQgZ3NsX2Jsb2NrX2NvbXBsZXhfcmF3X2ZyZWFkIChGSUxFICogc3RyZWFtLCBkb3VibGUgKiBi LCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29t cGxleF9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBkb3VibGUgKiBiLCBjb25zdCBz aXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9yYXdf ZnNjYW5mIChGSUxFICogc3RyZWFtLCBkb3VibGUgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qg c2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9yYXdfZnByaW50ZiAoRklMRSAq IHN0cmVhbSwgY29uc3QgZG91YmxlICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2NvbXBsZXhfc2l6 ZSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXggKiBiKTsKZG91YmxlICogZ3NsX2Jsb2NrX2NvbXBs ZXhfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXggKiBiKTsKCgojIDI5ICIvdXNyL2luY2x1 ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVk ZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2RvdWJsZS5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewog IHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJpZGU7CiAgZG91YmxlICpkYXRhOwogIGdzbF9ibG9j a19jb21wbGV4ICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3NsX3ZlY3Rvcl9jb21wbGV4OwoKdHlw ZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY29tcGxleCB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3Jf Y29tcGxleF92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXcgZ3NsX3ZlY3Rv cl9jb21wbGV4X3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4IHZl Y3RvcjsKfSBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9n c2xfdmVjdG9yX2NvbXBsZXhfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmll dzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4ICpnc2xfdmVjdG9yX2NvbXBsZXhfYWxsb2MgKGNvbnN0 IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9jb21wbGV4ICpnc2xfdmVjdG9yX2NvbXBsZXhfY2FsbG9j IChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2NvbXBsZXggKgpnc2xfdmVjdG9yX2NvbXBs ZXhfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2NvbXBsZXggKiBiLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlk ZSk7Cgpnc2xfdmVjdG9yX2NvbXBsZXggKgpnc2xfdmVjdG9yX2NvbXBsZXhfYWxsb2NfZnJvbV92 ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZv aWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwoKCgpf Z3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X3ZpZXdfYXJyYXkgKGRv dWJsZSAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu KTsKCl9nc2xfdmVjdG9yX2NvbXBsZXhfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfdmlld19hcnJh eV93aXRoX3N0cmlkZSAoZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX2NvbXBs ZXhfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlld19hcnJheSAoY29uc3Qg ZG91YmxlICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9jb25zdF92aWV3CmdzbF92ZWN0b3JfY29t cGxleF9jb25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBkb3VibGUgKmJhc2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF92aWV3CmdzbF92ZWN0b3Jf Y29tcGxleF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleCAqYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92ZWN0b3JfY29tcGxleF92 aWV3CmdzbF92ZWN0b3JfY29tcGxleF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3Jf Y29tcGxleCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlldwpnc2xf dmVjdG9yX2NvbXBsZXhfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXgg KmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IG4pOwoKCl9nc2xfdmVjdG9yX2NvbXBsZXhfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBs ZXhfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXgg KnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl92aWV3CmdzbF92ZWN0 b3JfY29tcGxleF9yZWFsIChnc2xfdmVjdG9yX2NvbXBsZXggKnYpOwoKX2dzbF92ZWN0b3Jfdmll dwpnc2xfdmVjdG9yX2NvbXBsZXhfaW1hZyAoZ3NsX3ZlY3Rvcl9jb21wbGV4ICp2KTsKCl9nc2xf dmVjdG9yX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3JlYWwgKGNvbnN0IGdz bF92ZWN0b3JfY29tcGxleCAqdik7CgpfZ3NsX3ZlY3Rvcl9jb25zdF92aWV3CmdzbF92ZWN0b3Jf Y29tcGxleF9jb25zdF9pbWFnIChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXggKnYpOwoKCgoKZ3Ns X2NvbXBsZXgKZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4 ICogdiwgY29uc3Qgc2l6ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX2NvbXBsZXhfc2V0IChnc2xf dmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnc2xfY29tcGxleCB6KTsKCmdzbF9jb21wbGV4Cipnc2xfdmVjdG9yX2Nv bXBsZXhfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3QgaSk7Cgpjb25z dCBnc2xfY29tcGxleAoqZ3NsX3ZlY3Rvcl9jb21wbGV4X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3Zl Y3Rvcl9jb21wbGV4ICogdiwgY29uc3Qgc2l6ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX2NvbXBs ZXhfc2V0X3plcm8gKGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfY29t cGxleF9zZXRfYWxsIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnc2xfY29tcGxleCB6KTsKaW50IGdzbF92ZWN0b3JfY29tcGxl eF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfY29tcGxleCAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xf dmVjdG9yX2NvbXBsZXhfZnJlYWQgKEZJTEUgKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9j b21wbGV4X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9j b21wbGV4X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4 X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfY29t cGxleF9tZW1jcHkgKGdzbF92ZWN0b3JfY29tcGxleCAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3Jf Y29tcGxleCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X3JldmVyc2UgKGdzbF92ZWN0 b3JfY29tcGxleCAqIHYpOwoKaW50IGdzbF92ZWN0b3JfY29tcGxleF9zd2FwIChnc2xfdmVjdG9y X2NvbXBsZXggKiB2LCBnc2xfdmVjdG9yX2NvbXBsZXggKiB3KTsKaW50IGdzbF92ZWN0b3JfY29t cGxleF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LCBjb25zdCBzaXplX3Qg aSwgY29uc3Qgc2l6ZV90IGopOwoKaW50IGdzbF92ZWN0b3JfY29tcGxleF9pc251bGwgKGNvbnN0 IGdzbF92ZWN0b3JfY29tcGxleCAqIHYpOwoKZXh0ZXJuIGludCBnc2xfY2hlY2tfcmFuZ2U7CgoK CmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXgKZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAoY29uc3Qg Z3NsX3ZlY3Rvcl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgY29uc3QgZ3Ns X2NvbXBsZXggemVybyA9IHt7MCwgMH19OwogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91 dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUu aCIsIDE5MiwgR1NMX0VJTlZBTCkgOyByZXR1cm4gemVybyA7IH0gd2hpbGUgKDApOwogICAgfQoK ICByZXR1cm4gKigoZ3NsX2NvbXBsZXgqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3RyaWRlXSkp Owp9CgpleHRlcm4gaW5saW5lCnZvaWQKZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAoZ3NsX3ZlY3Rv cl9jb21wbGV4ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90 IGksIGdzbF9jb21wbGV4IHopCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8g eyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf dmVjdG9yX2NvbXBsZXhfZG91YmxlLmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3 aGlsZSAoMCk7CiAgICB9CgogICooKGdzbF9jb21wbGV4KikmKCh2KS0+ZGF0YVsyKihpKSoodikt PnN0cmlkZV0pKSA9IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXggKgpnc2xfdmVjdG9y X2NvbXBsZXhfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF92ZWN0b3JfY29tcGxleF9kb3VibGUuaCIsIDIyMCwgR1NMX0VJTlZBTCkgOyByZXR1 cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKChnc2xfY29tcGxleCopJigodikt PmRhdGFbMiooaSkqKHYpLT5zdHJpZGVdKSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgZ3NsX2Nv bXBsZXggKgpnc2xfdmVjdG9yX2NvbXBsZXhfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2Nv bXBsZXggKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXpl X3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAo ImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxl eF9kb3VibGUuaCIsIDIzNCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog ICAgfQoKICByZXR1cm4gKChnc2xfY29tcGxleCopJigodiktPmRhdGFbMiooaSkqKHYpLT5zdHJp ZGVdKSk7Cn0KCgoKCgojIDYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvci5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9mbG9hdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2dz bC9nc2xfdmVjdG9yX2Zsb2F0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19m bG9hdC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfZmxvYXQuaCIgMwoK CnN0cnVjdCBnc2xfYmxvY2tfZmxvYXRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBmbG9hdCAq ZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19mbG9hdF9zdHJ1Y3QgZ3NsX2Jsb2Nr X2Zsb2F0OwoKZ3NsX2Jsb2NrX2Zsb2F0ICpnc2xfYmxvY2tfZmxvYXRfYWxsb2MgKGNvbnN0IHNp emVfdCBuKTsKZ3NsX2Jsb2NrX2Zsb2F0ICpnc2xfYmxvY2tfZmxvYXRfY2FsbG9jIChjb25zdCBz aXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2Zsb2F0X2ZyZWUgKGdzbF9ibG9ja19mbG9hdCAqIGIp OwoKaW50IGdzbF9ibG9ja19mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2Zs b2F0ICogYik7CmludCBnc2xfYmxvY2tfZmxvYXRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25z dCBnc2xfYmxvY2tfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19mbG9hdF9mc2NhbmYgKEZJTEUg KiBzdHJlYW0sIGdzbF9ibG9ja19mbG9hdCAqIGIpOwppbnQgZ3NsX2Jsb2NrX2Zsb2F0X2Zwcmlu dGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19mbG9hdCAqIGIsIGNvbnN0IGNoYXIg KmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX2Zsb2F0X3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwg ZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xf YmxvY2tfZmxvYXRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZmxvYXQgKiBiLCBj b25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfZmxvYXRf cmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29u c3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfZmxvYXRfcmF3X2ZwcmludGYgKEZJTEUg KiBzdHJlYW0sIGNvbnN0IGZsb2F0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz dHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2Zsb2F0X3NpemUg KGNvbnN0IGdzbF9ibG9ja19mbG9hdCAqIGIpOwpmbG9hdCAqIGdzbF9ibG9ja19mbG9hdF9kYXRh IChjb25zdCBnc2xfYmxvY2tfZmxvYXQgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUvZ3NsL2dz bF92ZWN0b3JfZmxvYXQuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9m bG9hdC5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIHNpemVfdCBzdHJp ZGU7CiAgZmxvYXQgKmRhdGE7CiAgZ3NsX2Jsb2NrX2Zsb2F0ICpibG9jazsKICBpbnQgb3duZXI7 Cn0KZ3NsX3ZlY3Rvcl9mbG9hdDsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX2Zsb2F0 IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9m bG9hdF92aWV3IGdzbF92ZWN0b3JfZmxvYXRfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xf dmVjdG9yX2Zsb2F0IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9mbG9hdF9jb25zdF92aWV3OwoKdHlw ZWRlZiBjb25zdCBfZ3NsX3ZlY3Rvcl9mbG9hdF9jb25zdF92aWV3IGdzbF92ZWN0b3JfZmxvYXRf Y29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfZmxvYXQgKmdzbF92ZWN0b3JfZmxvYXRfYWxsb2Mg KGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9mbG9hdCAqZ3NsX3ZlY3Rvcl9mbG9hdF9jYWxs b2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0b3JfZmxvYXQgKmdzbF92ZWN0b3JfZmxvYXRf YWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2Zsb2F0ICogYiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl9mbG9hdCAqZ3NsX3ZlY3Rv cl9mbG9hdF9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf dCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rv cl9mbG9hdF9mcmVlIChnc2xfdmVjdG9yX2Zsb2F0ICogdik7CgoKCl9nc2xfdmVjdG9yX2Zsb2F0 X3ZpZXcKZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3X2FycmF5IChmbG9hdCAqdiwgc2l6ZV90IG4pOwoK X2dzbF92ZWN0b3JfZmxvYXRfdmlldwpnc2xfdmVjdG9yX2Zsb2F0X3ZpZXdfYXJyYXlfd2l0aF9z dHJpZGUgKGZsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2Zs b2F0X2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IGZsb2F0ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3Zl Y3Rvcl9mbG9hdF9jb25zdF92aWV3CmdzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlld19hcnJheV93 aXRoX3N0cmlkZSAoY29uc3QgZmxvYXQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92 aWV3CmdzbF92ZWN0b3JfZmxvYXRfc3VidmVjdG9yIChnc2xfdmVjdG9yX2Zsb2F0ICp2LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3CmdzbF92ZWN0b3JfZmxvYXRf c3VidmVjdG9yX3dpdGhfc3RyaWRlIChnc2xfdmVjdG9yX2Zsb2F0ICp2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmll dwpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0X3N1YnZlY3RvciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9h dCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfZmxvYXRf Y29uc3Rfdmlldwpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAo Y29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKZmxvYXQgZ3NsX3ZlY3Rvcl9mbG9hdF9n ZXQgKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3Ns X3ZlY3Rvcl9mbG9hdF9zZXQgKGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSwg ZmxvYXQgeCk7CgpmbG9hdCAqZ3NsX3ZlY3Rvcl9mbG9hdF9wdHIgKGdzbF92ZWN0b3JfZmxvYXQg KiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0IGZsb2F0ICpnc2xfdmVjdG9yX2Zsb2F0X2NvbnN0 X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQg Z3NsX3ZlY3Rvcl9mbG9hdF9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYpOwp2b2lkIGdz bF92ZWN0b3JfZmxvYXRfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGZsb2F0IHgpOwpp bnQgZ3NsX3ZlY3Rvcl9mbG9hdF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBzaXpl X3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3Zl Y3Rvcl9mbG9hdCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9md3JpdGUgKEZJTEUgKiBzdHJl YW0sIGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2KTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfZnNj YW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2Zsb2F0ICogdik7CmludCBnc2xfdmVjdG9y X2Zsb2F0X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50 IGdzbF92ZWN0b3JfZmxvYXRfbWVtY3B5IChnc2xfdmVjdG9yX2Zsb2F0ICogZGVzdCwgY29uc3Qg Z3NsX3ZlY3Rvcl9mbG9hdCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9yZXZlcnNlIChn c2xfdmVjdG9yX2Zsb2F0ICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9zd2FwIChnc2xfdmVj dG9yX2Zsb2F0ICogdiwgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9h dF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2Zsb2F0ICogdiwgY29uc3Qgc2l6ZV90IGksIGNv bnN0IHNpemVfdCBqKTsKCmZsb2F0IGdzbF92ZWN0b3JfZmxvYXRfbWF4IChjb25zdCBnc2xfdmVj dG9yX2Zsb2F0ICogdik7CmZsb2F0IGdzbF92ZWN0b3JfZmxvYXRfbWluIChjb25zdCBnc2xfdmVj dG9yX2Zsb2F0ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXggKGNvbnN0IGdzbF92 ZWN0b3JfZmxvYXQgKiB2LCBmbG9hdCAqIG1pbl9vdXQsIGZsb2F0ICogbWF4X291dCk7CgpzaXpl X3QgZ3NsX3ZlY3Rvcl9mbG9hdF9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2 KTsKc2l6ZV90IGdzbF92ZWN0b3JfZmxvYXRfbWluX2luZGV4IChjb25zdCBnc2xfdmVjdG9yX2Zs b2F0ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92 ZWN0b3JfZmxvYXQgKiB2LCBzaXplX3QgKiBpbWluLCBzaXplX3QgKiBpbWF4KTsKCmludCBnc2xf dmVjdG9yX2Zsb2F0X2FkZCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGdzbF92ZWN0b3Jf ZmxvYXQgKiBiKTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfc3ViIChnc2xfdmVjdG9yX2Zsb2F0ICog YSwgY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9mbG9hdF9tdWwg KGdzbF92ZWN0b3JfZmxvYXQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2Zsb2F0ICogYik7CmludCBn c2xfdmVjdG9yX2Zsb2F0X2RpdiAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGdzbF92ZWN0 b3JfZmxvYXQgKiBiKTsKaW50IGdzbF92ZWN0b3JfZmxvYXRfc2NhbGUgKGdzbF92ZWN0b3JfZmxv YXQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX2Zsb2F0X2FkZF9jb25zdGFu dCAoZ3NsX3ZlY3Rvcl9mbG9hdCAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVjdG9y X2Zsb2F0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYpOwoKZXh0ZXJuIGludCBn c2xfY2hlY2tfcmFuZ2U7CgoKCmV4dGVybiBpbmxpbmUKZmxvYXQKZ3NsX3ZlY3Rvcl9mbG9hdF9n ZXQgKGNvbnN0IGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAo aSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiBy YW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZmxvYXQuaCIsIDE3NCwgR1NMX0VJ TlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtp ICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfZmxvYXRfc2V0 IChnc2xfdmVjdG9yX2Zsb2F0ICogdiwgY29uc3Qgc2l6ZV90IGksIGZsb2F0IHgpCnsKCiAgaWYg KGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2Yg cmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2Zsb2F0LmgiLCAxODcsIEdTTF9F SU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0 cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCmZsb2F0ICoKZ3NsX3ZlY3Rvcl9mbG9hdF9wdHIg KGdzbF92ZWN0b3JfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5z aXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIv dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfZmxvYXQuaCIsIDIwMCwgR1NMX0VJTlZBTCkgOyBy ZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGZsb2F0ICopICh2LT5kYXRh ICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgZmxvYXQgKgpnc2xfdmVj dG9yX2Zsb2F0X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYsIGNvbnN0IHNp emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9mbG9h dC5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9Cgog IHJldHVybiAoY29uc3QgZmxvYXQgKikgKHYtPmRhdGEgKyBpICogdi0+c3RyaWRlKTsKfQoKCgoK CiMgMjcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0LmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2Zsb2F0LmgiIDEgMwojIDM2 ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja19jb21wbGV4X2Zsb2F0LmgiIDMKCgpzdHJ1Y3Qg Z3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBmbG9hdCAq ZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3N0cnVjdCBn c2xfYmxvY2tfY29tcGxleF9mbG9hdDsKCmdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICpnc2xfYmxv Y2tfY29tcGxleF9mbG9hdF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY29tcGxl eF9mbG9hdCAqZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7 CnZvaWQgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfZnJlZSAoZ3NsX2Jsb2NrX2NvbXBsZXhfZmxv YXQgKiBiKTsKCmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVh bSwgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zs b2F0X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQg KiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwg Z3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKaW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0 X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICog YiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9yYXdf ZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGZsb2F0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNp emVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXRfcmF3X2Z3cml0ZSAoRklM RSAqIHN0cmVhbSwgY29uc3QgZmxvYXQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90 IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY29tcGxleF9mbG9hdF9yYXdfZnNjYW5mIChGSUxFICog c3RyZWFtLCBmbG9hdCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsK aW50IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFtLCBj b25zdCBmbG9hdCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlLCBjb25z dCBjaGFyICpmb3JtYXQpOwoKc2l6ZV90IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0X3NpemUgKGNv bnN0IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICogYik7CmZsb2F0ICogZ3NsX2Jsb2NrX2NvbXBs ZXhfZmxvYXRfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiKTsKCgojIDI5 ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiAyIDMKIyA0MCAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQuaCIgMwoKCnR5cGVkZWYg c3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGZsb2F0ICpkYXRhOwog IGdzbF9ibG9ja19jb21wbGV4X2Zsb2F0ICpibG9jazsKICBpbnQgb3duZXI7Cn0gZ3NsX3ZlY3Rv cl9jb21wbGV4X2Zsb2F0OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY29tcGxleF9m bG9hdCB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF92aWV3OwoKdHlwZWRlZiBf Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3Zp ZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IHZlY3RvcjsK fSBfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9n c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NvbXBsZXhfZmxv YXRfY29uc3RfdmlldzsKCgoKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICpnc2xfdmVjdG9yX2Nv bXBsZXhfZmxvYXRfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs b2F0ICpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpn c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfYWxsb2Nf ZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2NvbXBsZXhfZmxvYXQgKiBiLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7 Cgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfYWxs b2NfZnJvbV92ZWN0b3IgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXpl X3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2ZyZWUgKGdzbF92ZWN0 b3JfY29tcGxleF9mbG9hdCAqIHYpOwoKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcK Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXdfYXJyYXkgKGZsb2F0ICpiYXNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29t cGxleF9mbG9hdF92aWV3CmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF92aWV3X2FycmF5X3dpdGhf c3RyaWRlIChmbG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X3ZpZXdfYXJyYXkgKGNv bnN0IGZsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3CmdzbF92 ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBm bG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs b2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9j b21wbGV4X2Zsb2F0ICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBuKTsKCgpfZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21w bGV4X2Zsb2F0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3CmdzbF92 ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfY29t cGxleF9mbG9hdCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgbik7CgoKX2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF92aWV3 CmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNv bnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu KTsKCl9nc2xfdmVjdG9yX2Zsb2F0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3JlYWwg KGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdik7CgpfZ3NsX3ZlY3Rvcl9mbG9hdF92aWV3Cmdz bF92ZWN0b3JfY29tcGxleF9mbG9hdF9pbWFnIChnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKnYp OwoKX2dzbF92ZWN0b3JfZmxvYXRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRf Y29uc3RfcmVhbCAoY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICp2KTsKCl9nc2xfdmVj dG9yX2Zsb2F0X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2NvbnN0X2ltYWcg KGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqdik7CgoKCgpnc2xfY29tcGxleF9mbG9h dApnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NvbXBsZXhf ZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h dF9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHopOwoKZ3Ns X2NvbXBsZXhfZmxvYXQKKmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9wdHIgKGdzbF92ZWN0b3Jf Y29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCmNvbnN0IGdzbF9jb21wbGV4X2Zs b2F0Cipnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9y X2NvbXBsZXhfZmxvYXQgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfY29t cGxleF9mbG9hdF9zZXRfemVybyAoZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CnZvaWQg Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldF9hbGwgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9h dCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9jb21wbGV4 X2Zsb2F0IHopOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldF9iYXNpcyAoZ3NsX3Zl Y3Rvcl9jb21wbGV4X2Zsb2F0ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3JfY29tcGxl eF9mbG9hdF9mcmVhZCAoRklMRSAqIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CmludCBnc2xfdmVjdG9yX2Nv bXBsZXhfZmxvYXRfZndyaXRlIChGSUxFICogc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CmludCBn c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZnNjYW5mIChGSUxFICogc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7 CmludCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnc2xfdmVjdG9yX2NvbXBs ZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X21lbWNweSAoZ3Ns X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs b2F0ICogc3JjKTsKCmludCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfcmV2ZXJzZSAoZ3NsX3Zl Y3Rvcl9jb21wbGV4X2Zsb2F0ICogdik7CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N3 YXAgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h dCAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3N3YXBfZWxlbWVudHMgKGdzbF92 ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7 CgppbnQgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl9j b21wbGV4X2Zsb2F0ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJu IGlubGluZQpnc2xfY29tcGxleF9mbG9hdApnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0IChj b25zdCBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAg ICBjb25zdCBnc2xfY29tcGxleF9mbG9hdCB6ZXJvID0ge3swLCAwfX07CiAgICAgIGRvIHsgZ3Ns X2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rv cl9jb21wbGV4X2Zsb2F0LmgiLCAxOTIsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIHplcm8gOyB9IHdo aWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICooKGdzbF9jb21wbGV4X2Zsb2F0KikmKCh2KS0+ZGF0 YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3Jf Y29tcGxleF9mbG9hdF9zZXQgKGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpLCBnc2xfY29tcGxleF9mbG9hdCB6 KQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5k ZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zs b2F0LmgiLCAyMDYsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9Cgog ICooKGdzbF9jb21wbGV4X2Zsb2F0KikmKCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKSA9 IHo7Cn0KCmV4dGVybiBpbmxpbmUKZ3NsX2NvbXBsZXhfZmxvYXQgKgpnc2xfdmVjdG9yX2NvbXBs ZXhfZmxvYXRfcHRyIChnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQog ICAgewogICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2lu Y2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY29tcGxleF9mbG9hdC5oIiwgMjIwLCBHU0xfRUlOVkFMKSA7 IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoKGdzbF9jb21wbGV4X2Zs b2F0KikmKCh2KS0+ZGF0YVsyKihpKSoodiktPnN0cmlkZV0pKTsKfQoKZXh0ZXJuIGlubGluZQpj b25zdCBnc2xfY29tcGxleF9mbG9hdCAqCmdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9jb25zdF9w dHIgKGNvbnN0IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUp CiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3Iv aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0LmgiLCAyMzQsIEdTTF9FSU5WQUwp IDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICgoZ3NsX2NvbXBsZXhf ZmxvYXQqKSYoKHYpLT5kYXRhWzIqKGkpKih2KS0+c3RyaWRlXSkpOwp9CgoKCgoKIyA3ICIvdXNy L2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ3Ns L2dzbF92ZWN0b3JfdWxvbmcuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rv cl91bG9uZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfdWxvbmcuaCIgMSAz CiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3Vsb25nLmgiIDMKCgpzdHJ1Y3QgZ3Ns X2Jsb2NrX3Vsb25nX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgdW5zaWduZWQgbG9uZyAqZGF0 YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191bG9uZ19zdHJ1Y3QgZ3NsX2Jsb2NrX3Vs b25nOwoKZ3NsX2Jsb2NrX3Vsb25nICpnc2xfYmxvY2tfdWxvbmdfYWxsb2MgKGNvbnN0IHNpemVf dCBuKTsKZ3NsX2Jsb2NrX3Vsb25nICpnc2xfYmxvY2tfdWxvbmdfY2FsbG9jIChjb25zdCBzaXpl X3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3Vsb25nX2ZyZWUgKGdzbF9ibG9ja191bG9uZyAqIGIpOwoK aW50IGdzbF9ibG9ja191bG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX3Vsb25n ICogYik7CmludCBnc2xfYmxvY2tfdWxvbmdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBn c2xfYmxvY2tfdWxvbmcgKiBiKTsKaW50IGdzbF9ibG9ja191bG9uZ19mc2NhbmYgKEZJTEUgKiBz dHJlYW0sIGdzbF9ibG9ja191bG9uZyAqIGIpOwppbnQgZ3NsX2Jsb2NrX3Vsb25nX2ZwcmludGYg KEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191bG9uZyAqIGIsIGNvbnN0IGNoYXIgKmZv cm1hdCk7CgppbnQgZ3NsX2Jsb2NrX3Vsb25nX3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwgdW5z aWduZWQgbG9uZyAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50 IGdzbF9ibG9ja191bG9uZ19yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCB1bnNpZ25l ZCBsb25nICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3Ns X2Jsb2NrX3Vsb25nX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgKiBi LCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfdWxv bmdfcmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBiLCBj b25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwgY29uc3QgY2hhciAqZm9ybWF0KTsK CnNpemVfdCBnc2xfYmxvY2tfdWxvbmdfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX3Vsb25nICogYik7 CnVuc2lnbmVkIGxvbmcgKiBnc2xfYmxvY2tfdWxvbmdfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX3Vs b25nICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiIDIg MwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWxvbmcuaCIgMwoKCnR5cGVkZWYg c3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIHVuc2lnbmVkIGxvbmcg KmRhdGE7CiAgZ3NsX2Jsb2NrX3Vsb25nICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rv cl91bG9uZzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3Vsb25nIHZlY3RvcjsKfSBf Z3NsX3ZlY3Rvcl91bG9uZ192aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl91bG9uZ192aWV3IGdz bF92ZWN0b3JfdWxvbmdfdmlldzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3Vsb25n IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3OwoKdHlwZWRlZiBjb25zdCBf Z3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3IGdzbF92ZWN0b3JfdWxvbmdfY29uc3RfdmlldzsK CgoKCmdzbF92ZWN0b3JfdWxvbmcgKmdzbF92ZWN0b3JfdWxvbmdfYWxsb2MgKGNvbnN0IHNpemVf dCBuKTsKZ3NsX3ZlY3Rvcl91bG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19jYWxsb2MgKGNvbnN0IHNp emVfdCBuKTsKCmdzbF92ZWN0b3JfdWxvbmcgKmdzbF92ZWN0b3JfdWxvbmdfYWxsb2NfZnJvbV9i bG9jayAoZ3NsX2Jsb2NrX3Vsb25nICogYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl91bG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19hbGxv Y19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVl IChnc2xfdmVjdG9yX3Vsb25nICogdik7CgoKCl9nc2xfdmVjdG9yX3Vsb25nX3ZpZXcKZ3NsX3Zl Y3Rvcl91bG9uZ192aWV3X2FycmF5ICh1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qgbik7CgpfZ3Ns X3ZlY3Rvcl91bG9uZ192aWV3CmdzbF92ZWN0b3JfdWxvbmdfdmlld19hcnJheV93aXRoX3N0cmlk ZSAodW5zaWduZWQgbG9uZyAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Vsb25nX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rv cl91bG9uZ19jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNpZ25lZCBsb25nICp2LCBzaXplX3Qg bik7CgpfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rf dmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWduZWQgbG9uZyAqYmFzZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsK Cl9nc2xfdmVjdG9yX3Vsb25nX3ZpZXcKZ3NsX3ZlY3Rvcl91bG9uZ19zdWJ2ZWN0b3IgKGdzbF92 ZWN0b3JfdWxvbmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Vsb25nX3Zp ZXcKZ3NsX3ZlY3Rvcl91bG9uZ19zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3JfdWxv bmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3Zl Y3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rfc3VidmVjdG9yIChj b25zdCBnc2xfdmVjdG9yX3Vsb25nICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7 CgpfZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF92aWV3CmdzbF92ZWN0b3JfdWxvbmdfY29uc3Rfc3Vi dmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICp2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgp1bnNp Z25lZCBsb25nIGdzbF92ZWN0b3JfdWxvbmdfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICog diwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3JfdWxvbmdfc2V0IChnc2xfdmVjdG9y X3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVkIGxvbmcgeCk7Cgp1bnNpZ25lZCBs b25nICpnc2xfdmVjdG9yX3Vsb25nX3B0ciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIGNvbnN0IHNp emVfdCBpKTsKY29uc3QgdW5zaWduZWQgbG9uZyAqZ3NsX3ZlY3Rvcl91bG9uZ19jb25zdF9wdHIg KGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92 ZWN0b3JfdWxvbmdfc2V0X3plcm8gKGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdm9pZCBnc2xfdmVj dG9yX3Vsb25nX3NldF9hbGwgKGdzbF92ZWN0b3JfdWxvbmcgKiB2LCB1bnNpZ25lZCBsb25nIHgp OwppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19zZXRfYmFzaXMgKGdzbF92ZWN0b3JfdWxvbmcgKiB2LCBz aXplX3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3Ns X3ZlY3Rvcl91bG9uZyAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19md3JpdGUgKEZJTEUgKiBz dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKaW50IGdzbF92ZWN0b3JfdWxvbmdf ZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3Vsb25nICogdik7CmludCBnc2xfdmVj dG9yX3Vsb25nX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcg KiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoK aW50IGdzbF92ZWN0b3JfdWxvbmdfbWVtY3B5IChnc2xfdmVjdG9yX3Vsb25nICogZGVzdCwgY29u c3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19yZXZlcnNl IChnc2xfdmVjdG9yX3Vsb25nICogdik7CgppbnQgZ3NsX3ZlY3Rvcl91bG9uZ19zd2FwIChnc2xf dmVjdG9yX3Vsb25nICogdiwgZ3NsX3ZlY3Rvcl91bG9uZyAqIHcpOwppbnQgZ3NsX3ZlY3Rvcl91 bG9uZ19zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGks IGNvbnN0IHNpemVfdCBqKTsKCnVuc2lnbmVkIGxvbmcgZ3NsX3ZlY3Rvcl91bG9uZ19tYXggKGNv bnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdW5zaWduZWQgbG9uZyBnc2xfdmVjdG9yX3Vsb25n X21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfdWxvbmdf bWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3Vsb25nICogdiwgdW5zaWduZWQgbG9uZyAqIG1pbl9v dXQsIHVuc2lnbmVkIGxvbmcgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX3Vsb25nX21h eF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl91 bG9uZ19taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiB2KTsKdm9pZCBnc2xfdmVj dG9yX3Vsb25nX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIHNpemVf dCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfdWxvbmdfYWRkIChnc2xf dmVjdG9yX3Vsb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIGIpOwppbnQgZ3NsX3Zl Y3Rvcl91bG9uZ19zdWIgKGdzbF92ZWN0b3JfdWxvbmcgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3Vs b25nICogYik7CmludCBnc2xfdmVjdG9yX3Vsb25nX211bCAoZ3NsX3ZlY3Rvcl91bG9uZyAqIGEs IGNvbnN0IGdzbF92ZWN0b3JfdWxvbmcgKiBiKTsKaW50IGdzbF92ZWN0b3JfdWxvbmdfZGl2IChn c2xfdmVjdG9yX3Vsb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91bG9uZyAqIGIpOwppbnQgZ3Ns X3ZlY3Rvcl91bG9uZ19zY2FsZSAoZ3NsX3ZlY3Rvcl91bG9uZyAqIGEsIGNvbnN0IGRvdWJsZSB4 KTsKaW50IGdzbF92ZWN0b3JfdWxvbmdfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3Vsb25nICog YSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdzbF92ZWN0b3JfdWxvbmdfaXNudWxsIChjb25zdCBn c2xfdmVjdG9yX3Vsb25nICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0 ZXJuIGlubGluZQp1bnNpZ25lZCBsb25nCmdzbF92ZWN0b3JfdWxvbmdfZ2V0IChjb25zdCBnc2xf dmVjdG9yX3Vsb25nICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkK ICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9p bmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJu IDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07 Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3Vsb25nX3NldCAoZ3NsX3ZlY3Rvcl91 bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpLCB1bnNpZ25lZCBsb25nIHgpCnsKCiAgaWYgKGkgPj0g di0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2Ui LCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Vsb25nLmgiLCAxODcsIEdTTF9FSU5WQUwp IDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV0g PSB4Owp9CgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIGxvbmcgKgpnc2xfdmVjdG9yX3Vsb25nX3B0 ciAoZ3NsX3ZlY3Rvcl91bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYt PnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwg Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91bG9uZy5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7 IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAodW5zaWduZWQgbG9uZyAq KSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgpleHRlcm4gaW5saW5lCmNvbnN0IHVuc2ln bmVkIGxvbmcgKgpnc2xfdmVjdG9yX3Vsb25nX2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91 bG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAg ICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9n c2wvZ3NsX3ZlY3Rvcl91bG9uZy5oIiwgMjEzLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3 aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSAodi0+ZGF0 YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxMyAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVj dG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiIDEgMwoj IDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfbG9uZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2dzbC9nc2xfYmxvY2tfbG9uZy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xf YmxvY2tfbG9uZy5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19sb25nX3N0cnVjdAp7CiAgc2l6ZV90 IHNpemU7CiAgbG9uZyAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja19sb25nX3N0 cnVjdCBnc2xfYmxvY2tfbG9uZzsKCmdzbF9ibG9ja19sb25nICpnc2xfYmxvY2tfbG9uZ19hbGxv YyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfbG9uZyAqZ3NsX2Jsb2NrX2xvbmdfY2FsbG9j IChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2xvbmdfZnJlZSAoZ3NsX2Jsb2NrX2xv bmcgKiBiKTsKCmludCBnc2xfYmxvY2tfbG9uZ19mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Js b2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwg Y29uc3QgZ3NsX2Jsb2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2ZzY2FuZiAoRklM RSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2xvbmcgKiBiKTsKaW50IGdzbF9ibG9ja19sb25nX2Zwcmlu dGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19sb25nICogYiwgY29uc3QgY2hhciAq Zm9ybWF0KTsKCmludCBnc2xfYmxvY2tfbG9uZ19yYXdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGxv bmcgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxv Y2tfbG9uZ19yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBsb25nICogYiwgY29uc3Qg c2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2xvbmdfcmF3X2Zz Y2FuZiAoRklMRSAqIHN0cmVhbSwgbG9uZyAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXpl X3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19sb25nX3Jhd19mcHJpbnRmIChGSUxFICogc3RyZWFt LCBjb25zdCBsb25nICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUsIGNv bnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2xvbmdfc2l6ZSAoY29uc3QgZ3Ns X2Jsb2NrX2xvbmcgKiBiKTsKbG9uZyAqIGdzbF9ibG9ja19sb25nX2RhdGEgKGNvbnN0IGdzbF9i bG9ja19sb25nICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2xvbmcu aCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiIDMKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6ZV90IHN0cmlkZTsKICBsb25nICpkYXRh OwogIGdzbF9ibG9ja19sb25nICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl9sb25n OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfbG9uZyB2ZWN0b3I7Cn0gX2dzbF92ZWN0 b3JfbG9uZ192aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9sb25nX3ZpZXcgZ3NsX3ZlY3Rvcl9s b25nX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl9sb25nIHZlY3RvcjsKfSBf Z3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9yX2xv bmdfY29uc3RfdmlldyBnc2xfdmVjdG9yX2xvbmdfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3Jf bG9uZyAqZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF92ZWN0b3Jf bG9uZyAqZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwoKZ3NsX3ZlY3Rv cl9sb25nICpnc2xfdmVjdG9yX2xvbmdfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2xvbmcg KiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xf dmVjdG9yX2xvbmcgKmdzbF92ZWN0b3JfbG9uZ19hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rv cl9sb25nICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJp ZGUpOwoKdm9pZCBnc2xfdmVjdG9yX2xvbmdfZnJlZSAoZ3NsX3ZlY3Rvcl9sb25nICogdik7CgoK Cl9nc2xfdmVjdG9yX2xvbmdfdmlldwpnc2xfdmVjdG9yX2xvbmdfdmlld19hcnJheSAobG9uZyAq diwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ192aWV3CmdzbF92ZWN0b3JfbG9uZ192aWV3 X2FycmF5X3dpdGhfc3RyaWRlIChsb25nICpiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25zdF92aWV3Cmdz bF92ZWN0b3JfbG9uZ19jb25zdF92aWV3X2FycmF5IChjb25zdCBsb25nICp2LCBzaXplX3Qgbik7 CgpfZ3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX2NvbnN0X3ZpZXdf YXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGxvbmcgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9s b25nX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25nX3N1YnZlY3RvciAoZ3NsX3ZlY3Rvcl9sb25nICp2LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9sb25nX3ZpZXcKZ3NsX3ZlY3Rvcl9sb25n X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9sb25nICp2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25zdF92aWV3 CmdzbF92ZWN0b3JfbG9uZ19jb25zdF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAq diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfbG9uZ19jb25z dF92aWV3CmdzbF92ZWN0b3JfbG9uZ19jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0 IGdzbF92ZWN0b3JfbG9uZyAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKbG9uZyBnc2xfdmVjdG9yX2xvbmdfZ2V0IChjb25z dCBnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl9s b25nX3NldCAoZ3NsX3ZlY3Rvcl9sb25nICogdiwgY29uc3Qgc2l6ZV90IGksIGxvbmcgeCk7Cgps b25nICpnc2xfdmVjdG9yX2xvbmdfcHRyIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25zdCBzaXpl X3QgaSk7CmNvbnN0IGxvbmcgKmdzbF92ZWN0b3JfbG9uZ19jb25zdF9wdHIgKGNvbnN0IGdzbF92 ZWN0b3JfbG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX3Nl dF96ZXJvIChnc2xfdmVjdG9yX2xvbmcgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX2xvbmdfc2V0X2Fs bCAoZ3NsX3ZlY3Rvcl9sb25nICogdiwgbG9uZyB4KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19zZXRf YmFzaXMgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xfdmVjdG9yX2xv bmdfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3JfbG9uZyAqIHYpOwppbnQgZ3NsX3Zl Y3Rvcl9sb25nX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25nICog dik7CmludCBnc2xfdmVjdG9yX2xvbmdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9y X2xvbmcgKiB2KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19mcHJpbnRmIChGSUxFICogc3RyZWFtLCBj b25zdCBnc2xfdmVjdG9yX2xvbmcgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKGdzbF92ZWN0 b3JfbG9uZyAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAqIHNyYyk7CgppbnQgZ3NsX3Zl Y3Rvcl9sb25nX3JldmVyc2UgKGdzbF92ZWN0b3JfbG9uZyAqIHYpOwoKaW50IGdzbF92ZWN0b3Jf bG9uZ19zd2FwIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBnc2xfdmVjdG9yX2xvbmcgKiB3KTsKaW50 IGdzbF92ZWN0b3JfbG9uZ19zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX2xvbmcgKiB2LCBjb25z dCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKbG9uZyBnc2xfdmVjdG9yX2xvbmdfbWF4IChj b25zdCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKbG9uZyBnc2xfdmVjdG9yX2xvbmdfbWluIChjb25z dCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX2xvbmdfbWlubWF4IChjb25z dCBnc2xfdmVjdG9yX2xvbmcgKiB2LCBsb25nICogbWluX291dCwgbG9uZyAqIG1heF9vdXQpOwoK c2l6ZV90IGdzbF92ZWN0b3JfbG9uZ19tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAq IHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9sb25nX21pbl9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl9s b25nICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9sb25nX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3Zl Y3Rvcl9sb25nICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90ICogaW1heCk7CgppbnQgZ3NsX3Zl Y3Rvcl9sb25nX2FkZCAoZ3NsX3ZlY3Rvcl9sb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25n ICogYik7CmludCBnc2xfdmVjdG9yX2xvbmdfc3ViIChnc2xfdmVjdG9yX2xvbmcgKiBhLCBjb25z dCBnc2xfdmVjdG9yX2xvbmcgKiBiKTsKaW50IGdzbF92ZWN0b3JfbG9uZ19tdWwgKGdzbF92ZWN0 b3JfbG9uZyAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfbG9uZyAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9s b25nX2RpdiAoZ3NsX3ZlY3Rvcl9sb25nICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9sb25nICogYik7 CmludCBnc2xfdmVjdG9yX2xvbmdfc2NhbGUgKGdzbF92ZWN0b3JfbG9uZyAqIGEsIGNvbnN0IGRv dWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfbG9uZ19hZGRfY29uc3RhbnQgKGdzbF92ZWN0b3JfbG9u ZyAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVjdG9yX2xvbmdfaXNudWxsIChjb25z dCBnc2xfdmVjdG9yX2xvbmcgKiB2KTsKCmV4dGVybiBpbnQgZ3NsX2NoZWNrX3JhbmdlOwoKCgpl eHRlcm4gaW5saW5lCmxvbmcKZ3NsX3ZlY3Rvcl9sb25nX2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9s b25nICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAg ICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dz bC9nc2xfdmVjdG9yX2xvbmcuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hp bGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJu IGlubGluZQp2b2lkCmdzbF92ZWN0b3JfbG9uZ19zZXQgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIGNv bnN0IHNpemVfdCBpLCBsb25nIHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAg ZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9n c2xfdmVjdG9yX2xvbmcuaCIsIDE4NywgR1NMX0VJTlZBTCkgOyByZXR1cm4gOyB9IHdoaWxlICgw KTsKICAgIH0KCiAgdi0+ZGF0YVtpICogdi0+c3RyaWRlXSA9IHg7Cn0KCmV4dGVybiBpbmxpbmUK bG9uZyAqCmdzbF92ZWN0b3JfbG9uZ19wdHIgKGdzbF92ZWN0b3JfbG9uZyAqIHYsIGNvbnN0IHNp emVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9y ICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9sb25n LmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAg cmV0dXJuIChsb25nICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxp bmUKY29uc3QgbG9uZyAqCmdzbF92ZWN0b3JfbG9uZ19jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0 b3JfbG9uZyAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7 CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVk ZS9nc2wvZ3NsX3ZlY3Rvcl9sb25nLmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9 IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBsb25nICopICh2LT5kYXRhICsgaSAq IHYtPnN0cmlkZSk7Cn0KCgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIg MiAzCgojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91aW50LmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWludC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dz bC9nc2xfYmxvY2tfdWludC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tf dWludC5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja191aW50X3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7 CiAgdW5zaWduZWQgaW50ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3VpbnRf c3RydWN0IGdzbF9ibG9ja191aW50OwoKZ3NsX2Jsb2NrX3VpbnQgKmdzbF9ibG9ja191aW50X2Fs bG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF9ibG9ja191aW50ICpnc2xfYmxvY2tfdWludF9jYWxs b2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfdWludF9mcmVlIChnc2xfYmxvY2tf dWludCAqIGIpOwoKaW50IGdzbF9ibG9ja191aW50X2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xf YmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZndyaXRlIChGSUxFICogc3RyZWFt LCBjb25zdCBnc2xfYmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZnNjYW5mIChG SUxFICogc3RyZWFtLCBnc2xfYmxvY2tfdWludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VpbnRfZnBy aW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX3VpbnQgKiBiLCBjb25zdCBjaGFy ICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja191aW50X3Jhd19mcmVhZCAoRklMRSAqIHN0cmVhbSwg dW5zaWduZWQgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwpp bnQgZ3NsX2Jsb2NrX3VpbnRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgdW5zaWdu ZWQgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3Ns X2Jsb2NrX3VpbnRfcmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgdW5zaWduZWQgaW50ICogYiwg Y29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX3VpbnRf cmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGludCAqIGIsIGNvbnN0 IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlLCBjb25zdCBjaGFyICpmb3JtYXQpOwoKc2l6 ZV90IGdzbF9ibG9ja191aW50X3NpemUgKGNvbnN0IGdzbF9ibG9ja191aW50ICogYik7CnVuc2ln bmVkIGludCAqIGdzbF9ibG9ja191aW50X2RhdGEgKGNvbnN0IGdzbF9ibG9ja191aW50ICogYik7 CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VpbnQuaCIgMiAzCiMgMzcgIi91 c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91aW50LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAg c2l6ZV90IHNpemU7CiAgc2l6ZV90IHN0cmlkZTsKICB1bnNpZ25lZCBpbnQgKmRhdGE7CiAgZ3Ns X2Jsb2NrX3VpbnQgKmJsb2NrOwogIGludCBvd25lcjsKfQpnc2xfdmVjdG9yX3VpbnQ7Cgp0eXBl ZGVmIHN0cnVjdAp7CiAgZ3NsX3ZlY3Rvcl91aW50IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91aW50 X3ZpZXc7Cgp0eXBlZGVmIF9nc2xfdmVjdG9yX3VpbnRfdmlldyBnc2xfdmVjdG9yX3VpbnRfdmll dzsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVjdG9yX3VpbnQgdmVjdG9yOwp9IF9nc2xfdmVj dG9yX3VpbnRfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfdWludF9jb25z dF92aWV3IGdzbF92ZWN0b3JfdWludF9jb25zdF92aWV3OwoKCgoKZ3NsX3ZlY3Rvcl91aW50ICpn c2xfdmVjdG9yX3VpbnRfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl91aW50ICpn c2xfdmVjdG9yX3VpbnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX3VpbnQg KmdzbF92ZWN0b3JfdWludF9hbGxvY19mcm9tX2Jsb2NrIChnc2xfYmxvY2tfdWludCAqIGIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3Jf dWludCAqZ3NsX3ZlY3Rvcl91aW50X2FsbG9jX2Zyb21fdmVjdG9yIChnc2xfdmVjdG9yX3VpbnQg KiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2 b2lkIGdzbF92ZWN0b3JfdWludF9mcmVlIChnc2xfdmVjdG9yX3VpbnQgKiB2KTsKCgoKX2dzbF92 ZWN0b3JfdWludF92aWV3CmdzbF92ZWN0b3JfdWludF92aWV3X2FycmF5ICh1bnNpZ25lZCBpbnQg KnYsIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VpbnRfdmlldwpnc2xfdmVjdG9yX3VpbnRfdmll d19hcnJheV93aXRoX3N0cmlkZSAodW5zaWduZWQgaW50ICpiYXNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfdWludF9jb25z dF92aWV3CmdzbF92ZWN0b3JfdWludF9jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNpZ25lZCBp bnQgKnYsIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9y X3VpbnRfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWduZWQgaW50ICpi YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfdWludF92aWV3CmdzbF92ZWN0b3JfdWludF9zdWJ2ZWN0 b3IgKGdzbF92ZWN0b3JfdWludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3Jf dWludF92aWV3CmdzbF92ZWN0b3JfdWludF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0 b3JfdWludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlk ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9n c2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VpbnRfY29uc3Rfc3VidmVjdG9y IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBu KTsKCl9nc2xfdmVjdG9yX3VpbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VpbnRfY29uc3Rfc3Vi dmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKnYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgoKCnVuc2ln bmVkIGludCBnc2xfdmVjdG9yX3VpbnRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2LCBj b25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl91aW50X3NldCAoZ3NsX3ZlY3Rvcl91aW50 ICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVkIGludCB4KTsKCnVuc2lnbmVkIGludCAqZ3Ns X3ZlY3Rvcl91aW50X3B0ciAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgY29uc3Qgc2l6ZV90IGkpOwpj b25zdCB1bnNpZ25lZCBpbnQgKmdzbF92ZWN0b3JfdWludF9jb25zdF9wdHIgKGNvbnN0IGdzbF92 ZWN0b3JfdWludCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl91aW50X3Nl dF96ZXJvIChnc2xfdmVjdG9yX3VpbnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VpbnRfc2V0X2Fs bCAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgdW5zaWduZWQgaW50IHgpOwppbnQgZ3NsX3ZlY3Rvcl91 aW50X3NldF9iYXNpcyAoZ3NsX3ZlY3Rvcl91aW50ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92 ZWN0b3JfdWludF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rvcl91aW50ICogdik7Cmlu dCBnc2xfdmVjdG9yX3VpbnRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9y X3VpbnQgKiB2KTsKaW50IGdzbF92ZWN0b3JfdWludF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdz bF92ZWN0b3JfdWludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91aW50X2ZwcmludGYgKEZJTEUgKiBz dHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl91aW50X21lbWNweSAo Z3NsX3ZlY3Rvcl91aW50ICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogc3JjKTsKCmlu dCBnc2xfdmVjdG9yX3VpbnRfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl91aW50ICogdik7CgppbnQgZ3Ns X3ZlY3Rvcl91aW50X3N3YXAgKGdzbF92ZWN0b3JfdWludCAqIHYsIGdzbF92ZWN0b3JfdWludCAq IHcpOwppbnQgZ3NsX3ZlY3Rvcl91aW50X3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3JfdWludCAq IHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7Cgp1bnNpZ25lZCBpbnQgZ3NsX3Zl Y3Rvcl91aW50X21heCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdik7CnVuc2lnbmVkIGludCBn c2xfdmVjdG9yX3VpbnRfbWluIChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2KTsKdm9pZCBnc2xf dmVjdG9yX3VpbnRfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2LCB1bnNpZ25lZCBp bnQgKiBtaW5fb3V0LCB1bnNpZ25lZCBpbnQgKiBtYXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9y X3VpbnRfbWF4X2luZGV4IChjb25zdCBnc2xfdmVjdG9yX3VpbnQgKiB2KTsKc2l6ZV90IGdzbF92 ZWN0b3JfdWludF9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYpOwp2b2lkIGdz bF92ZWN0b3JfdWludF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIHYsIHNp emVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92ZWN0b3JfdWludF9hZGQgKGdz bF92ZWN0b3JfdWludCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIGIpOwppbnQgZ3NsX3Zl Y3Rvcl91aW50X3N1YiAoZ3NsX3ZlY3Rvcl91aW50ICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91aW50 ICogYik7CmludCBnc2xfdmVjdG9yX3VpbnRfbXVsIChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25z dCBnc2xfdmVjdG9yX3VpbnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfdWludF9kaXYgKGdzbF92ZWN0 b3JfdWludCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWludCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91 aW50X3NjYWxlIChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xf dmVjdG9yX3VpbnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3VpbnQgKiBhLCBjb25zdCBkb3Vi bGUgeCk7CgppbnQgZ3NsX3ZlY3Rvcl91aW50X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50 ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQp1bnNp Z25lZCBpbnQKZ3NsX3ZlY3Rvcl91aW50X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdiwg Y29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBn c2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVj dG9yX3VpbnQuaCIsIDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwog ICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2 b2lkCmdzbF92ZWN0b3JfdWludF9zZXQgKGdzbF92ZWN0b3JfdWludCAqIHYsIGNvbnN0IHNpemVf dCBpLCB1bnNpZ25lZCBpbnQgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBk byB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dz bF92ZWN0b3JfdWludC5oIiwgMTg3LCBHU0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hpbGUgKDAp OwogICAgfQoKICB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlubGluZQp1 bnNpZ25lZCBpbnQgKgpnc2xfdmVjdG9yX3VpbnRfcHRyIChnc2xfdmVjdG9yX3VpbnQgKiB2LCBj b25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdz bF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0 b3JfdWludC5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAg ICB9CgogIHJldHVybiAodW5zaWduZWQgaW50ICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7 Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgdW5zaWduZWQgaW50ICoKZ3NsX3ZlY3Rvcl91aW50X2Nv bnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91aW50ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAg aWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQg b2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VpbnQuaCIsIDIxMywgR1NM X0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGNvbnN0 IHVuc2lnbmVkIGludCAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxNiAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wv Z3NsX3ZlY3Rvcl9pbnQuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9p bnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX2ludC5oIiAxIDMKIyAzNiAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfaW50LmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX2lu dF9zdHJ1Y3QKewogIHNpemVfdCBzaXplOwogIGludCAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0 IGdzbF9ibG9ja19pbnRfc3RydWN0IGdzbF9ibG9ja19pbnQ7Cgpnc2xfYmxvY2tfaW50ICpnc2xf YmxvY2tfaW50X2FsbG9jIChjb25zdCBzaXplX3Qgbik7CmdzbF9ibG9ja19pbnQgKmdzbF9ibG9j a19pbnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2ludF9mcmVlIChn c2xfYmxvY2tfaW50ICogYik7CgppbnQgZ3NsX2Jsb2NrX2ludF9mcmVhZCAoRklMRSAqIHN0cmVh bSwgZ3NsX2Jsb2NrX2ludCAqIGIpOwppbnQgZ3NsX2Jsb2NrX2ludF9md3JpdGUgKEZJTEUgKiBz dHJlYW0sIGNvbnN0IGdzbF9ibG9ja19pbnQgKiBiKTsKaW50IGdzbF9ibG9ja19pbnRfZnNjYW5m IChGSUxFICogc3RyZWFtLCBnc2xfYmxvY2tfaW50ICogYik7CmludCBnc2xfYmxvY2tfaW50X2Zw cmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19pbnQgKiBiLCBjb25zdCBjaGFy ICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja19pbnRfcmF3X2ZyZWFkIChGSUxFICogc3RyZWFtLCBp bnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSk7CmludCBnc2xfYmxv Y2tfaW50X3Jhd19md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGludCAqIGIsIGNvbnN0IHNp emVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19pbnRfcmF3X2ZzY2Fu ZiAoRklMRSAqIHN0cmVhbSwgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBz dHJpZGUpOwppbnQgZ3NsX2Jsb2NrX2ludF9yYXdfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29u c3QgaW50ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNo YXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2NrX2ludF9zaXplIChjb25zdCBnc2xfYmxvY2tf aW50ICogYik7CmludCAqIGdzbF9ibG9ja19pbnRfZGF0YSAoY29uc3QgZ3NsX2Jsb2NrX2ludCAq IGIpOwoKCiMgMjYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIgMiAzCiMgMzcg Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIgMwoKCnR5cGVkZWYgc3RydWN0CnsK ICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3RyaWRlOwogIGludCAqZGF0YTsKICBnc2xfYmxvY2tf aW50ICpibG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl9pbnQ7Cgp0eXBlZGVmIHN0cnVj dAp7CiAgZ3NsX3ZlY3Rvcl9pbnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX2ludF92aWV3OwoKdHlw ZWRlZiBfZ3NsX3ZlY3Rvcl9pbnRfdmlldyBnc2xfdmVjdG9yX2ludF92aWV3OwoKdHlwZWRlZiBz dHJ1Y3QKewogIGdzbF92ZWN0b3JfaW50IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rf dmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfaW50X2NvbnN0X3ZpZXcgZ3NsX3ZlY3Rv cl9pbnRfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfaW50ICpnc2xfdmVjdG9yX2ludF9hbGxv YyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9yX2ludCAqZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9j IChjb25zdCBzaXplX3Qgbik7Cgpnc2xfdmVjdG9yX2ludCAqZ3NsX3ZlY3Rvcl9pbnRfYWxsb2Nf ZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX2ludCAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzaXplX3Qgc3RyaWRlKTsKCmdzbF92ZWN0b3JfaW50ICpnc2xfdmVjdG9yX2ludF9hbGxv Y19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz aXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfaW50X2ZyZWUgKGdz bF92ZWN0b3JfaW50ICogdik7CgoKCl9nc2xfdmVjdG9yX2ludF92aWV3CmdzbF92ZWN0b3JfaW50 X3ZpZXdfYXJyYXkgKGludCAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X3ZpZXcKZ3Ns X3ZlY3Rvcl9pbnRfdmlld19hcnJheV93aXRoX3N0cmlkZSAoaW50ICpiYXNlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50 X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfdmlld19hcnJheSAoY29uc3QgaW50ICp2 LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX2ludF9j b25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBpbnQgKmJhc2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3Ns X3ZlY3Rvcl9pbnRfdmlldwpnc2xfdmVjdG9yX2ludF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfaW50 ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9pbnRfdmlldwpnc2xfdmVjdG9y X2ludF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3JfaW50ICp2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X2NvbnN0X3Zp ZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX2ludCAq diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfaW50X2NvbnN0 X3ZpZXcKZ3NsX3ZlY3Rvcl9pbnRfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBn c2xfdmVjdG9yX2ludCAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBuKTsKCgoKaW50IGdzbF92ZWN0b3JfaW50X2dldCAoY29uc3QgZ3Ns X3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSk7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0 IChnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpLCBpbnQgeCk7CgppbnQgKmdzbF92 ZWN0b3JfaW50X3B0ciAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0 IGludCAqZ3NsX3ZlY3Rvcl9pbnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYs IGNvbnN0IHNpemVfdCBpKTsKCnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0X3plcm8gKGdzbF92ZWN0 b3JfaW50ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9pbnQg KiB2LCBpbnQgeCk7CmludCBnc2xfdmVjdG9yX2ludF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfaW50 ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92ZWN0b3JfaW50X2ZyZWFkIChGSUxFICogc3RyZWFt LCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfZndyaXRlIChGSUxFICog c3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfZnNj YW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9p bnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiB2LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92 ZWN0b3JfaW50X21lbWNweSAoZ3NsX3ZlY3Rvcl9pbnQgKiBkZXN0LCBjb25zdCBnc2xfdmVjdG9y X2ludCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9pbnRfcmV2ZXJzZSAoZ3NsX3ZlY3Rvcl9pbnQg KiB2KTsKCmludCBnc2xfdmVjdG9yX2ludF9zd2FwIChnc2xfdmVjdG9yX2ludCAqIHYsIGdzbF92 ZWN0b3JfaW50ICogdyk7CmludCBnc2xfdmVjdG9yX2ludF9zd2FwX2VsZW1lbnRzIChnc2xfdmVj dG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpLCBjb25zdCBzaXplX3Qgaik7CgppbnQgZ3NsX3Zl Y3Rvcl9pbnRfbWF4IChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9p bnRfbWluIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfaW50X21p bm1heCAoY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBpbnQgKiBtaW5fb3V0LCBpbnQgKiBtYXhf b3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX2ludF9tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3Jf aW50ICogdik7CnNpemVfdCBnc2xfdmVjdG9yX2ludF9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0 b3JfaW50ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9pbnRfbWlubWF4X2luZGV4IChjb25zdCBnc2xf dmVjdG9yX2ludCAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92 ZWN0b3JfaW50X2FkZCAoZ3NsX3ZlY3Rvcl9pbnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2ludCAq IGIpOwppbnQgZ3NsX3ZlY3Rvcl9pbnRfc3ViIChnc2xfdmVjdG9yX2ludCAqIGEsIGNvbnN0IGdz bF92ZWN0b3JfaW50ICogYik7CmludCBnc2xfdmVjdG9yX2ludF9tdWwgKGdzbF92ZWN0b3JfaW50 ICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl9pbnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfaW50X2RpdiAo Z3NsX3ZlY3Rvcl9pbnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2ludCAqIGIpOwppbnQgZ3NsX3Zl Y3Rvcl9pbnRfc2NhbGUgKGdzbF92ZWN0b3JfaW50ICogYSwgY29uc3QgZG91YmxlIHgpOwppbnQg Z3NsX3ZlY3Rvcl9pbnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX2ludCAqIGEsIGNvbnN0IGRv dWJsZSB4KTsKCmludCBnc2xfdmVjdG9yX2ludF9pc251bGwgKGNvbnN0IGdzbF92ZWN0b3JfaW50 ICogdik7CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQppbnQK Z3NsX3ZlY3Rvcl9pbnRfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVf dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIs IDE3NCwgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1 cm4gdi0+ZGF0YVtpICogdi0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0 b3JfaW50X3NldCAoZ3NsX3ZlY3Rvcl9pbnQgKiB2LCBjb25zdCBzaXplX3QgaSwgaW50IHgpCnsK CiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBv dXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2ludC5oIiwgMTg3LCBH U0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hpbGUgKDApOwogICAgfQoKICB2LT5kYXRhW2kgKiB2 LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlubGluZQppbnQgKgpnc2xfdmVjdG9yX2ludF9wdHIg KGdzbF92ZWN0b3JfaW50ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6 ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vz ci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2ludC5oIiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVy biAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoaW50ICopICh2LT5kYXRhICsgaSAq IHYtPnN0cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgaW50ICoKZ3NsX3ZlY3Rvcl9pbnRf Y29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX2ludCAqIHYsIGNvbnN0IHNpemVfdCBpKQp7Cgog IGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0 IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9pbnQuaCIsIDIxMywgR1NM X0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gKGNvbnN0 IGludCAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAxNyAiL3Vzci9pbmNs dWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0 b3JfdXNob3J0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdXNob3J0 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9ja191c2hvcnQuaCIgMSAzCiMgMzYg Ii91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3VzaG9ydC5oIiAzCgoKc3RydWN0IGdzbF9ibG9j a191c2hvcnRfc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICB1bnNpZ25lZCBzaG9ydCAqZGF0YTsK fTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191c2hvcnRfc3RydWN0IGdzbF9ibG9ja191c2hv cnQ7Cgpnc2xfYmxvY2tfdXNob3J0ICpnc2xfYmxvY2tfdXNob3J0X2FsbG9jIChjb25zdCBzaXpl X3Qgbik7CmdzbF9ibG9ja191c2hvcnQgKmdzbF9ibG9ja191c2hvcnRfY2FsbG9jIChjb25zdCBz aXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3VzaG9ydF9mcmVlIChnc2xfYmxvY2tfdXNob3J0ICog Yik7CgppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9mcmVhZCAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2Nr X3VzaG9ydCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9md3JpdGUgKEZJTEUgKiBzdHJlYW0s IGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKaW50IGdzbF9ibG9ja191c2hvcnRfZnNjYW5m IChGSUxFICogc3RyZWFtLCBnc2xfYmxvY2tfdXNob3J0ICogYik7CmludCBnc2xfYmxvY2tfdXNo b3J0X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiLCBj b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF9ibG9ja191c2hvcnRfcmF3X2ZyZWFkIChGSUxF ICogc3RyZWFtLCB1bnNpZ25lZCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXpl X3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja191c2hvcnRfcmF3X2Z3cml0ZSAoRklMRSAqIHN0cmVh bSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90 IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfdXNob3J0X3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJlYW0s IHVuc2lnbmVkIHNob3J0ICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUp OwppbnQgZ3NsX2Jsb2NrX3VzaG9ydF9yYXdfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3Qg dW5zaWduZWQgc2hvcnQgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwg Y29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxvY2tfdXNob3J0X3NpemUgKGNvbnN0 IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKdW5zaWduZWQgc2hvcnQgKiBnc2xfYmxvY2tfdXNob3J0 X2RhdGEgKGNvbnN0IGdzbF9ibG9ja191c2hvcnQgKiBiKTsKCgojIDI2ICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF92ZWN0b3JfdXNob3J0LmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92 ZWN0b3JfdXNob3J0LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6 ZV90IHN0cmlkZTsKICB1bnNpZ25lZCBzaG9ydCAqZGF0YTsKICBnc2xfYmxvY2tfdXNob3J0ICpi bG9jazsKICBpbnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl91c2hvcnQ7Cgp0eXBlZGVmIHN0cnVjdAp7 CiAgZ3NsX3ZlY3Rvcl91c2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3VzaG9ydF92aWV3OwoK dHlwZWRlZiBfZ3NsX3ZlY3Rvcl91c2hvcnRfdmlldyBnc2xfdmVjdG9yX3VzaG9ydF92aWV3OwoK dHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfdXNob3J0IHZlY3RvcjsKfSBfZ3NsX3ZlY3Rv cl91c2hvcnRfY29uc3RfdmlldzsKCnR5cGVkZWYgY29uc3QgX2dzbF92ZWN0b3JfdXNob3J0X2Nv bnN0X3ZpZXcgZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfdXNo b3J0ICpnc2xfdmVjdG9yX3VzaG9ydF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9y X3VzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7Cgpnc2xf dmVjdG9yX3VzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Js b2NrX3VzaG9ydCAqIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3Ry aWRlKTsKCmdzbF92ZWN0b3JfdXNob3J0ICpnc2xfdmVjdG9yX3VzaG9ydF9hbGxvY19mcm9tX3Zl Y3RvciAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKGdzbF92 ZWN0b3JfdXNob3J0ICogdik7CgoKCl9nc2xfdmVjdG9yX3VzaG9ydF92aWV3CmdzbF92ZWN0b3Jf dXNob3J0X3ZpZXdfYXJyYXkgKHVuc2lnbmVkIHNob3J0ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3Zl Y3Rvcl91c2hvcnRfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF92aWV3X2FycmF5X3dpdGhfc3RyaWRl ICh1bnNpZ25lZCBzaG9ydCAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VzaG9ydF9jb25zdF92aWV3CmdzbF92ZWN0 b3JfdXNob3J0X2NvbnN0X3ZpZXdfYXJyYXkgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICp2LCBzaXpl X3Qgbik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF9j b25zdF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCB1bnNpZ25lZCBzaG9ydCAqYmFzZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3Ry aWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBuKTsKCl9nc2xfdmVjdG9yX3VzaG9ydF92aWV3CmdzbF92ZWN0b3JfdXNob3J0X3N1YnZlY3Rv ciAoZ3NsX3ZlY3Rvcl91c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9y X3VzaG9ydF92aWV3CmdzbF92ZWN0b3JfdXNob3J0X3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3Ns X3ZlY3Rvcl91c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg bik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9yX3VzaG9ydF9jb25z dF9zdWJ2ZWN0b3IgKGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0ICp2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91c2hvcnRfY29uc3Rfdmlldwpnc2xfdmVjdG9y X3VzaG9ydF9jb25zdF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3JfdXNo b3J0ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG4pOwoKCgp1bnNpZ25lZCBzaG9ydCBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKGNvbnN0 IGdzbF92ZWN0b3JfdXNob3J0ICogdiwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3Jf dXNob3J0X3NldCAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSwgdW5zaWdu ZWQgc2hvcnQgeCk7Cgp1bnNpZ25lZCBzaG9ydCAqZ3NsX3ZlY3Rvcl91c2hvcnRfcHRyIChnc2xf dmVjdG9yX3VzaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3QgdW5zaWduZWQgc2hvcnQg KmdzbF92ZWN0b3JfdXNob3J0X2NvbnN0X3B0ciAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2 LCBjb25zdCBzaXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X3NldF96ZXJvIChnc2xf dmVjdG9yX3VzaG9ydCAqIHYpOwp2b2lkIGdzbF92ZWN0b3JfdXNob3J0X3NldF9hbGwgKGdzbF92 ZWN0b3JfdXNob3J0ICogdiwgdW5zaWduZWQgc2hvcnQgeCk7CmludCBnc2xfdmVjdG9yX3VzaG9y dF9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfdXNob3J0ICogdiwgc2l6ZV90IGkpOwoKaW50IGdzbF92 ZWN0b3JfdXNob3J0X2ZyZWFkIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYp OwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xf dmVjdG9yX3VzaG9ydCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZnNjYW5mIChGSUxFICog c3RyZWFtLCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfZnBy aW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0 b3JfdXNob3J0X21lbWNweSAoZ3NsX3ZlY3Rvcl91c2hvcnQgKiBkZXN0LCBjb25zdCBnc2xfdmVj dG9yX3VzaG9ydCAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl91c2hvcnRfcmV2ZXJzZSAoZ3NsX3Zl Y3Rvcl91c2hvcnQgKiB2KTsKCmludCBnc2xfdmVjdG9yX3VzaG9ydF9zd2FwIChnc2xfdmVjdG9y X3VzaG9ydCAqIHYsIGdzbF92ZWN0b3JfdXNob3J0ICogdyk7CmludCBnc2xfdmVjdG9yX3VzaG9y dF9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3VzaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpLCBj b25zdCBzaXplX3Qgaik7Cgp1bnNpZ25lZCBzaG9ydCBnc2xfdmVjdG9yX3VzaG9ydF9tYXggKGNv bnN0IGdzbF92ZWN0b3JfdXNob3J0ICogdik7CnVuc2lnbmVkIHNob3J0IGdzbF92ZWN0b3JfdXNo b3J0X21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Vz aG9ydF9taW5tYXggKGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0ICogdiwgdW5zaWduZWQgc2hvcnQg KiBtaW5fb3V0LCB1bnNpZ25lZCBzaG9ydCAqIG1heF9vdXQpOwoKc2l6ZV90IGdzbF92ZWN0b3Jf dXNob3J0X21heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKc2l6ZV90IGdz bF92ZWN0b3JfdXNob3J0X21pbl9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsK dm9pZCBnc2xfdmVjdG9yX3VzaG9ydF9taW5tYXhfaW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdXNo b3J0ICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90ICogaW1heCk7CgppbnQgZ3NsX3ZlY3Rvcl91 c2hvcnRfYWRkIChnc2xfdmVjdG9yX3VzaG9ydCAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdXNob3J0 ICogYik7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9zdWIgKGdzbF92ZWN0b3JfdXNob3J0ICogYSwg Y29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiBiKTsKaW50IGdzbF92ZWN0b3JfdXNob3J0X211bCAo Z3NsX3ZlY3Rvcl91c2hvcnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3VzaG9ydCAqIGIpOwppbnQg Z3NsX3ZlY3Rvcl91c2hvcnRfZGl2IChnc2xfdmVjdG9yX3VzaG9ydCAqIGEsIGNvbnN0IGdzbF92 ZWN0b3JfdXNob3J0ICogYik7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9zY2FsZSAoZ3NsX3ZlY3Rv cl91c2hvcnQgKiBhLCBjb25zdCBkb3VibGUgeCk7CmludCBnc2xfdmVjdG9yX3VzaG9ydF9hZGRf Y29uc3RhbnQgKGdzbF92ZWN0b3JfdXNob3J0ICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdz bF92ZWN0b3JfdXNob3J0X2lzbnVsbCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2KTsKCmV4 dGVybiBpbnQgZ3NsX2NoZWNrX3JhbmdlOwoKCgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIHNob3J0 CmdzbF92ZWN0b3JfdXNob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2LCBjb25z dCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9l cnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jf dXNob3J0LmgiLCAxNzQsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAg IH0KCiAgcmV0dXJuIHYtPmRhdGFbaSAqIHYtPnN0cmlkZV07Cn0KCmV4dGVybiBpbmxpbmUKdm9p ZApnc2xfdmVjdG9yX3VzaG9ydF9zZXQgKGdzbF92ZWN0b3JfdXNob3J0ICogdiwgY29uc3Qgc2l6 ZV90IGksIHVuc2lnbmVkIHNob3J0IHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAg ICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dz bC9nc2xfdmVjdG9yX3VzaG9ydC5oIiwgMTg3LCBHU0xfRUlOVkFMKSA7IHJldHVybiA7IH0gd2hp bGUgKDApOwogICAgfQoKICB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdID0geDsKfQoKZXh0ZXJuIGlu bGluZQp1bnNpZ25lZCBzaG9ydCAqCmdzbF92ZWN0b3JfdXNob3J0X3B0ciAoZ3NsX3ZlY3Rvcl91 c2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewog ICAgICBkbyB7IGdzbF9lcnJvciAoImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUv Z3NsL2dzbF92ZWN0b3JfdXNob3J0LmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9 IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCAqKSAodi0+ZGF0YSAr IGkgKiB2LT5zdHJpZGUpOwp9CgpleHRlcm4gaW5saW5lCmNvbnN0IHVuc2lnbmVkIHNob3J0ICoK Z3NsX3ZlY3Rvcl91c2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3VzaG9ydCAqIHYs IGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsg Z3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Zl Y3Rvcl91c2hvcnQuaCIsIDIxMywgR1NMX0VJTlZBTCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDAp OwogICAgfQoKICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopICh2LT5kYXRhICsgaSAq IHYtPnN0cmlkZSk7Cn0KCgoKCgojIDE5ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3IuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3Nob3J0LmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jfc2hvcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n c2wvZ3NsX2Jsb2NrX3Nob3J0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF9ibG9j a19zaG9ydC5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19zaG9ydF9zdHJ1Y3QKewogIHNpemVfdCBz aXplOwogIHNob3J0ICpkYXRhOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgZ3NsX2Jsb2NrX3Nob3J0X3N0 cnVjdCBnc2xfYmxvY2tfc2hvcnQ7Cgpnc2xfYmxvY2tfc2hvcnQgKmdzbF9ibG9ja19zaG9ydF9h bGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfc2hvcnQgKmdzbF9ibG9ja19zaG9ydF9j YWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKdm9pZCBnc2xfYmxvY2tfc2hvcnRfZnJlZSAoZ3NsX2Js b2NrX3Nob3J0ICogYik7CgppbnQgZ3NsX2Jsb2NrX3Nob3J0X2ZyZWFkIChGSUxFICogc3RyZWFt LCBnc2xfYmxvY2tfc2hvcnQgKiBiKTsKaW50IGdzbF9ibG9ja19zaG9ydF9md3JpdGUgKEZJTEUg KiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19zaG9ydCAqIGIpOwppbnQgZ3NsX2Jsb2NrX3Nob3J0 X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX3Nob3J0ICogYik7CmludCBnc2xfYmxv Y2tfc2hvcnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX3Nob3J0ICog YiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfc2hvcnRfcmF3X2ZyZWFkIChG SUxFICogc3RyZWFtLCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3Ry aWRlKTsKaW50IGdzbF9ibG9ja19zaG9ydF9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBjb25z dCBzaG9ydCAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdz bF9ibG9ja19zaG9ydF9yYXdfZnNjYW5mIChGSUxFICogc3RyZWFtLCBzaG9ydCAqIGIsIGNvbnN0 IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19zaG9ydF9yYXdf ZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3Qgc2hvcnQgKiBiLCBjb25zdCBzaXplX3Qgbiwg Y29uc3Qgc2l6ZV90IHN0cmlkZSwgY29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxv Y2tfc2hvcnRfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX3Nob3J0ICogYik7CnNob3J0ICogZ3NsX2Js b2NrX3Nob3J0X2RhdGEgKGNvbnN0IGdzbF9ibG9ja19zaG9ydCAqIGIpOwoKCiMgMjYgIi91c3Iv aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2dz bC9nc2xfdmVjdG9yX3Nob3J0LmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7 CiAgc2l6ZV90IHN0cmlkZTsKICBzaG9ydCAqZGF0YTsKICBnc2xfYmxvY2tfc2hvcnQgKmJsb2Nr OwogIGludCBvd25lcjsKfQpnc2xfdmVjdG9yX3Nob3J0OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdz bF92ZWN0b3Jfc2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3Nob3J0X3ZpZXc7Cgp0eXBlZGVm IF9nc2xfdmVjdG9yX3Nob3J0X3ZpZXcgZ3NsX3ZlY3Rvcl9zaG9ydF92aWV3OwoKdHlwZWRlZiBz dHJ1Y3QKewogIGdzbF92ZWN0b3Jfc2hvcnQgdmVjdG9yOwp9IF9nc2xfdmVjdG9yX3Nob3J0X2Nv bnN0X3ZpZXc7Cgp0eXBlZGVmIGNvbnN0IF9nc2xfdmVjdG9yX3Nob3J0X2NvbnN0X3ZpZXcgZ3Ns X3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3OwoKCgoKZ3NsX3ZlY3Rvcl9zaG9ydCAqZ3NsX3ZlY3Rv cl9zaG9ydF9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfdmVjdG9yX3Nob3J0ICpnc2xfdmVj dG9yX3Nob3J0X2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwoKZ3NsX3ZlY3Rvcl9zaG9ydCAqZ3Ns X3ZlY3Rvcl9zaG9ydF9hbGxvY19mcm9tX2Jsb2NrIChnc2xfYmxvY2tfc2hvcnQgKiBiLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp emVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9yX3No b3J0ICpnc2xfdmVjdG9yX3Nob3J0X2FsbG9jX2Zyb21fdmVjdG9yIChnc2xfdmVjdG9yX3Nob3J0 ICogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoK dm9pZCBnc2xfdmVjdG9yX3Nob3J0X2ZyZWUgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKCgoKX2dz bF92ZWN0b3Jfc2hvcnRfdmlldwpnc2xfdmVjdG9yX3Nob3J0X3ZpZXdfYXJyYXkgKHNob3J0ICp2 LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9zaG9ydF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfdmll d19hcnJheV93aXRoX3N0cmlkZSAoc2hvcnQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3 CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfdmlld19hcnJheSAoY29uc3Qgc2hvcnQgKnYsIHNpemVf dCBuKTsKCl9nc2xfdmVjdG9yX3Nob3J0X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl9zaG9ydF9jb25z dF92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjb25zdCBzaG9ydCAqYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xf dmVjdG9yX3Nob3J0X3ZpZXcKZ3NsX3ZlY3Rvcl9zaG9ydF9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3Jf c2hvcnQgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3Nob3J0X3ZpZXcKZ3Ns X3ZlY3Rvcl9zaG9ydF9zdWJ2ZWN0b3Jfd2l0aF9zdHJpZGUgKGdzbF92ZWN0b3Jfc2hvcnQgKnYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9z aG9ydF9jb25zdF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfc3VidmVjdG9yIChjb25zdCBn c2xfdmVjdG9yX3Nob3J0ICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3Ns X3ZlY3Rvcl9zaG9ydF9jb25zdF92aWV3CmdzbF92ZWN0b3Jfc2hvcnRfY29uc3Rfc3VidmVjdG9y X3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICp2LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKCgpzaG9ydCBnc2xf dmVjdG9yX3Nob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVf dCBpKTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X3NldCAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNv bnN0IHNpemVfdCBpLCBzaG9ydCB4KTsKCnNob3J0ICpnc2xfdmVjdG9yX3Nob3J0X3B0ciAoZ3Ns X3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3Qgc2hvcnQgKmdzbF92ZWN0 b3Jfc2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogdiwgY29uc3Qgc2l6 ZV90IGkpOwoKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X3NldF96ZXJvIChnc2xfdmVjdG9yX3Nob3J0 ICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXRfYWxsIChnc2xfdmVjdG9yX3Nob3J0ICog diwgc2hvcnQgeCk7CmludCBnc2xfdmVjdG9yX3Nob3J0X3NldF9iYXNpcyAoZ3NsX3ZlY3Rvcl9z aG9ydCAqIHYsIHNpemVfdCBpKTsKCmludCBnc2xfdmVjdG9yX3Nob3J0X2ZyZWFkIChGSUxFICog c3RyZWFtLCBnc2xfdmVjdG9yX3Nob3J0ICogdik7CmludCBnc2xfdmVjdG9yX3Nob3J0X2Z3cml0 ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYpOwppbnQgZ3NsX3Zl Y3Rvcl9zaG9ydF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsK aW50IGdzbF92ZWN0b3Jfc2hvcnRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX3Zl Y3Rvcl9zaG9ydCAqIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmZvcm1hdCk7CgppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKGdzbF92ZWN0b3Jfc2hvcnQg KiBkZXN0LCBjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogc3JjKTsKCmludCBnc2xfdmVjdG9yX3No b3J0X3JldmVyc2UgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKCmludCBnc2xfdmVjdG9yX3Nob3J0 X3N3YXAgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBnc2xfdmVjdG9yX3Nob3J0ICogdyk7CmludCBn c2xfdmVjdG9yX3Nob3J0X3N3YXBfZWxlbWVudHMgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBjb25z dCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKc2hvcnQgZ3NsX3ZlY3Rvcl9zaG9ydF9tYXgg KGNvbnN0IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKc2hvcnQgZ3NsX3ZlY3Rvcl9zaG9ydF9taW4g KGNvbnN0IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X21pbm1h eCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIHNob3J0ICogbWluX291dCwgc2hvcnQgKiBt YXhfb3V0KTsKCnNpemVfdCBnc2xfdmVjdG9yX3Nob3J0X21heF9pbmRleCAoY29uc3QgZ3NsX3Zl Y3Rvcl9zaG9ydCAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9zaG9ydF9taW5faW5kZXggKGNvbnN0 IGdzbF92ZWN0b3Jfc2hvcnQgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3Nob3J0X21pbm1heF9pbmRl eCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGlt YXgpOwoKaW50IGdzbF92ZWN0b3Jfc2hvcnRfYWRkIChnc2xfdmVjdG9yX3Nob3J0ICogYSwgY29u c3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9zdWIgKGdzbF92 ZWN0b3Jfc2hvcnQgKiBhLCBjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogYik7CmludCBnc2xfdmVj dG9yX3Nob3J0X211bCAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIGEsIGNvbnN0IGdzbF92ZWN0b3Jfc2hv cnQgKiBiKTsKaW50IGdzbF92ZWN0b3Jfc2hvcnRfZGl2IChnc2xfdmVjdG9yX3Nob3J0ICogYSwg Y29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl9zaG9ydF9zY2FsZSAo Z3NsX3ZlY3Rvcl9zaG9ydCAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3Jfc2hv cnRfYWRkX2NvbnN0YW50IChnc2xfdmVjdG9yX3Nob3J0ICogYSwgY29uc3QgZG91YmxlIHgpOwoK aW50IGdzbF92ZWN0b3Jfc2hvcnRfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0ICogdik7 CgpleHRlcm4gaW50IGdzbF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQpzaG9ydApnc2xf dmVjdG9yX3Nob3J0X2dldCAoY29uc3QgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVf dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5o IiwgMTc0LCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl dHVybiB2LT5kYXRhW2kgKiB2LT5zdHJpZGVdOwp9CgpleHRlcm4gaW5saW5lCnZvaWQKZ3NsX3Zl Y3Rvcl9zaG9ydF9zZXQgKGdzbF92ZWN0b3Jfc2hvcnQgKiB2LCBjb25zdCBzaXplX3QgaSwgc2hv cnQgeCkKewoKICBpZiAoaSA+PSB2LT5zaXplKQogICAgewogICAgICBkbyB7IGdzbF9lcnJvciAo ImluZGV4IG91dCBvZiByYW5nZSIsICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jfc2hvcnQu aCIsIDE4NywgR1NMX0VJTlZBTCkgOyByZXR1cm4gOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgdi0+ ZGF0YVtpICogdi0+c3RyaWRlXSA9IHg7Cn0KCmV4dGVybiBpbmxpbmUKc2hvcnQgKgpnc2xfdmVj dG9yX3Nob3J0X3B0ciAoZ3NsX3ZlY3Rvcl9zaG9ydCAqIHYsIGNvbnN0IHNpemVfdCBpKQp7Cgog IGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0 IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9zaG9ydC5oIiwgMjAwLCBH U0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoc2hv cnQgKikgKHYtPmRhdGEgKyBpICogdi0+c3RyaWRlKTsKfQoKZXh0ZXJuIGlubGluZQpjb25zdCBz aG9ydCAqCmdzbF92ZWN0b3Jfc2hvcnRfY29uc3RfcHRyIChjb25zdCBnc2xfdmVjdG9yX3Nob3J0 ICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAg ZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9n c2xfdmVjdG9yX3Nob3J0LmgiLCAyMTMsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxl ICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBzaG9ydCAqKSAodi0+ZGF0YSArIGkgKiB2LT5z dHJpZGUpOwp9CgoKCgoKIyAyMCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfdWNoYXIuaCIgMSAzCiMgMjUgIi91c3Iv aW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9n c2xfYmxvY2tfdWNoYXIuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX2Jsb2NrX3Vj aGFyLmgiIDMKCgpzdHJ1Y3QgZ3NsX2Jsb2NrX3VjaGFyX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7 CiAgdW5zaWduZWQgY2hhciAqZGF0YTsKfTsKCnR5cGVkZWYgc3RydWN0IGdzbF9ibG9ja191Y2hh cl9zdHJ1Y3QgZ3NsX2Jsb2NrX3VjaGFyOwoKZ3NsX2Jsb2NrX3VjaGFyICpnc2xfYmxvY2tfdWNo YXJfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX2Jsb2NrX3VjaGFyICpnc2xfYmxvY2tfdWNo YXJfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX3VjaGFyX2ZyZWUgKGdz bF9ibG9ja191Y2hhciAqIGIpOwoKaW50IGdzbF9ibG9ja191Y2hhcl9mcmVhZCAoRklMRSAqIHN0 cmVhbSwgZ3NsX2Jsb2NrX3VjaGFyICogYik7CmludCBnc2xfYmxvY2tfdWNoYXJfZndyaXRlIChG SUxFICogc3RyZWFtLCBjb25zdCBnc2xfYmxvY2tfdWNoYXIgKiBiKTsKaW50IGdzbF9ibG9ja191 Y2hhcl9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF9ibG9ja191Y2hhciAqIGIpOwppbnQgZ3Ns X2Jsb2NrX3VjaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja191Y2hh ciAqIGIsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgppbnQgZ3NsX2Jsb2NrX3VjaGFyX3Jhd19mcmVh ZCAoRklMRSAqIHN0cmVhbSwgdW5zaWduZWQgY2hhciAqIGIsIGNvbnN0IHNpemVfdCBuLCBjb25z dCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja191Y2hhcl9yYXdfZndyaXRlIChGSUxFICog c3RyZWFtLCBjb25zdCB1bnNpZ25lZCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNp emVfdCBzdHJpZGUpOwppbnQgZ3NsX2Jsb2NrX3VjaGFyX3Jhd19mc2NhbmYgKEZJTEUgKiBzdHJl YW0sIHVuc2lnbmVkIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlk ZSk7CmludCBnc2xfYmxvY2tfdWNoYXJfcmF3X2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IHN0cmlkZSwg Y29uc3QgY2hhciAqZm9ybWF0KTsKCnNpemVfdCBnc2xfYmxvY2tfdWNoYXJfc2l6ZSAoY29uc3Qg Z3NsX2Jsb2NrX3VjaGFyICogYik7CnVuc2lnbmVkIGNoYXIgKiBnc2xfYmxvY2tfdWNoYXJfZGF0 YSAoY29uc3QgZ3NsX2Jsb2NrX3VjaGFyICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRlL2dzbC9n c2xfdmVjdG9yX3VjaGFyLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3Jf dWNoYXIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CnsKICBzaXplX3Qgc2l6ZTsKICBzaXplX3Qgc3Ry aWRlOwogIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgZ3NsX2Jsb2NrX3VjaGFyICpibG9jazsKICBp bnQgb3duZXI7Cn0KZ3NsX3ZlY3Rvcl91Y2hhcjsKCnR5cGVkZWYgc3RydWN0CnsKICBnc2xfdmVj dG9yX3VjaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3OwoKdHlwZWRlZiBfZ3Ns X3ZlY3Rvcl91Y2hhcl92aWV3IGdzbF92ZWN0b3JfdWNoYXJfdmlldzsKCnR5cGVkZWYgc3RydWN0 CnsKICBnc2xfdmVjdG9yX3VjaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92 aWV3OwoKdHlwZWRlZiBjb25zdCBfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3IGdzbF92ZWN0 b3JfdWNoYXJfY29uc3RfdmlldzsKCgoKCmdzbF92ZWN0b3JfdWNoYXIgKmdzbF92ZWN0b3JfdWNo YXJfYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKZ3NsX3ZlY3Rvcl91Y2hhciAqZ3NsX3ZlY3Rvcl91 Y2hhcl9jYWxsb2MgKGNvbnN0IHNpemVfdCBuKTsKCmdzbF92ZWN0b3JfdWNoYXIgKmdzbF92ZWN0 b3JfdWNoYXJfYWxsb2NfZnJvbV9ibG9jayAoZ3NsX2Jsb2NrX3VjaGFyICogYiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKZ3NsX3ZlY3Rvcl91Y2hhciAq Z3NsX3ZlY3Rvcl91Y2hhcl9hbGxvY19mcm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyaWRlKTsKCnZvaWQg Z3NsX3ZlY3Rvcl91Y2hhcl9mcmVlIChnc2xfdmVjdG9yX3VjaGFyICogdik7CgoKCl9nc2xfdmVj dG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3X2FycmF5ICh1bnNpZ25lZCBjaGFy ICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl92aWV3CmdzbF92ZWN0b3JfdWNoYXJf dmlld19hcnJheV93aXRoX3N0cmlkZSAodW5zaWduZWQgY2hhciAqYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VjaGFy X2NvbnN0X3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3X2FycmF5IChjb25zdCB1bnNp Z25lZCBjaGFyICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3Cmdz bF92ZWN0b3JfdWNoYXJfY29uc3Rfdmlld19hcnJheV93aXRoX3N0cmlkZSAoY29uc3QgdW5zaWdu ZWQgY2hhciAqYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBuKTsKCl9nc2xfdmVjdG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91 Y2hhcl9zdWJ2ZWN0b3IgKGdzbF92ZWN0b3JfdWNoYXIgKnYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsK Cl9nc2xfdmVjdG9yX3VjaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl91Y2hhcl9zdWJ2ZWN0b3Jfd2l0aF9z dHJpZGUgKGdzbF92ZWN0b3JfdWNoYXIgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBzdHJpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfdWNo YXJfY29uc3Rfc3VidmVjdG9yIChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICp2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl91Y2hhcl9jb25zdF92aWV3CmdzbF92 ZWN0b3JfdWNoYXJfY29uc3Rfc3VidmVjdG9yX3dpdGhfc3RyaWRlIChjb25zdCBnc2xfdmVjdG9y X3VjaGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG4pOwoKCgp1bnNpZ25lZCBjaGFyIGdzbF92ZWN0b3JfdWNoYXJfZ2V0IChjb25z dCBnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpOwp2b2lkIGdzbF92ZWN0b3Jf dWNoYXJfc2V0IChnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGksIHVuc2lnbmVk IGNoYXIgeCk7Cgp1bnNpZ25lZCBjaGFyICpnc2xfdmVjdG9yX3VjaGFyX3B0ciAoZ3NsX3ZlY3Rv cl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKY29uc3QgdW5zaWduZWQgY2hhciAqZ3NsX3Zl Y3Rvcl91Y2hhcl9jb25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2LCBjb25zdCBz aXplX3QgaSk7Cgp2b2lkIGdzbF92ZWN0b3JfdWNoYXJfc2V0X3plcm8gKGdzbF92ZWN0b3JfdWNo YXIgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VjaGFyX3NldF9hbGwgKGdzbF92ZWN0b3JfdWNoYXIg KiB2LCB1bnNpZ25lZCBjaGFyIHgpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXRfYmFzaXMgKGdz bF92ZWN0b3JfdWNoYXIgKiB2LCBzaXplX3QgaSk7CgppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVh ZCAoRklMRSAqIHN0cmVhbSwgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl91 Y2hhcl9md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2KTsK aW50IGdzbF92ZWN0b3JfdWNoYXJfZnNjYW5mIChGSUxFICogc3RyZWFtLCBnc2xfdmVjdG9yX3Vj aGFyICogdik7CmludCBnc2xfdmVjdG9yX3VjaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNv bnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3JfdWNoYXJfbWVtY3B5IChnc2xfdmVj dG9yX3VjaGFyICogZGVzdCwgY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHNyYyk7CgppbnQgZ3Ns X3ZlY3Rvcl91Y2hhcl9yZXZlcnNlIChnc2xfdmVjdG9yX3VjaGFyICogdik7CgppbnQgZ3NsX3Zl Y3Rvcl91Y2hhcl9zd2FwIChnc2xfdmVjdG9yX3VjaGFyICogdiwgZ3NsX3ZlY3Rvcl91Y2hhciAq IHcpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zd2FwX2VsZW1lbnRzIChnc2xfdmVjdG9yX3VjaGFy ICogdiwgY29uc3Qgc2l6ZV90IGksIGNvbnN0IHNpemVfdCBqKTsKCnVuc2lnbmVkIGNoYXIgZ3Ns X3ZlY3Rvcl91Y2hhcl9tYXggKGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiB2KTsKdW5zaWduZWQg Y2hhciBnc2xfdmVjdG9yX3VjaGFyX21pbiAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYpOwp2 b2lkIGdzbF92ZWN0b3JfdWNoYXJfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdiwg dW5zaWduZWQgY2hhciAqIG1pbl9vdXQsIHVuc2lnbmVkIGNoYXIgKiBtYXhfb3V0KTsKCnNpemVf dCBnc2xfdmVjdG9yX3VjaGFyX21heF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYp OwpzaXplX3QgZ3NsX3ZlY3Rvcl91Y2hhcl9taW5faW5kZXggKGNvbnN0IGdzbF92ZWN0b3JfdWNo YXIgKiB2KTsKdm9pZCBnc2xfdmVjdG9yX3VjaGFyX21pbm1heF9pbmRleCAoY29uc3QgZ3NsX3Zl Y3Rvcl91Y2hhciAqIHYsIHNpemVfdCAqIGltaW4sIHNpemVfdCAqIGltYXgpOwoKaW50IGdzbF92 ZWN0b3JfdWNoYXJfYWRkIChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZ3NsX3ZlY3Rvcl91 Y2hhciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zdWIgKGdzbF92ZWN0b3JfdWNoYXIgKiBh LCBjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogYik7CmludCBnc2xfdmVjdG9yX3VjaGFyX211bCAo Z3NsX3ZlY3Rvcl91Y2hhciAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfdWNoYXIgKiBiKTsKaW50IGdz bF92ZWN0b3JfdWNoYXJfZGl2IChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZ3NsX3ZlY3Rv cl91Y2hhciAqIGIpOwppbnQgZ3NsX3ZlY3Rvcl91Y2hhcl9zY2FsZSAoZ3NsX3ZlY3Rvcl91Y2hh ciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfdWNoYXJfYWRkX2NvbnN0YW50 IChnc2xfdmVjdG9yX3VjaGFyICogYSwgY29uc3QgZG91YmxlIHgpOwoKaW50IGdzbF92ZWN0b3Jf dWNoYXJfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdik7CgpleHRlcm4gaW50IGdz bF9jaGVja19yYW5nZTsKCgoKZXh0ZXJuIGlubGluZQp1bnNpZ25lZCBjaGFyCmdzbF92ZWN0b3Jf dWNoYXJfZ2V0IChjb25zdCBnc2xfdmVjdG9yX3VjaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpCnsK CiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBv dXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VjaGFyLmgiLCAxNzQs IEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIHYt PmRhdGFbaSAqIHYtPnN0cmlkZV07Cn0KCmV4dGVybiBpbmxpbmUKdm9pZApnc2xfdmVjdG9yX3Vj aGFyX3NldCAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpLCB1bnNpZ25lZCBj aGFyIHgpCnsKCiAgaWYgKGkgPj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3Ig KCJpbmRleCBvdXQgb2YgcmFuZ2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX3VjaGFy LmgiLCAxODcsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHYt PmRhdGFbaSAqIHYtPnN0cmlkZV0gPSB4Owp9CgpleHRlcm4gaW5saW5lCnVuc2lnbmVkIGNoYXIg Kgpnc2xfdmVjdG9yX3VjaGFyX3B0ciAoZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVf dCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgi aW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5o IiwgMjAwLCBHU0xfRUlOVkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJl dHVybiAodW5zaWduZWQgY2hhciAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgpleHRl cm4gaW5saW5lCmNvbnN0IHVuc2lnbmVkIGNoYXIgKgpnc2xfdmVjdG9yX3VjaGFyX2NvbnN0X3B0 ciAoY29uc3QgZ3NsX3ZlY3Rvcl91Y2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChp ID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJh bmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl91Y2hhci5oIiwgMjEzLCBHU0xfRUlO VkFMKSA7IHJldHVybiAwIDsgfSB3aGlsZSAoMCk7CiAgICB9CgogIHJldHVybiAoY29uc3QgdW5z aWduZWQgY2hhciAqKSAodi0+ZGF0YSArIGkgKiB2LT5zdHJpZGUpOwp9CgoKCgoKIyAyMiAiL3Vz ci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nc2wvZ3Ns X3ZlY3Rvcl9jaGFyLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvZ3NsL2dzbF92ZWN0b3JfY2hh ci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY2hhci5oIiAxIDMKIyAzNiAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfYmxvY2tfY2hhci5oIiAzCgoKc3RydWN0IGdzbF9ibG9ja19j aGFyX3N0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgY2hhciAqZGF0YTsKfTsKCnR5cGVkZWYgc3Ry dWN0IGdzbF9ibG9ja19jaGFyX3N0cnVjdCBnc2xfYmxvY2tfY2hhcjsKCmdzbF9ibG9ja19jaGFy ICpnc2xfYmxvY2tfY2hhcl9hbGxvYyAoY29uc3Qgc2l6ZV90IG4pOwpnc2xfYmxvY2tfY2hhciAq Z3NsX2Jsb2NrX2NoYXJfY2FsbG9jIChjb25zdCBzaXplX3Qgbik7CnZvaWQgZ3NsX2Jsb2NrX2No YXJfZnJlZSAoZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKCmludCBnc2xfYmxvY2tfY2hhcl9mcmVhZCAo RklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50IGdzbF9ibG9ja19jaGFyX2Z3 cml0ZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50IGdzbF9i bG9ja19jaGFyX2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKaW50 IGdzbF9ibG9ja19jaGFyX2ZwcmludGYgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9ibG9ja19j aGFyICogYiwgY29uc3QgY2hhciAqZm9ybWF0KTsKCmludCBnc2xfYmxvY2tfY2hhcl9yYXdfZnJl YWQgKEZJTEUgKiBzdHJlYW0sIGNoYXIgKiBiLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90 IHN0cmlkZSk7CmludCBnc2xfYmxvY2tfY2hhcl9yYXdfZndyaXRlIChGSUxFICogc3RyZWFtLCBj b25zdCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBzdHJpZGUpOwppbnQg Z3NsX2Jsb2NrX2NoYXJfcmF3X2ZzY2FuZiAoRklMRSAqIHN0cmVhbSwgY2hhciAqIGIsIGNvbnN0 IHNpemVfdCBuLCBjb25zdCBzaXplX3Qgc3RyaWRlKTsKaW50IGdzbF9ibG9ja19jaGFyX3Jhd19m cHJpbnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBjaGFyICogYiwgY29uc3Qgc2l6ZV90IG4sIGNv bnN0IHNpemVfdCBzdHJpZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCk7CgpzaXplX3QgZ3NsX2Jsb2Nr X2NoYXJfc2l6ZSAoY29uc3QgZ3NsX2Jsb2NrX2NoYXIgKiBiKTsKY2hhciAqIGdzbF9ibG9ja19j aGFyX2RhdGEgKGNvbnN0IGdzbF9ibG9ja19jaGFyICogYik7CgoKIyAyNiAiL3Vzci9pbmNsdWRl L2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Zl Y3Rvcl9jaGFyLmgiIDMKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc2l6ZV90IHNpemU7CiAgc2l6ZV90 IHN0cmlkZTsKICBjaGFyICpkYXRhOwogIGdzbF9ibG9ja19jaGFyICpibG9jazsKICBpbnQgb3du ZXI7Cn0KZ3NsX3ZlY3Rvcl9jaGFyOwoKdHlwZWRlZiBzdHJ1Y3QKewogIGdzbF92ZWN0b3JfY2hh ciB2ZWN0b3I7Cn0gX2dzbF92ZWN0b3JfY2hhcl92aWV3OwoKdHlwZWRlZiBfZ3NsX3ZlY3Rvcl9j aGFyX3ZpZXcgZ3NsX3ZlY3Rvcl9jaGFyX3ZpZXc7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgZ3NsX3Zl Y3Rvcl9jaGFyIHZlY3RvcjsKfSBfZ3NsX3ZlY3Rvcl9jaGFyX2NvbnN0X3ZpZXc7Cgp0eXBlZGVm IGNvbnN0IF9nc2xfdmVjdG9yX2NoYXJfY29uc3RfdmlldyBnc2xfdmVjdG9yX2NoYXJfY29uc3Rf dmlldzsKCgoKCmdzbF92ZWN0b3JfY2hhciAqZ3NsX3ZlY3Rvcl9jaGFyX2FsbG9jIChjb25zdCBz aXplX3Qgbik7CmdzbF92ZWN0b3JfY2hhciAqZ3NsX3ZlY3Rvcl9jaGFyX2NhbGxvYyAoY29uc3Qg c2l6ZV90IG4pOwoKZ3NsX3ZlY3Rvcl9jaGFyICpnc2xfdmVjdG9yX2NoYXJfYWxsb2NfZnJvbV9i bG9jayAoZ3NsX2Jsb2NrX2NoYXIgKiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c2l6ZV90IHN0cmlkZSk7Cgpnc2xfdmVjdG9yX2NoYXIgKmdzbF92ZWN0b3JfY2hhcl9hbGxvY19m cm9tX3ZlY3RvciAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6 ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHNpemVfdCBzdHJpZGUpOwoKdm9pZCBnc2xfdmVjdG9yX2NoYXJfZnJlZSAoZ3Ns X3ZlY3Rvcl9jaGFyICogdik7CgoKCl9nc2xfdmVjdG9yX2NoYXJfdmlldwpnc2xfdmVjdG9yX2No YXJfdmlld19hcnJheSAoY2hhciAqdiwgc2l6ZV90IG4pOwoKX2dzbF92ZWN0b3JfY2hhcl92aWV3 CmdzbF92ZWN0b3JfY2hhcl92aWV3X2FycmF5X3dpdGhfc3RyaWRlIChjaGFyICpiYXNlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJpZGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92ZWN0 b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF92aWV3X2FycmF5IChjb25z dCBjaGFyICp2LCBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFyX2NvbnN0X3ZpZXcKZ3NsX3Zl Y3Rvcl9jaGFyX2NvbnN0X3ZpZXdfYXJyYXlfd2l0aF9zdHJpZGUgKGNvbnN0IGNoYXIgKmJhc2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0 cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFyX3ZpZXcKZ3NsX3ZlY3Rvcl9jaGFyX3N1YnZlY3RvciAo Z3NsX3ZlY3Rvcl9jaGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CgpfZ3NsX3ZlY3Rvcl9jaGFy X3ZpZXcKZ3NsX3ZlY3Rvcl9jaGFyX3N1YnZlY3Rvcl93aXRoX3N0cmlkZSAoZ3NsX3ZlY3Rvcl9j aGFyICp2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyaWRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoKX2dzbF92 ZWN0b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF9zdWJ2ZWN0b3IgKGNv bnN0IGdzbF92ZWN0b3JfY2hhciAqdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwoK X2dzbF92ZWN0b3JfY2hhcl9jb25zdF92aWV3CmdzbF92ZWN0b3JfY2hhcl9jb25zdF9zdWJ2ZWN0 b3Jfd2l0aF9zdHJpZGUgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqdiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0cmlkZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuKTsKCgoKY2hhciBnc2xf dmVjdG9yX2NoYXJfZ2V0IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LCBjb25zdCBzaXplX3Qg aSk7CnZvaWQgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY29uc3Qg c2l6ZV90IGksIGNoYXIgeCk7CgpjaGFyICpnc2xfdmVjdG9yX2NoYXJfcHRyIChnc2xfdmVjdG9y X2NoYXIgKiB2LCBjb25zdCBzaXplX3QgaSk7CmNvbnN0IGNoYXIgKmdzbF92ZWN0b3JfY2hhcl9j b25zdF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKTsKCnZv aWQgZ3NsX3ZlY3Rvcl9jaGFyX3NldF96ZXJvIChnc2xfdmVjdG9yX2NoYXIgKiB2KTsKdm9pZCBn c2xfdmVjdG9yX2NoYXJfc2V0X2FsbCAoZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY2hhciB4KTsKaW50 IGdzbF92ZWN0b3JfY2hhcl9zZXRfYmFzaXMgKGdzbF92ZWN0b3JfY2hhciAqIHYsIHNpemVfdCBp KTsKCmludCBnc2xfdmVjdG9yX2NoYXJfZnJlYWQgKEZJTEUgKiBzdHJlYW0sIGdzbF92ZWN0b3Jf Y2hhciAqIHYpOwppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2Z3cml0ZSAoRklMRSAqIHN0cmVhbSwgY29u c3QgZ3NsX3ZlY3Rvcl9jaGFyICogdik7CmludCBnc2xfdmVjdG9yX2NoYXJfZnNjYW5mIChGSUxF ICogc3RyZWFtLCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9mcHJp bnRmIChGSUxFICogc3RyZWFtLCBjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQpOwoKaW50IGdzbF92ZWN0b3Jf Y2hhcl9tZW1jcHkgKGdzbF92ZWN0b3JfY2hhciAqIGRlc3QsIGNvbnN0IGdzbF92ZWN0b3JfY2hh ciAqIHNyYyk7CgppbnQgZ3NsX3ZlY3Rvcl9jaGFyX3JldmVyc2UgKGdzbF92ZWN0b3JfY2hhciAq IHYpOwoKaW50IGdzbF92ZWN0b3JfY2hhcl9zd2FwIChnc2xfdmVjdG9yX2NoYXIgKiB2LCBnc2xf dmVjdG9yX2NoYXIgKiB3KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9zd2FwX2VsZW1lbnRzIChnc2xf dmVjdG9yX2NoYXIgKiB2LCBjb25zdCBzaXplX3QgaSwgY29uc3Qgc2l6ZV90IGopOwoKY2hhciBn c2xfdmVjdG9yX2NoYXJfbWF4IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKY2hhciBnc2xf dmVjdG9yX2NoYXJfbWluIChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKdm9pZCBnc2xfdmVj dG9yX2NoYXJfbWlubWF4IChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2LCBjaGFyICogbWluX291 dCwgY2hhciAqIG1heF9vdXQpOwoKc2l6ZV90IGdzbF92ZWN0b3JfY2hhcl9tYXhfaW5kZXggKGNv bnN0IGdzbF92ZWN0b3JfY2hhciAqIHYpOwpzaXplX3QgZ3NsX3ZlY3Rvcl9jaGFyX21pbl9pbmRl eCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdik7CnZvaWQgZ3NsX3ZlY3Rvcl9jaGFyX21pbm1h eF9pbmRleCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdiwgc2l6ZV90ICogaW1pbiwgc2l6ZV90 ICogaW1heCk7CgppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2FkZCAoZ3NsX3ZlY3Rvcl9jaGFyICogYSwg Y29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogYik7CmludCBnc2xfdmVjdG9yX2NoYXJfc3ViIChnc2xf dmVjdG9yX2NoYXIgKiBhLCBjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiBiKTsKaW50IGdzbF92ZWN0 b3JfY2hhcl9tdWwgKGdzbF92ZWN0b3JfY2hhciAqIGEsIGNvbnN0IGdzbF92ZWN0b3JfY2hhciAq IGIpOwppbnQgZ3NsX3ZlY3Rvcl9jaGFyX2RpdiAoZ3NsX3ZlY3Rvcl9jaGFyICogYSwgY29uc3Qg Z3NsX3ZlY3Rvcl9jaGFyICogYik7CmludCBnc2xfdmVjdG9yX2NoYXJfc2NhbGUgKGdzbF92ZWN0 b3JfY2hhciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKaW50IGdzbF92ZWN0b3JfY2hhcl9hZGRfY29u c3RhbnQgKGdzbF92ZWN0b3JfY2hhciAqIGEsIGNvbnN0IGRvdWJsZSB4KTsKCmludCBnc2xfdmVj dG9yX2NoYXJfaXNudWxsIChjb25zdCBnc2xfdmVjdG9yX2NoYXIgKiB2KTsKCmV4dGVybiBpbnQg Z3NsX2NoZWNrX3JhbmdlOwoKCgpleHRlcm4gaW5saW5lCmNoYXIKZ3NsX3ZlY3Rvcl9jaGFyX2dl dCAoY29uc3QgZ3NsX3ZlY3Rvcl9jaGFyICogdiwgY29uc3Qgc2l6ZV90IGkpCnsKCiAgaWYgKGkg Pj0gdi0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFu Z2UiLCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIsIDE3NCwgR1NMX0VJTlZB TCkgOyByZXR1cm4gMCA7IH0gd2hpbGUgKDApOwogICAgfQoKICByZXR1cm4gdi0+ZGF0YVtpICog di0+c3RyaWRlXTsKfQoKZXh0ZXJuIGlubGluZQp2b2lkCmdzbF92ZWN0b3JfY2hhcl9zZXQgKGdz bF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpLCBjaGFyIHgpCnsKCiAgaWYgKGkgPj0g di0+c2l6ZSkKICAgIHsKICAgICAgZG8geyBnc2xfZXJyb3IgKCJpbmRleCBvdXQgb2YgcmFuZ2Ui LCAiL3Vzci9pbmNsdWRlL2dzbC9nc2xfdmVjdG9yX2NoYXIuaCIsIDE4NywgR1NMX0VJTlZBTCkg OyByZXR1cm4gOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgdi0+ZGF0YVtpICogdi0+c3RyaWRlXSA9 IHg7Cn0KCmV4dGVybiBpbmxpbmUKY2hhciAqCmdzbF92ZWN0b3JfY2hhcl9wdHIgKGdzbF92ZWN0 b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlmIChpID49IHYtPnNpemUpCiAgICB7 CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9mIHJhbmdlIiwgIi91c3IvaW5jbHVk ZS9nc2wvZ3NsX3ZlY3Rvcl9jaGFyLmgiLCAyMDAsIEdTTF9FSU5WQUwpIDsgcmV0dXJuIDAgOyB9 IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjaGFyICopICh2LT5kYXRhICsgaSAqIHYtPnN0 cmlkZSk7Cn0KCmV4dGVybiBpbmxpbmUKY29uc3QgY2hhciAqCmdzbF92ZWN0b3JfY2hhcl9jb25z dF9wdHIgKGNvbnN0IGdzbF92ZWN0b3JfY2hhciAqIHYsIGNvbnN0IHNpemVfdCBpKQp7CgogIGlm IChpID49IHYtPnNpemUpCiAgICB7CiAgICAgIGRvIHsgZ3NsX2Vycm9yICgiaW5kZXggb3V0IG9m IHJhbmdlIiwgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3ZlY3Rvcl9jaGFyLmgiLCAyMTMsIEdTTF9F SU5WQUwpIDsgcmV0dXJuIDAgOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgcmV0dXJuIChjb25zdCBj aGFyICopICh2LT5kYXRhICsgaSAqIHYtPnN0cmlkZSk7Cn0KCgoKCgojIDIzICIvdXNyL2luY2x1 ZGUvZ3NsL2dzbF92ZWN0b3IuaCIgMiAzCiMgMzEgInRlc3QuYyIgMgojIDEgIi91c3IvaW5jbHVk ZS9nc2wvZ3NsX3Rlc3QuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nc2wvZ3NsX3Rlc3QuaCIg MwoKCnZvaWQKICBnc2xfdGVzdCAoaW50IHN0YXR1cywgY29uc3QgY2hhciAqdGVzdF9kZXNjcmlw dGlvbiwgLi4uKTsKCnZvaWQKZ3NsX3Rlc3RfcmVsIChkb3VibGUgcmVzdWx0LCBkb3VibGUgZXhw ZWN0ZWQsIGRvdWJsZSByZWxhdGl2ZV9lcnJvciwKICAgICAgICAgICAgICBjb25zdCBjaGFyICp0 ZXN0X2Rlc2NyaXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3RfYWJzIChkb3VibGUgcmVzdWx0 LCBkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBhYnNvbHV0ZV9lcnJvciwKICAgICAgICAgICAgICBj b25zdCBjaGFyICp0ZXN0X2Rlc2NyaXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3RfZmFjdG9y IChkb3VibGUgcmVzdWx0LCBkb3VibGUgZXhwZWN0ZWQsIGRvdWJsZSBmYWN0b3IsCiAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqdGVzdF9kZXNjcmlwdGlvbiwgLi4uKSA7Cgp2b2lkCmdzbF90 ZXN0X2ludCAoaW50IHJlc3VsdCwgaW50IGV4cGVjdGVkLCBjb25zdCBjaGFyICp0ZXN0X2Rlc2Ny aXB0aW9uLCAuLi4pIDsKCnZvaWQKZ3NsX3Rlc3Rfc3RyIChjb25zdCBjaGFyICogcmVzdWx0LCBj b25zdCBjaGFyICogZXhwZWN0ZWQsCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGVzdF9kZXNj cmlwdGlvbiwgLi4uKSA7Cgp2b2lkCiAgZ3NsX3Rlc3RfdmVyYm9zZSAoaW50IHZlcmJvc2UpIDsK CmludAogIGdzbF90ZXN0X3N1bW1hcnkgKHZvaWQpIDsKCgoKIyAzMiAidGVzdC5jIiAyCiMgMSAi L3Vzci9pbmNsdWRlL2dzbC9nc2xfaWVlZV91dGlscy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl L2dzbC9nc2xfaWVlZV91dGlscy5oIiAzCgoKZW51bSB7CiAgR1NMX0lFRUVfVFlQRV9OQU4gPSAx LAogIEdTTF9JRUVFX1RZUEVfSU5GID0gMiwKICBHU0xfSUVFRV9UWVBFX05PUk1BTCA9IDMsCiAg R1NMX0lFRUVfVFlQRV9ERU5PUk1BTCA9IDQsCiAgR1NMX0lFRUVfVFlQRV9aRVJPID0gNQp9IDsK CnR5cGVkZWYgc3RydWN0IHsKICBpbnQgc2lnbiA7CiAgY2hhciBtYW50aXNzYVsyNF0gOwogIGlu dCBleHBvbmVudCA7CiAgaW50IHR5cGUgOwp9IGdzbF9pZWVlX2Zsb2F0X3JlcCA7Cgp0eXBlZGVm IHN0cnVjdCB7CiAgaW50IHNpZ24gOwogIGNoYXIgbWFudGlzc2FbNTNdIDsKICBpbnQgZXhwb25l bnQgOwogIGludCB0eXBlIDsKfSBnc2xfaWVlZV9kb3VibGVfcmVwIDsKCgp2b2lkIGdzbF9pZWVl X3ByaW50Zl9mbG9hdCAoY29uc3QgZmxvYXQgKiB4KSA7CnZvaWQgZ3NsX2llZWVfcHJpbnRmX2Rv dWJsZSAoY29uc3QgZG91YmxlICogeCkgOwoKdm9pZCBnc2xfaWVlZV9mcHJpbnRmX2Zsb2F0IChG SUxFICogc3RyZWFtLCBjb25zdCBmbG9hdCAqIHgpIDsKdm9pZCBnc2xfaWVlZV9mcHJpbnRmX2Rv dWJsZSAoRklMRSAqIHN0cmVhbSwgY29uc3QgZG91YmxlICogeCkgOwoKdm9pZCBnc2xfaWVlZV9m bG9hdF90b19yZXAgKGNvbnN0IGZsb2F0ICogeCwgZ3NsX2llZWVfZmxvYXRfcmVwICogcikgOwp2 b2lkIGdzbF9pZWVlX2RvdWJsZV90b19yZXAgKGNvbnN0IGRvdWJsZSAqIHgsIGdzbF9pZWVlX2Rv dWJsZV9yZXAgKiByKSA7CgplbnVtIHsKICBHU0xfSUVFRV9TSU5HTEVfUFJFQ0lTSU9OID0gMSwK ICBHU0xfSUVFRV9ET1VCTEVfUFJFQ0lTSU9OID0gMiwKICBHU0xfSUVFRV9FWFRFTkRFRF9QUkVD SVNJT04gPSAzCn0gOwoKZW51bSB7CiAgR1NMX0lFRUVfUk9VTkRfVE9fTkVBUkVTVCA9IDEsCiAg R1NMX0lFRUVfUk9VTkRfRE9XTiA9IDIsCiAgR1NMX0lFRUVfUk9VTkRfVVAgPSAzLAogIEdTTF9J RUVFX1JPVU5EX1RPX1pFUk8gPSA0Cn0gOwoKZW51bSB7CiAgR1NMX0lFRUVfTUFTS19JTlZBTElE ID0gMSwKICBHU0xfSUVFRV9NQVNLX0RFTk9STUFMSVpFRCA9IDIsCiAgR1NMX0lFRUVfTUFTS19E SVZJU0lPTl9CWV9aRVJPID0gNCwKICBHU0xfSUVFRV9NQVNLX09WRVJGTE9XID0gOCwKICBHU0xf SUVFRV9NQVNLX1VOREVSRkxPVyA9IDE2LAogIEdTTF9JRUVFX01BU0tfQUxMID0gMzEsCiAgR1NM X0lFRUVfVFJBUF9JTkVYQUNUID0gMzIKfSA7Cgp2b2lkIGdzbF9pZWVlX2Vudl9zZXR1cCAodm9p ZCkgOwppbnQgZ3NsX2llZWVfcmVhZF9tb2RlX3N0cmluZyAoY29uc3QgY2hhciAqIGRlc2NyaXB0 aW9uLCBpbnQgKiBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KiByb3VuZGluZywgaW50ICogZXhjZXB0aW9uX21hc2spIDsKaW50IGdzbF9pZWVlX3NldF9tb2Rl IChpbnQgcHJlY2lzaW9uLCBpbnQgcm91bmRpbmcsIGludCBleGNlcHRpb25fbWFzaykgOwoKCiMg MzMgInRlc3QuYyIgMgoKaW50IHN0YXR1cyA9IDA7CiMgNDMgInRlc3QuYyIKIyAxICJ0ZW1wbGF0 ZXNfb24uaCIgMQojIDQ0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEK IyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5jIgp2b2lkIHRlc3RfY29tcGxleF9sb25nX2RvdWJs ZV9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfYmluYXJ5ICh2b2lk KTsKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdHJhcCAodm9pZCk7Cgp2b2lkCnRlc3Rf Y29tcGxleF9sb25nX2RvdWJsZV9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdzbF92ZWN0 b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3Vi bGVfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3Jf Y29tcGxleF9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsKICBn c2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0g MSwgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHVuaXQg c3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9j b21wbGV4X2xvbmdfZG91YmxlIHggPSB7ezAuMEwsMC4wTH19OwogICAgICAoKHgpLmRhdFswXSkg PSAobG9uZyBkb3VibGUpaTsKICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKShpICsg MTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKHYsIGksIHgp OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg IHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChsb25nIGRvdWJsZSkgaSB8fCB2LT5kYXRh WzIgKiBpICsgMV0gIT0gKGxvbmcgZG91YmxlKSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9 IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf ZG91YmxlIiAiX3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCiAgc3RhdHVzID0g MDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhf bG9uZ19kb3VibGUgeCwgeTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKWk7CiAg ICAgICgoeCkuZGF0WzFdKSA9IChsb25nIGRvdWJsZSkoaSArIDEyMzQpOwogICAgICB5ID0gZ3Ns X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCAodiwgaSk7CiAgICAgIGlmICghKCgoeCku ZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgoeCkuZGF0WzFdID09ICh5KS5kYXRbMV0pKSkKICAg ICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9j b21wbGV4X2xvbmdfZG91YmxlIiAiX2dldCByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoK CgogIHYtPnN0cmlkZSA9IDIgOwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy NyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUgeCwgeTsKICAg ICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKSgyICogaSk7CiAgICAgICgoeCkuZGF0WzFd KSA9IChsb25nIGRvdWJsZSkoMiAqIGkgKyAxMjM0KTsKICAgICAgeSA9IGdzbF92ZWN0b3JfY29t cGxleF9sb25nX2RvdWJsZV9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgpLmRhdFswXSA9PSAo eSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAgICAgICAgc3RhdHVz ID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9sb25n X2RvdWJsZSIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4 X2xvbmdfZG91YmxlIHg7CiAgICAgICgoeCkuZGF0WzBdKSA9IChsb25nIGRvdWJsZSlpIDsKICAg ICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0 b3JfY29tcGxleF9sb25nX2RvdWJsZV9zZXQgKHYsIGksIHgpOwogICAgfTsKCiAgc3RhdHVzID0g MDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5k YXRhWzIgKiAyICogaV0gIT0gKGxvbmcgZG91YmxlKSBpIHx8IHYtPmRhdGFbMiAqIDIgKiBpICsg MV0gIT0gKGxvbmcgZG91YmxlKSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9 OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAi X3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5z dHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3Ns X2NvbXBsZXhfbG9uZ19kb3VibGUgeCA9IHt7MC4wTCwwLjBMfX07CiAgICAgICgoeCkuZGF0WzBd KSA9IChsb25nIGRvdWJsZSlpOwogICAgICAoKHgpLmRhdFsxXSkgPSAobG9uZyBkb3VibGUpKGkg KyAxMjM0KTsKICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3NldCAodiwgaSwg eCk7CiAgICB9OwoKCiAgewogICAgZ3NsX2NvbXBsZXhfbG9uZ19kb3VibGUgeCwgeSwgciwgcyA7 CiAgICAoKHgpLmRhdFswXSkgPSAyIDsKICAgICgoeCkuZGF0WzFdKSA9IDIgKyAxMjM0OwogICAg KCh5KS5kYXRbMF0pID0gNSA7CiAgICAoKHkpLmRhdFsxXSkgPSA1ICsgMTIzNDsKCiAgICBnc2xf dmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAg IHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0KHYsMik7CiAgICBzID0gZ3Ns X3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCh2LDUpOwoKICAgIHN0YXR1cyA9ICEgKCgo cikuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7 CiAgICBzdGF0dXMgfD0gISAoKChzKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkgJiYgKChzKS5kYXRb MV0gPT0gKHgpLmRhdFsxXSkpIDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf c3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9u Z19kb3VibGVfZ2V0KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91Ymxl X2dldCh2LDUpOwoKICAgIHN0YXR1cyB8PSAhICgoKHIpLmRhdFswXSA9PSAoeCkuZGF0WzBdKSAm JiAoKHIpLmRhdFsxXSA9PSAoeCkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0 WzBdID09ICh5KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7CiAgfQoK ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3N3 YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3Rh dHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX3JldmVyc2UgKHYpIDsK CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfbG9u Z19kb3VibGUgeCxyIDsKICAgICAgKCh4KS5kYXRbMF0pID0gKGxvbmcgZG91YmxlKSgxMDI3IC0g aSAtIDEpIDsKICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91YmxlKSgxMDI3IC0gaSAtIDEg KyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZ2V0ICh2 LCBpKTsKCiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4KS5kYXRbMF0pICYmICgo cikuZGF0WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdz bF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVs ZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2Zy ZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9sb25nX2RvdWJsZV9iaW5hcnkgKHZvaWQpCnsK ICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUgKiB2ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4 X2xvbmdfZG91YmxlX2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91 YmxlICogdyA9IGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZV9jYWxsb2MgKDEwMjcpOwoK ICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsK CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX2NvbXBs ZXhfbG9uZ19kb3VibGUgeCA9IHt7MC4wTCwwLjBMfX07CiAgICAgICAgKCh4KS5kYXRbMF0pID0g KGxvbmcgZG91YmxlKSgxMDI3IC0gaSk7CiAgICAgICAgKCh4KS5kYXRbMV0pID0gKGxvbmcgZG91 YmxlKSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs ZV9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv dWJsZV9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25n X2RvdWJsZV9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkg PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsyICogaV0gIT0gKGxvbmcg ZG91YmxlKSAoMTAyNyAtIGkpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAobG9uZyBkb3VibGUp ICgxMDI3IC0gaSArIDEpKQogICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9z ZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAodik7CiAg Z3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2ZyZWUgKHcpOwoKICBnc2xfdGVzdCAoc3Rh dHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3dyaXRlIGFuZCByZWFkIHdv cmsgY29ycmVjdGx5Iik7Cgp9CgoKdm9pZAp0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdHJhcCAo dm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHZjID0gZ3NsX3ZlY3Rv cl9jb21wbGV4X2xvbmdfZG91YmxlX2FsbG9jICgxMDI3KTsKCiAgZ3NsX2NvbXBsZXhfbG9uZ19k b3VibGUgeiA9IHt7KGxvbmcgZG91YmxlKTEuMiwgKGxvbmcgZG91YmxlKTMuNH19OwogIGdzbF9j b21wbGV4X2xvbmdfZG91YmxlIHoxID0ge3sobG9uZyBkb3VibGUpNC41LCAobG9uZyBkb3VibGUp Ni43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2NvbXBs ZXhfbG9uZ19kb3VibGVfc2V0ICh2YywgaiAtIDEsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLAog ICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBp bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfY29t cGxleF9sb25nX2RvdWJsZV9zZXQgKHZjLCAxMDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3QgKCFzdGF0 dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGUiICJfc2V0IHRy YXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv cl9jb21wbGV4X2xvbmdfZG91YmxlX3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0ICghc3Rh dHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBh dCB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4 X2xvbmdfZG91YmxlX2dldCAodmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAg ICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9nZXQgdHJhcHMgaW5kZXgg YmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgZ3NsX3Rlc3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAg ICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6 ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAh PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlIiAiX2dldCBy ZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHox ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2dldCAodmMsIDEwMjcgKyAxKTsKICBn c2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv dWJsZSIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAo KCh6MSkuZGF0WzBdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdf ZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdz bF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBs ZXhfbG9uZ19kb3VibGUiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3ZlIHVwcGVyIGJvdW5k Iik7CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVf Z2V0ICh2YywgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhf bG9uZ19kb3VibGUiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rl c3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBn c2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21w bGV4X2xvbmdfZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gaW1hZyBhdCB1cHBlciBib3VuZCIp OwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfZnJlZSAodmMpOwp9CiMgNDUgInRl c3QuYyIgMgoKIyAxICJ0ZXN0X2NvbXBsZXhfaW8uYyIgMQojIDIwICJ0ZXN0X2NvbXBsZXhfaW8u YyIKdm9pZCB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfdGV4dCAodm9pZCk7CgoKdm9pZAp0ZXN0 X2NvbXBsZXhfbG9uZ19kb3VibGVfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9s b25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKDEw MjcpOwogIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSAqIHcgPSBnc2xfdmVjdG9yX2Nv bXBsZXhfbG9uZ19kb3VibGVfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklM RSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfY29tcGxleF9sb25nX2RvdWJsZSB4OwogICAgICAg ICgoeCkuZGF0WzBdKSA9IChsb25nIGRvdWJsZSlpOwogICAgICAgICgoeCkuZGF0WzFdKSA9IChs b25nIGRvdWJsZSkoaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJs ZV9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9sb25nX2Rv dWJsZV9mcHJpbnRmIChmLCB2LCAiJUxnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAg IEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2NvbXBs ZXhfbG9uZ19kb3VibGVfZnNjYW5mIChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChp ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5kYXRhWzIgKiBpXSAh PSAobG9uZyBkb3VibGUpIGkgfHwgdy0+ZGF0YVsyICogaSArIDFdICE9IChsb25nIGRvdWJsZSkg KGkgKyAxKSkKICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgIH07CiAgICBmY2xvc2UgKGYpOwog IH0KCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2xvbmdfZG91YmxlX2ZyZWUgKHYpOwogIGdzbF92ZWN0 b3JfY29tcGxleF9sb25nX2RvdWJsZV9mcmVlICh3KTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdz bF92ZWN0b3JfY29tcGxleF9sb25nX2RvdWJsZSIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBj b3JyZWN0bHkiKTsKfQojIDQ3ICJ0ZXN0LmMiIDIKCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMg NDkgInRlc3QuYyIgMgoKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDU0ICJ0ZXN0LmMiIDIK IyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEKIyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5j Igp2b2lkIHRlc3RfY29tcGxleF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfYmluYXJ5 ICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfdHJhcCAodm9pZCk7Cgp2b2lkCnRlc3RfY29tcGxl eF9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdzbF92ZWN0b3JfY29tcGxleCAqIHYgPSBn c2xfdmVjdG9yX2NvbXBsZXhfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0g MCwgImdzbF92ZWN0b3JfY29tcGxleCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsK ICBnc2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2FsbG9j IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92 ZWN0b3JfY29tcGxleCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9 IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHggPSB7ezAuMCwwLjB9 fTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGRvdWJsZSlpOwogICAgICAoKHgpLmRhdFsxXSkgPSAo ZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHYsIGksIHgp OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg IHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChkb3VibGUpIGkgfHwgdi0+ZGF0YVsyICog aSArIDFdICE9IChkb3VibGUpIChpICsgMTIzNCkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07 CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXgiICJfc2V0IHdyaXRlcyBp bnRvIGFycmF5IGNvcnJlY3RseSIpOwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwg MTAyNzsgaSsrKQogICAgewogICAgICBnc2xfY29tcGxleCB4LCB5OwogICAgICAoKHgpLmRhdFsw XSkgPSAoZG91YmxlKWk7CiAgICAgICgoeCkuZGF0WzFdKSA9IChkb3VibGUpKGkgKyAxMjM0KTsK ICAgICAgeSA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgp LmRhdFswXSA9PSAoeSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAg ICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf Y29tcGxleCIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKICB2LT5zdHJp ZGUgPSAyIDsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp CiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHgsIHk7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3Vi bGUpKDIgKiBpKTsKICAgICAgKCh4KS5kYXRbMV0pID0gKGRvdWJsZSkoMiAqIGkgKyAxMjM0KTsK ICAgICAgeSA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgp LmRhdFswXSA9PSAoeSkuZGF0WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAg ICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf Y29tcGxleCIgIl9nZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4 IHg7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3VibGUpaSA7CiAgICAgICgoeCkuZGF0WzFdKSA9 IChkb3VibGUpKGkgKyAxMjM0KTsKICAgICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAodiwgaSwg eCk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkr KykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIDIgKiBpXSAhPSAoZG91YmxlKSBpIHx8IHYt PmRhdGFbMiAqIDIgKiBpICsgMV0gIT0gKGRvdWJsZSkgKGkgKyAxMjM0KSkKICAgICAgICBzdGF0 dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleCIg Il9zZXQgd3JpdGVzIGludG8gYXJyYXkgY29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+ c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdz bF9jb21wbGV4IHggPSB7ezAuMCwwLjB9fTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGRvdWJsZSlp OwogICAgICAoKHgpLmRhdFsxXSkgPSAoZG91YmxlKShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0 b3JfY29tcGxleF9zZXQgKHYsIGksIHgpOwogICAgfTsKCgogIHsKICAgIGdzbF9jb21wbGV4IHgs IHksIHIsIHMgOwogICAgKCh4KS5kYXRbMF0pID0gMiA7CiAgICAoKHgpLmRhdFsxXSkgPSAyICsg MTIzNDsKICAgICgoeSkuZGF0WzBdKSA9IDUgOwogICAgKCh5KS5kYXRbMV0pID0gNSArIDEyMzQ7 CgogICAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgICBy ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCh2LDIpOwogICAgcyA9IGdzbF92ZWN0b3JfY29tcGxl eF9nZXQodiw1KTsKCiAgICBzdGF0dXMgPSAhICgoKHIpLmRhdFswXSA9PSAoeSkuZGF0WzBdKSAm JiAoKHIpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0 WzBdID09ICh4KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh4KS5kYXRbMV0pKSA7CgogICAg Z3NsX3ZlY3Rvcl9jb21wbGV4X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgICByID0gZ3Ns X3ZlY3Rvcl9jb21wbGV4X2dldCh2LDIpOwogICAgcyA9IGdzbF92ZWN0b3JfY29tcGxleF9nZXQo diw1KTsKCiAgICBzdGF0dXMgfD0gISAoKChyKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkgJiYgKChy KS5kYXRbMV0gPT0gKHgpLmRhdFsxXSkpIDsKICAgIHN0YXR1cyB8PSAhICgoKHMpLmRhdFswXSA9 PSAoeSkuZGF0WzBdKSAmJiAoKHMpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkgOwogIH0KCiAgZ3Ns X3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleCIgIl9zd2FwX2VsZW1lbnRzIiAiIiAi IGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdzbF92 ZWN0b3JfY29tcGxleF9yZXZlcnNlICh2KSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp CiAgICB7CiAgICAgIGdzbF9jb21wbGV4IHgsciA7CiAgICAgICgoeCkuZGF0WzBdKSA9IChkb3Vi bGUpKDEwMjcgLSBpIC0gMSkgOwogICAgICAoKHgpLmRhdFsxXSkgPSAoZG91YmxlKSgxMDI3IC0g aSAtIDEgKyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZ2V0ICh2LCBpKTsK CiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4KS5kYXRbMF0pICYmICgocikuZGF0 WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0 b3JfY29tcGxleCIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIp IDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9i aW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NvbXBsZXggKiB2ID0gZ3NsX3ZlY3Rvcl9jb21w bGV4X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdyA9IGdzbF92ZWN0b3Jf Y29tcGxleF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZv cGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog ICAgICB7CiAgICAgICAgZ3NsX2NvbXBsZXggeCA9IHt7MC4wLDAuMH19OwogICAgICAgICgoeCku ZGF0WzBdKSA9IChkb3VibGUpKDEwMjcgLSBpKTsKICAgICAgICAoKHgpLmRhdFsxXSkgPSAoZG91 YmxlKSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHYsIGks IHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9md3JpdGUgKGYsIHYpOwoKICAg IGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJy YiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0g MDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ ZGF0YVsyICogaV0gIT0gKGRvdWJsZSkgKDEwMjcgLSBpKSB8fCB3LT5kYXRhWzIgKiBpICsgMV0g IT0gKGRvdWJsZSkgKDEwMjcgLSBpICsgMSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9 OwogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfY29tcGxleF9mcmVlICh2KTsKICBn c2xfdmVjdG9yX2NvbXBsZXhfZnJlZSAodyk7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yX2NvbXBsZXgiICJfd3JpdGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCn0KCgp2b2lk CnRlc3RfY29tcGxleF90cmFwICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdmMgPSBn c2xfdmVjdG9yX2NvbXBsZXhfYWxsb2MgKDEwMjcpOwoKICBnc2xfY29tcGxleCB6ID0ge3soZG91 YmxlKTEuMiwgKGRvdWJsZSkzLjR9fTsKICBnc2xfY29tcGxleCB6MSA9IHt7KGRvdWJsZSk0LjUs IChkb3VibGUpNi43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVj dG9yX2NvbXBsZXhfc2V0ICh2YywgaiAtIDEsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLAogICAg ICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dl ciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfY29tcGxleF9zZXQgKHZjLCAx MDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9y X2NvbXBsZXgiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1 cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0 ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBl ciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAo dmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf Y29tcGxleCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgZ3NsX3Rl c3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIg Il9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAo KCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dl dCByZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwog IHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2dldCAodmMsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAo IXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIgIl9nZXQgdHJhcHMgaW5k ZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzBdKSAhPSAwLAog ICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBh Ym92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAg ICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXgiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3Zl IHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhf Z2V0ICh2YywgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXgi ICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKCgoejEpLmRh dFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleCIgIl9nZXQgcmV0dXJu cyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAh PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2dldCByZXR1cm5zIHplcm8g aW1hZyBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfZnJlZSAodmMpOwp9 CiMgNTUgInRlc3QuYyIgMgojIDEgInRlc3RfY29tcGxleF9pby5jIiAxCiMgMjAgInRlc3RfY29t cGxleF9pby5jIgp2b2lkIHRlc3RfY29tcGxleF90ZXh0ICh2b2lkKTsKCgp2b2lkCnRlc3RfY29t cGxleF90ZXh0ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdiA9IGdzbF92ZWN0b3Jf Y29tcGxleF9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4ICogdyA9IGdzbF92ZWN0 b3JfY29tcGxleF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0g Zm9wZW4gKCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgICAgewogICAgICAgIGdzbF9jb21wbGV4IHg7CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGRv dWJsZSlpOwogICAgICAgICgoeCkuZGF0WzFdKSA9IChkb3VibGUpKGkgKyAxKTsKICAgICAgICBn c2xfdmVjdG9yX2NvbXBsZXhfc2V0ICh2LCBpLCB4KTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9y X2NvbXBsZXhfZnByaW50ZiAoZiwgdiwgIiVnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsK ICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2Nv bXBsZXhfZnNjYW5mIChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5kYXRhWzIgKiBpXSAhPSAoZG91Ymxl KSBpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZG91YmxlKSAoaSArIDEpKQogICAgICAgICAg c3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2Nv bXBsZXhfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2ZyZWUgKHcpOwoKICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3Jr IGNvcnJlY3RseSIpOwp9CiMgNTYgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQoj IDU3ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDYxICJ0ZXN0LmMiIDIK IyAxICJ0ZXN0X2NvbXBsZXhfc291cmNlLmMiIDEKIyAyMCAidGVzdF9jb21wbGV4X3NvdXJjZS5j Igp2b2lkIHRlc3RfY29tcGxleF9mbG9hdF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhf ZmxvYXRfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X2NvbXBsZXhfZmxvYXRfdHJhcCAodm9pZCk7 Cgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF9mdW5jICh2b2lkKQp7CiAgc2l6ZV90IGk7CgogIGdz bF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHYgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfY2Fs bG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3JfY29tcGxl eF9mbG9hdCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIiKTsKICBnc2xfdGVzdCAodi0+ c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2FsbG9jIHJldHVybnMg dmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfY29t cGxleF9mbG9hdCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7 IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHggPSB7ezAuMEYs MC4wRn19OwogICAgICAoKHgpLmRhdFswXSkgPSAoZmxvYXQpaTsKICAgICAgKCh4KS5kYXRbMV0p ID0gKGZsb2F0KShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQg KHYsIGksIHgpOwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7 IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChmbG9hdCkgaSB8fCB2LT5k YXRhWzIgKiBpICsgMV0gIT0gKGZsb2F0KSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9IDE7 CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAi X3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCiAgc3RhdHVzID0gMDsKCiAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCwg eTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KWk7CiAgICAgICgoeCkuZGF0WzFdKSA9IChm bG9hdCkoaSArIDEyMzQpOwogICAgICB5ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAo diwgaSk7CiAgICAgIGlmICghKCgoeCkuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgoeCkuZGF0 WzFdID09ICh5KS5kYXRbMV0pKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2dldCByZWFkcyBmcm9tIGFy cmF5IGNvcnJlY3RseSIpOwoKCgogIHYtPnN0cmlkZSA9IDIgOwoKICBzdGF0dXMgPSAwOwoKICBm b3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxv YXQgeCwgeTsKICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KSgyICogaSk7CiAgICAgICgoeCku ZGF0WzFdKSA9IChmbG9hdCkoMiAqIGkgKyAxMjM0KTsKICAgICAgeSA9IGdzbF92ZWN0b3JfY29t cGxleF9mbG9hdF9nZXQgKHYsIGkpOwogICAgICBpZiAoISgoKHgpLmRhdFswXSA9PSAoeSkuZGF0 WzBdKSAmJiAoKHgpLmRhdFsxXSA9PSAoeSkuZGF0WzFdKSkpCiAgICAgICAgc3RhdHVzID0gMTsK ICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9n ZXQgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0g MDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHg7CiAg ICAgICgoeCkuZGF0WzBdKSA9IChmbG9hdClpIDsKICAgICAgKCh4KS5kYXRbMV0pID0gKGZsb2F0 KShpICsgMTIzNCk7CiAgICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQgKHYsIGksIHgp OwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp CiAgICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiAyICogaV0gIT0gKGZsb2F0KSBpIHx8IHYtPmRh dGFbMiAqIDIgKiBpICsgMV0gIT0gKGZsb2F0KSAoaSArIDEyMzQpKQogICAgICAgIHN0YXR1cyA9 IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 IiAiX3NldCB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2 LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAg Z3NsX2NvbXBsZXhfZmxvYXQgeCA9IHt7MC4wRiwwLjBGfX07CiAgICAgICgoeCkuZGF0WzBdKSA9 IChmbG9hdClpOwogICAgICAoKHgpLmRhdFsxXSkgPSAoZmxvYXQpKGkgKyAxMjM0KTsKICAgICAg Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldCAodiwgaSwgeCk7CiAgICB9OwoKCiAgewogICAg Z3NsX2NvbXBsZXhfZmxvYXQgeCwgeSwgciwgcyA7CiAgICAoKHgpLmRhdFswXSkgPSAyIDsKICAg ICgoeCkuZGF0WzFdKSA9IDIgKyAxMjM0OwogICAgKCh5KS5kYXRbMF0pID0gNSA7CiAgICAoKHkp LmRhdFsxXSkgPSA1ICsgMTIzNDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfc3dhcF9l bGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0 KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCh2LDUpOwoKICAgIHN0 YXR1cyA9ICEgKCgocikuZGF0WzBdID09ICh5KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh5 KS5kYXRbMV0pKSA7CiAgICBzdGF0dXMgfD0gISAoKChzKS5kYXRbMF0gPT0gKHgpLmRhdFswXSkg JiYgKChzKS5kYXRbMV0gPT0gKHgpLmRhdFsxXSkpIDsKCiAgICBnc2xfdmVjdG9yX2NvbXBsZXhf ZmxvYXRfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBs ZXhfZmxvYXRfZ2V0KHYsMik7CiAgICBzID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCh2 LDUpOwoKICAgIHN0YXR1cyB8PSAhICgoKHIpLmRhdFswXSA9PSAoeCkuZGF0WzBdKSAmJiAoKHIp LmRhdFsxXSA9PSAoeCkuZGF0WzFdKSkgOwogICAgc3RhdHVzIHw9ICEgKCgocykuZGF0WzBdID09 ICh5KS5kYXRbMF0pICYmICgocykuZGF0WzFdID09ICh5KS5kYXRbMV0pKSA7CiAgfQoKICBnc2xf dGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX3N3YXBfZWxlbWVudHMi ICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAg Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3JldmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCxyIDsKICAgICAgKCh4 KS5kYXRbMF0pID0gKGZsb2F0KSgxMDI3IC0gaSAtIDEpIDsKICAgICAgKCh4KS5kYXRbMV0pID0g KGZsb2F0KSgxMDI3IC0gaSAtIDEgKyAxMjM0KTsKCiAgICAgIHIgPSBnc2xfdmVjdG9yX2NvbXBs ZXhfZmxvYXRfZ2V0ICh2LCBpKTsKCiAgICAgIHN0YXR1cyB8PSAhKCgocikuZGF0WzBdID09ICh4 KS5kYXRbMF0pICYmICgocikuZGF0WzFdID09ICh4KS5kYXRbMV0pKTsKICAgIH0KCiAgZ3NsX3Rl c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9yZXZlcnNlIiAiIiAiIHJl dmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 X2ZyZWUgKHYpOwp9Cgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF9iaW5hcnkgKHZvaWQpCnsKICBn c2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQgKiB2ID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2Nh bGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdyA9IGdzbF92ZWN0b3Jf Y29tcGxleF9mbG9hdF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAq ZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg aSsrKQogICAgICB7CiAgICAgICAgZ3NsX2NvbXBsZXhfZmxvYXQgeCA9IHt7MC4wRiwwLjBGfX07 CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGZsb2F0KSgxMDI3IC0gaSk7CiAgICAgICAgKCh4KS5k YXRbMV0pID0gKGZsb2F0KSgxMDI3IC0gaSArIDEpOwogICAgICAgIGdzbF92ZWN0b3JfY29tcGxl eF9mbG9hdF9zZXQgKHYsIGksIHgpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9m bG9hdF9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfY29tcGxleF9mbG9h dF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsyICogaV0gIT0gKGZsb2F0KSAoMTAy NyAtIGkpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZmxvYXQpICgxMDI3IC0gaSArIDEpKQog ICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xf dmVjdG9yX2NvbXBsZXhfZmxvYXRfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 X2ZyZWUgKHcpOwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0 IiAiX3dyaXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7Cgp9CgoKdm9pZAp0ZXN0X2NvbXBs ZXhfZmxvYXRfdHJhcCAodm9pZCkKewogIGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCAqIHZjID0g Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2FsbG9jICgxMDI3KTsKCiAgZ3NsX2NvbXBsZXhfZmxv YXQgeiA9IHt7KGZsb2F0KTEuMiwgKGZsb2F0KTMuNH19OwogIGdzbF9jb21wbGV4X2Zsb2F0IHox ID0ge3soZmxvYXQpNC41LCAoZmxvYXQpNi43fX07CgogIHNpemVfdCBqID0gMDsKCiAgc3RhdHVz ID0gMDsKICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfc2V0ICh2YywgaiAtIDEsIHopOwogIGdz bF90ZXN0ICghc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAi X3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdz bF92ZWN0b3JfY29tcGxleF9mbG9hdF9zZXQgKHZjLCAxMDI3ICsgMSwgeik7CiAgZ3NsX3Rlc3Qg KCFzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQiICJfc2V0IHRy YXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv cl9jb21wbGV4X2Zsb2F0X3NldCAodmMsIDEwMjcsIHopOwogIGdzbF90ZXN0ICghc3RhdHVzLCAi Z3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3Vu ZCIpOwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAo dmMsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf Y29tcGxleF9mbG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAg Z3NsX3Rlc3QgKCgoejEpLmRhdFswXSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29t cGxleF9mbG9hdCIgIl9nZXQgcmV0dXJucyB6ZXJvIHJlYWwgYmVsb3cgbG93ZXIgYm91bmQiKTsK ICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9j b21wbGV4X2Zsb2F0IiAiX2dldCByZXR1cm5zIHplcm8gaW1hZyBiZWxvdyBsb3dlciBib3VuZCIp OwoKICBzdGF0dXMgPSAwOwogIHoxID0gZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2dldCAodmMs IDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jf Y29tcGxleF9mbG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKICBn c2xfdGVzdCAoKCh6MSkuZGF0WzBdKSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21w bGV4X2Zsb2F0IiAiX2dldCByZXR1cm5zIHplcm8gcmVhbCBhYm92ZSB1cHBlciBib3VuZCIpOwog IGdzbF90ZXN0ICgoKHoxKS5kYXRbMV0pICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2Nv bXBsZXhfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBpbWFnIGFib3ZlIHVwcGVyIGJvdW5kIik7 CgogIHN0YXR1cyA9IDA7CiAgejEgPSBnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXRfZ2V0ICh2Yywg MTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhfZmxvYXQiICJf Z2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKCgoejEpLmRhdFsw XSkgIT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfY29tcGxleF9mbG9hdCIgIl9nZXQgcmV0 dXJucyB6ZXJvIHJlYWwgYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoKCh6MSkuZGF0WzFd KSAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0IiAiX2dldCByZXR1 cm5zIHplcm8gaW1hZyBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2NvbXBsZXhfZmxv YXRfZnJlZSAodmMpOwp9CiMgNjIgInRlc3QuYyIgMgojIDEgInRlc3RfY29tcGxleF9pby5jIiAx CiMgMjAgInRlc3RfY29tcGxleF9pby5jIgp2b2lkIHRlc3RfY29tcGxleF9mbG9hdF90ZXh0ICh2 b2lkKTsKCgp2b2lkCnRlc3RfY29tcGxleF9mbG9hdF90ZXh0ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rv cl9jb21wbGV4X2Zsb2F0ICogdiA9IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9hbGxvYyAoMTAy Nyk7CiAgZ3NsX3ZlY3Rvcl9jb21wbGV4X2Zsb2F0ICogdyA9IGdzbF92ZWN0b3JfY29tcGxleF9m bG9hdF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4g KCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg ewogICAgICAgIGdzbF9jb21wbGV4X2Zsb2F0IHg7CiAgICAgICAgKCh4KS5kYXRbMF0pID0gKGZs b2F0KWk7CiAgICAgICAgKCh4KS5kYXRbMV0pID0gKGZsb2F0KShpICsgMSk7CiAgICAgICAgZ3Ns X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X3NldCAodiwgaSwgeCk7CiAgICAgIH07CgogICAgZ3NsX3Zl Y3Rvcl9jb21wbGV4X2Zsb2F0X2ZwcmludGYgKGYsIHYsICIlZyIpOwoKICAgIGZjbG9zZSAoZik7 CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7CgogICAgZ3Ns X3ZlY3Rvcl9jb21wbGV4X2Zsb2F0X2ZzY2FuZiAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAg IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVsy ICogaV0gIT0gKGZsb2F0KSBpIHx8IHctPmRhdGFbMiAqIGkgKyAxXSAhPSAoZmxvYXQpIChpICsg MSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwogICAgZmNsb3NlIChmKTsKICB9Cgog IGdzbF92ZWN0b3JfY29tcGxleF9mbG9hdF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2NvbXBsZXhf ZmxvYXRfZnJlZSAodyk7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NvbXBsZXhf ZmxvYXQiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7Cn0KIyA2MyAidGVz dC5jIiAyCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMgNjQgInRlc3QuYyIgMgoKCgojIDEgInRl bXBsYXRlc19vbi5oIiAxCiMgNjggInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAy MCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2xvbmdfZG91YmxlX2Z1bmMgKHZvaWQpOwp2b2lk IHRlc3RfbG9uZ19kb3VibGVfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X2xvbmdfZG91YmxlX3Ry YXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2xvbmdfZG91YmxlX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVj dG9yX2xvbmdfZG91YmxlICogdjsKICBzaXplX3QgaTsKCiAgdiA9IGdzbF92ZWN0b3JfbG9uZ19k b3VibGVfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0 b3JfbG9uZ19kb3VibGUiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rl c3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfYWxsb2MgcmV0 dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZSIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9 IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0 ICh2LCBpLCAobG9uZyBkb3VibGUpIGkpOwogICAgfQoKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChp ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbaV0gIT0gKGxvbmcg ZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVz LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zZXQiICIiICIgd3JpdGVz IGludG8gYXJyYXkgY29ycmVjdGx5Iik7CgoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkg PCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAo diwgaSkgIT0gKGxvbmcgZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdz bF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2dl dCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAy OwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewog ICAgICBpZiAoZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkpICE9IChsb25nIGRvdWJs ZSkgKDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz LCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQiICIiICIgcmVhZHMgY29ycmVjdGx5IHdp dGggc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAg ICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcgZG91YmxlKSAoaSArIDEw MDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsg aSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsyICogaV0gIT0gKGxvbmcgZG91YmxlKSAoaSAr IDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAi Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zZXQiICIiICIgd3JpdGVzIGNvcnJlY3RseSB3aXRo IHN0cmlkZSIpOwoKCgogIHYtPnN0cmlkZSA9IDEgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg aSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcg ZG91YmxlKSBpKTsKICAgIH0KCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zd2FwX2VsZW1lbnRz ICh2LCAyLCA1KSA7CgogIHN0YXR1cyA9IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LDIp ICE9IDUpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0KHYsNSkgIT0g MikgOwoKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsK CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LDIpICE9IDIpIDsKICBz dGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0KHYsNSkgIT0gNSkgOwoKICBnc2xf dGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9zd2FwX2VsZW1lbnRzIiAi IiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdz bF92ZWN0b3JfbG9uZ19kb3VibGVfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy NzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0 ICh2LCBpKSAhPSAobG9uZyBkb3VibGUpICgxMDI3IC0gaSAtIDEpKTsKICAgIH0KCiAgZ3NsX3Rl c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfcmV2ZXJzZSIgIiIgIiByZXZl cnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsKICAgIGxvbmcgZG91YmxlIGV4cF9tYXgg PSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LCAwKTsKICAgIGxvbmcgZG91YmxlIGV4cF9t aW4gPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1h eCA9IDAsIGV4cF9pbWluID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICB7CiAgICAgICAgbG9uZyBkb3VibGUgayA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0ICh2 LCBpKSA7CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3Ns X3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkpOwogICAgICAgICAgZXhwX2ltaW4gPSBpOwog ICAgICAgIH0KICAgICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsK ICAgICAgICBsb25nIGRvdWJsZSBrID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9nZXQgKHYsIGkp IDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVj dG9yX2xvbmdfZG91YmxlX2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAg ICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgbG9uZyBkb3VibGUgbWF4ID0gZ3NsX3ZlY3Rvcl9s b25nX2RvdWJsZV9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdz bF92ZWN0b3JfbG9uZ19kb3VibGUiICJfbWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVl Iik7CiAgICB9CgogICAgewogICAgICBsb25nIGRvdWJsZSBtaW4gPSBnc2xfdmVjdG9yX2xvbmdf ZG91YmxlX21pbiAodikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZSIgIl9taW4gcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsK ICAgIH0KCiAgICB7CiAgICAgIGxvbmcgZG91YmxlIG1pbiwgbWF4OwogICAgICBnc2xfdmVjdG9y X2xvbmdfZG91YmxlX21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xfdGVzdCAobWF4 ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbm1heCByZXR1cm5zIGNv cnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJn c2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2 YWx1ZSIpOwogICAgfQoKCiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rvcl9sb25n X2RvdWJsZV9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4 LCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1h eGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xfdmVjdG9yX2xv bmdfZG91YmxlX21pbl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2lt aW4sICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3Qg bWluaW11bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAg IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoK ICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX2xvbmdfZG91Ymxl IiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90 ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9taW5tYXhf aW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQogIH0KCgogIHsKICAgIGdz bF92ZWN0b3JfbG9uZ19kb3VibGUgKiBhID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9jYWxsb2Mg KDEwMjcpOwogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIGIgPSBnc2xfdmVjdG9yX2xvbmdf ZG91YmxlX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg ICAgewogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0IChhLCBpLCAobG9uZyBkb3Vi bGUpKDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9zZXQgKGIsIGksIChs b25nIGRvdWJsZSkoMyArIDIgKiBpKSk7CiAgICAgIH0KCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91 YmxlX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FkZCAodiwgYik7 CgogICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgICAgewogICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9u Z19kb3VibGVfZ2V0ICh2LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3Jf bG9uZ19kb3VibGVfZ2V0IChhLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0 b3JfbG9uZ19kb3VibGVfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggKyB5 OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9 CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2FkZCBh ZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX21lbWNw eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3N1YiAodiwgYik7CgogICAgewog ICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAg ICAgICAgewogICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVf Z2V0ICh2LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3JfbG9uZ19kb3Vi bGVfZ2V0IChhLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0b3JfbG9uZ19k b3VibGVfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggLSB5OwogICAgICAg ICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdz bF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3N1YiBzdWJ0cmFjdHMg Y29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9tZW1jcHkgKHYs IGEpOwogICAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9tdWwgKHYsIGIpOwoKICAgIHsKICAgICAg aW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAg IHsKICAgICAgICAgIGxvbmcgZG91YmxlIHIgPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAo dixpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dl dCAoYSxpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHkgPSBnc2xfdmVjdG9yX2xvbmdfZG91Ymxl X2dldCAoYixpKTsKICAgICAgICAgIGxvbmcgZG91YmxlIHogPSB4ICogeTsKICAgICAgICAgIGlm IChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9tdWwgbXVsdGlwbGllcyBjb3Jy ZWN0bHkiKTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX21lbWNweSAodiwgYSk7 CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2RpdiAodiwgYik7CgogICAgewogICAgICBpbnQg c3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewog ICAgICAgICAgbG9uZyBkb3VibGUgciA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0ICh2LGkp OwogICAgICAgICAgbG9uZyBkb3VibGUgeCA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0IChh LGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeSA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZ2V0 IChiLGkpOwogICAgICAgICAgbG9uZyBkb3VibGUgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZh YnMociAtIHopID4gMiAqIDEuMTkyMDkyODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAg ICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92 ZWN0b3JfbG9uZ19kb3VibGUiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAg IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZG91 YmxlX2ZyZWUgKGIpOwogIH0KCgoKCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlICh2KTsK fQoKCnZvaWQKdGVzdF9sb25nX2RvdWJsZV9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2xv bmdfZG91YmxlICogdiA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfY2FsbG9jICgxMDI3KTsKICBn c2xfdmVjdG9yX2xvbmdfZG91YmxlICogdyA9IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfY2FsbG9j ICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0 IiwgIndiIik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg IGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfc2V0ICh2LCBpLCAobG9uZyBkb3VibGUpICgxMDI3IC0g aSkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZndyaXRlIChmLCB2KTsK CiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQi LCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZyZWFkIChmLCB3KTsKCiAgICBz dGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg IGlmICh3LT5kYXRhW2ldICE9IChsb25nIGRvdWJsZSkgKDEwMjcgLSBpKSkKICAgICAgICAgIHN0 YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9u Z19kb3VibGUiICJfd3JpdGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2Ug KGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZV9mcmVlICh2KTsKICBnc2xfdmVjdG9y X2xvbmdfZG91YmxlX2ZyZWUgKHcpOwp9Cgp2b2lkCnRlc3RfbG9uZ19kb3VibGVfdHJhcCAodm9p ZCkKewogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGUgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2RvdWJs ZV9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBqID0gMDsKICBkb3VibGUgeDsKCiAgc3RhdHVzID0g MDsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaiAtIDEsIChsb25nIGRvdWJsZSkw KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfbG9uZ19kb3VibGUiICJfc2V0IHRy YXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rv cl9sb25nX2RvdWJsZV9zZXQgKHYsIDEwMjcgKyAxLCAobG9uZyBkb3VibGUpMCk7CiAgZ3NsX3Rl c3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBh Ym92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfbG9uZ19kb3Vi bGVfc2V0ICh2LCAxMDI3LCAobG9uZyBkb3VibGUpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn c2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX3NldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3VuZCIp OwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAodiwgaiAt IDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQg dHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAg ICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRl eCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9yX2xv bmdfZG91YmxlX2dldCAodiwgMTAyNyArIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZSIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsK ICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSIgIl9n ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMg PSAwOwogIHggPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2dldCAodiwgMTAyNyk7CiAgZ3NsX3Rl c3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmdfZG91YmxlIiAiX2dldCB0cmFwcyBpbmRleCBh dCB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVj dG9yX2xvbmdfZG91YmxlIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGF0IHVwcGVyIGJv dW5kIik7CgogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAodik7Cn0KIyA2OSAidGVzdC5j IiAyCgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQgdGVzdF9sb25nX2Rv dWJsZV90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX2RvdWJsZV90ZXh0ICh2b2lkKQp7CiAg Z3NsX3ZlY3Rvcl9sb25nX2RvdWJsZSAqIHYgPSBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2FsbG9j ICgxMDI3KTsKICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlICogdyA9IGdzbF92ZWN0b3JfbG9uZ19k b3VibGVfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVu ICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAg IHsKICAgICAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX3NldCAodiwgaSwgKGxvbmcgZG91Ymxl KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZG91YmxlX2ZwcmludGYgKGYsIHYs ICIlTGciKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgi dGVzdC50eHQiLCAiciIpOwoKICAgIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnNjYW5mIChmLCB3 KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg ewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChsb25nIGRvdWJsZSkgaSkKICAgICAgICAgIHN0 YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9u Z19kb3VibGUiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNs b3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfbG9uZ19kb3VibGVfZnJlZSAodik7CiAgZ3NsX3Zl Y3Rvcl9sb25nX2RvdWJsZV9mcmVlICh3KTsKfQojIDcxICJ0ZXN0LmMiIDIKCiMgMSAidGVtcGxh dGVzX29mZi5oIiAxCiMgNzMgInRlc3QuYyIgMgoKCgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMg NzcgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVzdF9zb3VyY2UuYyIK dm9pZCB0ZXN0X2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfYmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0 X3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yICogdjsK ICBzaXplX3QgaTsKCiAgdiA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3Qg KHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3IiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVy Iik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3IiICJfYWxsb2MgcmV0 dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3ZlY3Rv ciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3Jfc2V0ICh2LCBpLCAoZG91YmxlKSBpKTsKICAg IH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAg ICAgIGlmICh2LT5kYXRhW2ldICE9IChkb3VibGUpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg IH07CgogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yIiAiX3NldCIg IiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0YXR1cyA9IDA7CiAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfZ2V0ICh2 LCBpKSAhPSAoZG91YmxlKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0 IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yIiAiX2dldCIgIiIgIiByZWFkcyBmcm9t IGFycmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwog IGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rv cl9nZXQgKHYsIGkpICE9IChkb3VibGUpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg IH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfZ2V0IiAiIiAiIHJlYWRzIGNv cnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK ICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zZXQgKHYsIGksIChkb3VibGUpIChpICsgMTAwMCkpOwog ICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg ICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAoZG91YmxlKSAoaSArIDEwMDApKQogICAg ICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIg Il9zZXQiICIiICIgd3JpdGVzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKCgogIHYtPnN0cmlk ZSA9IDEgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVj dG9yX3NldCAodiwgaSwgKGRvdWJsZSkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3Jfc3dhcF9lbGVt ZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9nZXQodiwyKSAhPSA1KSA7 CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9z d2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9nZXQodiwy KSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2dldCh2LDUpICE9IDUpIDsKCiAgZ3Ns X3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfc3dhcF9lbGVtZW50cyIgIiIgIiBleGNoYW5n ZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xfdmVjdG9yX3Jl dmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3Rh dHVzIHw9IChnc2xfdmVjdG9yX2dldCAodiwgaSkgIT0gKGRvdWJsZSkgKDEwMjcgLSBpIC0gMSkp OwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl9yZXZlcnNlIiAiIiAi IHJldmVyc2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgewogICAgZG91YmxlIGV4cF9tYXgg PSBnc2xfdmVjdG9yX2dldCh2LCAwKTsKICAgIGRvdWJsZSBleHBfbWluID0gZ3NsX3ZlY3Rvcl9n ZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9IDA7CgogICAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGRvdWJsZSBrID0gZ3NsX3Zl Y3Rvcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4cF9taW4pIHsKICAgICAgICAgIGV4 cF9taW4gPSBnc2xfdmVjdG9yX2dldCAodiwgaSk7CiAgICAgICAgICBleHBfaW1pbiA9IGk7CiAg ICAgICAgfQogICAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewog ICAgICAgIGRvdWJsZSBrID0gZ3NsX3ZlY3Rvcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+ IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX2dldCAodiwgaSkgOwog ICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgZG91 YmxlIG1heCA9IGdzbF92ZWN0b3JfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4 cF9tYXgsICJnc2xfdmVjdG9yIiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIp OwogICAgfQoKICAgIHsKICAgICAgZG91YmxlIG1pbiA9IGdzbF92ZWN0b3JfbWluICh2KSA7Cgog ICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yIiAiX21pbiByZXR1cm5z IGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAgZG91YmxlIG1pbiwg bWF4OwogICAgICBnc2xfdmVjdG9yX21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xf dGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yIiAiX21pbm1heCByZXR1cm5zIGNvcnJl Y3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xf dmVjdG9yIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoK CiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rvcl9tYXhfaW5kZXggKHYpIDsKCiAg ICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3RvciIgIl9tYXhfaW5kZXgg cmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGlt aW4gPSBnc2xfdmVjdG9yX21pbl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0g ZXhwX2ltaW4sICJnc2xfdmVjdG9yIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11 bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92 ZWN0b3JfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rlc3QgKGlt YXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yIiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJl Y3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl Y3RvciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQog IH0KCgogIHsKICAgIGdzbF92ZWN0b3IgKiBhID0gZ3NsX3ZlY3Rvcl9jYWxsb2MgKDEwMjcpOwog ICAgZ3NsX3ZlY3RvciAqIGIgPSBnc2xfdmVjdG9yX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChp ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3Jfc2V0IChhLCBp LCAoZG91YmxlKSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3Jfc2V0IChiLCBpLCAoZG91Ymxl KSgzICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAg IGdzbF92ZWN0b3JfYWRkICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAg ICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUg ciA9IGdzbF92ZWN0b3JfZ2V0ICh2LGkpOwogICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9y X2dldCAoYSxpKTsKICAgICAgICAgIGRvdWJsZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAg ICAgICAgICBkb3VibGUgeiA9IHggKyB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAg ICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yIiAiX2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX21lbWNw eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3N1YiAodiwgYik7CgogICAgewogICAgICBpbnQgc3Rh dHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAg ICAgICAgZG91YmxlIHIgPSBnc2xfdmVjdG9yX2dldCAodixpKTsKICAgICAgICAgIGRvdWJsZSB4 ID0gZ3NsX3ZlY3Rvcl9nZXQgKGEsaSk7CiAgICAgICAgICBkb3VibGUgeSA9IGdzbF92ZWN0b3Jf Z2V0IChiLGkpOwogICAgICAgICAgZG91YmxlIHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9 IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3Rh dHVzLCAiZ3NsX3ZlY3RvciIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAgfQoKICAg IGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfbXVsICh2LCBiKTsKCiAg ICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkr KykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUgciA9IGdzbF92ZWN0b3JfZ2V0ICh2LGkpOwog ICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9yX2dldCAoYSxpKTsKICAgICAgICAgIGRvdWJs ZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAgICAgICAgICBkb3VibGUgeiA9IHggKiB5Owog ICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAg ICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yIiAiX211bCBtdWx0aXBsaWVzIGNvcnJl Y3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0 b3JfZGl2ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChp ID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBkb3VibGUgciA9IGdzbF92 ZWN0b3JfZ2V0ICh2LGkpOwogICAgICAgICAgZG91YmxlIHggPSBnc2xfdmVjdG9yX2dldCAoYSxp KTsKICAgICAgICAgIGRvdWJsZSB5ID0gZ3NsX3ZlY3Rvcl9nZXQgKGIsaSk7CiAgICAgICAgICBk b3VibGUgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZhYnMociAtIHopID4gMiAqIDEuMTkyMDky ODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAg IH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3IiICJfZGl2IGRpdmlkZXMgY29y cmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9y X2ZyZWUgKGIpOwogIH0KCgoKCiAgZ3NsX3ZlY3Rvcl9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF9i aW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yICogdiA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3 KTsKICBnc2xfdmVjdG9yICogdyA9IGdzbF92ZWN0b3JfY2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90 IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0IiwgIndiIik7CgogICAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3Jfc2V0ICh2 LCBpLCAoZG91YmxlKSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Z3cml0 ZSAoZiwgdik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAo InRlc3QuZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9mcmVhZCAoZiwgdyk7CgogICAgc3Rh dHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBp ZiAody0+ZGF0YVtpXSAhPSAoZG91YmxlKSAoMTAyNyAtIGkpKQogICAgICAgICAgc3RhdHVzID0g MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl93cml0ZSBh bmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVj dG9yX2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfZnJlZSAodyk7Cn0KCnZvaWQKdGVzdF90cmFwICh2 b2lkKQp7CiAgZ3NsX3ZlY3RvciAqIHYgPSBnc2xfdmVjdG9yX2FsbG9jICgxMDI3KTsKCiAgc2l6 ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3Jfc2V0ICh2 LCBqIC0gMSwgKGRvdWJsZSkwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3IiICJf c2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3Ns X3ZlY3Rvcl9zZXQgKHYsIDEwMjcgKyAxLCAoZG91YmxlKTApOwogIGdzbF90ZXN0ICghc3RhdHVz LCAiZ3NsX3ZlY3RvciIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg c3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX3NldCAodiwgMTAyNywgKGRvdWJsZSkwKTsKICBnc2xf dGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3IiICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJv dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfZ2V0ICh2LCBqIC0gMSk7CiAg Z3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yIiAiX2dldCB0cmFwcyBpbmRleCBiZWxvdyBs b3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yIiAi X2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1 cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFz dGF0dXMsICJnc2xfdmVjdG9yIiAiX2dldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIp OwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yIiAiX2dldCByZXR1cm5z IHplcm8gZm9yIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9 IGdzbF92ZWN0b3JfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0 b3IiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0g MCwKICAgICAgICAgICAgImdzbF92ZWN0b3IiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXgg YXQgdXBwZXIgYm91bmQiKTsKCiAgZ3NsX3ZlY3Rvcl9mcmVlICh2KTsKfQojIDc4ICJ0ZXN0LmMi IDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdGV4dCAodm9p ZCk7Cgp2b2lkCnRlc3RfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3IgKiB2ID0gZ3NsX3ZlY3Rv cl9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3RvciAqIHcgPSBnc2xfdmVjdG9yX2FsbG9jICgxMDI3 KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInci KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3Zl Y3Rvcl9zZXQgKHYsIGksIChkb3VibGUpIGkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfZnBy aW50ZiAoZiwgdiwgIiVnIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYg PSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2ZzY2FuZiAoZiwgdyk7 CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsK ICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAoZG91YmxlKSBpKQogICAgICAgICAgc3RhdHVzID0g MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3RvciIgIl9mcHJpbnRm IGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgZ3Ns X3ZlY3Rvcl9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ZyZWUgKHcpOwp9CiMgNzkgInRlc3QuYyIg MgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDgwICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0 ZXNfb24uaCIgMQojIDg0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRl c3Rfc291cmNlLmMiCnZvaWQgdGVzdF9mbG9hdF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2Zsb2F0 X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9mbG9hdF90cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9m bG9hdF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHY7CiAgc2l6ZV90IGk7Cgog IHYgPSBnc2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRh ID09IDAsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgcG9pbnRlciIp OwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2FsbG9j IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92 ZWN0b3JfZmxvYXQiICJfYWxsb2MgcmV0dXJucyB1bml0IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgaSwg KGZsb2F0KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9IChmbG9hdCkgaSkKICAgICAgICBz dGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAgICAgICAgICAgImdzbF92 ZWN0b3JfZmxvYXQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3RseSIpOwoK CiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBp ZiAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsIGkpICE9IChmbG9hdCkgaSkKICAgICAgICBzdGF0 dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rv cl9mbG9hdCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAg di0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7 IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfZmxvYXRfZ2V0ICh2LCBpKSAhPSAoZmxv YXQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1 cywgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IiAiIiAiIHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0 cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3Ns X3ZlY3Rvcl9mbG9hdF9zZXQgKHYsIGksIChmbG9hdCkgKGkgKyAxMDAwKSk7CiAgICB9OwoKICBz dGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAg aWYgKHYtPmRhdGFbMiAqIGldICE9IChmbG9hdCkgKGkgKyAxMDAwKSkKICAgICAgICBzdGF0dXMg PSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJfc2V0 IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAx IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9m bG9hdF9zZXQgKHYsIGksIChmbG9hdCkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3JfZmxvYXRfc3dh cF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQo diwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2Zsb2F0X2dldCh2LDUpICE9IDIp IDsKCiAgZ3NsX3ZlY3Rvcl9mbG9hdF9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1 cyB8PSAoZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xf dmVjdG9yX2Zsb2F0X2dldCh2LDUpICE9IDUpIDsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92 ZWN0b3JfZmxvYXQiICJfc3dhcF9lbGVtZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29y cmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xfdmVjdG9yX2Zsb2F0X3JldmVyc2UgKHYp IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChn c2xfdmVjdG9yX2Zsb2F0X2dldCAodiwgaSkgIT0gKGZsb2F0KSAoMTAyNyAtIGkgLSAxKSk7CiAg ICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3JldmVyc2UiICIi ICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICBmbG9hdCBleHBfbWF4 ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQodiwgMCk7CiAgICBmbG9hdCBleHBfbWluID0gZ3NsX3Zl Y3Rvcl9mbG9hdF9nZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9 IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGZsb2F0 IGsgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAodiwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21p bikgewogICAgICAgICAgZXhwX21pbiA9IGdzbF92ZWN0b3JfZmxvYXRfZ2V0ICh2LCBpKTsKICAg ICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBp IDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZmxvYXQgayA9IGdzbF92ZWN0b3JfZmxvYXRf Z2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAgICBleHBfbWF4 ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9pbWF4ID0gaTsK ICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIGZsb2F0IG1heCA9IGdzbF92ZWN0b3JfZmxv YXRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9y X2Zsb2F0IiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgfQoKICAg IHsKICAgICAgZmxvYXQgbWluID0gZ3NsX3ZlY3Rvcl9mbG9hdF9taW4gKHYpIDsKCiAgICAgIGdz bF90ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfZmxvYXQiICJfbWluIHJldHVybnMg Y29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBmbG9hdCBtaW4sIG1h eDsKICAgICAgZ3NsX3ZlY3Rvcl9mbG9hdF9taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAg Z3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXggcmV0 dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBf bWluLCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0g dmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXplX3QgaW1heCA9IGdzbF92ZWN0b3JfZmxv YXRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdz bF92ZWN0b3JfZmxvYXQiICJfbWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsK ICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluID0gZ3NsX3ZlY3Rvcl9mbG9hdF9taW5faW5k ZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9m bG9hdCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAg IHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAgICBnc2xfdmVjdG9yX2Zsb2F0X21pbm1h eF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9p bWF4LCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1h eGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3Jf ZmxvYXQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0K ICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX2Zsb2F0ICogYSA9IGdzbF92ZWN0b3JfZmxvYXRfY2Fs bG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3JfZmxvYXQgKiBiID0gZ3NsX3ZlY3Rvcl9mbG9hdF9j YWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAg ICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAoYSwgaSwgKGZsb2F0KSgzICsgaSkpOwogICAgICAg IGdzbF92ZWN0b3JfZmxvYXRfc2V0IChiLCBpLCAoZmxvYXQpKDMgKyAyICogaSkpOwogICAgICB9 CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9h dF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkg PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVj dG9yX2Zsb2F0X2dldCAodixpKTsKICAgICAgICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0 X2dldCAoYSxpKTsKICAgICAgICAgIGZsb2F0IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixp KTsKICAgICAgICAgIGZsb2F0IHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAg ICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns X3ZlY3Rvcl9mbG9hdCIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgogICAgZ3NsX3Zl Y3Rvcl9mbG9hdF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9zdWIgKHYsIGIp OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVjdG9yX2Zsb2F0X2dl dCAodixpKTsKICAgICAgICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYSxpKTsK ICAgICAgICAgIGZsb2F0IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixpKTsKICAgICAgICAg IGZsb2F0IHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1 cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9mbG9h dCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfZmxv YXRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfZmxvYXRfbXVsICh2LCBiKTsKCiAgICB7 CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgICAgICB7CiAgICAgICAgICBmbG9hdCByID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKHYsaSk7 CiAgICAgICAgICBmbG9hdCB4ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKGEsaSk7CiAgICAgICAg ICBmbG9hdCB5ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9nZXQgKGIsaSk7CiAgICAgICAgICBmbG9hdCB6 ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwog ICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJfbXVs IG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9tZW1j cHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAg aW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAg IHsKICAgICAgICAgIGZsb2F0IHIgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAodixpKTsKICAgICAg ICAgIGZsb2F0IHggPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYSxpKTsKICAgICAgICAgIGZsb2F0 IHkgPSBnc2xfdmVjdG9yX2Zsb2F0X2dldCAoYixpKTsKICAgICAgICAgIGZsb2F0IHogPSB4IC8g eTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3 ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90 ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIp OwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2Zsb2F0X2ZyZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9m bG9hdF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfZmxvYXRfZnJlZSAodik7Cn0KCgp2 b2lkCnRlc3RfZmxvYXRfYmluYXJ5ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHYgPSBn c2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9mbG9hdCAqIHcgPSBn c2xfdmVjdG9yX2Zsb2F0X2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxF ICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgaSwgKGZsb2F0 KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Zsb2F0X2Z3cml0ZSAoZiwg dik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu ZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVhZCAoZiwgdyk7CgogICAgc3Rh dHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBp ZiAody0+ZGF0YVtpXSAhPSAoZmxvYXQpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAx OwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3dy aXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdz bF92ZWN0b3JfZmxvYXRfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVlICh3KTsKfQoK dm9pZAp0ZXN0X2Zsb2F0X3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2Zsb2F0ICogdiA9IGdz bF92ZWN0b3JfZmxvYXRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7 CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9mbG9hdF9zZXQgKHYsIGogLSAxLCAoZmxvYXQp MCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2Zsb2F0IiAiX3NldCB0cmFwcyBp bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfZmxv YXRfc2V0ICh2LCAxMDI3ICsgMSwgKGZsb2F0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3Ns X3ZlY3Rvcl9mbG9hdCIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg c3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2Zsb2F0X3NldCAodiwgMTAyNywgKGZsb2F0KTApOwog IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9zZXQgdHJhcHMgaW5kZXgg YXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9mbG9hdF9n ZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfZmxvYXQiICJf Z2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwK ICAgICAgICAgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXgg YmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9mbG9h dF9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfZmxv YXQiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg IT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfZmxvYXQiICJfZ2V0IHJldHVybnMgemVybyBmb3Ig aW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv cl9mbG9hdF9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9m bG9hdCIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAh PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9mbG9hdCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv ciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX2Zsb2F0X2ZyZWUgKHYpOwp9 CiMgODUgInRlc3QuYyIgMgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQg dGVzdF9mbG9hdF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9mbG9hdF90ZXh0ICh2b2lkKQp7CiAg Z3NsX3ZlY3Rvcl9mbG9hdCAqIHYgPSBnc2xfdmVjdG9yX2Zsb2F0X2FsbG9jICgxMDI3KTsKICBn c2xfdmVjdG9yX2Zsb2F0ICogdyA9IGdzbF92ZWN0b3JfZmxvYXRfYWxsb2MgKDEwMjcpOwoKICBz aXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAg IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2Zs b2F0X3NldCAodiwgaSwgKGZsb2F0KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX2Zsb2F0 X2ZwcmludGYgKGYsIHYsICIlZyIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxF ICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7CgogICAgZ3NsX3ZlY3Rvcl9mbG9hdF9mc2Nh bmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr KQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0gKGZsb2F0KSBpKQogICAgICAgICAg c3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9m bG9hdCIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2Ug KGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl9mbG9hdF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2Zsb2F0 X2ZyZWUgKHcpOwp9CiMgODYgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDg3 ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDkxICJ0ZXN0LmMiIDIKIyAx ICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF91bG9uZ19m dW5jICh2b2lkKTsKdm9pZCB0ZXN0X3Vsb25nX2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF91bG9u Z190cmFwICh2b2lkKTsKCnZvaWQKdGVzdF91bG9uZ19mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rv cl91bG9uZyAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAo MTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2Fs bG9jIHJldHVybnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcs ICJnc2xfdmVjdG9yX3Vsb25nIiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90 ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfdWxvbmciICJfYWxsb2MgcmV0dXJucyB1 bml0IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBn c2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwgKHVuc2lnbmVkIGxvbmcpIGkpOwogICAgfQoKCiAg c3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYg KHYtPmRhdGFbaV0gIT0gKHVuc2lnbmVkIGxvbmcpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAg IH07CgogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX3Vsb25nIiAi X3NldCIgIiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0YXR1cyA9IDA7 CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3Jf dWxvbmdfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQgbG9uZykgaSkKICAgICAgICBzdGF0dXMgPSAx OwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91bG9u ZyIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAgdi0+c3Ry aWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK ICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQg bG9uZykgKDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3Rh dHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9nZXQiICIiICIgcmVhZHMgY29ycmVjdGx5IHdpdGgg c3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBn c2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwgKHVuc2lnbmVkIGxvbmcpIChpICsgMTAwMCkpOwog ICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg ICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAodW5zaWduZWQgbG9uZykgKGkgKyAxMDAw KSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92 ZWN0b3JfdWxvbmciICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsK CgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsK ICAgICAgZ3NsX3ZlY3Rvcl91bG9uZ19zZXQgKHYsIGksICh1bnNpZ25lZCBsb25nKSBpKTsKICAg IH0KCiAgZ3NsX3ZlY3Rvcl91bG9uZ19zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1 cyA9IChnc2xfdmVjdG9yX3Vsb25nX2dldCh2LDIpICE9IDUpIDsKICBzdGF0dXMgfD0gKGdzbF92 ZWN0b3JfdWxvbmdfZ2V0KHYsNSkgIT0gMikgOwoKICBnc2xfdmVjdG9yX3Vsb25nX3N3YXBfZWxl bWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Vsb25nX2dldCh2LDIp ICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWxvbmdfZ2V0KHYsNSkgIT0gNSkgOwoK ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9zd2FwX2VsZW1lbnRzIiAi IiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdz bF92ZWN0b3JfdWxvbmdfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr KQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBpKSAhPSAo dW5zaWduZWQgbG9uZykgKDEwMjcgLSBpIC0gMSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVz LCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVsZW1lbnRzIGNv cnJlY3RseSIpIDsKCiAgewogICAgdW5zaWduZWQgbG9uZyBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91 bG9uZ19nZXQodiwgMCk7CiAgICB1bnNpZ25lZCBsb25nIGV4cF9taW4gPSBnc2xfdmVjdG9yX3Vs b25nX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1heCA9IDAsIGV4cF9pbWluID0gMDsKCiAg ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBrID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4cF9t aW4pIHsKICAgICAgICAgIGV4cF9taW4gPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAodiwgaSk7CiAg ICAgICAgICBleHBfaW1pbiA9IGk7CiAgICAgICAgfQogICAgICB9CgogICAgZm9yIChpID0gMDsg aSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIHVuc2lnbmVkIGxvbmcgayA9IGdzbF92ZWN0 b3JfdWxvbmdfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAg ICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9p bWF4ID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbWF4 ID0gZ3NsX3ZlY3Rvcl91bG9uZ19tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhw X21heCwgImdzbF92ZWN0b3JfdWxvbmciICJfbWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZh bHVlIik7CiAgICB9CgogICAgewogICAgICB1bnNpZ25lZCBsb25nIG1pbiA9IGdzbF92ZWN0b3Jf dWxvbmdfbWluICh2KSA7CgogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVj dG9yX3Vsb25nIiAiX21pbiByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoK ICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl91bG9u Z19taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4 LCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFs dWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl91bG9uZyIg Il9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewog ICAgICBzaXplX3QgaW1heCA9IGdzbF92ZWN0b3JfdWxvbmdfbWF4X2luZGV4ICh2KSA7CgogICAg ICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfdWxvbmciICJfbWF4X2lu ZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVf dCBpbWluID0gZ3NsX3ZlY3Rvcl91bG9uZ19taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0 IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9taW5faW5kZXggcmV0dXJu cyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGlt YXg7CgogICAgICBnc2xfdmVjdG9yX3Vsb25nX21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4 KTsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl91bG9uZyIg Il9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVz dCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfdWxvbmciICJfbWlubWF4X2luZGV4IHJl dHVybnMgY29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9y X3Vsb25nICogYSA9IGdzbF92ZWN0b3JfdWxvbmdfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92ZWN0 b3JfdWxvbmcgKiBiID0gZ3NsX3ZlY3Rvcl91bG9uZ19jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAo aSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Vsb25nX3Nl dCAoYSwgaSwgKHVuc2lnbmVkIGxvbmcpKDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl91bG9u Z19zZXQgKGIsIGksICh1bnNpZ25lZCBsb25nKSgzICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdz bF92ZWN0b3JfdWxvbmdfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfdWxvbmdfYWRkICh2 LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHIgPSBnc2xfdmVj dG9yX3Vsb25nX2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeCA9IGdzbF92ZWN0 b3JfdWxvbmdfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB5ID0gZ3NsX3ZlY3Rv cl91bG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHogPSB4ICsgeTsKICAg ICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAg ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91bG9uZyIgIl9hZGQgYWRkcyBjb3JyZWN0 bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91bG9uZ19tZW1jcHkgKHYsIGEpOwogICAgZ3Ns X3ZlY3Rvcl91bG9uZ19zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7Cgog ICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2ln bmVkIGxvbmcgciA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LGkpOwogICAgICAgICAgdW5zaWdu ZWQgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICB1bnNpZ25l ZCBsb25nIHkgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVk IGxvbmcgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVz ID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25n IiAiX3N1YiBzdWJ0cmFjdHMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl91bG9u Z19tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl91bG9uZ19tdWwgKHYsIGIpOwoKICAgIHsK ICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog ICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgciA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0 ICh2LGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQg KGEsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHkgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAo YixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeiA9IHggKiB5OwogICAgICAgICAgaWYgKHIg IT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChz dGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX211bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwog ICAgfQoKICAgIGdzbF92ZWN0b3JfdWxvbmdfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf dWxvbmdfZGl2ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25lZCBsb25n IHIgPSBnc2xfdmVjdG9yX3Vsb25nX2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcg eCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgbG9uZyB5 ID0gZ3NsX3ZlY3Rvcl91bG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIHog PSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgx MjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAg IGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2RpdiBkaXZpZGVzIGNvcnJl Y3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWUgKGEpOwogICAgZ3NsX3Zl Y3Rvcl91bG9uZ19mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfdWxvbmdfZnJlZSAodik7 Cn0KCgp2b2lkCnRlc3RfdWxvbmdfYmluYXJ5ICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl91bG9uZyAq IHYgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91bG9uZyAq IHcgPSBnc2xfdmVjdG9yX3Vsb25nX2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAg ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkg PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Vsb25nX3NldCAodiwgaSwg KHVuc2lnbmVkIGxvbmcpICgxMDI3IC0gaSkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfdWxv bmdfZndyaXRlIChmLCB2KTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9 IGZvcGVuICgidGVzdC5kYXQiLCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWFkIChm LCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg ICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBsb25nKSAoMTAyNyAtIGkp KQogICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAi Z3NsX3ZlY3Rvcl91bG9uZyIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAg IGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3Vsb25nX2ZyZWUgKHYpOwogIGdzbF92ZWN0 b3JfdWxvbmdfZnJlZSAodyk7Cn0KCnZvaWQKdGVzdF91bG9uZ190cmFwICh2b2lkKQp7CiAgZ3Ns X3ZlY3Rvcl91bG9uZyAqIHYgPSBnc2xfdmVjdG9yX3Vsb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6 ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfdWxvbmdf c2V0ICh2LCBqIC0gMSwgKHVuc2lnbmVkIGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn c2xfdmVjdG9yX3Vsb25nIiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoK ICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfdWxvbmdfc2V0ICh2LCAxMDI3ICsgMSwgKHVuc2ln bmVkIGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX3Nl dCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92 ZWN0b3JfdWxvbmdfc2V0ICh2LCAxMDI3LCAodW5zaWduZWQgbG9uZykwKTsKICBnc2xfdGVzdCAo IXN0YXR1cywgImdzbF92ZWN0b3JfdWxvbmciICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJv dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCBqIC0g MSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCB0cmFwcyBp bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICJn c2xfdmVjdG9yX3Vsb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2Vy IGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0ICh2LCAx MDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCB0 cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAg ICAgICJnc2xfdmVjdG9yX3Vsb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGFib3Zl IHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfdWxvbmdfZ2V0 ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWxvbmciICJfZ2V0 IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAg ICAgICAgImdzbF92ZWN0b3JfdWxvbmciICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYXQg dXBwZXIgYm91bmQiKTsKCiAgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVlICh2KTsKfQojIDkyICJ0ZXN0 LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdWxvbmdf dGV4dCAodm9pZCk7Cgp2b2lkCnRlc3RfdWxvbmdfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3Jf dWxvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl91bG9uZ19hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91 bG9uZyAqIHcgPSBnc2xfdmVjdG9yX3Vsb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7Cgog IHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl91bG9uZ19zZXQgKHYs IGksICh1bnNpZ25lZCBsb25nKSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3Vsb25nX2Zw cmludGYgKGYsIHYsICIlbHUiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAq ZiA9IGZvcGVuICgidGVzdC50eHQiLCAiciIpOwoKICAgIGdzbF92ZWN0b3JfdWxvbmdfZnNjYW5m IChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBsb25nKSBpKQogICAg ICAgICAgc3RhdHVzID0gMTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl Y3Rvcl91bG9uZyIgIl9mcHJpbnRmIGFuZCBmc2NhbmYgd29yayBjb3JyZWN0bHkiKTsKCiAgICBm Y2xvc2UgKGYpOwogIH0KCiAgZ3NsX3ZlY3Rvcl91bG9uZ19mcmVlICh2KTsKICBnc2xfdmVjdG9y X3Vsb25nX2ZyZWUgKHcpOwp9CiMgOTMgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIg MQojIDk0ICJ0ZXN0LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDk4ICJ0ZXN0LmMi IDIKIyAxICJ0ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF9s b25nX2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfbG9uZ19iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3Rf bG9uZ190cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVj dG9yX2xvbmcgKiB2OwogIHNpemVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAo MTAyNyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX2xvbmciICJfYWxs b2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywg ImdzbF92ZWN0b3JfbG9uZyIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVz dCAodi0+c3RyaWRlICE9IDEsICJnc2xfdmVjdG9yX2xvbmciICJfYWxsb2MgcmV0dXJucyB1bml0 IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xf dmVjdG9yX2xvbmdfc2V0ICh2LCBpLCAobG9uZykgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoK ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAh PSAobG9uZykgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1 cywKICAgICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9zZXQiICIiICIgd3JpdGVzIGludG8g YXJyYXkgY29ycmVjdGx5Iik7CgoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSAhPSAobG9u ZykgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLAogICAg ICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNv cnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9 IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl9sb25nX2dl dCAodiwgaSkgIT0gKGxvbmcpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAg Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQiICIiICIgcmVhZHMgY29y cmVjdGx5IHdpdGggc3RyaWRlIik7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQog ICAgewogICAgICBnc2xfdmVjdG9yX2xvbmdfc2V0ICh2LCBpLCAobG9uZykgKGkgKyAxMDAwKSk7 CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykK ICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChsb25nKSAoaSArIDEwMDApKQogICAg ICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9s b25nIiAiX3NldCIgIiIgIiB3cml0ZXMgY29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+ c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdz bF92ZWN0b3JfbG9uZ19zZXQgKHYsIGksIChsb25nKSBpKTsKICAgIH0KCiAgZ3NsX3ZlY3Rvcl9s b25nX3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfbG9u Z19nZXQodiwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX2xvbmdfZ2V0KHYsNSkg IT0gMikgOwoKICBnc2xfdmVjdG9yX2xvbmdfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBz dGF0dXMgfD0gKGdzbF92ZWN0b3JfbG9uZ19nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChn c2xfdmVjdG9yX2xvbmdfZ2V0KHYsNSkgIT0gNSkgOwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns X3ZlY3Rvcl9sb25nIiAiX3N3YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNv cnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl9sb25nX3JldmVyc2UgKHYp IDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChn c2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSAhPSAobG9uZykgKDEwMjcgLSBpIC0gMSkpOwogICAg fQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3JldmVyc2UiICIiICIg cmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICBsb25nIGV4cF9tYXggPSBn c2xfdmVjdG9yX2xvbmdfZ2V0KHYsIDApOwogICAgbG9uZyBleHBfbWluID0gZ3NsX3ZlY3Rvcl9s b25nX2dldCh2LCAwKTsKICAgIHNpemVfdCBleHBfaW1heCA9IDAsIGV4cF9pbWluID0gMDsKCiAg ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgbG9uZyBrID0gZ3Ns X3ZlY3Rvcl9sb25nX2dldCAodiwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAg ICAgICAgZXhwX21pbiA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKHYsIGkpOwogICAgICAgICAgZXhw X2ltaW4gPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp KyspCiAgICAgIHsKICAgICAgICBsb25nIGsgPSBnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LCBpKSA7 CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAgICBleHBfbWF4ID0gZ3NsX3ZlY3Rv cl9sb25nX2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAg ICAgfQoKICAgIHsKICAgICAgbG9uZyBtYXggPSBnc2xfdmVjdG9yX2xvbmdfbWF4ICh2KSA7Cgog ICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2xvbmciICJfbWF4IHJl dHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBsb25nIG1p biA9IGdzbF92ZWN0b3JfbG9uZ19taW4gKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtaW4gIT0gZXhw X21pbiwgImdzbF92ZWN0b3JfbG9uZyIgIl9taW4gcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFs dWUiKTsKICAgIH0KCiAgICB7CiAgICAgIGxvbmcgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0b3Jf bG9uZ19taW5tYXggKHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBf bWF4LCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2 YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX2xvbmci ICJfbWlubWF4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsK ICAgICAgc2l6ZV90IGltYXggPSBnc2xfdmVjdG9yX2xvbmdfbWF4X2luZGV4ICh2KSA7CgogICAg ICBnc2xfdGVzdCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfbG9uZyIgIl9tYXhfaW5k ZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90 IGltaW4gPSBnc2xfdmVjdG9yX2xvbmdfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAo aW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfbG9uZyIgIl9taW5faW5kZXggcmV0dXJucyBj b3JyZWN0IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7 CgogICAgICBnc2xfdmVjdG9yX2xvbmdfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoK ICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX2xvbmciICJfbWlu bWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGlt aW4gIT0gZXhwX2ltaW4sICJnc2xfdmVjdG9yX2xvbmciICJfbWlubWF4X2luZGV4IHJldHVybnMg Y29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX2xvbmcg KiBhID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX2xvbmcg KiBiID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19zZXQgKGEsIGksIChs b25nKSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3JfbG9uZ19zZXQgKGIsIGksIChsb25nKSgz ICsgMiAqIGkpKTsKICAgICAgfQoKICAgIGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKHYsIGEpOwog ICAgZ3NsX3ZlY3Rvcl9sb25nX2FkZCAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0g MDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAg bG9uZyByID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAodixpKTsKICAgICAgICAgIGxvbmcgeCA9IGdz bF92ZWN0b3JfbG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICBsb25nIHkgPSBnc2xfdmVjdG9yX2xv bmdfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAh PSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0 YXR1cywgImdzbF92ZWN0b3JfbG9uZyIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgog ICAgZ3NsX3ZlY3Rvcl9sb25nX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfc3Vi ICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsg aSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBsb25nIHIgPSBnc2xfdmVjdG9yX2xv bmdfZ2V0ICh2LGkpOwogICAgICAgICAgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAoYSxp KTsKICAgICAgICAgIGxvbmcgeSA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKGIsaSk7CiAgICAgICAg ICBsb25nIHogPSB4IC0geTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1 cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25n IiAiX3N1YiBzdWJ0cmFjdHMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl9sb25n X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfbXVsICh2LCBiKTsKCiAgICB7CiAg ICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg ICAgICB7CiAgICAgICAgICBsb25nIHIgPSBnc2xfdmVjdG9yX2xvbmdfZ2V0ICh2LGkpOwogICAg ICAgICAgbG9uZyB4ID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAoYSxpKTsKICAgICAgICAgIGxvbmcg eSA9IGdzbF92ZWN0b3JfbG9uZ19nZXQgKGIsaSk7CiAgICAgICAgICBsb25nIHogPSB4ICogeTsK ICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQog ICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX211bCBtdWx0aXBsaWVz IGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfbG9uZ19tZW1jcHkgKHYsIGEpOwog ICAgZ3NsX3ZlY3Rvcl9sb25nX2RpdiAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0g MDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAg bG9uZyByID0gZ3NsX3ZlY3Rvcl9sb25nX2dldCAodixpKTsKICAgICAgICAgIGxvbmcgeCA9IGdz bF92ZWN0b3JfbG9uZ19nZXQgKGEsaSk7CiAgICAgICAgICBsb25nIHkgPSBnc2xfdmVjdG9yX2xv bmdfZ2V0IChiLGkpOwogICAgICAgICAgbG9uZyB6ID0geCAvIHk7CiAgICAgICAgICBpZiAoZmFi cyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAqIGZhYnMoeikpCiAgICAgICAg ICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl Y3Rvcl9sb25nIiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVj dG9yX2xvbmdfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAoYik7CiAgfQoKCgoK ICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAodik7Cn0KCgp2b2lkCnRlc3RfbG9uZ19iaW5hcnkgKHZv aWQpCnsKICBnc2xfdmVjdG9yX2xvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2NhbGxvYyAoMTAy Nyk7CiAgZ3NsX3ZlY3Rvcl9sb25nICogdyA9IGdzbF92ZWN0b3JfbG9uZ19jYWxsb2MgKDEwMjcp OwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2Ii KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3Zl Y3Rvcl9sb25nX3NldCAodiwgaSwgKGxvbmcpICgxMDI3IC0gaSkpOwogICAgICB9OwoKICAgIGdz bF92ZWN0b3JfbG9uZ19md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAg ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfbG9u Z19mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAobG9uZykgKDEwMjcgLSBp KSkKICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywg ImdzbF92ZWN0b3JfbG9uZyIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAg IGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX2xvbmdfZnJlZSAodik7CiAgZ3NsX3ZlY3Rv cl9sb25nX2ZyZWUgKHcpOwp9Cgp2b2lkCnRlc3RfbG9uZ190cmFwICh2b2lkKQp7CiAgZ3NsX3Zl Y3Rvcl9sb25nICogdiA9IGdzbF92ZWN0b3JfbG9uZ19hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBq ID0gMDsKICBkb3VibGUgeDsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2xvbmdfc2V0ICh2 LCBqIC0gMSwgKGxvbmcpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xvbmci ICJfc2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAg Z3NsX3ZlY3Rvcl9sb25nX3NldCAodiwgMTAyNyArIDEsIChsb25nKTApOwogIGdzbF90ZXN0ICgh c3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3NldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBi b3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfbG9uZ19zZXQgKHYsIDEwMjcsIChs b25nKTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX3NldCB0cmFw cyBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9y X2xvbmdfZ2V0ICh2LCBqIC0gMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2xv bmciICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg IT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBp bmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVjdG9y X2xvbmdfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y X2xvbmciICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3Qg KHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfbG9uZyIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv ciBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIHggPSBnc2xfdmVj dG9yX2xvbmdfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3Jf bG9uZyIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAh PSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2dldCByZXR1cm5zIHplcm8gZm9y IGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CgogIGdzbF92ZWN0b3JfbG9uZ19mcmVlICh2KTsKfQoj IDk5ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRl c3RfbG9uZ190ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9sb25nX3RleHQgKHZvaWQpCnsKICBnc2xf dmVjdG9yX2xvbmcgKiB2ID0gZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jICgxMDI3KTsKICBnc2xfdmVj dG9yX2xvbmcgKiB3ID0gZ3NsX3ZlY3Rvcl9sb25nX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7 CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkg PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9sb25nX3NldCAo diwgaSwgKGxvbmcpIGkpOwogICAgICB9OwoKICAgIGdzbF92ZWN0b3JfbG9uZ19mcHJpbnRmIChm LCB2LCAiJWxkIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl biAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2xvbmdfZnNjYW5mIChmLCB3KTsK CiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewog ICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChsb25nKSBpKQogICAgICAgICAgc3RhdHVzID0gMTsK ICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9sb25nIiAiX2Zwcmlu dGYgYW5kIGZzY2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBn c2xfdmVjdG9yX2xvbmdfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl9sb25nX2ZyZWUgKHcpOwp9CiMg MTAwICJ0ZXN0LmMiIDIKIyAxICJ0ZW1wbGF0ZXNfb2ZmLmgiIDEKIyAxMDEgInRlc3QuYyIgMgoK CgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMgMTA1ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X3NvdXJj ZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF91aW50X2Z1bmMgKHZvaWQpOwp2 b2lkIHRlc3RfdWludF9iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3RfdWludF90cmFwICh2b2lkKTsK CnZvaWQKdGVzdF91aW50X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VpbnQgKiB2OwogIHNp emVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CgogIGdzbF90ZXN0 ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3VpbnQiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBw b2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfdWludCIg Il9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVzdCAodi0+c3RyaWRlICE9IDEs ICJnc2xfdmVjdG9yX3VpbnQiICJfYWxsb2MgcmV0dXJucyB1bml0IHN0cmlkZSIpOwoKICBmb3Ig KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX3VpbnRfc2V0ICh2 LCBpLCAodW5zaWduZWQgaW50KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9 IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9ICh1bnNpZ25l ZCBpbnQpIGkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CgogIGdzbF90ZXN0IChzdGF0dXMs CiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFy cmF5IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsg aSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91aW50X2dldCAodiwgaSkgIT0gKHVuc2ln bmVkIGludCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91aW50IiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFy cmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZv ciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91 aW50X2dldCAodiwgaSkgIT0gKHVuc2lnbmVkIGludCkgKDIgKiBpKSkKICAgICAgICBzdGF0dXMg PSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX2dldCIg IiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEw MjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKHYsIGksICh1bnNp Z25lZCBpbnQpIChpICsgMTAwMCkpOwogICAgfTsKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0g MDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhWzIgKiBpXSAhPSAo dW5zaWduZWQgaW50KSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBn c2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX3NldCIgIiIgIiB3cml0ZXMgY29y cmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+c3RyaWRlID0gMSA7CgogIGZvciAoaSA9IDA7 IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKHYsIGksICh1 bnNpZ25lZCBpbnQpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VpbnRfc3dhcF9lbGVtZW50cyAo diwgMiwgNSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl91aW50X2dldCh2LDIpICE9IDUpIDsK ICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQodiw1KSAhPSAyKSA7CgogIGdzbF92ZWN0 b3JfdWludF9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rv cl91aW50X2dldCh2LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQo diw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfc3dh cF9lbGVtZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0 dXMgPSAwOwoKICBnc2xfdmVjdG9yX3VpbnRfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBp IDwgMTAyNzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfdWludF9nZXQg KHYsIGkpICE9ICh1bnNpZ25lZCBpbnQpICgxMDI3IC0gaSAtIDEpKTsKICAgIH0KCiAgZ3NsX3Rl c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9yZXZlcnNlIiAiIiAiIHJldmVyc2VzIGVs ZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgewogICAgdW5zaWduZWQgaW50IGV4cF9tYXggPSBnc2xf dmVjdG9yX3VpbnRfZ2V0KHYsIDApOwogICAgdW5zaWduZWQgaW50IGV4cF9taW4gPSBnc2xfdmVj dG9yX3VpbnRfZ2V0KHYsIDApOwogICAgc2l6ZV90IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAw OwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICB1bnNpZ25l ZCBpbnQgayA9IGdzbF92ZWN0b3JfdWludF9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA8IGV4 cF9taW4pIHsKICAgICAgICAgIGV4cF9taW4gPSBnc2xfdmVjdG9yX3VpbnRfZ2V0ICh2LCBpKTsK ICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgdW5zaWduZWQgaW50IGsgPSBnc2xfdmVj dG9yX3VpbnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBfbWF4KSB7CiAgICAgICAg ICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2lt YXggPSBpOwogICAgICAgIH0KICAgICAgfQoKICAgIHsKICAgICAgdW5zaWduZWQgaW50IG1heCA9 IGdzbF92ZWN0b3JfdWludF9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21h eCwgImdzbF92ZWN0b3JfdWludCIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUi KTsKICAgIH0KCiAgICB7CiAgICAgIHVuc2lnbmVkIGludCBtaW4gPSBnc2xfdmVjdG9yX3VpbnRf bWluICh2KSA7CgogICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3Vp bnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewog ICAgICB1bnNpZ25lZCBpbnQgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0b3JfdWludF9taW5tYXgg KHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3Zl Y3Rvcl91aW50IiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAg ICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4IHJl dHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsKICAgICAgc2l6ZV90 IGltYXggPSBnc2xfdmVjdG9yX3VpbnRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAo aW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3JfdWludCIgIl9tYXhfaW5kZXggcmV0dXJucyBj b3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xf dmVjdG9yX3VpbnRfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBf aW1pbiwgImdzbF92ZWN0b3JfdWludCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmlt dW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAgICBnc2xf dmVjdG9yX3VpbnRfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rl c3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4X2luZGV4IHJl dHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2lt aW4sICJnc2xfdmVjdG9yX3VpbnQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29ycmVjdCBtaW5p bXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX3VpbnQgKiBhID0gZ3NsX3Zl Y3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX3VpbnQgKiBiID0gZ3NsX3Zl Y3Rvcl91aW50X2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfdWludF9zZXQgKGEsIGksICh1bnNpZ25lZCBpbnQp KDMgKyBpKSk7CiAgICAgICAgZ3NsX3ZlY3Rvcl91aW50X3NldCAoYiwgaSwgKHVuc2lnbmVkIGlu dCkoMyArIDIgKiBpKSk7CiAgICAgIH0KCiAgICBnc2xfdmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBh KTsKICAgIGdzbF92ZWN0b3JfdWludF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1 cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAg ICAgIHVuc2lnbmVkIGludCByID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodixpKTsKICAgICAgICAg IHVuc2lnbmVkIGludCB4ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAoYSxpKTsKICAgICAgICAgIHVu c2lnbmVkIGludCB5ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAoYixpKTsKICAgICAgICAgIHVuc2ln bmVkIGludCB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0 dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWlu dCIgIl9hZGQgYWRkcyBjb3JyZWN0bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91aW50X21l bWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VpbnRfc3ViICh2LCBiKTsKCiAgICB7CiAgICAg IGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg ICB7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgciA9IGdzbF92ZWN0b3JfdWludF9nZXQgKHYsaSk7 CiAgICAgICAgICB1bnNpZ25lZCBpbnQgeCA9IGdzbF92ZWN0b3JfdWludF9nZXQgKGEsaSk7CiAg ICAgICAgICB1bnNpZ25lZCBpbnQgeSA9IGdzbF92ZWN0b3JfdWludF9nZXQgKGIsaSk7CiAgICAg ICAgICB1bnNpZ25lZCBpbnQgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAg ICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xf dmVjdG9yX3VpbnQiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHkiKTsKICAgIH0KCiAgICBnc2xf dmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfdWludF9tdWwgKHYsIGIp OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGludCByID0gZ3NsX3ZlY3Rvcl91 aW50X2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB4ID0gZ3NsX3ZlY3Rvcl91aW50 X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB5ID0gZ3NsX3ZlY3Rvcl91aW50X2dl dCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAo ciAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3Qg KHN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9tdWwgbXVsdGlwbGllcyBjb3JyZWN0bHkiKTsK ICAgIH0KCiAgICBnc2xfdmVjdG9yX3VpbnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf dWludF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3Ig KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGludCBy ID0gZ3NsX3ZlY3Rvcl91aW50X2dldCAodixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB4ID0g Z3NsX3ZlY3Rvcl91aW50X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB5ID0gZ3Ns X3ZlY3Rvcl91aW50X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIGludCB6ID0geCAvIHk7 CiAgICAgICAgICBpZiAoZmFicyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAq IGZhYnMoeikpCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91aW50IiAiX2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwog ICAgfQoKCiAgICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3VpbnRf ZnJlZSAoYik7CiAgfQoKCgoKICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAodik7Cn0KCgp2b2lkCnRl c3RfdWludF9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VpbnQgKiB2ID0gZ3NsX3ZlY3Rv cl91aW50X2NhbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91aW50ICogdyA9IGdzbF92ZWN0b3Jf dWludF9jYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVu ICgidGVzdC5kYXQiLCAid2IiKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgaSwgKHVuc2lnbmVkIGludCkgKDEw MjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91aW50X2Z3cml0ZSAoZiwgdik7Cgog ICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0Iiwg InJiIik7CgogICAgZ3NsX3ZlY3Rvcl91aW50X2ZyZWFkIChmLCB3KTsKCiAgICBzdGF0dXMgPSAw OwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlmICh3LT5k YXRhW2ldICE9ICh1bnNpZ25lZCBpbnQpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAx OwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfd3Jp dGUgYW5kIHJlYWQgd29yayBjb3JyZWN0bHkiKTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgZ3Ns X3ZlY3Rvcl91aW50X2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdWludF9mcmVlICh3KTsKfQoKdm9p ZAp0ZXN0X3VpbnRfdHJhcCAodm9pZCkKewogIGdzbF92ZWN0b3JfdWludCAqIHYgPSBnc2xfdmVj dG9yX3VpbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0 YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgaiAtIDEsICh1bnNpZ25lZCBpbnQp MCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IHRyYXBzIGlu ZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50 X3NldCAodiwgMTAyNyArIDEsICh1bnNpZ25lZCBpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMs ICJnc2xfdmVjdG9yX3VpbnQiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7 CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91aW50X3NldCAodiwgMTAyNywgKHVuc2lnbmVk IGludCkwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWludCIgIl9zZXQgdHJh cHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv cl91aW50X2dldCAodiwgaiAtIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91 aW50IiAiX2dldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4 ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfZ2V0IHJldHVybnMgemVybyBmb3Ig aW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv cl91aW50X2dldCAodiwgMTAyNyArIDEpOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rv cl91aW50IiAiX2dldCB0cmFwcyBpbmRleCBhYm92ZSB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0 ICh4ICE9IDAsCiAgICAgICAgICJnc2xfdmVjdG9yX3VpbnQiICJfZ2V0IHJldHVybnMgemVybyBm b3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3Zl Y3Rvcl91aW50X2dldCAodiwgMTAyNyk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y X3VpbnQiICJfZ2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHgg IT0gMCwKICAgICAgICAgICAgImdzbF92ZWN0b3JfdWludCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZv ciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9yX3VpbnRfZnJlZSAodik7Cn0K IyAxMDYgInRlc3QuYyIgMgojIDEgInRlc3RfaW8uYyIgMQojIDIwICJ0ZXN0X2lvLmMiCnZvaWQg dGVzdF91aW50X3RleHQgKHZvaWQpOwoKdm9pZAp0ZXN0X3VpbnRfdGV4dCAodm9pZCkKewogIGdz bF92ZWN0b3JfdWludCAqIHYgPSBnc2xfdmVjdG9yX3VpbnRfYWxsb2MgKDEwMjcpOwogIGdzbF92 ZWN0b3JfdWludCAqIHcgPSBnc2xfdmVjdG9yX3VpbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3Qg aTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAidyIpOwoKICAgIGZvciAo aSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3VpbnRfc2V0 ICh2LCBpLCAodW5zaWduZWQgaW50KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3VpbnRf ZnByaW50ZiAoZiwgdiwgIiV1Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUg KmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX3VpbnRfZnNjYW5m IChmLCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9ICh1bnNpZ25lZCBpbnQpIGkpCiAgICAg ICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yX3VpbnQiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNs b3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfdWludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX3Vp bnRfZnJlZSAodyk7Cn0KIyAxMDcgInRlc3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQoj IDEwOCAidGVzdC5jIiAyCgoKCiMgMSAidGVtcGxhdGVzX29uLmgiIDEKIyAxMTIgInRlc3QuYyIg MgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2lu dF9mdW5jICh2b2lkKTsKdm9pZCB0ZXN0X2ludF9iaW5hcnkgKHZvaWQpOwp2b2lkIHRlc3RfaW50 X3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X2ludF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9p bnQgKiB2OwogIHNpemVfdCBpOwoKICB2ID0gZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9jICgxMDI3KTsK CiAgZ3NsX3Rlc3QgKHYtPmRhdGEgPT0gMCwgImdzbF92ZWN0b3JfaW50IiAiX2FsbG9jIHJldHVy bnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJnc2xfdmVj dG9yX2ludCIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHNpemUiKTsKICBnc2xfdGVzdCAodi0+c3Ry aWRlICE9IDEsICJnc2xfdmVjdG9yX2ludCIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7 CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfaW50 X3NldCAodiwgaSwgKGludCkgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAhPSAoaW50KSBpKQog ICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAg ICAiZ3NsX3ZlY3Rvcl9pbnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3Rs eSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewog ICAgICBpZiAoZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKSAhPSAoaW50KSBpKQogICAgICAgIHN0 YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVj dG9yX2ludCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBhcnJheSBjb3JyZWN0bHkiKTsKCgoKCiAg di0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7 IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3JfaW50X2dldCAodiwgaSkgIT0gKGludCkg KDIgKiBpKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAi Z3NsX3ZlY3Rvcl9pbnQiICJfZ2V0IiAiIiAiIHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIp OwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rv cl9pbnRfc2V0ICh2LCBpLCAoaW50KSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7 CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0 YVsyICogaV0gIT0gKGludCkgKGkgKyAxMDAwKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsK CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3NldCIgIiIgIiB3cml0ZXMg Y29ycmVjdGx5IHdpdGggc3RyaWRlIik7CgoKCiAgdi0+c3RyaWRlID0gMSA7CgogIGZvciAoaSA9 IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfaW50X3NldCAodiwgaSwg KGludCkgaSk7CiAgICB9CgogIGdzbF92ZWN0b3JfaW50X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUp IDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDIpICE9IDUpIDsKICBzdGF0dXMg fD0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9pbnRfc3dh cF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCh2 LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCh2LDUpICE9IDUpIDsK CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3N3YXBfZWxlbWVudHMiICIi ICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJlY3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3Ns X3ZlY3Rvcl9pbnRfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQog ICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfaW50X2dldCAodiwgaSkgIT0gKGludCkg KDEwMjcgLSBpIC0gMSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9p bnQiICJfcmV2ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsK ICAgIGludCBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0KHYsIDApOwogICAgaW50IGV4cF9t aW4gPSBnc2xfdmVjdG9yX2ludF9nZXQodiwgMCk7CiAgICBzaXplX3QgZXhwX2ltYXggPSAwLCBl eHBfaW1pbiA9IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAg ICAgIGludCBrID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPCBl eHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBpKTsK ICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaW50IGsgPSBnc2xfdmVjdG9yX2ludF9n ZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXgg PSBnc2xfdmVjdG9yX2ludF9nZXQgKHYsIGkpIDsKICAgICAgICAgIGV4cF9pbWF4ID0gaTsKICAg ICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIGludCBtYXggPSBnc2xfdmVjdG9yX2ludF9tYXgg KHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdzbF92ZWN0b3JfaW50IiAi X21heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAg aW50IG1pbiA9IGdzbF92ZWN0b3JfaW50X21pbiAodikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAh PSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVt IHZhbHVlIik7CiAgICB9CgogICAgewogICAgICBpbnQgbWluLCBtYXg7CiAgICAgIGdzbF92ZWN0 b3JfaW50X21pbm1heCAodiwgJm1pbiwgJm1heCk7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4 cF9tYXgsICJnc2xfdmVjdG9yX2ludCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0g dmFsdWUiKTsKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9pbnQi ICJfbWlubWF4IHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgoKICAgIHsK ICAgICAgc2l6ZV90IGltYXggPSBnc2xfdmVjdG9yX2ludF9tYXhfaW5kZXggKHYpIDsKCiAgICAg IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWF4X2luZGV4 IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBp bWluID0gZ3NsX3ZlY3Rvcl9pbnRfbWluX2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVzdCAoaW1p biAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfaW50IiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJl Y3QgbWluaW11bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAg ICAgIGdzbF92ZWN0b3JfaW50X21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAg IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9pbnQiICJfbWlubWF4X2lu ZGV4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0g ZXhwX2ltaW4sICJnc2xfdmVjdG9yX2ludCIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0 IG1pbmltdW0gaSIpOwogICAgfQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfaW50ICogYSA9IGdz bF92ZWN0b3JfaW50X2NhbGxvYyAoMTAyNyk7CiAgICBnc2xfdmVjdG9yX2ludCAqIGIgPSBnc2xf dmVjdG9yX2ludF9jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp CiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2ludF9zZXQgKGEsIGksIChpbnQpKDMgKyBpKSk7 CiAgICAgICAgZ3NsX3ZlY3Rvcl9pbnRfc2V0IChiLCBpLCAoaW50KSgzICsgMiAqIGkpKTsKICAg ICAgfQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2lu dF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkg PSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rv cl9pbnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEs aSk7CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0b3JfaW50X2dldCAoYixpKTsKICAgICAgICAg IGludCB6ID0geCArIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMg PSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAi X2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2ludF9tZW1jcHkg KHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9pbnRfc3ViICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBz dGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAg ICAgICAgICBpbnQgciA9IGdzbF92ZWN0b3JfaW50X2dldCAodixpKTsKICAgICAgICAgIGludCB4 ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0IChhLGkpOwogICAgICAgICAgaW50IHkgPSBnc2xfdmVjdG9y X2ludF9nZXQgKGIsaSk7CiAgICAgICAgICBpbnQgeiA9IHggLSB5OwogICAgICAgICAgaWYgKHIg IT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChz dGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwogICAg fQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2ludF9t dWwgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rvcl9p bnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEsaSk7 CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0b3JfaW50X2dldCAoYixpKTsKICAgICAgICAgIGlu dCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAx OwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX211 bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0b3JfaW50X21lbWNw eSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2ludF9kaXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50 IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsK ICAgICAgICAgIGludCByID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LGkpOwogICAgICAgICAgaW50 IHggPSBnc2xfdmVjdG9yX2ludF9nZXQgKGEsaSk7CiAgICAgICAgICBpbnQgeSA9IGdzbF92ZWN0 b3JfaW50X2dldCAoYixpKTsKICAgICAgICAgIGludCB6ID0geCAvIHk7CiAgICAgICAgICBpZiAo ZmFicyhyIC0geikgPiAyICogMS4xOTIwOTI4OTU1MDc4MTI1ZS0wNyAqIGZhYnMoeikpCiAgICAg ICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3Ns X3ZlY3Rvcl9pbnQiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92 ZWN0b3JfaW50X2ZyZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9pbnRfZnJlZSAoYik7CiAgfQoKCgoK ICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF9pbnRfYmluYXJ5ICh2b2lk KQp7CiAgZ3NsX3ZlY3Rvcl9pbnQgKiB2ID0gZ3NsX3ZlY3Rvcl9pbnRfY2FsbG9jICgxMDI3KTsK ICBnc2xfdmVjdG9yX2ludCAqIHcgPSBnc2xfdmVjdG9yX2ludF9jYWxsb2MgKDEwMjcpOwoKICBz aXplX3QgaTsKCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC5kYXQiLCAid2IiKTsKCiAg ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9p bnRfc2V0ICh2LCBpLCAoaW50KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9y X2ludF9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpm ID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoKICAgIGdzbF92ZWN0b3JfaW50X2ZyZWFkIChm LCB3KTsKCiAgICBzdGF0dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg ICAgewogICAgICAgIGlmICh3LT5kYXRhW2ldICE9IChpbnQpICgxMDI3IC0gaSkpCiAgICAgICAg ICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9y X2ludCIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7 CiAgfQoKICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ludF9mcmVlICh3 KTsKfQoKdm9pZAp0ZXN0X2ludF90cmFwICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9pbnQgKiB2ID0g Z3NsX3ZlY3Rvcl9pbnRfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7 CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9pbnRfc2V0ICh2LCBqIC0gMSwgKGludCkwKTsK ICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX3NldCB0cmFwcyBpbmRleCBi ZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0dXMgPSAwOwogIGdzbF92ZWN0b3JfaW50X3NldCAo diwgMTAyNyArIDEsIChpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2lu dCIgIl9zZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK ICBnc2xfdmVjdG9yX2ludF9zZXQgKHYsIDEwMjcsIChpbnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0 dXMsICJnc2xfdmVjdG9yX2ludCIgIl9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsK CiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCBqIC0gMSk7CiAgZ3Ns X3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cg bG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9p bnQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAg c3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3Ns X3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2ludCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUg dXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl9p bnQiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAg c3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9pbnRfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVz dCAoIXN0YXR1cywgImdzbF92ZWN0b3JfaW50IiAiX2dldCB0cmFwcyBpbmRleCBhdCB1cHBlciBi b3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2ludCIg Il9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVj dG9yX2ludF9mcmVlICh2KTsKfQojIDExMyAidGVzdC5jIiAyCiMgMSAidGVzdF9pby5jIiAxCiMg MjAgInRlc3RfaW8uYyIKdm9pZCB0ZXN0X2ludF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF9pbnRf dGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfaW50ICogdiA9IGdzbF92ZWN0b3JfaW50X2FsbG9j ICgxMDI3KTsKICBnc2xfdmVjdG9yX2ludCAqIHcgPSBnc2xfdmVjdG9yX2ludF9hbGxvYyAoMTAy Nyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJ3 Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92 ZWN0b3JfaW50X3NldCAodiwgaSwgKGludCkgaSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl9p bnRfZnByaW50ZiAoZiwgdiwgIiVkIik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJ TEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX2ludF9mc2Nh bmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr KQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0gKGludCkgaSkKICAgICAgICAgIHN0 YXR1cyA9IDE7CiAgICAgIH07CgogICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfaW50 IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7 CiAgfQoKICBnc2xfdmVjdG9yX2ludF9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2ludF9mcmVlICh3 KTsKfQojIDExNCAidGVzdC5jIiAyCiMgMSAidGVtcGxhdGVzX29mZi5oIiAxCiMgMTE1ICJ0ZXN0 LmMiIDIKCgoKIyAxICJ0ZW1wbGF0ZXNfb24uaCIgMQojIDExOSAidGVzdC5jIiAyCiMgMSAidGVz dF9zb3VyY2UuYyIgMQojIDIwICJ0ZXN0X3NvdXJjZS5jIgp2b2lkIHRlc3RfdXNob3J0X2Z1bmMg KHZvaWQpOwp2b2lkIHRlc3RfdXNob3J0X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF91c2hvcnRf dHJhcCAodm9pZCk7Cgp2b2lkCnRlc3RfdXNob3J0X2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9y X3VzaG9ydCAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3VzaG9ydF9jYWxsb2Mg KDEwMjcpOwoKICBnc2xfdGVzdCAodi0+ZGF0YSA9PSAwLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJf YWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAy NywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdz bF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3JfdXNob3J0IiAiX2FsbG9jIHJldHVy bnMgdW5pdCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAg ICAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCBpLCAodW5zaWduZWQgc2hvcnQpIGkpOwogICAg fQoKCiAgc3RhdHVzID0gMDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAg ICAgaWYgKHYtPmRhdGFbaV0gIT0gKHVuc2lnbmVkIHNob3J0KSBpKQogICAgICAgIHN0YXR1cyA9 IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91 c2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5IGNvcnJlY3RseSIpOwoKCiAgc3Rh dHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAoZ3Ns X3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKSAhPSAodW5zaWduZWQgc2hvcnQpIGkpCiAgICAgICAg c3RhdHVzID0gMTsKICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAgICAgICAgICAgImdzbF92 ZWN0b3JfdXNob3J0IiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFycmF5IGNvcnJlY3RseSIpOwoK CgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZvciAoaSA9IDA7IGkgPCAxMDI3 IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKSAh PSAodW5zaWduZWQgc2hvcnQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07CiAg Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2dldCIgIiIgIiByZWFkcyBj b3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKysp CiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdXNob3J0X3NldCAodiwgaSwgKHVuc2lnbmVkIHNob3J0 KSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAx MDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsyICogaV0gIT0gKHVuc2lnbmVk IHNob3J0KSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwoKICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0 bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCBpLCAodW5z aWduZWQgc2hvcnQpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VzaG9ydF9zd2FwX2VsZW1lbnRz ICh2LCAyLCA1KSA7CgogIHN0YXR1cyA9IChnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiwyKSAhPSA1 KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiw1KSAhPSAyKSA7CgogIGdz bF92ZWN0b3JfdXNob3J0X3N3YXBfZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzIHw9IChn c2xfdmVjdG9yX3VzaG9ydF9nZXQodiwyKSAhPSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9y X3VzaG9ydF9nZXQodiw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9y X3VzaG9ydCIgIl9zd2FwX2VsZW1lbnRzIiAiIiAiIGV4Y2hhbmdlcyBlbGVtZW50cyBjb3JyZWN0 bHkiKSA7CgogIHN0YXR1cyA9IDA7CgogIGdzbF92ZWN0b3JfdXNob3J0X3JldmVyc2UgKHYpIDsK CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgc3RhdHVzIHw9IChnc2xf dmVjdG9yX3VzaG9ydF9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBzaG9ydCkgKDEwMjcgLSBpIC0g MSkpOwogICAgfQoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfcmV2 ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0bHkiKSA7CgogIHsKICAgIHVuc2ln bmVkIHNob3J0IGV4cF9tYXggPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQodiwgMCk7CiAgICB1bnNp Z25lZCBzaG9ydCBleHBfbWluID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0KHYsIDApOwogICAgc2l6 ZV90IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBrID0gZ3NsX3ZlY3Rvcl91c2hv cnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBf bWluID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0g aTsKICAgICAgICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgayA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAodiwg aSkgOwogICAgICAgIGlmIChrID4gZXhwX21heCkgewogICAgICAgICAgZXhwX21heCA9IGdzbF92 ZWN0b3JfdXNob3J0X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAg IH0KICAgICAgfQoKICAgIHsKICAgICAgdW5zaWduZWQgc2hvcnQgbWF4ID0gZ3NsX3ZlY3Rvcl91 c2hvcnRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVj dG9yX3VzaG9ydCIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgIH0K CiAgICB7CiAgICAgIHVuc2lnbmVkIHNob3J0IG1pbiA9IGdzbF92ZWN0b3JfdXNob3J0X21pbiAo dikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl91c2hvcnQi ICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAg ICB1bnNpZ25lZCBzaG9ydCBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfbWlubWF4 ICh2LCAmbWluLCAmbWF4KTsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhwX21heCwgImdzbF92 ZWN0b3JfdXNob3J0IiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwog ICAgICBnc2xfdGVzdCAobWluICE9IGV4cF9taW4sICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9taW5t YXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBz aXplX3QgaW1heCA9IGdzbF92ZWN0b3JfdXNob3J0X21heF9pbmRleCAodikgOwoKICAgICAgZ3Ns X3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9tYXhfaW5kZXgg cmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGlt aW4gPSBnc2xfdmVjdG9yX3VzaG9ydF9taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChp bWluICE9IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfbWluX2luZGV4IHJldHVybnMg Y29ycmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluLCBpbWF4 OwoKICAgICAgZ3NsX3ZlY3Rvcl91c2hvcnRfbWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgp OwoKICAgICAgZ3NsX3Rlc3QgKGltYXggIT0gZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VzaG9ydCIg Il9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVz dCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0b3JfdXNob3J0IiAiX21pbm1heF9pbmRleCBy ZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9CiAgfQoKCiAgewogICAgZ3NsX3ZlY3Rv cl91c2hvcnQgKiBhID0gZ3NsX3ZlY3Rvcl91c2hvcnRfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92 ZWN0b3JfdXNob3J0ICogYiA9IGdzbF92ZWN0b3JfdXNob3J0X2NhbGxvYyAoMTAyNyk7CgogICAg Zm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGdzbF92ZWN0b3JfdXNo b3J0X3NldCAoYSwgaSwgKHVuc2lnbmVkIHNob3J0KSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0 b3JfdXNob3J0X3NldCAoYiwgaSwgKHVuc2lnbmVkIHNob3J0KSgzICsgMiAqIGkpKTsKICAgICAg fQoKICAgIGdzbF92ZWN0b3JfdXNob3J0X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3Vz aG9ydF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3Ig KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0 IHIgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9y dCB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hv cnQgeSA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNo b3J0IHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9 IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQi ICJfYWRkIGFkZHMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfdXNob3J0X21l bWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VzaG9ydF9zdWIgKHYsIGIpOwoKICAgIHsKICAg ICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHIgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQg KHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0 IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hvcnQgeSA9IGdzbF92ZWN0b3JfdXNob3J0X2dl dCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHogPSB4IC0geTsKICAgICAgICAgIGlm IChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVz dCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHki KTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3Zl Y3Rvcl91c2hvcnRfbXVsICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAg ICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25l ZCBzaG9ydCByID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LGkpOwogICAgICAgICAgdW5zaWdu ZWQgc2hvcnQgeCA9IGdzbF92ZWN0b3JfdXNob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2ln bmVkIHNob3J0IHkgPSBnc2xfdmVjdG9yX3VzaG9ydF9nZXQgKGIsaSk7CiAgICAgICAgICB1bnNp Z25lZCBzaG9ydCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBz dGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jf dXNob3J0IiAiX211bCBtdWx0aXBsaWVzIGNvcnJlY3RseSIpOwogICAgfQoKICAgIGdzbF92ZWN0 b3JfdXNob3J0X21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VzaG9ydF9kaXYgKHYsIGIp OwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAy NzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHIgPSBnc2xfdmVjdG9y X3VzaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4ID0gZ3NsX3ZlY3Rv cl91c2hvcnRfZ2V0IChhLGkpOwogICAgICAgICAgdW5zaWduZWQgc2hvcnQgeSA9IGdzbF92ZWN0 b3JfdXNob3J0X2dldCAoYixpKTsKICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHogPSB4IC8geTsK ICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3ICog ZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0 IChzdGF0dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9kaXYgZGl2aWRlcyBjb3JyZWN0bHkiKTsK ICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl91c2hvcnRfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3Vz aG9ydF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKHYpOwp9CgoK dm9pZAp0ZXN0X3VzaG9ydF9iaW5hcnkgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VzaG9ydCAqIHYg PSBnc2xfdmVjdG9yX3VzaG9ydF9jYWxsb2MgKDEwMjcpOwogIGdzbF92ZWN0b3JfdXNob3J0ICog dyA9IGdzbF92ZWN0b3JfdXNob3J0X2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAg ICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkg PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3VzaG9ydF9zZXQgKHYsIGks ICh1bnNpZ25lZCBzaG9ydCkgKDEwMjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91 c2hvcnRfZndyaXRlIChmLCB2KTsKCiAgICBmY2xvc2UgKGYpOwogIH0KCiAgewogICAgRklMRSAq ZiA9IGZvcGVuICgidGVzdC5kYXQiLCAicmIiKTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mcmVh ZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp CiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAodW5zaWduZWQgc2hvcnQpICgxMDI3 IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0 dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl93cml0ZSBhbmQgcmVhZCB3b3JrIGNvcnJlY3RseSIp OwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3VzaG9ydF9mcmVlICh2KTsKICBn c2xfdmVjdG9yX3VzaG9ydF9mcmVlICh3KTsKfQoKdm9pZAp0ZXN0X3VzaG9ydF90cmFwICh2b2lk KQp7CiAgZ3NsX3ZlY3Rvcl91c2hvcnQgKiB2ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfYWxsb2MgKDEw MjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3Zl Y3Rvcl91c2hvcnRfc2V0ICh2LCBqIC0gMSwgKHVuc2lnbmVkIHNob3J0KTApOwogIGdzbF90ZXN0 ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfc2V0IHRyYXBzIGluZGV4IGJlbG93IGxv d2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCAx MDI3ICsgMSwgKHVuc2lnbmVkIHNob3J0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3Zl Y3Rvcl91c2hvcnQiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0 YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91c2hvcnRfc2V0ICh2LCAxMDI3LCAodW5zaWduZWQgc2hv cnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9zZXQgdHJh cHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rv cl91c2hvcnRfZ2V0ICh2LCBqIC0gMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9y X3VzaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVz dCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfZ2V0IHJldHVybnMgemVy byBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0gZ3Ns X3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCAxMDI3ICsgMSk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJn c2xfdmVjdG9yX3VzaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsK ICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJfZ2V0IHJl dHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK ICB4ID0gZ3NsX3ZlY3Rvcl91c2hvcnRfZ2V0ICh2LCAxMDI3KTsKICBnc2xfdGVzdCAoIXN0YXR1 cywgImdzbF92ZWN0b3JfdXNob3J0IiAiX2dldCB0cmFwcyBpbmRleCBhdCB1cHBlciBib3VuZCIp OwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VzaG9ydCIgIl9n ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9y X3VzaG9ydF9mcmVlICh2KTsKfQojIDEyMCAidGVzdC5jIiAyCiMgMSAidGVzdF9pby5jIiAxCiMg MjAgInRlc3RfaW8uYyIKdm9pZCB0ZXN0X3VzaG9ydF90ZXh0ICh2b2lkKTsKCnZvaWQKdGVzdF91 c2hvcnRfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfdXNob3J0ICogdiA9IGdzbF92ZWN0b3Jf dXNob3J0X2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX3VzaG9ydCAqIHcgPSBnc2xfdmVjdG9y X3VzaG9ydF9hbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9w ZW4gKCJ0ZXN0LnR4dCIsICJ3Iik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAg ICAgewogICAgICAgIGdzbF92ZWN0b3JfdXNob3J0X3NldCAodiwgaSwgKHVuc2lnbmVkIHNob3J0 KSBpKTsKICAgICAgfTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mcHJpbnRmIChmLCB2LCAiJWh1 Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu dHh0IiwgInIiKTsKCiAgICBnc2xfdmVjdG9yX3VzaG9ydF9mc2NhbmYgKGYsIHcpOwoKICAgIHN0 YXR1cyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAg aWYgKHctPmRhdGFbaV0gIT0gKHVuc2lnbmVkIHNob3J0KSBpKQogICAgICAgICAgc3RhdHVzID0g MTsKICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91c2hvcnQiICJf ZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9 CgogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdXNob3J0X2ZyZWUg KHcpOwp9CiMgMTIxICJ0ZXN0LmMiIDIKIyAxICJ0ZW1wbGF0ZXNfb2ZmLmgiIDEKIyAxMjIgInRl c3QuYyIgMgoKCgojIDEgInRlbXBsYXRlc19vbi5oIiAxCiMgMTI2ICJ0ZXN0LmMiIDIKIyAxICJ0 ZXN0X3NvdXJjZS5jIiAxCiMgMjAgInRlc3Rfc291cmNlLmMiCnZvaWQgdGVzdF9zaG9ydF9mdW5j ICh2b2lkKTsKdm9pZCB0ZXN0X3Nob3J0X2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9zaG9ydF90 cmFwICh2b2lkKTsKCnZvaWQKdGVzdF9zaG9ydF9mdW5jICh2b2lkKQp7CiAgZ3NsX3ZlY3Rvcl9z aG9ydCAqIHY7CiAgc2l6ZV90IGk7CgogIHYgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAy Nyk7CgogIGdzbF90ZXN0ICh2LT5kYXRhID09IDAsICJnc2xfdmVjdG9yX3Nob3J0IiAiX2FsbG9j IHJldHVybnMgdmFsaWQgcG9pbnRlciIpOwogIGdzbF90ZXN0ICh2LT5zaXplICE9IDEwMjcsICJn c2xfdmVjdG9yX3Nob3J0IiAiX2FsbG9jIHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0 ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92ZWN0b3Jfc2hvcnQiICJfYWxsb2MgcmV0dXJucyB1bml0 IHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xf dmVjdG9yX3Nob3J0X3NldCAodiwgaSwgKHNob3J0KSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7 CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ld ICE9IChzaG9ydCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0 YXR1cywKICAgICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBp bnRvIGFycmF5IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwg MTAyNzsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGkpICE9 IChzaG9ydCkgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVz LAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9nZXQiICIiICIgcmVhZHMgZnJvbSBh cnJheSBjb3JyZWN0bHkiKTsKCgoKCiAgdi0+c3RyaWRlID0gMjsKCiAgc3RhdHVzID0gMDsKICBm b3IgKGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKGdzbF92ZWN0b3Jf c2hvcnRfZ2V0ICh2LCBpKSAhPSAoc2hvcnQpICgyICogaSkpCiAgICAgICAgc3RhdHVzID0gMTsK ICAgIH07CiAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IiAiIiAi IHJlYWRzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAyNyAv IDI7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkg KGkgKyAxMDAwKSk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy NyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGldICE9IChzaG9ydCkgKGkg KyAxMDAwKSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywg ImdzbF92ZWN0b3Jfc2hvcnQiICJfc2V0IiAiIiAiIHdyaXRlcyBjb3JyZWN0bHkgd2l0aCBzdHJp ZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkgaSk7CiAgICB9 CgogIGdzbF92ZWN0b3Jfc2hvcnRfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMg PSAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwyKSAhPSA1KSA7CiAgc3RhdHVzIHw9IChnc2xfdmVj dG9yX3Nob3J0X2dldCh2LDUpICE9IDIpIDsKCiAgZ3NsX3ZlY3Rvcl9zaG9ydF9zd2FwX2VsZW1l bnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwyKSAh PSAyKSA7CiAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Nob3J0X2dldCh2LDUpICE9IDUpIDsKCiAg Z3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfc3dhcF9lbGVtZW50cyIgIiIg IiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAwOwoKICBnc2xf dmVjdG9yX3Nob3J0X3JldmVyc2UgKHYpIDsKCiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykK ICAgIHsKICAgICAgc3RhdHVzIHw9IChnc2xfdmVjdG9yX3Nob3J0X2dldCAodiwgaSkgIT0gKHNo b3J0KSAoMTAyNyAtIGkgLSAxKSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yX3Nob3J0IiAiX3JldmVyc2UiICIiICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5Iikg OwoKICB7CiAgICBzaG9ydCBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwgMCk7CiAg ICBzaG9ydCBleHBfbWluID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQodiwgMCk7CiAgICBzaXplX3Qg ZXhwX2ltYXggPSAwLCBleHBfaW1pbiA9IDA7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkr KykKICAgICAgewogICAgICAgIHNob3J0IGsgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodiwgaSkg OwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAgICAgICAgZXhwX21pbiA9IGdzbF92ZWN0 b3Jfc2hvcnRfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAgICB9CiAg ICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgc2hv cnQgayA9IGdzbF92ZWN0b3Jfc2hvcnRfZ2V0ICh2LCBpKSA7CiAgICAgICAgaWYgKGsgPiBleHBf bWF4KSB7CiAgICAgICAgICBleHBfbWF4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGkpIDsK ICAgICAgICAgIGV4cF9pbWF4ID0gaTsKICAgICAgICB9CiAgICAgIH0KCiAgICB7CiAgICAgIHNo b3J0IG1heCA9IGdzbF92ZWN0b3Jfc2hvcnRfbWF4ICh2KSA7CgogICAgICBnc2xfdGVzdCAobWF4 ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX3Nob3J0IiAiX21heCByZXR1cm5zIGNvcnJlY3QgbWF4 aW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAgc2hvcnQgbWluID0gZ3NsX3ZlY3Rvcl9z aG9ydF9taW4gKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0 b3Jfc2hvcnQiICJfbWluIHJldHVybnMgY29ycmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9Cgog ICAgewogICAgICBzaG9ydCBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9taW5tYXgg KHYsICZtaW4sICZtYXgpOwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3Zl Y3Rvcl9zaG9ydCIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAg ICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5tYXgg cmV0dXJucyBjb3JyZWN0IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXpl X3QgaW1heCA9IGdzbF92ZWN0b3Jfc2hvcnRfbWF4X2luZGV4ICh2KSA7CgogICAgICBnc2xfdGVz dCAoaW1heCAhPSBleHBfaW1heCwgImdzbF92ZWN0b3Jfc2hvcnQiICJfbWF4X2luZGV4IHJldHVy bnMgY29ycmVjdCBtYXhpbXVtIGkiKTsKICAgIH0KCiAgICB7CiAgICAgIHNpemVfdCBpbWluID0g Z3NsX3ZlY3Rvcl9zaG9ydF9taW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9 IGV4cF9pbWluLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5faW5kZXggcmV0dXJucyBjb3JyZWN0 IG1pbmltdW0gaSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4sIGltYXg7CgogICAg ICBnc2xfdmVjdG9yX3Nob3J0X21pbm1heF9pbmRleCAodiwgJmltaW4sICZpbWF4KTsKCiAgICAg IGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4LCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9taW5tYXhf aW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAh PSBleHBfaW1pbiwgImdzbF92ZWN0b3Jfc2hvcnQiICJfbWlubWF4X2luZGV4IHJldHVybnMgY29y cmVjdCBtaW5pbXVtIGkiKTsKICAgIH0KICB9CgoKICB7CiAgICBnc2xfdmVjdG9yX3Nob3J0ICog YSA9IGdzbF92ZWN0b3Jfc2hvcnRfY2FsbG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3Jfc2hvcnQg KiBiID0gZ3NsX3ZlY3Rvcl9zaG9ydF9jYWxsb2MgKDEwMjcpOwoKICAgIGZvciAoaSA9IDA7IGkg PCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX3Nob3J0X3NldCAoYSwgaSwg KHNob3J0KSgzICsgaSkpOwogICAgICAgIGdzbF92ZWN0b3Jfc2hvcnRfc2V0IChiLCBpLCAoc2hv cnQpKDMgKyAyICogaSkpOwogICAgICB9CgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYs IGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0 YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAg ICAgICAgIHNob3J0IHIgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNo b3J0IHggPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBn c2xfdmVjdG9yX3Nob3J0X2dldCAoYixpKTsKICAgICAgICAgIHNob3J0IHogPSB4ICsgeTsKICAg ICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAg ICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9hZGQgYWRkcyBjb3JyZWN0 bHkiKTsKICAgIH0KCgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3Ns X3ZlY3Rvcl9zaG9ydF9zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7Cgog ICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHNob3J0 IHIgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNob3J0IHggPSBnc2xf dmVjdG9yX3Nob3J0X2dldCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBnc2xfdmVjdG9yX3No b3J0X2dldCAoYixpKTsKICAgICAgICAgIHNob3J0IHogPSB4IC0geTsKICAgICAgICAgIGlmIChy ICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAo c3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9zdWIgc3VidHJhY3RzIGNvcnJlY3RseSIpOwog ICAgfQoKICAgIGdzbF92ZWN0b3Jfc2hvcnRfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92ZWN0b3Jf c2hvcnRfbXVsICh2LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9y IChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBzaG9ydCByID0gZ3Ns X3ZlY3Rvcl9zaG9ydF9nZXQgKHYsaSk7CiAgICAgICAgICBzaG9ydCB4ID0gZ3NsX3ZlY3Rvcl9z aG9ydF9nZXQgKGEsaSk7CiAgICAgICAgICBzaG9ydCB5ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQg KGIsaSk7CiAgICAgICAgICBzaG9ydCB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQog ICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywg ImdzbF92ZWN0b3Jfc2hvcnQiICJfbXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9Cgog ICAgZ3NsX3ZlY3Rvcl9zaG9ydF9tZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9k aXYgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAw OyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHNob3J0IHIgPSBnc2xfdmVjdG9y X3Nob3J0X2dldCAodixpKTsKICAgICAgICAgIHNob3J0IHggPSBnc2xfdmVjdG9yX3Nob3J0X2dl dCAoYSxpKTsKICAgICAgICAgIHNob3J0IHkgPSBnc2xfdmVjdG9yX3Nob3J0X2dldCAoYixpKTsK ICAgICAgICAgIHNob3J0IHogPSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIg KiAxLjE5MjA5Mjg5NTUwNzgxMjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0g MTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Nob3J0IiAi X2RpdiBkaXZpZGVzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX3Nob3J0X2Zy ZWUgKGEpOwogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0 b3Jfc2hvcnRfZnJlZSAodik7Cn0KCgp2b2lkCnRlc3Rfc2hvcnRfYmluYXJ5ICh2b2lkKQp7CiAg Z3NsX3ZlY3Rvcl9zaG9ydCAqIHYgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAyNyk7CiAg Z3NsX3ZlY3Rvcl9zaG9ydCAqIHcgPSBnc2xfdmVjdG9yX3Nob3J0X2NhbGxvYyAoMTAyNyk7Cgog IHNpemVfdCBpOwoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoK ICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9y X3Nob3J0X3NldCAodiwgaSwgKHNob3J0KSAoMTAyNyAtIGkpKTsKICAgICAgfTsKCiAgICBnc2xf dmVjdG9yX3Nob3J0X2Z3cml0ZSAoZiwgdik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAg IEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9zaG9y dF9mcmVhZCAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3 OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtpXSAhPSAoc2hvcnQpICgxMDI3IC0g aSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMs ICJnc2xfdmVjdG9yX3Nob3J0IiAiX3dyaXRlIGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7Cgog ICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3Jfc2hvcnRfZnJlZSAodik7CiAgZ3NsX3Zl Y3Rvcl9zaG9ydF9mcmVlICh3KTsKfQoKdm9pZAp0ZXN0X3Nob3J0X3RyYXAgKHZvaWQpCnsKICBn c2xfdmVjdG9yX3Nob3J0ICogdiA9IGdzbF92ZWN0b3Jfc2hvcnRfYWxsb2MgKDEwMjcpOwoKICBz aXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl9zaG9y dF9zZXQgKHYsIGogLSAxLCAoc2hvcnQpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVj dG9yX3Nob3J0IiAiX3NldCB0cmFwcyBpbmRleCBiZWxvdyBsb3dlciBib3VuZCIpOwoKICBzdGF0 dXMgPSAwOwogIGdzbF92ZWN0b3Jfc2hvcnRfc2V0ICh2LCAxMDI3ICsgMSwgKHNob3J0KTApOwog IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9zZXQgdHJhcHMgaW5kZXgg YWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX3Nob3J0X3Nl dCAodiwgMTAyNywgKHNob3J0KTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9z aG9ydCIgIl9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsK ICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1 cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5k Iik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0 IHJldHVybnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0g MDsKICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAo IXN0YXR1cywgImdzbF92ZWN0b3Jfc2hvcnQiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVy IGJvdW5kIik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3Jfc2hvcnQi ICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3Rh dHVzID0gMDsKICB4ID0gZ3NsX3ZlY3Rvcl9zaG9ydF9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0 ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9zaG9ydCIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIg Ym91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl9zaG9y dCIgIl9nZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xf dmVjdG9yX3Nob3J0X2ZyZWUgKHYpOwp9CiMgMTI3ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMi IDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3Rfc2hvcnRfdGV4dCAodm9pZCk7Cgp2b2lkCnRl c3Rfc2hvcnRfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3Jfc2hvcnQgKiB2ID0gZ3NsX3ZlY3Rv cl9zaG9ydF9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl9zaG9ydCAqIHcgPSBnc2xfdmVjdG9y X3Nob3J0X2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl biAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9zaG9ydF9zZXQgKHYsIGksIChzaG9ydCkgaSk7CiAgICAg IH07CgogICAgZ3NsX3ZlY3Rvcl9zaG9ydF9mcHJpbnRmIChmLCB2LCAiJWhkIik7CgogICAgZmNs b3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QudHh0IiwgInIiKTsK CiAgICBnc2xfdmVjdG9yX3Nob3J0X2ZzY2FuZiAoZiwgdyk7CgogICAgc3RhdHVzID0gMDsKICAg IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgIHsKICAgICAgICBpZiAody0+ZGF0YVtp XSAhPSAoc2hvcnQpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90 ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3Nob3J0IiAiX2ZwcmludGYgYW5kIGZzY2FuZiB3b3Jr IGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9yX3Nob3J0X2Zy ZWUgKHYpOwogIGdzbF92ZWN0b3Jfc2hvcnRfZnJlZSAodyk7Cn0KIyAxMjggInRlc3QuYyIgMgoj IDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDEyOSAidGVzdC5jIiAyCgoKCiMgMSAidGVtcGxhdGVz X29uLmgiIDEKIyAxMzMgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEKIyAyMCAidGVz dF9zb3VyY2UuYyIKdm9pZCB0ZXN0X3VjaGFyX2Z1bmMgKHZvaWQpOwp2b2lkIHRlc3RfdWNoYXJf YmluYXJ5ICh2b2lkKTsKdm9pZCB0ZXN0X3VjaGFyX3RyYXAgKHZvaWQpOwoKdm9pZAp0ZXN0X3Vj aGFyX2Z1bmMgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdjsKICBzaXplX3QgaTsKCiAg diA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRhdGEg PT0gMCwgImdzbF92ZWN0b3JfdWNoYXIiICJfYWxsb2MgcmV0dXJucyB2YWxpZCBwb2ludGVyIik7 CiAgZ3NsX3Rlc3QgKHYtPnNpemUgIT0gMTAyNywgImdzbF92ZWN0b3JfdWNoYXIiICJfYWxsb2Mg cmV0dXJucyB2YWxpZCBzaXplIik7CiAgZ3NsX3Rlc3QgKHYtPnN0cmlkZSAhPSAxLCAiZ3NsX3Zl Y3Rvcl91Y2hhciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7 IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAo dW5zaWduZWQgY2hhcikgaSk7CiAgICB9CgoKICBzdGF0dXMgPSAwOwoKICBmb3IgKGkgPSAwOyBp IDwgMTAyNzsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVtpXSAhPSAodW5zaWduZWQgY2hh cikgaSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKCiAgZ3NsX3Rlc3QgKHN0YXR1cywKICAg ICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IiAiIiAiIHdyaXRlcyBpbnRvIGFycmF5 IGNvcnJlY3RseSIpOwoKCiAgc3RhdHVzID0gMDsKICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsr KQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25l ZCBjaGFyKSBpKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMs CiAgICAgICAgICAgICJnc2xfdmVjdG9yX3VjaGFyIiAiX2dldCIgIiIgIiByZWFkcyBmcm9tIGFy cmF5IGNvcnJlY3RseSIpOwoKCgoKICB2LT5zdHJpZGUgPSAyOwoKICBzdGF0dXMgPSAwOwogIGZv ciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAoZ3NsX3ZlY3Rvcl91 Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBjaGFyKSAoMiAqIGkpKQogICAgICAgIHN0YXR1 cyA9IDE7CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX2dl dCIgIiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAgZm9yIChpID0gMDsgaSA8 IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAo dW5zaWduZWQgY2hhcikgKGkgKyAxMDAwKSk7CiAgICB9OwoKICBzdGF0dXMgPSAwOwoKICBmb3Ig KGkgPSAwOyBpIDwgMTAyNyAvIDI7IGkrKykKICAgIHsKICAgICAgaWYgKHYtPmRhdGFbMiAqIGld ICE9ICh1bnNpZ25lZCBjaGFyKSAoaSArIDEwMDApKQogICAgICAgIHN0YXR1cyA9IDE7CiAgICB9 OwoKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9zZXQiICIiICIgd3Jp dGVzIGNvcnJlY3RseSB3aXRoIHN0cmlkZSIpOwoKCgogIHYtPnN0cmlkZSA9IDEgOwoKICBmb3Ig KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgewogICAgICBnc2xfdmVjdG9yX3VjaGFyX3NldCAo diwgaSwgKHVuc2lnbmVkIGNoYXIpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX3VjaGFyX3N3YXBf ZWxlbWVudHMgKHYsIDIsIDUpIDsKCiAgc3RhdHVzID0gKGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYs MikgIT0gNSkgOwogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQodiw1KSAhPSAyKSA7 CgogIGdzbF92ZWN0b3JfdWNoYXJfc3dhcF9lbGVtZW50cyAodiwgMiwgNSkgOwoKICBzdGF0dXMg fD0gKGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYsMikgIT0gMikgOwogIHN0YXR1cyB8PSAoZ3NsX3Zl Y3Rvcl91Y2hhcl9nZXQodiw1KSAhPSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yX3VjaGFyIiAiX3N3YXBfZWxlbWVudHMiICIiICIgZXhjaGFuZ2VzIGVsZW1lbnRzIGNvcnJl Y3RseSIpIDsKCiAgc3RhdHVzID0gMDsKCiAgZ3NsX3ZlY3Rvcl91Y2hhcl9yZXZlcnNlICh2KSA7 CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIHN0YXR1cyB8PSAoZ3Ns X3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpICE9ICh1bnNpZ25lZCBjaGFyKSAoMTAyNyAtIGkgLSAx KSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX3JldmVy c2UiICIiICIgcmV2ZXJzZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICB7CiAgICB1bnNpZ25l ZCBjaGFyIGV4cF9tYXggPSBnc2xfdmVjdG9yX3VjaGFyX2dldCh2LCAwKTsKICAgIHVuc2lnbmVk IGNoYXIgZXhwX21pbiA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0KHYsIDApOwogICAgc2l6ZV90IGV4 cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKysp CiAgICAgIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIGsgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAo diwgaSkgOwogICAgICAgIGlmIChrIDwgZXhwX21pbikgewogICAgICAgICAgZXhwX21pbiA9IGdz bF92ZWN0b3JfdWNoYXJfZ2V0ICh2LCBpKTsKICAgICAgICAgIGV4cF9pbWluID0gaTsKICAgICAg ICB9CiAgICAgIH0KCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAg ICAgdW5zaWduZWQgY2hhciBrID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGkpIDsKICAgICAg ICBpZiAoayA+IGV4cF9tYXgpIHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX3VjaGFy X2dldCAodiwgaSkgOwogICAgICAgICAgZXhwX2ltYXggPSBpOwogICAgICAgIH0KICAgICAgfQoK ICAgIHsKICAgICAgdW5zaWduZWQgY2hhciBtYXggPSBnc2xfdmVjdG9yX3VjaGFyX21heCAodikg OwoKICAgICAgZ3NsX3Rlc3QgKG1heCAhPSBleHBfbWF4LCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9t YXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFsdWUiKTsKICAgIH0KCiAgICB7CiAgICAgIHVu c2lnbmVkIGNoYXIgbWluID0gZ3NsX3ZlY3Rvcl91Y2hhcl9taW4gKHYpIDsKCiAgICAgIGdzbF90 ZXN0IChtaW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfdWNoYXIiICJfbWluIHJldHVybnMgY29y cmVjdCBtaW5pbXVtIHZhbHVlIik7CiAgICB9CgogICAgewogICAgICB1bnNpZ25lZCBjaGFyIG1p biwgbWF4OwogICAgICBnc2xfdmVjdG9yX3VjaGFyX21pbm1heCAodiwgJm1pbiwgJm1heCk7Cgog ICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1h eCByZXR1cm5zIGNvcnJlY3QgbWF4aW11bSB2YWx1ZSIpOwogICAgICBnc2xfdGVzdCAobWluICE9 IGV4cF9taW4sICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1heCByZXR1cm5zIGNvcnJlY3QgbWlu aW11bSB2YWx1ZSIpOwogICAgfQoKCiAgICB7CiAgICAgIHNpemVfdCBpbWF4ID0gZ3NsX3ZlY3Rv cl91Y2hhcl9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9pbWF4 LCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0g aSIpOwogICAgfQoKICAgIHsKICAgICAgc2l6ZV90IGltaW4gPSBnc2xfdmVjdG9yX3VjaGFyX21p bl9pbmRleCAodikgOwoKICAgICAgZ3NsX3Rlc3QgKGltaW4gIT0gZXhwX2ltaW4sICJnc2xfdmVj dG9yX3VjaGFyIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9 CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92ZWN0b3JfdWNoYXJf bWlubWF4X2luZGV4ICh2LCAmaW1pbiwgJmltYXgpOwoKICAgICAgZ3NsX3Rlc3QgKGltYXggIT0g ZXhwX2ltYXgsICJnc2xfdmVjdG9yX3VjaGFyIiAiX21pbm1heF9pbmRleCByZXR1cm5zIGNvcnJl Y3QgbWF4aW11bSBpIik7CiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl Y3Rvcl91Y2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwog ICAgfQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfdWNoYXIgKiBhID0gZ3NsX3ZlY3Rvcl91Y2hh cl9jYWxsb2MgKDEwMjcpOwogICAgZ3NsX3ZlY3Rvcl91Y2hhciAqIGIgPSBnc2xfdmVjdG9yX3Vj aGFyX2NhbGxvYyAoMTAyNyk7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAg ewogICAgICAgIGdzbF92ZWN0b3JfdWNoYXJfc2V0IChhLCBpLCAodW5zaWduZWQgY2hhcikoMyAr IGkpKTsKICAgICAgICBnc2xfdmVjdG9yX3VjaGFyX3NldCAoYiwgaSwgKHVuc2lnbmVkIGNoYXIp KDMgKyAyICogaSkpOwogICAgICB9CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9tZW1jcHkgKHYsIGEp OwogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9hZGQgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1 cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgciA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0ICh2LGkpOwogICAgICAg ICAgdW5zaWduZWQgY2hhciB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKGEsaSk7CiAgICAgICAg ICB1bnNpZ25lZCBjaGFyIHkgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYixpKTsKICAgICAgICAg IHVuc2lnbmVkIGNoYXIgeiA9IHggKyB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAgICAgICAg ICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVj dG9yX3VjaGFyIiAiX2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9y X3VjaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX3VjaGFyX3N1YiAodiwgYik7Cgog ICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp KyspCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgY2hhciByID0gZ3NsX3ZlY3Rvcl91Y2hh cl9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBjaGFyIHggPSBnc2xfdmVjdG9yX3VjaGFy X2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgeSA9IGdzbF92ZWN0b3JfdWNoYXJf Z2V0IChiLGkpOwogICAgICAgICAgdW5zaWduZWQgY2hhciB6ID0geCAtIHk7CiAgICAgICAgICBp ZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rl c3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0bHki KTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX3VjaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVj dG9yX3VjaGFyX211bCAodiwgYik7CgogICAgewogICAgICBpbnQgc3RhdHVzID0gMDsKCiAgICAg IGZvciAoaSA9IDA7IGkgPCAxMDI3OyBpKyspCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQg Y2hhciByID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICB1bnNpZ25lZCBj aGFyIHggPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYSxpKTsKICAgICAgICAgIHVuc2lnbmVkIGNo YXIgeSA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0IChiLGkpOwogICAgICAgICAgdW5zaWduZWQgY2hh ciB6ID0geCAqIHk7CiAgICAgICAgICBpZiAociAhPSB6KQogICAgICAgICAgICBzdGF0dXMgPSAx OwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJf bXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9t ZW1jcHkgKHYsIGEpOwogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9kaXYgKHYsIGIpOwoKICAgIHsKICAg ICAgaW50IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgciA9IGdzbF92ZWN0b3JfdWNoYXJfZ2V0ICh2 LGkpOwogICAgICAgICAgdW5zaWduZWQgY2hhciB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKGEs aSk7CiAgICAgICAgICB1bnNpZ25lZCBjaGFyIHkgPSBnc2xfdmVjdG9yX3VjaGFyX2dldCAoYixp KTsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgeiA9IHggLyB5OwogICAgICAgICAgaWYgKGZhYnMo ciAtIHopID4gMiAqIDEuMTkyMDkyODk1NTA3ODEyNWUtMDcgKiBmYWJzKHopKQogICAgICAgICAg ICBzdGF0dXMgPSAxOwogICAgICAgIH0KICAgICAgZ3NsX3Rlc3QgKHN0YXR1cywgImdzbF92ZWN0 b3JfdWNoYXIiICJfZGl2IGRpdmlkZXMgY29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0 b3JfdWNoYXJfZnJlZSAoYSk7CiAgICBnc2xfdmVjdG9yX3VjaGFyX2ZyZWUgKGIpOwogIH0KCgoK CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVlICh2KTsKfQoKCnZvaWQKdGVzdF91Y2hhcl9iaW5hcnkg KHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdiA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9j ICgxMDI3KTsKICBnc2xfdmVjdG9yX3VjaGFyICogdyA9IGdzbF92ZWN0b3JfdWNoYXJfY2FsbG9j ICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3QuZGF0 IiwgIndiIik7CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAg IGdzbF92ZWN0b3JfdWNoYXJfc2V0ICh2LCBpLCAodW5zaWduZWQgY2hhcikgKDEwMjcgLSBpKSk7 CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9md3JpdGUgKGYsIHYpOwoKICAgIGZjbG9z ZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJyYiIpOwoK ICAgIGdzbF92ZWN0b3JfdWNoYXJfZnJlYWQgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBm b3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0g IT0gKHVuc2lnbmVkIGNoYXIpICgxMDI3IC0gaSkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAg ICB9OwoKICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX3dyaXRlIGFu ZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0 b3JfdWNoYXJfZnJlZSAodik7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9mcmVlICh3KTsKfQoKdm9pZAp0 ZXN0X3VjaGFyX3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX3VjaGFyICogdiA9IGdzbF92ZWN0 b3JfdWNoYXJfYWxsb2MgKDEwMjcpOwoKICBzaXplX3QgaiA9IDA7CiAgZG91YmxlIHg7CgogIHN0 YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIGogLSAxLCAodW5zaWduZWQgY2hh cikwKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IHRyYXBz IGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91 Y2hhcl9zZXQgKHYsIDEwMjcgKyAxLCAodW5zaWduZWQgY2hhcikwKTsKICBnc2xfdGVzdCAoIXN0 YXR1cywgImdzbF92ZWN0b3JfdWNoYXIiICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJv dW5kIik7CgogIHN0YXR1cyA9IDA7CiAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIDEwMjcsICh1 bnNpZ25lZCBjaGFyKTApOwogIGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIg Il9zZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4ID0g Z3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIGogLSAxKTsKICBnc2xfdGVzdCAoIXN0YXR1cywgImdz bF92ZWN0b3JfdWNoYXIiICJfZ2V0IHRyYXBzIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7CiAg Z3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0IHJldHVy bnMgemVybyBmb3IgaW5kZXggYmVsb3cgbG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICB4 ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIDEwMjcgKyAxKTsKICBnc2xfdGVzdCAoIXN0YXR1 cywgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5k Iik7CiAgZ3NsX3Rlc3QgKHggIT0gMCwKICAgICAgICAgImdzbF92ZWN0b3JfdWNoYXIiICJfZ2V0 IHJldHVybnMgemVybyBmb3IgaW5kZXggYWJvdmUgdXBwZXIgYm91bmQiKTsKCiAgc3RhdHVzID0g MDsKICB4ID0gZ3NsX3ZlY3Rvcl91Y2hhcl9nZXQgKHYsIDEwMjcpOwogIGdzbF90ZXN0ICghc3Rh dHVzLCAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9nZXQgdHJhcHMgaW5kZXggYXQgdXBwZXIgYm91bmQi KTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAgICAiZ3NsX3ZlY3Rvcl91Y2hhciIgIl9n ZXQgcmV0dXJucyB6ZXJvIGZvciBpbmRleCBhdCB1cHBlciBib3VuZCIpOwoKICBnc2xfdmVjdG9y X3VjaGFyX2ZyZWUgKHYpOwp9CiMgMTM0ICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0X2lvLmMiIDEKIyAy MCAidGVzdF9pby5jIgp2b2lkIHRlc3RfdWNoYXJfdGV4dCAodm9pZCk7Cgp2b2lkCnRlc3RfdWNo YXJfdGV4dCAodm9pZCkKewogIGdzbF92ZWN0b3JfdWNoYXIgKiB2ID0gZ3NsX3ZlY3Rvcl91Y2hh cl9hbGxvYyAoMTAyNyk7CiAgZ3NsX3ZlY3Rvcl91Y2hhciAqIHcgPSBnc2xfdmVjdG9yX3VjaGFy X2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRl c3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAg ICAgICAgZ3NsX3ZlY3Rvcl91Y2hhcl9zZXQgKHYsIGksICh1bnNpZ25lZCBjaGFyKSBpKTsKICAg ICAgfTsKCiAgICBnc2xfdmVjdG9yX3VjaGFyX2ZwcmludGYgKGYsIHYsICIldSIpOwoKICAgIGZj bG9zZSAoZik7CiAgfQoKICB7CiAgICBGSUxFICpmID0gZm9wZW4gKCJ0ZXN0LnR4dCIsICJyIik7 CgogICAgZ3NsX3ZlY3Rvcl91Y2hhcl9mc2NhbmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAg ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFb aV0gIT0gKHVuc2lnbmVkIGNoYXIpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoK ICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX3VjaGFyIiAiX2ZwcmludGYgYW5kIGZz Y2FuZiB3b3JrIGNvcnJlY3RseSIpOwoKICAgIGZjbG9zZSAoZik7CiAgfQoKICBnc2xfdmVjdG9y X3VjaGFyX2ZyZWUgKHYpOwogIGdzbF92ZWN0b3JfdWNoYXJfZnJlZSAodyk7Cn0KIyAxMzUgInRl c3QuYyIgMgojIDEgInRlbXBsYXRlc19vZmYuaCIgMQojIDEzNiAidGVzdC5jIiAyCgoKCiMgMSAi dGVtcGxhdGVzX29uLmgiIDEKIyAxNDAgInRlc3QuYyIgMgojIDEgInRlc3Rfc291cmNlLmMiIDEK IyAyMCAidGVzdF9zb3VyY2UuYyIKdm9pZCB0ZXN0X2NoYXJfZnVuYyAodm9pZCk7CnZvaWQgdGVz dF9jaGFyX2JpbmFyeSAodm9pZCk7CnZvaWQgdGVzdF9jaGFyX3RyYXAgKHZvaWQpOwoKdm9pZAp0 ZXN0X2NoYXJfZnVuYyAodm9pZCkKewogIGdzbF92ZWN0b3JfY2hhciAqIHY7CiAgc2l6ZV90IGk7 CgogIHYgPSBnc2xfdmVjdG9yX2NoYXJfY2FsbG9jICgxMDI3KTsKCiAgZ3NsX3Rlc3QgKHYtPmRh dGEgPT0gMCwgImdzbF92ZWN0b3JfY2hhciIgIl9hbGxvYyByZXR1cm5zIHZhbGlkIHBvaW50ZXIi KTsKICBnc2xfdGVzdCAodi0+c2l6ZSAhPSAxMDI3LCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX2FsbG9j IHJldHVybnMgdmFsaWQgc2l6ZSIpOwogIGdzbF90ZXN0ICh2LT5zdHJpZGUgIT0gMSwgImdzbF92 ZWN0b3JfY2hhciIgIl9hbGxvYyByZXR1cm5zIHVuaXQgc3RyaWRlIik7CgogIGZvciAoaSA9IDA7 IGkgPCAxMDI3OyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfY2hhcl9zZXQgKHYsIGksIChj aGFyKSBpKTsKICAgIH0KCgogIHN0YXR1cyA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp KyspCiAgICB7CiAgICAgIGlmICh2LT5kYXRhW2ldICE9IChjaGFyKSBpKQogICAgICAgIHN0YXR1 cyA9IDE7CiAgICB9OwoKICBnc2xfdGVzdCAoc3RhdHVzLAogICAgICAgICAgICAiZ3NsX3ZlY3Rv cl9jaGFyIiAiX3NldCIgIiIgIiB3cml0ZXMgaW50byBhcnJheSBjb3JyZWN0bHkiKTsKCgogIHN0 YXR1cyA9IDA7CiAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgaWYgKGdz bF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkpICE9IChjaGFyKSBpKQogICAgICAgIHN0YXR1cyA9IDE7 CiAgICB9OwogIGdzbF90ZXN0IChzdGF0dXMsCiAgICAgICAgICAgICJnc2xfdmVjdG9yX2NoYXIi ICJfZ2V0IiAiIiAiIHJlYWRzIGZyb20gYXJyYXkgY29ycmVjdGx5Iik7CgoKCgogIHYtPnN0cmlk ZSA9IDI7CgogIHN0YXR1cyA9IDA7CiAgZm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAg ICB7CiAgICAgIGlmIChnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSAhPSAoY2hhcikgKDIgKiBp KSkKICAgICAgICBzdGF0dXMgPSAxOwogICAgfTsKICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3Zl Y3Rvcl9jaGFyIiAiX2dldCIgIiIgIiByZWFkcyBjb3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCiAg Zm9yIChpID0gMDsgaSA8IDEwMjcgLyAyOyBpKyspCiAgICB7CiAgICAgIGdzbF92ZWN0b3JfY2hh cl9zZXQgKHYsIGksIChjaGFyKSAoaSArIDEwMDApKTsKICAgIH07CgogIHN0YXR1cyA9IDA7Cgog IGZvciAoaSA9IDA7IGkgPCAxMDI3IC8gMjsgaSsrKQogICAgewogICAgICBpZiAodi0+ZGF0YVsy ICogaV0gIT0gKGNoYXIpIChpICsgMTAwMCkpCiAgICAgICAgc3RhdHVzID0gMTsKICAgIH07Cgog IGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc2V0IiAiIiAiIHdyaXRlcyBj b3JyZWN0bHkgd2l0aCBzdHJpZGUiKTsKCgoKICB2LT5zdHJpZGUgPSAxIDsKCiAgZm9yIChpID0g MDsgaSA8IDEwMjc7IGkrKykKICAgIHsKICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgaSwg KGNoYXIpIGkpOwogICAgfQoKICBnc2xfdmVjdG9yX2NoYXJfc3dhcF9lbGVtZW50cyAodiwgMiwg NSkgOwoKICBzdGF0dXMgPSAoZ3NsX3ZlY3Rvcl9jaGFyX2dldCh2LDIpICE9IDUpIDsKICBzdGF0 dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQodiw1KSAhPSAyKSA7CgogIGdzbF92ZWN0b3JfY2hh cl9zd2FwX2VsZW1lbnRzICh2LCAyLCA1KSA7CgogIHN0YXR1cyB8PSAoZ3NsX3ZlY3Rvcl9jaGFy X2dldCh2LDIpICE9IDIpIDsKICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQodiw1KSAh PSA1KSA7CgogIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc3dhcF9lbGVt ZW50cyIgIiIgIiBleGNoYW5nZXMgZWxlbWVudHMgY29ycmVjdGx5IikgOwoKICBzdGF0dXMgPSAw OwoKICBnc2xfdmVjdG9yX2NoYXJfcmV2ZXJzZSAodikgOwoKICBmb3IgKGkgPSAwOyBpIDwgMTAy NzsgaSsrKQogICAgewogICAgICBzdGF0dXMgfD0gKGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkp ICE9IChjaGFyKSAoMTAyNyAtIGkgLSAxKSk7CiAgICB9CgogIGdzbF90ZXN0IChzdGF0dXMsICJn c2xfdmVjdG9yX2NoYXIiICJfcmV2ZXJzZSIgIiIgIiByZXZlcnNlcyBlbGVtZW50cyBjb3JyZWN0 bHkiKSA7CgogIHsKICAgIGNoYXIgZXhwX21heCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQodiwgMCk7 CiAgICBjaGFyIGV4cF9taW4gPSBnc2xfdmVjdG9yX2NoYXJfZ2V0KHYsIDApOwogICAgc2l6ZV90 IGV4cF9pbWF4ID0gMCwgZXhwX2ltaW4gPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCAxMDI3OyBp KyspCiAgICAgIHsKICAgICAgICBjaGFyIGsgPSBnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSA7 CiAgICAgICAgaWYgKGsgPCBleHBfbWluKSB7CiAgICAgICAgICBleHBfbWluID0gZ3NsX3ZlY3Rv cl9jaGFyX2dldCAodiwgaSk7CiAgICAgICAgICBleHBfaW1pbiA9IGk7CiAgICAgICAgfQogICAg ICB9CgogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGNoYXIg ayA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGkpIDsKICAgICAgICBpZiAoayA+IGV4cF9tYXgp IHsKICAgICAgICAgIGV4cF9tYXggPSBnc2xfdmVjdG9yX2NoYXJfZ2V0ICh2LCBpKSA7CiAgICAg ICAgICBleHBfaW1heCA9IGk7CiAgICAgICAgfQogICAgICB9CgogICAgewogICAgICBjaGFyIG1h eCA9IGdzbF92ZWN0b3JfY2hhcl9tYXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChtYXggIT0gZXhw X21heCwgImdzbF92ZWN0b3JfY2hhciIgIl9tYXggcmV0dXJucyBjb3JyZWN0IG1heGltdW0gdmFs dWUiKTsKICAgIH0KCiAgICB7CiAgICAgIGNoYXIgbWluID0gZ3NsX3ZlY3Rvcl9jaGFyX21pbiAo dikgOwoKICAgICAgZ3NsX3Rlc3QgKG1pbiAhPSBleHBfbWluLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAi X21pbiByZXR1cm5zIGNvcnJlY3QgbWluaW11bSB2YWx1ZSIpOwogICAgfQoKICAgIHsKICAgICAg Y2hhciBtaW4sIG1heDsKICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX21pbm1heCAodiwgJm1pbiwgJm1h eCk7CgogICAgICBnc2xfdGVzdCAobWF4ICE9IGV4cF9tYXgsICJnc2xfdmVjdG9yX2NoYXIiICJf bWlubWF4IHJldHVybnMgY29ycmVjdCBtYXhpbXVtIHZhbHVlIik7CiAgICAgIGdzbF90ZXN0ICht aW4gIT0gZXhwX21pbiwgImdzbF92ZWN0b3JfY2hhciIgIl9taW5tYXggcmV0dXJucyBjb3JyZWN0 IG1pbmltdW0gdmFsdWUiKTsKICAgIH0KCgogICAgewogICAgICBzaXplX3QgaW1heCA9IGdzbF92 ZWN0b3JfY2hhcl9tYXhfaW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWF4ICE9IGV4cF9p bWF4LCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX21heF9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWF4aW11 bSBpIik7CiAgICB9CgogICAgewogICAgICBzaXplX3QgaW1pbiA9IGdzbF92ZWN0b3JfY2hhcl9t aW5faW5kZXggKHYpIDsKCiAgICAgIGdzbF90ZXN0IChpbWluICE9IGV4cF9pbWluLCAiZ3NsX3Zl Y3Rvcl9jaGFyIiAiX21pbl9pbmRleCByZXR1cm5zIGNvcnJlY3QgbWluaW11bSBpIik7CiAgICB9 CgogICAgewogICAgICBzaXplX3QgaW1pbiwgaW1heDsKCiAgICAgIGdzbF92ZWN0b3JfY2hhcl9t aW5tYXhfaW5kZXggKHYsICZpbWluLCAmaW1heCk7CgogICAgICBnc2xfdGVzdCAoaW1heCAhPSBl eHBfaW1heCwgImdzbF92ZWN0b3JfY2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0 IG1heGltdW0gaSIpOwogICAgICBnc2xfdGVzdCAoaW1pbiAhPSBleHBfaW1pbiwgImdzbF92ZWN0 b3JfY2hhciIgIl9taW5tYXhfaW5kZXggcmV0dXJucyBjb3JyZWN0IG1pbmltdW0gaSIpOwogICAg fQogIH0KCgogIHsKICAgIGdzbF92ZWN0b3JfY2hhciAqIGEgPSBnc2xfdmVjdG9yX2NoYXJfY2Fs bG9jICgxMDI3KTsKICAgIGdzbF92ZWN0b3JfY2hhciAqIGIgPSBnc2xfdmVjdG9yX2NoYXJfY2Fs bG9jICgxMDI3KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAg ICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAoYSwgaSwgKGNoYXIpKDMgKyBpKSk7CiAgICAgICAgZ3Ns X3ZlY3Rvcl9jaGFyX3NldCAoYiwgaSwgKGNoYXIpKDMgKyAyICogaSkpOwogICAgICB9CgogICAg Z3NsX3ZlY3Rvcl9jaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2NoYXJfYWRkICh2 LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBjaGFyIHIgPSBnc2xfdmVjdG9yX2NoYXJf Z2V0ICh2LGkpOwogICAgICAgICAgY2hhciB4ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAoYSxpKTsK ICAgICAgICAgIGNoYXIgeSA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKGIsaSk7CiAgICAgICAgICBj aGFyIHogPSB4ICsgeTsKICAgICAgICAgIGlmIChyICE9IHopCiAgICAgICAgICAgIHN0YXR1cyA9 IDE7CiAgICAgICAgfQogICAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAi X2FkZCBhZGRzIGNvcnJlY3RseSIpOwogICAgfQoKCiAgICBnc2xfdmVjdG9yX2NoYXJfbWVtY3B5 ICh2LCBhKTsKICAgIGdzbF92ZWN0b3JfY2hhcl9zdWIgKHYsIGIpOwoKICAgIHsKICAgICAgaW50 IHN0YXR1cyA9IDA7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsK ICAgICAgICAgIGNoYXIgciA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICBj aGFyIHggPSBnc2xfdmVjdG9yX2NoYXJfZ2V0IChhLGkpOwogICAgICAgICAgY2hhciB5ID0gZ3Ns X3ZlY3Rvcl9jaGFyX2dldCAoYixpKTsKICAgICAgICAgIGNoYXIgeiA9IHggLSB5OwogICAgICAg ICAgaWYgKHIgIT0geikKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdz bF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc3ViIHN1YnRyYWN0cyBjb3JyZWN0 bHkiKTsKICAgIH0KCiAgICBnc2xfdmVjdG9yX2NoYXJfbWVtY3B5ICh2LCBhKTsKICAgIGdzbF92 ZWN0b3JfY2hhcl9tdWwgKHYsIGIpOwoKICAgIHsKICAgICAgaW50IHN0YXR1cyA9IDA7CgogICAg ICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgciA9 IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsaSk7CiAgICAgICAgICBjaGFyIHggPSBnc2xfdmVjdG9y X2NoYXJfZ2V0IChhLGkpOwogICAgICAgICAgY2hhciB5ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAo YixpKTsKICAgICAgICAgIGNoYXIgeiA9IHggKiB5OwogICAgICAgICAgaWYgKHIgIT0geikKICAg ICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJn c2xfdmVjdG9yX2NoYXIiICJfbXVsIG11bHRpcGxpZXMgY29ycmVjdGx5Iik7CiAgICB9CgogICAg Z3NsX3ZlY3Rvcl9jaGFyX21lbWNweSAodiwgYSk7CiAgICBnc2xfdmVjdG9yX2NoYXJfZGl2ICh2 LCBiKTsKCiAgICB7CiAgICAgIGludCBzdGF0dXMgPSAwOwoKICAgICAgZm9yIChpID0gMDsgaSA8 IDEwMjc7IGkrKykKICAgICAgICB7CiAgICAgICAgICBjaGFyIHIgPSBnc2xfdmVjdG9yX2NoYXJf Z2V0ICh2LGkpOwogICAgICAgICAgY2hhciB4ID0gZ3NsX3ZlY3Rvcl9jaGFyX2dldCAoYSxpKTsK ICAgICAgICAgIGNoYXIgeSA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKGIsaSk7CiAgICAgICAgICBj aGFyIHogPSB4IC8geTsKICAgICAgICAgIGlmIChmYWJzKHIgLSB6KSA+IDIgKiAxLjE5MjA5Mjg5 NTUwNzgxMjVlLTA3ICogZmFicyh6KSkKICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICB9 CiAgICAgIGdzbF90ZXN0IChzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfZGl2IGRpdmlkZXMg Y29ycmVjdGx5Iik7CiAgICB9CgoKICAgIGdzbF92ZWN0b3JfY2hhcl9mcmVlIChhKTsKICAgIGdz bF92ZWN0b3JfY2hhcl9mcmVlIChiKTsKICB9CgoKCgogIGdzbF92ZWN0b3JfY2hhcl9mcmVlICh2 KTsKfQoKCnZvaWQKdGVzdF9jaGFyX2JpbmFyeSAodm9pZCkKewogIGdzbF92ZWN0b3JfY2hhciAq IHYgPSBnc2xfdmVjdG9yX2NoYXJfY2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX2NoYXIgKiB3 ID0gZ3NsX3ZlY3Rvcl9jaGFyX2NhbGxvYyAoMTAyNyk7CgogIHNpemVfdCBpOwoKICB7CiAgICBG SUxFICpmID0gZm9wZW4gKCJ0ZXN0LmRhdCIsICJ3YiIpOwoKICAgIGZvciAoaSA9IDA7IGkgPCAx MDI3OyBpKyspCiAgICAgIHsKICAgICAgICBnc2xfdmVjdG9yX2NoYXJfc2V0ICh2LCBpLCAoY2hh cikgKDEwMjcgLSBpKSk7CiAgICAgIH07CgogICAgZ3NsX3ZlY3Rvcl9jaGFyX2Z3cml0ZSAoZiwg dik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIHsKICAgIEZJTEUgKmYgPSBmb3BlbiAoInRlc3Qu ZGF0IiwgInJiIik7CgogICAgZ3NsX3ZlY3Rvcl9jaGFyX2ZyZWFkIChmLCB3KTsKCiAgICBzdGF0 dXMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjc7IGkrKykKICAgICAgewogICAgICAgIGlm ICh3LT5kYXRhW2ldICE9IChjaGFyKSAoMTAyNyAtIGkpKQogICAgICAgICAgc3RhdHVzID0gMTsK ICAgICAgfTsKCiAgICBnc2xfdGVzdCAoc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX3dyaXRl IGFuZCByZWFkIHdvcmsgY29ycmVjdGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92 ZWN0b3JfY2hhcl9mcmVlICh2KTsKICBnc2xfdmVjdG9yX2NoYXJfZnJlZSAodyk7Cn0KCnZvaWQK dGVzdF9jaGFyX3RyYXAgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NoYXIgKiB2ID0gZ3NsX3ZlY3Rv cl9jaGFyX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGogPSAwOwogIGRvdWJsZSB4OwoKICBzdGF0 dXMgPSAwOwogIGdzbF92ZWN0b3JfY2hhcl9zZXQgKHYsIGogLSAxLCAoY2hhcikwKTsKICBnc2xf dGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9zZXQgdHJhcHMgaW5kZXggYmVsb3cg bG93ZXIgYm91bmQiKTsKCiAgc3RhdHVzID0gMDsKICBnc2xfdmVjdG9yX2NoYXJfc2V0ICh2LCAx MDI3ICsgMSwgKGNoYXIpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0dXMsICJnc2xfdmVjdG9yX2NoYXIi ICJfc2V0IHRyYXBzIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5kIik7CgogIHN0YXR1cyA9IDA7CiAg Z3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgMTAyNywgKGNoYXIpMCk7CiAgZ3NsX3Rlc3QgKCFzdGF0 dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfc2V0IHRyYXBzIGluZGV4IGF0IHVwcGVyIGJvdW5kIik7 CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIGogLSAxKTsKICBn c2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9nZXQgdHJhcHMgaW5kZXggYmVs b3cgbG93ZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3ZlY3Rv cl9jaGFyIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGJlbG93IGxvd2VyIGJvdW5kIik7 CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIDEwMjcgKyAxKTsK ICBnc2xfdGVzdCAoIXN0YXR1cywgImdzbF92ZWN0b3JfY2hhciIgIl9nZXQgdHJhcHMgaW5kZXgg YWJvdmUgdXBwZXIgYm91bmQiKTsKICBnc2xfdGVzdCAoeCAhPSAwLAogICAgICAgICAiZ3NsX3Zl Y3Rvcl9jaGFyIiAiX2dldCByZXR1cm5zIHplcm8gZm9yIGluZGV4IGFib3ZlIHVwcGVyIGJvdW5k Iik7CgogIHN0YXR1cyA9IDA7CiAgeCA9IGdzbF92ZWN0b3JfY2hhcl9nZXQgKHYsIDEwMjcpOwog IGdzbF90ZXN0ICghc3RhdHVzLCAiZ3NsX3ZlY3Rvcl9jaGFyIiAiX2dldCB0cmFwcyBpbmRleCBh dCB1cHBlciBib3VuZCIpOwogIGdzbF90ZXN0ICh4ICE9IDAsCiAgICAgICAgICAgICJnc2xfdmVj dG9yX2NoYXIiICJfZ2V0IHJldHVybnMgemVybyBmb3IgaW5kZXggYXQgdXBwZXIgYm91bmQiKTsK CiAgZ3NsX3ZlY3Rvcl9jaGFyX2ZyZWUgKHYpOwp9CiMgMTQxICJ0ZXN0LmMiIDIKIyAxICJ0ZXN0 X2lvLmMiIDEKIyAyMCAidGVzdF9pby5jIgp2b2lkIHRlc3RfY2hhcl90ZXh0ICh2b2lkKTsKCnZv aWQKdGVzdF9jaGFyX3RleHQgKHZvaWQpCnsKICBnc2xfdmVjdG9yX2NoYXIgKiB2ID0gZ3NsX3Zl Y3Rvcl9jaGFyX2FsbG9jICgxMDI3KTsKICBnc2xfdmVjdG9yX2NoYXIgKiB3ID0gZ3NsX3ZlY3Rv cl9jaGFyX2FsbG9jICgxMDI3KTsKCiAgc2l6ZV90IGk7CgogIHsKICAgIEZJTEUgKmYgPSBmb3Bl biAoInRlc3QudHh0IiwgInciKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAg ICB7CiAgICAgICAgZ3NsX3ZlY3Rvcl9jaGFyX3NldCAodiwgaSwgKGNoYXIpIGkpOwogICAgICB9 OwoKICAgIGdzbF92ZWN0b3JfY2hhcl9mcHJpbnRmIChmLCB2LCAiJWQiKTsKCiAgICBmY2xvc2Ug KGYpOwogIH0KCiAgewogICAgRklMRSAqZiA9IGZvcGVuICgidGVzdC50eHQiLCAiciIpOwoKICAg IGdzbF92ZWN0b3JfY2hhcl9mc2NhbmYgKGYsIHcpOwoKICAgIHN0YXR1cyA9IDA7CiAgICBmb3Ig KGkgPSAwOyBpIDwgMTAyNzsgaSsrKQogICAgICB7CiAgICAgICAgaWYgKHctPmRhdGFbaV0gIT0g KGNoYXIpIGkpCiAgICAgICAgICBzdGF0dXMgPSAxOwogICAgICB9OwoKICAgIGdzbF90ZXN0IChz dGF0dXMsICJnc2xfdmVjdG9yX2NoYXIiICJfZnByaW50ZiBhbmQgZnNjYW5mIHdvcmsgY29ycmVj dGx5Iik7CgogICAgZmNsb3NlIChmKTsKICB9CgogIGdzbF92ZWN0b3JfY2hhcl9mcmVlICh2KTsK ICBnc2xfdmVjdG9yX2NoYXJfZnJlZSAodyk7Cn0KIyAxNDIgInRlc3QuYyIgMgojIDEgInRlbXBs YXRlc19vZmYuaCIgMQojIDE0MyAidGVzdC5jIiAyCgoKdm9pZCBteV9lcnJvcl9oYW5kbGVyIChj b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgaW50IGxpbmUsIGludCBlcnIpOwoKaW50Cm1haW4gKHZvaWQpCnsKICBnc2xfaWVlZV9lbnZf c2V0dXAgKCk7CgogIHRlc3RfZnVuYyAoKTsKICB0ZXN0X2Zsb2F0X2Z1bmMgKCk7CiAgdGVzdF9s b25nX2RvdWJsZV9mdW5jICgpOwogIHRlc3RfdWxvbmdfZnVuYyAoKTsKICB0ZXN0X2xvbmdfZnVu YyAoKTsKICB0ZXN0X3VpbnRfZnVuYyAoKTsKICB0ZXN0X2ludF9mdW5jICgpOwogIHRlc3RfdXNo b3J0X2Z1bmMgKCk7CiAgdGVzdF9zaG9ydF9mdW5jICgpOwogIHRlc3RfdWNoYXJfZnVuYyAoKTsK ICB0ZXN0X2NoYXJfZnVuYyAoKTsKICB0ZXN0X2NvbXBsZXhfZnVuYyAoKTsKICB0ZXN0X2NvbXBs ZXhfZmxvYXRfZnVuYyAoKTsKICB0ZXN0X2NvbXBsZXhfbG9uZ19kb3VibGVfZnVuYyAoKTsKCiAg dGVzdF90ZXh0ICgpOwogIHRlc3RfZmxvYXRfdGV4dCAoKTsKCiAgdGVzdF9sb25nX2RvdWJsZV90 ZXh0ICgpOwoKICB0ZXN0X3Vsb25nX3RleHQgKCk7CiAgdGVzdF9sb25nX3RleHQgKCk7CiAgdGVz dF91aW50X3RleHQgKCk7CiAgdGVzdF9pbnRfdGV4dCAoKTsKICB0ZXN0X3VzaG9ydF90ZXh0ICgp OwogIHRlc3Rfc2hvcnRfdGV4dCAoKTsKICB0ZXN0X3VjaGFyX3RleHQgKCk7CiAgdGVzdF9jaGFy X3RleHQgKCk7CiAgdGVzdF9jb21wbGV4X3RleHQgKCk7CiAgdGVzdF9jb21wbGV4X2Zsb2F0X3Rl eHQgKCk7CgogIHRlc3RfY29tcGxleF9sb25nX2RvdWJsZV90ZXh0ICgpOwoKCiAgdGVzdF9iaW5h cnkgKCk7CiAgdGVzdF9mbG9hdF9iaW5hcnkgKCk7CiAgdGVzdF9sb25nX2RvdWJsZV9iaW5hcnkg KCk7CiAgdGVzdF91bG9uZ19iaW5hcnkgKCk7CiAgdGVzdF9sb25nX2JpbmFyeSAoKTsKICB0ZXN0 X3VpbnRfYmluYXJ5ICgpOwogIHRlc3RfaW50X2JpbmFyeSAoKTsKICB0ZXN0X3VzaG9ydF9iaW5h cnkgKCk7CiAgdGVzdF9zaG9ydF9iaW5hcnkgKCk7CiAgdGVzdF91Y2hhcl9iaW5hcnkgKCk7CiAg dGVzdF9jaGFyX2JpbmFyeSAoKTsKICB0ZXN0X2NvbXBsZXhfYmluYXJ5ICgpOwogIHRlc3RfY29t cGxleF9mbG9hdF9iaW5hcnkgKCk7CiAgdGVzdF9jb21wbGV4X2xvbmdfZG91YmxlX2JpbmFyeSAo KTsKCiAgZ3NsX3dhcm5pbmdzX29mZiA9IDE7CgogIGdzbF9zZXRfZXJyb3JfaGFuZGxlciAoJm15 X2Vycm9yX2hhbmRsZXIpOwoKICB0ZXN0X3RyYXAgKCk7CiAgdGVzdF9mbG9hdF90cmFwICgpOwog IHRlc3RfbG9uZ19kb3VibGVfdHJhcCAoKTsKICB0ZXN0X3Vsb25nX3RyYXAgKCk7CiAgdGVzdF9s b25nX3RyYXAgKCk7CiAgdGVzdF91aW50X3RyYXAgKCk7CiAgdGVzdF9pbnRfdHJhcCAoKTsKICB0 ZXN0X3VzaG9ydF90cmFwICgpOwogIHRlc3Rfc2hvcnRfdHJhcCAoKTsKICB0ZXN0X3VjaGFyX3Ry YXAgKCk7CiAgdGVzdF9jaGFyX3RyYXAgKCk7CiAgdGVzdF9jb21wbGV4X3RyYXAgKCk7CiAgdGVz dF9jb21wbGV4X2Zsb2F0X3RyYXAgKCk7CiAgdGVzdF9jb21wbGV4X2xvbmdfZG91YmxlX3RyYXAg KCk7CgogIGV4aXQgKGdzbF90ZXN0X3N1bW1hcnkgKCkpOwp9Cgp2b2lkCm15X2Vycm9yX2hhbmRs ZXIgKGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBl cnIpCnsKICBpZiAoMCkKICAgIHByaW50ZiAoIihjYXVnaHQgWyVzOiVkOiAlcyAoJWQpXSlcbiIs IGZpbGUsIGxpbmUsIHJlYXNvbiwgZXJyKTsKICBzdGF0dXMgPSAxOwp9Cg==