From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20005 invoked by alias); 16 Apr 2002 13:06:05 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 19984 invoked by uid 71); 16 Apr 2002 13:06:03 -0000 Resent-Date: 16 Apr 2002 13:06:03 -0000 Resent-Message-ID: <20020416130603.19983.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, mark@codesourceryjason@redhat.com Resent-Reply-To: gcc-gnats@gcc.gnu.org, gbeauchesne@mandrakesoft.com Received:(qmail 18650 invoked by uid 61); 16 Apr 2002 12:58:36 -0000 Message-Id:<20020416125836.18648.qmail@sources.redhat.com> Date: Tue, 16 Apr 2002 06:06:00 -0000 From: gbeauchesne@mandrakesoft.com Reply-To: gbeauchesne@mandrakesoft.com To: gcc-gnats@gcc.gnu.org Cc: mark@codesourceryjason@redhat.com X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify:mark@codesourceryjason@redhat.com Subject: optimization/6323: GCC 3.1 regression from previous snapshot X-SW-Source: 2002-04/txt/msg00832.txt.bz2 List-Id: >Number: 6323 >Category: optimization >Synopsis: GCC 3.1 regression from previous snapshot >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Apr 16 06:06:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Gwenole Beauchesne >Release: GNU C++ version 3.1 20020416 (prerelease) >Organization: >Environment: i586-mandrake-linux-gnu >Description: GCC now fails to compile libjava/exception.cc with optimizations. ../../../libjava/exception.cc:30: Internal compiler error in genrtl_finish_function, at cp/semantics.c:2622 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: Compile the attached preprocessed source from libjava/exception.cc with -O1 -finline-functions. >Fix: Don't use -finline-functions or fallback to snapshot 2002/03/25. Note that the problem appears with snapshot from 2002/04/01. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="exception.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="exception.ii" IyAxICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEg Ijxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIgojIDEx ICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIKIyAxICJpbmNsdWRlL2NvbmZpZy5oIiAx CiMgMTIgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCgojIDEgIi9ob21lL2diL3Jw bS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMTQ3ICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1t YW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRy ZGlmZl90OwojIDIwMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJh a2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50 IHNpemVfdDsKIyAxNCAiLi4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiIDIKIyAxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEg Ii9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9n Y2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIg MSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2Vu ZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNy L2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVz LmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAg ICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVk IGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsK ICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVk OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7 CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50 OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0 cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVm IHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2 X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBp bnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgg KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19u cHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRv aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9s ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxv bmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo cm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjEx ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAx IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs ZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25z dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9s b3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAyMTIg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv bmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j YWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBk b3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf dCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4 dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBf X3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWdu ZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRl bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxp bmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0 b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJv dyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g X19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50 IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5z aWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf X2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4g X19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwg KF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1 cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBp bnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkg c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUg bG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4g c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy KSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwg MTApOwp9CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEg KGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg MjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQv Z2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7 CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90 OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5 cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0 eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYg X191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9p bnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg X19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5 cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy XTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpf X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxv bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90 OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w dGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVk ZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hl ZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg MiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBp bnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVj dCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7 CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2No ZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29w ZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpf X3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5 cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0 aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNp Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y ZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBp bnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJl YWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy ZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVk ZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg X19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0 ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3Ig X19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsK fSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7 CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9s YXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0 IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQg X19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2Jh cnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2Jh cnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMg MTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3No b3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xv bmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7 CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoK CnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsK CgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsK CgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoK CgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7 CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsK CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90 OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1l LmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5 cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi9ob21lL2diL3JwbS9C VUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hv cnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19R SV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I SV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T SV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19E SV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50 MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlw ZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkp OwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBz aWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9z ZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRl ZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9f ZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgog IH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVj dCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAg ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAg ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0 IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAg ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAg ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93 ICgpOwoKCn0KIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRl ZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90 OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYg X19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmls Y250NjRfdDsKCgp9CiMgMzkxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRl cm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9t ICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0 YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpz ZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9t X2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMy X3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCBy YW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3Ig KHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg ICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNy YW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1Zikg dGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj aGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFy ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJh bmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3Nl ZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQp IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsK ZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4g bG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg aW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpl eHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4g dW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZb M10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19w YXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2ln bmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0 OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5k NDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y ZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50 IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5k NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5k NDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2ln bmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy YW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9f c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk IGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQg Kl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1 ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMu MS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJu IHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBf X3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g aW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwg c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQp KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRl bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2Vj dXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRl bnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3Jl cGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJv dyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1w IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1 MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpf X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIg Kl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmls ZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19y ZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNv bXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpf X2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy biB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBp bnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4 dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMg KGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBs ZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3Qg bGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g Y2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy ICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0 aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq X19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg dGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBx ZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2No YXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJf dCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3 Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg dGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRz dWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg c2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg cG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdy YW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9f ZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBf X25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgMTUgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9u LmNjIiAyCgojIDEgIi4uLy4uLy4uL2xpYmphdmEvamF2YS9sYW5nL0NsYXNzLmgiIDEKIyAxNSAi Li4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIKI3ByYWdtYSBpbnRlcmZhY2UKCiMg MSAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiIDEKIyAxNCAiLi4vLi4vLi4v bGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgIi4uLy4u Ly4uL2xpYmphdmEvZ2NqL2phdmFwcmltcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2xpYmphdmEvZ2Nq L2phdmFwcmltcy5oIgojcHJhZ21hIEdDQyBqYXZhX2V4Y2VwdGlvbnMKCiMgMSAiZ2NqL2xpYmdj ai1jb25maWcuaCIgMQojIDE4ICIuLi8uLi8uLi9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMgoj IDI5ICIuLi8uLi8uLi9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIKZXh0ZXJuICJKYXZhIgp7CiAg dHlwZWRlZiBfX2phdmFfYnl0ZSBqYnl0ZTsKICB0eXBlZGVmIF9famF2YV9zaG9ydCBqc2hvcnQ7 CiAgdHlwZWRlZiBfX2phdmFfaW50IGppbnQ7CiAgdHlwZWRlZiBfX2phdmFfbG9uZyBqbG9uZzsK ICB0eXBlZGVmIF9famF2YV9mbG9hdCBqZmxvYXQ7CiAgdHlwZWRlZiBfX2phdmFfZG91YmxlIGpk b3VibGU7CiAgdHlwZWRlZiBfX2phdmFfY2hhciBqY2hhcjsKICB0eXBlZGVmIF9famF2YV9ib29s ZWFuIGpib29sZWFuOwogIHR5cGVkZWYgamludCBqc2l6ZTsKCgoKICBuYW1lc3BhY2UgamF2YQog IHsKICAgIG5hbWVzcGFjZSBpbwogICAgewogICAgICBjbGFzcyBCdWZmZXJlZElucHV0U3RyZWFt OwogICAgICBjbGFzcyBCdWZmZXJlZE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnVmZmVyZWRS ZWFkZXI7CiAgICAgIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyOwogICAgICBjbGFzcyBCeXRlQXJyYXlJ bnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwogICAgICBjbGFz cyBDaGFyQXJyYXlSZWFkZXI7CiAgICAgIGNsYXNzIENoYXJBcnJheVdyaXRlcjsKICAgICAgY2xh c3MgQ2hhckNvbnZlcnNpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIERhdGFJbnB1dDsKICAgICAg Y2xhc3MgRGF0YUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBEYXRhT3V0cHV0OwogICAgICBjbGFz cyBEYXRhT3V0cHV0U3RyZWFtOwogICAgICBjbGFzcyBFT0ZFeGNlcHRpb247CiAgICAgIGNsYXNz IEV4dGVybmFsaXphYmxlOwogICAgICBjbGFzcyBGaWxlOwogICAgICBjbGFzcyBGaWxlRGVzY3Jp cHRvcjsKICAgICAgY2xhc3MgRmlsZUZpbHRlcjsKICAgICAgY2xhc3MgRmlsZUlucHV0U3RyZWFt OwogICAgICBjbGFzcyBGaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgIGNsYXNzIEZpbGVPdXRw dXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbGVQZXJtaXNzaW9uOwogICAgICBjbGFzcyBGaWxlUmVh ZGVyOwogICAgICBjbGFzcyBGaWxlV3JpdGVyOwogICAgICBjbGFzcyBGaWxlbmFtZUZpbHRlcjsK ICAgICAgY2xhc3MgRmlsdGVySW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbHRlck91dHB1dFN0 cmVhbTsKICAgICAgY2xhc3MgRmlsdGVyUmVhZGVyOwogICAgICBjbGFzcyBGaWx0ZXJXcml0ZXI7 CiAgICAgIGNsYXNzIElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnB1dFN0cmVhbTsKICAgICAg Y2xhc3MgSW5wdXRTdHJlYW1SZWFkZXI7CiAgICAgIGNsYXNzIEludGVyZmFjZUNvbXBhcmF0b3I7 CiAgICAgIGNsYXNzIEludGVycnVwdGVkSU9FeGNlcHRpb247CiAgICAgIGNsYXNzIEludmFsaWRD bGFzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW52YWxpZE9iamVjdEV4Y2VwdGlvbjsKICAgICAg Y2xhc3MgTGluZU51bWJlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBMaW5lTnVtYmVyUmVhZGVy OwogICAgICBjbGFzcyBNZW1iZXJDb21wYXJhdG9yOwogICAgICBjbGFzcyBOb3RBY3RpdmVFeGNl cHRpb247CiAgICAgIGNsYXNzIE5vdFNlcmlhbGl6YWJsZUV4Y2VwdGlvbjsKICAgICAgY2xhc3Mg T2JqZWN0SW5wdXQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0U3RyZWFtOwogICAgICBjbGFzcyBP YmplY3RJbnB1dFN0cmVhbSRHZXRGaWVsZDsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXRWYWxpZGF0 aW9uOwogICAgICBjbGFzcyBPYmplY3RPdXRwdXQ7CiAgICAgIGNsYXNzIE9iamVjdE91dHB1dFN0 cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0T3V0cHV0U3RyZWFtJFB1dEZpZWxkOwogICAgICBjbGFz cyBPYmplY3RTdHJlYW1DbGFzczsKICAgICAgY2xhc3MgT2JqZWN0U3RyZWFtQ29uc3RhbnRzOwog ICAgICBjbGFzcyBPYmplY3RTdHJlYW1FeGNlcHRpb247CiAgICAgIGNsYXNzIE9iamVjdFN0cmVh bUZpZWxkOwogICAgICBjbGFzcyBPcHRpb25hbERhdGFFeGNlcHRpb247CiAgICAgIGNsYXNzIE91 dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT3V0cHV0U3RyZWFtV3JpdGVyOwogICAgICBjbGFzcyBQ aXBlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBQaXBlZE91dHB1dFN0cmVhbTsKICAgICAgY2xh c3MgUGlwZWRSZWFkZXI7CiAgICAgIGNsYXNzIFBpcGVkV3JpdGVyOwogICAgICBjbGFzcyBQcmlu dFN0cmVhbTsKICAgICAgY2xhc3MgUHJpbnRXcml0ZXI7CiAgICAgIGNsYXNzIFB1c2hiYWNrSW5w dXRTdHJlYW07CiAgICAgIGNsYXNzIFB1c2hiYWNrUmVhZGVyOwogICAgICBjbGFzcyBSYW5kb21B Y2Nlc3NGaWxlOwogICAgICBjbGFzcyBSZWFkZXI7CiAgICAgIGNsYXNzIFNlcXVlbmNlSW5wdXRT dHJlYW07CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZTsKICAgICAgY2xhc3MgU2VyaWFsaXphYmxl UGVybWlzc2lvbjsKICAgICAgY2xhc3MgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uOwogICAgICBj bGFzcyBTdHJlYW1Ub2tlbml6ZXI7CiAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcklucHV0U3RyZWFt OwogICAgICBjbGFzcyBTdHJpbmdSZWFkZXI7CiAgICAgIGNsYXNzIFN0cmluZ1dyaXRlcjsKICAg ICAgY2xhc3MgU3luY0ZhaWxlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgVVRGRGF0YUZvcm1hdEV4 Y2VwdGlvbjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKICAgICAg Y2xhc3MgVmFsaWRhdG9yQW5kUHJpb3JpdHk7CiAgICAgIGNsYXNzIFdyaXRlQWJvcnRlZEV4Y2Vw dGlvbjsKICAgICAgY2xhc3MgV3JpdGVyOwogICAgfTsKCiAgICBuYW1lc3BhY2UgbGFuZwogICAg ewogICAgICBjbGFzcyBBYnN0cmFjdE1ldGhvZEVycm9yOwogICAgICBjbGFzcyBBcml0aG1ldGlj RXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb247CiAg ICAgIGNsYXNzIEFycmF5U3RvcmVFeGNlcHRpb247CiAgICAgIGNsYXNzIEJvb2xlYW47CiAgICAg IGNsYXNzIEJ5dGU7CiAgICAgIGNsYXNzIENQbHVzUGx1c0RlbWFuZ2xlcjsKICAgICAgY2xhc3Mg Q2hhclNlcXVlbmNlOwogICAgICBjbGFzcyBDaGFyYWN0ZXI7CiAgICAgIGNsYXNzIENoYXJhY3Rl ciRTdWJzZXQ7CiAgICAgIGNsYXNzIENoYXJhY3RlciRVbmljb2RlQmxvY2s7CiAgICAgIGNsYXNz IENsYXNzOwogICAgICBjbGFzcyBDbGFzc0Nhc3RFeGNlcHRpb247CiAgICAgIGNsYXNzIENsYXNz Q2lyY3VsYXJpdHlFcnJvcjsKICAgICAgY2xhc3MgQ2xhc3NGb3JtYXRFcnJvcjsKICAgICAgY2xh c3MgQ2xhc3NMb2FkZXI7CiAgICAgIGNsYXNzIENsYXNzTm90Rm91bmRFeGNlcHRpb247CiAgICAg IGNsYXNzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogICAgICBjbGFzcyBDbG9uZWFibGU7 CiAgICAgIGNsYXNzIENvbXBhcmFibGU7CiAgICAgIGNsYXNzIENvbXBpbGVyOwogICAgICBjbGFz cyBDb25jcmV0ZVByb2Nlc3M7CiAgICAgIGNsYXNzIERvdWJsZTsKICAgICAgY2xhc3MgRXJyb3I7 CiAgICAgIGNsYXNzIEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRXhjZXB0aW9uSW5Jbml0aWFsaXpl ckVycm9yOwogICAgICBjbGFzcyBGbG9hdDsKICAgICAgY2xhc3MgSWxsZWdhbEFjY2Vzc0Vycm9y OwogICAgICBjbGFzcyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbGxlZ2Fs QXJndW1lbnRFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRp b247CiAgICAgIGNsYXNzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgSWxsZWdh bFRocmVhZFN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbmNvbXBhdGlibGVDbGFzc0NoYW5n ZUVycm9yOwogICAgICBjbGFzcyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBjbGFz cyBJbmhlcml0YWJsZVRocmVhZExvY2FsOwogICAgICBjbGFzcyBJbnN0YW50aWF0aW9uRXJyb3I7 CiAgICAgIGNsYXNzIEluc3RhbnRpYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIEludGVnZXI7 CiAgICAgIGNsYXNzIEludGVybmFsRXJyb3I7CiAgICAgIGNsYXNzIEludGVycnVwdGVkRXhjZXB0 aW9uOwogICAgICBjbGFzcyBMaW5rYWdlRXJyb3I7CiAgICAgIGNsYXNzIExvbmc7CiAgICAgIGNs YXNzIE1hdGg7CiAgICAgIGNsYXNzIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uOwogICAgICBj bGFzcyBOb0NsYXNzRGVmRm91bmRFcnJvcjsKICAgICAgY2xhc3MgTm9TdWNoRmllbGRFcnJvcjsK ICAgICAgY2xhc3MgTm9TdWNoRmllbGRFeGNlcHRpb247CiAgICAgIGNsYXNzIE5vU3VjaE1ldGhv ZEVycm9yOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFeGNlcHRpb247CiAgICAgIGNsYXNzIE51 bGxQb2ludGVyRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdW1iZXI7CiAgICAgIGNsYXNzIE51bWJl ckZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JqZWN0OwogICAgICBjbGFzcyBPdXRPZk1l bW9yeUVycm9yOwogICAgICBjbGFzcyBQYWNrYWdlOwogICAgICBjbGFzcyBQcm9jZXNzOwogICAg ICBjbGFzcyBSdW5uYWJsZTsKICAgICAgY2xhc3MgUnVudGltZTsKICAgICAgY2xhc3MgUnVudGlt ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgUnVudGltZVBlcm1pc3Npb247CiAgICAgIGNsYXNzIFNl Y3VyaXR5Q29udGV4dDsKICAgICAgY2xhc3MgU2VjdXJpdHlFeGNlcHRpb247CiAgICAgIGNsYXNz IFNlY3VyaXR5TWFuYWdlcjsKICAgICAgY2xhc3MgU2hvcnQ7CiAgICAgIGNsYXNzIFN0YWNrT3Zl cmZsb3dFcnJvcjsKICAgICAgY2xhc3MgU3RyaWN0TWF0aDsKICAgICAgY2xhc3MgU3RyaW5nOwog ICAgICBjbGFzcyBTdHJpbmckQ2FzZUluc2Vuc2l0aXZlQ29tcGFyYXRvcjsKICAgICAgY2xhc3Mg U3RyaW5nQnVmZmVyOwogICAgICBjbGFzcyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u OwogICAgICBjbGFzcyBTeXN0ZW07CiAgICAgIGNsYXNzIFRocmVhZDsKICAgICAgY2xhc3MgVGhy ZWFkRGVhdGg7CiAgICAgIGNsYXNzIFRocmVhZEdyb3VwOwogICAgICBjbGFzcyBUaHJlYWRMb2Nh bDsKICAgICAgY2xhc3MgVGhyZWFkTG9jYWwkVmFsdWU7CiAgICAgIGNsYXNzIFRocm93YWJsZTsK ICAgICAgY2xhc3MgVW5rbm93bkVycm9yOwogICAgICBjbGFzcyBVbnNhdGlzZmllZExpbmtFcnJv cjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcjsKICAgICAgY2xhc3Mg VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIFZNQ2xhc3NMb2FkZXI7 CiAgICAgIGNsYXNzIFZNU2VjdXJpdHlNYW5hZ2VyOwogICAgICBjbGFzcyBWZXJpZnlFcnJvcjsK ICAgICAgY2xhc3MgVmlydHVhbE1hY2hpbmVFcnJvcjsKICAgICAgY2xhc3MgVm9pZDsKICAgICAg bmFtZXNwYWNlIHJlZgogICAgICB7CiAgICAgICAgY2xhc3MgUGhhbnRvbVJlZmVyZW5jZTsKICAg ICAgICBjbGFzcyBSZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNlUXVldWU7CiAgICAg ICAgY2xhc3MgU29mdFJlZmVyZW5jZTsKICAgICAgICBjbGFzcyBXZWFrUmVmZXJlbmNlOwogICAg ICB9OwoKICAgICAgbmFtZXNwYWNlIHJlZmxlY3QKICAgICAgewogICAgICAgIGNsYXNzIEFjY2Vz c2libGVPYmplY3Q7CiAgICAgICAgY2xhc3MgQXJyYXk7CiAgICAgICAgY2xhc3MgQ29uc3RydWN0 b3I7CiAgICAgICAgY2xhc3MgRmllbGQ7CiAgICAgICAgY2xhc3MgSW52b2NhdGlvblRhcmdldEV4 Y2VwdGlvbjsKICAgICAgICBjbGFzcyBNZW1iZXI7CiAgICAgICAgY2xhc3MgTWV0aG9kOwogICAg ICAgIGNsYXNzIE1vZGlmaWVyOwogICAgICAgIGNsYXNzIFJlZmxlY3RQZXJtaXNzaW9uOwogICAg ICB9OwogICAgfTsKCiAgICBuYW1lc3BhY2UgdXRpbAogICAgewogICAgICBjbGFzcyBBYnN0cmFj dENvbGxlY3Rpb247CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdDsKICAgICAgY2xhc3MgQWJzdHJh Y3RMaXN0JEFic3RyYWN0TGlzdEl0cjsKICAgICAgY2xhc3MgQWJzdHJhY3RNYXA7CiAgICAgIGNs YXNzIEFic3RyYWN0U2VxdWVudGlhbExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0U2V0OwogICAg ICBjbGFzcyBBcnJheUxpc3Q7CiAgICAgIGNsYXNzIEFycmF5czsKICAgICAgY2xhc3MgQXJyYXlz JExpc3RJbXBsOwogICAgICBjbGFzcyBCYXNpY01hcEVudHJ5OwogICAgICBjbGFzcyBCaXRTZXQ7 CiAgICAgIGNsYXNzIENhbGVuZGFyOwogICAgICBjbGFzcyBDb2xsZWN0aW9uOwogICAgICBjbGFz cyBDb2xsZWN0aW9uczsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkUmV2ZXJzZUNvbXBhcmF0b3I7 CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZENvbGxlY3Rpb247CiAgICAgIGNs YXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZEl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0 aW9ucyRTeW5jaHJvbml6ZWRMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6 ZWRMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZE1hcDsK ICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkU2V0OwogICAgICBjbGFzcyBDb2xs ZWN0aW9ucyRTeW5jaHJvbml6ZWRTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5 bmNocm9uaXplZFNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxl Q29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlSXRlcmF0b3I7 CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3Q7CiAgICAgIGNsYXNzIENv bGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3RJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlv bnMkVW5tb2RpZmlhYmxlTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFibGVT ZXQ7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZVNvcnRlZE1hcDsKICAgICAg Y2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlU29ydGVkU2V0OwogICAgICBjbGFzcyBDb21w YXJhdG9yOwogICAgICBjbGFzcyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogICAg ICBjbGFzcyBEYXRlOwogICAgICBjbGFzcyBEaWN0aW9uYXJ5OwogICAgICBjbGFzcyBFbXB0eVN0 YWNrRXhjZXB0aW9uOwogICAgICBjbGFzcyBFbnVtZXJhdGlvbjsKICAgICAgY2xhc3MgRXZlbnRM aXN0ZW5lcjsKICAgICAgY2xhc3MgRXZlbnRPYmplY3Q7CiAgICAgIGNsYXNzIEdyZWdvcmlhbkNh bGVuZGFyOwogICAgICBjbGFzcyBIYXNoTWFwOwogICAgICBjbGFzcyBIYXNoTWFwJEhhc2hFbnRy eTsKICAgICAgY2xhc3MgSGFzaE1hcCRIYXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIEhhc2hTZXQ7 CiAgICAgIGNsYXNzIEhhc2h0YWJsZTsKICAgICAgY2xhc3MgSGFzaHRhYmxlJEVudW1lcmF0b3I7 CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRI YXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcDsKICAgICAgY2xhc3MgSWRl bnRpdHlIYXNoTWFwJElkZW50aXR5SXRlcmF0b3I7CiAgICAgIGNsYXNzIEl0ZXJhdG9yOwogICAg ICBjbGFzcyBMaW5rZWRIYXNoTWFwOwogICAgICBjbGFzcyBMaW5rZWRIYXNoTWFwJExpbmtlZEhh c2hFbnRyeTsKICAgICAgY2xhc3MgTGlua2VkTGlzdDsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRF bnRyeTsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRMaW5rZWRMaXN0SXRyOwogICAgICBjbGFzcyBM aXN0OwogICAgICBjbGFzcyBMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIExpc3RSZXNvdXJjZUJ1 bmRsZTsKICAgICAgY2xhc3MgTG9jYWxlOwogICAgICBjbGFzcyBNYXA7CiAgICAgIGNsYXNzIE1h cCRFbnRyeTsKICAgICAgY2xhc3MgTWFwJE1hcDsKICAgICAgY2xhc3MgTWlzc2luZ1Jlc291cmNl RXhjZXB0aW9uOwogICAgICBjbGFzcyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogICAgICBjbGFz cyBPYnNlcnZhYmxlOwogICAgICBjbGFzcyBPYnNlcnZlcjsKICAgICAgY2xhc3MgUHJvcGVydGll czsKICAgICAgY2xhc3MgUHJvcGVydHlQZXJtaXNzaW9uOwogICAgICBjbGFzcyBQcm9wZXJ0eVJl c291cmNlQnVuZGxlOwogICAgICBjbGFzcyBSYW5kb207CiAgICAgIGNsYXNzIFJhbmRvbUFjY2Vz czsKICAgICAgY2xhc3MgUmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIFNldDsKICAgICAgY2xh c3MgU2ltcGxlVGltZVpvbmU7CiAgICAgIGNsYXNzIFNvcnRlZE1hcDsKICAgICAgY2xhc3MgU29y dGVkU2V0OwogICAgICBjbGFzcyBTdGFjazsKICAgICAgY2xhc3MgU3RyaW5nVG9rZW5pemVyOwog ICAgICBjbGFzcyBTdWJMaXN0OwogICAgICBjbGFzcyBUaW1lWm9uZTsKICAgICAgY2xhc3MgVGlt ZXI7CiAgICAgIGNsYXNzIFRpbWVyJFNjaGVkdWxlcjsKICAgICAgY2xhc3MgVGltZXIkVGFza1F1 ZXVlOwogICAgICBjbGFzcyBUaW1lclRhc2s7CiAgICAgIGNsYXNzIFRvb01hbnlMaXN0ZW5lcnNF eGNlcHRpb247CiAgICAgIGNsYXNzIFRyZWVNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkTm9kZTsK ICAgICAgY2xhc3MgVHJlZU1hcCRTdWJNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkVHJlZUl0ZXJh dG9yOwogICAgICBjbGFzcyBUcmVlTWFwJFZlcmlmeVJlc3VsdDsKICAgICAgY2xhc3MgVHJlZVNl dDsKICAgICAgY2xhc3MgVmVjdG9yOwogICAgICBjbGFzcyBXZWFrSGFzaE1hcDsKICAgICAgY2xh c3MgV2Vha0hhc2hNYXAkRW50cnk7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtCdWNrZXQ7 CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtFbnRyeVNldDsKICAgICAgbmFtZXNwYWNlIGph cgogICAgICB7CiAgICAgICAgY2xhc3MgQXR0cmlidXRlczsKICAgICAgICBjbGFzcyBBdHRyaWJ1 dGVzJE5hbWU7CiAgICAgICAgY2xhc3MgSmFyRW50cnk7CiAgICAgICAgY2xhc3MgSmFyRXhjZXB0 aW9uOwogICAgICAgIGNsYXNzIEphckZpbGU7CiAgICAgICAgY2xhc3MgSmFyRmlsZSRKYXJFbnVt ZXJhdGlvbjsKICAgICAgICBjbGFzcyBKYXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBKYXJP dXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgTWFuaWZlc3Q7CiAgICAgIH07CgogICAgICBuYW1l c3BhY2UgemlwCiAgICAgIHsKICAgICAgICBjbGFzcyBBZGxlcjMyOwogICAgICAgIGNsYXNzIENS QzMyOwogICAgICAgIGNsYXNzIENoZWNrZWRJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBDaGVj a2VkT3V0cHV0U3RyZWFtOwogICAgICAgIGNsYXNzIENoZWNrc3VtOwogICAgICAgIGNsYXNzIERh dGFGb3JtYXRFeGNlcHRpb247CiAgICAgICAgY2xhc3MgRGVmbGF0ZXI7CiAgICAgICAgY2xhc3Mg RGVmbGF0ZXJPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgR1pJUElucHV0U3RyZWFtOwogICAg ICAgIGNsYXNzIEdaSVBPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSW5mbGF0ZXI7CiAgICAg ICAgY2xhc3MgSW5mbGF0ZXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBaaXBDb25zdGFudHM7 CiAgICAgICAgY2xhc3MgWmlwRW50cnk7CiAgICAgICAgY2xhc3MgWmlwRW51bWVyYXRpb247CiAg ICAgICAgY2xhc3MgWmlwRXhjZXB0aW9uOwogICAgICAgIGNsYXNzIFppcEZpbGU7CiAgICAgICAg Y2xhc3MgWmlwSW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwT3V0cHV0U3RyZWFtOwogICAg ICB9OwogICAgfTsKICB9Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgamF2YTo6bGFuZzo6T2JqZWN0KiBq b2JqZWN0Owp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzKiBqY2xhc3M7CnR5cGVkZWYg Y2xhc3MgamF2YTo6bGFuZzo6VGhyb3dhYmxlKiBqdGhyb3dhYmxlOwp0eXBlZGVmIGNsYXNzIGph dmE6Omxhbmc6OlN0cmluZyoganN0cmluZzsKc3RydWN0IF9Kdl9KTklFbnY7Cgp0eXBlZGVmIHN0 cnVjdCBfSnZfRmllbGQgKmpmaWVsZElEOwp0eXBlZGVmIHN0cnVjdCBfSnZfTWV0aG9kICpqbWV0 aG9kSUQ7CgpleHRlcm4gIkMiIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQp IF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxv Y09iamVjdE5vRmluYWxpemVyIChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9j X18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5vSW5pdE5vRmluYWxpemVy IChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCiAgZXh0ZXJuICJD IiBqb2JqZWN0IF9Kdl9BbGxvY1B0ckZyZWVPYmplY3QgKGpjbGFzcywgamludCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4 dGVybiAiQyIgamJvb2xlYW4gX0p2X0lzSW5zdGFuY2VPZihqb2JqZWN0LCBqY2xhc3MpOwpleHRl cm4gIkMiIGpzdHJpbmcgX0p2X0FsbG9jU3RyaW5nKGpzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21h bGxvY19fKSk7CmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nIChjb25zdCBqY2hhcios IGpzaXplKQogIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGppbnQgX0p2X0Zv cm1hdEludCAoamNoYXIqIGJ1ZmVuZCwgamludCBudW0pOwpleHRlcm4gIkMiIGpjaGFyKiBfSnZf R2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9y RW50ZXIgKGpvYmplY3QpOwpleHRlcm4gIkMiIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0 KTsKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEoY29uc3QgY2hhciosIGpz aXplKQogIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZf R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3Ry aW5nVVRGUmVnaW9uIChqc3RyaW5nLCBqc2l6ZSwganNpemUsIGNoYXIgKik7CgpleHRlcm4gamlu dCBfSnZfQ3JlYXRlSmF2YVZNICh2b2lkKiApOwoKdm9pZApfSnZfVGhyZWFkUnVuIChqYXZhOjps YW5nOjpUaHJlYWQqIHRocmVhZCk7CmppbnQKX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQoamF2YTo6 bGFuZzo6VGhyZWFkKiB0aHJlYWQpOwpleHRlcm4gIkMiIGphdmE6Omxhbmc6OlRocmVhZCoKX0p2 X0F0dGFjaEN1cnJlbnRUaHJlYWQoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRHcm91 cCogZ3JvdXApOwpleHRlcm4gIkMiIGppbnQgX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQp OwoKZXh0ZXJuICJDIiB2b2lkIF9Kdl9UaHJvdyAoanRocm93YWJsZSkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9NYWxsb2MgKGpzaXplKSBfX2F0 dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgdm9pZCogX0p2X1JlYWxsb2MgKHZv aWQgKiwganNpemUpOwpleHRlcm4gIkMiIHZvaWQgX0p2X0ZyZWUgKHZvaWQqKTsKZXh0ZXJuIHZv aWQgKCpfSnZfUmVnaXN0ZXJDbGFzc0hvb2spIChqY2xhc3MgY2wpOwpleHRlcm4gIkMiIHZvaWQg X0p2X1JlZ2lzdGVyQ2xhc3NIb29rRGVmYXVsdCAoamNsYXNzKTsKCnR5cGVkZWYgdW5zaWduZWQg c2hvcnQgX0p2X3VzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9Kdl91aW50IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykp KTsKCnN0cnVjdCBfSnZfVXRmOENvbnN0CnsKICBfSnZfdXNob3J0IGhhc2g7CiAgX0p2X3VzaG9y dCBsZW5ndGg7CiAgY2hhciBkYXRhWzFdOwp9OwojIDE3ICIuLi8uLi8uLi9saWJqYXZhL2phdmEv bGFuZy9PYmplY3QuaCIgMgoKCgpzdHJ1Y3QgX0p2T2JqZWN0UHJlZml4CnsKcHJvdGVjdGVkOgoK ICB2aXJ0dWFsIHZvaWQgbmFjZF8xICh2b2lkKSB7fTsKCgogICAgdmlydHVhbCB2b2lkIG5hY2Rf MiAodm9pZCkge307Cgp9OwoKY2xhc3MgamF2YTo6bGFuZzo6T2JqZWN0IDogcHVibGljIF9Kdk9i amVjdFByZWZpeAp7CnByb3RlY3RlZDoKICB2aXJ0dWFsIHZvaWQgZmluYWxpemUgKHZvaWQpOwpw dWJsaWM6CgogIGpjbGFzcyBnZXRDbGFzcyAodm9pZCk7CiAgdmlydHVhbCBqaW50IGhhc2hDb2Rl ICh2b2lkKTsKICB2b2lkIG5vdGlmeSAodm9pZCk7CiAgdm9pZCBub3RpZnlBbGwgKHZvaWQpOwog IHZvaWQgd2FpdCAoamxvbmcgdGltZW91dCwgamludCBuYW5vcyk7CiAgdmlydHVhbCBqYm9vbGVh biBlcXVhbHMgKGpvYmplY3Qgb2JqKTsKICBPYmplY3QgKHZvaWQpOwogIHZpcnR1YWwganN0cmlu ZyB0b1N0cmluZyAodm9pZCk7CiAgdm9pZCB3YWl0ICh2b2lkKTsKICB2b2lkIHdhaXQgKGpsb25n IHRpbWVvdXQpOwoKICBmcmllbmQgdm9pZCBfSnZfTW9uaXRvckVudGVyIChqb2JqZWN0IG9iaik7 CiAgZnJpZW5kIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0IG9iaik7CiAgZnJpZW5kIHZv aWQgX0p2X0luaXRpYWxpemVTeW5jTXV0ZXggKHZvaWQpOwogIGZyaWVuZCB2b2lkIF9Kdl9GaW5h bGl6ZU9iamVjdCAoam9iamVjdCBvYmopOwojIDYwICIuLi8uLi8uLi9saWJqYXZhL2phdmEvbGFu Zy9PYmplY3QuaCIKICBzdGF0aWMgamF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwoKcHJvdGVjdGVk OgogIHZpcnR1YWwgam9iamVjdCBjbG9uZSAodm9pZCk7Cgpwcml2YXRlOgojIDc0ICIuLi8uLi8u Li9saWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKICAgIHZvaWQgc3luY19pbml0ICh2b2lkKTsK fTsKIyAxOCAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEv bGFuZy9TdHJpbmcuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKIyAxICIuLi8uLi8uLi9s aWJqYXZhL2djai9hcnJheS5oIiAxCiMgMTYgIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2FycmF5Lmgi CmV4dGVybiAiSmF2YSIgewoKY2xhc3MgX19KQXJyYXkgOiBwdWJsaWMgamF2YTo6bGFuZzo6T2Jq ZWN0CnsKcHJvdGVjdGVkOgoKCgogIF9fSkFycmF5ICgpIDogbGVuZ3RoICgwKQogIHsKICB9CnB1 YmxpYzoKICBjb25zdCBqc2l6ZSBsZW5ndGg7CiAgZnJpZW5kIGpzaXplIEp2R2V0QXJyYXlMZW5n dGggKF9fSkFycmF5Kik7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBKQXJyYXkgOiBwdWJs aWMgX19KQXJyYXkKewogIFQgZGF0YVswXTsKcHVibGljOgogIGZyaWVuZCBUKiBlbGVtZW50czw+ KEpBcnJheTxUPiYgeCk7CiAgZnJpZW5kIFQqIGVsZW1lbnRzPD4oSkFycmF5PFQ+KiB4KTsKCgp9 OwoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFQqIGVsZW1lbnRzKEpBcnJheTxUPiYgeCkgeyBy ZXR1cm4geC5kYXRhOyB9CnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJy YXk8VD4qIHgpIHsgcmV0dXJuIHgtPmRhdGE7IH0KCn07CgoKdHlwZWRlZiBfX0pBcnJheSAqamFy cmF5Owp0eXBlZGVmIEpBcnJheTxqb2JqZWN0PiAqam9iamVjdEFycmF5Owp0eXBlZGVmIEpBcnJh eTxqYm9vbGVhbj4gKmpib29sZWFuQXJyYXk7CnR5cGVkZWYgSkFycmF5PGpieXRlPiAqamJ5dGVB cnJheTsKdHlwZWRlZiBKQXJyYXk8amNoYXI+ICpqY2hhckFycmF5Owp0eXBlZGVmIEpBcnJheTxq c2hvcnQ+ICpqc2hvcnRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amludD4gKmppbnRBcnJheTsKdHlw ZWRlZiBKQXJyYXk8amxvbmc+ICpqbG9uZ0FycmF5Owp0eXBlZGVmIEpBcnJheTxqZmxvYXQ+ICpq ZmxvYXRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amRvdWJsZT4gKmpkb3VibGVBcnJheTsKdHlwZWRl ZiBKQXJyYXk8anN0cmluZz4gKmpzdHJpbmdBcnJheTsKCmV4dGVybiBqYXZhOjpsYW5nOjpDbGFz cyBfSnZfYnl0ZUNsYXNzLCBfSnZfc2hvcnRDbGFzcywgX0p2X2ludENsYXNzLAogIF9Kdl9sb25n Q2xhc3MsIF9Kdl9ib29sZWFuQ2xhc3MsIF9Kdl9jaGFyQ2xhc3MsIF9Kdl9mbG9hdENsYXNzLAog IF9Kdl9kb3VibGVDbGFzcywgX0p2X3ZvaWRDbGFzczsKCgpleHRlcm4gIkMiIGpvYmplY3RBcnJh eSBfSnZfTmV3T2JqZWN0QXJyYXkoanNpemUgbGVuZ3RoLCBqY2xhc3MsIGpvYmplY3QgaW5pdCk7 CmV4dGVybiAiQyIgam9iamVjdCBfSnZfTmV3UHJpbUFycmF5IChqY2xhc3MgZWx0eXBlLCBqaW50 IGNvdW50KTsKCmV4dGVybiBpbmxpbmUgam9iamVjdEFycmF5Ckp2TmV3T2JqZWN0QXJyYXkgKGpz aXplIGxlbmd0aCwgamNsYXNzIGNscywgam9iamVjdCBpbml0KQp7CiAgcmV0dXJuIF9Kdl9OZXdP YmplY3RBcnJheSAobGVuZ3RoLCBjbHMsIGluaXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyQXJy YXkKSnZOZXdDaGFyQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqY2hhckFycmF5KSBf SnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfY2hhckNsYXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlu bGluZSBqYm9vbGVhbkFycmF5Ckp2TmV3Qm9vbGVhbkFycmF5IChqaW50IGxlbmd0aCkKewogIHJl dHVybiAoamJvb2xlYW5BcnJheSkgX0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Jvb2xlYW5DbGFz cyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamJ5dGVBcnJheQpKdk5ld0J5dGVBcnJheSAo amludCBsZW5ndGgpCnsKICByZXR1cm4gKGpieXRlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgm IF9Kdl9ieXRlQ2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpzaG9ydEFycmF5Ckp2 TmV3U2hvcnRBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpzaG9ydEFycmF5KSBfSnZf TmV3UHJpbUFycmF5ICgoJiBfSnZfc2hvcnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxp bmUgamludEFycmF5Ckp2TmV3SW50QXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqaW50 QXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9pbnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4 dGVybiBpbmxpbmUgamxvbmdBcnJheQpKdk5ld0xvbmdBcnJheSAoamludCBsZW5ndGgpCnsKICBy ZXR1cm4gKGpsb25nQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9sb25nQ2xhc3MpLCBs ZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpmbG9hdEFycmF5Ckp2TmV3RmxvYXRBcnJheSAoamlu dCBsZW5ndGgpCnsKICByZXR1cm4gKGpmbG9hdEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBf SnZfZmxvYXRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamRvdWJsZUFycmF5Ckp2 TmV3RG91YmxlQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqZG91YmxlQXJyYXkpIF9K dl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9kb3VibGVDbGFzcyksIGxlbmd0aCk7Cn0KCgpleHRlcm4g IkMiIGpzdHJpbmdBcnJheSBKdkNvbnZlcnRBcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJn dik7CgppbmxpbmUganNpemUgSnZHZXRBcnJheUxlbmd0aCAoamFycmF5IGFycmF5KSB7IHJldHVy biBhcnJheS0+bGVuZ3RoOyB9CiMgMTAgImphdmEvbGFuZy9TdHJpbmcuaCIgMgoKZXh0ZXJuICJK YXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAg bmFtZXNwYWNlIHJ1bnRpbWUKICAgICAgewogICAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAg ICAgfQogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bGFuZzo6U3RyaW5nIDogcHVibGljIDo6 amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFN0cmluZyAoKTsKICBTdHJpbmcgKDo6amF2 YTo6bGFuZzo6U3RyaW5nICopOwogIFN0cmluZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIg Kik7CnB1YmxpYzoKICBTdHJpbmcgKDo6Z251OjpnY2o6OnJ1bnRpbWU6OlN0cmluZ0J1ZmZlciAq KTsKcHVibGljOgogIFN0cmluZyAoamNoYXJBcnJheSk7CiAgU3RyaW5nIChqY2hhckFycmF5LCBq aW50LCBqaW50KTsKICBTdHJpbmcgKGpieXRlQXJyYXkpOwogIFN0cmluZyAoamJ5dGVBcnJheSwg amludCwgamludCk7CiAgU3RyaW5nIChqYnl0ZUFycmF5LCA6OmphdmE6Omxhbmc6OlN0cmluZyAq KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQsIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5n ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJy YXkpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJy YXksIGppbnQsIGppbnQpOwogIFN0cmluZyAoamJ5dGVBcnJheSwgamludCk7CiAgU3RyaW5nIChq Ynl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9T dHJpbmcgKCkgeyByZXR1cm4gdGhpczsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5n OjpPYmplY3QgKik7CiAgamludCBoYXNoQ29kZSAoKTsKICBqaW50IGxlbmd0aCAoKSB7IHJldHVy biBjb3VudDsgfQogIGpjaGFyIGNoYXJBdCAoamludCk7CiAgdm9pZCBnZXRDaGFycyAoamludCwg amludCwgamNoYXJBcnJheSwgamludCk7CiAgamJ5dGVBcnJheSBnZXRCeXRlcyAoKTsKICBqYnl0 ZUFycmF5IGdldEJ5dGVzICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIGdldEJ5dGVz IChqaW50LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50KTsKICBqY2hhckFycmF5IHRvQ2hhckFycmF5 ICgpOwogIGpib29sZWFuIGVxdWFsc0lnbm9yZUNhc2UgKDo6amF2YTo6bGFuZzo6U3RyaW5nICop OwogIGppbnQgY29tcGFyZVRvICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNvbXBh cmVUbyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamludCBjb21wYXJlVG9JZ25vcmVDYXNl ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqaW50 LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCBqaW50KTsKICBqYm9vbGVhbiByZWdpb25N YXRjaGVzIChqYm9vbGVhbiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgamlu dCk7CiAgamJvb2xlYW4gc3RhcnRzV2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJv b2xlYW4gc3RhcnRzV2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamJvb2xl YW4gZW5kc1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoamlu dCk7CiAgamludCBpbmRleE9mIChqaW50LCBqaW50KTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6 bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwg amludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamlu dCwgamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAg amludCBsYXN0SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgOjpqYXZh OjpsYW5nOjpDaGFyU2VxdWVuY2UgKnN1YlNlcXVlbmNlIChqaW50LCBqaW50KTsKICA6OmphdmE6 Omxhbmc6OlN0cmluZyAqc3Vic3RyaW5nIChqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq c3Vic3RyaW5nIChqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29uY2F0ICg6 OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVwbGFjZSAo amNoYXIsIGpjaGFyKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9Mb3dlckNhc2UgKDo6amF2 YTo6dXRpbDo6TG9jYWxlICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAo OjpqYXZhOjp1dGlsOjpMb2NhbGUgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJD YXNlICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoKTsKICA6OmphdmE6 Omxhbmc6OlN0cmluZyAqdHJpbSAoKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZh bHVlT2YgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0 cmluZyAqdmFsdWVPZiAoamNoYXJBcnJheSk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5n ICp2YWx1ZU9mIChqY2hhckFycmF5LCBqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5n OjpTdHJpbmcgKnZhbHVlT2YgKGpib29sZWFuKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJp bmcgKnZhbHVlT2YgKGpjaGFyKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVl T2YgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamxvbmcp OwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamZsb2F0KTsKICBzdGF0 aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpkb3VibGUpOwogIDo6amF2YTo6bGFu Zzo6U3RyaW5nICppbnRlcm4gKCk7CnByaXZhdGU6CiAgdm9pZCBpbml0ICgpOwogIHZvaWQgaW5p dCAoamNoYXJBcnJheSwgamludCwgamludCwgamJvb2xlYW4pOwogIHZvaWQgaW5pdCAoamJ5dGVB cnJheSwgamludCwgamludCwgamludCk7CiAgdm9pZCBpbml0IChqYnl0ZUFycmF5LCBqaW50LCBq aW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgdm9pZCByZWhhc2ggKCk7CiAg OjpqYXZhOjpsYW5nOjpPYmplY3QgKmRhdGE7CiAgamludCBib2Zmc2V0OwogIGppbnQgY291bnQ7 CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjg0OTc5NDQ3MDc1NDY2 NzcxMExMOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6dXRpbDo6Q29tcGFyYXRvciAqQ0FTRV9J TlNFTlNJVElWRV9PUkRFUjsKICBmcmllbmQgamNoYXIqIF9Kdl9HZXRTdHJpbmdDaGFycyAoanN0 cmluZyBzdHIpOwogIGZyaWVuZCBqc3RyaW5nKiBfSnZfU3RyaW5nRmluZFNsb3QgKGpjaGFyKiwg amludCwgamludCk7CiAgZnJpZW5kIGpzdHJpbmcqIF9Kdl9TdHJpbmdHZXRTbG90IChqc3RyaW5n KTsKICBmcmllbmQganN0cmluZyBfSnZfTmV3U3RyaW5nVXRmOENvbnN0IChfSnZfVXRmOENvbnN0 KiBzdHIpOwogIGZyaWVuZCBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIq LCBqc2l6ZSk7CiAgZnJpZW5kIGpzdHJpbmcgX0p2X0FsbG9jU3RyaW5nIChqc2l6ZSk7CgogIHN0 YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAxOSAiLi4vLi4vLi4vbGliamF2 YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbmV0L1VSTC5oIiAxCgoKCgoKI3ByYWdt YSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGphdmEKICB7CiAgICBu YW1lc3BhY2UgbmV0CiAgICB7CiAgICAgIGNsYXNzIFVSTENvbm5lY3Rpb247CiAgICAgIGNsYXNz IFVSTDsKICAgICAgY2xhc3MgVVJMU3RyZWFtSGFuZGxlckZhY3Rvcnk7CiAgICAgIGNsYXNzIFVS TFN0cmVhbUhhbmRsZXI7CiAgICB9CiAgfQp9OwoKY2xhc3MgOjpqYXZhOjpuZXQ6OlVSTCA6IHB1 YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBVUkwgKDo6amF2YTo6bGFuZzo6 U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3Ry aW5nICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJp bmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmlu ZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAq LCA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqKTsKICBVUkwgKDo6amF2YTo6bGFuZzo6 U3RyaW5nICopOwogIFVSTCAoOjpqYXZhOjpuZXQ6OlVSTCAqLCA6OmphdmE6Omxhbmc6OlN0cmlu ZyAqKTsKICBVUkwgKDo6amF2YTo6bmV0OjpVUkwgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwg OjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXIgKik7CiAgamJvb2xlYW4gZXF1YWxzICg6Omph dmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0Q29udGVudCAo KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0RmlsZSAoKSB7IHJldHVybiBmaWxlOyB9CiAg OjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFBhdGggKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcg KmdldEhvc3QgKCkgeyByZXR1cm4gaG9zdDsgfQogIGppbnQgZ2V0UG9ydCAoKSB7IHJldHVybiBw b3J0OyB9CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFByb3RvY29sICgpIHsgcmV0dXJuIHBy b3RvY29sOyB9CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFJlZiAoKSB7IHJldHVybiByZWY7 IH0KICBqaW50IGhhc2hDb2RlICgpOwogIDo6amF2YTo6bmV0OjpVUkxDb25uZWN0aW9uICpvcGVu Q29ubmVjdGlvbiAoKTsKICA6OmphdmE6OmlvOjpJbnB1dFN0cmVhbSAqb3BlblN0cmVhbSAoKTsK ICBqYm9vbGVhbiBzYW1lRmlsZSAoOjpqYXZhOjpuZXQ6OlVSTCAqKTsKcHVibGljOgogIHZvaWQg c2V0ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50 LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGlj OgogIHN0YXRpYyB2b2lkIHNldFVSTFN0cmVhbUhhbmRsZXJGYWN0b3J5ICg6OmphdmE6Om5ldDo6 VVJMU3RyZWFtSGFuZGxlckZhY3RvcnkgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvRXh0 ZXJuYWxGb3JtICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0 ZToKICA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqc2V0VVJMU3RyZWFtSGFuZGxlciAo OjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdm9pZCByZWFkT2JqZWN0ICg6OmphdmE6OmlvOjpP YmplY3RJbnB1dFN0cmVhbSAqKTsKICB2b2lkIHdyaXRlT2JqZWN0ICg6OmphdmE6OmlvOjpPYmpl Y3RPdXRwdXRTdHJlYW0gKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnByb3RvY29sOwogIDo6 amF2YTo6bGFuZzo6U3RyaW5nICpob3N0OwogIGppbnQgcG9ydDsKICA6OmphdmE6Omxhbmc6OlN0 cmluZyAqZmlsZTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVmOwogIGppbnQgaGFzaENvZGVf XzsKICA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqaGFuZGxlcjsKICBzdGF0aWMgOjpq YXZhOjp1dGlsOjpIYXNodGFibGUgKmhhbmRsZXJzOwogIHN0YXRpYyA6OmphdmE6Om5ldDo6VVJM U3RyZWFtSGFuZGxlckZhY3RvcnkgKmZhY3Rvcnk7CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlh bFZlcnNpb25VSUQgPSAtNzYyNzYyOTY4ODM2MTUyNDExMExMOwpwdWJsaWM6CgogIHN0YXRpYyA6 OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAyMCAiLi4vLi4vLi4vbGliamF2YS9qYXZh L2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyLmgiIDEKCgoK CgojcHJhZ21hIGludGVyZmFjZQoKCgpjbGFzcyA6OmphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1vZGlm aWVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIE1vZGlmaWVyICgp OwogIHN0YXRpYyBqYm9vbGVhbiBpc0Fic3RyYWN0IChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4g aXNGaW5hbCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzSW50ZXJmYWNlIChqaW50KTsKICBz dGF0aWMgamJvb2xlYW4gaXNOYXRpdmUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ByaXZh dGUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1Byb3RlY3RlZCAoamludCk7CiAgc3RhdGlj IGpib29sZWFuIGlzUHVibGljIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNTdGF0aWMgKGpp bnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0cmljdCAoamludCk7CiAgc3RhdGljIGpib29sZWFu IGlzU3luY2hyb25pemVkIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNUcmFuc2llbnQgKGpp bnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ZvbGF0aWxlIChqaW50KTsKICBzdGF0aWMgOjpqYXZh OjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50KTsKcHVibGljOgogIHN0YXRpYyA6OmphdmE6 Omxhbmc6OlN0cmluZ0J1ZmZlciAqdG9TdHJpbmcgKGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5n QnVmZmVyICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQgUFVCTElDID0gMUw7CiAgc3Rh dGljIGNvbnN0IGppbnQgUFJJVkFURSA9IDJMOwogIHN0YXRpYyBjb25zdCBqaW50IFBST1RFQ1RF RCA9IDRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUQVRJQyA9IDhMOwogIHN0YXRpYyBjb25zdCBq aW50IEZJTkFMID0gMTZMOwogIHN0YXRpYyBjb25zdCBqaW50IFNZTkNIUk9OSVpFRCA9IDMyTDsK ICBzdGF0aWMgY29uc3QgamludCBWT0xBVElMRSA9IDY0TDsKICBzdGF0aWMgY29uc3QgamludCBU UkFOU0lFTlQgPSAxMjhMOwogIHN0YXRpYyBjb25zdCBqaW50IE5BVElWRSA9IDI1Nkw7CiAgc3Rh dGljIGNvbnN0IGppbnQgSU5URVJGQUNFID0gNTEyTDsKICBzdGF0aWMgY29uc3QgamludCBBQlNU UkFDVCA9IDEwMjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUUklDVCA9IDIwNDhMOwpwdWJsaWM6 CiAgc3RhdGljIGNvbnN0IGppbnQgU1VQRVIgPSAzMkw7CiAgc3RhdGljIGNvbnN0IGppbnQgQUxM X0ZMQUdTID0gNDA5NUw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xh c3MkOwp9OwojIDIxICIuLi8uLi8uLi9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCiMgMSAi amF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFj ZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBz ZWN1cml0eQogICAgewogICAgICBjbGFzcyBQcm90ZWN0aW9uRG9tYWluOwogICAgICBjbGFzcyBQ ZXJtaXNzaW9uOwogICAgICBjbGFzcyBQZXJtaXNzaW9uQ29sbGVjdGlvbjsKICAgICAgY2xhc3Mg Q29kZVNvdXJjZTsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6OnNlY3VyaXR5OjpQcm90ZWN0 aW9uRG9tYWluIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFByb3Rl Y3Rpb25Eb21haW4gKDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKiwgOjpqYXZhOjpzZWN1 cml0eTo6UGVybWlzc2lvbkNvbGxlY3Rpb24gKik7CiAgOjpqYXZhOjpzZWN1cml0eTo6Q29kZVNv dXJjZSAqZ2V0Q29kZVNvdXJjZSAoKSB7IHJldHVybiBjb2RlX3NvdXJjZTsgfQogIDo6amF2YTo6 c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICpnZXRQZXJtaXNzaW9ucyAoKSB7IHJldHVy biBwZXJtczsgfQogIHZpcnR1YWwgamJvb2xlYW4gaW1wbGllcyAoOjpqYXZhOjpzZWN1cml0eTo6 UGVybWlzc2lvbiAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAo KTsKcHJpdmF0ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmxpbmVzZXA7CiAgOjpq YXZhOjpzZWN1cml0eTo6Q29kZVNvdXJjZSAqY29kZV9zb3VyY2U7CiAgOjpqYXZhOjpzZWN1cml0 eTo6UGVybWlzc2lvbkNvbGxlY3Rpb24gKnBlcm1zOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6 Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAyMiAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcv Q2xhc3MuaCIgMgoKCmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENsYXNzIChqY2xhc3Mga2xhc3Mp OwpleHRlcm4gIkMiIHZvaWQgX0p2X1JlZ2lzdGVyQ2xhc3NlcyAoamNsYXNzICpjbGFzc2VzKTsK CgpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2RJZHggKGpjbGFzcyBr bGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBtZXRoX2lkeCk7CgoKCgplbnVtCnsKICBKVl9TVEFURV9OT1RISU5HID0g MCwKCiAgSlZfU1RBVEVfUFJFTE9BRElORyA9IDEsCiAgSlZfU1RBVEVfTE9BRElORyA9IDMsCiAg SlZfU1RBVEVfTE9BREVEID0gNSwKCiAgSlZfU1RBVEVfQ09NUElMRUQgPSA2LAoKICBKVl9TVEFU RV9QUkVQQVJFRCA9IDcsCiAgSlZfU1RBVEVfTElOS0VEID0gOSwKCiAgSlZfU1RBVEVfSU5fUFJP R1JFU1MgPSAxMCwKICBKVl9TVEFURV9ET05FID0gMTIsCgogIEpWX1NUQVRFX0VSUk9SID0gMTQK fTsKCnN0cnVjdCBfSnZfRmllbGQ7CnN0cnVjdCBfSnZfVlRhYmxlOwp1bmlvbiBfSnZfd29yZDsK c3RydWN0IF9Kdl9BcnJheVZUYWJsZTsKCnN0cnVjdCBfSnZfQ29uc3RhbnRzCnsKICBqaW50IHNp emU7CiAgamJ5dGUgKnRhZ3M7CiAgX0p2X3dvcmQgKmRhdGE7Cn07CgpzdHJ1Y3QgX0p2X01ldGhv ZAp7CgogIF9Kdl9VdGY4Q29uc3QgKm5hbWU7CgogIF9Kdl9VdGY4Q29uc3QgKnNpZ25hdHVyZTsK CiAgX0p2X3VzaG9ydCBhY2NmbGFnczsKCiAgX0p2X3VzaG9ydCBpbmRleDsKCiAgdm9pZCAqbmNv ZGU7CgoKICBfSnZfVXRmOENvbnN0ICoqdGhyb3dzOwoKICBfSnZfTWV0aG9kICpnZXROZXh0TWV0 aG9kICgpCiAgeyByZXR1cm4gdGhpcyArIDE7IH0KfTsKCgp1bmlvbiBfSnZfSURpc3BhdGNoVGFi bGUKewogIHN0cnVjdAogIHsKCiAgICBqc2hvcnQgaWluZGV4OwogICAganNob3J0IGl0YWJsZV9s ZW5ndGg7CgogICAgdm9pZCAqKml0YWJsZTsKICB9IGNsczsKCiAgc3RydWN0CiAgewoKICAgIGpz aG9ydCAqaW9mZnNldHM7CiAgfSBpZmFjZTsKfTsKCgpzdHJ1Y3QgX0p2X2lmYWNlcwp7CiAgamNs YXNzICpsaXN0OwogIGpzaG9ydCBsZW47CiAganNob3J0IGNvdW50Owp9OwoKc3RydWN0IF9Kdl9N ZXRob2RTeW1ib2wKewogIF9Kdl9VdGY4Q29uc3QgKmNsYXNzX25hbWU7CiAgX0p2X1V0ZjhDb25z dCAqbmFtZTsKICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmU7Cn07CgpzdHJ1Y3QgX0p2X09mZnNl dFRhYmxlCnsKICBqaW50IHN0YXRlOwogIGppbnQgb2Zmc2V0c1tdOwp9OwoKCgoKCmNsYXNzIGph dmE6Omxhbmc6OkNsYXNzIDogcHVibGljIGphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBz dGF0aWMgamNsYXNzIGZvck5hbWUgKGpzdHJpbmcgY2xhc3NOYW1lLCBqYm9vbGVhbiBpbml0aWFs aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxv YWRlcik7CiAgc3RhdGljIGpjbGFzcyBmb3JOYW1lIChqc3RyaW5nIGNsYXNzTmFtZSk7CiAgSkFy cmF5PGpjbGFzcz4gKmdldENsYXNzZXMgKHZvaWQpOwoKICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRl ciAqZ2V0Q2xhc3NMb2FkZXIgKHZvaWQpOwoKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1 Y3RvciAqZ2V0Q29uc3RydWN0b3IgKEpBcnJheTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjps YW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqPiAqZ2V0Q29uc3RydWN0b3JzICh2b2lkKTsKICBq YXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvciAo SkFycmF5PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVj dG9yICo+ICpnZXREZWNsYXJlZENvbnN0cnVjdG9ycyAodm9pZCk7CiAgamF2YTo6bGFuZzo6cmVm bGVjdDo6RmllbGQgKmdldERlY2xhcmVkRmllbGQgKGpzdHJpbmcpOwogIEpBcnJheTxqYXZhOjps YW5nOjpyZWZsZWN0OjpGaWVsZCAqPiAqZ2V0RGVjbGFyZWRGaWVsZHMgKHZvaWQpOwogIGphdmE6 Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqZ2V0RGVjbGFyZWRNZXRob2QgKGpzdHJpbmcsIEpBcnJh eTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKmdl dERlY2xhcmVkTWV0aG9kcyAodm9pZCk7CgogIEpBcnJheTxqY2xhc3M+ICpnZXREZWNsYXJlZENs YXNzZXMgKHZvaWQpOwogIGpjbGFzcyBnZXREZWNsYXJpbmdDbGFzcyAodm9pZCk7CgogIGphdmE6 Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICpnZXRGaWVsZCAoanN0cmluZyk7CnByaXZhdGU6CiAgamlu dCBfZ2V0RmllbGRzIChKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKj4gKnJlc3Vs dCwgamludCBvZmZzZXQpOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3Rv ciAqPiAqX2dldENvbnN0cnVjdG9ycyAoamJvb2xlYW4pOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6 OkZpZWxkICpnZXRGaWVsZCAoanN0cmluZywgamludCk7CiAgamludCBfZ2V0TWV0aG9kcyAoSkFy cmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgIGppbnQgb2Zmc2V0KTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqZ2V0UHJp dmF0ZUZpZWxkIChqc3RyaW5nKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKmdldFBy aXZhdGVNZXRob2QgKGpzdHJpbmcsIEpBcnJheTxqY2xhc3M+ICopOwogIGphdmE6OnNlY3VyaXR5 OjpQcm90ZWN0aW9uRG9tYWluICpnZXRQcm90ZWN0aW9uRG9tYWluMCAoKTsKCnB1YmxpYzoKICBK QXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKj4gKmdldEZpZWxkcyAodm9pZCk7Cgog IEpBcnJheTxqY2xhc3M+ICpnZXRJbnRlcmZhY2VzICh2b2lkKTsKCiAgdm9pZCBnZXRTaWduYXR1 cmUgKGphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqYnVmZmVyKTsKICBzdGF0aWMganN0cmluZyBn ZXRTaWduYXR1cmUgKEpBcnJheTxqY2xhc3M+ICosIGpib29sZWFuIGlzX2NvbnN0cnVjdG9yKTsK ICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKmdldE1ldGhvZCAoanN0cmluZywgSkFycmF5 PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqZ2V0 TWV0aG9kcyAodm9pZCk7CgogIGlubGluZSBqaW50IGdldE1vZGlmaWVycyAodm9pZCkKICAgIHsK ICAgICAgcmV0dXJuIGFjY2ZsYWdzOwogICAgfQoKICBqc3RyaW5nIGdldE5hbWUgKHZvaWQpOwoK ICBqYXZhOjpuZXQ6OlVSTCAqZ2V0UmVzb3VyY2UgKGpzdHJpbmcgcmVzb3VyY2VOYW1lKTsKICBq YXZhOjppbzo6SW5wdXRTdHJlYW0gKmdldFJlc291cmNlQXNTdHJlYW0gKGpzdHJpbmcgcmVzb3Vy Y2VOYW1lKTsKICBKQXJyYXk8am9iamVjdD4gKmdldFNpZ25lcnMgKHZvaWQpOwoKICBpbmxpbmUg amNsYXNzIGdldFN1cGVyY2xhc3MgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNz OwogICAgfQoKICBpbmxpbmUgamJvb2xlYW4gaXNBcnJheSAodm9pZCkKICAgIHsKICAgICAgcmV0 dXJuIG5hbWUtPmRhdGFbMF0gPT0gJ1snOwogICAgfQoKICBpbmxpbmUgamNsYXNzIGdldENvbXBv bmVudFR5cGUgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBpc0FycmF5ICgpID8gKCogKGpjbGFz cyAqKSAmbWV0aG9kcykgOiAwOwogICAgfQoKICBqYm9vbGVhbiBpc0Fzc2lnbmFibGVGcm9tIChq Y2xhc3MgY2xzKTsKICBqYm9vbGVhbiBpc0luc3RhbmNlIChqb2JqZWN0IG9iaik7CgogIGlubGlu ZSBqYm9vbGVhbiBpc0ludGVyZmFjZSAodm9pZCkKICB7CiAgICByZXR1cm4gKGFjY2ZsYWdzICYg amF2YTo6bGFuZzo6cmVmbGVjdDo6TW9kaWZpZXI6OklOVEVSRkFDRSkgIT0gMDsKICB9CgogIGlu bGluZSBqYm9vbGVhbiBpc1ByaW1pdGl2ZSAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIHZ0YWJs ZSA9PSAoKF9Kdl9WVGFibGUgKikgLTEpOwogICAgfQoKICBqb2JqZWN0IG5ld0luc3RhbmNlICh2 b2lkKTsKICBqc3RyaW5nIHRvU3RyaW5nICh2b2lkKTsKCgogIGppbnQgc2l6ZSAodm9pZCkKICAg IHsKICAgICAgcmV0dXJuIHNpemVfaW5fYnl0ZXM7CiAgICB9CgoKICB2b2lkIGZpbmFsaXplICgp OwoKCgogIENsYXNzICgpOwoKICBzdGF0aWMgamF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwoKcHJp dmF0ZToKCiAgdm9pZCBjaGVja01lbWJlckFjY2VzcyAoamludCBmbGFncyk7CgogIHZvaWQgaW5p dGlhbGl6ZUNsYXNzICh2b2lkKTsKCgogIGZyaWVuZCBfSnZfTWV0aG9kICpfSnZfR2V0TWV0aG9k TG9jYWwgKGpjbGFzcyBrbGFzcywgX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmUpOwogIGZy aWVuZCBqYm9vbGVhbiBfSnZfSXNBc3NpZ25hYmxlRnJvbShqY2xhc3MsIGpjbGFzcyk7CiAgZnJp ZW5kIGpib29sZWFuIF9Kdl9JbnRlcmZhY2VBc3NpZ25hYmxlRnJvbSAoamNsYXNzLCBqY2xhc3Mp OwogIGZyaWVuZCB2b2lkICpfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4IChqY2xhc3Mga2xh c3MsIGpjbGFzcyBpZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG1ldGhvZF9pZHgpOwoKICBpbmxpbmUgZnJpZW5kIHZvaWQKICBfSnZfSW5pdENs YXNzIChqY2xhc3Mga2xhc3MpCiAgewogICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGtsYXNzLT5z dGF0ZSA9PSBKVl9TVEFURV9ET05FLCB0cnVlKSkKICAgICAgcmV0dXJuOwogICAga2xhc3MtPmlu aXRpYWxpemVDbGFzcyAoKTsKICB9CgogIGZyaWVuZCBfSnZfTWV0aG9kKiBfSnZfTG9va3VwRGVj bGFyZWRNZXRob2QgKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9VdGY4Q29uc3QqKTsKICBmcmllbmQgamZp ZWxkSUQgSnZHZXRGaXJzdEluc3RhbmNlRmllbGQgKGpjbGFzcyk7CiAgZnJpZW5kIGppbnQgSnZO dW1JbnN0YW5jZUZpZWxkcyAoamNsYXNzKTsKICBmcmllbmQgamZpZWxkSUQgSnZHZXRGaXJzdFN0 YXRpY0ZpZWxkIChqY2xhc3MpOwogIGZyaWVuZCBqaW50IEp2TnVtU3RhdGljRmllbGRzIChqY2xh c3MpOwoKICBmcmllbmQgam9iamVjdCBfSnZfQWxsb2NPYmplY3QgKGpjbGFzcywgamludCk7CiAg ZnJpZW5kIHZvaWQgKl9Kdl9BbGxvY09iaiAoamludCwgamNsYXNzKTsKICBmcmllbmQgdm9pZCAq X0p2X0FsbG9jUHRyRnJlZU9iaiAoamludCwgamNsYXNzKTsKICBmcmllbmQgdm9pZCAqX0p2X0Fs bG9jQXJyYXkgKGppbnQsIGpjbGFzcyk7CgogIGZyaWVuZCBqb2JqZWN0IF9Kdl9KTklfVG9SZWZs ZWN0ZWRGaWVsZCAoX0p2X0pOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElELAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4pOwogIGZyaWVuZCBqb2JqZWN0 IF9Kdl9KTklfVG9SZWZsZWN0ZWRNZXRob2QgKF9Kdl9KTklFbnYgKiwgamNsYXNzLCBqbWV0aG9k SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4p OwogIGZyaWVuZCBqZmllbGRJRCBfSnZfRnJvbVJlZmxlY3RlZEZpZWxkIChqYXZhOjpsYW5nOjpy ZWZsZWN0OjpGaWVsZCAqKTsKCiAgZnJpZW5kIGptZXRob2RJRCBfSnZfRnJvbVJlZmxlY3RlZE1l dGhvZCAoamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICopOwogIGZyaWVuZCBqbWV0aG9kSUQg X0p2X0Zyb21SZWZsZWN0ZWRDb25zdHJ1Y3RvciAoamF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3Ry dWN0b3IgKik7CiAgZnJpZW5kIGppbnQgSnZOdW1NZXRob2RzIChqY2xhc3MpOwogIGZyaWVuZCBq bWV0aG9kSUQgSnZHZXRGaXJzdE1ldGhvZCAoamNsYXNzKTsKCgogIGZyaWVuZCBjbGFzcyBqYXZh OjpsYW5nOjpDbGFzc0xvYWRlcjsKCiAgZnJpZW5kIGNsYXNzIGphdmE6OmlvOjpPYmplY3RPdXRw dXRTdHJlYW07CiAgZnJpZW5kIGNsYXNzIGphdmE6OmlvOjpPYmplY3RJbnB1dFN0cmVhbTsKICBm cmllbmQgY2xhc3MgamF2YTo6aW86Ok9iamVjdFN0cmVhbUNsYXNzOwoKICBmcmllbmQgdm9pZCBf SnZfV2FpdEZvclN0YXRlIChqY2xhc3MsIGludCk7CiAgZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVy Q2xhc3NlcyAoamNsYXNzICpjbGFzc2VzKTsKICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJDbGFz c0hvb2tEZWZhdWx0IChqY2xhc3Mga2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9SZWdpc3Rlcklu aXRpYXRpbmdMb2FkZXIgKGpjbGFzcyxqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciopOwogIGZyaWVu ZCB2b2lkIF9Kdl9VbnJlZ2lzdGVyQ2xhc3MgKGpjbGFzcyk7CiAgZnJpZW5kIGpjbGFzcyBfSnZf RmluZENsYXNzIChfSnZfVXRmOENvbnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJpZW5kIGpjbGFzcyBf SnZfRmluZENsYXNzSW5DYWNoZSAoX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsK ICBmcmllbmQgdm9pZCBfSnZfTmV3QXJyYXlDbGFzcyAoamNsYXNzIGVsZW1lbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9WVGFibGUgKmFycmF5X3Z0YWJs ZSA9IDApOwogIGZyaWVuZCBqY2xhc3MgX0p2X05ld0NsYXNzIChfSnZfVXRmOENvbnN0ICpuYW1l LCBqY2xhc3Mgc3VwZXJjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6 bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJpZW5kIHZvaWQgX0p2X0luaXROZXdDbGFz c0ZpZWxkcyAoamNsYXNzIGtsYXNzKTsKCgogIGZyaWVuZCB2b2lkIF9Kdl9Jbml0UHJpbUNsYXNz IChqY2xhc3MsIGNoYXIgKiwgY2hhciwgaW50LCBfSnZfQXJyYXlWVGFibGUgKik7CgogIGZyaWVu ZCB2b2lkIF9Kdl9QcmVwYXJlQ29tcGlsZWRDbGFzcyAoamNsYXNzKTsKICBmcmllbmQgdm9pZCBf SnZfUHJlcGFyZUNvbnN0YW50VGltZVRhYmxlcyAoamNsYXNzKTsKICBmcmllbmQganNob3J0IF9K dl9HZXRJbnRlcmZhY2VzIChqY2xhc3MsIF9Kdl9pZmFjZXMgKik7CiAgZnJpZW5kIHZvaWQgX0p2 X0dlbmVyYXRlSVRhYmxlIChqY2xhc3MsIF9Kdl9pZmFjZXMgKiwganNob3J0ICopOwogIGZyaWVu ZCBqc3RyaW5nIF9Kdl9HZXRNZXRob2RTdHJpbmcoamNsYXNzLCBfSnZfVXRmOENvbnN0ICopOwog IGZyaWVuZCBqc2hvcnQgX0p2X0FwcGVuZFBhcnRpYWxJVGFibGUgKGpjbGFzcywgamNsYXNzLCB2 b2lkICoqLCBqc2hvcnQpOwogIGZyaWVuZCBqc2hvcnQgX0p2X0ZpbmRJSW5kZXggKGpjbGFzcyAq LCBqc2hvcnQgKiwganNob3J0KTsKICBmcmllbmQgdm9pZCBfSnZfTGlua09mZnNldFRhYmxlIChq Y2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9MYXlvdXRWVGFibGVNZXRob2RzIChqY2xhc3Mga2xh c3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9TZXRWVGFibGVFbnRyaWVzIChqY2xhc3MsIF9Kdl9WVGFi bGUgKik7CiAgZnJpZW5kIHZvaWQgX0p2X01ha2VWVGFibGUgKGpjbGFzcyk7CgoKCiAgaW5saW5l IGZyaWVuZCBqY2xhc3MKICBfSnZfR2V0QXJyYXlDbGFzcyAoamNsYXNzIGtsYXNzLCBqYXZhOjps YW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKQogIHsKICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgh a2xhc3MtPmFycmF5Y2xhc3MsIGZhbHNlKSkKICAgICAgX0p2X05ld0FycmF5Q2xhc3MgKGtsYXNz LCBsb2FkZXIpOwogICAgcmV0dXJuIGtsYXNzLT5hcnJheWNsYXNzOwogIH0KCgogIGZyaWVuZCBq Ym9vbGVhbiBfSnZfSXNJbnRlcnByZXRlZENsYXNzIChqY2xhc3MpOwogIGZyaWVuZCB2b2lkIF9K dl9Jbml0RmllbGQgKGpvYmplY3QsIGpjbGFzcywgX0p2X0ZpZWxkKik7CiAgZnJpZW5kIGludCBf SnZfRGV0ZXJtaW5lVlRhYmxlSW5kZXggKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0Kik7CiAgZnJpZW5k IHZvaWQgX0p2X0luaXRGaWVsZCAoam9iamVjdCwgamNsYXNzLCBpbnQpOwogIGZyaWVuZCBfSnZf d29yZCBfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoamNsYXNzLCBpbnQpOwogIGZyaWVuZCBfSnZfTWV0 aG9kICpfSnZfU2VhcmNoTWV0aG9kSW5DbGFzcyAoamNsYXNzIGNscywgamNsYXNzIGtsYXNzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25z dCAqbWV0aG9kX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSnZfVXRmOENvbnN0ICptZXRob2Rfc2lnbmF0dXJlKTsKCiAgZnJpZW5kIHZvaWQgX0p2 X1ByZXBhcmVDbGFzcyAoamNsYXNzKTsKCiAgZnJpZW5kIGNsYXNzIF9Kdl9DbGFzc1JlYWRlcjsK ICBmcmllbmQgY2xhc3MgX0p2X0ludGVycENsYXNzOwogIGZyaWVuZCBjbGFzcyBfSnZfSW50ZXJw TWV0aG9kOwogIGZyaWVuZCBjbGFzcyBfSnZfSW50ZXJwTWV0aG9kSW52b2NhdGlvbjsKCgoKCgoK ICBmcmllbmQgY2xhc3MgX0p2X0J5dGVjb2RlVmVyaWZpZXI7CgoKICBqY2xhc3MgbmV4dDsKCiAg X0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAgX0p2X3VzaG9ydCBhY2NmbGFnczsKCiAgamNsYXNzIHN1 cGVyY2xhc3M7CgogIF9Kdl9Db25zdGFudHMgY29uc3RhbnRzOwoKCiAgX0p2X01ldGhvZCAqbWV0 aG9kczsKCgogIGpzaG9ydCBtZXRob2RfY291bnQ7CgogIGpzaG9ydCB2dGFibGVfbWV0aG9kX2Nv dW50OwoKICBfSnZfRmllbGQgKmZpZWxkczsKCiAgamludCBzaXplX2luX2J5dGVzOwoKICBqc2hv cnQgZmllbGRfY291bnQ7CgogIGpzaG9ydCBzdGF0aWNfZmllbGRfY291bnQ7CgogIF9Kdl9WVGFi bGUgKnZ0YWJsZTsKCiAgX0p2X09mZnNldFRhYmxlICpvdGFibGU7CgogIF9Kdl9NZXRob2RTeW1i b2wgKm90YWJsZV9zeW1zOwoKICBqY2xhc3MgKmludGVyZmFjZXM7CgogIGphdmE6Omxhbmc6OkNs YXNzTG9hZGVyICpsb2FkZXI7CgogIGpzaG9ydCBpbnRlcmZhY2VfY291bnQ7CgogIGpieXRlIHN0 YXRlOwoKCiAgamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQ7CgogIGpzaG9ydCBkZXB0aDsKCiAg amNsYXNzICphbmNlc3RvcnM7CgogIF9Kdl9JRGlzcGF0Y2hUYWJsZSAqaWR0OwoKICBqY2xhc3Mg YXJyYXljbGFzczsKCiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21haW4gKnByb3RlY3Rp b25Eb21haW47Cn07CiMgMTcgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCiMgMSAi amF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFj ZQoKIyAxICJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl cmZhY2UKCiMgMSAiamF2YS9sYW5nL0V4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZh Y2UKCiMgMSAiamF2YS9sYW5nL1Rocm93YWJsZS5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK CgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlIDogcHVibGljIDo6amF2YTo6bGFuZzo6 T2JqZWN0CnsKcHVibGljOgogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpUaHJvd2FibGUgKmZpbGxJ blN0YWNrVHJhY2UgKCk7CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0TG9jYWxp emVkTWVzc2FnZSAoKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRNZXNzYWdl ICgpIHsgcmV0dXJuIGRldGFpbE1lc3NhZ2U7IH0KICB2aXJ0dWFsIHZvaWQgcHJpbnRTdGFja1Ry YWNlICgpOwogIHZpcnR1YWwgdm9pZCBwcmludFN0YWNrVHJhY2UgKDo6amF2YTo6aW86OlByaW50 U3RyZWFtICopOwogIHZpcnR1YWwgdm9pZCBwcmludFN0YWNrVHJhY2UgKDo6amF2YTo6aW86OlBy aW50V3JpdGVyICopOwogIFRocm93YWJsZSAoKTsKICBUaHJvd2FibGUgKDo6amF2YTo6bGFuZzo6 U3RyaW5nICopOwogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpOwpw cml2YXRlOgogIHZvaWQgcHJpbnRSYXdTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFdyaXRl ciAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZGV0YWlsTWVzc2FnZTsKcHVibGljOgogIHN0 YXRpYyBqYm9vbGVhbiB0cmFjZV9lbmFibGVkOwpwcml2YXRlOgogIGpieXRlQXJyYXkgc3RhY2tU cmFjZTsKICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0zMDQyNjg2MDU1 NjU4MDQ3Mjg1TEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3Mk Owp9OwojIDkgImphdmEvbGFuZy9FeGNlcHRpb24uaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpF eGNlcHRpb24gOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpUaHJvd2FibGUKewpwdWJsaWM6CiAgRXhj ZXB0aW9uICgpOwogIEV4Y2VwdGlvbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoK ICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0zMzg3NTE2OTkzMTI0MjI5 OTQ4TEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9Owoj IDkgImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6 UnVudGltZUV4Y2VwdGlvbiA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OkV4Y2VwdGlvbgp7CnB1Ymxp YzoKICBSdW50aW1lRXhjZXB0aW9uICgpOwogIFJ1bnRpbWVFeGNlcHRpb24gKDo6amF2YTo6bGFu Zzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25V SUQgPSAtNzAzNDg5NzE5MDc0NTc2NjkzOUxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxh bmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb24u aCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpOdWxsUG9pbnRlckV4Y2VwdGlvbiA6IHB1YmxpYyA6 OmphdmE6Omxhbmc6OlJ1bnRpbWVFeGNlcHRpb24KewpwdWJsaWM6CiAgTnVsbFBvaW50ZXJFeGNl cHRpb24gKCk7CiAgTnVsbFBvaW50ZXJFeGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICop OwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1MTYyNzEw MTgzMzg5MDI4NzkyTEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xh c3MkOwp9OwojIDE4ICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIgMgojIDEgIi4uLy4u Ly4uL2xpYmphdmEvZ2NqL2NuaS5oIiAxCiMgMjEgIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2NuaS5o IgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEv b2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9p ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1l bW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAq bWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl cm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9p ZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9p ZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7Cgpl eHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hh ciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg c3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBf X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZy bSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyAxMTEgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9s IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJj aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hh ciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3Qg Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIg Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg X19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9f Y29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9f bWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4 dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVu IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu dCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19l cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJu IHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9f bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qg dm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmlu ZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRl cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv bnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZy eSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lk ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUg KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDMKfQojIDIyICIuLi8uLi8uLi9saWJqYXZhL2djai9jbmkuaCIgMgoKZXh0ZXJu IGlubGluZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMpCnsKICByZXR1cm4gX0p2 X0FsbG9jT2JqZWN0IChjbHMsIGNscy0+c2l6ZSgpKTsKfQoKZXh0ZXJuIGlubGluZSBqb2JqZWN0 Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMsIGpzaXplIHN6KQp7CiAgcmV0dXJuIF9Kdl9BbGxv Y09iamVjdCAoY2xzLCBzeik7Cn0KCmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nVVRG IChjb25zdCBjaGFyICpieXRlcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENsYXNzIChqY2xh c3MpOwoKZXh0ZXJuIGlubGluZSB2b2lkCkp2SW5pdENsYXNzIChqY2xhc3MgY2xzKQp7CiAgcmV0 dXJuIF9Kdl9Jbml0Q2xhc3MgKGNscyk7Cn0KCmV4dGVybiBpbmxpbmUganN0cmluZwpKdkFsbG9j U3RyaW5nIChqc2l6ZSBzeikKewogIHJldHVybiBfSnZfQWxsb2NTdHJpbmcgKHN6KTsKfQoKZXh0 ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nIChjb25zdCBqY2hhciAqY2hhcnMsIGpzaXpl IGxlbikKewogIHJldHVybiBfSnZfTmV3U3RyaW5nIChjaGFycywgbGVuKTsKfQoKZXh0ZXJuIGlu bGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyICpieXRlcywganNpemUg bGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBsZW4pOwp9CgpleHRl cm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIgKmJ5dGVzKQp7 CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBzdHJsZW4gKGJ5dGVzKSk7Cn0K CmV4dGVybiBpbmxpbmUgamNoYXIgKgpfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKQp7 CiAgcmV0dXJuIChqY2hhciopKChjaGFyKikgc3RyLT5kYXRhICsgc3RyLT5ib2Zmc2V0KTsKfQoK ZXh0ZXJuIGlubGluZSBqY2hhcioKSnZHZXRTdHJpbmdDaGFycyAoanN0cmluZyBzdHIpCnsKICBy ZXR1cm4gX0p2X0dldFN0cmluZ0NoYXJzIChzdHIpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2 R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nIHN0cmluZykKewogIHJldHVybiBfSnZfR2V0U3Ry aW5nVVRGTGVuZ3RoIChzdHJpbmcpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2R2V0U3RyaW5n VVRGUmVnaW9uIChqc3RyaW5nIHN0ciwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgY2hhciAqYnVm KQp7CiAgcmV0dXJuIF9Kdl9HZXRTdHJpbmdVVEZSZWdpb24gKHN0ciwgc3RhcnQsIGxlbiwgYnVm KTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nVVRGIChjb25zdCBjaGFyICpi eXRlcykKewogIHJldHVybiBfSnZfTmV3U3RyaW5nVVRGIChieXRlcyk7Cn0KCmNsYXNzIEp2U3lu Y2hyb25pemUKewpwcml2YXRlOgogIGpvYmplY3Qgb2JqOwpwdWJsaWM6CiAgSnZTeW5jaHJvbml6 ZSAoY29uc3Qgam9iamVjdCAmbykgOiBvYmogKG8pCiAgICB7IF9Kdl9Nb25pdG9yRW50ZXIgKG9i aik7IH0KICB+SnZTeW5jaHJvbml6ZSAoKQogICAgeyBfSnZfTW9uaXRvckV4aXQgKG9iaik7IH0K fTsKCgpleHRlcm4gaW5saW5lIHZvaWQgKgpKdk1hbGxvYyAoanNpemUgc2l6ZSkKewogIHJldHVy biBfSnZfTWFsbG9jIChzaXplKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkp2RnJlZSAodm9pZCAq cHRyKQp7CiAgcmV0dXJuIF9Kdl9GcmVlIChwdHIpOwp9CgpleHRlcm4gaW5saW5lIGppbnQKSnZD cmVhdGVKYXZhVk0gKHZvaWQqIHZtX2FyZ3MpCnsKICByZXR1cm4gX0p2X0NyZWF0ZUphdmFWTSAo dm1fYXJncyk7Cn0KCmV4dGVybiBpbmxpbmUgamF2YTo6bGFuZzo6VGhyZWFkKgpKdkF0dGFjaEN1 cnJlbnRUaHJlYWQgKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3JvdXAqIGdyb3Vw KQp7CiAgcmV0dXJuIF9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkIChuYW1lLCBncm91cCk7Cn0KCmV4 dGVybiBpbmxpbmUgamludApKdkRldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpCnsKICByZXR1cm4g X0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKCk7Cn0KIyAxOSAiLi4vLi4vLi4vbGliamF2YS9leGNl cHRpb24uY2MiIDIKIyAxICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDEKIyAyMiAi Li4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIgojIDEgIi4uLy4uLy4uL2xpYmphdmEvaW5j bHVkZS9qYXZhLWFzc2VydC5oIiAxCiMgMTYgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qYXZh LWFzc2VydC5oIgp2b2lkIF9Kdl9BYm9ydCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGlu dCwgY29uc3QgY2hhciAqKQogIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAyMyAi Li4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCiMgMSAiaW5jbHVkZS9qYXZhLXRocmVh ZHMuaCIgMQojIDIwICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgojIDEgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2Jp dHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlv cml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4p ICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGlu dCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUv c2NoZWQuaCIgMiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFt IChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAg ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBz dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRf c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQs IHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi9ob21lL2diL3JwbS9CVUlM RC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDExOCAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRt X21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0 bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgog IGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoK c3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAg ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYz ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90 IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0 cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRt ICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0 cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qg X190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj dCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29u c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBj aGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4 dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0 OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy biB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBp bnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpf X3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lk X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBf X2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQg X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz cGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAq X19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRp bWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAg ICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9f dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVz dHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGlt ZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93 ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJy OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcp IHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRh dGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAy MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFs LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25h bC5oIiAyIDMKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvaW5pdHNwaW4uaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK CmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBU SFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVu dW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoK fTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NF U1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhf UkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01V VEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVU RVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JF Q1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VS Uk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JN QUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVf TlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9D RVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05Q LAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJF RkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9 IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19y b3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhS RUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0Kewog IFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMK Cn07CiMgMTYzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9j cmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cg KCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9f dGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3Jl dHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9y ZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRf dCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw YXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3Qg cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h dHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3Bl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg X19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2 b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAq X19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z dGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXpl KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmlj dCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0 dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3Rhcmdl dF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9s aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh ZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl dGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJl YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211 dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChw dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0 cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0 cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkK ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAq X19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg cHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0 cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpf X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9t dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0 cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0 cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25z dCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9y d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y d2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChw dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xv Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Js b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9y d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0 aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3Bz aGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRf bnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3ByZWYpIHRocm93ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g aW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9f cHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95 IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2Nr KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3Bp bmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVy X2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25l ZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0 cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg cHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVh ZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh cnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJf c2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJp ZXIpIHRocm93ICgpOwojIDU1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50 IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5 X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChw dGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29u dHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZv aWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChp bnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgp OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2 MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51 cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRf Y2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhy ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9w X3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190 aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9f Y2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQu aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQg cHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8p IHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjcxICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpf X3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFy ZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAo dm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVh ZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQojIDIxICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIiAy CgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Kdl9UaHJlYWRfdAp7CgogIGludCBmbGFnczsKCgogIHB0 aHJlYWRfdCB0aHJlYWQ7CgoKICBqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZF9vYmo7CgoKCiAg cHRocmVhZF9jb25kX3Qgd2FpdF9jb25kOwogIHB0aHJlYWRfbXV0ZXhfdCB3YWl0X211dGV4OwoK CiAgX0p2X1RocmVhZF90ICpuZXh0OwoKfSBfSnZfVGhyZWFkX3Q7Cgp0eXBlZGVmIHZvaWQgX0p2 X1RocmVhZFN0YXJ0RnVuYyAoamF2YTo6bGFuZzo6VGhyZWFkICopOwoKCgp0eXBlZGVmIHN0cnVj dAp7CgogIF9Kdl9UaHJlYWRfdCAqZmlyc3Q7Cgp9IF9Kdl9Db25kaXRpb25WYXJpYWJsZV90OwoK dHlwZWRlZiBzdHJ1Y3QKewoKCgoKICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CgoKICBwdGhyZWFk X3Qgb3duZXI7CgoKICBpbnQgY291bnQ7Cn0gX0p2X011dGV4X3Q7CgoKCgoKCmlubGluZSBpbnQK X0p2X1B0aHJlYWRDaGVja01vbml0b3IgKF9Kdl9NdXRleF90ICptdSkKewogIHB0aHJlYWRfdCBz ZWxmID0gcHRocmVhZF9zZWxmKCk7CiAgaWYgKG11LT5vd25lciA9PSBzZWxmKQogICAgcmV0dXJu IDA7CiAgZWxzZSByZXR1cm4gMTsKfQoKCgoKCmludCBfSnZfQ29uZFdhaXQgKF9Kdl9Db25kaXRp b25WYXJpYWJsZV90ICpjdiwgX0p2X011dGV4X3QgKm11LAogICAgICAgICAgICAgICAgICBqbG9u ZyBtaWxsaXMsIGppbnQgbmFub3MpOwoKaW50IF9Kdl9Db25kTm90aWZ5IChfSnZfQ29uZGl0aW9u VmFyaWFibGVfdCAqY3YsIF9Kdl9NdXRleF90ICptdSk7CgppbnQgX0p2X0NvbmROb3RpZnlBbGwg KF9Kdl9Db25kaXRpb25WYXJpYWJsZV90ICpjdiwgX0p2X011dGV4X3QgKm11KTsKCmlubGluZSB2 b2lkCl9Kdl9Db25kSW5pdCAoX0p2X0NvbmRpdGlvblZhcmlhYmxlX3QgKmN2KQp7CiAgY3YtPmZp cnN0ID0gMDsKfQojIDExMyAiaW5jbHVkZS9qYXZhLXRocmVhZHMuaCIKaW5saW5lIHZvaWQKX0p2 X011dGV4SW5pdCAoX0p2X011dGV4X3QgKm11KQp7CgoKCgoKCiAgcHRocmVhZF9tdXRleF9pbml0 ICgmbXUtPm11dGV4LCAwKTsKCgogIG11LT5jb3VudCA9IDA7CiAgbXUtPm93bmVyID0gMDsKfQoK aW5saW5lIGludApfSnZfTXV0ZXhMb2NrIChfSnZfTXV0ZXhfdCAqbXUpCnsKICBwdGhyZWFkX3Qg c2VsZiA9IHB0aHJlYWRfc2VsZiAoKTsKICBpZiAobXUtPm93bmVyID09IHNlbGYpCiAgICB7CiAg ICAgIG11LT5jb3VudCsrOwogICAgfQogIGVsc2UKICAgIHsKIyAxNDcgImluY2x1ZGUvamF2YS10 aHJlYWRzLmgiCiAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrICgmbXUtPm11dGV4KTsKCiAgICAg IG11LT5jb3VudCA9IDE7CiAgICAgIG11LT5vd25lciA9IHNlbGY7CiAgICB9CiAgcmV0dXJuIDA7 Cn0KCmlubGluZSBpbnQKX0p2X011dGV4VW5sb2NrIChfSnZfTXV0ZXhfdCAqbXUpCnsKICBpZiAo X0p2X1B0aHJlYWRDaGVja01vbml0b3IgKG11KSkKICAgIHsKCgoKCiAgICAgIHJldHVybiAxOwog ICAgfQoKICBtdS0+Y291bnQtLTsKCiAgaWYgKG11LT5jb3VudCA9PSAwKQogICAgewogICAgICBt dS0+b3duZXIgPSAwOwojIDE4MCAiaW5jbHVkZS9qYXZhLXRocmVhZHMuaCIKICAgICAgICBwdGhy ZWFkX211dGV4X3VubG9jayAoJm11LT5tdXRleCk7CgogICAgfQogIHJldHVybiAwOwp9CiMgMjA1 ICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgp2b2lkIF9Kdl9Jbml0VGhyZWFkcyAodm9pZCk7Cgpf SnZfVGhyZWFkX3QgKl9Kdl9UaHJlYWRJbml0RGF0YSAoamF2YTo6bGFuZzo6VGhyZWFkICp0aHJl YWQpOwp2b2lkIF9Kdl9UaHJlYWREZXN0cm95RGF0YSAoX0p2X1RocmVhZF90ICpkYXRhKTsKCmlu bGluZSBqYXZhOjpsYW5nOjpUaHJlYWQgKgpfSnZfVGhyZWFkQ3VycmVudCAodm9pZCkKewogIGV4 dGVybiBwdGhyZWFkX2tleV90IF9Kdl9UaHJlYWRLZXk7CiAgcmV0dXJuIChqYXZhOjpsYW5nOjpU aHJlYWQgKikgcHRocmVhZF9nZXRzcGVjaWZpYyAoX0p2X1RocmVhZEtleSk7Cn0KIyAyNzAgImlu Y2x1ZGUvamF2YS10aHJlYWRzLmgiCiMgMSAic3lzZGVwL2xvY2tzLmgiIDEKIyAxNCAic3lzZGVw L2xvY2tzLmgiCnR5cGVkZWYgc2l6ZV90IG9ial9hZGRyX3Q7CgoKCgoKCmlubGluZSBzdGF0aWMg Ym9vbApjb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIG9ial9hZGRyX3QgKmFkZHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpfYWRkcl90IG9sZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ial9hZGRyX3QgbmV3 X3ZhbCkKewogIGNoYXIgcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4 Y2hnbCAlMiwgJTA7IHNldHogJTEiCiAgICAgICAgICAgICAgOiAiK20iKCooYWRkcikpLCAiPXEi KHJlc3VsdCkKICAgICAgICAgICAgICA6ICJyIiAobmV3X3ZhbCksICJhIihvbGQpCiAgICAgICAg ICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIChib29sKSByZXN1bHQ7Cn0KCgoKCgoKaW5saW5l IHN0YXRpYyB2b2lkCnJlbGVhc2Vfc2V0KHZvbGF0aWxlIG9ial9hZGRyX3QgKmFkZHIsIG9ial9h ZGRyX3QgbmV3X3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fKCIgIiA6IDogOiAibWVtb3J5 Iik7CiAgKihhZGRyKSA9IG5ld192YWw7Cn0KCgoKCmlubGluZSBzdGF0aWMgYm9vbApjb21wYXJl X2FuZF9zd2FwX3JlbGVhc2Uodm9sYXRpbGUgb2JqX2FkZHJfdCAqYWRkciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpfYWRkcl90IG9sZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpf YWRkcl90IG5ld192YWwpCnsKICByZXR1cm4gY29tcGFyZV9hbmRfc3dhcChhZGRyLCBvbGQsIG5l d192YWwpOwp9CgoKCgppbmxpbmUgc3RhdGljIHZvaWQKcmVhZF9iYXJyaWVyKCkKewp9CgoKCmlu bGluZSBzdGF0aWMgdm9pZAp3cml0ZV9iYXJyaWVyKCkKewoKICBfX2FzbV9fIF9fdm9sYXRpbGVf XygiICIgOiA6IDogIm1lbW9yeSIpOwp9CiMgMjcxICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIiAy Cgp0eXBlZGVmIHB0aHJlYWRfdCBfSnZfVGhyZWFkSWRfdDsKIyAzMDMgImluY2x1ZGUvamF2YS10 aHJlYWRzLmgiCmV4dGVybiB2b2xhdGlsZQpzdHJ1Y3Qgc2VsZl9jYWNoZV9lbnRyeSB7CiAgc2l6 ZV90IGhpZ2hfc3BfYml0czsKICBwdGhyZWFkX3Qgc2VsZjsKfSBfSnZfc2VsZl9jYWNoZVtdOwoK dm9pZCBfSnZfU2VsZl9DYWNoZV9Jbml0KCk7CgpfSnZfVGhyZWFkSWRfdApfSnZfVGhyZWFkU2Vs Zl9vdXRfb2ZfbGluZSh2b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5ICpzY2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBoaWdoX3NwX2JpdHMpOwoKaW5saW5lIF9Kdl9UaHJlYWRJ ZF90Cl9Kdl9UaHJlYWRTZWxmICh2b2lkKQp7CiAgaW50IGR1bW15OwogIHNpemVfdCBzcCA9IChz aXplX3QpKCZkdW1teSk7CiAgdW5zaWduZWQgaCA9ICgoKHVuc2lnbmVkIGxvbmcpKHNwKSA+PiAx OSkgJiAoMTAyNCAtMSkpOwogIHZvbGF0aWxlIHNlbGZfY2FjaGVfZW50cnkgKnNjZSA9IF9Kdl9z ZWxmX2NhY2hlICsgaDsKICBwdGhyZWFkX3QgY2FuZGlkYXRlX3NlbGYgPSBzY2UgLT4gc2VsZjsK ICByZWFkX2JhcnJpZXIoKTsKICBpZiAoc2NlIC0+IGhpZ2hfc3BfYml0cyA9PSBzcCA+PiAxMikK ICAgIHsKCgoKCiAgICAgIHJldHVybiBjYW5kaWRhdGVfc2VsZjsKICAgIH0KICBlbHNlCiAgICBy ZXR1cm4gX0p2X1RocmVhZFNlbGZfb3V0X29mX2xpbmUoc2NlLCBzcCA+PiAxMik7Cn0KIyAzNTQg ImluY2x1ZGUvamF2YS10aHJlYWRzLmgiCmlubGluZSBfSnZfVGhyZWFkX3QgKgpfSnZfVGhyZWFk Q3VycmVudERhdGEgKHZvaWQpCnsKICBleHRlcm4gcHRocmVhZF9rZXlfdCBfSnZfVGhyZWFkRGF0 YUtleTsKICByZXR1cm4gKF9Kdl9UaHJlYWRfdCAqKSBwdGhyZWFkX2dldHNwZWNpZmljIChfSnZf VGhyZWFkRGF0YUtleSk7Cn0KCmlubGluZSB2b2lkCl9Kdl9UaHJlYWRZaWVsZCAodm9pZCkKewoK ICBzY2hlZF95aWVsZCAoKTsKCn0KCnZvaWQgX0p2X1RocmVhZFJlZ2lzdGVyIChfSnZfVGhyZWFk X3QgKmRhdGEpOwp2b2lkIF9Kdl9UaHJlYWRVblJlZ2lzdGVyICgpOwoKdm9pZCBfSnZfVGhyZWFk U2V0UHJpb3JpdHkgKF9Kdl9UaHJlYWRfdCAqZGF0YSwgamludCBwcmlvKTsKCnZvaWQgX0p2X1Ro cmVhZFN0YXJ0IChqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCwgX0p2X1RocmVhZF90ICpkYXRh LAogICAgICAgICAgICAgICAgICAgICAgX0p2X1RocmVhZFN0YXJ0RnVuYyAqbWV0aCk7Cgp2b2lk IF9Kdl9UaHJlYWRXYWl0ICh2b2lkKTsKCnZvaWQgX0p2X1RocmVhZEludGVycnVwdCAoX0p2X1Ro cmVhZF90ICpkYXRhKTsKIyAyNCAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCgoj IDEgImluY2x1ZGUvamF2YS1nYy5oIiAxCiMgMTggImluY2x1ZGUvamF2YS1nYy5oIgpleHRlcm4g IkMiCnsKICB2b2lkICpfSnZfTWFya09iaiAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAq KTsKICB2b2lkICpfSnZfTWFya0FycmF5ICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICop Owp9OwoKCgoKCgpleHRlcm4gIkMiIHZvaWQgKiBHQ19nY2pfbWFsbG9jKHNpemVfdCwgdm9pZCAq KTsKZXh0ZXJuICJDIiB2b2lkICogR0NfbWFsbG9jX2F0b21pYyhzaXplX3QpOwoKZXh0ZXJuICJD IiB2b2lkICogR0NfbG9jYWxfZ2NqX21hbGxvYyhzaXplX3QsIHZvaWQgKik7CmV4dGVybiAiQyIg dm9pZCAqIEdDX2xvY2FsX21hbGxvY19hdG9taWMoc2l6ZV90KTsKCgppbmxpbmUgdm9pZCAqCl9K dl9BbGxvY09iaiAoanNpemUgc2l6ZSwgamNsYXNzIGtsYXNzKQp7CgoKCiAgcmV0dXJuIEdDX2xv Y2FsX2djal9tYWxsb2MgKHNpemUsIGtsYXNzLT52dGFibGUpOwoKCgp9CgppbmxpbmUgdm9pZCAq Cl9Kdl9BbGxvY1B0ckZyZWVPYmogKGpzaXplIHNpemUsIGpjbGFzcyBrbGFzcykKewoKCiAgICB2 b2lkICogb2JqID0gR0NfbG9jYWxfbWFsbG9jX2F0b21pYyhzaXplKTsKCgoKICAqKChfSnZfVlRh YmxlICoqKSBvYmopID0ga2xhc3MtPnZ0YWJsZTsKCgoKCgoKCiAgcmV0dXJuIG9iajsKfQojIDI2 ICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIKCgoKCgojIDEgIi4uLy4uLy4uL2xp YmphdmEvZ2NqL2ZpZWxkLmgiIDEKIyAxNSAiLi4vLi4vLi4vbGliamF2YS9nY2ovZmllbGQuaCIK IyAxICJqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZC5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK CiMgMSAiamF2YS9sYW5nL3JlZmxlY3QvQWNjZXNzaWJsZU9iamVjdC5oIiAxCgoKCgoKI3ByYWdt YSBpbnRlcmZhY2UKCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6QWNjZXNzaWJsZU9i amVjdCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBBY2Nlc3NpYmxl T2JqZWN0ICgpOwpwdWJsaWM6CiAgdmlydHVhbCBqYm9vbGVhbiBpc0FjY2Vzc2libGUgKCkgeyBy ZXR1cm4gZmxhZzsgfQogIHN0YXRpYyB2b2lkIHNldEFjY2Vzc2libGUgKEpBcnJheTwgOjpqYXZh OjpsYW5nOjpyZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0ICo+ICosIGpib29sZWFuKTsKICB2aXJ0 dWFsIHZvaWQgc2V0QWNjZXNzaWJsZSAoamJvb2xlYW4pOwpwcml2YXRlOgogIHN0YXRpYyB2b2lk IGNoZWNrUGVybWlzc2lvbiAoKTsKICB2b2lkIHNlY3VyZVNldEFjY2Vzc2libGUgKGpib29sZWFu KTsKcHVibGljOgogIGpib29sZWFuIGZsYWc7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFu Zzo6Q2xhc3MgY2xhc3MkOwp9OwojIDkgImphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmgiIDIKCmNs YXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpy ZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0CnsKcHVibGljOgogIEZpZWxkICgpOwpwdWJsaWM6CiAg amJvb2xlYW4gZXF1YWxzICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6 OkNsYXNzICpnZXREZWNsYXJpbmdDbGFzcyAoKSB7IHJldHVybiBkZWNsYXJpbmdDbGFzczsgfQog IDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXROYW1lICgpOwogIDo6amF2YTo6bGFuZzo6Q2xhc3Mg KmdldFR5cGUgKCk7CiAgamludCBnZXRNb2RpZmllcnMgKCk7CiAgamludCBoYXNoQ29kZSAoKTsK ICBqYm9vbGVhbiBnZXRCb29sZWFuICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqY2hhciBn ZXRDaGFyICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqYnl0ZSBnZXRCeXRlICg6OmphdmE6 Omxhbmc6Ok9iamVjdCAqKTsKICBqc2hvcnQgZ2V0U2hvcnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0 ICopOwogIGppbnQgZ2V0SW50ICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqbG9uZyBnZXRM b25nICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqZmxvYXQgZ2V0RmxvYXQgKDo6amF2YTo6 bGFuZzo6T2JqZWN0ICopOwogIGpkb3VibGUgZ2V0RG91YmxlICg6OmphdmE6Omxhbmc6Ok9iamVj dCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICg6OmphdmE6Omxhbmc6Ok9iamVjdCAq KTsKcHJpdmF0ZToKICBqYm9vbGVhbiBnZXRCb29sZWFuICg6OmphdmE6Omxhbmc6OkNsYXNzICos IDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpjaGFyIGdldENoYXIgKDo6amF2YTo6bGFuZzo6 Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamJ5dGUgZ2V0Qnl0ZSAoOjpqYXZh OjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqc2hvcnQgZ2V0U2hv cnQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamlu dCBnZXRJbnQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7 CiAgamxvbmcgZ2V0TG9uZyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9i amVjdCAqKTsKICBqZmxvYXQgZ2V0RmxvYXQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZh OjpsYW5nOjpPYmplY3QgKik7CiAgamRvdWJsZSBnZXREb3VibGUgKDo6amF2YTo6bGFuZzo6Q2xh c3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3QgKmdl dCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKcHVibGlj OgogIHZvaWQgc2V0Qnl0ZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamJ5dGUpOwogIHZvaWQg c2V0U2hvcnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpzaG9ydCk7CiAgdm9pZCBzZXRJbnQg KDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGppbnQpOwogIHZvaWQgc2V0TG9uZyAoOjpqYXZhOjps YW5nOjpPYmplY3QgKiwgamxvbmcpOwogIHZvaWQgc2V0RmxvYXQgKDo6amF2YTo6bGFuZzo6T2Jq ZWN0ICosIGpmbG9hdCk7CiAgdm9pZCBzZXREb3VibGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICos IGpkb3VibGUpOwogIHZvaWQgc2V0Q2hhciAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamNoYXIp OwogIHZvaWQgc2V0Qm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamJvb2xlYW4pOwpw cml2YXRlOgogIHZvaWQgc2V0Qnl0ZSAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxh bmc6Ok9iamVjdCAqLCBqYnl0ZSk7CiAgdm9pZCBzZXRTaG9ydCAoOjpqYXZhOjpsYW5nOjpDbGFz cyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqc2hvcnQpOwogIHZvaWQgc2V0SW50ICg6Omph dmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGppbnQpOwogIHZvaWQg c2V0TG9uZyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBq bG9uZyk7CiAgdm9pZCBzZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxh bmc6Ok9iamVjdCAqLCBqZmxvYXQpOwogIHZvaWQgc2V0RG91YmxlICg6OmphdmE6Omxhbmc6OkNs YXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpkb3VibGUpOwogIHZvaWQgc2V0Q2hhciAo OjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqY2hhcik7CiAg dm9pZCBzZXRCb29sZWFuICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq ZWN0ICosIGpib29sZWFuKTsKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6Omph dmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6 OkNsYXNzICopOwpwdWJsaWM6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6 amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwcml2YXRlOgogIHZvaWQgc2V0ICg6OmphdmE6Omxhbmc6 OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICop OwpwdWJsaWM6CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpOwpwcml2YXRlOgog IDo6amF2YTo6bGFuZzo6Q2xhc3MgKmRlY2xhcmluZ0NsYXNzOwogIDo6amF2YTo6bGFuZzo6U3Ry aW5nICpuYW1lOwogIGppbnQgb2Zmc2V0OwogIGZyaWVuZCBqZmllbGRJRCBfSnZfRnJvbVJlZmxl Y3RlZEZpZWxkIChqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqKTsKICBmcmllbmQgam9iamVj dCBfSnZfSk5JX1RvUmVmbGVjdGVkRmllbGQgKF9Kdl9KTklFbnYqLCBqY2xhc3MsIGpmaWVsZElE LCBqYm9vbGVhbik7CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzOwpwdWJsaWM6Cgog IHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAxNiAiLi4vLi4vLi4vbGli amF2YS9nY2ovZmllbGQuaCIgMgoKIyAxICJnbnUvZ2NqL1Jhd0RhdGEuaCIgMQoKCgoKCiNwcmFn bWEgaW50ZXJmYWNlCgoKCmV4dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBnbnUKICB7CiAgICBu YW1lc3BhY2UgZ2NqCiAgICB7CiAgICAgIGNsYXNzIFJhd0RhdGE7CiAgICB9CiAgfQp9OwoKY2xh c3MgOjpnbnU6Omdjajo6UmF3RGF0YSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnBy aXZhdGU6CiAgUmF3RGF0YSAoKTsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz cyBjbGFzcyQ7Cn07CiMgMTggIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2ZpZWxkLmgiIDIKCgoKCnN0 cnVjdCBfSnZfRmllbGQKewoKICBzdHJ1Y3QgX0p2X1V0ZjhDb25zdCogbmFtZTsKCgoKCiAgamNs YXNzIHR5cGU7CgogIF9Kdl91c2hvcnQgZmxhZ3M7CgoKCgogIF9Kdl91c2hvcnQgYnNpemU7CgoK ICB1bmlvbiB7CiAgICBqaW50IGJvZmZzZXQ7CiAgICB2b2lkKiBhZGRyOwogIH0gdTsKCgogIGpi b29sZWFuIGlzUmVzb2x2ZWQgKCkKICB7IHJldHVybiAhIChmbGFncyAmIDB4ODAwMCk7IH0KCiAg cHVibGljOgoKICBpbnQgZ2V0T2Zmc2V0ICgpIHsgcmV0dXJuIHUuYm9mZnNldDsgfQoKICBqb2Jq ZWN0IGdldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iaikKICB7IHJldHVybiAqKGpvYmplY3QgKiko KGNoYXIgKilvYmogKyBnZXRPZmZzZXQgKCkpOyB9CgogIGpmaWVsZElEIGdldE5leHRGaWVsZCAo KSB7IHJldHVybiB0aGlzICsgMTsgfQoKICBqYm9vbGVhbiBpc1JlZiAoKQogICAgewogICAgICBp ZiAoIWlzUmVzb2x2ZWQgKCkpCiAgICAgICAgewogICAgICAgICAgY2hhciBmaXJzdCA9ICgoX0p2 X1V0ZjhDb25zdCopdHlwZSktPmRhdGFbMF07CiAgICAgICAgICByZXR1cm4gZmlyc3QgPT0gJ1sn IHx8IGZpcnN0ID09ICdMJzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICByZXR1cm4gISB0eXBlLT5pc1ByaW1pdGl2ZSAoKTsKICAgICAgICB9CiAgICB9CgogIGpjbGFz cyBnZXRDbGFzcyAoKQogIHsKCgoKICAgIHJldHVybiB0eXBlOwogIH0KCgogIGludCBnZXRNb2Rp ZmllcnMoKQogIHsKICAgIHJldHVybiBmbGFncyAmIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1vZGlm aWVyOjpBTExfRkxBR1M7CiAgfQoKCgoKCiAgX0p2X1V0ZjhDb25zdCAqIGdldE5hbWVVdGY4Q29u c3QgKGpjbGFzcykgeyByZXR1cm4gbmFtZTsgfQoKCn07CgoKCmlubGluZSBqYnl0ZQpfSnZfR2V0 U3RhdGljQnl0ZUZpZWxkIChqY2xhc3MsIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAo amJ5dGUgKikgZmllbGQtPnUuYWRkcjsKfQoKaW5saW5lIGpzaG9ydApfSnZfR2V0U3RhdGljU2hv cnRGaWVsZCAoamNsYXNzLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpzaG9ydCAq KSBmaWVsZC0+dS5hZGRyOwp9CgppbmxpbmUgamludApfSnZfR2V0U3RhdGljSW50RmllbGQgKGpj bGFzcywgX0p2X0ZpZWxkKiBmaWVsZCkKewogIHJldHVybiAqIChqaW50ICopIGZpZWxkLT51LmFk ZHI7Cn0KCmlubGluZSBqbG9uZwpfSnZfR2V0U3RhdGljTG9uZ0ZpZWxkIChqY2xhc3MsIF9Kdl9G aWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamxvbmcgKikgZmllbGQtPnUuYWRkcjsKfQoKaW5s aW5lIGpvYmplY3QKX0p2X0dldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iaiwgX0p2X0ZpZWxkKiBm aWVsZCkKewogIHJldHVybiBmaWVsZC0+Z2V0T2JqZWN0RmllbGQgKG9iaik7Cn0KCmlubGluZSBq Ynl0ZQpfSnZfR2V0Qnl0ZUZpZWxkIChqb2JqZWN0IG9iaiwgX0p2X0ZpZWxkKiBmaWVsZCkKewog IHJldHVybiAqIChqYnl0ZSAqKSAoKGNoYXIqKSBvYmogKyBmaWVsZC0+Z2V0T2Zmc2V0ICgpKTsK fQoKaW5saW5lIGpzaG9ydApfSnZfR2V0U2hvcnRGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVs ZCogZmllbGQpCnsKICByZXR1cm4gKiAoanNob3J0ICopICgoY2hhciopIG9iaiArIGZpZWxkLT5n ZXRPZmZzZXQgKCkpOwp9CmlubGluZSBqaW50Cl9Kdl9HZXRJbnRGaWVsZCAoam9iamVjdCBvYmos IF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamludCAqKSAoKGNoYXIqKSBvYmogKyBm aWVsZC0+Z2V0T2Zmc2V0ICgpKTsKfQppbmxpbmUgamxvbmcKX0p2X0dldExvbmdGaWVsZCAoam9i amVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamxvbmcgKikgKChjaGFy Kikgb2JqICsgZmllbGQtPmdldE9mZnNldCAoKSk7Cn0KCmV4dGVybiBpbmxpbmUgamZpZWxkSUQK X0p2X0Zyb21SZWZsZWN0ZWRGaWVsZCAoamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmZpZWxk KQp7CiAgcmV0dXJuIChqZmllbGRJRCkgKChjaGFyICopIGZpZWxkLT5kZWNsYXJpbmdDbGFzcy0+ ZmllbGRzICsgZmllbGQtPm9mZnNldCk7Cn0KCgoKZXh0ZXJuIGlubGluZSBqZmllbGRJRApKdkdl dEZpcnN0SW5zdGFuY2VGaWVsZCAoamNsYXNzIGtsYXNzKQp7CiAgcmV0dXJuICYoa2xhc3MtPmZp ZWxkc1trbGFzcy0+c3RhdGljX2ZpZWxkX2NvdW50XSk7Cn0KCmV4dGVybiBpbmxpbmUgamludApK dk51bUluc3RhbmNlRmllbGRzIChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4ga2xhc3MtPmZpZWxk X2NvdW50IC0ga2xhc3MtPnN0YXRpY19maWVsZF9jb3VudDsKfQoKZXh0ZXJuIGlubGluZSBqZmll bGRJRApKdkdldEZpcnN0U3RhdGljRmllbGQgKGpjbGFzcyBrbGFzcykKewogIHJldHVybiAmKGts YXNzLT5maWVsZHNbMF0pOwp9CgpleHRlcm4gaW5saW5lIGppbnQKSnZOdW1TdGF0aWNGaWVsZHMg KGpjbGFzcyBrbGFzcykKewogIHJldHVybiBrbGFzcy0+c3RhdGljX2ZpZWxkX2NvdW50Owp9Cgpl eHRlcm4gaW5saW5lIGpib29sZWFuCkp2RmllbGRJc1JlZiAoamZpZWxkSUQgZmllbGQpCnsKICBy ZXR1cm4gZmllbGQtPmlzUmVmICgpICYmIGZpZWxkLT50eXBlICE9ICZnbnU6Omdjajo6UmF3RGF0 YTo6Y2xhc3MkOwp9CgpleHRlcm4gaW5saW5lIGpvYmplY3QKSnZHZXRPYmplY3RGaWVsZCAoam9i amVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gX0p2X0dldE9iamVjdEZpZWxk IChvYmosIGZpZWxkKTsKfQojIDMyICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIK CgpzdHJ1Y3QgX0p2X1ZUYWJsZQp7CgoKCiAgdHlwZWRlZiB2b2lkICp2dGFibGVfZWx0OwoKICBq Y2xhc3MgY2xhczsKICB2b2lkICpnY19kZXNjcjsKCgoKICB2dGFibGVfZWx0IG1ldGhvZFsxXTsK IyA2MCAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIgogIHZvaWQgKmdldF9tZXRob2Qo aW50IGkpIHsgcmV0dXJuIG1ldGhvZFtpXTsgfQogIHZvaWQgc2V0X21ldGhvZChpbnQgaSwgdm9p ZCAqZnB0cikgeyBtZXRob2RbaV0gPSBmcHRyOyB9CiAgdm9pZCAqZ2V0X2ZpbmFsaXplcigpIHsg cmV0dXJuIGdldF9tZXRob2QoMCk7IH0KCgogIHN0YXRpYyBzaXplX3QgdnRhYmxlX2VsdF9zaXpl KCkgeyByZXR1cm4gc2l6ZW9mKHZ0YWJsZV9lbHQpOyB9CgoKICBzdGF0aWMgamludCBpZHhfdG9f b2Zmc2V0IChpbnQgaW5kZXgpCiAgewogICAgcmV0dXJuICgyICogc2l6ZW9mICh2b2lkICopKSAr IChpbmRleCAqIHZ0YWJsZV9lbHRfc2l6ZSAoKSk7CiAgfQogIHN0YXRpYyBfSnZfVlRhYmxlICpu ZXdfdnRhYmxlIChpbnQgY291bnQpOwp9OwoKCgoKCgpzdHJ1Y3QgX0p2X0FycmF5VlRhYmxlIDog cHVibGljIF9Kdl9WVGFibGUKewogIHZ0YWJsZV9lbHQgZXh0cmFfbWV0aG9kWzUgLSAxXTsKfTsK CnVuaW9uIF9Kdl93b3JkCnsKICBqb2JqZWN0IG87CiAgamludCBpOwogIGpmbG9hdCBmOwogIGpp bnQgaWFbMV07CiAgdm9pZCogcDsKIyAxMDAgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qdm0u aCIKICBqY2xhc3MgY2xheno7CiAganN0cmluZyBzdHJpbmc7CiAgc3RydWN0IF9Kdl9GaWVsZCAq ZmllbGQ7CiAgc3RydWN0IF9Kdl9VdGY4Q29uc3QgKnV0Zjg7CiAgc3RydWN0IF9Kdl9SZXNvbHZl ZE1ldGhvZCAqcm1ldGhvZDsKfTsKCnVuaW9uIF9Kdl93b3JkMgp7CiAgamludCBpYVsyXTsKICBq bG9uZyBsOwogIGpkb3VibGUgZDsKfTsKIyAxMjkgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9q dm0uaCIKZXh0ZXJuIGludCBfSnZfc3RyTGVuZ3RoVXRmOChjaGFyKiBzdHIsIGludCBsZW4pOwoK dHlwZWRlZiBzdHJ1Y3QgX0p2X1V0ZjhDb25zdCBVdGY4Q29uc3Q7Cl9Kdl9VdGY4Q29uc3QgKl9K dl9tYWtlVXRmOENvbnN0IChjaGFyICpzLCBpbnQgbGVuKTsKX0p2X1V0ZjhDb25zdCAqX0p2X21h a2VVdGY4Q29uc3QgKGpzdHJpbmcgc3RyaW5nKTsKZXh0ZXJuIGpib29sZWFuIF9Kdl9lcXVhbFV0 ZjhDb25zdHMgKF9Kdl9VdGY4Q29uc3QgKiwgX0p2X1V0ZjhDb25zdCAqKTsKZXh0ZXJuIGpib29s ZWFuIF9Kdl9lcXVhbCAoX0p2X1V0ZjhDb25zdCAqLCBqc3RyaW5nLCBqaW50KTsKZXh0ZXJuIGpi b29sZWFuIF9Kdl9lcXVhbG4gKF9Kdl9VdGY4Q29uc3QgKiwganN0cmluZywgamludCk7CgoKCgpu YW1lc3BhY2UgZ2NqCnsKCiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKnZvaWRfc2lnbmF0dXJlOwog IGV4dGVybiBfSnZfVXRmOENvbnN0ICpjbGluaXRfbmFtZTsKICBleHRlcm4gX0p2X1V0ZjhDb25z dCAqaW5pdF9uYW1lOwogIGV4dGVybiBfSnZfVXRmOENvbnN0ICpmaW5pdF9uYW1lOwoKCiAgZXh0 ZXJuIGJvb2wgcnVudGltZUluaXRpYWxpemVkOwp9OwoKCnR5cGVkZWYgdm9pZCBfSnZfRmluYWxp emVyRnVuYyAoam9iamVjdCk7CgoKdm9pZCAqX0p2X0FsbG9jT2JqIChqc2l6ZSBzaXplLCBqY2xh c3MgY2wpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgp2b2lkICpfSnZfQWxsb2NQdHJG cmVlT2JqIChqc2l6ZSBzaXplLCBqY2xhc3MgY2wpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18p KTsKCnZvaWQgKl9Kdl9BbGxvY0FycmF5IChqc2l6ZSBzaXplLCBqY2xhc3MgY2wpIF9fYXR0cmli dXRlX18oKF9fbWFsbG9jX18pKTsKCnZvaWQgKl9Kdl9BbGxvY0J5dGVzIChqc2l6ZSBzaXplKSBf X2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKdm9pZCAqX0p2X0FsbG9jUmF3T2JqIChqc2l6 ZSBzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7Cgp2b2lkIF9Kdl9UaHJvd05vTWVt b3J5KCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CgoKdm9pZCAqX0p2X0FsbG9jVHJh Y2VPbmUgKGpzaXplIHNpemUgKTsKCnZvaWQgKl9Kdl9BbGxvY1RyYWNlVHdvIChqc2l6ZSBzaXpl ICk7Cgp2b2lkIF9Kdl9Jbml0R0MgKHZvaWQpOwoKdm9pZCBfSnZfUmVnaXN0ZXJGaW5hbGl6ZXIg KHZvaWQgKm9iamVjdCwgX0p2X0ZpbmFsaXplckZ1bmMgKm1ldGhvZCk7Cgp2b2lkICogX0p2X0J1 aWxkR0NEZXNjcihqY2xhc3MpOwoKCgp2b2lkICpfSnZfTWFsbG9jVW5jaGVja2VkIChqc2l6ZSBz aXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKCnZvaWQgX0p2X0dDSW5pdGlhbGl6 ZUZpbmFsaXplcnMgKHZvaWQgKCpub3RpZmllcikgKHZvaWQpKTsKCnZvaWQgX0p2X1J1bkZpbmFs aXplcnMgKHZvaWQpOwoKdm9pZCBfSnZfUnVuQWxsRmluYWxpemVycyAodm9pZCk7Cgp2b2lkIF9K dl9SdW5HQyAodm9pZCk7Cgp2b2lkIF9Kdl9EaXNhYmxlR0MgKHZvaWQpOwp2b2lkIF9Kdl9FbmFi bGVHQyAodm9pZCk7CgoKCnZvaWQgX0p2X0dDUmVnaXN0ZXJEaXNhcHBlYXJpbmdMaW5rIChqb2Jq ZWN0ICpvYmpwKTsKCgpqYm9vbGVhbiBfSnZfR0NDYW5SZWNsYWltU29mdFJlZmVyZW5jZSAoam9i amVjdCBvYmopOwoKCmxvbmcgX0p2X0dDVG90YWxNZW1vcnkgKHZvaWQpOwoKbG9uZyBfSnZfR0NG cmVlTWVtb3J5ICh2b2lkKTsKCgoKdm9pZCBfSnZfR0NTZXRJbml0aWFsSGVhcFNpemUgKHNpemVf dCBzaXplKTsKCgoKdm9pZCBfSnZfR0NTZXRNYXhpbXVtSGVhcFNpemUgKHNpemVfdCBzaXplKTsK CgoKCnZvaWQgX0p2X1NldEluaXRpYWxIZWFwU2l6ZSAoY29uc3QgY2hhciAqYXJnKTsKCgoKCnZv aWQgX0p2X1NldE1heGltdW1IZWFwU2l6ZSAoY29uc3QgY2hhciAqYXJnKTsKCmV4dGVybiAiQyIg dm9pZCBKdlJ1bk1haW4gKGpjbGFzcyBrbGFzcywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2 KTsKdm9pZCBfSnZfUnVuTWFpbiAoamNsYXNzIGtsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQg YXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCiAgICAgICAgICAgICAgICAgIGJvb2wgaXNfamFyKTsK CgoKCgoKaW5saW5lIF9Kdl9WVGFibGUgKgpfSnZfVlRhYmxlOjpuZXdfdnRhYmxlIChpbnQgY291 bnQpCnsKICBzaXplX3Qgc2l6ZSA9IHNpemVvZihfSnZfVlRhYmxlKSArIChjb3VudCAtIDEpICog dnRhYmxlX2VsdF9zaXplICgpOwogIHJldHVybiAoX0p2X1ZUYWJsZSAqKSBfSnZfQWxsb2NCeXRl cyAoc2l6ZSk7Cn0KCgppbmxpbmUgamludApfSnZfSGFzaENvZGUgKGpvYmplY3Qgb2JqKQp7CgoK CiAgcmV0dXJuIChqaW50KSAoKHVuc2lnbmVkIGxvbmcpIG9iaiAlIDB4N2ZmZmZmZmYpOwp9CgoK CgoKCmlubGluZSBjaGFyICoKX0p2X0dldEFycmF5RWxlbWVudEZyb21FbGVtZW50VHlwZSAoam9i amVjdCBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzIGVs ZW1lbnRfdHlwZSkKewogIGNoYXIgKmVsdHM7CiAgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZf Ynl0ZUNsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpieXRlQXJyYXkpIGFy cmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X3Nob3J0Q2xhc3MpKQogICAg ZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoanNob3J0QXJyYXkpIGFycmF5KTsKICBlbHNlIGlm IChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2ludENsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBl bGVtZW50cyAoKGppbnRBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAo JiBfSnZfbG9uZ0NsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpsb25nQXJy YXkpIGFycmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2Jvb2xlYW5DbGFz cykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqYm9vbGVhbkFycmF5KSBhcnJheSk7 CiAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09ICgmIF9Kdl9jaGFyQ2xhc3MpKQogICAgZWx0cyA9 IChjaGFyICopIGVsZW1lbnRzICgoamNoYXJBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1l bnRfdHlwZSA9PSAoJiBfSnZfZmxvYXRDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVu dHMgKChqZmxvYXRBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBf SnZfZG91YmxlQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoamRvdWJsZUFy cmF5KSBhcnJheSk7CiAgZWxzZQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoam9iamVj dEFycmF5KSBhcnJheSk7CiAgcmV0dXJuIGVsdHM7Cn0KCmV4dGVybiAiQyIgdm9pZCBfSnZfVGhy b3dCYWRBcnJheUluZGV4IChqaW50IGJhZF9pbmRleCkKICBfX2F0dHJpYnV0ZV9fKChub3JldHVy bikpOwpleHRlcm4gIkMiIHZvaWQgX0p2X1Rocm93TnVsbFBvaW50ZXJFeGNlcHRpb24gKHZvaWQp CiAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9OZXdB cnJheSAoamludCB0eXBlLCBqaW50IHNpemUpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykp OwpleHRlcm4gIkMiIGpvYmplY3QgX0p2X05ld011bHRpQXJyYXkgKGpjbGFzcyBrbGFzcywgamlu dCBkaW1zLCAuLi4pCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMiIHZv aWQgKl9Kdl9DaGVja0Nhc3QgKGpjbGFzcyBrbGFzcywgam9iamVjdCBvYmopOwpleHRlcm4gIkMi IHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QgKGpjbGFzcyBrbGFzcywgVXRmOENvbnN0 ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRmOENv bnN0ICpzaWduYXR1cmUpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRo b2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRoX2lkeCk7CmV4dGVybiAiQyIgdm9pZCBf SnZfQ2hlY2tBcnJheVN0b3JlIChqb2JqZWN0IGFycmF5LCBqb2JqZWN0IG9iaik7CmV4dGVybiAi QyIgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzcyAoamNsYXNzIGtsYXNzKTsKZXh0ZXJuICJDIiB2b2lk IF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CmV4dGVybiAiQyIgdm9pZCBf SnZfUmVnaXN0ZXJSZXNvdXJjZSAodm9pZCAqdnB0cik7CmV4dGVybiB2b2lkIF9Kdl9VbnJlZ2lz dGVyQ2xhc3MgKF9Kdl9VdGY4Q29uc3QqLCBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciopOwpleHRl cm4gdm9pZCBfSnZfUmVzb2x2ZUZpZWxkIChfSnZfRmllbGQgKiwgamF2YTo6bGFuZzo6Q2xhc3NM b2FkZXIqKTsKCmV4dGVybiBqY2xhc3MgX0p2X0ZpbmRDbGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAq bG9hZGVyKTsKZXh0ZXJuIGpjbGFzcyBfSnZfRmluZENsYXNzRnJvbVNpZ25hdHVyZSAoY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpD bGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIHZvaWQgX0p2X0dldFR5cGVzRnJvbVNpZ25hdHVy ZSAoam1ldGhvZElEIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgamNsYXNzIGRlY2xhcmluZ0NsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKQXJyYXk8amNsYXNzPiAqKmFyZ190eXBlc19vdXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcyAqcmV0dXJuX3R5cGVfb3V0KTsKCmV4dGVybiBq b2JqZWN0IF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmosIGpjbGFzcyByZXR1cm5fdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aCwgamJv b2xlYW4gaXNfY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SkFycmF5PGpjbGFzcz4gKnBhcmFtZXRlcl90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqb2JqZWN0QXJyYXkgYXJncyk7Cgp1bmlvbiBqdmFsdWU7CmV4dGVybiBqdGhy b3dhYmxlIF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgamNsYXNzIHJldHVybl90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGlzX2NvbnN0cnVjdG9yLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEpBcnJheTxqY2xhc3M+ICpwYXJhbWV0ZXJfdHlwZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICphcmdzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqcmVzdWx0KTsKCmV4dGVy biBqb2JqZWN0IF9Kdl9OZXdNdWx0aUFycmF5IChqY2xhc3MsIGppbnQgbmRpbXMsIGppbnQqIGRp bXMpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCmV4dGVybiAiQyIKewogIGppbnQg X0p2X2RpdkkgKGppbnQsIGppbnQpOwogIGppbnQgX0p2X3JlbUkgKGppbnQsIGppbnQpOwogIGps b25nIF9Kdl9kaXZKIChqbG9uZywgamxvbmcpOwogIGpsb25nIF9Kdl9yZW1KIChqbG9uZywgamxv bmcpOwp9CgoKZXh0ZXJuIGNoYXIgKl9Kdl9UaGlzRXhlY3V0YWJsZSAodm9pZCk7CmV4dGVybiB2 b2lkIF9Kdl9UaGlzRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgp2b2lkICpfSnZfRmluZFN5 bWJvbEluRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBfSnZfSk5JX0lu aXQgKHZvaWQpOwoKCl9Kdl9KTklFbnYgKl9Kdl9HZXRDdXJyZW50Sk5JRW52ICgpOwp2b2lkIF9K dl9TZXRDdXJyZW50Sk5JRW52IChfSnZfSk5JRW52ICopOwoKc3RydWN0IF9Kdl9KYXZhVk07Cl9K dl9KYXZhVk0gKl9Kdl9HZXRKYXZhVk0gKCk7CgoKYm9vbCBfSnZfVmVyaWZ5RmllbGRTaWduYXR1 cmUgKF9Kdl9VdGY4Q29uc3Qqc2lnKTsKYm9vbCBfSnZfVmVyaWZ5TWV0aG9kU2lnbmF0dXJlIChf SnZfVXRmOENvbnN0KnNpZyk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNzTmFtZSAodW5zaWduZWQgY2hh ciogcHRyLCBfSnZfdXNob3J0IGxlbmd0aCk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNzTmFtZSAoX0p2 X1V0ZjhDb25zdCAqbmFtZSk7CmJvb2wgX0p2X1ZlcmlmeUlkZW50aWZpZXIgKF9Kdl9VdGY4Q29u c3QgKik7CmJvb2wgX0p2X0NsYXNzTmFtZVNhbWVQYWNrYWdlIChfSnZfVXRmOENvbnN0ICpuYW1l MSwgX0p2X1V0ZjhDb25zdCAqbmFtZTIpOwoKCgojIDEgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVk ZS9qdm1waS5oIiAxCiMgMTcgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qdm1waS5oIgojIDEg Ii4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIgMQojIDE3ICIuLi8uLi8uLi9saWJqYXZh L2luY2x1ZGUvam5pLmgiCiMgMSAiZ2NqL2xpYmdjai1jb25maWcuaCIgMQojIDE4ICIuLi8uLi8u Li9saWJqYXZhL2luY2x1ZGUvam5pLmgiIDIKCgojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9nY2Mt My4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAxIDMK IyAzOSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgt Z251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL2hvbWUvZ2Iv cnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyA0NCAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYt bWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0ICIvaG9tZS9n Yi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvaG9tZS9n Yi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi9ob21l L2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5j bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMg MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9n Y2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMzIxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1s aW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2lu dF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2Jq LWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5o IiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAg ICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0 YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVj dAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsK dHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRl Owp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4 LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL2hvbWUvZ2IvcnBt L0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0Kewog IF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dD T05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQs CiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAg X19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoK CgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJS T1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh bnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu dCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9f Z2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp bnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlw ZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1 Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9f aW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVl ZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87 CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2Rh dGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19v dXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoK CiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAg X19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29u dl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVw czsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0g Kl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1 bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVj dCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7 CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ X18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5k cmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvaG9tZS9nYi9y cG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUv c3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1 NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFy a2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1 ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51 bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hh ciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9i YXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hh ciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9l bmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNo YXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1 Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f b2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2ln bmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xv Y2tfdCAqX2xvY2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBf b2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2Rl OwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAq KV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklM RV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf MV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoj IDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFk X2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoK Cgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25z dCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29m ZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk ICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlv bl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVk ZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9z ZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19y ZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2Vl azsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0 eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoK c3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0 cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAo X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhy b3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g d2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dv dmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgp OwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9f cGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg X0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5s b2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmls ZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpl eHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg KiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50 ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxF ICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRu IChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lP X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19v ZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJv dyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90 LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19G SUxFICopIHRocm93ICgpOwojIDUxNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDc1ICIv aG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2Nj L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3Zh X2xpc3RfXzsKIyA4OSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJh a2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBv c190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi9ob21lL2diL3Jw bS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9z dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAi L2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2dj Yy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxF ICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChf X2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9f Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2NyAiL2hvbWUvZ2IvcnBtL0JV SUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo YXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1f ciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxODcgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4x L29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy biBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4 KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g aW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2gg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2Nj LTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg dGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19j b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29r aWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsK CgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0 IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFt IChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9p ZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9f bW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNl dGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50 ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHBy aW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK ZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0 ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg MCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19y ZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVz dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5m IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2Fu ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2Fu Zl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3Nj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkp KTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFy ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2Nj LTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGlu dCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFy ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBf X3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tl ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0 cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50 IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVy biBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9f cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRl cm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRy LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZz ZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4 dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OCAiL2hvbWUv Z2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90 IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgp OwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9f cG9zKSB0aHJvdyAoKTsKIyA1MzIgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2 LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNl ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhy b3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2 NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2 NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAq X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZp bGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVu IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4 dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy ICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0 ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0 YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1 Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg ZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVu bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzkgIi9ob21lL2diL3JwbS9C VUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRp by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3IvaW5j bHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJu IHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIg KHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5l IGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19m cCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnAp IDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5l IGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4p LT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4p IDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5s aW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChf X2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+ X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tl ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg KCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApw dXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCkt Pl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo c3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91 dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90Cmdl dGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJl YW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoK aW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAg cmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDAgIi9ob21l L2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5j bHVkZS9zdGRpby5oIiAyIDMKCgp9CiMgMjEgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmku aCIgMgoKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1s aW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDExMCAiL2hvbWUvZ2IvcnBtL0JV SUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGFy Zy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAyMyAiLi4vLi4vLi4vbGli amF2YS9pbmNsdWRlL2puaS5oIiAyCiMgMzIgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmku aCIKIyAxICJnbnUvZ2NqL3J1bnRpbWUvSk5JV2Vha1JlZi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl cmZhY2UKCiMgMSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDEKCgoKCgojcHJhZ21h IGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZS5oIiAxCgoKCgoKI3ByYWdt YSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5h bWVzcGFjZSBnY2oKICAgIHsKICAgICAgY2xhc3MgUmF3RGF0YTsKICAgIH0KICB9Cn07CgpjbGFz cyA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2Jq ZWN0CnsKcHVibGljOgogIFJlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgUmVm ZXJlbmNlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJl bmNlUXVldWUgKik7CnByaXZhdGU6CiAgdm9pZCBjcmVhdGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0 ICopOwpwdWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICgpOwogIHZp cnR1YWwgdm9pZCBjbGVhciAoKTsKICB2aXJ0dWFsIGpib29sZWFuIGlzRW5xdWV1ZWQgKCk7CiAg dmlydHVhbCBqYm9vbGVhbiBlbnF1ZXVlICgpOwpwdWJsaWM6CiAgOjpnbnU6Omdjajo6UmF3RGF0 YSAqcmVmZXJlbnQ7CiAgOjpnbnU6Omdjajo6UmF3RGF0YSAqY29weTsKICA6OmphdmE6Omxhbmc6 OnJlZjo6UmVmZXJlbmNlUXVldWUgKnF1ZXVlOwogIDo6amF2YTo6bGFuZzo6cmVmOjpSZWZlcmVu Y2UgKm5leHRPblF1ZXVlOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6Ok9iamVjdCAqbG9jazsKcHVi bGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9s YW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmOjpXZWFr UmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpSZWZlcmVuY2UKewpwdWJsaWM6 CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgV2Vha1JlZmVyZW5j ZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5nOjpyZWY6OlJlZmVyZW5jZVF1 ZXVlICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiZ251 L2djai9ydW50aW1lL0pOSVdlYWtSZWYuaCIgMgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNl IGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgbmFtZXNwYWNlIHJ1bnRpbWUK ICAgICAgewogICAgICAgIGNsYXNzIEpOSVdlYWtSZWY7CiAgICAgIH0KICAgIH0KICB9Cn07Cgpj bGFzcyA6OmdudTo6Z2NqOjpydW50aW1lOjpKTklXZWFrUmVmIDogcHVibGljIDo6amF2YTo6bGFu Zzo6cmVmOjpXZWFrUmVmZXJlbmNlCnsKcHVibGljOgogIEpOSVdlYWtSZWYgKDo6amF2YTo6bGFu Zzo6T2JqZWN0ICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMg MzMgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIgMgoKdHlwZWRlZiBnbnU6Omdjajo6 cnVudGltZTo6Sk5JV2Vha1JlZiAqandlYWs7Cgp0eXBlZGVmIHN0cnVjdCBfSnZfSk5JRW52IEpO SUVudjsKdHlwZWRlZiBzdHJ1Y3QgX0p2X0phdmFWTSBKYXZhVk07CiMgMTgyICIuLi8uLi8uLi9s aWJqYXZhL2luY2x1ZGUvam5pLmgiCmV4dGVybiAiQyIKewoKCgoKZXh0ZXJuIGppbnQgSk5JX09u TG9hZCAoSmF2YVZNICosIHZvaWQgKik7CmV4dGVybiB2b2lkIEpOSV9PblVubG9hZCAoSmF2YVZN ICosIHZvaWQgKik7CgoKCmV4dGVybiBqaW50IEpOSV9HZXREZWZhdWx0SmF2YVZNSW5pdEFyZ3Mg KHZvaWQgKik7CmV4dGVybiBqaW50IEpOSV9DcmVhdGVKYXZhVk0gKEphdmFWTSAqKiwgdm9pZCAq Kiwgdm9pZCAqKTsKZXh0ZXJuIGppbnQgSk5JX0dldENyZWF0ZWRKYXZhVk1zKEphdmFWTSAqKiwg anNpemUsIGpzaXplICopOwoKCn07CgoKdHlwZWRlZiB1bmlvbiBqdmFsdWUKewogIGpib29sZWFu IHo7CiAgamJ5dGUgYjsKICBqY2hhciBjOwogIGpzaG9ydCBzOwogIGppbnQgaTsKICBqbG9uZyBq OwogIGpmbG9hdCBmOwogIGpkb3VibGUgZDsKICBqb2JqZWN0IGw7Cn0ganZhbHVlOwoKCnR5cGVk ZWYgdm9pZCAqICgqX0p2X2Z1bmMpICguLi4pOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBjaGFy ICpuYW1lOwogIGNoYXIgKnNpZ25hdHVyZTsKICB2b2lkICpmblB0cjsKfSBKTklOYXRpdmVNZXRo b2Q7CgpzdHJ1Y3QgSk5JTmF0aXZlSW50ZXJmYWNlCnsKICBfSnZfZnVuYyByZXNlcnZlZDA7CiAg X0p2X2Z1bmMgcmVzZXJ2ZWQxOwogIF9Kdl9mdW5jIHJlc2VydmVkMjsKICBfSnZfZnVuYyByZXNl cnZlZDM7CgogIGppbnQgKCpHZXRWZXJzaW9uKSAoSk5JRW52ICopOwogIGpjbGFzcyAoKkRlZmlu ZUNsYXNzKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgamJ5dGUgKiwganNpemUpOwogIGpjbGFzcyAoKkZpbmRDbGFz cykgKEpOSUVudiAqLCBjb25zdCBjaGFyICopOwoKICBqbWV0aG9kSUQgKCpGcm9tUmVmbGVjdGVk TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpmaWVsZElEICgqRnJvbVJlZmxlY3RlZEZp ZWxkKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpvYmplY3QgKCpUb1JlZmxlY3RlZE1ldGhvZCkg KEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqYm9vbGVhbik7CgogIGpjbGFzcyAoKkdldFN1cGVyY2xhc3MpIChK TklFbnYgKiwgamNsYXNzKTsKICBqYm9vbGVhbiAoKklzQXNzaWduYWJsZUZyb20pIChKTklFbnYg KiwgamNsYXNzLCBqY2xhc3MpOwoKICBqb2JqZWN0ICgqVG9SZWZsZWN0ZWRGaWVsZCkgKEpOSUVu diAqLCBqY2xhc3MsIGpmaWVsZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGpib29sZWFuKTsKCiAgamludCAoKlRocm93KSAoSk5JRW52ICosIGp0aHJvd2Fi bGUpOwogIGppbnQgKCpUaHJvd05ldykgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIgKik7 CiAganRocm93YWJsZSAoKkV4Y2VwdGlvbk9jY3VycmVkKSAoSk5JRW52ICopOwogIHZvaWQgKCpF eGNlcHRpb25EZXNjcmliZSkgKEpOSUVudiAqKTsKICB2b2lkICgqRXhjZXB0aW9uQ2xlYXIpIChK TklFbnYgKik7CiAgdm9pZCAoKkZhdGFsRXJyb3IpIChKTklFbnYgKiwgY29uc3QgY2hhciAqKTsK CiAgamludCAoKlB1c2hMb2NhbEZyYW1lKSAoSk5JRW52ICosIGppbnQpOwogIGpvYmplY3QgKCpQ b3BMb2NhbEZyYW1lKSAoSk5JRW52ICosIGpvYmplY3QpOwoKICBqb2JqZWN0ICgqTmV3R2xvYmFs UmVmKSAoSk5JRW52ICosIGpvYmplY3QpOwogIHZvaWQgKCpEZWxldGVHbG9iYWxSZWYpIChKTklF bnYgKiwgam9iamVjdCk7CiAgdm9pZCAoKkRlbGV0ZUxvY2FsUmVmKSAoSk5JRW52ICosIGpvYmpl Y3QpOwogIGpib29sZWFuICgqSXNTYW1lT2JqZWN0KSAoSk5JRW52ICosIGpvYmplY3QsIGpvYmpl Y3QpOwoKICBqb2JqZWN0ICgqTmV3TG9jYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgamlu dCAoKkVuc3VyZUxvY2FsQ2FwYWNpdHkpIChKTklFbnYgKiwgamludCk7CgogIGpvYmplY3QgKCpB bGxvY09iamVjdCkgKEpOSUVudiAqLCBqY2xhc3MpOwogIGpvYmplY3QgKCpOZXdPYmplY3QpIChK TklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsIC4uLik7CiAgam9iamVjdCAoKk5ld09iamVjdFYp IChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgam9iamVjdCAoKk5ld09iamVjdEEpIChKTklF bnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAganZhbHVlICopOwoKICBqY2xhc3MgKCpHZXRPYmplY3RDbGFzcykgKEpOSUVu diAqLCBqb2JqZWN0KTsKICBqYm9vbGVhbiAoKklzSW5zdGFuY2VPZikgKEpOSUVudiAqLCBqb2Jq ZWN0LCBqY2xhc3MpOwogIGptZXRob2RJRCAoKkdldE1ldGhvZElEKSAoSk5JRW52ICosIGpjbGFz cywgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKik7CgogIGpvYmplY3QgKCpDYWxsT2JqZWN0TWV0aG9kKSAoSk5JRW52 ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuLi4pOwogIGpvYmplY3QgKCpDYWxsT2JqZWN0TWV0aG9kVikgKEpOSUVudiAq LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFfbGlzdCk7CiAgam9iamVjdCAoKkNhbGxPYmplY3RNZXRob2RBKSAoSk5JRW52 ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqdmFsdWUgKik7CiAgamJvb2xlYW4gKCpDYWxsQm9vbGVhbk1ldGhvZCkgKEpO SUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxCb29sZWFuTWV0aG9kVikgKEpO SUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsQm9vbGVhbk1ldGhvZEEp IChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYnl0ZSAoKkNhbGxCeXRlTWV0aG9kKSAo Sk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuLi4pOwogIGpieXRlICgqQ2FsbEJ5dGVNZXRob2RWKSAoSk5JRW52 ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2YV9saXN0KTsKICBqYnl0ZSAoKkNhbGxCeXRlTWV0aG9kQSkgKEpOSUVudiAq LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAganZhbHVlICopOwogIGpjaGFyICgqQ2FsbENoYXJNZXRob2QpIChKTklFbnYgKiwg am9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC4uLik7CiAgamNoYXIgKCpDYWxsQ2hhck1ldGhvZFYpIChKTklFbnYgKiwgam9iamVj dCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhX2xpc3QpOwogIGpjaGFyICgqQ2FsbENoYXJNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3Qs IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq dmFsdWUgKik7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3Qs IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu Li4pOwogIGpzaG9ydCAoKkNhbGxTaG9ydE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1l dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xp c3QpOwogIGpzaG9ydCAoKkNhbGxTaG9ydE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1l dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1 ZSAqKTsKICBqaW50ICgqQ2FsbEludE1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBq aW50ICgqQ2FsbEludE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGppbnQg KCpDYWxsSW50TWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGpsb25nICgq Q2FsbExvbmdNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamxvbmcgKCpDYWxsTG9u Z01ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpsb25nICgqQ2FsbExvbmdN ZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamZsb2F0ICgqQ2FsbEZsb2F0 TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpmbG9hdCAoKkNhbGxGbG9hdE1ldGhv ZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpmbG9hdCAoKkNhbGxGbG9hdE1ldGhv ZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqZG91YmxlICgqQ2FsbERvdWJsZU1l dGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqZG91YmxlICgqQ2FsbERvdWJsZU1ldGhv ZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpkb3VibGUgKCpDYWxsRG91YmxlTWV0 aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIHZvaWQgKCpDYWxsVm9pZE1ldGhv ZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICB2b2lkICgqQ2FsbFZvaWRNZXRob2RWKSAoSk5J RW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YV9saXN0KTsKICB2b2lkICgqQ2FsbFZvaWRNZXRob2RBKSAoSk5JRW52 ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqdmFsdWUgKik7CgogIGpvYmplY3QgKCpDYWxsTm9udmlydHVhbE9iamVjdE1l dGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpvYmplY3QgKCpDYWxsTm9u dmlydHVhbE9iamVjdE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7 CiAgam9iamVjdCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2Jq ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg am1ldGhvZElELCBqdmFsdWUgKik7CiAgamJvb2xlYW4gKCpDYWxsTm9udmlydHVhbEJvb2xlYW5N ZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxO b252aXJ0dWFsQm9vbGVhbk1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xp c3QpOwogIGpib29sZWFuICgqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAq LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpieXRlICgqQ2FsbE5vbnZpcnR1YWxCeXRl TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamJ5dGUgKCpDYWxsTm9u dmlydHVhbEJ5dGVNZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xpc3QpOwog IGpieXRlICgqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBq Y2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhv ZElELCBqdmFsdWUgKik7CiAgamNoYXIgKCpDYWxsTm9udmlydHVhbENoYXJNZXRob2QpIChKTklF bnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqY2hhciAoKkNhbGxOb252aXJ0dWFsQ2hhck1l dGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamNoYXIgKCpDYWxs Tm9udmlydHVhbENoYXJNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAq KTsKICBqc2hvcnQgKCpDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kKSAoSk5JRW52ICosIGpvYmpl Y3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq bWV0aG9kSUQsIC4uLik7CiAganNob3J0ICgqQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYpIChK TklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAganNob3J0ICgqQ2FsbE5vbnZpcnR1 YWxTaG9ydE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpp bnQgKCpDYWxsTm9udmlydHVhbEludE1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAu Li4pOwogIGppbnQgKCpDYWxsTm9udmlydHVhbEludE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVj dCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpt ZXRob2RJRCwgdmFfbGlzdCk7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSkgKEpO SUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAgamxvbmcgKCpDYWxsTm9udmlydHVh bExvbmdNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqbG9uZyAoKkNh bGxOb252aXJ0dWFsTG9uZ01ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlz dCk7CiAgamxvbmcgKCpDYWxsTm9udmlydHVhbExvbmdNZXRob2RBKSAoSk5JRW52ICosIGpvYmpl Y3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq bWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamZsb2F0ICgqQ2FsbE5vbnZpcnR1 YWxGbG9hdE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamZs b2F0ICgqQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNs YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCwganZhbHVlICopOwogIGpkb3VibGUgKCpDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZCkgKEpO SUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpkb3VibGUgKCpDYWxsTm9udmlydHVhbERv dWJsZU1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamRvdWJs ZSAoKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE LCBqdmFsdWUgKik7CiAgdm9pZCAoKkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZCkgKEpOSUVudiAq LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElELCAuLi4pOwogIHZvaWQgKCpDYWxsTm9udmlydHVhbFZvaWRNZXRob2RW KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xpc3QpOwogIHZvaWQgKCpDYWxsTm9udmly dHVhbFZvaWRNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKCiAg amZpZWxkSUQgKCpHZXRGaWVsZElEKSAoSk5JRW52ICosIGpjbGFzcywgY29uc3QgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7 CgogIGpvYmplY3QgKCpHZXRPYmplY3RGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ RCk7CiAgamJvb2xlYW4gKCpHZXRCb29sZWFuRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwgamZp ZWxkSUQpOwogIGpieXRlICgqR2V0Qnl0ZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVs ZElEKTsKICBqY2hhciAoKkdldENoYXJGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ RCk7CiAganNob3J0ICgqR2V0U2hvcnRGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ RCk7CiAgamludCAoKkdldEludEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsK ICBqbG9uZyAoKkdldExvbmdGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAg amZsb2F0ICgqR2V0RmxvYXRGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAg amRvdWJsZSAoKkdldERvdWJsZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsK CiAgdm9pZCAoKlNldE9iamVjdEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpvYmplY3QpOwogIHZv aWQgKCpTZXRCb29sZWFuRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamJvb2xlYW4pOwogIHZvaWQg KCpTZXRCeXRlRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamJ5dGUpOwogIHZvaWQgKCpTZXRDaGFy RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqZmllbGRJRCwgamNoYXIpOwogIHZvaWQgKCpTZXRTaG9ydEZpZWxkKSAo Sk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgamZpZWxkSUQsIGpzaG9ydCk7CiAgdm9pZCAoKlNldEludEZpZWxkKSAoSk5JRW52ICos IGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZp ZWxkSUQsIGppbnQpOwogIHZvaWQgKCpTZXRMb25nRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamxv bmcpOwogIHZvaWQgKCpTZXRGbG9hdEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpmbG9hdCk7CiAg dm9pZCAoKlNldERvdWJsZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpkb3VibGUpOwoKICBqbWV0 aG9kSUQgKCpHZXRTdGF0aWNNZXRob2RJRCkgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICopOwoKICBqb2JqZWN0ICgqQ2FsbFN0YXRpY09iamVjdE1ldGhvZCkgKEpOSUVudiAqLCBqY2xh c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuLi4pOwogIGpvYmplY3QgKCpDYWxsU3RhdGljT2JqZWN0TWV0aG9kVikgKEpOSUVudiAqLCBq Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2YV9saXN0KTsKICBqb2JqZWN0ICgqQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEpIChKTklF bnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAganZhbHVlICopOwogIGpib29sZWFuICgqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRo b2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxTdGF0aWNCb29sZWFu TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsU3Rh dGljQm9vbGVhbk1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYnl0ZSAo KkNhbGxTdGF0aWNCeXRlTWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamJ5dGUgKCpD YWxsU3RhdGljQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJ5dGUg KCpDYWxsU3RhdGljQnl0ZU1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGpj aGFyICgqQ2FsbFN0YXRpY0NoYXJNZXRob2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqY2hh ciAoKkNhbGxTdGF0aWNDaGFyTWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBq Y2hhciAoKkNhbGxTdGF0aWNDaGFyTWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7 CiAganNob3J0ICgqQ2FsbFN0YXRpY1Nob3J0TWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1l dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7 CiAganNob3J0ICgqQ2FsbFN0YXRpY1Nob3J0TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGpt ZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s aXN0KTsKICBqc2hvcnQgKCpDYWxsU3RhdGljU2hvcnRNZXRob2RBKSAoSk5JRW52ICosIGpjbGFz cywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGp2YWx1ZSAqKTsKICBqaW50ICgqQ2FsbFN0YXRpY0ludE1ldGhvZCkgKEpOSUVudiAqLCBqY2xh c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuLi4pOwogIGppbnQgKCpDYWxsU3RhdGljSW50TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3Ms IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YV9saXN0KTsKICBqaW50ICgqQ2FsbFN0YXRpY0ludE1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNz LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg anZhbHVlICopOwogIGpsb25nICgqQ2FsbFN0YXRpY0xvbmdNZXRob2QpIChKTklFbnYgKiwgamNs YXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLi4uKTsKICBqbG9uZyAoKkNhbGxTdGF0aWNMb25nTWV0aG9kVikgKEpOSUVudiAqLCBqY2xh c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YV9saXN0KTsKICBqbG9uZyAoKkNhbGxTdGF0aWNMb25nTWV0aG9kQSkgKEpOSUVudiAqLCBq Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqdmFsdWUgKik7CiAgamZsb2F0ICgqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kKSAoSk5JRW52 ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC4uLik7CiAgamZsb2F0ICgqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kVikgKEpOSUVu diAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2YV9saXN0KTsKICBqZmxvYXQgKCpDYWxsU3RhdGljRmxvYXRNZXRob2RBKSAo Sk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqZG91YmxlICgqQ2FsbFN0YXRpY0RvdWJsZU1l dGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpkb3VibGUgKCpDYWxsU3RhdGljRG91Ymxl TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqZG91YmxlICgqQ2FsbFN0YXRp Y0RvdWJsZU1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIHZvaWQgKCpDYWxs U3RhdGljVm9pZE1ldGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIHZvaWQgKCpDYWxsU3Rh dGljVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgdm9pZCAoKkNhbGxT dGF0aWNWb2lkTWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CgogIGpmaWVsZElE ICgqR2V0U3RhdGljRmllbGRJRCkgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwoK ICBqb2JqZWN0ICgqR2V0U3RhdGljT2JqZWN0RmllbGQpIChKTklFbnYgKiwgamNsYXNzLCBqZmll bGRJRCk7CiAgamJvb2xlYW4gKCpHZXRTdGF0aWNCb29sZWFuRmllbGQpIChKTklFbnYgKiwgamNs YXNzLCBqZmllbGRJRCk7CiAgamJ5dGUgKCpHZXRTdGF0aWNCeXRlRmllbGQpIChKTklFbnYgKiwg amNsYXNzLCBqZmllbGRJRCk7CiAgamNoYXIgKCpHZXRTdGF0aWNDaGFyRmllbGQpIChKTklFbnYg KiwgamNsYXNzLCBqZmllbGRJRCk7CiAganNob3J0ICgqR2V0U3RhdGljU2hvcnRGaWVsZCkgKEpO SUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqaW50ICgqR2V0U3RhdGljSW50RmllbGQpIChK TklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CiAgamxvbmcgKCpHZXRTdGF0aWNMb25nRmllbGQp IChKTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CiAgamZsb2F0ICgqR2V0U3RhdGljRmxvYXRG aWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqZG91YmxlICgqR2V0U3RhdGlj RG91YmxlRmllbGQpIChKTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CgogIHZvaWQgKCpTZXRT dGF0aWNPYmplY3RGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpvYmplY3QpOwogIHZvaWQgKCpTZXRT dGF0aWNCb29sZWFuRmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqYm9vbGVhbik7CiAgdm9pZCAoKlNl dFN0YXRpY0J5dGVGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpieXRlKTsKICB2b2lkICgqU2V0U3Rh dGljQ2hhckZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamNoYXIpOwogIHZvaWQgKCpTZXRTdGF0aWNT aG9ydEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqZmllbGRJRCwganNob3J0KTsKICB2b2lkICgqU2V0U3RhdGljSW50 RmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpmaWVsZElELCBqaW50KTsKICB2b2lkICgqU2V0U3RhdGljTG9uZ0ZpZWxk KSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBqZmllbGRJRCwgamxvbmcpOwogIHZvaWQgKCpTZXRTdGF0aWNGbG9hdEZpZWxkKSAo Sk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqZmllbGRJRCwgamZsb2F0KTsKICB2b2lkICgqU2V0U3RhdGljRG91YmxlRmllbGQpIChK TklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGpmaWVsZElELCBqZG91YmxlKTsKCiAganN0cmluZyAoKk5ld1N0cmluZykgKEpOSUVudiAq LCBjb25zdCBqY2hhciAqLCBqc2l6ZSk7CiAganNpemUgKCpHZXRTdHJpbmdMZW5ndGgpIChKTklF bnYgKiwganN0cmluZyk7CiAgY29uc3QgamNoYXIgKiAoKkdldFN0cmluZ0NoYXJzKSAoSk5JRW52 ICosIGpzdHJpbmcsIGpib29sZWFuICopOwogIHZvaWQgKCpSZWxlYXNlU3RyaW5nQ2hhcnMpIChK TklFbnYgKiwganN0cmluZywgY29uc3QgamNoYXIgKik7CiAganN0cmluZyAoKk5ld1N0cmluZ1VU RikgKEpOSUVudiAqLCBjb25zdCBjaGFyICopOwogIGpzaXplICgqR2V0U3RyaW5nVVRGTGVuZ3Ro KSAoSk5JRW52ICosIGpzdHJpbmcpOwogIGNvbnN0IGNoYXIgKiAoKkdldFN0cmluZ1VURkNoYXJz KSAoSk5JRW52ICosIGpzdHJpbmcsIGpib29sZWFuICopOwogIHZvaWQgKCpSZWxlYXNlU3RyaW5n VVRGQ2hhcnMpIChKTklFbnYgKiwganN0cmluZywgY29uc3QgY2hhciAqKTsKICBqc2l6ZSAoKkdl dEFycmF5TGVuZ3RoKSAoSk5JRW52ICosIGphcnJheSk7CiAgamFycmF5ICgqTmV3T2JqZWN0QXJy YXkpIChKTklFbnYgKiwganNpemUsIGpjbGFzcywgam9iamVjdCk7CiAgam9iamVjdCAoKkdldE9i amVjdEFycmF5RWxlbWVudCkgKEpOSUVudiAqLCBqb2JqZWN0QXJyYXksIGpzaXplKTsKICB2b2lk ICgqU2V0T2JqZWN0QXJyYXlFbGVtZW50KSAoSk5JRW52ICosIGpvYmplY3RBcnJheSwganNpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCk7Cgog IGpib29sZWFuQXJyYXkgKCpOZXdCb29sZWFuQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpi eXRlQXJyYXkgKCpOZXdCeXRlQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpjaGFyQXJyYXkg KCpOZXdDaGFyQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpzaG9ydEFycmF5ICgqTmV3U2hv cnRBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7CiAgamludEFycmF5ICgqTmV3SW50QXJyYXkpIChK TklFbnYgKiwganNpemUpOwogIGpsb25nQXJyYXkgKCpOZXdMb25nQXJyYXkpIChKTklFbnYgKiwg anNpemUpOwogIGpmbG9hdEFycmF5ICgqTmV3RmxvYXRBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7 CiAgamRvdWJsZUFycmF5ICgqTmV3RG91YmxlQXJyYXkpIChKTklFbnYgKiwganNpemUpOwoKICBq Ym9vbGVhbiAqICgqR2V0Qm9vbGVhbkFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamJvb2xlYW5B cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh biAqKTsKICBqYnl0ZSAqICgqR2V0Qnl0ZUFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamJ5dGVB cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh biAqKTsKICBqY2hhciAqICgqR2V0Q2hhckFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamNoYXJB cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh biAqKTsKICBqc2hvcnQgKiAoKkdldFNob3J0QXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqc2hv cnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9v bGVhbiAqKTsKICBqaW50ICogKCpHZXRJbnRBcnJheUVsZW1lbnRzKSAoSk5JRW52ICosIGppbnRB cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh biAqKTsKICBqbG9uZyAqICgqR2V0TG9uZ0FycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamxvbmdB cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh biAqKTsKICBqZmxvYXQgKiAoKkdldEZsb2F0QXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqZmxv YXRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9v bGVhbiAqKTsKICBqZG91YmxlICogKCpHZXREb3VibGVBcnJheUVsZW1lbnRzKSAoSk5JRW52ICos IGpkb3VibGVBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqYm9vbGVhbiAqKTsKCiAgdm9pZCAoKlJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cykgKEpO SUVudiAqLCBqYm9vbGVhbkFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqYm9vbGVhbiAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFzZUJ5dGVBcnJh eUVsZW1lbnRzKSAoSk5JRW52ICosIGpieXRlQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpieXRlICosIGppbnQpOwogIHZvaWQgKCpSZWxlYXNl Q2hhckFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamNoYXJBcnJheSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXIgKiwgamludCk7CiAgdm9pZCAo KlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMpIChKTklFbnYgKiwganNob3J0QXJyYXksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaG9ydCAqLCBqaW50 KTsKICB2b2lkICgqUmVsZWFzZUludEFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamludEFycmF5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50ICos IGppbnQpOwogIHZvaWQgKCpSZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamxv bmdBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg amxvbmcgKiwgamludCk7CiAgdm9pZCAoKlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMpIChKTklF bnYgKiwgamZsb2F0QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGpmbG9hdCAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFzZURvdWJsZUFycmF5RWxl bWVudHMpIChKTklFbnYgKiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqZG91YmxlICosIGppbnQpOwoKICB2b2lkICgqR2V0Qm9v bGVhbkFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpib29sZWFuQXJyYXksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqYm9vbGVhbiAqKTsK ICB2b2lkICgqR2V0Qnl0ZUFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpieXRlQXJyYXksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqYnl0 ZSAqKTsKICB2b2lkICgqR2V0Q2hhckFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpjaGFyQXJyYXks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXpl LCBqY2hhciAqKTsKICB2b2lkICgqR2V0U2hvcnRBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqc2hv cnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6 ZSwganNpemUsIGpzaG9ydCAqKTsKICB2b2lkICgqR2V0SW50QXJyYXlSZWdpb24pIChKTklFbnYg KiwgamludEFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpzaXplLCBqc2l6ZSwgamludCAqKTsKICB2b2lkICgqR2V0TG9uZ0FycmF5UmVnaW9uKSAoSk5J RW52ICosIGpsb25nQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAganNpemUsIGpzaXplLCBqbG9uZyAqKTsKICB2b2lkICgqR2V0RmxvYXRBcnJheVJlZ2lv bikgKEpOSUVudiAqLCBqZmxvYXRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpmbG9hdCAqKTsKICB2b2lkICgqR2V0RG91Ymxl QXJyYXlSZWdpb24pIChKTklFbnYgKiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamRvdWJsZSAqKTsKCiAgdm9p ZCAoKlNldEJvb2xlYW5BcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqYm9vbGVhbkFycmF5LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamJv b2xlYW4gKik7CiAgdm9pZCAoKlNldEJ5dGVBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqYnl0ZUFy cmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBq c2l6ZSwgamJ5dGUgKik7CiAgdm9pZCAoKlNldENoYXJBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBq Y2hhckFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz aXplLCBqc2l6ZSwgamNoYXIgKik7CiAgdm9pZCAoKlNldFNob3J0QXJyYXlSZWdpb24pIChKTklF bnYgKiwganNob3J0QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAganNpemUsIGpzaXplLCBqc2hvcnQgKik7CiAgdm9pZCAoKlNldEludEFycmF5UmVnaW9u KSAoSk5JRW52ICosIGppbnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqc2l6ZSwganNpemUsIGppbnQgKik7CiAgdm9pZCAoKlNldExvbmdBcnJheVJl Z2lvbikgKEpOSUVudiAqLCBqbG9uZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamxvbmcgKik7CiAgdm9pZCAoKlNldEZsb2F0 QXJyYXlSZWdpb24pIChKTklFbnYgKiwgamZsb2F0QXJyYXksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqZmxvYXQgKik7CiAgdm9pZCAo KlNldERvdWJsZUFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpkb3VibGVBcnJheSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpkb3VibGUg Kik7CgogIGppbnQgKCpSZWdpc3Rlck5hdGl2ZXMpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEpOSU5hdGl2ZU1ldGhv ZCAqLCBqaW50KTsKICBqaW50ICgqVW5yZWdpc3Rlck5hdGl2ZXMpIChKTklFbnYgKiwgamNsYXNz KTsKICBqaW50ICgqTW9uaXRvckVudGVyKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGppbnQgKCpN b25pdG9yRXhpdCkgKEpOSUVudiAqLCBqb2JqZWN0KTsKICBqaW50ICgqR2V0SmF2YVZNKSAoSk5J RW52ICosIEphdmFWTSAqKik7CgogIHZvaWQgKCpHZXRTdHJpbmdSZWdpb24pIChKTklFbnYgKiwg anN0cmluZywganNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganNpemUsIGpjaGFyICopOwogIHZvaWQgKCpHZXRTdHJpbmdVVEZSZWdpb24pIChKTklFbnYg KiwganN0cmluZywganNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAganNpemUsIGNoYXIgKik7CgogIHZvaWQgKiAoKkdldFByaW1pdGl2ZUFycmF5Q3JpdGlj YWwpIChKTklFbnYgKiwgamFycmF5LCBqYm9vbGVhbiAqKTsKICB2b2lkICgqUmVsZWFzZVByaW1p dGl2ZUFycmF5Q3JpdGljYWwpIChKTklFbnYgKiwgamFycmF5LCB2b2lkICosIGppbnQpOwoKICBj b25zdCBqY2hhciAqICgqR2V0U3RyaW5nQ3JpdGljYWwpIChKTklFbnYgKiwganN0cmluZywgamJv b2xlYW4gKik7CiAgdm9pZCAoKlJlbGVhc2VTdHJpbmdDcml0aWNhbCkgKEpOSUVudiAqLCBqc3Ry aW5nLCBjb25zdCBqY2hhciAqKTsKCiAgandlYWsgKCpOZXdXZWFrR2xvYmFsUmVmKSAoSk5JRW52 ICosIGpvYmplY3QpOwogIHZvaWQgKCpEZWxldGVXZWFrR2xvYmFsUmVmKSAoSk5JRW52ICosIGp3 ZWFrKTsKCiAgamJvb2xlYW4gKCpFeGNlcHRpb25DaGVjaykgKEpOSUVudiAqKTsKfTsKCgoKY2xh c3MgX0p2X0pOSUVudgp7CnB1YmxpYzoKCiAgc3RydWN0IEpOSU5hdGl2ZUludGVyZmFjZSAqcDsK CgoKCgoKICBqdGhyb3dhYmxlIGV4OwoKCiAgamNsYXNzIGtsYXNzOwoKCiAgc3RydWN0IF9Kdl9K TklfTG9jYWxGcmFtZSAqbG9jYWxzOwoKcHVibGljOgogIGppbnQgR2V0VmVyc2lvbiAoKQogIHsg cmV0dXJuIHAtPkdldFZlcnNpb24gKHRoaXMpOyB9CgogIGpjbGFzcyBEZWZpbmVDbGFzcyAoam9i amVjdCBvYmowLCBjb25zdCBqYnl0ZSAqIHZhbDEsIGpzaXplIHZhbDIpCiAgeyByZXR1cm4gcC0+ RGVmaW5lQ2xhc3MgKHRoaXMsIG9iajAsIHZhbDEsIHZhbDIpOyB9CgogIGpjbGFzcyBGaW5kQ2xh c3MgKGNvbnN0IGNoYXIgKiB2YWwwKQogIHsgcmV0dXJuIHAtPkZpbmRDbGFzcyAodGhpcywgdmFs MCk7IH0KCiAgam1ldGhvZElEIEZyb21SZWZsZWN0ZWRNZXRob2QgKGpvYmplY3Qgb2JqMCkKICB7 IHJldHVybiBwLT5Gcm9tUmVmbGVjdGVkTWV0aG9kICh0aGlzLCBvYmowKTsgfQoKICBqZmllbGRJ RCBGcm9tUmVmbGVjdGVkRmllbGQgKGpvYmplY3Qgb2JqMCkKICB7IHJldHVybiBwLT5Gcm9tUmVm bGVjdGVkRmllbGQgKHRoaXMsIG9iajApOyB9CgogIGpvYmplY3QgVG9SZWZsZWN0ZWRNZXRob2Qg KGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgamJvb2xlYW4gdmFsMikKICB7IHJldHVybiBw LT5Ub1JlZmxlY3RlZE1ldGhvZCAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamNsYXNz IEdldFN1cGVyY2xhc3MgKGpjbGFzcyBjbDApCiAgeyByZXR1cm4gcC0+R2V0U3VwZXJjbGFzcyAo dGhpcywgY2wwKTsgfQoKICBqYm9vbGVhbiBJc0Fzc2lnbmFibGVGcm9tIChqY2xhc3MgY2wwLCBq Y2xhc3MgY2wxKQogIHsgcmV0dXJuIHAtPklzQXNzaWduYWJsZUZyb20gKHRoaXMsIGNsMCwgY2wx KTsgfQoKICBqb2JqZWN0IFRvUmVmbGVjdGVkRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZs ZDEsIGpib29sZWFuIHZhbDIpCiAgeyByZXR1cm4gcC0+VG9SZWZsZWN0ZWRGaWVsZCAodGhpcywg Y2wwLCBmbGQxLCB2YWwyKTsgfQoKICBqaW50IFRocm93IChqdGhyb3dhYmxlIHZhbDApCiAgeyBy ZXR1cm4gcC0+VGhyb3cgKHRoaXMsIHZhbDApOyB9CgogIGppbnQgVGhyb3dOZXcgKGpjbGFzcyBj bDAsIGNvbnN0IGNoYXIgKiB2YWwxKQogIHsgcmV0dXJuIHAtPlRocm93TmV3ICh0aGlzLCBjbDAs IHZhbDEpOyB9CgogIGp0aHJvd2FibGUgRXhjZXB0aW9uT2NjdXJyZWQgKCkKICB7IHJldHVybiBw LT5FeGNlcHRpb25PY2N1cnJlZCAodGhpcyk7IH0KCiAgdm9pZCBFeGNlcHRpb25EZXNjcmliZSAo KQogIHsgcC0+RXhjZXB0aW9uRGVzY3JpYmUgKHRoaXMpOyB9CgogIHZvaWQgRXhjZXB0aW9uQ2xl YXIgKCkKICB7IHAtPkV4Y2VwdGlvbkNsZWFyICh0aGlzKTsgfQoKICB2b2lkIEZhdGFsRXJyb3Ig KGNvbnN0IGNoYXIgKiB2YWwwKQogIHsgcC0+RmF0YWxFcnJvciAodGhpcywgdmFsMCk7IH0KCiAg amludCBQdXNoTG9jYWxGcmFtZSAoamludCB2YWwwKQogIHsgcmV0dXJuIHAtPlB1c2hMb2NhbEZy YW1lICh0aGlzLCB2YWwwKTsgfQoKICBqb2JqZWN0IFBvcExvY2FsRnJhbWUgKGpvYmplY3Qgb2Jq MCkKICB7IHJldHVybiBwLT5Qb3BMb2NhbEZyYW1lICh0aGlzLCBvYmowKTsgfQoKICBqb2JqZWN0 IE5ld0dsb2JhbFJlZiAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk5ld0dsb2JhbFJlZiAo dGhpcywgb2JqMCk7IH0KCiAgdm9pZCBEZWxldGVHbG9iYWxSZWYgKGpvYmplY3Qgb2JqMCkKICB7 IHAtPkRlbGV0ZUdsb2JhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgdm9pZCBEZWxldGVMb2NhbFJl ZiAoam9iamVjdCBvYmowKQogIHsgcC0+RGVsZXRlTG9jYWxSZWYgKHRoaXMsIG9iajApOyB9Cgog IGpib29sZWFuIElzU2FtZU9iamVjdCAoam9iamVjdCBvYmowLCBqb2JqZWN0IG9iajEpCiAgeyBy ZXR1cm4gcC0+SXNTYW1lT2JqZWN0ICh0aGlzLCBvYmowLCBvYmoxKTsgfQoKICBqb2JqZWN0IE5l d0xvY2FsUmVmIChqb2JqZWN0IG9iajApCiAgeyByZXR1cm4gcC0+TmV3TG9jYWxSZWYgKHRoaXMs IG9iajApOyB9CgogIGppbnQgRW5zdXJlTG9jYWxDYXBhY2l0eSAoamludCB2YWwwKQogIHsgcmV0 dXJuIHAtPkVuc3VyZUxvY2FsQ2FwYWNpdHkgKHRoaXMsIHZhbDApOyB9CgogIGpvYmplY3QgQWxs b2NPYmplY3QgKGpjbGFzcyBjbDApCiAgeyByZXR1cm4gcC0+QWxsb2NPYmplY3QgKHRoaXMsIGNs MCk7IH0KCiAgam9iamVjdCBOZXdPYmplY3QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy Z3MpLG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+TmV3T2JqZWN0ViAodGhpcywgY2ww LCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiBy ZXN1bHQ7CiAgfQoKICBqb2JqZWN0IE5ld09iamVjdFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt ZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPk5ld09iamVjdFYgKHRoaXMsIGNsMCwg bWV0aDEsIHZhbDIpOyB9CgogIGpvYmplY3QgTmV3T2JqZWN0QSAoamNsYXNzIGNsMCwgam1ldGhv ZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPk5ld09iamVjdEEgKHRoaXMs IGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjbGFzcyBHZXRPYmplY3RDbGFzcyAoam9iamVjdCBv YmowKQogIHsgcmV0dXJuIHAtPkdldE9iamVjdENsYXNzICh0aGlzLCBvYmowKTsgfQoKICBqYm9v bGVhbiBJc0luc3RhbmNlT2YgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSkKICB7IHJldHVybiBw LT5Jc0luc3RhbmNlT2YgKHRoaXMsIG9iajAsIGNsMSk7IH0KCiAgam1ldGhvZElEIEdldE1ldGhv ZElEIChqY2xhc3MgY2wwLCBjb25zdCBjaGFyICogdmFsMSwgY29uc3QgY2hhciAqIHZhbDIpCiAg eyByZXR1cm4gcC0+R2V0TWV0aG9kSUQgKHRoaXMsIGNsMCwgdmFsMSwgdmFsMik7IH0KCiAgam9i amVjdCBDYWxsT2JqZWN0TWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4u KQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3Mp LG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+Q2FsbE9iamVjdE1ldGhvZFYgKHRoaXMs IG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0 dXJuIHJlc3VsdDsKICB9CgogIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZFYgKGpvYmplY3Qgb2Jq MCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbE9iamVj dE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqb2JqZWN0IENhbGxPYmpl Y3RNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikK ICB7IHJldHVybiBwLT5DYWxsT2JqZWN0TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp OyB9CgogIGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJ RCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdf c3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpib29sZWFuIHJlc3VsdCA9IHAtPkNhbGxCb29sZWFu TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAo YXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRo b2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0 dXJuIHAtPkNhbGxCb29sZWFuTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9Cgog IGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0 aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEJvb2xlYW5NZXRob2RBICh0aGlz LCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamJ5dGUgQ2FsbEJ5dGVNZXRob2QgKGpvYmplY3Qg b2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19i dWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamJ5dGUgcmVzdWx0ID0gcC0+ Q2FsbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5f dmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqYnl0ZSBDYWxsQnl0ZU1l dGhvZFYgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyBy ZXR1cm4gcC0+Q2FsbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAg amJ5dGUgQ2FsbEJ5dGVNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZh bHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsQnl0ZU1ldGhvZEEgKHRoaXMsIG9iajAsIG1l dGgxLCB2YWwyKTsgfQoKICBqY2hhciBDYWxsQ2hhck1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0 aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3Rk YXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqY2hhciByZXN1bHQgPSBwLT5DYWxsQ2hhck1l dGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFy Z3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpjaGFyIENhbGxDaGFyTWV0aG9kViAoam9i amVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5D YWxsQ2hhck1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqY2hhciBDYWxs Q2hhck1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwy KQogIHsgcmV0dXJuIHAtPkNhbGxDaGFyTWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp OyB9CgogIGpzaG9ydCBDYWxsU2hvcnRNZXRob2QgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1l dGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFy dCgoYXJncyksbWV0aDEpOwogICAganNob3J0IHJlc3VsdCA9IHAtPkNhbGxTaG9ydE1ldGhvZFYg KHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwog ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpzaG9ydCBDYWxsU2hvcnRNZXRob2RWIChqb2JqZWN0 IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxT aG9ydE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqc2hvcnQgQ2FsbFNo b3J0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIp CiAgeyByZXR1cm4gcC0+Q2FsbFNob3J0TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp OyB9CgogIGppbnQgQ2FsbEludE1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEs IC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChh cmdzKSxtZXRoMSk7CiAgICBqaW50IHJlc3VsdCA9IHAtPkNhbGxJbnRNZXRob2RWICh0aGlzLCBv YmowLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVy biByZXN1bHQ7CiAgfQoKICBqaW50IENhbGxJbnRNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRo b2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxJbnRNZXRob2RWICh0 aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamludCBDYWxsSW50TWV0aG9kQSAoam9iamVj dCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2Fs bEludE1ldGhvZEEgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqbG9uZyBDYWxsTG9u Z01ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9s aXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBq bG9uZyByZXN1bHQgPSBwLT5DYWxsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdz KTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog IGpsb25nIENhbGxMb25nTWV0aG9kViAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIHZh X2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIG1l dGgxLCB2YWwyKTsgfQoKICBqbG9uZyBDYWxsTG9uZ01ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1l dGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxMb25nTWV0aG9k QSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpmbG9hdCBDYWxsRmxvYXRNZXRob2Qg KGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdz OwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamZsb2F0IHJl c3VsdCA9IHAtPkNhbGxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAg IF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpmbG9h dCBDYWxsRmxvYXRNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlz dCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgx LCB2YWwyKTsgfQoKICBqZmxvYXQgQ2FsbEZsb2F0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0 aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEZsb2F0TWV0aG9k QSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpkb3VibGUgQ2FsbERvdWJsZU1ldGhv ZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFy Z3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqZG91Ymxl IHJlc3VsdCA9IHAtPkNhbGxEb3VibGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgYXJncyk7 CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBq ZG91YmxlIENhbGxEb3VibGVNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwg dmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxEb3VibGVNZXRob2RWICh0aGlzLCBvYmow LCBtZXRoMSwgdmFsMik7IH0KCiAgamRvdWJsZSBDYWxsRG91YmxlTWV0aG9kQSAoam9iamVjdCBv YmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbERv dWJsZU1ldGhvZEEgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICB2b2lkIENhbGxWb2lk TWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xp c3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIHAt PkNhbGxWb2lkTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGlu X3ZhX2VuZCAoYXJncyk7CiAgfQoKICB2b2lkIENhbGxWb2lkTWV0aG9kViAoam9iamVjdCBvYmow LCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHAtPkNhbGxWb2lkTWV0aG9kViAo dGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIHZvaWQgQ2FsbFZvaWRNZXRob2RBIChqb2Jq ZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHAtPkNhbGxWb2lk TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpvYmplY3QgQ2FsbE5vbnZp cnR1YWxPYmplY3RNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1l dGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFy dCgoYXJncyksbWV0aDIpOwogICAgam9iamVjdCByZXN1bHQgPSBwLT5DYWxsTm9udmlydHVhbE9i amVjdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGlu X3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgam9iamVjdCBDYWxsTm9u dmlydHVhbE9iamVjdE1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElE IG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxPYmplY3RN ZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqb2JqZWN0IENhbGxO b252aXJ0dWFsT2JqZWN0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9k SUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxPYmpl Y3RNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqYm9vbGVhbiBD YWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1l dGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0 ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgamJvb2xlYW4gcmVzdWx0ID0gcC0+Q2FsbE5v bnZpcnR1YWxCb29sZWFuTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAg ICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqYm9v bGVhbiBDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj bDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252 aXJ0dWFsQm9vbGVhbk1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMpOyB9Cgog IGpib29sZWFuIENhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNs YXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNh bGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZEEgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMp OyB9CgogIGpieXRlIENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xh c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBqYnl0ZSByZXN1bHQgPSBw LT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCBhcmdz KTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog IGpieXRlIENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNs MSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZp cnR1YWxCeXRlTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamJ5 dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBq bWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1 YWxCeXRlTWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamNoYXIg Q2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRo b2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRh cmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpjaGFyIHJlc3VsdCA9IHAtPkNhbGxOb252aXJ0 dWFsQ2hhck1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWls dGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamNoYXIgQ2FsbE5v bnZpcnR1YWxDaGFyTWV0aG9kViAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQg bWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbENoYXJNZXRo b2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqY2hhciBDYWxsTm9udmly dHVhbENoYXJNZXRob2RBIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRo MiwganZhbHVlICogdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbENoYXJNZXRob2RB ICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqc2hvcnQgQ2FsbE5vbnZpcnR1 YWxTaG9ydE1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIs IC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChh cmdzKSxtZXRoMik7CiAgICBqc2hvcnQgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxTaG9ydE1l dGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2Vu ZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNob3J0IENhbGxOb252aXJ0dWFs U2hvcnRNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwg dmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWICh0 aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxT aG9ydE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBq dmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RBICh0 aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqaW50IENhbGxOb252aXJ0dWFsSW50 TWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQog IHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l dGgyKTsKICAgIGppbnQgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxJbnRNZXRob2RWICh0aGlz LCBvYmowLCBjbDEsIG1ldGgyLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwog ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGppbnQgQ2FsbE5vbnZpcnR1YWxJbnRNZXRob2RWIChq b2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQog IHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBt ZXRoMiwgdmFsMyk7IH0KCiAgamludCBDYWxsTm9udmlydHVhbEludE1ldGhvZEEgKGpvYmplY3Qg b2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0 dXJuIHAtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwg dmFsMyk7IH0KCiAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kIChqb2JqZWN0IG9iajAs IGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsK ICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpsb25nIHJlc3Vs dCA9IHAtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIs IGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0Owog IH0KCiAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kViAoam9iamVjdCBvYmowLCBqY2xh c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHJldHVybiBwLT5DYWxs Tm9udmlydHVhbExvbmdNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoK ICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdNZXRob2RBIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj bDEsIGptZXRob2RJRCBtZXRoMiwganZhbHVlICogdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9u dmlydHVhbExvbmdNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBq ZmxvYXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wx LCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0 aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBqZmxvYXQgcmVzdWx0ID0gcC0+Q2Fs bE5vbnZpcnR1YWxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwog ICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamZs b2F0IENhbGxOb252aXJ0dWFsRmxvYXRNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEs IGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0 dWFsRmxvYXRNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZmxv YXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwg am1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0 dWFsRmxvYXRNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZG91 YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEs IGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRp bl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpkb3VibGUgcmVzdWx0ID0gcC0+Q2Fs bE5vbnZpcnR1YWxEb3VibGVNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCBhcmdzKTsK ICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpk b3VibGUgQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj bDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252 aXJ0dWFsRG91YmxlTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAg amRvdWJsZSBDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNz IGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxO b252aXJ0dWFsRG91YmxlTWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0K CiAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNs MSwgam1ldGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWls dGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgcC0+Q2FsbE5vbnZpcnR1YWxWb2lk TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFf ZW5kIChhcmdzKTsKICB9CgogIHZvaWQgQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kViAoam9iamVj dCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHAt PkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMp OyB9CgogIHZvaWQgQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xh c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyBwLT5DYWxsTm9udmly dHVhbFZvaWRNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZmll bGRJRCBHZXRGaWVsZElEIChqY2xhc3MgY2wwLCBjb25zdCBjaGFyICogdmFsMSwgY29uc3QgY2hh ciAqIHZhbDIpCiAgeyByZXR1cm4gcC0+R2V0RmllbGRJRCAodGhpcywgY2wwLCB2YWwxLCB2YWwy KTsgfQoKICBqb2JqZWN0IEdldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZs ZDEpCiAgeyByZXR1cm4gcC0+R2V0T2JqZWN0RmllbGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9Cgog IGpib29sZWFuIEdldEJvb2xlYW5GaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxKQog IHsgcmV0dXJuIHAtPkdldEJvb2xlYW5GaWVsZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAgamJ5 dGUgR2V0Qnl0ZUZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4g cC0+R2V0Qnl0ZUZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoKICBqY2hhciBHZXRDaGFyRmll bGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRDaGFyRmll bGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIGpzaG9ydCBHZXRTaG9ydEZpZWxkIChqb2JqZWN0 IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0U2hvcnRGaWVsZCAodGhpcywg b2JqMCwgZmxkMSk7IH0KCiAgamludCBHZXRJbnRGaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJ RCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldEludEZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoK ICBqbG9uZyBHZXRMb25nRmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJl dHVybiBwLT5HZXRMb25nRmllbGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIGpmbG9hdCBHZXRG bG9hdEZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0 RmxvYXRGaWVsZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAgamRvdWJsZSBHZXREb3VibGVGaWVs ZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldERvdWJsZUZp ZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoKICB2b2lkIFNldE9iamVjdEZpZWxkIChqb2JqZWN0 IG9iajAsIGpmaWVsZElEIGZsZDEsIGpvYmplY3Qgb2JqMikKICB7IHAtPlNldE9iamVjdEZpZWxk ICh0aGlzLCBvYmowLCBmbGQxLCBvYmoyKTsgfQoKICB2b2lkIFNldEJvb2xlYW5GaWVsZCAoam9i amVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqYm9vbGVhbiB2YWwyKQogIHsgcC0+U2V0Qm9vbGVh bkZpZWxkICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEJ5dGVGaWVsZCAo am9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqYnl0ZSB2YWwyKQogIHsgcC0+U2V0Qnl0ZUZp ZWxkICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldENoYXJGaWVsZCAoam9i amVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqY2hhciB2YWwyKQogIHsgcC0+U2V0Q2hhckZpZWxk ICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldFNob3J0RmllbGQgKGpvYmpl Y3Qgb2JqMCwgamZpZWxkSUQgZmxkMSwganNob3J0IHZhbDIpCiAgeyBwLT5TZXRTaG9ydEZpZWxk ICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEludEZpZWxkIChqb2JqZWN0 IG9iajAsIGpmaWVsZElEIGZsZDEsIGppbnQgdmFsMikKICB7IHAtPlNldEludEZpZWxkICh0aGlz LCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldExvbmdGaWVsZCAoam9iamVjdCBvYmow LCBqZmllbGRJRCBmbGQxLCBqbG9uZyB2YWwyKQogIHsgcC0+U2V0TG9uZ0ZpZWxkICh0aGlzLCBv YmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEZsb2F0RmllbGQgKGpvYmplY3Qgb2JqMCwg amZpZWxkSUQgZmxkMSwgamZsb2F0IHZhbDIpCiAgeyBwLT5TZXRGbG9hdEZpZWxkICh0aGlzLCBv YmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldERvdWJsZUZpZWxkIChqb2JqZWN0IG9iajAs IGpmaWVsZElEIGZsZDEsIGpkb3VibGUgdmFsMikKICB7IHAtPlNldERvdWJsZUZpZWxkICh0aGlz LCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICBqbWV0aG9kSUQgR2V0U3RhdGljTWV0aG9kSUQgKGpj bGFzcyBjbDAsIGNvbnN0IGNoYXIgKiB2YWwxLCBjb25zdCBjaGFyICogdmFsMikKICB7IHJldHVy biBwLT5HZXRTdGF0aWNNZXRob2RJRCAodGhpcywgY2wwLCB2YWwxLCB2YWwyKTsgfQoKICBqb2Jq ZWN0IENhbGxTdGF0aWNPYmplY3RNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy Z3MpLG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+Q2FsbFN0YXRpY09iamVjdE1ldGhv ZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7 CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgam9iamVjdCBDYWxsU3RhdGljT2JqZWN0TWV0aG9k ViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4g cC0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9Cgog IGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt ZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9k QSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2FsbFN0YXRpY0Jvb2xl YW5NZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xp c3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpi b29sZWFuIHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kViAodGhpcywgY2wwLCBt ZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1 bHQ7CiAgfQoKICBqYm9vbGVhbiBDYWxsU3RhdGljQm9vbGVhbk1ldGhvZFYgKGpjbGFzcyBjbDAs IGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNC b29sZWFuTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2Fs bFN0YXRpY0Jvb2xlYW5NZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1 ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RBICh0aGlzLCBj bDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZCAoamNsYXNz IGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19i dWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamJ5dGUgcmVzdWx0ID0gcC0+ Q2FsbFN0YXRpY0J5dGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVp bHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpieXRlIENhbGxT dGF0aWNCeXRlTWV0aG9kViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZh bDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0J5dGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgx LCB2YWwyKTsgfQoKICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZEEgKGpjbGFzcyBjbDAsIGpt ZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljQnl0 ZU1ldGhvZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxTdGF0aWND aGFyTWV0aG9kIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9s aXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBq Y2hhciByZXN1bHQgPSBwLT5DYWxsU3RhdGljQ2hhck1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEs IGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0Owog IH0KCiAgamNoYXIgQ2FsbFN0YXRpY0NoYXJNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQg bWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljQ2hhck1ldGhvZFYg KHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxTdGF0aWNDaGFyTWV0aG9k QSAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJu IHAtPkNhbGxTdGF0aWNDaGFyTWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAg anNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgx LCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgo YXJncyksbWV0aDEpOwogICAganNob3J0IHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNTaG9ydE1ldGhv ZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7 CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZFYg KGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAt PkNhbGxTdGF0aWNTaG9ydE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpz aG9ydCBDYWxsU3RhdGljU2hvcnRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs IGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kQSAodGhp cywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamludCBDYWxsU3RhdGljSW50TWV0aG9kIChqY2xh c3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqaW50IHJlc3VsdCA9IHAt PkNhbGxTdGF0aWNJbnRNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVp bHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGppbnQgQ2FsbFN0 YXRpY0ludE1ldGhvZFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwy KQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNJbnRNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCB2 YWwyKTsgfQoKICBqaW50IENhbGxTdGF0aWNJbnRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9k SUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0ludE1ldGhv ZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpsb25nIENhbGxTdGF0aWNMb25nTWV0 aG9kIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFy Z3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqbG9uZyBy ZXN1bHQgPSBwLT5DYWxsU3RhdGljTG9uZ01ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3Mp OwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAg amxvbmcgQ2FsbFN0YXRpY0xvbmdNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs IHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljTG9uZ01ldGhvZFYgKHRoaXMs IGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpsb25nIENhbGxTdGF0aWNMb25nTWV0aG9kQSAoamNs YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNh bGxTdGF0aWNMb25nTWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamZsb2F0 IENhbGxTdGF0aWNGbG9hdE1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4p CiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyks bWV0aDEpOwogICAgamZsb2F0IHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNGbG9hdE1ldGhvZFYgKHRo aXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICBy ZXR1cm4gcmVzdWx0OwogIH0KCiAgamZsb2F0IENhbGxTdGF0aWNGbG9hdE1ldGhvZFYgKGpjbGFz cyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxT dGF0aWNGbG9hdE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpmbG9hdCBD YWxsU3RhdGljRmxvYXRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1 ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kQSAodGhpcywgY2ww LCBtZXRoMSwgdmFsMik7IH0KCiAgamRvdWJsZSBDYWxsU3RhdGljRG91YmxlTWV0aG9kIChqY2xh c3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqZG91YmxlIHJlc3VsdCA9 IHAtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAg IF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpkb3Vi bGUgQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg dmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWICh0aGlz LCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqZG91YmxlIENhbGxTdGF0aWNEb3VibGVNZXRob2RB IChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4g cC0+Q2FsbFN0YXRpY0RvdWJsZU1ldGhvZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9Cgog IHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy Z3MpLG1ldGgxKTsKICAgIHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kViAodGhpcywgY2wwLCBtZXRo MSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICB9CgogIHZvaWQgQ2FsbFN0 YXRpY1ZvaWRNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFs MikKICB7IHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7 IH0KCiAgdm9pZCBDYWxsU3RhdGljVm9pZE1ldGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt ZXRoMSwganZhbHVlICogdmFsMikKICB7IHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kQSAodGhpcywg Y2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamZpZWxkSUQgR2V0U3RhdGljRmllbGRJRCAoamNsYXNz IGNsMCwgY29uc3QgY2hhciAqIHZhbDEsIGNvbnN0IGNoYXIgKiB2YWwyKQogIHsgcmV0dXJuIHAt PkdldFN0YXRpY0ZpZWxkSUQgKHRoaXMsIGNsMCwgdmFsMSwgdmFsMik7IH0KCiAgam9iamVjdCBH ZXRTdGF0aWNPYmplY3RGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVy biBwLT5HZXRTdGF0aWNPYmplY3RGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqYm9vbGVh biBHZXRTdGF0aWNCb29sZWFuRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyBy ZXR1cm4gcC0+R2V0U3RhdGljQm9vbGVhbkZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGpi eXRlIEdldFN0YXRpY0J5dGVGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJl dHVybiBwLT5HZXRTdGF0aWNCeXRlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgamNoYXIg R2V0U3RhdGljQ2hhckZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJu IHAtPkdldFN0YXRpY0NoYXJGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqc2hvcnQgR2V0 U3RhdGljU2hvcnRGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBw LT5HZXRTdGF0aWNTaG9ydEZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGppbnQgR2V0U3Rh dGljSW50RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0 U3RhdGljSW50RmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgamxvbmcgR2V0U3RhdGljTG9u Z0ZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldFN0YXRp Y0xvbmdGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqZmxvYXQgR2V0U3RhdGljRmxvYXRG aWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRTdGF0aWNG bG9hdEZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGpkb3VibGUgR2V0U3RhdGljRG91Ymxl RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0U3RhdGlj RG91YmxlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgdm9pZCBTZXRTdGF0aWNPYmplY3RG aWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgam9iamVjdCBvYmoyKQogIHsgcC0+U2V0 U3RhdGljT2JqZWN0RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgb2JqMik7IH0KCiAgdm9pZCBTZXRT dGF0aWNCb29sZWFuRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEsIGpib29sZWFuIHZh bDIpCiAgeyBwLT5TZXRTdGF0aWNCb29sZWFuRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7 IH0KCiAgdm9pZCBTZXRTdGF0aWNCeXRlRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEs IGpieXRlIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNCeXRlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwg dmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNDaGFyRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElE IGZsZDEsIGpjaGFyIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNDaGFyRmllbGQgKHRoaXMsIGNsMCwg ZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNTaG9ydEZpZWxkIChqY2xhc3MgY2wwLCBq ZmllbGRJRCBmbGQxLCBqc2hvcnQgdmFsMikKICB7IHAtPlNldFN0YXRpY1Nob3J0RmllbGQgKHRo aXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNJbnRGaWVsZCAoamNsYXNz IGNsMCwgamZpZWxkSUQgZmxkMSwgamludCB2YWwyKQogIHsgcC0+U2V0U3RhdGljSW50RmllbGQg KHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNMb25nRmllbGQgKGpj bGFzcyBjbDAsIGpmaWVsZElEIGZsZDEsIGpsb25nIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNMb25n RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNGbG9hdEZp ZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxLCBqZmxvYXQgdmFsMikKICB7IHAtPlNldFN0 YXRpY0Zsb2F0RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0 aWNEb3VibGVGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamRvdWJsZSB2YWwyKQog IHsgcC0+U2V0U3RhdGljRG91YmxlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAg anN0cmluZyBOZXdTdHJpbmcgKGNvbnN0IGpjaGFyICogdmFsMCwganNpemUgdmFsMSkKICB7IHJl dHVybiBwLT5OZXdTdHJpbmcgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGppbnQgR2V0U3RyaW5n TGVuZ3RoIChqc3RyaW5nIHZhbDApCiAgeyByZXR1cm4gcC0+R2V0U3RyaW5nTGVuZ3RoICh0aGlz LCB2YWwwKTsgfQoKICBjb25zdCBqY2hhciAqIEdldFN0cmluZ0NoYXJzIChqc3RyaW5nIHZhbDAs IGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdDaGFycyAodGhpcywgdmFs MCwgdmFsMSk7IH0KCiAgdm9pZCBSZWxlYXNlU3RyaW5nQ2hhcnMgKGpzdHJpbmcgdmFsMCwgY29u c3QgamNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ0NoYXJzICh0aGlzLCB2YWwwLCB2 YWwxKTsgfQoKICBqc3RyaW5nIE5ld1N0cmluZ1VURiAoY29uc3QgY2hhciAqIHZhbDApCiAgeyBy ZXR1cm4gcC0+TmV3U3RyaW5nVVRGICh0aGlzLCB2YWwwKTsgfQoKICBqc2l6ZSBHZXRTdHJpbmdV VEZMZW5ndGggKGpzdHJpbmcgdmFsMCkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdVVEZMZW5ndGgg KHRoaXMsIHZhbDApOyB9CgogIGNvbnN0IGNoYXIgKiBHZXRTdHJpbmdVVEZDaGFycyAoanN0cmlu ZyB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+R2V0U3RyaW5nVVRGQ2hhcnMg KHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIHZvaWQgUmVsZWFzZVN0cmluZ1VURkNoYXJzIChqc3Ry aW5nIHZhbDAsIGNvbnN0IGNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ1VURkNoYXJz ICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqc2l6ZSBHZXRBcnJheUxlbmd0aCAoamFycmF5IHZh bDApCiAgeyByZXR1cm4gcC0+R2V0QXJyYXlMZW5ndGggKHRoaXMsIHZhbDApOyB9CgogIGphcnJh eSBOZXdPYmplY3RBcnJheSAoanNpemUgdmFsMCwgamNsYXNzIGNsMSwgam9iamVjdCBvYmoyKQog IHsgcmV0dXJuIHAtPk5ld09iamVjdEFycmF5ICh0aGlzLCB2YWwwLCBjbDEsIG9iajIpOyB9Cgog IGpvYmplY3QgR2V0T2JqZWN0QXJyYXlFbGVtZW50IChqb2JqZWN0QXJyYXkgdmFsMCwganNpemUg dmFsMSkKICB7IHJldHVybiBwLT5HZXRPYmplY3RBcnJheUVsZW1lbnQgKHRoaXMsIHZhbDAsIHZh bDEpOyB9CgogIHZvaWQgU2V0T2JqZWN0QXJyYXlFbGVtZW50IChqb2JqZWN0QXJyYXkgdmFsMCwg anNpemUgdmFsMSwgam9iamVjdCBvYmoyKQogIHsgcC0+U2V0T2JqZWN0QXJyYXlFbGVtZW50ICh0 aGlzLCB2YWwwLCB2YWwxLCBvYmoyKTsgfQoKICBqYm9vbGVhbkFycmF5IE5ld0Jvb2xlYW5BcnJh eSAoanNpemUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdCb29sZWFuQXJyYXkgKHRoaXMsIHZhbDAp OyB9CgogIGpieXRlQXJyYXkgTmV3Qnl0ZUFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAt Pk5ld0J5dGVBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamNoYXJBcnJheSBOZXdDaGFyQXJyYXkg KGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3Q2hhckFycmF5ICh0aGlzLCB2YWwwKTsgfQoK ICBqc2hvcnRBcnJheSBOZXdTaG9ydEFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAtPk5l d1Nob3J0QXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGppbnRBcnJheSBOZXdJbnRBcnJheSAoanNp emUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdJbnRBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamxv bmdBcnJheSBOZXdMb25nQXJyYXkgKGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3TG9uZ0Fy cmF5ICh0aGlzLCB2YWwwKTsgfQoKICBqZmxvYXRBcnJheSBOZXdGbG9hdEFycmF5IChqc2l6ZSB2 YWwwKQogIHsgcmV0dXJuIHAtPk5ld0Zsb2F0QXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGpkb3Vi bGVBcnJheSBOZXdEb3VibGVBcnJheSAoanNpemUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdEb3Vi bGVBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamJvb2xlYW4gKiBHZXRCb29sZWFuQXJyYXlFbGVt ZW50cyAoamJvb2xlYW5BcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+ R2V0Qm9vbGVhbkFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpieXRlICog R2V0Qnl0ZUFycmF5RWxlbWVudHMgKGpieXRlQXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQog IHsgcmV0dXJuIHAtPkdldEJ5dGVBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoK ICBqY2hhciAqIEdldENoYXJBcnJheUVsZW1lbnRzIChqY2hhckFycmF5IHZhbDAsIGpib29sZWFu ICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRDaGFyQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwg dmFsMSk7IH0KCiAganNob3J0ICogR2V0U2hvcnRBcnJheUVsZW1lbnRzIChqc2hvcnRBcnJheSB2 YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+R2V0U2hvcnRBcnJheUVsZW1lbnRz ICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqaW50ICogR2V0SW50QXJyYXlFbGVtZW50cyAoamlu dEFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRJbnRBcnJheUVs ZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqbG9uZyAqIEdldExvbmdBcnJheUVsZW1l bnRzIChqbG9uZ0FycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRM b25nQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSk7IH0KCiAgamZsb2F0ICogR2V0Rmxv YXRBcnJheUVsZW1lbnRzIChqZmxvYXRBcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyBy ZXR1cm4gcC0+R2V0RmxvYXRBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBq ZG91YmxlICogR2V0RG91YmxlQXJyYXlFbGVtZW50cyAoamRvdWJsZUFycmF5IHZhbDAsIGpib29s ZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXREb3VibGVBcnJheUVsZW1lbnRzICh0aGlzLCB2 YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyAoamJvb2xl YW5BcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEsIGppbnQgdmFsMikKICB7IHAtPlJlbGVhc2VC b29sZWFuQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBS ZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMgKGpieXRlQXJyYXkgdmFsMCwgamJ5dGUgKiB2YWwxLCBq aW50IHZhbDIpCiAgeyBwLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZh bDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzIChqY2hhckFycmF5 IHZhbDAsIGpjaGFyICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUNoYXJBcnJheUVs ZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyKTsgfQoKICB2b2lkIFJlbGVhc2VTaG9ydEFy cmF5RWxlbWVudHMgKGpzaG9ydEFycmF5IHZhbDAsIGpzaG9ydCAqIHZhbDEsIGppbnQgdmFsMikK ICB7IHAtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIp OyB9CgogIHZvaWQgUmVsZWFzZUludEFycmF5RWxlbWVudHMgKGppbnRBcnJheSB2YWwwLCBqaW50 ICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUludEFycmF5RWxlbWVudHMgKHRoaXMs IHZhbDAsIHZhbDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzIChq bG9uZ0FycmF5IHZhbDAsIGpsb25nICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUxv bmdBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyKTsgfQoKICB2b2lkIFJlbGVh c2VGbG9hdEFycmF5RWxlbWVudHMgKGpmbG9hdEFycmF5IHZhbDAsIGpmbG9hdCAqIHZhbDEsIGpp bnQgdmFsMikKICB7IHAtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZh bDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZURvdWJsZUFycmF5RWxlbWVudHMgKGpkb3VibGVB cnJheSB2YWwwLCBqZG91YmxlICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZURvdWJs ZUFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIpOyB9CgogIHZvaWQgR2V0Qm9v bGVhbkFycmF5UmVnaW9uIChqYm9vbGVhbkFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZh bDIsIGpib29sZWFuICogdmFsMykKICB7IHAtPkdldEJvb2xlYW5BcnJheVJlZ2lvbiAodGhpcywg dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBHZXRCeXRlQXJyYXlSZWdpb24gKGpi eXRlQXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamJ5dGUgKiB2YWwzKQogIHsg cC0+R2V0Qnl0ZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoK ICB2b2lkIEdldENoYXJBcnJheVJlZ2lvbiAoamNoYXJBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBq c2l6ZSB2YWwyLCBqY2hhciAqIHZhbDMpCiAgeyBwLT5HZXRDaGFyQXJyYXlSZWdpb24gKHRoaXMs IHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgR2V0U2hvcnRBcnJheVJlZ2lvbiAo anNob3J0QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwganNob3J0ICogdmFsMykK ICB7IHAtPkdldFNob3J0QXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMp OyB9CgogIHZvaWQgR2V0SW50QXJyYXlSZWdpb24gKGppbnRBcnJheSB2YWwwLCBqc2l6ZSB2YWwx LCBqc2l6ZSB2YWwyLCBqaW50ICogdmFsMykKICB7IHAtPkdldEludEFycmF5UmVnaW9uICh0aGlz LCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIEdldExvbmdBcnJheVJlZ2lvbiAo amxvbmdBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqbG9uZyAqIHZhbDMpCiAg eyBwLT5HZXRMb25nQXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9 CgogIHZvaWQgR2V0RmxvYXRBcnJheVJlZ2lvbiAoamZsb2F0QXJyYXkgdmFsMCwganNpemUgdmFs MSwganNpemUgdmFsMiwgamZsb2F0ICogdmFsMykKICB7IHAtPkdldEZsb2F0QXJyYXlSZWdpb24g KHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgR2V0RG91YmxlQXJyYXlS ZWdpb24gKGpkb3VibGVBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqZG91Ymxl ICogdmFsMykKICB7IHAtPkdldERvdWJsZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2 YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEJvb2xlYW5BcnJheVJlZ2lvbiAoamJvb2xlYW5BcnJh eSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqYm9vbGVhbiAqIHZhbDMpCiAgeyBwLT5T ZXRCb29sZWFuQXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9Cgog IHZvaWQgU2V0Qnl0ZUFycmF5UmVnaW9uIChqYnl0ZUFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpz aXplIHZhbDIsIGpieXRlICogdmFsMykKICB7IHAtPlNldEJ5dGVBcnJheVJlZ2lvbiAodGhpcywg dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBTZXRDaGFyQXJyYXlSZWdpb24gKGpj aGFyQXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamNoYXIgKiB2YWwzKQogIHsg cC0+U2V0Q2hhckFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoK ICB2b2lkIFNldFNob3J0QXJyYXlSZWdpb24gKGpzaG9ydEFycmF5IHZhbDAsIGpzaXplIHZhbDEs IGpzaXplIHZhbDIsIGpzaG9ydCAqIHZhbDMpCiAgeyBwLT5TZXRTaG9ydEFycmF5UmVnaW9uICh0 aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEludEFycmF5UmVnaW9u IChqaW50QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamludCAqIHZhbDMpCiAg eyBwLT5TZXRJbnRBcnJheVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0K CiAgdm9pZCBTZXRMb25nQXJyYXlSZWdpb24gKGpsb25nQXJyYXkgdmFsMCwganNpemUgdmFsMSwg anNpemUgdmFsMiwgamxvbmcgKiB2YWwzKQogIHsgcC0+U2V0TG9uZ0FycmF5UmVnaW9uICh0aGlz LCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEZsb2F0QXJyYXlSZWdpb24g KGpmbG9hdEFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZhbDIsIGpmbG9hdCAqIHZhbDMp CiAgeyBwLT5TZXRGbG9hdEFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwz KTsgfQoKICB2b2lkIFNldERvdWJsZUFycmF5UmVnaW9uIChqZG91YmxlQXJyYXkgdmFsMCwganNp emUgdmFsMSwganNpemUgdmFsMiwgamRvdWJsZSAqIHZhbDMpCiAgeyBwLT5TZXREb3VibGVBcnJh eVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgamludCBSZWdpc3Rl ck5hdGl2ZXMgKGpjbGFzcyBjbDAsIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCAqIHZhbDEsIGppbnQg dmFsMikKICB7IHJldHVybiBwLT5SZWdpc3Rlck5hdGl2ZXMgKHRoaXMsIGNsMCwgdmFsMSwgdmFs Mik7IH0KCiAgamludCBVbnJlZ2lzdGVyTmF0aXZlcyAoamNsYXNzIGNsMCkKICB7IHJldHVybiBw LT5VbnJlZ2lzdGVyTmF0aXZlcyAodGhpcywgY2wwKTsgfQoKICBqaW50IE1vbml0b3JFbnRlciAo am9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk1vbml0b3JFbnRlciAodGhpcywgb2JqMCk7IH0K CiAgamludCBNb25pdG9yRXhpdCAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk1vbml0b3JF eGl0ICh0aGlzLCBvYmowKTsgfQoKICBqaW50IEdldEphdmFWTSAoSmF2YVZNICoqIHZhbDApCiAg eyByZXR1cm4gcC0+R2V0SmF2YVZNICh0aGlzLCB2YWwwKTsgfQoKICB2b2lkIEdldFN0cmluZ1Jl Z2lvbiAoanN0cmluZyB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqY2hhciAqIHZhbDMp CiAgeyBwLT5HZXRTdHJpbmdSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9 CgogIHZvaWQgR2V0U3RyaW5nVVRGUmVnaW9uIChqc3RyaW5nIHZhbDAsIGpzaXplIHZhbDEsIGpz aXplIHZhbDIsIGNoYXIgKiB2YWwzKQogIHsgcC0+R2V0U3RyaW5nVVRGUmVnaW9uICh0aGlzLCB2 YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkICogR2V0UHJpbWl0aXZlQXJyYXlDcml0 aWNhbCAoamFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRQcmlt aXRpdmVBcnJheUNyaXRpY2FsICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVhc2VQ cmltaXRpdmVBcnJheUNyaXRpY2FsIChqYXJyYXkgdmFsMCwgdm9pZCAqIHZhbDEsIGppbnQgdmFs MikKICB7IHAtPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsICh0aGlzLCB2YWwwLCB2YWwx LCB2YWwyKTsgfQoKICBjb25zdCBqY2hhciAqIEdldFN0cmluZ0NyaXRpY2FsIChqc3RyaW5nIHZh bDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdDcml0aWNhbCAodGhp cywgdmFsMCwgdmFsMSk7IH0KCiAgdm9pZCBSZWxlYXNlU3RyaW5nQ3JpdGljYWwgKGpzdHJpbmcg dmFsMCwgY29uc3QgamNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ0NyaXRpY2FsICh0 aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqd2VhayBOZXdXZWFrR2xvYmFsUmVmIChqb2JqZWN0IG9i ajApCiAgeyByZXR1cm4gcC0+TmV3V2Vha0dsb2JhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgdm9p ZCBEZWxldGVXZWFrR2xvYmFsUmVmIChqd2VhayB2YWwwKQogIHsgcC0+RGVsZXRlV2Vha0dsb2Jh bFJlZiAodGhpcywgdmFsMCk7IH0KCiAgamJvb2xlYW4gRXhjZXB0aW9uQ2hlY2sgKCkKICB7IHJl dHVybiBwLT5FeGNlcHRpb25DaGVjayAodGhpcyk7IH0KfTsKCgoKCgoKc3RydWN0IEpOSUludm9r ZUludGVyZmFjZQp7CiAgX0p2X2Z1bmMgcmVzZXJ2ZWQwOwogIF9Kdl9mdW5jIHJlc2VydmVkMTsK ICBfSnZfZnVuYyByZXNlcnZlZDI7CgogIGppbnQgKCpEZXN0cm95SmF2YVZNKSAoSmF2YVZNICop OwogIGppbnQgKCpBdHRhY2hDdXJyZW50VGhyZWFkKSAoSmF2YVZNICosIHZvaWQgKiosIHZvaWQg Kik7CiAgamludCAoKkRldGFjaEN1cnJlbnRUaHJlYWQpIChKYXZhVk0gKik7CiAgamludCAoKkdl dEVudikgKEphdmFWTSAqLCB2b2lkICoqLCBqaW50KTsKfTsKCgoKY2xhc3MgX0p2X0phdmFWTQp7 CnB1YmxpYzoKICBjb25zdCBzdHJ1Y3QgSk5JSW52b2tlSW50ZXJmYWNlICpmdW5jdGlvbnM7Cgpw cml2YXRlOgoKCnB1YmxpYzoKICBqaW50IERlc3Ryb3lKYXZhVk0gKCkKICB7IHJldHVybiBmdW5j dGlvbnMtPkRlc3Ryb3lKYXZhVk0gKHRoaXMpOyB9CgogIGppbnQgQXR0YWNoQ3VycmVudFRocmVh ZCAodm9pZCAqKnBlbnYsIHZvaWQgKmFyZ3MpCiAgeyByZXR1cm4gZnVuY3Rpb25zLT5BdHRhY2hD dXJyZW50VGhyZWFkICh0aGlzLCBwZW52LCBhcmdzKTsgfQoKICBqaW50IERldGFjaEN1cnJlbnRU aHJlYWQgKCkKICB7IHJldHVybiBmdW5jdGlvbnMtPkRldGFjaEN1cnJlbnRUaHJlYWQgKHRoaXMp OyB9CgogIGppbnQgR2V0RW52ICh2b2lkICoqcGVudiwgamludCB2ZXJzaW9uKQogIHsgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0RW52ICh0aGlzLCBwZW52LCB2ZXJzaW9uKTsgfQp9OwoKCnR5cGVkZWYg c3RydWN0IEphdmFWTUF0dGFjaEFyZ3MKewogIGppbnQgdmVyc2lvbjsKICBjaGFyICpuYW1lOwog IGpvYmplY3QgZ3JvdXA7Cgp9IEphdmFWTUF0dGFjaEFyZ3M7Cgp0eXBlZGVmIHN0cnVjdCBKYXZh Vk1PcHRpb24KewogIGNoYXIgKm9wdGlvblN0cmluZzsKICB2b2lkICpleHRyYUluZm87Cn0gSmF2 YVZNT3B0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgSmF2YVZNSW5pdEFyZ3MKewoKICBqaW50IHZlcnNp b247CgoKICBqaW50IG5PcHRpb25zOwoKCiAgSmF2YVZNT3B0aW9uICpvcHRpb25zOwoKCiAgamJv b2xlYW4gaWdub3JlVW5yZWNvZ25pemVkOwp9IEphdmFWTUluaXRBcmdzOwojIDE4ICIuLi8uLi8u Li9saWJqYXZhL2luY2x1ZGUvanZtcGkuaCIgMgojIDMwICIuLi8uLi8uLi9saWJqYXZhL2luY2x1 ZGUvanZtcGkuaCIKc3RydWN0IF9qb2JqZWN0SUQ7CnR5cGVkZWYgc3RydWN0IF9qb2JqZWN0SUQg KiBqb2JqZWN0SUQ7Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgbGluZW5vOwoKICBqbWV0aG9k SUQgbWV0aG9kX2lkOwp9IEpWTVBJX0NhbGxGcmFtZTsKCnR5cGVkZWYgc3RydWN0CnsKICBKTklF bnYgKmVudl9pZDsKCiAgamludCBudW1fZnJhbWVzOwoKICBKVk1QSV9DYWxsRnJhbWUgKmZyYW1l czsKfSBKVk1QSV9DYWxsVHJhY2U7Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGNoYXIgKmZpZWxkX25h bWU7CgogIGNoYXIgKmZpZWxkX3NpZ25hdHVyZTsKfSBKVk1QSV9GaWVsZDsKIyA2NiAiLi4vLi4v Li4vbGliamF2YS9pbmNsdWRlL2p2bXBpLmgiCnR5cGVkZWYgc3RydWN0CnsKCgogIGppbnQgaGVh cF9kdW1wX2xldmVsOwp9IEpWTVBJX0hlYXBEdW1wQXJnOwoKdHlwZWRlZiBzdHJ1Y3QKewoKICBq aW50IG9mZnNldDsKCiAgamludCBsaW5lbm87Cn0gSlZNUElfTGluZW5vOwoKdHlwZWRlZiBzdHJ1 Y3QKewoKICBjaGFyICptZXRob2RfbmFtZTsKCiAgY2hhciAqbWV0aG9kX3NpZ25hdHVyZTsKCiAg amludCBzdGFydF9saW5lbm87CgogIGppbnQgZW5kX2xpbmVubzsKCiAgam1ldGhvZElEIG1ldGhv ZF9pZDsKfSBKVk1QSV9NZXRob2Q7CgoKc3RydWN0IF9KVk1QSV9SYXdNb25pdG9yOwp0eXBlZGVm IHN0cnVjdCBfSlZNUElfUmF3TW9uaXRvciAqSlZNUElfUmF3TW9uaXRvcjsKIyAxNDAgIi4uLy4u Ly4uL2xpYmphdmEvaW5jbHVkZS9qdm1waS5oIgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgZXZl bnRfdHlwZTsKCgogIEpOSUVudiAqZW52X2lkOwoKICB1bmlvbgogIHsKICAgIHN0cnVjdAogICAg ewogICAgICBjaGFyICpjbGFzc19uYW1lOwogICAgICBjaGFyICpzb3VyY2VfbmFtZTsKICAgICAg amludCBudW1faW50ZXJmYWNlczsKICAgICAgamludCBudW1fbWV0aG9kczsKICAgICAgSlZNUElf TWV0aG9kICptZXRob2RzOwogICAgICBqaW50IG51bV9zdGF0aWNfZmllbGRzOwogICAgICBKVk1Q SV9GaWVsZCAqc3RhdGljczsKICAgICAgamludCBudW1faW5zdGFuY2VfZmllbGRzOwogICAgICBK Vk1QSV9GaWVsZCAqaW5zdGFuY2VzOwogICAgICBqb2JqZWN0SUQgY2xhc3NfaWQ7CiAgICB9IGNs YXNzX2xvYWQ7CgogICAgc3RydWN0CiAgICB7CiAgICAgIGpvYmplY3RJRCBjbGFzc19pZDsKICAg IH0gY2xhc3NfdW5sb2FkOwoKICAgIHN0cnVjdAogICAgewogICAgICBqaW50IGFyZW5hX2lkOwog ICAgICBqb2JqZWN0SUQgY2xhc3NfaWQ7CiAgICAgIGppbnQgaXNfYXJyYXk7CiAgICAgIGppbnQg c2l6ZTsKICAgICAgam9iamVjdElEIG9ial9pZDsKICAgIH0gb2JqX2FsbG9jOwoKICAgIHN0cnVj dAogICAgewogICAgICBjaGFyICp0aHJlYWRfbmFtZTsKICAgICAgY2hhciAqZ3JvdXBfbmFtZTsK ICAgICAgY2hhciAqcGFyZW50X25hbWU7CiAgICAgIGpvYmplY3RJRCB0aHJlYWRfaWQ7CiAgICAg IEpOSUVudiAqdGhyZWFkX2Vudl9pZDsKICAgIH0gdGhyZWFkX3N0YXJ0OwoKICB9IHU7Cgp9IEpW TVBJX0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QKewoKICBqaW50IHZlcnNpb247CgoKICB2b2lkICgq Tm90aWZ5RXZlbnQpIChKVk1QSV9FdmVudCAqZXZlbnQpOwoKCiAgamludCAoKkVuYWJsZUV2ZW50 KSAoamludCBldmVudF90eXBlLCB2b2lkICphcmcpOwogIGppbnQgKCpEaXNhYmxlRXZlbnQpIChq aW50IGV2ZW50X3R5cGUsIHZvaWQgKmFyZyk7CiAgamludCAoKlJlcXVlc3RFdmVudCkgKGppbnQg ZXZlbnRfdHlwZSwgdm9pZCAqYXJnKTsKICB2b2lkICgqR2V0Q2FsbFRyYWNlKSAoSlZNUElfQ2Fs bFRyYWNlICp0cmFjZSwgamludCBkZXB0aCk7CiAgdm9pZCAoKlByb2ZpbGVyRXhpdCkgKGppbnQp OwogIEpWTVBJX1Jhd01vbml0b3IgKCpSYXdNb25pdG9yQ3JlYXRlKSAoY2hhciAqbG9ja19uYW1l KTsKICB2b2lkICgqUmF3TW9uaXRvckVudGVyKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lkKTsK ICB2b2lkICgqUmF3TW9uaXRvckV4aXQpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQpOwogIHZv aWQgKCpSYXdNb25pdG9yV2FpdCkgKEpWTVBJX1Jhd01vbml0b3IgbG9ja19pZCwgamxvbmcgbXMp OwogIHZvaWQgKCpSYXdNb25pdG9yTm90aWZ5QWxsKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lk KTsKICB2b2lkICgqUmF3TW9uaXRvckRlc3Ryb3kpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQp OwogIGpsb25nICgqR2V0Q3VycmVudFRocmVhZENwdVRpbWUpICh2b2lkKTsKICB2b2lkICgqU3Vz cGVuZFRocmVhZCkgKEpOSUVudiAqZW52KTsKICB2b2lkICgqUmVzdW1lVGhyZWFkKSAoSk5JRW52 ICplbnYpOwogIGppbnQgKCpHZXRUaHJlYWRTdGF0dXMpIChKTklFbnYgKmVudik7CiAgamJvb2xl YW4gKCpUaHJlYWRIYXNSdW4pIChKTklFbnYgKmVudik7CiAgamludCAoKkNyZWF0ZVN5c3RlbVRo cmVhZCkgKGNoYXIgKm5hbWUsIGppbnQgcHJpb3JpdHksIHZvaWQgKCpmKSAodm9pZCAqKSk7CiAg dm9pZCAoKlNldFRocmVhZExvY2FsU3RvcmFnZSkgKEpOSUVudiAqZW52X2lkLCB2b2lkICpwdHIp OwogIHZvaWQgKigqR2V0VGhyZWFkTG9jYWxTdG9yYWdlKSAoSk5JRW52ICplbnZfaWQpOwogIHZv aWQgKCpEaXNhYmxlR0MpICh2b2lkKTsKICB2b2lkICgqRW5hYmxlR0MpICh2b2lkKTsKICB2b2lk ICgqUnVuR0MpICh2b2lkKTsKICBqb2JqZWN0SUQgKCpHZXRUaHJlYWRPYmplY3QpIChKTklFbnYg KmVudik7CiAgam9iamVjdElEICgqR2V0TWV0aG9kQ2xhc3MpIChqbWV0aG9kSUQgbWlkKTsKCn0g SlZNUElfSW50ZXJmYWNlOwojIDM2OSAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAy CgpleHRlcm4gdm9pZCAoKl9Kdl9KVk1QSV9Ob3RpZnlfT0JKRUNUX0FMTE9DKSAoSlZNUElfRXZl bnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgKCpfSnZfSlZNUElfTm90aWZ5X1RIUkVBRF9TVEFSVCkg KEpWTVBJX0V2ZW50ICpldmVudCk7CmV4dGVybiB2b2lkICgqX0p2X0pWTVBJX05vdGlmeV9USFJF QURfRU5EKSAoSlZNUElfRXZlbnQgKmV2ZW50KTsKIyAyMCAiLi4vLi4vLi4vbGliamF2YS9leGNl cHRpb24uY2MiIDIKCgoKCm5hbWVzcGFjZSBzdGQKewogIHN0YXRpYyBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSkgdm9pZAogIGFib3J0ICgpCiAgewogICAgOjphYm9ydCAoKTsKICB9Cn0K IyAxICIuLi8uLi8uLi9nY2MvdW53aW5kLmgiIDEKIyAyNSAiLi4vLi4vLi4vZ2NjL3Vud2luZC5o IgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX1dvcmQgX19hdHRy aWJ1dGVfXygoX19tb2RlX18oX193b3JkX18pKSk7CnR5cGVkZWYgc2lnbmVkIF9VbndpbmRfU3dv cmQgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX193b3JkX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg X1Vud2luZF9QdHIgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19wb2ludGVyX18pKSk7CgoKCgoK dHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBfX2F0dHJpYnV0ZV9fKChf X21vZGVfXyhfX0RJX18pKSk7CgoKCnR5cGVkZWYgZW51bQp7CiAgX1VSQ19OT19SRUFTT04gPSAw LAogIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKICBfVVJDX0ZBVEFMX1BIQVNF Ml9FUlJPUiA9IDIsCiAgX1VSQ19GQVRBTF9QSEFTRTFfRVJST1IgPSAzLAogIF9VUkNfTk9STUFM X1NUT1AgPSA0LAogIF9VUkNfRU5EX09GX1NUQUNLID0gNSwKICBfVVJDX0hBTkRMRVJfRk9VTkQg PSA2LAogIF9VUkNfSU5TVEFMTF9DT05URVhUID0gNywKICBfVVJDX0NPTlRJTlVFX1VOV0lORCA9 IDgKfSBfVW53aW5kX1JlYXNvbl9Db2RlOwojIDY0ICIuLi8uLi8uLi9nY2MvdW53aW5kLmgiCnN0 cnVjdCBfVW53aW5kX0V4Y2VwdGlvbjsKCnR5cGVkZWYgdm9pZCAoKl9VbndpbmRfRXhjZXB0aW9u X0NsZWFudXBfRm4pIChfVW53aW5kX1JlYXNvbl9Db2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwoKc3Ry dWN0IF9VbndpbmRfRXhjZXB0aW9uCnsKICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBleGNlcHRp b25fY2xhc3M7CiAgX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbiBleGNlcHRpb25fY2xlYW51 cDsKICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8xOwogIF9VbndpbmRfV29yZCBwcml2YXRlXzI7CgoK Cgp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKSk7CgoKCgp0eXBlZGVmIGludCBfVW53aW5k X0FjdGlvbjsKIyA5NiAiLi4vLi4vLi4vZ2NjL3Vud2luZC5oIgpzdHJ1Y3QgX1Vud2luZF9Db250 ZXh0OwoKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfUmFpc2VFeGNlcHRpb24g KHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKCgoKdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9D b2RlICgqX1Vud2luZF9TdG9wX0ZuKQogICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5k X0V4Y2VwdGlvbl9DbGFzcywKICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosIHN0cnVj dCBfVW53aW5kX0NvbnRleHQgKiwgdm9pZCAqKTsKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2Rl IF9VbndpbmRfRm9yY2VkVW53aW5kIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9G biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg Kik7CgoKZXh0ZXJuIHZvaWQgX1Vud2luZF9EZWxldGVFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5k X0V4Y2VwdGlvbiAqKTsKCgoKZXh0ZXJuIHZvaWQgX1Vud2luZF9SZXN1bWUgKHN0cnVjdCBfVW53 aW5kX0V4Y2VwdGlvbiAqKTsKCgoKCgoKZXh0ZXJuIF9VbndpbmRfV29yZCBfVW53aW5kX0dldEdS IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCk7CmV4dGVybiB2b2lkIF9VbndpbmRfU2V0 R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50LCBfVW53aW5kX1dvcmQpOwoKZXh0ZXJu IF9VbndpbmRfUHRyIF9VbndpbmRfR2V0SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CmV4 dGVybiB2b2lkIF9VbndpbmRfU2V0SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgX1Vud2lu ZF9QdHIpOwoKZXh0ZXJuIHZvaWQgKl9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEgKHN0 cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CgpleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXRS ZWdpb25TdGFydCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKIyAxNDggIi4uLy4uLy4uL2dj Yy91bndpbmQuaCIKdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9QZXJzb25h bGl0eV9GbikKICAgICAoaW50LCBfVW53aW5kX0FjdGlvbiwgX1Vud2luZF9FeGNlcHRpb25fQ2xh c3MsCiAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLCBzdHJ1Y3QgX1Vud2luZF9Db250 ZXh0ICopOwoKCgoKc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29udGV4dDsKZXh0ZXJuIHZvaWQgX1Vu d2luZF9TakxqX1JlZ2lzdGVyIChzdHJ1Y3QgU2pMal9GdW5jdGlvbl9Db250ZXh0ICopOwpleHRl cm4gdm9pZCBfVW53aW5kX1NqTGpfVW5yZWdpc3RlciAoc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29u dGV4dCAqKTsKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9SYWlzZUV4 Y2VwdGlvbgogICAgIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CmV4dGVybiBfVW53aW5k X1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9Gb3JjZWRVbndpbmQKICAgICAoc3RydWN0IF9Vbndp bmRfRXhjZXB0aW9uICosIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgX1Vu d2luZF9TakxqX1Jlc3VtZSAoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwojIDE4NiAiLi4v Li4vLi4vZ2NjL3Vud2luZC5oIgpleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVs QmFzZSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKZXh0ZXJuIF9VbndpbmRfUHRyIF9Vbndp bmRfR2V0VGV4dFJlbEJhc2UgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CgoKCn0KIyAzMyAi Li4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiIDIKCnN0cnVjdCBhbGlnbm1lbnRfdGVzdF9z dHJ1Y3QKewogIGNoYXIgc3BhY2U7CiAgY2hhciBlbmRbMF0gX19hdHRyaWJ1dGVfXygoYWxpZ25l ZCkpOwp9OwoKc3RydWN0IGphdmFfZXhjZXB0aW9uX2hlYWRlcgp7CgogIF9VbndpbmRfUHRyIGxh bmRpbmdQYWQ7CiAgaW50IGhhbmRsZXJTd2l0Y2hWYWx1ZTsKCgoKCgogIGNoYXIgcGFkW3NpemVv ZihqdGhyb3dhYmxlKSA8IHNpemVvZihhbGlnbm1lbnRfdGVzdF9zdHJ1Y3QpCiAgICAgICAgICAg PyBzaXplb2YoYWxpZ25tZW50X3Rlc3Rfc3RydWN0KSAtIHNpemVvZihqdGhyb3dhYmxlKSA6IDBd CiAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSk7CgogIGp0aHJvd2FibGUgdmFsdWU7CgoKICBf VW53aW5kX0V4Y2VwdGlvbiB1bndpbmRIZWFkZXI7Cn07CgoKY29uc3QgX1Vud2luZF9FeGNlcHRp b25fQ2xhc3MgX19nY2pfZXhjZXB0aW9uX2NsYXNzCj0gKCgoKCgoKChfVW53aW5kX0V4Y2VwdGlv bl9DbGFzcykgJ0cnCiAgICAgICAgIDw8IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MpICdO JykKICAgICAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnVScpCiAgICAgICA8 PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnQycpCiAgICAgIDw8IDggfCAoX1Vud2lu ZF9FeGNlcHRpb25fQ2xhc3MpICdKJykKICAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0Ns YXNzKSAnQScpCiAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnVicpCiAgIDw8 IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MpICdBJyk7CgoKc3RhdGljIGlubGluZSBqYXZh X2V4Y2VwdGlvbl9oZWFkZXIgKgpnZXRfZXhjZXB0aW9uX2hlYWRlcl9mcm9tX3VlIChfVW53aW5k X0V4Y2VwdGlvbiAqZXhjKQp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amF2YV9leGNlcHRp b25faGVhZGVyICo+KGV4YyArIDEpIC0gMTsKfQoKCgoKZXh0ZXJuICJDIiB2b2lkCl9Kdl9UaHJv dyAoanRocm93YWJsZSB2YWx1ZSkKewogIGphdmFfZXhjZXB0aW9uX2hlYWRlciAqeGgKICAgID0g c3RhdGljX2Nhc3Q8amF2YV9leGNlcHRpb25faGVhZGVyICo+KF9Kdl9BbGxvY1Jhd09iaiAoc2l6 ZW9mICgqeGgpKSk7CgogIGlmICh2YWx1ZSA9PSBfX251bGwpCiAgICB2YWx1ZSA9IG5ldyBqYXZh OjpsYW5nOjpOdWxsUG9pbnRlckV4Y2VwdGlvbiAoKTsKICB4aC0+dmFsdWUgPSB2YWx1ZTsKCiAg eGgtPnVud2luZEhlYWRlci5leGNlcHRpb25fY2xhc3MgPSBfX2djal9leGNlcHRpb25fY2xhc3M7 CiAgeGgtPnVud2luZEhlYWRlci5leGNlcHRpb25fY2xlYW51cCA9IF9fbnVsbDsKCgoKICBfVW53 aW5kX1JlYXNvbl9Db2RlIGNvZGU7CgoKCiAgY29kZSA9IF9VbndpbmRfUmFpc2VFeGNlcHRpb24g KCZ4aC0+dW53aW5kSGVhZGVyKTsKIyAxMTAgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNj IgogIGFib3J0KCk7Cn0KCgojIDEgIi4uLy4uLy4uL2djYy91bndpbmQtcGUuaCIgMQojIDU5ICIu Li8uLi8uLi9nY2MvdW53aW5kLXBlLmgiCnN0YXRpYyB1bnNpZ25lZCBpbnQKc2l6ZV9vZl9lbmNv ZGVkX3ZhbHVlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nKQp7CiAgaWYgKGVuY29kaW5nID09IDB4 ZmYpCiAgICByZXR1cm4gMDsKCiAgc3dpdGNoIChlbmNvZGluZyAmIDB4MDcpCiAgICB7CiAgICBj YXNlIDB4MDA6CiAgICAgIHJldHVybiBzaXplb2YgKHZvaWQgKik7CiAgICBjYXNlIDB4MDI6CiAg ICAgIHJldHVybiAyOwogICAgY2FzZSAweDAzOgogICAgICByZXR1cm4gNDsKICAgIGNhc2UgMHgw NDoKICAgICAgcmV0dXJuIDg7CiAgICB9CiAgc3RkOjphYm9ydCAoKTsKfQojIDg2ICIuLi8uLi8u Li9nY2MvdW53aW5kLXBlLmgiCnN0YXRpYyBfVW53aW5kX1B0cgpiYXNlX29mX2VuY29kZWRfdmFs dWUgKHVuc2lnbmVkIGNoYXIgZW5jb2RpbmcsIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRl eHQpCnsKICBpZiAoZW5jb2RpbmcgPT0gMHhmZikKICAgIHJldHVybiAwOwoKICBzd2l0Y2ggKGVu Y29kaW5nICYgMHg3MCkKICAgIHsKICAgIGNhc2UgMHgwMDoKICAgIGNhc2UgMHgxMDoKICAgIGNh c2UgMHg1MDoKICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSAweDIwOgogICAgICByZXR1cm4gX1Vu d2luZF9HZXRUZXh0UmVsQmFzZSAoY29udGV4dCk7CiAgICBjYXNlIDB4MzA6CiAgICAgIHJldHVy biBfVW53aW5kX0dldERhdGFSZWxCYXNlIChjb250ZXh0KTsKICAgIGNhc2UgMHg0MDoKICAgICAg cmV0dXJuIF9VbndpbmRfR2V0UmVnaW9uU3RhcnQgKGNvbnRleHQpOwogICAgfQogIHN0ZDo6YWJv cnQgKCk7Cn0KIyAxMTYgIi4uLy4uLy4uL2djYy91bndpbmQtcGUuaCIKc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgKgpyZWFkX3VsZWIxMjggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsIF9Vbndp bmRfV29yZCAqdmFsKQp7CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1bnNpZ25lZCBjaGFy IGJ5dGU7CiAgX1Vud2luZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsKICBkbwogICAgewog ICAgICBieXRlID0gKnArKzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7 CiAgICAgIHNoaWZ0ICs9IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCiAgKnZhbCA9 IHJlc3VsdDsKICByZXR1cm4gcDsKfQoKCgpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqCnJl YWRfc2xlYjEyOCAoY29uc3QgdW5zaWduZWQgY2hhciAqcCwgX1Vud2luZF9Td29yZCAqdmFsKQp7 CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1bnNpZ25lZCBjaGFyIGJ5dGU7CiAgX1Vud2lu ZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsKICBkbwogICAgewogICAgICBieXRlID0gKnAr KzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CiAgICAgIHNoaWZ0ICs9 IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCgogIGlmIChzaGlmdCA8IDggKiBzaXpl b2YocmVzdWx0KSAmJiAoYnl0ZSAmIDB4NDApICE9IDApCiAgICByZXN1bHQgfD0gLSgxTCA8PCBz aGlmdCk7CgogICp2YWwgPSAoX1Vud2luZF9Td29yZCkgcmVzdWx0OwogIHJldHVybiBwOwp9CgoK CgoKc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgpyZWFkX2VuY29kZWRfdmFsdWVfd2l0aF9i YXNlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nLCBfVW53aW5kX1B0ciBiYXNlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBfVW53aW5kX1B0ciAq dmFsKQp7CiAgdW5pb24gdW5hbGlnbmVkCiAgICB7CiAgICAgIHZvaWQgKnB0cjsKICAgICAgdW5z aWduZWQgdTIgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKEhJKSkpOwogICAgICB1bnNpZ25lZCB1NCBf X2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7CiAgICAgIHVuc2lnbmVkIHU4IF9fYXR0cmlidXRl X18gKChtb2RlIChESSkpKTsKICAgICAgc2lnbmVkIHMyIF9fYXR0cmlidXRlX18gKChtb2RlIChI SSkpKTsKICAgICAgc2lnbmVkIHM0IF9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKICAgICAg c2lnbmVkIHM4IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKICAgIH0gX19hdHRyaWJ1dGVf XygoX19wYWNrZWRfXykpOwoKICB1bmlvbiB1bmFsaWduZWQgKnUgPSAodW5pb24gdW5hbGlnbmVk ICopIHA7CiAgX1Vud2luZF9QdHIgcmVzdWx0OwoKICBpZiAoZW5jb2RpbmcgPT0gMHg1MCkKICAg IHsKICAgICAgX1Vud2luZF9QdHIgYSA9IChfVW53aW5kX1B0cikgcDsKICAgICAgYSA9IChhICsg c2l6ZW9mICh2b2lkICopIC0gMSkgJiAtIHNpemVvZih2b2lkICopOwogICAgICByZXN1bHQgPSAq KF9VbndpbmRfUHRyICopIGE7CiAgICAgIHAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAoYSAr IHNpemVvZiAodm9pZCAqKSk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBzd2l0Y2ggKGVuY29k aW5nICYgMHgwZikKICAgICAgICB7CiAgICAgICAgY2FzZSAweDAwOgogICAgICAgICAgcmVzdWx0 ID0gKF9VbndpbmRfUHRyKSB1LT5wdHI7CiAgICAgICAgICBwICs9IHNpemVvZiAodm9pZCAqKTsK ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDE6CiAgICAgICAgICB7CiAgICAgICAg ICAgIF9VbndpbmRfV29yZCB0bXA7CiAgICAgICAgICAgIHAgPSByZWFkX3VsZWIxMjggKHAsICZ0 bXApOwogICAgICAgICAgICByZXN1bHQgPSAoX1Vud2luZF9QdHIpIHRtcDsKICAgICAgICAgIH0K ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDk6CiAgICAgICAgICB7CiAgICAgICAg ICAgIF9VbndpbmRfU3dvcmQgdG1wOwogICAgICAgICAgICBwID0gcmVhZF9zbGViMTI4IChwLCAm dG1wKTsKICAgICAgICAgICAgcmVzdWx0ID0gKF9VbndpbmRfUHRyKSB0bXA7CiAgICAgICAgICB9 CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDAyOgogICAgICAgICAgcmVzdWx0ID0g dS0+dTI7CiAgICAgICAgICBwICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4 MDM6CiAgICAgICAgICByZXN1bHQgPSB1LT51NDsKICAgICAgICAgIHAgKz0gNDsKICAgICAgICAg IGJyZWFrOwogICAgICAgIGNhc2UgMHgwNDoKICAgICAgICAgIHJlc3VsdCA9IHUtPnU4OwogICAg ICAgICAgcCArPSA4OwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHgwQToKICAgICAg ICAgIHJlc3VsdCA9IHUtPnMyOwogICAgICAgICAgcCArPSAyOwogICAgICAgICAgYnJlYWs7CiAg ICAgICAgY2FzZSAweDBCOgogICAgICAgICAgcmVzdWx0ID0gdS0+czQ7CiAgICAgICAgICBwICs9 IDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MEM6CiAgICAgICAgICByZXN1bHQg PSB1LT5zODsKICAgICAgICAgIHAgKz0gODsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZh dWx0OgogICAgICAgICAgc3RkOjphYm9ydCAoKTsKICAgICAgICB9CgogICAgICBpZiAocmVzdWx0 ICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ICs9ICgoZW5jb2RpbmcgJiAweDcwKSA9 PSAweDEwCiAgICAgICAgICAgICAgICAgICAgID8gKF9VbndpbmRfUHRyKSB1IDogYmFzZSk7CiAg ICAgICAgICBpZiAoZW5jb2RpbmcgJiAweDgwKQogICAgICAgICAgICByZXN1bHQgPSAqKF9Vbndp bmRfUHRyICopIHJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICp2YWwgPSByZXN1bHQ7CiAgcmV0 dXJuIHA7Cn0KCgoKCgoKc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBjaGFyICoKcmVhZF9l bmNvZGVkX3ZhbHVlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBj aGFyIGVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAs IF9VbndpbmRfUHRyICp2YWwpCnsKICByZXR1cm4gcmVhZF9lbmNvZGVkX3ZhbHVlX3dpdGhfYmFz ZSAoZW5jb2RpbmcsCiAgICAgICAgICAgICAgICBiYXNlX29mX2VuY29kZWRfdmFsdWUgKGVuY29k aW5nLCBjb250ZXh0KSwKICAgICAgICAgICAgICAgIHAsIHZhbCk7Cn0KIyAxMTUgIi4uLy4uLy4u L2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCgpzdHJ1Y3QgbHNkYV9oZWFkZXJfaW5mbwp7CiAgX1Vu d2luZF9QdHIgU3RhcnQ7CiAgX1Vud2luZF9QdHIgTFBTdGFydDsKICBjb25zdCB1bnNpZ25lZCBj aGFyICpUVHlwZTsKICBjb25zdCB1bnNpZ25lZCBjaGFyICphY3Rpb25fdGFibGU7CiAgdW5zaWdu ZWQgY2hhciB0dHlwZV9lbmNvZGluZzsKICB1bnNpZ25lZCBjaGFyIGNhbGxfc2l0ZV9lbmNvZGlu ZzsKfTsKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICoKcGFyc2VfbHNkYV9oZWFkZXIgKF9V bndpbmRfQ29udGV4dCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqcCwKICAgICAgICAg ICAgICAgICAgIGxzZGFfaGVhZGVyX2luZm8gKmluZm8pCnsKICBfVW53aW5kX1dvcmQgdG1wOwog IHVuc2lnbmVkIGNoYXIgbHBzdGFydF9lbmNvZGluZzsKCiAgaW5mby0+U3RhcnQgPSAoY29udGV4 dCA/IF9VbndpbmRfR2V0UmVnaW9uU3RhcnQgKGNvbnRleHQpIDogMCk7CgoKICBscHN0YXJ0X2Vu Y29kaW5nID0gKnArKzsKICBpZiAobHBzdGFydF9lbmNvZGluZyAhPSAweGZmKQogICAgcCA9IHJl YWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgbHBzdGFydF9lbmNvZGluZywgcCwgJmluZm8tPkxQ U3RhcnQpOwogIGVsc2UKICAgIGluZm8tPkxQU3RhcnQgPSBpbmZvLT5TdGFydDsKCgogIGluZm8t PnR0eXBlX2VuY29kaW5nID0gKnArKzsKICBpZiAoaW5mby0+dHR5cGVfZW5jb2RpbmcgIT0gMHhm ZikKICAgIHsKICAgICAgcCA9IHJlYWRfdWxlYjEyOCAocCwgJnRtcCk7CiAgICAgIGluZm8tPlRU eXBlID0gcCArIHRtcDsKICAgIH0KICBlbHNlCiAgICBpbmZvLT5UVHlwZSA9IDA7CgoKCiAgaW5m by0+Y2FsbF9zaXRlX2VuY29kaW5nID0gKnArKzsKICBwID0gcmVhZF91bGViMTI4IChwLCAmdG1w KTsKICBpbmZvLT5hY3Rpb25fdGFibGUgPSBwICsgdG1wOwoKICByZXR1cm4gcDsKfQoKc3RhdGlj IGpjbGFzcwpnZXRfdHR5cGVfZW50cnkgKF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgbHNkYV9o ZWFkZXJfaW5mbyAqaW5mbywgbG9uZyBpKQp7CiAgX1Vud2luZF9QdHIgcHRyOwoKICBpICo9IHNp emVfb2ZfZW5jb2RlZF92YWx1ZSAoaW5mby0+dHR5cGVfZW5jb2RpbmcpOwogIHJlYWRfZW5jb2Rl ZF92YWx1ZSAoY29udGV4dCwgaW5mby0+dHR5cGVfZW5jb2RpbmcsIGluZm8tPlRUeXBlIC0gaSwg JnB0cik7CgogIHJldHVybiByZWludGVycHJldF9jYXN0PGpjbGFzcz4ocHRyKTsKfQojIDE4MiAi Li4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiCmV4dGVybiAiQyIgX1Vud2luZF9SZWFzb25f Q29kZQpfX2djal9wZXJzb25hbGl0eV92MCAoaW50IHZlcnNpb24sCiAgICAgICAgICAgICAgICAg ICAgICBfVW53aW5kX0FjdGlvbiBhY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgX1Vud2lu ZF9FeGNlcHRpb25fQ2xhc3MgZXhjZXB0aW9uX2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICp1ZV9oZWFkZXIsCiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQp7CiAgamF2YV9leGNlcHRpb25faGVh ZGVyICp4aCA9IGdldF9leGNlcHRpb25faGVhZGVyX2Zyb21fdWUgKHVlX2hlYWRlcik7CgogIGxz ZGFfaGVhZGVyX2luZm8gaW5mbzsKICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYW5ndWFnZV9zcGVj aWZpY19kYXRhOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFjdGlvbl9yZWNvcmQ7CiAgY29uc3Qg dW5zaWduZWQgY2hhciAqcDsKICBfVW53aW5kX1B0ciBsYW5kaW5nX3BhZCwgaXA7CiAgaW50IGhh bmRsZXJfc3dpdGNoX3ZhbHVlOwogIGJvb2wgc2F3X2NsZWFudXA7CiAgYm9vbCBzYXdfaGFuZGxl cjsKCgoKICBpZiAodmVyc2lvbiAhPSAxKQogICAgcmV0dXJuIF9VUkNfRkFUQUxfUEhBU0UxX0VS Uk9SOwoKCiAgaWYgKGFjdGlvbnMgPT0gKDIgfCA0KQogICAgICAmJiBleGNlcHRpb25fY2xhc3Mg PT0gX19nY2pfZXhjZXB0aW9uX2NsYXNzKQogICAgewogICAgICBoYW5kbGVyX3N3aXRjaF92YWx1 ZSA9IHhoLT5oYW5kbGVyU3dpdGNoVmFsdWU7CiAgICAgIGxhbmRpbmdfcGFkID0geGgtPmxhbmRp bmdQYWQ7CiAgICAgIGdvdG8gaW5zdGFsbF9jb250ZXh0OwogICAgfQojIDIyMyAiLi4vLi4vLi4v bGliamF2YS9leGNlcHRpb24uY2MiCiAgbGFuZ3VhZ2Vfc3BlY2lmaWNfZGF0YSA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICopCiAgICBfVW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhIChjb250 ZXh0KTsKCgogIGlmICghIGxhbmd1YWdlX3NwZWNpZmljX2RhdGEpCiAgICByZXR1cm4gX1VSQ19D T05USU5VRV9VTldJTkQ7CgoKICBwID0gcGFyc2VfbHNkYV9oZWFkZXIgKGNvbnRleHQsIGxhbmd1 YWdlX3NwZWNpZmljX2RhdGEsICZpbmZvKTsKICBpcCA9IF9VbndpbmRfR2V0SVAgKGNvbnRleHQp IC0gMTsKICBsYW5kaW5nX3BhZCA9IDA7CiAgYWN0aW9uX3JlY29yZCA9IDA7CiAgaGFuZGxlcl9z d2l0Y2hfdmFsdWUgPSAwOwojIDI2MyAiLi4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiCiAg d2hpbGUgKHAgPCBpbmZvLmFjdGlvbl90YWJsZSkKICAgIHsKICAgICAgX1Vud2luZF9QdHIgY3Nf c3RhcnQsIGNzX2xlbiwgY3NfbHA7CiAgICAgIF9VbndpbmRfV29yZCBjc19hY3Rpb247CgoKICAg ICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoMCwgaW5mby5jYWxsX3NpdGVfZW5jb2RpbmcsIHAs ICZjc19zdGFydCk7CiAgICAgIHAgPSByZWFkX2VuY29kZWRfdmFsdWUgKDAsIGluZm8uY2FsbF9z aXRlX2VuY29kaW5nLCBwLCAmY3NfbGVuKTsKICAgICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZSAo MCwgaW5mby5jYWxsX3NpdGVfZW5jb2RpbmcsIHAsICZjc19scCk7CiAgICAgIHAgPSByZWFkX3Vs ZWIxMjggKHAsICZjc19hY3Rpb24pOwoKCiAgICAgIGlmIChpcCA8IGluZm8uU3RhcnQgKyBjc19z dGFydCkKICAgICAgICBwID0gaW5mby5hY3Rpb25fdGFibGU7CiAgICAgIGVsc2UgaWYgKGlwIDwg aW5mby5TdGFydCArIGNzX3N0YXJ0ICsgY3NfbGVuKQogICAgICAgIHsKICAgICAgICAgIGlmIChj c19scCkKICAgICAgICAgICAgbGFuZGluZ19wYWQgPSBpbmZvLkxQU3RhcnQgKyBjc19scDsKICAg ICAgICAgIGlmIChjc19hY3Rpb24pCiAgICAgICAgICAgIGFjdGlvbl9yZWNvcmQgPSBpbmZvLmFj dGlvbl90YWJsZSArIGNzX2FjdGlvbiAtIDE7CiAgICAgICAgICBnb3RvIGZvdW5kX3NvbWV0aGlu ZzsKICAgICAgICB9CiAgICB9CgoKCgoKICByZXR1cm4gX1VSQ19DT05USU5VRV9VTldJTkQ7Cgog Zm91bmRfc29tZXRoaW5nOgogIHNhd19jbGVhbnVwID0gZmFsc2U7CiAgc2F3X2hhbmRsZXIgPSBm YWxzZTsKCiAgaWYgKGxhbmRpbmdfcGFkID09IDApCiAgICB7CgoKICAgIH0KICBlbHNlIGlmIChh Y3Rpb25fcmVjb3JkID09IDApCiAgICB7CgoKCiAgICAgIHNhd19jbGVhbnVwID0gdHJ1ZTsKICAg IH0KICBlbHNlCiAgICB7CgogICAgICBfVW53aW5kX1N3b3JkIGFyX2ZpbHRlciwgYXJfZGlzcDsK CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIHAgPSBhY3Rpb25fcmVjb3JkOwog ICAgICAgICAgcCA9IHJlYWRfc2xlYjEyOCAocCwgJmFyX2ZpbHRlcik7CiAgICAgICAgICByZWFk X3NsZWIxMjggKHAsICZhcl9kaXNwKTsKCiAgICAgICAgICBpZiAoYXJfZmlsdGVyID09IDApCiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc2F3X2NsZWFudXAgPSB0cnVlOwogICAgICAgICAg ICB9CgoKCiAgICAgICAgICBlbHNlIGlmICgoYWN0aW9ucyAmIDgpCiAgICAgICAgICAgICAgfHwg ZXhjZXB0aW9uX2NsYXNzICE9IF9fZ2NqX2V4Y2VwdGlvbl9jbGFzcykKICAgICAgICAgICAgOwoK ICAgICAgICAgIGVsc2UgaWYgKGFyX2ZpbHRlciA+IDApCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIGpjbGFzcyBjYXRjaF90eXBlID0gZ2V0X3R0eXBlX2VudHJ5IChjb250ZXh0LCAmaW5m bywgYXJfZmlsdGVyKTsKCgoKICAgICAgICAgICAgICBpZiAoKHNpemVfdCljYXRjaF90eXBlICYg MSkKICAgICAgICAgICAgICAgIGNhdGNoX3R5cGUgPSBfSnZfRmluZENsYXNzICgoVXRmOENvbnN0 KiljYXRjaF90eXBlIC0gMSwgX19udWxsKTsKCiAgICAgICAgICAgICAgaWYgKF9Kdl9Jc0luc3Rh bmNlT2YgKHhoLT52YWx1ZSwgY2F0Y2hfdHlwZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIGhhbmRsZXJfc3dpdGNoX3ZhbHVlID0gYXJfZmlsdGVyOwogICAgICAgICAgICAg ICAgICBzYXdfaGFuZGxlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoK CgogICAgICAgICAgICAgIGFib3J0ICgpOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKGFy X2Rpc3AgPT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBhY3Rpb25fcmVjb3JkID0g cCArIGFyX2Rpc3A7CiAgICAgICAgfQogICAgfQoKICBpZiAoISBzYXdfaGFuZGxlciAmJiAhIHNh d19jbGVhbnVwKQogICAgcmV0dXJuIF9VUkNfQ09OVElOVUVfVU5XSU5EOwoKICBpZiAoYWN0aW9u cyAmIDEpCiAgICB7CiAgICAgIGlmICghIHNhd19oYW5kbGVyKQogICAgICAgIHJldHVybiBfVVJD X0NPTlRJTlVFX1VOV0lORDsKCgogICAgICBpZiAoZXhjZXB0aW9uX2NsYXNzID09IF9fZ2NqX2V4 Y2VwdGlvbl9jbGFzcykKICAgICAgICB7CiAgICAgICAgICB4aC0+aGFuZGxlclN3aXRjaFZhbHVl ID0gaGFuZGxlcl9zd2l0Y2hfdmFsdWU7CiAgICAgICAgICB4aC0+bGFuZGluZ1BhZCA9IGxhbmRp bmdfcGFkOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9VUkNfSEFORExFUl9GT1VORDsKICAgIH0K CiBpbnN0YWxsX2NvbnRleHQ6CiAgX1Vud2luZF9TZXRHUiAoY29udGV4dCwgX19idWlsdGluX2Vo X3JldHVybl9kYXRhX3JlZ25vICgwKSwKICAgICAgICAgICAgICAgICAoX1Vud2luZF9QdHIpICZ4 aC0+dW53aW5kSGVhZGVyKTsKICBfVW53aW5kX1NldEdSIChjb250ZXh0LCBfX2J1aWx0aW5fZWhf cmV0dXJuX2RhdGFfcmVnbm8gKDEpLAogICAgICAgICAgICAgICAgIGhhbmRsZXJfc3dpdGNoX3Zh bHVlKTsKICBfVW53aW5kX1NldElQIChjb250ZXh0LCBsYW5kaW5nX3BhZCk7CiAgcmV0dXJuIF9V UkNfSU5TVEFMTF9DT05URVhUOwp9Cg==