From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31257 invoked by alias); 12 Feb 2002 02:36:03 -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 31223 invoked by uid 71); 12 Feb 2002 02:36:01 -0000 Resent-Date: 12 Feb 2002 02:36:01 -0000 Resent-Message-ID: <20020212023601.31222.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 Resent-Reply-To: gcc-gnats@gcc.gnu.org, adam@xwt.org Received:(qmail 27686 invoked by uid 61); 12 Feb 2002 02:31:17 -0000 Message-Id:<20020212023117.27679.qmail@sources.redhat.com> Date: Mon, 11 Feb 2002 18:36:00 -0000 From: adam@xwt.org Reply-To: adam@xwt.org To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/5663: g++ crashes while crosscompiling from linux to mingw X-SW-Source: 2002-02/txt/msg00267.txt.bz2 List-Id: >Number: 5663 >Category: c++ >Synopsis: g++ crashes while crosscompiling from linux to mingw >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Feb 11 18:36:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: adam@xwt.org >Release: latest CVS >Organization: >Environment: linux >Description: ../../../gcc/libjava/java/net/natPlainDatagramSocketImpl.cc:375: Internal compiler error in make_decl_rtl, at varasm.c:835 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="natPlainDatagramSocketImpl.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="natPlainDatagramSocketImpl.ii" IyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0 SW1wbC5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4u Ly4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIgoj IDkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ bXBsLmNjIgojIDEgImluY2x1ZGUvY29uZmlnLmgiIDEKIyAxMCAiLi4vLi4vLi4vZ2NjL2xpYmph dmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIKIyAyMCAiLi4vLi4v Li4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiCiMg MSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9wb3NpeC5oIiAxCiMgMTYgIi4uLy4uLy4u L2djYy9saWJqYXZhL2luY2x1ZGUvcG9zaXguaCIKIyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBj LW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBj LW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1p bmd3MzIvaW5jbHVkZS9fbWluZ3cuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMt bWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCgojIDEgIi9ob21lL21lZ2Fjei9nY2MtYmlu L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi9ob21lL21lZ2Fjei9nY2MtYmluL2dj Yy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNyAi L3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKCgoj IDEgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N5cy90eXBlcy5oIiAx IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKIyAxICIvaG9tZS9tZWdhY3ovZ2NjLWJpbi9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMTQ3ICIvaG9tZS9tZWdhY3ovZ2NjLWJpbi9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl ZGVmIGludCBwdHJkaWZmX3Q7CiMgMzkgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIGxvbmcgdGltZV90OwojIDUzICIv dXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl ZGVmIGxvbmcgX29mZl90OwoKCnR5cGVkZWYgX29mZl90IG9mZl90OwoKCgoKCgoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX2Rldl90OwoKCgoKCnR5cGVkZWYgX2Rldl90IGRldl90OwoKCgoKCgp0eXBl ZGVmIHNob3J0IF9pbm9fdDsKCgp0eXBlZGVmIF9pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBp bnQgX3BpZF90OwoKCnR5cGVkZWYgX3BpZF90IHBpZF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IF9tb2RlX3Q7CgoKdHlwZWRlZiBfbW9kZV90IG1vZGVfdDsKCgoKCgoKdHlwZWRlZiBp bnQgX3NpZ3NldF90OwoKCnR5cGVkZWYgX3NpZ3NldF90IHNpZ3NldF90OwojIDQzICIvdXNyL2xv Y2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDIgMwojIDY4ICIvdXNyL2xv Y2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBsb25nIGNs b2NrX3Q7CiMgNzcgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUu aCIgMwpzdHJ1Y3QgdG0KewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50IHRtX21pbjsK ICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAgICBpbnQgdG1f bW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5OwogICAgICAgIGlu dCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKCn07CgoKZXh0ZXJuICJDIiB7CgoKY2xv Y2tfdCBjbG9jayAodm9pZCk7CnRpbWVfdCB0aW1lICh0aW1lX3QqKTsKZG91YmxlIGRpZmZ0aW1l ICh0aW1lX3QsIHRpbWVfdCk7CnRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSopOwojIDExMCAiL3Vz ci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdGltZS5oIiAzCmNoYXIqIGFzY3Rp bWUgKGNvbnN0IHN0cnVjdCB0bSopOwpjaGFyKiBjdGltZSAoY29uc3QgdGltZV90Kik7CnN0cnVj dCB0bSogZ210aW1lIChjb25zdCB0aW1lX3QqKTsKc3RydWN0IHRtKiBsb2NhbHRpbWUgKGNvbnN0 IHRpbWVfdCopOwoKCnNpemVfdCBzdHJmdGltZSAoY2hhciosIHNpemVfdCwgY29uc3QgY2hhcios IGNvbnN0IHN0cnVjdCB0bSopOwoKc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90Kiwgc2l6ZV90LCBj b25zdCB3Y2hhcl90KiwgY29uc3Qgc3RydWN0IHRtKik7CgoKZXh0ZXJuIHZvaWQgX3R6c2V0ICh2 b2lkKTsKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCk7CgoKc2l6ZV90IHN0cmZ0aW1lKGNoYXIq LCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdG0qKTsKY2hhciogX3N0cmRhdGUo Y2hhciopOwpjaGFyKiBfc3RydGltZShjaGFyKik7CiMgMTQyICIvdXNyL2xvY2FsL2djYy9pNjg2 LXBjLW1pbmd3MzIvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCogX19wX19kYXlsaWdodCAo dm9pZCk7CmV4dGVybiBsb25nKiBfX3BfX3RpbWV6b25lICh2b2lkKTsKZXh0ZXJuIGNoYXIqKiBf X3BfX3R6bmFtZSAodm9pZCk7CgpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gaW50 IF9kYXlsaWdodDsKX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGxvbmcgX3RpbWV6 b25lOwpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY2hhciAqX3R6bmFtZVsyXTsK IyAxODAgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMwpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gaW50IGRheWxpZ2h0OwpfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gbG9uZyB0aW1lem9uZTsKX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKCgp3Y2hhcl90ICogX3dhc2N0aW1l KGNvbnN0IHN0cnVjdCB0bSopOwp3Y2hhcl90ICogX3djdGltZShjb25zdCB0aW1lX3QqKTsKd2No YXJfdCogX3dzdHJkYXRlKHdjaGFyX3QqKTsKd2NoYXJfdCogX3dzdHJ0aW1lKHdjaGFyX3QqKTsK IyAyMTMgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3RpbWUuaCIgMwp9 CiMgMTcgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvcG9zaXguaCIgMgoKCgojIDEgIi91 c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDIx ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL3Bvc2l4LmgiIDIKCgoKCgoKCiMgMSAiL3Vz ci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwoKCgoKCgoK IyAxICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9pby5oIiAxIDMKIyAz NiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDQyICIv dXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL2hv bWUvbWVnYWN6L2djYy1iaW4vZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyMSAiL2hvbWUv bWVnYWN6L2djYy1iaW4vZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgd2ludF90OwojIDQzICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9z dGRpby5oIiAyIDMKIyAxMjEgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRl L3N0ZGlvLmgiIDMKdHlwZWRlZiBjaGFyKiB2YV9saXN0OwojIDEzMyAiL3Vzci9sb2NhbC9nY2Mv aTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfaW9idWYK ewogICAgICAgIGNoYXIqIF9wdHI7CiAgICAgICAgaW50IF9jbnQ7CiAgICAgICAgY2hhciogX2Jh c2U7CiAgICAgICAgaW50IF9mbGFnOwogICAgICAgIGludCBfZmlsZTsKICAgICAgICBpbnQgX2No YXJidWY7CiAgICAgICAgaW50IF9idWZzaXo7CiAgICAgICAgY2hhciogX3RtcGZuYW1lOwp9IEZJ TEU7CiMgMTU4ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdGRpby5o IiAzCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBGSUxFIF9pb2JbXTsKIyAxNjcg Ii91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu ICJDIiB7CgoKCgoKRklMRSogZm9wZW4gKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CkZJTEUq IGZyZW9wZW4gKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSopOwppbnQgZmZsdXNoIChG SUxFKik7CmludCBmY2xvc2UgKEZJTEUqKTsKCmludCByZW1vdmUgKGNvbnN0IGNoYXIqKTsKaW50 IHJlbmFtZSAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKRklMRSogdG1wZmlsZSAodm9pZCk7 CmNoYXIqIHRtcG5hbSAoY2hhciopOwpjaGFyKiBfdGVtcG5hbSAoY29uc3QgY2hhciosIGNvbnN0 IGNoYXIqKTsKCgpjaGFyKiB0ZW1wbmFtIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwoKCmlu dCBzZXR2YnVmIChGSUxFKiwgY2hhciosIGludCwgc2l6ZV90KTsKCnZvaWQgc2V0YnVmIChGSUxF KiwgY2hhciopOwoKCgoKCmludCBmcHJpbnRmIChGSUxFKiwgY29uc3QgY2hhciosIC4uLik7Cmlu dCBwcmludGYgKGNvbnN0IGNoYXIqLCAuLi4pOwppbnQgc3ByaW50ZiAoY2hhciosIGNvbnN0IGNo YXIqLCAuLi4pOwppbnQgX3NucHJpbnRmIChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgLi4u KTsKaW50IHZmcHJpbnRmIChGSUxFKiwgY29uc3QgY2hhciosIHZhX2xpc3QpOwppbnQgdnByaW50 ZiAoY29uc3QgY2hhciosIHZhX2xpc3QpOwppbnQgdnNwcmludGYgKGNoYXIqLCBjb25zdCBjaGFy KiwgdmFfbGlzdCk7CmludCBfdnNucHJpbnRmIChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwg dmFfbGlzdCk7CgoKCgoKCmludCBmc2NhbmYgKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4uKTsKaW50 IHNjYW5mIChjb25zdCBjaGFyKiwgLi4uKTsKaW50IHNzY2FuZiAoY29uc3QgY2hhciosIGNvbnN0 IGNoYXIqLCAuLi4pOwoKCgoKaW50IGZnZXRjIChGSUxFKik7CmNoYXIqIGZnZXRzIChjaGFyKiwg aW50LCBGSUxFKik7CmludCBmcHV0YyAoaW50LCBGSUxFKik7CmludCBmcHV0cyAoY29uc3QgY2hh ciosIEZJTEUqKTsKaW50IGdldGMgKEZJTEUqKTsKaW50IGdldGNoYXIgKHZvaWQpOwpjaGFyKiBn ZXRzIChjaGFyKik7CmludCBwdXRjIChpbnQsIEZJTEUqKTsKaW50IHB1dGNoYXIgKGludCk7Cmlu dCBwdXRzIChjb25zdCBjaGFyKik7CmludCB1bmdldGMgKGludCwgRklMRSopOwoKCgoKCnNpemVf dCBmcmVhZCAodm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7CnNpemVfdCBmd3JpdGUgKGNv bnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOwoKCgoKCmludCBmc2VlayAoRklMRSos IGxvbmcsIGludCk7CmxvbmcgZnRlbGwgKEZJTEUqKTsKdm9pZCByZXdpbmQgKEZJTEUqKTsKIyAy NTQgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlw ZWRlZiBsb25nIGxvbmcgZnBvc190OwoKCgoKaW50IGZnZXRwb3MgKEZJTEUqLCBmcG9zX3QqKTsK aW50IGZzZXRwb3MgKEZJTEUqLCBjb25zdCBmcG9zX3QqKTsKCgoKCgp2b2lkIGNsZWFyZXJyIChG SUxFKik7CmludCBmZW9mIChGSUxFKik7CmludCBmZXJyb3IgKEZJTEUqKTsKdm9pZCBwZXJyb3Ig KGNvbnN0IGNoYXIqKTsKCgoKCgoKRklMRSogX3BvcGVuIChjb25zdCBjaGFyKiwgY29uc3QgY2hh ciopOwppbnQgX3BjbG9zZSAoRklMRSopOwoKCkZJTEUqIHBvcGVuIChjb25zdCBjaGFyKiwgY29u c3QgY2hhciopOwppbnQgcGNsb3NlIChGSUxFKik7CgoKCgoKaW50IF9mbHVzaGFsbCh2b2lkKTsK aW50IF9mZ2V0Y2hhciAodm9pZCk7CmludCBfZnB1dGNoYXIgKGludCk7CkZJTEUqIF9mZG9wZW4g KGludCwgY29uc3QgY2hhciopOwppbnQgX2ZpbGVubyAoRklMRSopOwoKCmludCBmZ2V0Y2hhciAo dm9pZCk7CmludCBmcHV0Y2hhciAoaW50KTsKRklMRSogZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIq KTsKaW50IGZpbGVubyAoRklMRSopOwojIDMwNiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5n dzMyL2luY2x1ZGUvc3RkaW8uaCIgMwppbnQgZndwcmludGYgKEZJTEUqLCBjb25zdCB3Y2hhcl90 KiwgLi4uKTsKaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QqLCAuLi4pOwppbnQgc3dwcmludGYg KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgLi4uKTsKaW50IHZmd3ByaW50ZiAoRklMRSosIGNv bnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90KiwgdmFf bGlzdCk7CmludCB2c3dwcmludGYgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7 CmludCBmd3NjYW5mIChGSUxFKiwgY29uc3Qgd2NoYXJfdCosIC4uLik7CmludCB3c2NhbmYgKGNv bnN0IHdjaGFyX3QqLCAuLi4pOwppbnQgc3dzY2FuZiAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdj aGFyX3QqLCAuLi4pOwp3aW50X3QgZmdldHdjIChGSUxFKik7CndpbnRfdCBmcHV0d2MgKHdjaGFy X3QsIEZJTEUqKTsKd2ludF90IHVuZ2V0d2MgKHdjaGFyX3QsIEZJTEUqKTsKCndjaGFyX3QqIGZn ZXR3cyAod2NoYXJfdCosIGludCwgRklMRSopOwppbnQgZnB1dHdzIChjb25zdCB3Y2hhcl90Kiwg RklMRSopOwp3aW50X3QgZ2V0d2MgKEZJTEUqKTsKd2ludF90IGdldHdjaGFyICh2b2lkKTsKd2No YXJfdCogX2dldHdzICh3Y2hhcl90Kik7CndpbnRfdCBwdXR3YyAod2ludF90LCBGSUxFKik7Cmlu dCBfcHV0d3MgKGNvbnN0IHdjaGFyX3QqKTsKd2ludF90IHB1dHdjaGFyICh3aW50X3QpOwpGSUxF KiBfd2ZvcGVuIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwpGSUxFKiBfd2ZyZW9w ZW4gKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgRklMRSopOwpGSUxFKiBfd2Zzb3Bl bihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIGludCk7CndjaGFyX3QqIF93dG1wbmFt ICh3Y2hhcl90Kik7CndjaGFyX3QqIF93dGVtcG5hbSAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdj aGFyX3QqKTsKaW50IF93cmVuYW1lKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7Cmlu dCBfd3JlbW92ZSAoY29uc3Qgd2NoYXJfdCopOwp2b2lkIF93cGVycm9yKGNvbnN0IHdjaGFyX3Qq KTsKRklMRSogX3dwb3Blbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwojIDM2MCAi L3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RkaW8uaCIgMwp3aW50X3Qg X2ZnZXR3Y2hhcih2b2lkKTsKd2ludF90IF9mcHV0d2NoYXIod2ludF90KTsKaW50IF9nZXR3IChG SUxFKik7CmludCBfcHV0dyAoaW50LCBGSUxFKik7CgoKd2ludF90IGZnZXR3Y2hhcih2b2lkKTsK d2ludF90IGZwdXR3Y2hhcih3aW50X3QpOwppbnQgZ2V0dyAoRklMRSopOwppbnQgcHV0dyAoaW50 LCBGSUxFKik7CgoKCgoKfQojIDM3ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5j bHVkZS9pby5oIiAyIDMKIyA2MCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1 ZGUvaW8uaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX2ZzaXplX3Q7CgoKCgoKCgpzdHJ1Y3Qg X2ZpbmRkYXRhX3QKewogICAgICAgIHVuc2lnbmVkIGF0dHJpYjsKICAgICAgICB0aW1lX3QgdGlt ZV9jcmVhdGU7CiAgICAgICAgdGltZV90IHRpbWVfYWNjZXNzOwogICAgICAgIHRpbWVfdCB0aW1l X3dyaXRlOwogICAgICAgIF9mc2l6ZV90IHNpemU7CiAgICAgICAgY2hhciBuYW1lWygyNjApXTsK fTsKCnN0cnVjdCBfZmluZGRhdGFpNjRfdCB7CiAgICB1bnNpZ25lZCBhdHRyaWI7CiAgICB0aW1l X3QgdGltZV9jcmVhdGU7CiAgICB0aW1lX3QgdGltZV9hY2Nlc3M7CiAgICB0aW1lX3QgdGltZV93 cml0ZTsKICAgIGxvbmcgbG9uZyBzaXplOwogICAgY2hhciBuYW1lWygyNjApXTsKfTsKCgoKc3Ry dWN0IF93ZmluZGRhdGFfdCB7CiAgICAgICAgdW5zaWduZWQgYXR0cmliOwogICAgICAgIHRpbWVf dCB0aW1lX2NyZWF0ZTsKICAgICAgICB0aW1lX3QgdGltZV9hY2Nlc3M7CiAgICAgICAgdGltZV90 IHRpbWVfd3JpdGU7CiAgICAgICAgX2ZzaXplX3Qgc2l6ZTsKICAgICAgICB3Y2hhcl90IG5hbWVb KDI2MCldOwp9OwpzdHJ1Y3QgX3dmaW5kZGF0YWk2NF90IHsKICAgIHVuc2lnbmVkIGF0dHJpYjsK ICAgIHRpbWVfdCB0aW1lX2NyZWF0ZTsKICAgIHRpbWVfdCB0aW1lX2FjY2VzczsKICAgIHRpbWVf dCB0aW1lX3dyaXRlOwogICAgbG9uZyBsb25nIHNpemU7CiAgICB3Y2hhcl90IG5hbWVbKDI2MCld Owp9OwoKCgoKCmV4dGVybiAiQyIgewojIDExOSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5n dzMyL2luY2x1ZGUvaW8uaCIgMwppbnQgX2ZpbmRmaXJzdCAoY29uc3QgY2hhciosIHN0cnVjdCBf ZmluZGRhdGFfdCopOwppbnQgX2ZpbmRuZXh0IChpbnQsIHN0cnVjdCBfZmluZGRhdGFfdCopOwpp bnQgX2ZpbmRjbG9zZSAoaW50KTsKCmludCBfY2hkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogX2dl dGN3ZCAoY2hhciosIGludCk7CmludCBfbWtkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogX21rdGVt cCAoY2hhciopOwppbnQgX3JtZGlyIChjb25zdCBjaGFyKik7CgoKbG9uZyBsb25nIF9maWxlbGVu Z3RoaTY0KGludCk7CmxvbmcgX2ZpbmRmaXJzdGk2NChjb25zdCBjaGFyKiwgc3RydWN0IF9maW5k ZGF0YWk2NF90Kik7CmludCBfZmluZG5leHRpNjQobG9uZywgc3RydWN0IF9maW5kZGF0YWk2NF90 Kik7CmxvbmcgbG9uZyBfbHNlZWtpNjQoaW50LCBsb25nIGxvbmcsIGludCk7CmxvbmcgbG9uZyBf dGVsbGk2NChpbnQpOwoKCgoKCgppbnQgY2hkaXIgKGNvbnN0IGNoYXIqKTsKY2hhciogZ2V0Y3dk IChjaGFyKiwgaW50KTsKaW50IG1rZGlyIChjb25zdCBjaGFyKik7CmNoYXIqIG1rdGVtcCAoY2hh ciopOwppbnQgcm1kaXIgKGNvbnN0IGNoYXIqKTsKCgoKCgp9CiMgMTczICIvdXNyL2xvY2FsL2dj Yy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9pby5oIiAzCmV4dGVybiAiQyIgewoKCmludCBfYWNj ZXNzIChjb25zdCBjaGFyKiwgaW50KTsKaW50IF9jaHNpemUgKGludCwgbG9uZyk7CmludCBfY2xv c2UgKGludCk7CgoKCmludCBfY3JlYXQgKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CgppbnQgX2R1 cCAoaW50KTsKaW50IF9kdXAyIChpbnQsIGludCk7CmxvbmcgX2ZpbGVsZW5ndGggKGludCk7Cmlu dCBfZmlsZW5vIChGSUxFKik7CmxvbmcgX2dldF9vc2ZoYW5kbGUgKGludCk7CmludCBfaXNhdHR5 IChpbnQpOwoKCgoKCgoKaW50IF9lb2YgKGludCk7CgoKCmludCBfbG9ja2luZyAoaW50LCBpbnQs IGxvbmcpOwoKbG9uZyBfbHNlZWsgKGludCwgbG9uZywgaW50KTsKCgppbnQgX29wZW4gKGNvbnN0 IGNoYXIqLCBpbnQsIC4uLik7CgppbnQgX29wZW5fb3NmaGFuZGxlIChsb25nLCBpbnQpOwppbnQg X3BpcGUgKGludCAqLCB1bnNpZ25lZCBpbnQsIGludCk7CmludCBfcmVhZCAoaW50LCB2b2lkKiwg dW5zaWduZWQgaW50KTsKCgoKaW50IF9zb3BlbiAoY29uc3QgY2hhciosIGludCwgaW50LCAuLi4p OwoKbG9uZyBfdGVsbCAoaW50KTsKCmludCBfdW1hc2sgKGludCk7CmludCBfdW5saW5rIChjb25z dCBjaGFyKik7CmludCBfd3JpdGUgKGludCwgY29uc3Qgdm9pZCosIHVuc2lnbmVkIGludCk7CgoK CgoKaW50IF93YWNjZXNzKGNvbnN0IHdjaGFyX3QqLCBpbnQpOwppbnQgX3djaG1vZChjb25zdCB3 Y2hhcl90KiwgaW50KTsKaW50IF93Y3JlYXQoY29uc3Qgd2NoYXJfdCosIGludCk7CmxvbmcgX3dm aW5kZmlyc3Qod2NoYXJfdCosIHN0cnVjdCBfd2ZpbmRkYXRhX3QqKTsKaW50IF93ZmluZG5leHQo bG9uZywgc3RydWN0IF93ZmluZGRhdGFfdCAqKTsKaW50IF93dW5saW5rKGNvbnN0IHdjaGFyX3Qq KTsKaW50IF93b3Blbihjb25zdCB3Y2hhcl90KiwgaW50LCAuLi4pOwppbnQgX3dzb3Blbihjb25z dCB3Y2hhcl90KiwgaW50LCBpbnQsIC4uLik7CndjaGFyX3QgKiBfd21rdGVtcCh3Y2hhcl90Kik7 CmxvbmcgX3dmaW5kZmlyc3RpNjQoY29uc3Qgd2NoYXJfdCosIHN0cnVjdCBfd2ZpbmRkYXRhaTY0 X3QqKTsKaW50IF93ZmluZG5leHRpNjQobG9uZywgc3RydWN0IF93ZmluZGRhdGFpNjRfdCopOwoj IDI0OCAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwppbnQg YWNjZXNzIChjb25zdCBjaGFyKiwgaW50KTsKaW50IGNoc2l6ZSAoaW50LCBsb25nICk7CmludCBj bG9zZSAoaW50KTsKaW50IGNyZWF0IChjb25zdCBjaGFyKiwgaW50KTsKaW50IGR1cCAoaW50KTsK aW50IGR1cDIgKGludCwgaW50KTsKaW50IGVvZiAoaW50KTsKbG9uZyBmaWxlbGVuZ3RoIChpbnQp OwppbnQgZmlsZW5vIChGSUxFKik7CmludCBpc2F0dHkgKGludCk7CmxvbmcgbHNlZWsgKGludCwg bG9uZywgaW50KTsKaW50IG9wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIC4uLik7CmludCByZWFkIChp bnQsIHZvaWQqLCB1bnNpZ25lZCBpbnQpOwppbnQgc29wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIGlu dCwgLi4uKTsKbG9uZyB0ZWxsIChpbnQpOwppbnQgdW1hc2sgKGludCk7CmludCB1bmxpbmsgKGNv bnN0IGNoYXIqKTsKaW50IHdyaXRlIChpbnQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCBpbnQpOwoj IDI4NiAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvaW8uaCIgMwp9CiMg OSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoj IDI5ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL3Bvc2l4LmgiIDIKCgpleHRlcm4gaW50 IF9Kdl9zZWxlY3QgKGludCBuLCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3Qg dGltZXZhbCAqKTsKZXh0ZXJuIHZvaWQgX0p2X3BsYXRmb3JtX2dldHRpbWVvZmRheSAoc3RydWN0 IHRpbWV2YWwgKik7CmV4dGVybiB2b2lkIF9Kdl9wbGF0Zm9ybV9pbml0aWFsaXplICh2b2lkKTsK IyAyMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tl dEltcGwuY2MiIDIKIyAzMCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5E YXRhZ3JhbVNvY2tldEltcGwuY2MiCiMgMSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMy L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgOTYgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3cz Mi9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CiMgMTA3ICIvdXNyL2xvY2FsL2djYy9p Njg2LXBjLW1pbmd3MzIvaW5jbHVkZS9lcnJuby5oIiAzCmludCogX2Vycm5vKCk7CgoKCgp9CiMg MzEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ bXBsLmNjIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3Ry aW5nLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9z dHJpbmcuaCIgMwojIDEgIi9ob21lL21lZ2Fjei9nY2MtYmluL2djYy9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MvaTY4Ni1wYy1taW5ndzMyL2luY2x1ZGUvc3RyaW5n LmgiIDIgMwoKCgoKCmV4dGVybiAiQyIgewoKCgoKCnZvaWQqIG1lbWNociAoY29uc3Qgdm9pZCos IGludCwgc2l6ZV90KTsKaW50IG1lbWNtcCAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXpl X3QpOwp2b2lkKiBtZW1jcHkgKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKdm9pZCogbWVt bW92ZSAodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwp2b2lkKiBtZW1zZXQgKHZvaWQqLCBp bnQsIHNpemVfdCk7CmNoYXIqIHN0cmNhdCAoY2hhciosIGNvbnN0IGNoYXIqKTsKY2hhciogc3Ry Y2hyIChjb25zdCBjaGFyKiwgaW50KTsKaW50IHN0cmNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNo YXIqKTsKaW50IHN0cmNvbGwgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cmNw eSAoY2hhciosIGNvbnN0IGNoYXIqKTsKc2l6ZV90IHN0cmNzcG4gKGNvbnN0IGNoYXIqLCBjb25z dCBjaGFyKik7CmNoYXIqIHN0cmVycm9yIChpbnQpOwpjaGFyKiBfc3RyZXJyb3IgKGNvbnN0IGNo YXIgKik7CnNpemVfdCBzdHJsZW4gKGNvbnN0IGNoYXIqKTsKY2hhciogc3RybmNhdCAoY2hhcios IGNvbnN0IGNoYXIqLCBzaXplX3QpOwppbnQgc3RybmNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNo YXIqLCBzaXplX3QpOwpjaGFyKiBzdHJuY3B5IChjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7 CmNoYXIqIHN0cnBicmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cnJjaHIg KGNvbnN0IGNoYXIqLCBpbnQpOwpzaXplX3Qgc3Ryc3BuIChjb25zdCBjaGFyKiwgY29uc3QgY2hh ciopOwpjaGFyKiBzdHJzdHIgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmNoYXIqIHN0cnRv ayAoY2hhciosIGNvbnN0IGNoYXIqKTsKc2l6ZV90IHN0cnhmcm0gKGNoYXIqLCBjb25zdCBjaGFy Kiwgc2l6ZV90KTsKCgoKCgp2b2lkKiBfbWVtY2NweSAodm9pZCosIGNvbnN0IHZvaWQqLCBpbnQs IHNpemVfdCk7CmludCBfbWVtaWNtcCAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qp OwpjaGFyKiBfc3RyZHVwIChjb25zdCBjaGFyKik7CmludCBfc3RyY21waSAoY29uc3QgY2hhcios IGNvbnN0IGNoYXIqKTsKaW50IF9zdHJpY21wIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwpp bnQgX3N0cmljb2xsIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwpjaGFyKiBfc3RybHdyIChj aGFyKik7CmludCBfc3RybmljbXAgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsK Y2hhciogX3N0cm5zZXQgKGNoYXIqLCBpbnQsIHNpemVfdCk7CmNoYXIqIF9zdHJyZXYgKGNoYXIq KTsKY2hhciogX3N0cnNldCAoY2hhciosIGludCk7CmNoYXIqIF9zdHJ1cHIgKGNoYXIqKTsKdm9p ZCBfc3dhYiAoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QpOwoKCgoKdW5zaWduZWQgY2hhciog X21ic2NociAodW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqKTsKdW5zaWduZWQgY2hhciog X21ic25jYXQgKHVuc2lnbmVkIGNoYXIqLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgc2l6ZV90KTsK dW5zaWduZWQgY2hhciogX21ic3RvayAodW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqKTsK CgppbnQgX3N0cm5jb2xsKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKaW50IF9z dHJuaWNvbGwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwoKCgoKCgoKd2NoYXJf dCogd2NzY2F0ICh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3Y3NjaHIgKGNv bnN0IHdjaGFyX3QqLCB3Y2hhcl90KTsKaW50IHdjc2NtcCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0 IHdjaGFyX3QqKTsKaW50IHdjc2NvbGwgKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7 CndjaGFyX3QqIHdjc2NweSAod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKc2l6ZV90IHdjc2Nz cG4gKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7CgpzaXplX3Qgd2NzbGVuIChjb25z dCB3Y2hhcl90Kik7CndjaGFyX3QqIHdjc25jYXQgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwg c2l6ZV90KTsKaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXpl X3QpOwp3Y2hhcl90KiB3Y3NuY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsK d2NoYXJfdCogd2NzcGJyayhjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90 KiB3Y3NyY2hyKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KTsKc2l6ZV90IHdjc3Nwbihjb25zdCB3 Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3Y3NzdHIoY29uc3Qgd2NoYXJfdCos IGNvbnN0IHdjaGFyX3QqKTsKd2NoYXJfdCogd2NzdG9rKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90 Kik7CnNpemVfdCB3Y3N4ZnJtKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKIyAx MzcgIi91c3IvbG9jYWwvZ2NjL2k2ODYtcGMtbWluZ3czMi9pbmNsdWRlL3N0cmluZy5oIiAzCndj aGFyX3QqIF93Y3NkdXAgKHdjaGFyX3QqKTsKaW50IF93Y3NpY21wIChjb25zdCB3Y2hhcl90Kiwg Y29uc3Qgd2NoYXJfdCopOwppbnQgX3djc2ljb2xsIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2No YXJfdCopOwp3Y2hhcl90KiBfd2NzbHdyICh3Y2hhcl90Kik7CmludCBfd2NzbmljbXAgKGNvbnN0 IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKd2NoYXJfdCogX3djc25zZXQgKHdj aGFyX3QqLCB3Y2hhcl90LCBzaXplX3QpOwp3Y2hhcl90KiBfd2NzcmV2ICh3Y2hhcl90Kik7Cndj aGFyX3QqIF93Y3NzZXQgKHdjaGFyX3QqLCB3Y2hhcl90KTsKd2NoYXJfdCogX3djc3VwciAod2No YXJfdCopOwoKCmludCBfd2NzbmNvbGwoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBz aXplX3QpOwppbnQgX3djc25pY29sbChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNp emVfdCk7CiMgMTY1ICIvdXNyL2xvY2FsL2djYy9pNjg2LXBjLW1pbmd3MzIvaW5jbHVkZS9zdHJp bmcuaCIgMwp2b2lkKiBtZW1jY3B5ICh2b2lkKiwgY29uc3Qgdm9pZCosIGludCwgc2l6ZV90KTsK aW50IG1lbWljbXAgKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKY2hhciogc3Ry ZHVwIChjb25zdCBjaGFyKik7CmludCBzdHJjbXBpIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciop OwppbnQgc3RyaWNtcCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKaW50IHN0cmNhc2VjbXAg KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CmludCBzdHJpY29sbCAoY29uc3QgY2hhciosIGNv bnN0IGNoYXIqKTsKY2hhciogc3RybHdyIChjaGFyKik7CmludCBzdHJuaWNtcCAoY29uc3QgY2hh ciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwppbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIqLCBj b25zdCBjaGFyKiwgc2l6ZV90KTsKY2hhciogc3RybnNldCAoY2hhciosIGludCwgc2l6ZV90KTsK Y2hhciogc3RycmV2IChjaGFyKik7CmNoYXIqIHN0cnNldCAoY2hhciosIGludCk7CmNoYXIqIHN0 cnVwciAoY2hhciopOwoKdm9pZCBzd2FiIChjb25zdCBjaGFyKiwgY2hhciosIHNpemVfdCk7CgoK CmludCB3Y3NjbXBpIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwp3Y2hhcl90KiB3 Y3NkdXAgKHdjaGFyX3QqKTsKaW50IHdjc2ljbXAgKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hh cl90Kik7CmludCB3Y3NpY29sbCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKd2No YXJfdCogd2NzbHdyICh3Y2hhcl90Kik7CmludCB3Y3NuaWNtcCAoY29uc3Qgd2NoYXJfdCosIGNv bnN0IHdjaGFyX3QqLCBzaXplX3QpOwp3Y2hhcl90KiB3Y3Nuc2V0ICh3Y2hhcl90Kiwgd2NoYXJf dCwgc2l6ZV90KTsKd2NoYXJfdCogd2NzcmV2ICh3Y2hhcl90Kik7CndjaGFyX3QqIHdjc3NldCAo d2NoYXJfdCosIHdjaGFyX3QpOwp3Y2hhcl90KiB3Y3N1cHIgKHdjaGFyX3QqKTsKCgoKCgoKfQoj IDMyICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0 SW1wbC5jYyIgMgojIDQyICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRh dGFncmFtU29ja2V0SW1wbC5jYyIKc3RhdGljIGlubGluZSBpbnQKX0p2X2JpbmQgKGludCBmZCwg c3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcmxlbikKewogIHJldHVybiA6OmJpbmQgKGZk LCBhZGRyLCBhZGRybGVuKTsKfQoKCgoKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9j bmkuaCIgMQojIDE2ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovY25pLmgiCiMgMSAiLi4vLi4v Li4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL09iamVjdC5oIiAxCiMgMTQgIi4uLy4uLy4uL2djYy9s aWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKI3ByYWdtYSBpbnRlcmZhY2UKCiMgMSAiLi4vLi4v Li4vZ2NjL2xpYmphdmEvZ2NqL2phdmFwcmltcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJq YXZhL2djai9qYXZhcHJpbXMuaCIKI3ByYWdtYSBHQ0MgamF2YV9leGNlcHRpb25zCgojIDEgImdj ai9saWJnY2otY29uZmlnLmgiIDEKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2phdmFw cmltcy5oIiAyCiMgMjkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIKZXh0 ZXJuICJKYXZhIgp7CiAgdHlwZWRlZiBfX2phdmFfYnl0ZSBqYnl0ZTsKICB0eXBlZGVmIF9famF2 YV9zaG9ydCBqc2hvcnQ7CiAgdHlwZWRlZiBfX2phdmFfaW50IGppbnQ7CiAgdHlwZWRlZiBfX2ph dmFfbG9uZyBqbG9uZzsKICB0eXBlZGVmIF9famF2YV9mbG9hdCBqZmxvYXQ7CiAgdHlwZWRlZiBf X2phdmFfZG91YmxlIGpkb3VibGU7CiAgdHlwZWRlZiBfX2phdmFfY2hhciBqY2hhcjsKICB0eXBl ZGVmIF9famF2YV9ib29sZWFuIGpib29sZWFuOwogIHR5cGVkZWYgamludCBqc2l6ZTsKCgoKICBu YW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBpbwogICAgewogICAgICBjbGFzcyBCdWZm ZXJlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBCdWZmZXJlZE91dHB1dFN0cmVhbTsKICAgICAg Y2xhc3MgQnVmZmVyZWRSZWFkZXI7CiAgICAgIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyOwogICAgICBj bGFzcyBCeXRlQXJyYXlJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnl0ZUFycmF5T3V0cHV0U3Ry ZWFtOwogICAgICBjbGFzcyBDaGFyQXJyYXlSZWFkZXI7CiAgICAgIGNsYXNzIENoYXJBcnJheVdy aXRlcjsKICAgICAgY2xhc3MgQ2hhckNvbnZlcnNpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIERh dGFJbnB1dDsKICAgICAgY2xhc3MgRGF0YUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBEYXRhT3V0 cHV0OwogICAgICBjbGFzcyBEYXRhT3V0cHV0U3RyZWFtOwogICAgICBjbGFzcyBFT0ZFeGNlcHRp b247CiAgICAgIGNsYXNzIEV4dGVybmFsaXphYmxlOwogICAgICBjbGFzcyBGaWxlOwogICAgICBj bGFzcyBGaWxlRGVzY3JpcHRvcjsKICAgICAgY2xhc3MgRmlsZUZpbHRlcjsKICAgICAgY2xhc3Mg RmlsZUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBGaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAg IGNsYXNzIEZpbGVPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbGVQZXJtaXNzaW9uOwogICAg ICBjbGFzcyBGaWxlUmVhZGVyOwogICAgICBjbGFzcyBGaWxlV3JpdGVyOwogICAgICBjbGFzcyBG aWxlbmFtZUZpbHRlcjsKICAgICAgY2xhc3MgRmlsdGVySW5wdXRTdHJlYW07CiAgICAgIGNsYXNz IEZpbHRlck91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgRmlsdGVyUmVhZGVyOwogICAgICBjbGFz cyBGaWx0ZXJXcml0ZXI7CiAgICAgIGNsYXNzIElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnB1 dFN0cmVhbTsKICAgICAgY2xhc3MgSW5wdXRTdHJlYW1SZWFkZXI7CiAgICAgIGNsYXNzIEludGVy ZmFjZUNvbXBhcmF0b3I7CiAgICAgIGNsYXNzIEludGVycnVwdGVkSU9FeGNlcHRpb247CiAgICAg IGNsYXNzIEludmFsaWRDbGFzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW52YWxpZE9iamVjdEV4 Y2VwdGlvbjsKICAgICAgY2xhc3MgTGluZU51bWJlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBM aW5lTnVtYmVyUmVhZGVyOwogICAgICBjbGFzcyBNZW1iZXJDb21wYXJhdG9yOwogICAgICBjbGFz cyBOb3RBY3RpdmVFeGNlcHRpb247CiAgICAgIGNsYXNzIE5vdFNlcmlhbGl6YWJsZUV4Y2VwdGlv bjsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0U3RyZWFt OwogICAgICBjbGFzcyBPYmplY3RJbnB1dFN0cmVhbSRHZXRGaWVsZDsKICAgICAgY2xhc3MgT2Jq ZWN0SW5wdXRWYWxpZGF0aW9uOwogICAgICBjbGFzcyBPYmplY3RPdXRwdXQ7CiAgICAgIGNsYXNz IE9iamVjdE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0T3V0cHV0U3RyZWFtJFB1dEZp ZWxkOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1DbGFzczsKICAgICAgY2xhc3MgT2JqZWN0U3Ry ZWFtQ29uc3RhbnRzOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1FeGNlcHRpb247CiAgICAgIGNs YXNzIE9iamVjdFN0cmVhbUZpZWxkOwogICAgICBjbGFzcyBPcHRpb25hbERhdGFFeGNlcHRpb247 CiAgICAgIGNsYXNzIE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT3V0cHV0U3RyZWFtV3JpdGVy OwogICAgICBjbGFzcyBQaXBlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBQaXBlZE91dHB1dFN0 cmVhbTsKICAgICAgY2xhc3MgUGlwZWRSZWFkZXI7CiAgICAgIGNsYXNzIFBpcGVkV3JpdGVyOwog ICAgICBjbGFzcyBQcmludFN0cmVhbTsKICAgICAgY2xhc3MgUHJpbnRXcml0ZXI7CiAgICAgIGNs YXNzIFB1c2hiYWNrSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIFB1c2hiYWNrUmVhZGVyOwogICAg ICBjbGFzcyBSYW5kb21BY2Nlc3NGaWxlOwogICAgICBjbGFzcyBSZWFkZXI7CiAgICAgIGNsYXNz IFNlcXVlbmNlSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZTsKICAgICAgY2xh c3MgU2VyaWFsaXphYmxlUGVybWlzc2lvbjsKICAgICAgY2xhc3MgU3RyZWFtQ29ycnVwdGVkRXhj ZXB0aW9uOwogICAgICBjbGFzcyBTdHJlYW1Ub2tlbml6ZXI7CiAgICAgIGNsYXNzIFN0cmluZ0J1 ZmZlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBTdHJpbmdSZWFkZXI7CiAgICAgIGNsYXNzIFN0 cmluZ1dyaXRlcjsKICAgICAgY2xhc3MgU3luY0ZhaWxlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3Mg VVRGRGF0YUZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4 Y2VwdGlvbjsKICAgICAgY2xhc3MgVmFsaWRhdG9yQW5kUHJpb3JpdHk7CiAgICAgIGNsYXNzIFdy aXRlQWJvcnRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgV3JpdGVyOwogICAgfTsKCiAgICBuYW1l c3BhY2UgbGFuZwogICAgewogICAgICBjbGFzcyBBYnN0cmFjdE1ldGhvZEVycm9yOwogICAgICBj bGFzcyBBcml0aG1ldGljRXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheUluZGV4T3V0T2ZCb3Vu ZHNFeGNlcHRpb247CiAgICAgIGNsYXNzIEFycmF5U3RvcmVFeGNlcHRpb247CiAgICAgIGNsYXNz IEJvb2xlYW47CiAgICAgIGNsYXNzIEJ5dGU7CiAgICAgIGNsYXNzIENQbHVzUGx1c0RlbWFuZ2xl cjsKICAgICAgY2xhc3MgQ2hhclNlcXVlbmNlOwogICAgICBjbGFzcyBDaGFyYWN0ZXI7CiAgICAg IGNsYXNzIENoYXJhY3RlciRTdWJzZXQ7CiAgICAgIGNsYXNzIENoYXJhY3RlciRVbmljb2RlQmxv Y2s7CiAgICAgIGNsYXNzIENsYXNzOwogICAgICBjbGFzcyBDbGFzc0Nhc3RFeGNlcHRpb247CiAg ICAgIGNsYXNzIENsYXNzQ2lyY3VsYXJpdHlFcnJvcjsKICAgICAgY2xhc3MgQ2xhc3NGb3JtYXRF cnJvcjsKICAgICAgY2xhc3MgQ2xhc3NMb2FkZXI7CiAgICAgIGNsYXNzIENsYXNzTm90Rm91bmRF eGNlcHRpb247CiAgICAgIGNsYXNzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogICAgICBj bGFzcyBDbG9uZWFibGU7CiAgICAgIGNsYXNzIENvbXBhcmFibGU7CiAgICAgIGNsYXNzIENvbXBp bGVyOwogICAgICBjbGFzcyBDb25jcmV0ZVByb2Nlc3M7CiAgICAgIGNsYXNzIERvdWJsZTsKICAg ICAgY2xhc3MgRXJyb3I7CiAgICAgIGNsYXNzIEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRXhjZXB0 aW9uSW5Jbml0aWFsaXplckVycm9yOwogICAgICBjbGFzcyBGbG9hdDsKICAgICAgY2xhc3MgSWxs ZWdhbEFjY2Vzc0Vycm9yOwogICAgICBjbGFzcyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOwogICAg ICBjbGFzcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxNb25p dG9yU3RhdGVFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKICAg ICAgY2xhc3MgSWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbmNvbXBh dGlibGVDbGFzc0NoYW5nZUVycm9yOwogICAgICBjbGFzcyBJbmRleE91dE9mQm91bmRzRXhjZXB0 aW9uOwogICAgICBjbGFzcyBJbmhlcml0YWJsZVRocmVhZExvY2FsOwogICAgICBjbGFzcyBJbnN0 YW50aWF0aW9uRXJyb3I7CiAgICAgIGNsYXNzIEluc3RhbnRpYXRpb25FeGNlcHRpb247CiAgICAg IGNsYXNzIEludGVnZXI7CiAgICAgIGNsYXNzIEludGVybmFsRXJyb3I7CiAgICAgIGNsYXNzIElu dGVycnVwdGVkRXhjZXB0aW9uOwogICAgICBjbGFzcyBMaW5rYWdlRXJyb3I7CiAgICAgIGNsYXNz IExvbmc7CiAgICAgIGNsYXNzIE1hdGg7CiAgICAgIGNsYXNzIE5lZ2F0aXZlQXJyYXlTaXplRXhj ZXB0aW9uOwogICAgICBjbGFzcyBOb0NsYXNzRGVmRm91bmRFcnJvcjsKICAgICAgY2xhc3MgTm9T dWNoRmllbGRFcnJvcjsKICAgICAgY2xhc3MgTm9TdWNoRmllbGRFeGNlcHRpb247CiAgICAgIGNs YXNzIE5vU3VjaE1ldGhvZEVycm9yOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFeGNlcHRpb247 CiAgICAgIGNsYXNzIE51bGxQb2ludGVyRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdW1iZXI7CiAg ICAgIGNsYXNzIE51bWJlckZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JqZWN0OwogICAg ICBjbGFzcyBPdXRPZk1lbW9yeUVycm9yOwogICAgICBjbGFzcyBQYWNrYWdlOwogICAgICBjbGFz cyBQcm9jZXNzOwogICAgICBjbGFzcyBSdW5uYWJsZTsKICAgICAgY2xhc3MgUnVudGltZTsKICAg ICAgY2xhc3MgUnVudGltZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgUnVudGltZVBlcm1pc3Npb247 CiAgICAgIGNsYXNzIFNlY3VyaXR5Q29udGV4dDsKICAgICAgY2xhc3MgU2VjdXJpdHlFeGNlcHRp b247CiAgICAgIGNsYXNzIFNlY3VyaXR5TWFuYWdlcjsKICAgICAgY2xhc3MgU2hvcnQ7CiAgICAg IGNsYXNzIFN0YWNrT3ZlcmZsb3dFcnJvcjsKICAgICAgY2xhc3MgU3RyaW5nOwogICAgICBjbGFz cyBTdHJpbmckQ2FzZUluc2Vuc2l0aXZlQ29tcGFyYXRvcjsKICAgICAgY2xhc3MgU3RyaW5nQnVm ZmVyOwogICAgICBjbGFzcyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBj bGFzcyBTeXN0ZW07CiAgICAgIGNsYXNzIFRocmVhZDsKICAgICAgY2xhc3MgVGhyZWFkRGVhdGg7 CiAgICAgIGNsYXNzIFRocmVhZEdyb3VwOwogICAgICBjbGFzcyBUaHJlYWRMb2NhbDsKICAgICAg Y2xhc3MgVGhyZWFkTG9jYWwkVmFsdWU7CiAgICAgIGNsYXNzIFRocm93YWJsZTsKICAgICAgY2xh c3MgVW5rbm93bkVycm9yOwogICAgICBjbGFzcyBVbnNhdGlzZmllZExpbmtFcnJvcjsKICAgICAg Y2xhc3MgVW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcjsKICAgICAgY2xhc3MgVW5zdXBwb3J0 ZWRPcGVyYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIFZNQ2xhc3NMb2FkZXI7CiAgICAgIGNs YXNzIFZNU2VjdXJpdHlNYW5hZ2VyOwogICAgICBjbGFzcyBWZXJpZnlFcnJvcjsKICAgICAgY2xh c3MgVmlydHVhbE1hY2hpbmVFcnJvcjsKICAgICAgY2xhc3MgVm9pZDsKICAgICAgbmFtZXNwYWNl IHJlZgogICAgICB7CiAgICAgICAgY2xhc3MgUGhhbnRvbVJlZmVyZW5jZTsKICAgICAgICBjbGFz cyBSZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNlUXVldWU7CiAgICAgICAgY2xhc3Mg U29mdFJlZmVyZW5jZTsKICAgICAgICBjbGFzcyBXZWFrUmVmZXJlbmNlOwogICAgICB9OwoKICAg ICAgbmFtZXNwYWNlIHJlZmxlY3QKICAgICAgewogICAgICAgIGNsYXNzIEFjY2Vzc2libGVPYmpl Y3Q7CiAgICAgICAgY2xhc3MgQXJyYXk7CiAgICAgICAgY2xhc3MgQ29uc3RydWN0b3I7CiAgICAg ICAgY2xhc3MgRmllbGQ7CiAgICAgICAgY2xhc3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsK ICAgICAgICBjbGFzcyBNZW1iZXI7CiAgICAgICAgY2xhc3MgTWV0aG9kOwogICAgICAgIGNsYXNz IE1vZGlmaWVyOwogICAgICAgIGNsYXNzIFJlZmxlY3RQZXJtaXNzaW9uOwogICAgICB9OwogICAg fTsKCiAgICBuYW1lc3BhY2UgdXRpbAogICAgewogICAgICBjbGFzcyBBYnN0cmFjdENvbGxlY3Rp b247CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdDsKICAgICAgY2xhc3MgQWJzdHJhY3RMaXN0JEFi c3RyYWN0TGlzdEl0cjsKICAgICAgY2xhc3MgQWJzdHJhY3RNYXA7CiAgICAgIGNsYXNzIEFic3Ry YWN0U2VxdWVudGlhbExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0U2V0OwogICAgICBjbGFzcyBB cnJheUxpc3Q7CiAgICAgIGNsYXNzIEFycmF5czsKICAgICAgY2xhc3MgQXJyYXlzJExpc3RJbXBs OwogICAgICBjbGFzcyBCYXNpY01hcEVudHJ5OwogICAgICBjbGFzcyBCaXRTZXQ7CiAgICAgIGNs YXNzIENhbGVuZGFyOwogICAgICBjbGFzcyBDb2xsZWN0aW9uOwogICAgICBjbGFzcyBDb2xsZWN0 aW9uczsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkUmV2ZXJzZUNvbXBhcmF0b3I7CiAgICAgIGNs YXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZENvbGxlY3Rpb247CiAgICAgIGNsYXNzIENvbGxl Y3Rpb25zJFN5bmNocm9uaXplZEl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5j aHJvbml6ZWRMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRMaXN0SXRl cmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZE1hcDsKICAgICAgY2xh c3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkU2V0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRT eW5jaHJvbml6ZWRTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXpl ZFNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlQ29sbGVjdGlv bjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlSXRlcmF0b3I7CiAgICAgIGNs YXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3Q7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25z JFVubW9kaWZpYWJsZUxpc3RJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2Rp ZmlhYmxlTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFibGVTZXQ7CiAgICAg IGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZVNvcnRlZE1hcDsKICAgICAgY2xhc3MgQ29s bGVjdGlvbnMkVW5tb2RpZmlhYmxlU29ydGVkU2V0OwogICAgICBjbGFzcyBDb21wYXJhdG9yOwog ICAgICBjbGFzcyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogICAgICBjbGFzcyBE YXRlOwogICAgICBjbGFzcyBEaWN0aW9uYXJ5OwogICAgICBjbGFzcyBFbXB0eVN0YWNrRXhjZXB0 aW9uOwogICAgICBjbGFzcyBFbnVtZXJhdGlvbjsKICAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsK ICAgICAgY2xhc3MgRXZlbnRPYmplY3Q7CiAgICAgIGNsYXNzIEdyZWdvcmlhbkNhbGVuZGFyOwog ICAgICBjbGFzcyBIYXNoTWFwOwogICAgICBjbGFzcyBIYXNoTWFwJEhhc2hFbnRyeTsKICAgICAg Y2xhc3MgSGFzaE1hcCRIYXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIEhhc2hTZXQ7CiAgICAgIGNs YXNzIEhhc2h0YWJsZTsKICAgICAgY2xhc3MgSGFzaHRhYmxlJEVudW1lcmF0b3I7CiAgICAgIGNs YXNzIEhhc2h0YWJsZSRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRIYXNoSXRlcmF0 b3I7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcDsKICAgICAgY2xhc3MgSWRlbnRpdHlIYXNo TWFwJElkZW50aXR5SXRlcmF0b3I7CiAgICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgICBjbGFzcyBM aW5rZWRIYXNoTWFwOwogICAgICBjbGFzcyBMaW5rZWRIYXNoTWFwJExpbmtlZEhhc2hFbnRyeTsK ICAgICAgY2xhc3MgTGlua2VkTGlzdDsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRFbnRyeTsKICAg ICAgY2xhc3MgTGlua2VkTGlzdCRMaW5rZWRMaXN0SXRyOwogICAgICBjbGFzcyBMaXN0OwogICAg ICBjbGFzcyBMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIExpc3RSZXNvdXJjZUJ1bmRsZTsKICAg ICAgY2xhc3MgTG9jYWxlOwogICAgICBjbGFzcyBNYXA7CiAgICAgIGNsYXNzIE1hcCRFbnRyeTsK ICAgICAgY2xhc3MgTWFwJE1hcDsKICAgICAgY2xhc3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9u OwogICAgICBjbGFzcyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogICAgICBjbGFzcyBPYnNlcnZh YmxlOwogICAgICBjbGFzcyBPYnNlcnZlcjsKICAgICAgY2xhc3MgUHJvcGVydGllczsKICAgICAg Y2xhc3MgUHJvcGVydHlQZXJtaXNzaW9uOwogICAgICBjbGFzcyBQcm9wZXJ0eVJlc291cmNlQnVu ZGxlOwogICAgICBjbGFzcyBSYW5kb207CiAgICAgIGNsYXNzIFJhbmRvbUFjY2VzczsKICAgICAg Y2xhc3MgUmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIFNldDsKICAgICAgY2xhc3MgU2ltcGxl VGltZVpvbmU7CiAgICAgIGNsYXNzIFNvcnRlZE1hcDsKICAgICAgY2xhc3MgU29ydGVkU2V0Owog ICAgICBjbGFzcyBTdGFjazsKICAgICAgY2xhc3MgU3RyaW5nVG9rZW5pemVyOwogICAgICBjbGFz cyBTdWJMaXN0OwogICAgICBjbGFzcyBUaW1lWm9uZTsKICAgICAgY2xhc3MgVGltZXI7CiAgICAg IGNsYXNzIFRpbWVyJFNjaGVkdWxlcjsKICAgICAgY2xhc3MgVGltZXIkVGFza1F1ZXVlOwogICAg ICBjbGFzcyBUaW1lclRhc2s7CiAgICAgIGNsYXNzIFRvb01hbnlMaXN0ZW5lcnNFeGNlcHRpb247 CiAgICAgIGNsYXNzIFRyZWVNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkTm9kZTsKICAgICAgY2xh c3MgVHJlZU1hcCRTdWJNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkVHJlZUl0ZXJhdG9yOwogICAg ICBjbGFzcyBUcmVlTWFwJFZlcmlmeVJlc3VsdDsKICAgICAgY2xhc3MgVHJlZVNldDsKICAgICAg Y2xhc3MgVmVjdG9yOwogICAgICBjbGFzcyBXZWFrSGFzaE1hcDsKICAgICAgY2xhc3MgV2Vha0hh c2hNYXAkRW50cnk7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtCdWNrZXQ7CiAgICAgIGNs YXNzIFdlYWtIYXNoTWFwJFdlYWtFbnRyeVNldDsKICAgICAgbmFtZXNwYWNlIGphcgogICAgICB7 CiAgICAgICAgY2xhc3MgQXR0cmlidXRlczsKICAgICAgICBjbGFzcyBBdHRyaWJ1dGVzJE5hbWU7 CiAgICAgICAgY2xhc3MgSmFyRW50cnk7CiAgICAgICAgY2xhc3MgSmFyRXhjZXB0aW9uOwogICAg ICAgIGNsYXNzIEphckZpbGU7CiAgICAgICAgY2xhc3MgSmFyRmlsZSRKYXJFbnVtZXJhdGlvbjsK ICAgICAgICBjbGFzcyBKYXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBKYXJPdXRwdXRTdHJl YW07CiAgICAgICAgY2xhc3MgTWFuaWZlc3Q7CiAgICAgIH07CgogICAgICBuYW1lc3BhY2Ugemlw CiAgICAgIHsKICAgICAgICBjbGFzcyBBZGxlcjMyOwogICAgICAgIGNsYXNzIENSQzMyOwogICAg ICAgIGNsYXNzIENoZWNrZWRJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBDaGVja2VkT3V0cHV0 U3RyZWFtOwogICAgICAgIGNsYXNzIENoZWNrc3VtOwogICAgICAgIGNsYXNzIERhdGFGb3JtYXRF eGNlcHRpb247CiAgICAgICAgY2xhc3MgRGVmbGF0ZXI7CiAgICAgICAgY2xhc3MgRGVmbGF0ZXJP dXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgR1pJUElucHV0U3RyZWFtOwogICAgICAgIGNsYXNz IEdaSVBPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSW5mbGF0ZXI7CiAgICAgICAgY2xhc3Mg SW5mbGF0ZXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBaaXBDb25zdGFudHM7CiAgICAgICAg Y2xhc3MgWmlwRW50cnk7CiAgICAgICAgY2xhc3MgWmlwRW51bWVyYXRpb247CiAgICAgICAgY2xh c3MgWmlwRXhjZXB0aW9uOwogICAgICAgIGNsYXNzIFppcEZpbGU7CiAgICAgICAgY2xhc3MgWmlw SW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwT3V0cHV0U3RyZWFtOwogICAgICB9OwogICAg fTsKICB9Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgamF2YTo6bGFuZzo6T2JqZWN0KiBqb2JqZWN0Owp0 eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzKiBqY2xhc3M7CnR5cGVkZWYgY2xhc3MgamF2 YTo6bGFuZzo6VGhyb3dhYmxlKiBqdGhyb3dhYmxlOwp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6 OlN0cmluZyoganN0cmluZzsKc3RydWN0IF9Kdl9KTklFbnY7Cgp0eXBlZGVmIHN0cnVjdCBfSnZf RmllbGQgKmpmaWVsZElEOwp0eXBlZGVmIHN0cnVjdCBfSnZfTWV0aG9kICpqbWV0aG9kSUQ7Cgpl eHRlcm4gIkMiIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQpIF9fYXR0cmli dXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5v RmluYWxpemVyIChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0 ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5vSW5pdE5vRmluYWxpemVyIChqY2xhc3Ms IGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKCgogIHN0YXRpYyBpbmxpbmUg am9iamVjdCBfSnZfQWxsb2NQdHJGcmVlT2JqZWN0IChqY2xhc3Mga2xhc3MsIGppbnQgc3opCiAg ewogICAgcmV0dXJuIF9Kdl9BbGxvY09iamVjdChrbGFzcywgc3opOwogIH0KCmV4dGVybiAiQyIg amJvb2xlYW4gX0p2X0lzSW5zdGFuY2VPZihqb2JqZWN0LCBqY2xhc3MpOwpleHRlcm4gIkMiIGpz dHJpbmcgX0p2X0FsbG9jU3RyaW5nKGpzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7 CmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nIChjb25zdCBqY2hhciosIGpzaXplKQog IF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGppbnQgX0p2X0Zvcm1hdEludCAo amNoYXIqIGJ1ZmVuZCwgamludCBudW0pOwpleHRlcm4gIkMiIGpjaGFyKiBfSnZfR2V0U3RyaW5n Q2hhcnMgKGpzdHJpbmcgc3RyKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9yRW50ZXIgKGpv YmplY3QpOwpleHRlcm4gIkMiIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0KTsKZXh0ZXJu ICJDIiBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEoY29uc3QgY2hhciosIGpzaXplKQogIF9f YXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3RyaW5n VVRGTGVuZ3RoIChqc3RyaW5nKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3RyaW5nVVRGUmVn aW9uIChqc3RyaW5nLCBqc2l6ZSwganNpemUsIGNoYXIgKik7CgpleHRlcm4gamludCBfSnZfQ3Jl YXRlSmF2YVZNICh2b2lkKiApOwoKdm9pZApfSnZfVGhyZWFkUnVuIChqYXZhOjpsYW5nOjpUaHJl YWQqIHRocmVhZCk7CmppbnQKX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQoamF2YTo6bGFuZzo6VGhy ZWFkKiB0aHJlYWQpOwpleHRlcm4gIkMiIGphdmE6Omxhbmc6OlRocmVhZCoKX0p2X0F0dGFjaEN1 cnJlbnRUaHJlYWQoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRHcm91cCogZ3JvdXAp OwpleHRlcm4gIkMiIGppbnQgX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpOwoKZXh0ZXJu ICJDIiB2b2lkIF9Kdl9UaHJvdyAoanRocm93YWJsZSkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9NYWxsb2MgKGpzaXplKSBfX2F0dHJpYnV0ZV9f KChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgdm9pZCogX0p2X1JlYWxsb2MgKHZvaWQgKiwganNp emUpOwpleHRlcm4gIkMiIHZvaWQgX0p2X0ZyZWUgKHZvaWQqKTsKZXh0ZXJuIHZvaWQgKCpfSnZf UmVnaXN0ZXJDbGFzc0hvb2spIChqY2xhc3MgY2wpOwpleHRlcm4gIkMiIHZvaWQgX0p2X1JlZ2lz dGVyQ2xhc3NIb29rRGVmYXVsdCAoamNsYXNzKTsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX0p2 X3VzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9Kdl91aW50IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKCnN0cnVj dCBfSnZfVXRmOENvbnN0CnsKICBfSnZfdXNob3J0IGhhc2g7CiAgX0p2X3VzaG9ydCBsZW5ndGg7 CiAgY2hhciBkYXRhWzFdOwp9OwojIDE3ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL2xhbmcv T2JqZWN0LmgiIDIKCgoKc3RydWN0IF9Kdk9iamVjdFByZWZpeAp7CnByb3RlY3RlZDoKCiAgdmly dHVhbCB2b2lkIG5hY2RfMSAodm9pZCkge307CgoKICAgIHZpcnR1YWwgdm9pZCBuYWNkXzIgKHZv aWQpIHt9OwoKfTsKCmNsYXNzIGphdmE6Omxhbmc6Ok9iamVjdCA6IHB1YmxpYyBfSnZPYmplY3RQ cmVmaXgKewpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB2b2lkIGZpbmFsaXplICh2b2lkKTsKcHVibGlj OgoKICBqY2xhc3MgZ2V0Q2xhc3MgKHZvaWQpOwogIHZpcnR1YWwgamludCBoYXNoQ29kZSAodm9p ZCk7CiAgdm9pZCBub3RpZnkgKHZvaWQpOwogIHZvaWQgbm90aWZ5QWxsICh2b2lkKTsKICB2b2lk IHdhaXQgKGpsb25nIHRpbWVvdXQsIGppbnQgbmFub3MpOwogIHZpcnR1YWwgamJvb2xlYW4gZXF1 YWxzIChqb2JqZWN0IG9iaik7CiAgT2JqZWN0ICh2b2lkKTsKICB2aXJ0dWFsIGpzdHJpbmcgdG9T dHJpbmcgKHZvaWQpOwogIHZvaWQgd2FpdCAodm9pZCk7CiAgdm9pZCB3YWl0IChqbG9uZyB0aW1l b3V0KTsKCiAgZnJpZW5kIHZvaWQgX0p2X01vbml0b3JFbnRlciAoam9iamVjdCBvYmopOwogIGZy aWVuZCB2b2lkIF9Kdl9Nb25pdG9yRXhpdCAoam9iamVjdCBvYmopOwogIGZyaWVuZCB2b2lkIF9K dl9Jbml0aWFsaXplU3luY011dGV4ICh2b2lkKTsKICBmcmllbmQgdm9pZCBfSnZfRmluYWxpemVP YmplY3QgKGpvYmplY3Qgb2JqKTsKIyA2MCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5n L09iamVjdC5oIgogIHN0YXRpYyBqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cgpwcm90ZWN0ZWQ6 CiAgdmlydHVhbCBqb2JqZWN0IGNsb25lICh2b2lkKTsKCnByaXZhdGU6CgoKCgogICAgam9iamVj dCBzeW5jX2luZm87CgoKCiAgICB2b2lkIHN5bmNfaW5pdCAodm9pZCk7Cn07CiMgMTcgIi4uLy4u Ly4uL2djYy9saWJqYXZhL2djai9jbmkuaCIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ph dmEvbGFuZy9DbGFzcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9D bGFzcy5oIgojcHJhZ21hIGludGVyZmFjZQoKCiMgMSAiamF2YS9sYW5nL1N0cmluZy5oIiAxCgoK CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9hcnJh eS5oIiAxCiMgMTYgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9hcnJheS5oIgpleHRlcm4gIkph dmEiIHsKCmNsYXNzIF9fSkFycmF5IDogcHVibGljIGphdmE6Omxhbmc6Ok9iamVjdAp7CnByb3Rl Y3RlZDoKCgoKICBfX0pBcnJheSAoKSA6IGxlbmd0aCAoMCkKICB7CiAgfQpwdWJsaWM6CiAgY29u c3QganNpemUgbGVuZ3RoOwogIGZyaWVuZCBqc2l6ZSBKdkdldEFycmF5TGVuZ3RoIChfX0pBcnJh eSopOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgSkFycmF5IDogcHVibGljIF9fSkFycmF5 CnsKICBUIGRhdGFbMF07CnB1YmxpYzoKICBmcmllbmQgVCogZWxlbWVudHM8PihKQXJyYXk8VD4m IHgpOwogIGZyaWVuZCBUKiBlbGVtZW50czw+KEpBcnJheTxUPiogeCk7CgoKfTsKCnRlbXBsYXRl PGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJyYXk8VD4mIHgpIHsgcmV0dXJuIHguZGF0 YTsgfQp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgVCogZWxlbWVudHMoSkFycmF5PFQ+KiB4KSB7 IHJldHVybiB4LT5kYXRhOyB9Cgp9OwoKCnR5cGVkZWYgX19KQXJyYXkgKmphcnJheTsKdHlwZWRl ZiBKQXJyYXk8am9iamVjdD4gKmpvYmplY3RBcnJheTsKdHlwZWRlZiBKQXJyYXk8amJvb2xlYW4+ ICpqYm9vbGVhbkFycmF5Owp0eXBlZGVmIEpBcnJheTxqYnl0ZT4gKmpieXRlQXJyYXk7CnR5cGVk ZWYgSkFycmF5PGpjaGFyPiAqamNoYXJBcnJheTsKdHlwZWRlZiBKQXJyYXk8anNob3J0PiAqanNo b3J0QXJyYXk7CnR5cGVkZWYgSkFycmF5PGppbnQ+ICpqaW50QXJyYXk7CnR5cGVkZWYgSkFycmF5 PGpsb25nPiAqamxvbmdBcnJheTsKdHlwZWRlZiBKQXJyYXk8amZsb2F0PiAqamZsb2F0QXJyYXk7 CnR5cGVkZWYgSkFycmF5PGpkb3VibGU+ICpqZG91YmxlQXJyYXk7CnR5cGVkZWYgSkFycmF5PGpz dHJpbmc+ICpqc3RyaW5nQXJyYXk7CgpleHRlcm4gamF2YTo6bGFuZzo6Q2xhc3MgX0p2X2J5dGVD bGFzcywgX0p2X3Nob3J0Q2xhc3MsIF9Kdl9pbnRDbGFzcywKICBfSnZfbG9uZ0NsYXNzLCBfSnZf Ym9vbGVhbkNsYXNzLCBfSnZfY2hhckNsYXNzLCBfSnZfZmxvYXRDbGFzcywKICBfSnZfZG91Ymxl Q2xhc3MsIF9Kdl92b2lkQ2xhc3M7CgoKZXh0ZXJuICJDIiBqb2JqZWN0QXJyYXkgX0p2X05ld09i amVjdEFycmF5KGpzaXplIGxlbmd0aCwgamNsYXNzLCBqb2JqZWN0IGluaXQpOwpleHRlcm4gIkMi IGpvYmplY3QgX0p2X05ld1ByaW1BcnJheSAoamNsYXNzIGVsdHlwZSwgamludCBjb3VudCk7Cgpl eHRlcm4gaW5saW5lIGpvYmplY3RBcnJheQpKdk5ld09iamVjdEFycmF5IChqc2l6ZSBsZW5ndGgs IGpjbGFzcyBjbHMsIGpvYmplY3QgaW5pdCkKewogIHJldHVybiBfSnZfTmV3T2JqZWN0QXJyYXkg KGxlbmd0aCwgY2xzLCBpbml0KTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhckFycmF5Ckp2TmV3Q2hh ckFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamNoYXJBcnJheSkgX0p2X05ld1ByaW1B cnJheSAoKCYgX0p2X2NoYXJDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamJvb2xl YW5BcnJheQpKdk5ld0Jvb2xlYW5BcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpib29s ZWFuQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9ib29sZWFuQ2xhc3MpLCBsZW5ndGgp Owp9CgpleHRlcm4gaW5saW5lIGpieXRlQXJyYXkKSnZOZXdCeXRlQXJyYXkgKGppbnQgbGVuZ3Ro KQp7CiAgcmV0dXJuIChqYnl0ZUFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfYnl0ZUNs YXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlubGluZSBqc2hvcnRBcnJheQpKdk5ld1Nob3J0QXJy YXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqc2hvcnRBcnJheSkgX0p2X05ld1ByaW1BcnJh eSAoKCYgX0p2X3Nob3J0Q2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGppbnRBcnJh eQpKdk5ld0ludEFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamludEFycmF5KSBfSnZf TmV3UHJpbUFycmF5ICgoJiBfSnZfaW50Q2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5l IGpsb25nQXJyYXkKSnZOZXdMb25nQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqbG9u Z0FycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfbG9uZ0NsYXNzKSwgbGVuZ3RoKTsKfQoK ZXh0ZXJuIGlubGluZSBqZmxvYXRBcnJheQpKdk5ld0Zsb2F0QXJyYXkgKGppbnQgbGVuZ3RoKQp7 CiAgcmV0dXJuIChqZmxvYXRBcnJheSkgX0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Zsb2F0Q2xh c3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpkb3VibGVBcnJheQpKdk5ld0RvdWJsZUFy cmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamRvdWJsZUFycmF5KSBfSnZfTmV3UHJpbUFy cmF5ICgoJiBfSnZfZG91YmxlQ2xhc3MpLCBsZW5ndGgpOwp9CgoKZXh0ZXJuICJDIiBqc3RyaW5n QXJyYXkgSnZDb252ZXJ0QXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwoKaW5saW5l IGpzaXplIEp2R2V0QXJyYXlMZW5ndGggKGphcnJheSBhcnJheSkgeyByZXR1cm4gYXJyYXktPmxl bmd0aDsgfQojIDEwICJqYXZhL2xhbmcvU3RyaW5nLmgiIDIKCmV4dGVybiAiSmF2YSIKewogIG5h bWVzcGFjZSBnbnUKICB7CiAgICBuYW1lc3BhY2UgZ2NqCiAgICB7CiAgICAgIG5hbWVzcGFjZSBy dW50aW1lCiAgICAgIHsKICAgICAgICBjbGFzcyBTdHJpbmdCdWZmZXI7CiAgICAgIH0KICAgIH0K ICB9Cn07CgpjbGFzcyA6OmphdmE6Omxhbmc6OlN0cmluZyA6IHB1YmxpYyA6OmphdmE6Omxhbmc6 Ok9iamVjdAp7CnB1YmxpYzoKICBTdHJpbmcgKCk7CiAgU3RyaW5nICg6OmphdmE6Omxhbmc6OlN0 cmluZyAqKTsKICBTdHJpbmcgKDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICopOwpwdWJsaWM6 CiAgU3RyaW5nICg6OmdudTo6Z2NqOjpydW50aW1lOjpTdHJpbmdCdWZmZXIgKik7CnB1YmxpYzoK ICBTdHJpbmcgKGpjaGFyQXJyYXkpOwogIFN0cmluZyAoamNoYXJBcnJheSwgamludCwgamludCk7 CiAgU3RyaW5nIChqYnl0ZUFycmF5KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQsIGppbnQp OwogIFN0cmluZyAoamJ5dGVBcnJheSwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgU3RyaW5n IChqYnl0ZUFycmF5LCBqaW50LCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0 aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvcHlWYWx1ZU9mIChqY2hhckFycmF5KTsKICBzdGF0 aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvcHlWYWx1ZU9mIChqY2hhckFycmF5LCBqaW50LCBq aW50KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQpOwogIFN0cmluZyAoamJ5dGVBcnJheSwg amludCwgamludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpIHsg cmV0dXJuIHRoaXM7IH0KICBqYm9vbGVhbiBlcXVhbHMgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICop OwogIGppbnQgaGFzaENvZGUgKCk7CiAgamludCBsZW5ndGggKCkgeyByZXR1cm4gY291bnQ7IH0K ICBqY2hhciBjaGFyQXQgKGppbnQpOwogIHZvaWQgZ2V0Q2hhcnMgKGppbnQsIGppbnQsIGpjaGFy QXJyYXksIGppbnQpOwogIGpieXRlQXJyYXkgZ2V0Qnl0ZXMgKCk7CiAgamJ5dGVBcnJheSBnZXRC eXRlcyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdm9pZCBnZXRCeXRlcyAoamludCwgamlu dCwgamJ5dGVBcnJheSwgamludCk7CiAgamNoYXJBcnJheSB0b0NoYXJBcnJheSAoKTsKICBqYm9v bGVhbiBlcXVhbHNJZ25vcmVDYXNlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNv bXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBjb21wYXJlVG8gKDo6amF2 YTo6bGFuZzo6T2JqZWN0ICopOwogIGppbnQgY29tcGFyZVRvSWdub3JlQ2FzZSAoOjpqYXZhOjps YW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gcmVnaW9uTWF0Y2hlcyAoamludCwgOjpqYXZhOjps YW5nOjpTdHJpbmcgKiwgamludCwgamludCk7CiAgamJvb2xlYW4gcmVnaW9uTWF0Y2hlcyAoamJv b2xlYW4sIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIGppbnQpOwogIGpib29s ZWFuIHN0YXJ0c1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpib29sZWFuIHN0YXJ0 c1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIGpib29sZWFuIGVuZHNXaXRo ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGluZGV4T2YgKGppbnQpOwogIGppbnQg aW5kZXhPZiAoamludCwgamludCk7CiAgamludCBpbmRleE9mICg6OmphdmE6Omxhbmc6OlN0cmlu ZyAqKTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIGpp bnQgbGFzdEluZGV4T2YgKGppbnQpOwogIGppbnQgbGFzdEluZGV4T2YgKGppbnQsIGppbnQpOwog IGppbnQgbGFzdEluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgbGFzdElu ZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwogIDo6amF2YTo6bGFuZzo6Q2hh clNlcXVlbmNlICpzdWJTZXF1ZW5jZSAoamludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJp bmcgKnN1YnN0cmluZyAoamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnN1YnN0cmluZyAo amludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmNvbmNhdCAoOjpqYXZhOjpsYW5n OjpTdHJpbmcgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnJlcGxhY2UgKGpjaGFyLCBqY2hh cik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJDYXNlICg6OmphdmE6OnV0aWw6Okxv Y2FsZSAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VcHBlckNhc2UgKDo6amF2YTo6dXRp bDo6TG9jYWxlICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b0xvd2VyQ2FzZSAoKTsKICA6 OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VcHBlckNhc2UgKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJp bmcgKnRyaW0gKCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mICg6Omph dmE6Omxhbmc6Ok9iamVjdCAqKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVl T2YgKGpjaGFyQXJyYXkpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAo amNoYXJBcnJheSwgamludCwgamludCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2 YWx1ZU9mIChqYm9vbGVhbik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9m IChqY2hhcik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqaW50KTsK ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpsb25nKTsKICBzdGF0aWMg OjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpmbG9hdCk7CiAgc3RhdGljIDo6amF2YTo6 bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqZG91YmxlKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq aW50ZXJuICgpOwpwcml2YXRlOgogIHZvaWQgaW5pdCAoKTsKICB2b2lkIGluaXQgKGpjaGFyQXJy YXksIGppbnQsIGppbnQsIGpib29sZWFuKTsKICB2b2lkIGluaXQgKGpieXRlQXJyYXksIGppbnQs IGppbnQsIGppbnQpOwogIHZvaWQgaW5pdCAoamJ5dGVBcnJheSwgamludCwgamludCwgOjpqYXZh OjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIHZvaWQgcmVoYXNoICgpOwogIDo6amF2YTo6bGFu Zzo6T2JqZWN0ICpkYXRhOwogIGppbnQgYm9mZnNldDsKICBqaW50IGNvdW50OwogIHN0YXRpYyBj b25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTY4NDk3OTQ0NzA3NTQ2Njc3MTBMTDsKcHVi bGljOgogIHN0YXRpYyA6OmphdmE6OnV0aWw6OkNvbXBhcmF0b3IgKkNBU0VfSU5TRU5TSVRJVkVf T1JERVI7CiAgZnJpZW5kIGpjaGFyKiBfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKTsK ICBmcmllbmQganN0cmluZyogX0p2X1N0cmluZ0ZpbmRTbG90IChqY2hhciosIGppbnQsIGppbnQp OwogIGZyaWVuZCBqc3RyaW5nKiBfSnZfU3RyaW5nR2V0U2xvdCAoanN0cmluZyk7CiAgZnJpZW5k IGpzdHJpbmcgX0p2X05ld1N0cmluZ1V0ZjhDb25zdCAoX0p2X1V0ZjhDb25zdCogc3RyKTsKICBm cmllbmQganN0cmluZyBfSnZfTmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyKiwganNpemUpOwog IGZyaWVuZCBqc3RyaW5nIF9Kdl9BbGxvY1N0cmluZyAoanNpemUpOwoKICBzdGF0aWMgOjpqYXZh OjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMTkgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEv bGFuZy9DbGFzcy5oIiAyCiMgMSAiamF2YS9uZXQvVVJMLmgiIDEKCgoKCgojcHJhZ21hIGludGVy ZmFjZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFj ZSBuZXQKICAgIHsKICAgICAgY2xhc3MgVVJMQ29ubmVjdGlvbjsKICAgICAgY2xhc3MgVVJMOwog ICAgICBjbGFzcyBVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeTsKICAgICAgY2xhc3MgVVJMU3RyZWFt SGFuZGxlcjsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Om5ldDo6VVJMIDogcHVibGljIDo6 amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg KiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7 CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6 OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6 amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2 YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg Kik7CiAgVVJMICg6OmphdmE6Om5ldDo6VVJMICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwog IFVSTCAoOjpqYXZhOjpuZXQ6OlVSTCAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6 Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqKTsKICBqYm9vbGVhbiBlcXVhbHMgKDo6amF2YTo6bGFu Zzo6T2JqZWN0ICopOwogIDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXRDb250ZW50ICgpOwogIDo6 amF2YTo6bGFuZzo6U3RyaW5nICpnZXRGaWxlICgpIHsgcmV0dXJuIGZpbGU7IH0KICA6OmphdmE6 Omxhbmc6OlN0cmluZyAqZ2V0SG9zdCAoKSB7IHJldHVybiBob3N0OyB9CiAgamludCBnZXRQb3J0 ICgpIHsgcmV0dXJuIHBvcnQ7IH0KICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0UHJvdG9jb2wg KCkgeyByZXR1cm4gcHJvdG9jb2w7IH0KICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0UmVmICgp IHsgcmV0dXJuIHJlZjsgfQogIGppbnQgaGFzaENvZGUgKCk7CiAgOjpqYXZhOjpuZXQ6OlVSTENv bm5lY3Rpb24gKm9wZW5Db25uZWN0aW9uICgpOwogIDo6amF2YTo6aW86OklucHV0U3RyZWFtICpv cGVuU3RyZWFtICgpOwogIGpib29sZWFuIHNhbWVGaWxlICg6OmphdmE6Om5ldDo6VVJMICopOwpw dWJsaWM6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6 U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3Ry aW5nICopOwpwdWJsaWM6CiAgc3RhdGljIHZvaWQgc2V0VVJMU3RyZWFtSGFuZGxlckZhY3Rvcnkg KDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAqKTsKICA6OmphdmE6Omxhbmc6 OlN0cmluZyAqdG9FeHRlcm5hbEZvcm0gKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3Ry aW5nICgpOwpwcml2YXRlOgogIDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICpzZXRVUkxT dHJlYW1IYW5kbGVyICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIHJlYWRPYmplY3Qg KDo6amF2YTo6aW86Ok9iamVjdElucHV0U3RyZWFtICopOwogIHZvaWQgd3JpdGVPYmplY3QgKDo6 amF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVhbSAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq cHJvdG9jb2w7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmhvc3Q7CiAgamludCBwb3J0OwogIDo6 amF2YTo6bGFuZzo6U3RyaW5nICpmaWxlOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpyZWY7CiAg amludCBoYXNoQ29kZV9fOwogIDo6amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyICpoYW5kbGVy OwogIHN0YXRpYyA6OmphdmE6OnV0aWw6Okhhc2h0YWJsZSAqaGFuZGxlcnM7CiAgc3RhdGljIDo6 amF2YTo6bmV0OjpVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAqZmFjdG9yeTsKICBzdGF0aWMgY29u c3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC03NjI3NjI5Njg4MzYxNTI0MTEwTEw7CnB1Ymxp YzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIwICIuLi8uLi8u Li9nY2MvbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbGFuZy9yZWZsZWN0 L01vZGlmaWVyLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpjbGFzcyA6OmphdmE6Omxh bmc6OnJlZmxlY3Q6Ok1vZGlmaWVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVi bGljOgogIE1vZGlmaWVyICgpOwogIHN0YXRpYyBqYm9vbGVhbiBpc0Fic3RyYWN0IChqaW50KTsK ICBzdGF0aWMgamJvb2xlYW4gaXNGaW5hbCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzSW50 ZXJmYWNlIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNOYXRpdmUgKGppbnQpOwogIHN0YXRp YyBqYm9vbGVhbiBpc1ByaXZhdGUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1Byb3RlY3Rl ZCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzUHVibGljIChqaW50KTsKICBzdGF0aWMgamJv b2xlYW4gaXNTdGF0aWMgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0cmljdCAoamludCk7 CiAgc3RhdGljIGpib29sZWFuIGlzU3luY2hyb25pemVkIChqaW50KTsKICBzdGF0aWMgamJvb2xl YW4gaXNUcmFuc2llbnQgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ZvbGF0aWxlIChqaW50 KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50KTsKcHVibGlj OgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqdG9TdHJpbmcgKGppbnQsIDo6 amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQg UFVCTElDID0gMUw7CiAgc3RhdGljIGNvbnN0IGppbnQgUFJJVkFURSA9IDJMOwogIHN0YXRpYyBj b25zdCBqaW50IFBST1RFQ1RFRCA9IDRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUQVRJQyA9IDhM OwogIHN0YXRpYyBjb25zdCBqaW50IEZJTkFMID0gMTZMOwogIHN0YXRpYyBjb25zdCBqaW50IFNZ TkNIUk9OSVpFRCA9IDMyTDsKICBzdGF0aWMgY29uc3QgamludCBWT0xBVElMRSA9IDY0TDsKICBz dGF0aWMgY29uc3QgamludCBUUkFOU0lFTlQgPSAxMjhMOwogIHN0YXRpYyBjb25zdCBqaW50IE5B VElWRSA9IDI1Nkw7CiAgc3RhdGljIGNvbnN0IGppbnQgSU5URVJGQUNFID0gNTEyTDsKICBzdGF0 aWMgY29uc3QgamludCBBQlNUUkFDVCA9IDEwMjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUUklD VCA9IDIwNDhMOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQgU1VQRVIgPSAzMkw7CiAgc3Rh dGljIGNvbnN0IGppbnQgQUxMX0ZMQUdTID0gNDA5NUw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2 YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZh L2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbi5oIiAx CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGph dmEKICB7CiAgICBuYW1lc3BhY2Ugc2VjdXJpdHkKICAgIHsKICAgICAgY2xhc3MgUHJvdGVjdGlv bkRvbWFpbjsKICAgICAgY2xhc3MgUGVybWlzc2lvbjsKICAgICAgY2xhc3MgUGVybWlzc2lvbkNv bGxlY3Rpb247CiAgICAgIGNsYXNzIENvZGVTb3VyY2U7CiAgICB9CiAgfQp9OwoKY2xhc3MgOjpq YXZhOjpzZWN1cml0eTo6UHJvdGVjdGlvbkRvbWFpbiA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9i amVjdAp7CnB1YmxpYzoKICBQcm90ZWN0aW9uRG9tYWluICg6OmphdmE6OnNlY3VyaXR5OjpDb2Rl U291cmNlICosIDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICopOwogIDo6 amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKmdldENvZGVTb3VyY2UgKCkgeyByZXR1cm4gY29k ZV9zb3VyY2U7IH0KICA6OmphdmE6OnNlY3VyaXR5OjpQZXJtaXNzaW9uQ29sbGVjdGlvbiAqZ2V0 UGVybWlzc2lvbnMgKCkgeyByZXR1cm4gcGVybXM7IH0KICB2aXJ0dWFsIGpib29sZWFuIGltcGxp ZXMgKDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb24gKik7CiAgdmlydHVhbCA6OmphdmE6Omxh bmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6 U3RyaW5nICpsaW5lc2VwOwogIDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKmNvZGVfc291 cmNlOwogIDo6amF2YTo6c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICpwZXJtczsKcHVi bGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMjIgIi4uLy4u Ly4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCgoKZXh0ZXJuICJDIiB2b2lkIF9K dl9Jbml0Q2xhc3MgKGpjbGFzcyBrbGFzcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJD bGFzc2VzIChqY2xhc3MgKmNsYXNzZXMpOwoKCmV4dGVybiAiQyIgdm9pZCAqX0p2X0xvb2t1cElu dGVyZmFjZU1ldGhvZElkeCAoamNsYXNzIGtsYXNzLCBqY2xhc3MgaWZhY2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1ldGhfaWR4KTsKCgoKCmVu dW0KewogIEpWX1NUQVRFX05PVEhJTkcgPSAwLAoKICBKVl9TVEFURV9QUkVMT0FESU5HID0gMSwK ICBKVl9TVEFURV9MT0FESU5HID0gMywKICBKVl9TVEFURV9MT0FERUQgPSA1LAoKICBKVl9TVEFU RV9DT01QSUxFRCA9IDYsCgogIEpWX1NUQVRFX1BSRVBBUkVEID0gNywKICBKVl9TVEFURV9MSU5L RUQgPSA5LAoKICBKVl9TVEFURV9JTl9QUk9HUkVTUyA9IDEwLAogIEpWX1NUQVRFX0RPTkUgPSAx MiwKCiAgSlZfU1RBVEVfRVJST1IgPSAxNAp9OwoKc3RydWN0IF9Kdl9GaWVsZDsKc3RydWN0IF9K dl9WVGFibGU7CnVuaW9uIF9Kdl93b3JkOwpzdHJ1Y3QgX0p2X0FycmF5VlRhYmxlOwoKc3RydWN0 IF9Kdl9Db25zdGFudHMKewogIGppbnQgc2l6ZTsKICBqYnl0ZSAqdGFnczsKICBfSnZfd29yZCAq ZGF0YTsKfTsKCnN0cnVjdCBfSnZfTWV0aG9kCnsKCiAgX0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAg X0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlOwoKICBfSnZfdXNob3J0IGFjY2ZsYWdzOwoKICBfSnZf dXNob3J0IGluZGV4OwoKICB2b2lkICpuY29kZTsKCgogIF9Kdl9VdGY4Q29uc3QgKip0aHJvd3M7 CgogIF9Kdl9NZXRob2QgKmdldE5leHRNZXRob2QgKCkKICB7IHJldHVybiB0aGlzICsgMTsgfQp9 OwoKCnVuaW9uIF9Kdl9JRGlzcGF0Y2hUYWJsZQp7CiAgc3RydWN0CiAgewoKICAgIGpzaG9ydCBp aW5kZXg7CiAgICBqc2hvcnQgaXRhYmxlX2xlbmd0aDsKCiAgICB2b2lkICoqaXRhYmxlOwogIH0g Y2xzOwoKICBzdHJ1Y3QKICB7CgogICAganNob3J0ICppb2Zmc2V0czsKICB9IGlmYWNlOwp9OwoK CnN0cnVjdCBfSnZfaWZhY2VzCnsKICBqY2xhc3MgKmxpc3Q7CiAganNob3J0IGxlbjsKICBqc2hv cnQgY291bnQ7Cn07CgpzdHJ1Y3QgX0p2X01ldGhvZFN5bWJvbAp7CiAgX0p2X1V0ZjhDb25zdCAq Y2xhc3NfbmFtZTsKICBfSnZfVXRmOENvbnN0ICpuYW1lOwogIF9Kdl9VdGY4Q29uc3QgKnNpZ25h dHVyZTsKfTsKCnN0cnVjdCBfSnZfT2Zmc2V0VGFibGUKewogIGppbnQgc3RhdGU7CiAgamludCBv ZmZzZXRzW107Cn07CgoKCgoKY2xhc3MgamF2YTo6bGFuZzo6Q2xhc3MgOiBwdWJsaWMgamF2YTo6 bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIHN0YXRpYyBqY2xhc3MgZm9yTmFtZSAoanN0cmluZyBj bGFzc05hbWUsIGpib29sZWFuIGluaXRpYWxpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBq YXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKICBzdGF0aWMgamNsYXNzIGZvck5hbWUg KGpzdHJpbmcgY2xhc3NOYW1lKTsKICBKQXJyYXk8amNsYXNzPiAqZ2V0Q2xhc3NlcyAodm9pZCk7 CgogIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpnZXRDbGFzc0xvYWRlciAodm9pZCk7CgogIGph dmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICpnZXRDb25zdHJ1Y3RvciAoSkFycmF5PGpj bGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICo+ICpn ZXRDb25zdHJ1Y3RvcnMgKHZvaWQpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9y ICpnZXREZWNsYXJlZENvbnN0cnVjdG9yIChKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2 YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4gKmdldERlY2xhcmVkQ29uc3RydWN0b3Jz ICh2b2lkKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqZ2V0RGVjbGFyZWRGaWVsZCAo anN0cmluZyk7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpnZXREZWNs YXJlZEZpZWxkcyAodm9pZCk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXREZWNs YXJlZE1ldGhvZCAoanN0cmluZywgSkFycmF5PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxh bmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqZ2V0RGVjbGFyZWRNZXRob2RzICh2b2lkKTsKCiAgSkFy cmF5PGpjbGFzcz4gKmdldERlY2xhcmVkQ2xhc3NlcyAodm9pZCk7CiAgamNsYXNzIGdldERlY2xh cmluZ0NsYXNzICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldEZpZWxk IChqc3RyaW5nKTsKcHJpdmF0ZToKICBqaW50IF9nZXRGaWVsZHMgKEpBcnJheTxqYXZhOjpsYW5n OjpyZWZsZWN0OjpGaWVsZCAqPiAqcmVzdWx0LCBqaW50IG9mZnNldCk7CiAgSkFycmF5PGphdmE6 Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9yICo+ICpfZ2V0Q29uc3RydWN0b3JzIChqYm9vbGVh bik7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldEZpZWxkIChqc3RyaW5nLCBqaW50 KTsKICBqaW50IF9nZXRNZXRob2RzIChKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9k ICo+ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgamludCBvZmZzZXQpOwogIGphdmE6Omxh bmc6OnJlZmxlY3Q6OkZpZWxkICpnZXRQcml2YXRlRmllbGQgKGpzdHJpbmcpOwogIGphdmE6Omxh bmc6OnJlZmxlY3Q6Ok1ldGhvZCAqZ2V0UHJpdmF0ZU1ldGhvZCAoanN0cmluZywgSkFycmF5PGpj bGFzcz4gKik7CiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21haW4gKmdldFByb3RlY3Rp b25Eb21haW4wICgpOwoKcHVibGljOgogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVs ZCAqPiAqZ2V0RmllbGRzICh2b2lkKTsKCiAgSkFycmF5PGpjbGFzcz4gKmdldEludGVyZmFjZXMg KHZvaWQpOwoKICB2b2lkIGdldFNpZ25hdHVyZSAoamF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICpi dWZmZXIpOwogIHN0YXRpYyBqc3RyaW5nIGdldFNpZ25hdHVyZSAoSkFycmF5PGpjbGFzcz4gKiwg amJvb2xlYW4gaXNfY29uc3RydWN0b3IpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAq Z2V0TWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFu Zzo6cmVmbGVjdDo6TWV0aG9kICo+ICpnZXRNZXRob2RzICh2b2lkKTsKCiAgaW5saW5lIGppbnQg Z2V0TW9kaWZpZXJzICh2b2lkKQogICAgewogICAgICByZXR1cm4gYWNjZmxhZ3M7CiAgICB9Cgog IGpzdHJpbmcgZ2V0TmFtZSAodm9pZCk7CgogIGphdmE6Om5ldDo6VVJMICpnZXRSZXNvdXJjZSAo anN0cmluZyByZXNvdXJjZU5hbWUpOwogIGphdmE6OmlvOjpJbnB1dFN0cmVhbSAqZ2V0UmVzb3Vy Y2VBc1N0cmVhbSAoanN0cmluZyByZXNvdXJjZU5hbWUpOwogIEpBcnJheTxqb2JqZWN0PiAqZ2V0 U2lnbmVycyAodm9pZCk7CgogIGlubGluZSBqY2xhc3MgZ2V0U3VwZXJjbGFzcyAodm9pZCkKICAg IHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3M7CiAgICB9CgogIGlubGluZSBqYm9vbGVhbiBpc0Fy cmF5ICh2b2lkKQogICAgewogICAgICByZXR1cm4gbmFtZS0+ZGF0YVswXSA9PSAnWyc7CiAgICB9 CgogIGlubGluZSBqY2xhc3MgZ2V0Q29tcG9uZW50VHlwZSAodm9pZCkKICAgIHsKICAgICAgcmV0 dXJuIGlzQXJyYXkgKCkgPyAoKiAoamNsYXNzICopICZtZXRob2RzKSA6IDA7CiAgICB9CgogIGpi b29sZWFuIGlzQXNzaWduYWJsZUZyb20gKGpjbGFzcyBjbHMpOwogIGpib29sZWFuIGlzSW5zdGFu Y2UgKGpvYmplY3Qgb2JqKTsKCiAgaW5saW5lIGpib29sZWFuIGlzSW50ZXJmYWNlICh2b2lkKQog IHsKICAgIHJldHVybiAoYWNjZmxhZ3MgJiBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNb2RpZmllcjo6 SU5URVJGQUNFKSAhPSAwOwogIH0KCiAgaW5saW5lIGpib29sZWFuIGlzUHJpbWl0aXZlICh2b2lk KQogICAgewogICAgICByZXR1cm4gdnRhYmxlID09ICgoX0p2X1ZUYWJsZSAqKSAtMSk7CiAgICB9 CgogIGpvYmplY3QgbmV3SW5zdGFuY2UgKHZvaWQpOwogIGpzdHJpbmcgdG9TdHJpbmcgKHZvaWQp OwoKCiAgamludCBzaXplICh2b2lkKQogICAgewogICAgICByZXR1cm4gc2l6ZV9pbl9ieXRlczsK ICAgIH0KCgogIHZvaWQgZmluYWxpemUgKCk7CgoKCiAgQ2xhc3MgKCk7CgogIHN0YXRpYyBqYXZh OjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cgpwcml2YXRlOgoKICB2b2lkIGNoZWNrTWVtYmVyQWNjZXNz IChqaW50IGZsYWdzKTsKCiAgdm9pZCBpbml0aWFsaXplQ2xhc3MgKHZvaWQpOwoKCiAgZnJpZW5k IF9Kdl9NZXRob2QgKl9Kdl9HZXRNZXRob2RMb2NhbCAoamNsYXNzIGtsYXNzLCBfSnZfVXRmOENv bnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9V dGY4Q29uc3QgKnNpZ25hdHVyZSk7CiAgZnJpZW5kIGpib29sZWFuIF9Kdl9Jc0Fzc2lnbmFibGVG cm9tKGpjbGFzcywgamNsYXNzKTsKICBmcmllbmQgamJvb2xlYW4gX0p2X0ludGVyZmFjZUFzc2ln bmFibGVGcm9tIChqY2xhc3MsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9Mb29rdXBJbnRl cmZhY2VNZXRob2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWV0aG9kX2lkeCk7CgogIGlubGlu ZSBmcmllbmQgdm9pZAogIF9Kdl9Jbml0Q2xhc3MgKGpjbGFzcyBrbGFzcykKICB7CiAgICBpZiAo X19idWlsdGluX2V4cGVjdCAoa2xhc3MtPnN0YXRlID09IEpWX1NUQVRFX0RPTkUsIHRydWUpKQog ICAgICByZXR1cm47CiAgICBrbGFzcy0+aW5pdGlhbGl6ZUNsYXNzICgpOwogIH0KCiAgZnJpZW5k IF9Kdl9NZXRob2QqIF9Kdl9Mb29rdXBEZWNsYXJlZE1ldGhvZCAoamNsYXNzLCBfSnZfVXRmOENv bnN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2 X1V0ZjhDb25zdCopOwogIGZyaWVuZCBqZmllbGRJRCBKdkdldEZpcnN0SW5zdGFuY2VGaWVsZCAo amNsYXNzKTsKICBmcmllbmQgamludCBKdk51bUluc3RhbmNlRmllbGRzIChqY2xhc3MpOwogIGZy aWVuZCBqZmllbGRJRCBKdkdldEZpcnN0U3RhdGljRmllbGQgKGpjbGFzcyk7CiAgZnJpZW5kIGpp bnQgSnZOdW1TdGF0aWNGaWVsZHMgKGpjbGFzcyk7CgogIGZyaWVuZCBqb2JqZWN0IF9Kdl9BbGxv Y09iamVjdCAoamNsYXNzLCBqaW50KTsKICBmcmllbmQgdm9pZCAqX0p2X0FsbG9jT2JqIChqaW50 LCBqY2xhc3MpOwogIGZyaWVuZCB2b2lkICpfSnZfQWxsb2NQdHJGcmVlT2JqIChqaW50LCBqY2xh c3MpOwogIGZyaWVuZCB2b2lkICpfSnZfQWxsb2NBcnJheSAoamludCwgamNsYXNzKTsKCiAgZnJp ZW5kIGpvYmplY3QgX0p2X0pOSV9Ub1JlZmxlY3RlZEZpZWxkIChfSnZfSk5JRW52ICosIGpjbGFz cywgamZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq Ym9vbGVhbik7CiAgZnJpZW5kIGpvYmplY3QgX0p2X0pOSV9Ub1JlZmxlY3RlZE1ldGhvZCAoX0p2 X0pOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqYm9vbGVhbik7CiAgZnJpZW5kIGpmaWVsZElEIF9Kdl9Gcm9tUmVm bGVjdGVkRmllbGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICopOwoKICBmcmllbmQgam1l dGhvZElEIF9Kdl9Gcm9tUmVmbGVjdGVkTWV0aG9kIChqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRo b2QgKik7CiAgZnJpZW5kIGptZXRob2RJRCBfSnZfRnJvbVJlZmxlY3RlZENvbnN0cnVjdG9yIChq YXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqKTsKICBmcmllbmQgamludCBKdk51bU1l dGhvZHMgKGpjbGFzcyk7CiAgZnJpZW5kIGptZXRob2RJRCBKdkdldEZpcnN0TWV0aG9kIChqY2xh c3MpOwoKCiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyOwoKICBmcmllbmQg Y2xhc3MgamF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVhbTsKICBmcmllbmQgY2xhc3MgamF2YTo6 aW86Ok9iamVjdElucHV0U3RyZWFtOwogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0U3Ry ZWFtQ2xhc3M7CgogIGZyaWVuZCB2b2lkIF9Kdl9XYWl0Rm9yU3RhdGUgKGpjbGFzcywgaW50KTsK ICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzc2VzIChqY2xhc3MgKmNsYXNzZXMpOwogIGZy aWVuZCB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzSG9va0RlZmF1bHQgKGpjbGFzcyBrbGFzcyk7CiAg ZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVySW5pdGlhdGluZ0xvYWRlciAoamNsYXNzLGphdmE6Omxh bmc6OkNsYXNzTG9hZGVyKik7CiAgZnJpZW5kIHZvaWQgX0p2X1VucmVnaXN0ZXJDbGFzcyAoamNs YXNzKTsKICBmcmllbmQgamNsYXNzIF9Kdl9GaW5kQ2xhc3MgKF9Kdl9VdGY4Q29uc3QgKm5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAq bG9hZGVyKTsKICBmcmllbmQgamNsYXNzIF9Kdl9GaW5kQ2xhc3NJbkNhY2hlIChfSnZfVXRmOENv bnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxh bmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCB2b2lkIF9Kdl9OZXdBcnJheUNsYXNz IChqY2xhc3MgZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6 bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0p2X1ZUYWJsZSAqYXJyYXlfdnRhYmxlID0gMCk7CiAgZnJpZW5kIGpjbGFzcyBfSnZfTmV3 Q2xhc3MgKF9Kdl9VdGY4Q29uc3QgKm5hbWUsIGpjbGFzcyBzdXBlcmNsYXNzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKICBm cmllbmQgdm9pZCBfSnZfSW5pdE5ld0NsYXNzRmllbGRzIChqY2xhc3Mga2xhc3MpOwoKCiAgZnJp ZW5kIHZvaWQgX0p2X0luaXRQcmltQ2xhc3MgKGpjbGFzcywgY2hhciAqLCBjaGFyLCBpbnQsIF9K dl9BcnJheVZUYWJsZSAqKTsKCiAgZnJpZW5kIHZvaWQgX0p2X1ByZXBhcmVDb21waWxlZENsYXNz IChqY2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9QcmVwYXJlQ29uc3RhbnRUaW1lVGFibGVzIChq Y2xhc3MpOwogIGZyaWVuZCBqc2hvcnQgX0p2X0dldEludGVyZmFjZXMgKGpjbGFzcywgX0p2X2lm YWNlcyAqKTsKICBmcmllbmQgdm9pZCBfSnZfR2VuZXJhdGVJVGFibGUgKGpjbGFzcywgX0p2X2lm YWNlcyAqLCBqc2hvcnQgKik7CiAgZnJpZW5kIGpzdHJpbmcgX0p2X0dldE1ldGhvZFN0cmluZyhq Y2xhc3MsIF9Kdl9VdGY4Q29uc3QgKik7CiAgZnJpZW5kIGpzaG9ydCBfSnZfQXBwZW5kUGFydGlh bElUYWJsZSAoamNsYXNzLCBqY2xhc3MsIHZvaWQgKiosIGpzaG9ydCk7CiAgZnJpZW5kIGpzaG9y dCBfSnZfRmluZElJbmRleCAoamNsYXNzICosIGpzaG9ydCAqLCBqc2hvcnQpOwogIGZyaWVuZCB2 b2lkIF9Kdl9MaW5rT2Zmc2V0VGFibGUgKGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X0xheW91 dFZUYWJsZU1ldGhvZHMgKGpjbGFzcyBrbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1NldFZUYWJs ZUVudHJpZXMgKGpjbGFzcywgX0p2X1ZUYWJsZSAqKTsKICBmcmllbmQgdm9pZCBfSnZfTWFrZVZU YWJsZSAoamNsYXNzKTsKCgoKICBpbmxpbmUgZnJpZW5kIGpjbGFzcwogIF9Kdl9HZXRBcnJheUNs YXNzIChqY2xhc3Mga2xhc3MsIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpCiAgewog ICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFrbGFzcy0+YXJyYXljbGFzcywgZmFsc2UpKQogICAg ICBfSnZfTmV3QXJyYXlDbGFzcyAoa2xhc3MsIGxvYWRlcik7CiAgICByZXR1cm4ga2xhc3MtPmFy cmF5Y2xhc3M7CiAgfQojIDM0NSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz LmgiCiAgZnJpZW5kIGNsYXNzIF9Kdl9CeXRlY29kZVZlcmlmaWVyOwoKCiAgamNsYXNzIG5leHQ7 CgogIF9Kdl9VdGY4Q29uc3QgKm5hbWU7CgogIF9Kdl91c2hvcnQgYWNjZmxhZ3M7CgogIGpjbGFz cyBzdXBlcmNsYXNzOwoKICBfSnZfQ29uc3RhbnRzIGNvbnN0YW50czsKCgogIF9Kdl9NZXRob2Qg Km1ldGhvZHM7CgoKICBqc2hvcnQgbWV0aG9kX2NvdW50OwoKICBqc2hvcnQgdnRhYmxlX21ldGhv ZF9jb3VudDsKCiAgX0p2X0ZpZWxkICpmaWVsZHM7CgogIGppbnQgc2l6ZV9pbl9ieXRlczsKCiAg anNob3J0IGZpZWxkX2NvdW50OwoKICBqc2hvcnQgc3RhdGljX2ZpZWxkX2NvdW50OwoKICBfSnZf VlRhYmxlICp2dGFibGU7CgogIF9Kdl9PZmZzZXRUYWJsZSAqb3RhYmxlOwoKICBfSnZfTWV0aG9k U3ltYm9sICpvdGFibGVfc3ltczsKCiAgamNsYXNzICppbnRlcmZhY2VzOwoKICBqYXZhOjpsYW5n OjpDbGFzc0xvYWRlciAqbG9hZGVyOwoKICBqc2hvcnQgaW50ZXJmYWNlX2NvdW50OwoKICBqYnl0 ZSBzdGF0ZTsKCgogIGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkOwoKICBqc2hvcnQgZGVwdGg7 CgogIGpjbGFzcyAqYW5jZXN0b3JzOwoKICBfSnZfSURpc3BhdGNoVGFibGUgKmlkdDsKCiAgamNs YXNzIGFycmF5Y2xhc3M7CgogIGphdmE6OnNlY3VyaXR5OjpQcm90ZWN0aW9uRG9tYWluICpwcm90 ZWN0aW9uRG9tYWluOwp9OwojIDE4ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovY25pLmgiIDIK CgoKCgpleHRlcm4gaW5saW5lIGpvYmplY3QKSnZBbGxvY09iamVjdCAoamNsYXNzIGNscykKewog IHJldHVybiBfSnZfQWxsb2NPYmplY3QgKGNscywgY2xzLT5zaXplKCkpOwp9CgpleHRlcm4gaW5s aW5lIGpvYmplY3QKSnZBbGxvY09iamVjdCAoamNsYXNzIGNscywganNpemUgc3opCnsKICByZXR1 cm4gX0p2X0FsbG9jT2JqZWN0IChjbHMsIHN6KTsKfQoKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9O ZXdTdHJpbmdVVEYgKGNvbnN0IGNoYXIgKmJ5dGVzKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Jbml0 Q2xhc3MgKGpjbGFzcyk7CgpleHRlcm4gaW5saW5lIHZvaWQKSnZJbml0Q2xhc3MgKGpjbGFzcyBj bHMpCnsKICByZXR1cm4gX0p2X0luaXRDbGFzcyAoY2xzKTsKfQoKZXh0ZXJuIGlubGluZSBqc3Ry aW5nCkp2QWxsb2NTdHJpbmcgKGpzaXplIHN6KQp7CiAgcmV0dXJuIF9Kdl9BbGxvY1N0cmluZyAo c3opOwp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmcgKGNvbnN0IGpjaGFyICpj aGFycywganNpemUgbGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmcgKGNoYXJzLCBsZW4pOwp9 CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIgKmJ5 dGVzLCBqc2l6ZSBsZW4pCnsKICByZXR1cm4gX0p2X05ld1N0cmluZ0xhdGluMSAoYnl0ZXMsIGxl bik7Cn0KCmV4dGVybiBpbmxpbmUganN0cmluZwpKdk5ld1N0cmluZ0xhdGluMSAoY29uc3QgY2hh ciAqYnl0ZXMpCnsKICByZXR1cm4gX0p2X05ld1N0cmluZ0xhdGluMSAoYnl0ZXMsIHN0cmxlbiAo Ynl0ZXMpKTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhciAqCl9Kdl9HZXRTdHJpbmdDaGFycyAoanN0 cmluZyBzdHIpCnsKICByZXR1cm4gKGpjaGFyKikoKGNoYXIqKSBzdHItPmRhdGEgKyBzdHItPmJv ZmZzZXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyKgpKdkdldFN0cmluZ0NoYXJzIChqc3RyaW5n IHN0cikKewogIHJldHVybiBfSnZfR2V0U3RyaW5nQ2hhcnMgKHN0cik7Cn0KCmV4dGVybiBpbmxp bmUganNpemUKSnZHZXRTdHJpbmdVVEZMZW5ndGggKGpzdHJpbmcgc3RyaW5nKQp7CiAgcmV0dXJu IF9Kdl9HZXRTdHJpbmdVVEZMZW5ndGggKHN0cmluZyk7Cn0KCmV4dGVybiBpbmxpbmUganNpemUK SnZHZXRTdHJpbmdVVEZSZWdpb24gKGpzdHJpbmcgc3RyLCBqc2l6ZSBzdGFydCwganNpemUgbGVu LCBjaGFyICpidWYpCnsKICByZXR1cm4gX0p2X0dldFN0cmluZ1VURlJlZ2lvbiAoc3RyLCBzdGFy dCwgbGVuLCBidWYpOwp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdVVEYgKGNv bnN0IGNoYXIgKmJ5dGVzKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdVVEYgKGJ5dGVzKTsKfQoK Y2xhc3MgSnZTeW5jaHJvbml6ZQp7CnByaXZhdGU6CiAgam9iamVjdCBvYmo7CnB1YmxpYzoKICBK dlN5bmNocm9uaXplIChjb25zdCBqb2JqZWN0ICZvKSA6IG9iaiAobykKICAgIHsgX0p2X01vbml0 b3JFbnRlciAob2JqKTsgfQogIH5KdlN5bmNocm9uaXplICgpCiAgICB7IF9Kdl9Nb25pdG9yRXhp dCAob2JqKTsgfQp9OwoKCmV4dGVybiBpbmxpbmUgdm9pZCAqCkp2TWFsbG9jIChqc2l6ZSBzaXpl KQp7CiAgcmV0dXJuIF9Kdl9NYWxsb2MgKHNpemUpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQKSnZG cmVlICh2b2lkICpwdHIpCnsKICByZXR1cm4gX0p2X0ZyZWUgKHB0cik7Cn0KCmV4dGVybiBpbmxp bmUgamludApKdkNyZWF0ZUphdmFWTSAodm9pZCogdm1fYXJncykKewogIHJldHVybiBfSnZfQ3Jl YXRlSmF2YVZNICh2bV9hcmdzKTsKfQoKZXh0ZXJuIGlubGluZSBqYXZhOjpsYW5nOjpUaHJlYWQq Ckp2QXR0YWNoQ3VycmVudFRocmVhZCAoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRH cm91cCogZ3JvdXApCnsKICByZXR1cm4gX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQgKG5hbWUsIGdy b3VwKTsKfQoKZXh0ZXJuIGlubGluZSBqaW50Ckp2RGV0YWNoQ3VycmVudFRocmVhZCAodm9pZCkK ewogIHJldHVybiBfSnZfRGV0YWNoQ3VycmVudFRocmVhZCAoKTsKfQojIDU0ICIuLi8uLi8uLi9n Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgojIDEg ImphdmEvaW8vSU9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImph dmEvbGFuZy9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEv bGFuZy9UaHJvd2FibGUuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpjbGFzcyA6Omph dmE6Omxhbmc6OlRocm93YWJsZSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1Ymxp YzoKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlICpmaWxsSW5TdGFja1RyYWNlICgp OwogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldExvY2FsaXplZE1lc3NhZ2UgKCk7 CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0TWVzc2FnZSAoKSB7IHJldHVybiBk ZXRhaWxNZXNzYWdlOyB9CiAgdmlydHVhbCB2b2lkIHByaW50U3RhY2tUcmFjZSAoKTsKICB2aXJ0 dWFsIHZvaWQgcHJpbnRTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFN0cmVhbSAqKTsKICB2 aXJ0dWFsIHZvaWQgcHJpbnRTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFdyaXRlciAqKTsK ICBUaHJvd2FibGUgKCk7CiAgVGhyb3dhYmxlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2 aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0ZToKICB2b2lk IHByaW50UmF3U3RhY2tUcmFjZSAoOjpqYXZhOjppbzo6UHJpbnRXcml0ZXIgKik7CiAgOjpqYXZh OjpsYW5nOjpTdHJpbmcgKmRldGFpbE1lc3NhZ2U7CnB1YmxpYzoKICBzdGF0aWMgamJvb2xlYW4g dHJhY2VfZW5hYmxlZDsKcHJpdmF0ZToKICBqYnl0ZUFycmF5IHN0YWNrVHJhY2U7CiAgc3RhdGlj IGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMzA0MjY4NjA1NTY1ODA0NzI4NUxMOwpw dWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZh L2xhbmcvRXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6RXhjZXB0aW9uIDogcHVi bGljIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlCnsKcHVibGljOgogIEV4Y2VwdGlvbiAoKTsKICBF eGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0 IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMzM4NzUxNjk5MzEyNDIyOTk0OExMOwpwdWJsaWM6 CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2lvL0lP RXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6aW86OklPRXhjZXB0aW9uIDogcHVibGljIDo6 amF2YTo6bGFuZzo6RXhjZXB0aW9uCnsKcHVibGljOgogIElPRXhjZXB0aW9uICgpOwogIElPRXhj ZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6 Q2xhc3MgY2xhc3MkOwp9OwojIDU1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQ bGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgojIDEgImphdmEvaW8vRmlsZURlc2NyaXB0b3Iu aCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpjbGFzcyA6OmphdmE6OmlvOjpGaWxlRGVz Y3JpcHRvciA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICB2b2lkIHN5 bmMgKCk7CiAgamJvb2xlYW4gdmFsaWQgKCk7CiAgRmlsZURlc2NyaXB0b3IgKCk7CnB1YmxpYzoK ICBGaWxlRGVzY3JpcHRvciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamludCBv cGVuICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50KTsKICB2b2lkIHdyaXRlIChqaW50KTsK ICB2b2lkIHdyaXRlIChqYnl0ZUFycmF5LCBqaW50LCBqaW50KTsKICB2b2lkIGNsb3NlICgpOwog IGppbnQgc2VlayAoamxvbmcsIGppbnQsIGpib29sZWFuKTsKICBqbG9uZyBsZW5ndGggKCk7CiAg amxvbmcgZ2V0RmlsZVBvaW50ZXIgKCk7CiAgamludCByZWFkICgpOwogIGppbnQgcmVhZCAoamJ5 dGVBcnJheSwgamludCwgamludCk7CiAgamludCBhdmFpbGFibGUgKCk7CnB1YmxpYzoKICB2b2lk IGZpbmFsaXplICgpOwpwdWJsaWM6CiAgRmlsZURlc2NyaXB0b3IgKGppbnQpOwpwdWJsaWM6CiAg c3RhdGljIDo6amF2YTo6aW86OkZpbGVEZXNjcmlwdG9yICppbjsKICBzdGF0aWMgOjpqYXZhOjpp bzo6RmlsZURlc2NyaXB0b3IgKm91dDsKICBzdGF0aWMgOjpqYXZhOjppbzo6RmlsZURlc2NyaXB0 b3IgKmVycjsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqaW50IFJFQUQgPSAxTDsKICBzdGF0aWMg Y29uc3QgamludCBXUklURSA9IDJMOwogIHN0YXRpYyBjb25zdCBqaW50IEFQUEVORCA9IDRMOwog IHN0YXRpYyBjb25zdCBqaW50IEVYQ0wgPSA4TDsKICBzdGF0aWMgY29uc3QgamludCBTRVQgPSAw TDsKICBzdGF0aWMgY29uc3QgamludCBDVVIgPSAxTDsKcHJpdmF0ZToKICBqaW50IGZkOwpwdWJs aWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA1NiAiLi4vLi4v Li4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIK IyAxICJqYXZhL2lvL0ludGVycnVwdGVkSU9FeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50 ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6aW86OkludGVycnVwdGVkSU9FeGNlcHRpb24gOiBwdWJs aWMgOjpqYXZhOjppbzo6SU9FeGNlcHRpb24KewpwdWJsaWM6CiAgSW50ZXJydXB0ZWRJT0V4Y2Vw dGlvbiAoKTsKICBJbnRlcnJ1cHRlZElPRXhjZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAq KTsKcHVibGljOgogIEludGVycnVwdGVkSU9FeGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5n ICosIGppbnQpOwpwcml2YXRlOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlE ID0gNDAyMDU2ODQ2MDcyNzUwMDU2N0xMOwpwdWJsaWM6CiAgamludCBieXRlc1RyYW5zZmVycmVk OwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNTcgIi4uLy4uLy4u L2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMg MSAiamF2YS9uZXQvQmluZEV4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCiMg MSAiamF2YS9uZXQvU29ja2V0RXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK CgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBuZXQK ICAgIHsKICAgICAgY2xhc3MgU29ja2V0RXhjZXB0aW9uOwogICAgfQogIH0KfTsKCmNsYXNzIDo6 amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gOiBwdWJsaWMgOjpqYXZhOjppbzo6SU9FeGNlcHRp b24KewpwdWJsaWM6CiAgU29ja2V0RXhjZXB0aW9uICgpOwogIFNvY2tldEV4Y2VwdGlvbiAoOjpq YXZhOjpsYW5nOjpTdHJpbmcgKik7CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNz JDsKfTsKIyA5ICJqYXZhL25ldC9CaW5kRXhjZXB0aW9uLmgiIDIKCmV4dGVybiAiSmF2YSIKewog IG5hbWVzcGFjZSBqYXZhCiAgewogICAgbmFtZXNwYWNlIG5ldAogICAgewogICAgICBjbGFzcyBC aW5kRXhjZXB0aW9uOwogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bmV0OjpCaW5kRXhjZXB0 aW9uIDogcHVibGljIDo6amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24KewpwdWJsaWM6CiAgQmlu ZEV4Y2VwdGlvbiAoKTsKICBCaW5kRXhjZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsK CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDU4ICIuLi8uLi8uLi9n Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIgMgoKIyAx ICJqYXZhL25ldC9QbGFpbkRhdGFncmFtU29ja2V0SW1wbC5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl cmZhY2UKCiMgMSAiamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXRJbXBsLmgiIDEKCgoKCgojcHJhZ21h IGludGVyZmFjZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5h bWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgRGF0YWdyYW1Tb2NrZXRJbXBsOwogICAgICBj bGFzcyBEYXRhZ3JhbVBhY2tldDsKICAgICAgY2xhc3MgSW5ldEFkZHJlc3M7CiAgICB9CiAgfQp9 OwoKY2xhc3MgOjpqYXZhOjpuZXQ6OkRhdGFncmFtU29ja2V0SW1wbCA6IHB1YmxpYyA6OmphdmE6 Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBEYXRhZ3JhbVNvY2tldEltcGwgKCk7CnB1YmxpYzoK ICB2aXJ0dWFsIHZvaWQgYmluZCAoamludCwgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopID0g MDsKICB2aXJ0dWFsIHZvaWQgY2xvc2UgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBjcmVhdGUgKCkg PSAwOwogIHZpcnR1YWwgamludCBwZWVrICg6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKikgPSAw OwogIHZpcnR1YWwgdm9pZCBzZW5kICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKikgPSAw OwogIHZpcnR1YWwgdm9pZCByZWNlaXZlICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKikg PSAwOwogIHZpcnR1YWwgdm9pZCBzZXRUVEwgKGpieXRlKSA9IDA7CiAgdmlydHVhbCBqYnl0ZSBn ZXRUVEwgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBzZXRUaW1lVG9MaXZlIChqaW50KSA9IDA7CiAg dmlydHVhbCBqaW50IGdldFRpbWVUb0xpdmUgKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBqb2luICg6 OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKikgPSAwOwogIHZpcnR1YWwgdm9pZCBsZWF2ZSAoOjpq YXZhOjpuZXQ6OkluZXRBZGRyZXNzICopID0gMDsKICB2aXJ0dWFsIDo6amF2YTo6aW86OkZpbGVE ZXNjcmlwdG9yICpnZXRGaWxlRGVzY3JpcHRvciAoKSB7IHJldHVybiBmZDsgfQogIHZpcnR1YWwg amludCBnZXRMb2NhbFBvcnQgKCkgeyByZXR1cm4gbG9jYWxQb3J0OyB9CiAgamludCBsb2NhbFBv cnQ7CiAgOjpqYXZhOjppbzo6RmlsZURlc2NyaXB0b3IgKmZkOwpwdWJsaWM6CgogIHN0YXRpYyA6 OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL25ldC9QbGFpbkRhdGFncmFt U29ja2V0SW1wbC5oIiAyCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAg IG5hbWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgUGxhaW5EYXRhZ3JhbVNvY2tldEltcGw7 CiAgICAgIGNsYXNzIERhdGFncmFtUGFja2V0OwogICAgICBjbGFzcyBJbmV0QWRkcmVzczsKICAg IH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Om5ldDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwgOiBw dWJsaWMgOjpqYXZhOjpuZXQ6OkRhdGFncmFtU29ja2V0SW1wbAp7CnB1YmxpYzoKICBQbGFpbkRh dGFncmFtU29ja2V0SW1wbCAoKTsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBiaW5kIChqaW50LCA6 OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CiAgdmlydHVhbCB2b2lkIGNyZWF0ZSAoKTsKICB2 aXJ0dWFsIGppbnQgcGVlayAoOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopOwogIHZpcnR1YWwg dm9pZCBzZXRUaW1lVG9MaXZlIChqaW50KTsKICB2aXJ0dWFsIGppbnQgZ2V0VGltZVRvTGl2ZSAo KTsKICB2aXJ0dWFsIHZvaWQgc2VuZCAoOjpqYXZhOjpuZXQ6OkRhdGFncmFtUGFja2V0ICopOwog IHZpcnR1YWwgdm9pZCByZWNlaXZlICg6OmphdmE6Om5ldDo6RGF0YWdyYW1QYWNrZXQgKik7CnB1 YmxpYzoKICB2aXJ0dWFsIHZvaWQgc2V0T3B0aW9uIChqaW50LCA6OmphdmE6Omxhbmc6Ok9iamVj dCAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXRPcHRpb24gKGppbnQpOwpw cml2YXRlOgogIHZvaWQgbWNhc3RHcnAgKDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqLCBqYm9v bGVhbik7CnB1YmxpYzoKICB2aXJ0dWFsIHZvaWQgY2xvc2UgKCk7CiAgdmlydHVhbCBqYnl0ZSBn ZXRUVEwgKCk7CiAgdmlydHVhbCB2b2lkIHNldFRUTCAoamJ5dGUpOwogIHZpcnR1YWwgdm9pZCBq b2luICg6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CiAgdmlydHVhbCB2b2lkIGxlYXZlICg6 OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKik7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBf SnZfVENQX05PREVMQVlfID0gMUw7CiAgc3RhdGljIGNvbnN0IGppbnQgX0p2X1NPX0JJTkRBRERS XyA9IDE1TDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09fUkVVU0VBRERSXyA9IDRMOwogIHN0 YXRpYyBjb25zdCBqaW50IF9Kdl9JUF9NVUxUSUNBU1RfSUZfID0gMTZMOwogIHN0YXRpYyBjb25z dCBqaW50IF9Kdl9TT19MSU5HRVJfID0gMTI4TDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09f VElNRU9VVF8gPSA0MTAyTDsKICBzdGF0aWMgY29uc3QgamludCBfSnZfU09fU05EQlVGXyA9IDQw OTdMOwogIHN0YXRpYyBjb25zdCBqaW50IF9Kdl9TT19SQ1ZCVUZfID0gNDA5OEw7CiAgamludCBm bnVtOwogIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqbG9jYWxBZGRyZXNzOwogIGppbnQgdGlt ZW91dDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMg NjAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJ bXBsLmNjIiAyCiMgMSAiamF2YS9uZXQvSW5ldEFkZHJlc3MuaCIgMQoKCgoKCiNwcmFnbWEgaW50 ZXJmYWNlCgoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVz cGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgSW5ldEFkZHJlc3M7CiAgICB9CiAgfQp9OwoKY2xh c3MgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0 CnsKcHJpdmF0ZToKICB2b2lkIHJlYWRPYmplY3QgKDo6amF2YTo6aW86Ok9iamVjdElucHV0U3Ry ZWFtICopOwogIHZvaWQgd3JpdGVPYmplY3QgKDo6amF2YTo6aW86Ok9iamVjdE91dHB1dFN0cmVh bSAqKTsKICBzdGF0aWMgamludCBnZXRGYW1pbHkgKGpieXRlQXJyYXkpOwpwdWJsaWM6CiAgSW5l dEFkZHJlc3MgKGpieXRlQXJyYXksIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAg amJvb2xlYW4gaXNNdWx0aWNhc3RBZGRyZXNzICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpn ZXRIb3N0TmFtZSAoKTsKICBqYnl0ZUFycmF5IGdldEFkZHJlc3MgKCk7CnByaXZhdGU6CiAgc3Rh dGljIEpBcnJheTwgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICo+ICphbGxvY0FycmF5IChqaW50 KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTZWN1cml0eUV4Y2VwdGlvbiAqY2hlY2tDb25uZWN0 ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGljOgogIDo6amF2YTo6bGFuZzo6U3RyaW5n ICpnZXRIb3N0QWRkcmVzcyAoKTsKICBqaW50IGhhc2hDb2RlICgpOwogIGpib29sZWFuIGVxdWFs cyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3Ry aW5nICgpOwpwcml2YXRlOgogIHN0YXRpYyBqYnl0ZUFycmF5IGF0b24gKDo6amF2YTo6bGFuZzo6 U3RyaW5nICopOwogIHN0YXRpYyBKQXJyYXk8IDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqPiAq bG9va3VwICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3Mg KiwgamJvb2xlYW4pOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAq Z2V0QnlOYW1lICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgSkFycmF5PCA6Omph dmE6Om5ldDo6SW5ldEFkZHJlc3MgKj4gKmdldEFsbEJ5TmFtZSAoOjpqYXZhOjpsYW5nOjpTdHJp bmcgKik7CnByaXZhdGU6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRMb2NhbEhv c3RuYW1lICgpOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqZ2V0 TG9jYWxIb3N0ICgpOwpwcml2YXRlOgogIHN0YXRpYyB2b2lkIGdldExvY2FsSG9zdCAoOjpqYXZh OjpsYW5nOjpTZWN1cml0eU1hbmFnZXIgKik7CiAgamludCBhZGRyZXNzOwpwdWJsaWM6CiAgamJ5 dGVBcnJheSBhZGRyOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpob3N0TmFtZTsKICBqaW50IGZh bWlseTsKcHJpdmF0ZToKICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDMy ODYzMTY3NjQ5MTAzMTY1MDdMTDsKcHVibGljOgogIHN0YXRpYyBqYnl0ZUFycmF5IHplcm9zOwog IHN0YXRpYyA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKkFOWV9JRjsKcHJpdmF0ZToKICBzdGF0 aWMgamJ5dGVBcnJheSBsb2NhbGhvc3RBZGRyZXNzOwogIHN0YXRpYyA6OmphdmE6Om5ldDo6SW5l dEFkZHJlc3MgKmxvY2FsaG9zdDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz cyBjbGFzcyQ7Cn07CiMgNjEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWlu RGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMSAiamF2YS9uZXQvRGF0YWdyYW1QYWNrZXQuaCIg MQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2Ug amF2YQogIHsKICAgIG5hbWVzcGFjZSBuZXQKICAgIHsKICAgICAgY2xhc3MgRGF0YWdyYW1QYWNr ZXQ7CiAgICAgIGNsYXNzIEluZXRBZGRyZXNzOwogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6 bmV0OjpEYXRhZ3JhbVBhY2tldCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1Ymxp YzoKICBEYXRhZ3JhbVBhY2tldCAoamJ5dGVBcnJheSwgamludCwgamludCk7CiAgRGF0YWdyYW1Q YWNrZXQgKGpieXRlQXJyYXksIGppbnQpOwogIERhdGFncmFtUGFja2V0IChqYnl0ZUFycmF5LCBq aW50LCBqaW50LCA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKiwgamludCk7CiAgRGF0YWdyYW1Q YWNrZXQgKGpieXRlQXJyYXksIGppbnQsIDo6amF2YTo6bmV0OjpJbmV0QWRkcmVzcyAqLCBqaW50 KTsKICA6OmphdmE6Om5ldDo6SW5ldEFkZHJlc3MgKmdldEFkZHJlc3MgKCk7CiAgamludCBnZXRQ b3J0ICgpOwogIGpieXRlQXJyYXkgZ2V0RGF0YSAoKTsKICBqaW50IGdldE9mZnNldCAoKTsKICBq aW50IGdldExlbmd0aCAoKTsKICB2b2lkIHNldEFkZHJlc3MgKDo6amF2YTo6bmV0OjpJbmV0QWRk cmVzcyAqKTsKICB2b2lkIHNldFBvcnQgKGppbnQpOwogIHZvaWQgc2V0RGF0YSAoamJ5dGVBcnJh eSk7CiAgdm9pZCBzZXREYXRhIChqYnl0ZUFycmF5LCBqaW50LCBqaW50KTsKICB2b2lkIHNldExl bmd0aCAoamludCk7CnByaXZhdGU6CiAgamJ5dGVBcnJheSBidWZmZXI7CiAgamludCBvZmZzZXQ7 CiAgamludCBsZW5ndGg7CiAgOjpqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICphZGRyZXNzOwogIGpp bnQgcG9ydDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07 CiMgNjIgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2Nr ZXRJbXBsLmNjIiAyCiMgMSAiamF2YS9sYW5nL0ludGVybmFsRXJyb3IuaCIgMQoKCgoKCiNwcmFn bWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yLmgiIDEKCgoK CgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvRXJyb3IuaCIgMQoKCgoKCiNwcmFn bWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6RXJyb3IgOiBwdWJsaWMgOjpqYXZh OjpsYW5nOjpUaHJvd2FibGUKewpwdWJsaWM6CiAgRXJyb3IgKCk7CiAgRXJyb3IgKDo6amF2YTo6 bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNp b25VSUQgPSA0OTgwMTk2NTA4Mjc3MjgwMzQyTEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6 bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDkgImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9y LmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6VmlydHVhbE1hY2hpbmVFcnJvciA6IHB1YmxpYyA6 OmphdmE6Omxhbmc6OkVycm9yCnsKcHVibGljOgogIFZpcnR1YWxNYWNoaW5lRXJyb3IgKCk7CiAg VmlydHVhbE1hY2hpbmVFcnJvciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBz dGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQxNjE5ODM5MjY1NzE1Njg2NzBM TDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAi amF2YS9sYW5nL0ludGVybmFsRXJyb3IuaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpJbnRlcm5h bEVycm9yIDogcHVibGljIDo6amF2YTo6bGFuZzo6VmlydHVhbE1hY2hpbmVFcnJvcgp7CnB1Ymxp YzoKICBJbnRlcm5hbEVycm9yICgpOwogIEludGVybmFsRXJyb3IgKDo6amF2YTo6bGFuZzo6U3Ry aW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAt OTA2MjU5MzQxNjEyNTU2MjM2NUxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs YXNzIGNsYXNzJDsKfTsKIyA2MyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxh aW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiIDIKCiMgMSAiamF2YS9sYW5nL0Jvb2xlYW4uaCIgMQoK CgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiA6IHB1 YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBCb29sZWFuIChqYm9vbGVhbik7 CiAgQm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gYm9vbGVhblZh bHVlICgpIHsgcmV0dXJuIHZhbHVlOyB9CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiAq dmFsdWVPZiAoamJvb2xlYW4pOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkJvb2xlYW4gKnZhbHVl T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgaGFzaENvZGUgKCk7CiAgamJvb2xl YW4gZXF1YWxzICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBzdGF0aWMgamJvb2xlYW4gZ2V0 Qm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6 U3RyaW5nICp0b1N0cmluZyAoamJvb2xlYW4pOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0 cmluZyAoKTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0g LTM2NjU4MDQxOTkwMTQzNjg1MzBMTDsKcHVibGljOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkJv b2xlYW4gKlRSVUU7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Qm9vbGVhbiAqRkFMU0U7CiAgc3Rh dGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgKlRZUEU7CnByaXZhdGU6CiAgamJvb2xlYW4gdmFsdWU7 CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZDsKcHVibGljOgoKICBz dGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNjUgIi4uLy4uLy4uL2djYy9s aWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMSAiamF2 YS9sYW5nL0ludGVnZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFu Zy9OdW1iZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFu Zzo6TnVtYmVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIHZpcnR1 YWwgamJ5dGUgYnl0ZVZhbHVlICgpOwogIHZpcnR1YWwganNob3J0IHNob3J0VmFsdWUgKCk7CiAg dmlydHVhbCBqaW50IGludFZhbHVlICgpID0gMDsKICB2aXJ0dWFsIGpsb25nIGxvbmdWYWx1ZSAo KSA9IDA7CiAgdmlydHVhbCBqZmxvYXQgZmxvYXRWYWx1ZSAoKSA9IDA7CiAgdmlydHVhbCBqZG91 YmxlIGRvdWJsZVZhbHVlICgpID0gMDsKICBOdW1iZXIgKCk7CnByaXZhdGU6CiAgc3RhdGljIGNv bnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtODc0MjQ0ODgyNDY1MjA3ODk2NUxMOwpwdWJs aWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2xh bmcvSW50ZWdlci5oIiAyCgpjbGFzcyA6OmphdmE6Omxhbmc6OkludGVnZXIgOiBwdWJsaWMgOjpq YXZhOjpsYW5nOjpOdW1iZXIKewpwdWJsaWM6CiAgSW50ZWdlciAoamludCk7CiAgSW50ZWdlciAo OjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBoYXNoQ29kZSAoKSB7IHJldHVybiB2YWx1 ZTsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgc3RhdGlj IDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcg Kik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdlciAoOjpqYXZhOjps YW5nOjpTdHJpbmcgKiwgamludCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0 SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpJbnRlZ2VyICop Owpwcml2YXRlOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9VbnNpZ25lZFN0cmlu ZyAoamludCwgamludCk7CnB1YmxpYzoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRv SGV4U3RyaW5nIChqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvT2N0YWxT dHJpbmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9CaW5hcnlTdHJp bmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKGppbnQp OwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKICBzdGF0aWMgOjpqYXZhOjps YW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5n OjpJbnRlZ2VyICp2YWx1ZU9mICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgOjpq YXZhOjpsYW5nOjpJbnRlZ2VyICp2YWx1ZU9mICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50 KTsKICBzdGF0aWMgamludCBwYXJzZUludCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3Rh dGljIGppbnQgcGFyc2VJbnQgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQpOwpwcml2YXRl OgogIHN0YXRpYyBqaW50IHBhcnNlSW50ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCBq aW50LCBqYm9vbGVhbiwgamludCk7CnB1YmxpYzoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpJbnRl Z2VyICpkZWNvZGUgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpieXRlIGJ5dGVWYWx1ZSAo KTsKICBqc2hvcnQgc2hvcnRWYWx1ZSAoKTsKICBqaW50IGludFZhbHVlICgpIHsgcmV0dXJuIHZh bHVlOyB9CiAgamxvbmcgbG9uZ1ZhbHVlICgpOwogIGpmbG9hdCBmbG9hdFZhbHVlICgpOwogIGpk b3VibGUgZG91YmxlVmFsdWUgKCk7CiAgamludCBjb21wYXJlVG8gKDo6amF2YTo6bGFuZzo6SW50 ZWdlciAqKTsKICBqaW50IGNvbXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CnByaXZh dGU6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMzYwODI2NjY3ODA2 ODUyOTIwTEw7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBNSU5fVkFMVUUgPSAtMjE0NzQ4 MzY0N0wgLSAxOwogIHN0YXRpYyBjb25zdCBqaW50IE1BWF9WQUxVRSA9IDIxNDc0ODM2NDdMOwog IHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzICpUWVBFOwpwcml2YXRlOgogIGppbnQgdmFsdWU7 CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZDsKcHVibGljOgoKICBz dGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgNjYgIi4uLy4uLy4uL2djYy9s aWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIiAyCiMgMTQ3ICIu Li8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5j YyIKdHlwZWRlZiBpbnQgc29ja2xlbl90OwoKCnVuaW9uIFNvY2tBZGRyCnsKICBzdHJ1Y3Qgc29j a2FkZHJfaW4gYWRkcmVzczsKCgoKfTsKCnVuaW9uIE1jYXN0UmVxCnsKCgoKCgoKfTsKCnVuaW9u IEluQWRkcgp7CiAgc3RydWN0IGluX2FkZHIgYWRkcjsKCgoKfTsKCgoKCgp2b2lkCmphdmE6Om5l dDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmNyZWF0ZSAoKQp7CiAgaW50IHNvY2sgPSA6OnNv Y2tldCAoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CiAgaWYgKHNvY2sgPCAwKQogICAgewogICAg ICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwogICAgICB0aHJvdyBuZXcg amF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKICAg IH0KICBmbnVtID0gc29jazsKICBmZCA9IG5ldyBqYXZhOjppbzo6RmlsZURlc2NyaXB0b3IgKHNv Y2spOwp9Cgp2b2lkCmphdmE6Om5ldDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmJpbmQgKGpp bnQgbHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6 Om5ldDo6SW5ldEFkZHJlc3MgKmhvc3QpCnsKCiAgdW5pb24gU29ja0FkZHIgdTsKICBzdHJ1Y3Qg c29ja2FkZHIgKnB0ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnUuYWRkcmVzczsKCiAgamJ5dGVB cnJheSBoYWRkcmVzcyA9IGhvc3QtPmFkZHI7CiAgamJ5dGUgKmJ5dGVzID0gZWxlbWVudHMgKGhh ZGRyZXNzKTsKICBpbnQgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsKCiAgaWYgKGxlbiA9PSA0KQog ICAgewogICAgICB1LmFkZHJlc3Muc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgIGlmIChob3N0 ICE9IF9fbnVsbCkKICAgICAgICBtZW1jcHkgKCZ1LmFkZHJlc3Muc2luX2FkZHIsIGJ5dGVzLCBs ZW4pOwogICAgICBlbHNlCiAgICAgICAgdS5hZGRyZXNzLnNpbl9hZGRyLnNfYWRkciA9IGh0b25s IChJTkFERFJfQU5ZKTsKICAgICAgbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pOwog ICAgICB1LmFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyAobHBvcnQpOwogICAgfQojIDIyNCAiLi4v Li4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNvY2tldEltcGwuY2Mi CiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uIChKdk5ld1N0 cmluZ1VURiAoImludmFsaWQgbGVuZ3RoIikpOwoKICBpZiAoX0p2X2JpbmQgKGZudW0sIHB0ciwg bGVuKSA9PSAwKQogICAgewogICAgICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZih1KTsKICAg ICAgaWYgKGxwb3J0ICE9IDApCiAgICAgICAgbG9jYWxQb3J0ID0gbHBvcnQ7CiAgICAgIGVsc2Ug aWYgKDo6Z2V0c29ja25hbWUgKGZudW0sIChzb2NrYWRkciopICZ1LCAmYWRkcmxlbikgPT0gMCkK ICAgICAgICBsb2NhbFBvcnQgPSBudG9ocyAodS5hZGRyZXNzLnNpbl9wb3J0KTsKICAgICAgZWxz ZQogICAgICAgIGdvdG8gZXJyb3I7CiAgICAgIHJldHVybjsKICAgIH0KIGVycm9yOgogIGNoYXIq IHN0cmVyciA9IHN0cmVycm9yICgoKl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6 QmluZEV4Y2VwdGlvbiAoSnZOZXdTdHJpbmdVVEYgKHN0cmVycikpOwp9CgpqaW50CmphdmE6Om5l dDo6UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OnBlZWsgKGphdmE6Om5ldDo6SW5ldEFkZHJlc3Mg KmkpCnsKCiAgdW5pb24gU29ja0FkZHIgdTsKICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZih1 KTsKICBpbnQgcmV0bGVuID0KICAgIDo6cmVjdmZyb20gKGZudW0sIChjaGFyICopIF9fbnVsbCwg MCwgTVNHX1BFRUssIChzb2NrYWRkciopICZ1LAogICAgICAmYWRkcmxlbik7CiAgaWYgKHJldGxl biA8IDApCiAgICBnb3RvIGVycm9yOwoKICBqYnl0ZUFycmF5IHJhZGRyOwogIGppbnQgcnBvcnQ7 CiAgaWYgKHUuYWRkcmVzcy5zaW5fZmFtaWx5ID09IEFGX0lORVQpCiAgICB7CiAgICAgIHJhZGRy ID0gSnZOZXdCeXRlQXJyYXkgKDQpOwogICAgICBtZW1jcHkgKGVsZW1lbnRzIChyYWRkciksICZ1 LmFkZHJlc3Muc2luX2FkZHIsIDQpOwogICAgICBycG9ydCA9IG50b2hzICh1LmFkZHJlc3Muc2lu X3BvcnQpOwogICAgfQojIDI3MSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxh aW5EYXRhZ3JhbVNvY2tldEltcGwuY2MiCiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6 U29ja2V0RXhjZXB0aW9uIChKdk5ld1N0cmluZ1VURiAoImludmFsaWQgZmFtaWx5IikpOwoKICBp LT5hZGRyID0gcmFkZHI7CiAgcmV0dXJuIHJwb3J0OwogZXJyb3I6CiAgY2hhciogc3RyZXJyID0g c3RyZXJyb3IgKCgqX2Vycm5vKCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9u IChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCnZvaWQKamF2YTo6bmV0OjpQbGFpbkRhdGFn cmFtU29ja2V0SW1wbDo6c2VuZCAoamF2YTo6bmV0OjpEYXRhZ3JhbVBhY2tldCAqcCkKewoKICBq aW50IHJwb3J0ID0gcC0+Z2V0UG9ydCgpOwogIHVuaW9uIFNvY2tBZGRyIHU7CiAgamJ5dGVBcnJh eSBoYWRkcmVzcyA9IHAtPmdldEFkZHJlc3MoKS0+YWRkcjsKICBqYnl0ZSAqYnl0ZXMgPSBlbGVt ZW50cyAoaGFkZHJlc3MpOwogIGludCBsZW4gPSBoYWRkcmVzcy0+bGVuZ3RoOwogIHN0cnVjdCBz b2NrYWRkciAqcHRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmdS5hZGRyZXNzOwogIGpieXRlICpk Ynl0ZXMgPSBlbGVtZW50cyAocC0+Z2V0RGF0YSgpKTsKICBpZiAobGVuID09IDQpCiAgICB7CiAg ICAgIHUuYWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICAgbWVtY3B5ICgmdS5hZGRy ZXNzLnNpbl9hZGRyLCBieXRlcywgbGVuKTsKICAgICAgbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29j a2FkZHJfaW4pOwogICAgICB1LmFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyAocnBvcnQpOwogICAg fQojIDMwOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9uZXQvbmF0UGxhaW5EYXRhZ3JhbVNv Y2tldEltcGwuY2MiCiAgZWxzZQogICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0 aW9uIChKdk5ld1N0cmluZ1VURiAoImludmFsaWQgbGVuZ3RoIikpOwoKICBpZiAoOjpzZW5kdG8g KGZudW0sIChjaGFyICopIGRieXRlcywgcC0+Z2V0TGVuZ3RoKCksIDAsIHB0ciwgbGVuKSA+PSAw KQogICAgcmV0dXJuOwoKICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwog IHRocm93IG5ldyBqYXZhOjppbzo6SU9FeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIp KTsKfQoKdm9pZApqYXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsOjpyZWNlaXZlIChq YXZhOjpuZXQ6OkRhdGFncmFtUGFja2V0ICpwKQp7CgogIHVuaW9uIFNvY2tBZGRyIHU7CiAgc29j a2xlbl90IGFkZHJsZW4gPSBzaXplb2YodSk7CiAgamJ5dGUgKmRieXRlcyA9IGVsZW1lbnRzIChw LT5nZXREYXRhKCkpOwogIGludCByZXRsZW4gPSAwOwoKCiAgaWYgKHRpbWVvdXQgPiAwKQogICAg ewogICAgICBmZF9zZXQgcnNldDsKICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CiAgICAgIEZEX1pF Uk8oJnJzZXQpOwogICAgICBGRF9TRVQoZm51bSwgJnJzZXQpOwogICAgICB0di50dl9zZWMgPSB0 aW1lb3V0IC8gMTAwMDsKICAgICAgdHYudHZfdXNlYyA9ICh0aW1lb3V0ICUgMTAwMCkgKiAxMDAw OwogICAgICBpbnQgcmV0dmFsOwogICAgICBpZiAoKHJldHZhbCA9IF9Kdl9zZWxlY3QgKGZudW0g KyAxLCAmcnNldCwgX19udWxsLCBfX251bGwsICZ0dikpIDwgMCkKICAgICAgICBnb3RvIGVycm9y OwogICAgICBlbHNlIGlmIChyZXR2YWwgPT0gMCkKICAgICAgICB0aHJvdyBuZXcgamF2YTo6aW86 OkludGVycnVwdGVkSU9FeGNlcHRpb24gKCk7CiAgICB9CgogIHJldGxlbiA9CiAgICA6OnJlY3Zm cm9tIChmbnVtLCAoY2hhciAqKSBkYnl0ZXMsIHAtPmdldExlbmd0aCgpLCAwLCAoc29ja2FkZHIq KSAmdSwKICAgICAgJmFkZHJsZW4pOwogIGlmIChyZXRsZW4gPCAwKQogICAgZ290byBlcnJvcjsK CiAgamJ5dGVBcnJheSByYWRkcjsKICBqaW50IHJwb3J0OwogIGlmICh1LmFkZHJlc3Muc2luX2Zh bWlseSA9PSBBRl9JTkVUKQogICAgewogICAgICByYWRkciA9IEp2TmV3Qnl0ZUFycmF5ICg0KTsK ICAgICAgbWVtY3B5IChlbGVtZW50cyAocmFkZHIpLCAmdS5hZGRyZXNzLnNpbl9hZGRyLCA0KTsK ICAgICAgcnBvcnQgPSBudG9ocyAodS5hZGRyZXNzLnNpbl9wb3J0KTsKICAgIH0KIyAzNjUgIi4u Ly4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNj IgogIGVsc2UKICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoSnZOZXdT dHJpbmdVVEYgKCJpbnZhbGlkIGZhbWlseSIpKTsKCiAgcC0+c2V0QWRkcmVzcyAobmV3IEluZXRB ZGRyZXNzIChyYWRkciwgX19udWxsKSk7CiAgcC0+c2V0UG9ydCAocnBvcnQpOwogIHAtPnNldExl bmd0aCAoKGppbnQpIHJldGxlbik7CiAgcmV0dXJuOwogZXJyb3I6CiAgY2hhciogc3RyZXJyID0g c3RyZXJyb3IgKCgqX2Vycm5vKCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9u IChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCnZvaWQKamF2YTo6bmV0OjpQbGFpbkRhdGFn cmFtU29ja2V0SW1wbDo6c2V0VGltZVRvTGl2ZSAoamludCB0dGwpCnsKCiAgY2hhciB2YWwgPSAo Y2hhcikgdHRsOwogIHNvY2tsZW5fdCB2YWxfbGVuID0gc2l6ZW9mKHZhbCk7CiAgaWYgKDo6c2V0 c29ja29wdCAoZm51bSwgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX1RUTCwgJnZhbCwgdmFsX2xl bikgPT0gMCkKICAgIHJldHVybjsKCiAgY2hhciogc3RyZXJyID0gc3RyZXJyb3IgKCgqX2Vycm5v KCkpKTsKICB0aHJvdyBuZXcgamF2YTo6aW86OklPRXhjZXB0aW9uIChKdk5ld1N0cmluZ1VURiAo c3RyZXJyKSk7Cn0KCmppbnQKamF2YTo6bmV0OjpQbGFpbkRhdGFncmFtU29ja2V0SW1wbDo6Z2V0 VGltZVRvTGl2ZSAoKQp7CgogIGNoYXIgdmFsOwogIHNvY2tsZW5fdCB2YWxfbGVuID0gc2l6ZW9m KHZhbCk7CiAgaWYgKDo6Z2V0c29ja29wdCAoZm51bSwgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNU X1RUTCwgJnZhbCwgJnZhbF9sZW4pID09IDApCiAgICByZXR1cm4gKChpbnQpIHZhbCkgJiAweEZG OwoKICBjaGFyKiBzdHJlcnIgPSBzdHJlcnJvciAoKCpfZXJybm8oKSkpOwogIHRocm93IG5ldyBq YXZhOjppbzo6SU9FeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKfQoKdm9pZApq YXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1Tb2NrZXRJbXBsOjptY2FzdEdycCAoamF2YTo6bmV0OjpJ bmV0QWRkcmVzcyAqaW5ldGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBqYm9vbGVhbiBqb2luKQp7CiAgdW5pb24gTWNhc3RSZXEgdTsKICBqYnl0ZUFy cmF5IGhhZGRyZXNzID0gaW5ldGFkZHItPmFkZHI7CiAgamJ5dGUgKmJ5dGVzID0gZWxlbWVudHMg KGhhZGRyZXNzKTsKICBpbnQgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsKICBpbnQgbGV2ZWwsIG9w bmFtZTsKICBjb25zdCBjaGFyICpwdHI7CiAgaWYgKDApCiAgICA7CiMgNDUwICIuLi8uLi8uLi9n Y2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICBlbHNl CiAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24gKEp2TmV3U3RyaW5nVVRG ICgiaW52YWxpZCBsZW5ndGgiKSk7CgogIGlmICg6OnNldHNvY2tvcHQgKGZudW0sIGxldmVsLCBv cG5hbWUsIHB0ciwgbGVuKSA9PSAwKQogICAgcmV0dXJuOwoKICBjaGFyKiBzdHJlcnIgPSBzdHJl cnJvciAoKCpfZXJybm8oKSkpOwogIHRocm93IG5ldyBqYXZhOjppbzo6SU9FeGNlcHRpb24gKEp2 TmV3U3RyaW5nVVRGIChzdHJlcnIpKTsKfQoKdm9pZApqYXZhOjpuZXQ6OlBsYWluRGF0YWdyYW1T b2NrZXRJbXBsOjpzZXRPcHRpb24gKGppbnQgb3B0SUQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6T2JqZWN0ICp2YWx1ZSkKewogIGlu dCB2YWw7CiAgc29ja2xlbl90IHZhbF9sZW4gPSBzaXplb2YgKHZhbCk7CgogIGlmIChfSnZfSXNJ bnN0YW5jZU9mICh2YWx1ZSwgJmphdmE6Omxhbmc6OkJvb2xlYW46OmNsYXNzJCkpCiAgICB7CiAg ICAgIGphdmE6Omxhbmc6OkJvb2xlYW4gKmJvb2xvYmogPQogICAgICAgIHN0YXRpY19jYXN0PGph dmE6Omxhbmc6OkJvb2xlYW4gKj4gKHZhbHVlKTsKICAgICAgdmFsID0gYm9vbG9iai0+Ym9vbGVh blZhbHVlKCkgPyAxIDogMDsKICAgIH0KICBlbHNlIGlmIChfSnZfSXNJbnN0YW5jZU9mICh2YWx1 ZSwgJmphdmE6Omxhbmc6OkludGVnZXI6OmNsYXNzJCkpCiAgICB7CiAgICAgIGphdmE6Omxhbmc6 OkludGVnZXIgKmludG9iaiA9CiAgICAgICAgc3RhdGljX2Nhc3Q8amF2YTo6bGFuZzo6SW50ZWdl ciAqPiAodmFsdWUpOwogICAgICB2YWwgPSAoaW50KSBpbnRvYmotPmludFZhbHVlKCk7CiAgICB9 CgoKICBzd2l0Y2ggKG9wdElEKQogICAgewogICAgICBjYXNlIF9Kdl9UQ1BfTk9ERUxBWV8gOgog ICAgICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoCiAgICAgICAgICBK dk5ld1N0cmluZ1VURiAoIlRDUF9OT0RFTEFZIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAg IHJldHVybjsKICAgICAgY2FzZSBfSnZfU09fTElOR0VSXyA6CiAgICAgICAgdGhyb3cgbmV3IGph dmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uICgKICAgICAgICAgIEp2TmV3U3RyaW5nVVRGICgiU09f TElOR0VSIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSBf SnZfU09fU05EQlVGXyA6CiAgICAgIGNhc2UgX0p2X1NPX1JDVkJVRl8gOgoKCgoKCgogICAgICAg IHRocm93IG5ldyBqYXZhOjpsYW5nOjpJbnRlcm5hbEVycm9yICgKICAgICAgICAgIEp2TmV3U3Ry aW5nVVRGICgiU09fUkNWQlVGL1NPX1NOREJVRiBub3Qgc3VwcG9ydGVkIikpOwoKICAgICAgICBy ZXR1cm47CiAgICAgIGNhc2UgX0p2X1NPX1JFVVNFQUREUl8gOgoKCgoKCiAgICAgICAgdGhyb3cg bmV3IGphdmE6Omxhbmc6OkludGVybmFsRXJyb3IgKAogICAgICAgICAgSnZOZXdTdHJpbmdVVEYg KCJTT19SRVVTRUFERFIgbm90IHN1cHBvcnRlZCIpKTsKCiAgICAgICAgcmV0dXJuOwogICAgICBj YXNlIF9Kdl9TT19CSU5EQUREUl8gOgogICAgICAgIHRocm93IG5ldyBqYXZhOjpuZXQ6OlNvY2tl dEV4Y2VwdGlvbiAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX0JJTkRBRERSOiByZWFk IG9ubHkgb3B0aW9uIikpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSBfSnZfSVBfTVVMVElD QVNUX0lGXyA6CiAgICAgICAgdW5pb24gSW5BZGRyIHU7CiAgICAgICAgamJ5dGVBcnJheSBoYWRk cmVzczsKICAgICAgICBqYnl0ZSAqYnl0ZXM7CiAgICAgICAgaW50IGxlbjsKICAgICAgICBpbnQg bGV2ZWwsIG9wbmFtZTsKICAgICAgICBjb25zdCBjaGFyICpwdHI7CgogICAgICAgIGhhZGRyZXNz ID0gKChqYXZhOjpuZXQ6OkluZXRBZGRyZXNzICopIHZhbHVlKS0+YWRkcjsKICAgICAgICBieXRl cyA9IGVsZW1lbnRzIChoYWRkcmVzcyk7CiAgICAgICAgbGVuID0gaGFkZHJlc3MtPmxlbmd0aDsK ICAgICAgICBpZiAobGVuID09IDQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxldmVsID0gSVBQ Uk9UT19JUDsKICAgICAgICAgICAgb3BuYW1lID0gSVBfTVVMVElDQVNUX0lGOwogICAgICAgICAg ICBtZW1jcHkgKCZ1LmFkZHIsIGJ5dGVzLCBsZW4pOwogICAgICAgICAgICBsZW4gPSBzaXplb2Yg KHN0cnVjdCBpbl9hZGRyKTsKICAgICAgICAgICAgcHRyID0gKGNvbnN0IGNoYXIgKikgJnUuYWRk cjsKICAgICAgICAgIH0KIyA1NDcgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbmV0L25hdFBs YWluRGF0YWdyYW1Tb2NrZXRJbXBsLmNjIgogICAgICAgIGVsc2UKICAgICAgICAgIHRocm93CiAg ICAgICAgICAgIG5ldyBqYXZhOjpuZXQ6OlNvY2tldEV4Y2VwdGlvbiAoSnZOZXdTdHJpbmdVVEYg KCJpbnZhbGlkIGxlbmd0aCIpKTsKCiAgICAgICAgaWYgKDo6c2V0c29ja29wdCAoZm51bSwgbGV2 ZWwsIG9wbmFtZSwgcHRyLCBsZW4pICE9IDApCiAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAg IHJldHVybjsKICAgICAgY2FzZSBfSnZfU09fVElNRU9VVF8gOgogICAgICAgIHRpbWVvdXQgPSB2 YWw7CiAgICAgICAgcmV0dXJuOwogICAgICBkZWZhdWx0IDoKICAgICAgICAoKl9lcnJubygpKSA9 IEVOT1BST1RPT1BUOwogICAgfQoKIGVycm9yOgogIGNoYXIqIHN0cmVyciA9IHN0cmVycm9yICgo Kl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9uIChKdk5l d1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0KCmphdmE6Omxhbmc6Ok9iamVjdCAqCmphdmE6Om5ldDo6 UGxhaW5EYXRhZ3JhbVNvY2tldEltcGw6OmdldE9wdGlvbiAoamludCBvcHRJRCkKewogIGludCB2 YWw7CiAgc29ja2xlbl90IHZhbF9sZW4gPSBzaXplb2YodmFsKTsKICB1bmlvbiBTb2NrQWRkciB1 OwogIHNvY2tsZW5fdCBhZGRybGVuID0gc2l6ZW9mKHUpOwoKICBzd2l0Y2ggKG9wdElEKQogICAg ewogICAgICBjYXNlIF9Kdl9UQ1BfTk9ERUxBWV8gOgogICAgICAgIHRocm93IG5ldyBqYXZhOjpu ZXQ6OlNvY2tldEV4Y2VwdGlvbiAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlRDUF9OT0RF TEFZIG5vdCB2YWxpZCBmb3IgVURQIikpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBfSnZf U09fTElOR0VSXyA6CiAgICAgICAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhjZXB0aW9u ICgKICAgICAgICAgIEp2TmV3U3RyaW5nVVRGICgiU09fTElOR0VSIG5vdCB2YWxpZCBmb3IgVURQ IikpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9Kdl9TT19SQ1ZCVUZfIDoKICAgICAgY2Fz ZSBfSnZfU09fU05EQlVGXyA6CiMgNTk1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9u YXRQbGFpbkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFu Zzo6SW50ZXJuYWxFcnJvciAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX1JDVkJVRi9T T19TTkRCVUYgbm90IHN1cHBvcnRlZCIpKTsKCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX0p2 X1NPX0JJTkRBRERSXzoKCiAgICAgICAgaWYgKGxvY2FsQWRkcmVzcyA9PSBfX251bGwpCiAgICAg ICAgICB7CiAgICAgICAgICAgIGpieXRlQXJyYXkgbGFkZHI7CiAgICAgICAgICAgIGlmICg6Omdl dHNvY2tuYW1lIChmbnVtLCAoc29ja2FkZHIqKSAmdSwgJmFkZHJsZW4pICE9IDApCiAgICAgICAg ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgaWYgKHUuYWRkcmVzcy5zaW5fZmFtaWx5ID09 IEFGX0lORVQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGFkZHIgPSBKdk5ld0J5 dGVBcnJheSAoNCk7CiAgICAgICAgICAgICAgICBtZW1jcHkgKGVsZW1lbnRzIChsYWRkciksICZ1 LmFkZHJlc3Muc2luX2FkZHIsIDQpOwogICAgICAgICAgICAgIH0KCgoKCgoKCiAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2NrZXRFeGNlcHRpb24g KEp2TmV3U3RyaW5nVVRGICgiaW52YWxpZCBmYW1pbHkiKSk7CiAgICAgICAgICAgIGxvY2FsQWRk cmVzcyA9IG5ldyBqYXZhOjpuZXQ6OkluZXRBZGRyZXNzIChsYWRkciwgX19udWxsKTsKICAgICAg ICAgIH0KICAgICAgICByZXR1cm4gbG9jYWxBZGRyZXNzOwogICAgICAgIGJyZWFrOwogICAgICBj YXNlIF9Kdl9TT19SRVVTRUFERFJfIDoKCgoKCgoKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFu Zzo6SW50ZXJuYWxFcnJvciAoCiAgICAgICAgICBKdk5ld1N0cmluZ1VURiAoIlNPX1JFVVNFQURE UiBub3Qgc3VwcG9ydGVkIikpOwoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfSnZfSVBfTVVM VElDQVNUX0lGXyA6CiMgNjUwICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL25ldC9uYXRQbGFp bkRhdGFncmFtU29ja2V0SW1wbC5jYyIKICAgICAgICB0aHJvdyBuZXcgamF2YTo6bmV0OjpTb2Nr ZXRFeGNlcHRpb24gKAogICAgICAgICAgSnZOZXdTdHJpbmdVVEYgKCJJUF9NVUxUSUNBU1RfSUY6 IG5vdCBhdmFpbGFibGUgLSBubyBpbmV0X250b2EoKSIpKTsKCiAgICAgICAgYnJlYWs7CiAgICAg IGNhc2UgX0p2X1NPX1RJTUVPVVRfIDoKICAgICAgICByZXR1cm4gbmV3IGphdmE6Omxhbmc6Oklu dGVnZXIgKHRpbWVvdXQpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0IDoKICAgICAgICAo Kl9lcnJubygpKSA9IEVOT1BST1RPT1BUOwogICAgfQoKIGVycm9yOgogIGNoYXIqIHN0cmVyciA9 IHN0cmVycm9yICgoKl9lcnJubygpKSk7CiAgdGhyb3cgbmV3IGphdmE6Om5ldDo6U29ja2V0RXhj ZXB0aW9uIChKdk5ld1N0cmluZ1VURiAoc3RyZXJyKSk7Cn0K