From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25350 invoked by alias); 20 Aug 2002 06:06:02 -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 25326 invoked by uid 71); 20 Aug 2002 06:06:01 -0000 Resent-Date: 20 Aug 2002 06:06:01 -0000 Resent-Message-ID: <20020820060601.25325.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, anonymous@sources.redhat.com Received: (qmail 25056 invoked by uid 61); 20 Aug 2002 06:02:44 -0000 Message-Id: <20020820060244.25055.qmail@sources.redhat.com> Date: Mon, 19 Aug 2002 23:46:00 -0000 From: anonymous@sources.redhat.com To: gcc-gnats@gcc.gnu.org Cc: galexander@nc.rr.com Subject: optimization/7642: optimization problem with signbit() of a X-SW-Source: 2002-08/txt/msg00391.txt.bz2 List-Id: >Number: 7642 >Category: optimization >Synopsis: optimization problem with signbit() of a >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Mon Aug 19 23:06:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Geoff Alexander >Release: gcc 3.2 >Organization: >Environment: gcc 3.2 on SuSE Linux/x86 7.1 (kernel 2.4.0 and glibc 2.2) >Description: The following program illustrates an optimization problem with signbit() of a long double NAN: #include #include #include int main(int argc, char* argv[]) { long double n = NAN; if (signbit(n)) { fprintf(stdout, "n is negative\n"); } else { fprintf(stdout, "n is positive\n"); } exit(0); } When compiled with gcc -D_XOPEN_SOURCE=600 -o Test1 Test1.c the resulting Test1 correctly prints "n is positive". When compiled with gcc -D_XOPEN_SOURCE=600 -O -o Test1 Test1.c or gcc -D_XOPEN_SOURCE=600 -O2 -o Test1 Test1.c the resulting Test1 incorrectly prints "n is negative". I am using gcc 3.2 on SuSE Linux/x86 7.1 (Linux kernel 2.4.0 and glibc 2.2). >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: long double NAN From: gdlxn@us.ibm.com Reply-To: gdlxn@us.ibm.com X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: galexander@nc.rr.com long double NAN ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="Test1.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Test1.i" IyAxICJUZXN0MS5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi VGVzdDEuYyIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK IyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTIgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwoj IDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVm IGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQx ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSA7IGV4 dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBk b3VibGUgYXRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9f eCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgOyBleHRl cm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91 YmxlIGNvcyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSA7 CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luIChk b3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91 YmxlIF9fdGFuIChkb3VibGUgX194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxs cy5oIiAzCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f Y29zaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSA7IGV4 dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbmggKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJu IGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJs ZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX2FzaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBkb3Vi bGUgZXhwIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIDsK IyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJl eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fZnJleHAg KGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRv dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91Ymxl IF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkg OyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cx MCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpl eHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBk b3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gZG91 YmxlIGV4cG0xIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9f eCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBf X2xvZzFwIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSA7 IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGV4 cDIgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIDsKCgpl eHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRv dWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4 dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91 YmxlIF9feCkgOwoKCgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195 KSA7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoK ZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19jYnJ0IChk b3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgOyBleHRl cm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91 YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFi cyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi bGUgZmxvb3IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVy biBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gaW50 IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKIyAyMDcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBk b3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUg X195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZG91YmxlIG5hbiAo X19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUp IDsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91Ymxl KSA7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgam4gKGludCwg ZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIDsKZXh0ZXJuIGRvdWJs ZSB5MCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSA7CmV4dGVybiBkb3Vi bGUgeTEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgOwpleHRlcm4gZG91 YmxlIHluIChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSA7 CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZXJmIChk b3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2Vy ZmMgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSA7IGV4dGVybiBkb3Vi bGUgX19sZ2FtbWEgKGRvdWJsZSkgOwoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSA7 IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgOwoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1t YSAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSA7CiMgMjYwICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQg KGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVy IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19yZW1haW5kZXIgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9f eCwgZG91YmxlIF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX24pIDsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSA7 IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJu IGludCBpbG9nYiAoZG91YmxlIF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gp IDsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7 IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIDsKCgoK ZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX25l YXJieWludCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91Ymxl IHRydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk b3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19x dW8pIDsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxyaW50IChkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3Vi bGUgX194KSA7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cm91bmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3Vi bGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg OyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVy biBkb3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9f Zm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0 IChkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSA7IGV4 dGVybiBkb3VibGUgX19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsK IyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBhc2luZiAo ZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIDsKCmV4dGVybiBm bG9hdCBhdGFuZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gp IDsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgY29z ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gp IDsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAo ZmxvYXQgX194KSA7CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVy biBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBf X3gpIDsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Np bmhmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVy biBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxv YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxv YXQgYXNpbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gp IDsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFu aGYgKGZsb2F0IF9feCkgOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIDsgZXh0 ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSA7CiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv bmVudCkgOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50 KSA7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgOyBl eHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRl cm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9f eCkgOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19s b2cxMGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9h dCAqX19pcHRyKSA7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lw dHIpIDsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf X2V4cG0xZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZ2Jm IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgOwoKCgoKZXh0 ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0 IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf X2xvZzJmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwg ZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7 CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fc3FydGYg KGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCgpl eHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxv YXQgX194KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxv YXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29y ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSA7CgoKZXh0 ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19m bW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZs b2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f ZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDIw NyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGNvcHlzaWdu ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190 YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9f Y29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9f ajBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19q MWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0 IF9fam5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSA7IGV4dGVybiBm bG9hdCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIDsgZXh0ZXJuIGZs b2F0IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSA7IGV4dGVy biBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9h dCkgOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZs b2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgbGdhbW1h ZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIDsKCgoKZXh0ZXJuIGZs b2F0IHRnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSA7CgoK CgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZs b2F0KSA7CiMgMjYwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxv YXQgcmludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSA7 CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQg bmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcg ZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQg cmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcmVtYWlu ZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxv YXQgX194LCBmbG9hdCBfX24pIDsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZs b2F0IF9fbikgOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikg OyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJu IGludCBpbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gp IDsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIDsg ZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4 dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5 aW50ZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNm IChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f dHJ1bmNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgOyBleHRl cm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgOwoK CgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50 IF9fbHJpbnRmIChmbG9hdCBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxv YXQgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194KSA7CgoK CmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9f bHJvdW5kZiAoZmxvYXQgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9h dCBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSA7CgoK CmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0 IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7 IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4g aW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBf X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSA7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9f eCwgZmxvYXQgX195LCBmbG9hdCBfX3opIDsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz CiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo Y2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVy biBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJs ZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25n IGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSA7IGV4dGVy biBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNpbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25n IGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUgX194KSA7CiMgNzggIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJs ZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25n IGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rh bmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUg X194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25n IGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19h dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg X194KSA7CiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9u ZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50 KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19l eHBvbmVudCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBt b2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw bCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRv dWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJs IChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxv bmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg Y2JydGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9u ZyBkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3Vi bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUg X194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZs b29ybCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29ybCAobG9u ZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxv bmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwojIDIwNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxv bmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190YWdi KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwg KF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl eHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9u ZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgOwpleHRl cm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19q MWwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3Vi bGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSA7CmV4dGVy biBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kw bCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3Vi bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50 LCBsb25nIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJs ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9u ZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNs IChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIDsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X3RnYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChs b25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7 CiMgMjYwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3Vi bGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAo bG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxi bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4g bG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIDsKCgoKZXh0 ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JsIChs b25nIGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9uZyBk b3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBu ZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5 aW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxv bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChs b25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBs b25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50 ICpfX3F1bykgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJp bnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRv dWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSA7CgoK CmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg aW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5k bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgpleHRl cm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0 bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX196KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIDsKIyAxMDAgIi91 c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRl cm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0KICB7CiAg ICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JN QUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjk2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg MSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p bmNsdWRlL2Zsb2F0LmgiIDEgMwojIDI5NyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMzQ4 ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu ZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4g X19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkKewogIF9fZXh0ZW5zaW9uX18gdW5p b24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBf X3UuX19pIDwgMDsKfQpleHRlcm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkK ewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9IF9fdSA9 IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsxXSA8IDA7Cn0KZXh0ZXJuIF9faW5saW5l IGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9u IHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9IF9fdSA9IHsgX19sOiBfX3ggfTsKICBy ZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUp IDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgeyByZXR1cm4gX194 ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgX19zZ25mIChmbG9hdCkgOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19zZ25mIChm bG9hdCBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDog LTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUp IDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUgX194KSB7 IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9CiMg NDc1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192 YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBf X3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVy biBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBk b3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRp bGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyBy ZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRp bGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyBy ZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIg InNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195 KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ5MCAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9f eCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0 IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jl c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBz cXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkp OyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwg KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20g X192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0 dXJuIF9fcmVzdWx0OyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194 KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsgfQpleHRlcm4gX19pbmxpbmUgZmxvYXQg ZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9CmV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBf X2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fZmFi c2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CiMg NTE2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBhdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20g X192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0 YW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFu bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf X3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJs ZSBfX3NnbjFsIChsb25nIGRvdWJsZSBfX3gpIHsgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcg ZG91YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsgfSBfX24gPSB7IF9feGxkOiBfX3gg fTsgX19uLl9feGlbMl0gPSAoX19uLl9feGlbMl0gJiAweDgwMDApIHwgMHgzZmZmOyBfX24uX194 aVsxXSA9IDB4ODAwMDAwMDA7IF9fbi5fX3hpWzBdID0gMDsgcmV0dXJuIF9fbi5fX3hsZDsgfQoj IDU0MiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBk b3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChf X2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJu ZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJm bGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25l ZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0i IChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUg KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0 MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1 ZTsgfQojIDU1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lu bGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9 bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192 b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBf X2lubGluZSBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJu IF9faW5saW5lIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsg X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAo ImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAw eDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBf X2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192 YWx1ZTsgfQojIDU3MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBf X2lubGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9f dmFsdWU7Cn0KIyA1ODkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4g X19pbmxpbmUgZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzcz MDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgw TCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgi ZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2MDMgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFzaW5oIChkb3Vi bGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVy biAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkg KyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFzaW5oZiAo ZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJl dHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEu MCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IGFzaW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f ZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICog X195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCmV4dGVybiBf X2lubGluZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9f c3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwg KF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9f c3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195 ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgx LjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5o ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3Nn bjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1 cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAo X194KTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4g X19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4g X19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfQoKZXh0ZXJuIF9faW5saW5lIGRvdWJs ZSBsb2diIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQi IDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192 YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFs dWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm eHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3ZhbHVlOyB9CiMgNjMzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKZXh0ZXJuIF9faW5saW5lIGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KQp7CiAg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7 IHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBsIChs b25nIGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA2NTcgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK bHJpbnRmIChmbG9hdCBfX3gpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJz dCIpOyByZXR1cm4gX19scmludHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQg KGRvdWJsZSBfX3gpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy ZXR1cm4gX19scmludHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRsIChsb25n IGRvdWJsZSBfX3gpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy ZXR1cm4gX19scmludHJlczsKfQojIDY4MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o IiAzCmV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkKewog IGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBs bCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9f bGxyaW50cmVzOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludCAoZG91Ymxl IF9feCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9f ICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsg cmV0dXJuIF9fbGxyaW50cmVzOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50Cmxscmlu dGwgKGxvbmcgZG91YmxlIF9feCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNt X18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIg KF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CiMgMzQ5ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAyIDMKIyA0MDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCiMgMiAiVGVzdDEuYyIg MgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi91c3IvbG9jYWwvZ2NjLTMu Mi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0 eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAy IDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MtMy4yL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVk ZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIvdXNyL2xvY2FsL2dj Yy0zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkYXJnLmgi IDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDM5ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9j aGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9f aW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18g dHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90 ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50 IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5v X3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsK dHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBl ZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcg X19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQg X19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf dDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBl ZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3Ymxr X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRf dDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg X19mZF9tYXNrOwojIDEwOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHN0 cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9f ZmRfbWFzaykpXTsKCgoKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGlu dCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBf X3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5 cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNm aWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191 X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRl ZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3Vz Y2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi IDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsK IyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9 OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2Ny OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hl ZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5o ZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19z dGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsK fSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFk X2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29u ZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0 aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg MwojIDQxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTkgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA2OSAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAx NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAy OTQgIi91c3IvbG9jYWwvZ2NjLTMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIv aW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7CiMgMzIxICIvdXNy L2xvY2FsL2djYy0zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9f d2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21i c3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRf dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMg MjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg MwojIDQ1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMi9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg NDYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg MiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19H Q09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19H Q09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNP TVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lO VEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBf X0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsK c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0Owpz dHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAo c3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1 bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWdu ZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVk ZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25z dCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBj b25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lk ICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9f dHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2Zj dDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0 YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2dj b252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxl OwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBfX2NvbnN0 IGNoYXIgKl9fZnJvbV9uYW1lOwogIF9fY29uc3QgY2hhciAqX190b19uYW1lOwoKICBfX2djb252 X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRf ZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25l ZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsK CgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAq X19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3Vu dGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwog IF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190 cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3Rl cHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVj dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGFbMF07Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9p bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZf aW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAg IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2lj b252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMy X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9f anVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0 eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0 IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9w b3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jl c3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9l cnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjYzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0 cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBf SU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9l bmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpf SU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9l bmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zm c2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFi bGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwoj IDMwNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgog IHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51 c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBl ZGVmIHN0cnVjdCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4 dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBf SU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3RkZXJyXzsKIyAzNDYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYg X19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9p ZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQg X19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwojIDM5OCAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9f dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBp bnQpIDsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdp bnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChf SU9fRklMRSAqLCB3aW50X3QpIDsKIyA0MjggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVy biBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGlu dCBfX2MsIF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpf X2ZwKSA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIDsKCmV4dGVybiBp bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIDsKCgoKCgpleHRlcm4gdm9pZCBf SU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAo X0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIDsK IyA0NTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIDsKZXh0ZXJuIGlu dCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3Ry aWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJuIF9f c3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNp emVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19v ZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4 dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7 CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwojIDcwICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKIyAx MjIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9f bGltLmgiIDEgMwojIDEyMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklM RSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoK CmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBp bnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoK CgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE1NCAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSA7CiMgMTcxICIvdXNyL2luY2x1 ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2Rpciwg X19jb25zdCBjaGFyICpfX3BmeCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVz aCAoRklMRSAqX19zdHJlYW0pIDsKIyAxOTQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy biBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4dGVy biBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDIyNCAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29u c3QgY2hhciAqX19tb2RlcykgOwojIDI0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rl cywgc2l6ZV90IF9fbikgOwojIDI2NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGlu dCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHBy aW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBp bnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJp bnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJu IGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCBfX3ZzbnBy aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MywgMCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwojIDMyMSAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoK ZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IDsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsK CgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDAp KSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVy biBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKIyAz NzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p IDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsKIyAzODcgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJl YW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoKCgoKZXh0ZXJu IGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywg RklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmlj dCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgOwojIDQxMyAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwoj IDQzNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CiMg NDQ3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hh ciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg OwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3Ry aWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f biwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsKIyA0NzEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9f d2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRl cm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDg1ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgNTAxICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGlu dCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgOwoK CgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAq X19yZXN0cmljdCBfX3BvcykKICAgICA7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3Ry ZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIDsKIyA1NDMgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBm ZW9mIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFt KSA7CiMgNTU4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBwZXJyb3IgKF9f Y29uc3QgY2hhciAqX19zKSA7CiMgNTc0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g aW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKIyA1ODYgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoK CgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKCgoKCgpleHRlcm4gY2hhciAq Y3VzZXJpZCAoY2hhciAqX19zKSA7CiMgNjIxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxv Y2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxF ICpfX3N0cmVhbSkgOwojIDY0MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIg MwpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwg X19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewog IHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNf dW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49 IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIg KikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNo YXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAo c3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIg KikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1 dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQojIDgz ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y191 bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0p LT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv dyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9faW5saW5l IGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9J T193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rk b3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCkt Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KIyA2NDMgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMKCgoKIyAzICJUZXN0MS5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMK IyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4yL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1 Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBz dHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90 OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50 IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2 b2lkKSA7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAo X19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4 dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0 b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0cikgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkKICAgICA7CiMgMTg2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKIyAyNTAgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gZmxvYXQg X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQg X19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw KSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRl cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91 cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3Ry dG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBf X3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0 cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19p bmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2Up CnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19z dHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9f bnB0ciwgX19lbmRwdHIsIDApOwp9CiMgMzQxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5z aWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkK ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpl eHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJu IChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRl cm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1 cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFy ICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICop MCksIDEwKTsKfQojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICps NjRhIChsb25nIGludCBfX24pIDsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy ICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgojIDQyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5 cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5 cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVk ZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5 cGVkZWYgX191aWRfdCB1aWRfdDsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5 cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVm IF9fc3NpemVfdCBzc2l6ZV90OwojIDExNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5 cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlw ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK dHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19z dXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMi9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE4NCAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f UUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f SElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f U0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f RElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2lu dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5 cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykp KTsKIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrc2l6ZV90 IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVm IF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNu dF90OwojIDI1NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgojIDM5MiAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSA7CgoK ZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBj aGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFy ICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwojIDQ0NyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2ln bmVkIGludCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19z ZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJs ZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25n IGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7 CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg OwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5z aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p IDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsK CgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgYVszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwogICAg dW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOwogICAgaW50IGluaXQ7CiAgfTsKIyA1MjYgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXpl KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6 ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np emUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lk ICpfX3B0cikgOwojIDU1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICp2 YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpl eHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50 LCBzaXplX3Qgc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRl cm4gdm9pZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpl eHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CiMgNTc4ICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3Rh dHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0 ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0 ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFy ICpfX3N0cmluZykgOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy ICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgOwojIDY1NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwojIDY3MyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f cmVzb2x2ZWQpIDsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2 b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKIyA2OTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl eHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpf X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6 ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpf X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBf X2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBs ZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxv bmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK IyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2 dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4g Y2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsK CgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKIyA3NzMgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAog ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoK CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms IHNpemVfdCBfX24pCiAgICAgOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgoKZXh0ZXJuIHZv aWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSA7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50 cHQgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSA7CgoKCgpl eHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIDsKIyA4NTcgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwoKIyA0ICJUZXN0MS5jIiAyCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10p CnsKICBsb25nIGRvdWJsZSBuID0gKF9fZXh0ZW5zaW9uX18gKCh1bmlvbiB7IHVuc2lnbmVkIF9f bCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7IGZsb2F0IF9fZDsgfSkgeyBfX2w6 IDB4N2ZjMDAwMDBVTCB9KS5fX2QpOwogIGlmICgoc2l6ZW9mIChuKSA9PSBzaXplb2YgKGZsb2F0 KSA/IF9fc2lnbmJpdGYgKG4pIDogc2l6ZW9mIChuKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3Np Z25iaXQgKG4pIDogX19zaWduYml0bCAobikpKQogIHsKICAgIGZwcmludGYoc3Rkb3V0LCAibiBp cyBuZWdhdGl2ZVxuIik7CiAgfQogIGVsc2UKICB7CiAgICBmcHJpbnRmKHN0ZG91dCwgIm4gaXMg cG9zaXRpdmVcbiIpOwogIH0KICBleGl0KDApOwp9Cg==