From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26806 invoked by alias); 11 Nov 2002 22:56:08 -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 26577 invoked by uid 71); 11 Nov 2002 22:56:02 -0000 Resent-Date: 11 Nov 2002 22:56:02 -0000 Resent-Message-ID: <20021111225602.26576.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, kenner@gnat.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jh@suse.cz Received: (qmail 21466 invoked by uid 61); 11 Nov 2002 22:52:29 -0000 Message-Id: <20021111225229.21465.qmail@sources.redhat.com> Date: Tue, 19 Nov 2002 12:25:00 -0000 From: jh@suse.cz Reply-To: jh@suse.cz To: gcc-gnats@gcc.gnu.org Cc: kenner@gnat.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: kenner@gnat.org Subject: c++/8533: [mainline regression] When compiling qt contradicting aliasing class created for bitfield constructor X-SW-Source: 2002-11/txt/msg00549.txt.bz2 List-Id: >Number: 8533 >Category: c++ >Synopsis: [mainline regression] When compiling qt contradicting aliasing class created for bitfield constructor >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Mon Nov 11 14:56:02 PST 2002 >Closed-Date: >Last-Modified: >Originator: jh@suse.cz >Release: mainline CVS >Organization: >Environment: x86_64-unknown-linux >Description: We fail to compile qt with the following error /xgcc -B ./ -O2 qq.ii kernel/moc_qwidget.cpp: In static member function `static QMetaObject* QWidget::staticMetaObject()': kernel/moc_qwidget.cpp:1016: internal compiler error: in set_mem_alias_set, at emit-rtl.c:1937 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: ./xgcc -B ./ -O2 qq.ii kernel/moc_qwidget.cpp: In static member function `static QMetaObject* QWidget::staticMetaObject()': kernel/moc_qwidget.cpp:1016: internal compiler error: in set_mem_alias_set, at emit-rtl.c:1937 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="qq.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qq.ii" IyAxICJrZXJuZWwvbW9jX3F3aWRnZXQuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1h bmQgbGluZT4iCiMgMSAia2VybmVsL21vY19xd2lkZ2V0LmNwcCIKIyAxNiAia2VybmVsL21vY19x d2lkZ2V0LmNwcCIKIyAxICJrZXJuZWwvcXdpZGdldC5oIiAxCiMgNDIgImtlcm5lbC9xd2lkZ2V0 LmgiCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAia2VybmVsL3F3aW5kb3dkZWZz LmgiCiMgMSAia2VybmVsL3FvYmplY3RkZWZzLmgiIDEKIyA0MiAia2VybmVsL3FvYmplY3RkZWZz LmgiCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xZ2xvYmFs LmgiIDEKIyAzNzYgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWds b2JhbC5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1 bG9uZzsKdHlwZWRlZiBjaGFyICpwY2hhcjsKdHlwZWRlZiB1Y2hhciAqcHVjaGFyOwp0eXBlZGVm IGNvbnN0IGNoYXIgKnBjY2hhcjsKCgoKCgoKCmNvbnN0IGJvb2wgRkFMU0UgPSAwOwpjb25zdCBi b29sIFRSVUUgPSAhMDsKIyA0MTQgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2lu Y2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3VuZCggZG91YmxlIGQgKQp7CiAgICByZXR1 cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0wLjUpOwp9CiMgNDI3ICIvdXNyL3NyYy9w YWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWduZWQg Y2hhciBJTlQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQgSU5U MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBlZGVm IHVuc2lnbmVkIGludCBRX1VJTlQzMjsKdHlwZWRlZiBsb25nIFFfSU5UNjQ7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBRX1VJTlQ2NDsKCgoKCgpjbGFzcyBRRGF0YVN0cmVhbTsKIyA0NTcgIi91c3Iv c3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi91c3Iv c3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWZlYXR1cmVzLmgiIDEKIyA1MyAi L3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xZmVhdHVyZXMuaCIKIyAx ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3Fjb25maWcuaCIgMQoj IDU0ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FmZWF0dXJlcy5o IiAyCiMgNDU4ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FnbG9i YWwuaCIgMgojIDQ5NSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9x Z2xvYmFsLmgiCiBjb25zdCBjaGFyICpxVmVyc2lvbigpOwogYm9vbCBxU3lzSW5mbyggaW50ICp3 b3JkU2l6ZSwgYm9vbCAqYmlnRW5kaWFuICk7CiMgNTU5ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlM RC9xdC0yLjMuMi9pbmNsdWRlL3FnbG9iYWwuaCIKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICos IC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgog dm9pZCBxV2FybmluZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChm b3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4u LiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgoKCgoK Cgogdm9pZCBkZWJ1ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChm b3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZvaWQgd2FybmluZyggY29uc3QgY2hhciAqLCAu Li4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKIHZv aWQgZmF0YWwoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0 IChwcmludGYsIDEsIDIpKSkKCjsKIyA2MTYgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIu My4yL2luY2x1ZGUvcWdsb2JhbC5oIgogYm9vbCBxdF9jaGVja19wb2ludGVyKCBib29sIGMsIGNv bnN0IGNoYXIgKiwgaW50ICk7CgoKCgoKCgplbnVtIFF0TXNnVHlwZSB7IFF0RGVidWdNc2csIFF0 V2FybmluZ01zZywgUXRGYXRhbE1zZyB9OwoKdHlwZWRlZiB2b2lkICgqbXNnX2hhbmRsZXIpKFF0 TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKIG1zZ19oYW5kbGVyIHFJbnN0YWxsTXNnSGFuZGxlcigg bXNnX2hhbmRsZXIgKTsKCgogdm9pZCBxU3VwcHJlc3NPYnNvbGV0ZVdhcm5pbmdzKCBib29sID0g VFJVRSApOwoKCgogdm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAq b2xkZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsK IHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMgKTsK IHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICptZXNzYWdlICk7CiMgNDMgImtlcm5lbC9xb2Jq ZWN0ZGVmcy5oIiAyCiMgMTE3ICJrZXJuZWwvcW9iamVjdGRlZnMuaCIKY2xhc3MgUU9iamVjdDsK Y2xhc3MgUU1ldGFPYmplY3Q7CmNsYXNzIFFTaWduYWw7CmNsYXNzIFFDb25uZWN0aW9uOwpjbGFz cyBRRXZlbnQ7CnN0cnVjdCBRTWV0YURhdGE7CmNsYXNzIFFDb25uZWN0aW9uTGlzdDsKY2xhc3Mg UUNvbm5lY3Rpb25MaXN0SXQ7CmNsYXNzIFFTaWduYWxEaWN0OwpjbGFzcyBRU2lnbmFsRGljdEl0 OwpjbGFzcyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExpc3RJdDsKY2xhc3MgUU1lbWJlckRp Y3Q7CiMgNDQgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAyCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMv QlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9zcmMvcGFja2Fn ZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc3RyaW5nLmgiCiMgMSAiL3Vzci9zcmMvcGFja2Fn ZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xY3N0cmluZy5oIiAxCiMgNDMgIi91c3Ivc3JjL3Bh Y2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWNzdHJpbmcuaCIKIyAxICIvdXNyL3NyYy9w YWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FhcnJheS5oIiAxCiMgNDIgIi91c3Ivc3Jj L3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWFycmF5LmgiCiMgMSAiL3Vzci9zcmMv cGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xZ2FycmF5LmgiIDEKIyA0MiAiL3Vzci9z cmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xZ2FycmF5LmgiCiMgMSAiL3Vzci9z cmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0NiAiL3Vz ci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc2hhcmVkLmgiCnN0cnVjdCBR U2hhcmVkCnsKICAgIFFTaGFyZWQoKSB7IGNvdW50ID0gMTsgfQogICAgdm9pZCByZWYoKSB7IGNv dW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKSB7IHJldHVybiAhLS1jb3VudDsgfQogICAgdWludCBj b3VudDsKfTsKIyA0MyAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9x Z2FycmF5LmgiIDIKCgoKY2xhc3MgUUdBcnJheQp7CmZyaWVuZCBjbGFzcyBRQnVmZmVyOwpwdWJs aWM6CgogICAgc3RydWN0IGFycmF5X2RhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgYXJy YXlfZGF0YSgpIHsgZGF0YT0wOyBsZW49MDsgfQogICAgICAgIGNoYXIgKmRhdGE7CiAgICAgICAg dWludCBsZW47CiAgICB9OwogICAgUUdBcnJheSgpOwpwcm90ZWN0ZWQ6CiAgICBRR0FycmF5KCBp bnQsIGludCApOwogICAgUUdBcnJheSggaW50IHNpemUgKTsKICAgIFFHQXJyYXkoIGNvbnN0IFFH QXJyYXkgJmEgKTsKICAgIHZpcnR1YWwgflFHQXJyYXkoKTsKCiAgICBRR0FycmF5ICZvcGVyYXRv cj0oIGNvbnN0IFFHQXJyYXkgJmEgKSB7IHJldHVybiBhc3NpZ24oIGEgKTsgfQoKICAgIHZpcnR1 YWwgdm9pZCBkZXRhY2goKSB7IGR1cGxpY2F0ZSgqdGhpcyk7IH0KCiAgICBjaGFyICpkYXRhKCkg Y29uc3QgeyByZXR1cm4gc2hkLT5kYXRhOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1 cm4gc2hkLT5jb3VudDsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2hkLT5sZW47 IH0KICAgIGJvb2wgaXNFcXVhbCggY29uc3QgUUdBcnJheSAmYSApIGNvbnN0OwoKICAgIGJvb2wg cmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwoIGNvbnN0IGNoYXIgKmQsIGlu dCBsZW4sIHVpbnQgc3ogKTsKCiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IFFHQXJyYXkgJmEg KTsKICAgIFFHQXJyYXkgJmFzc2lnbiggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIFFH QXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgUUdBcnJheSAmYSApOwogICAgUUdBcnJheSAmZHVwbGlj YXRlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgdm9pZCBzdG9yZSggY29uc3QgY2hh ciAqZCwgdWludCBsZW4gKTsKCiAgICBhcnJheV9kYXRhICpzaGFyZWRCbG9jaygpIGNvbnN0IHsg cmV0dXJuIHNoZDsgfQogICAgdm9pZCBzZXRTaGFyZWRCbG9jayggYXJyYXlfZGF0YSAqcCApIHsg c2hkPShhcnJheV9kYXRhKilwOyB9CgogICAgUUdBcnJheSAmc2V0UmF3RGF0YSggY29uc3QgY2hh ciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgcmVzZXRSYXdEYXRhKCBjb25zdCBjaGFyICpkLCB1 aW50IGxlbiApOwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyICpkLCB1aW50IGluZGV4LCB1aW50 IHN6ICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBj b25zdDsKCiAgICB2b2lkIHNvcnQoIHVpbnQgc3ogKTsKICAgIGludCBic2VhcmNoKCBjb25zdCBj aGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgY2hhciAqYXQoIHVpbnQgaW5kZXggKSBjb25z dDsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwgY29uc3QgY2hhciAqZCwgdWludCBz eiApOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCBhcnJheV9kYXRhICpuZXdEYXRhKCk7CiAgICB2 aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YSggYXJyYXlfZGF0YSAqcCApOwoKcHJpdmF0ZToKICAgIHN0 YXRpYyB2b2lkIG1zZ19pbmRleCggdWludCApOwogICAgYXJyYXlfZGF0YSAqc2hkOwp9OwoKCmlu bGluZSBjaGFyICpRR0FycmF5OjphdCggdWludCBpbmRleCApIGNvbnN0CnsKCiAgICBpZiAoIGlu ZGV4ID49IHNpemUoKSApIHsKICAgICAgICBtc2dfaW5kZXgoIGluZGV4ICk7CiAgICAgICAgaW5k ZXggPSAwOwogICAgfQoKICAgIHJldHVybiAmc2hkLT5kYXRhW2luZGV4XTsKfQojIDQzICIvdXNy L3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FhcnJheS5oIiAyCgoKCnRlbXBs YXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFBcnJheSA6IHB1YmxpYyBRR0FycmF5CnsKcHVibGljOgog ICAgdHlwZWRlZiB0eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3QgdHlwZSogQ29uc3RJ dGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CiAgICBRQXJy YXkoIGludCwgaW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1YmxpYzoKICAgIFFBcnJheSgp IHt9CiAgICBRQXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5KHNpemUqc2l6ZW9mKHR5cGUpKSB7 fQogICAgUUFycmF5KCBjb25zdCBRQXJyYXk8dHlwZT4gJmEgKSA6IFFHQXJyYXkoYSkge30KICAg flFBcnJheSgpIHt9CiAgICBRQXJyYXk8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRQXJyYXk8dHlw ZT4gJmEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0 eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICB0eXBlICpkYXRhKCkgY29uc3QgeyByZXR1 cm4gKHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIHVpbnQgbnJlZnMoKSBjb25zdCB7IHJl dHVybiBRR0FycmF5OjpucmVmcygpOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBR R0FycmF5OjpzaXplKCkvc2l6ZW9mKHR5cGUpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyBy ZXR1cm4gc2l6ZSgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0FycmF5 OjpzaXplKCkgPT0gMDsgfQogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBRR0FycmF5 OjpkYXRhKCkgPT0gMDsgfQogICAgYm9vbCByZXNpemUoIHVpbnQgc2l6ZSApIHsgcmV0dXJuIFFH QXJyYXk6OnJlc2l6ZShzaXplKnNpemVvZih0eXBlKSk7IH0KICAgIGJvb2wgdHJ1bmNhdGUoIHVp bnQgcG9zICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHBvcypzaXplb2YodHlwZSkpOyB9CiAg ICBib29sIGZpbGwoIGNvbnN0IHR5cGUgJmQsIGludCBzaXplID0gLTEgKQogICAgICAgIHsgcmV0 dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIqKSZkLHNpemUsc2l6ZW9mKHR5cGUpICk7IH0KICAgIHZv aWQgZGV0YWNoKCkgeyBRR0FycmF5OjpkZXRhY2goKTsgfQogICAgUUFycmF5PHR5cGU+IGNvcHko KSBjb25zdAogICAgICAgIHsgUUFycmF5PHR5cGU+IHRtcDsgcmV0dXJuIHRtcC5kdXBsaWNhdGUo KnRoaXMpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgUUFycmF5PHR5cGU+JiBh ICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oYSk7IH0K ICAgIFFBcnJheTx0eXBlPiYgYXNzaWduKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAg IHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbigoY2hhciopYSxuKnNpemVv Zih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCBRQXJyYXk8dHlw ZT4mIGEgKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0 ZShhKTsgfQogICAgUUFycmF5PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUgKmEsIHVpbnQg biApCiAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6ZHVwbGljYXRlKChj aGFyKilhLG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgUUFycmF5PHR5cGU+JiBzZXRSYXdEYXRhKCBj b25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFH QXJyYXk6OnNldFJhd0RhdGEoKGNoYXIqKWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbipzaXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHJlc2V0 UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IFFHQXJyYXk6OnJlc2V0 UmF3RGF0YSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludCBmaW5kKCBjb25zdCB0 eXBlICZkLCB1aW50IGk9MCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUUdBcnJheTo6ZmluZCgo Y2hhciopJmQsaSxzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IHR5cGUg JmQgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmNvbnRhaW5zKChjaGFyKikmZCxz aXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHQXJyYXk6OnNvcnQoc2l6ZW9mKHR5 cGUpKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgJmQgKSBjb25zdAogICAgICAgIHsg cmV0dXJuIFFHQXJyYXk6OmJzZWFyY2goKGNvbnN0IGNoYXIqKSZkLHNpemVvZih0eXBlKSk7IH0K ICAgIHR5cGUmIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlw ZSAmKSgqKHR5cGUgKilRR0FycmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICB0eXBlJiBh dCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiAodHlwZSAmKSgqKHR5cGUgKilRR0Fy cmF5OjphdChpKnNpemVvZih0eXBlKSkpOyB9CiAgICAgICAgIG9wZXJhdG9yIGNvbnN0IHR5cGUq KCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIGJv b2wgb3BlcmF0b3I9PSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4gaXNF cXVhbChhKTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQXJyYXk8dHlwZT4gJmEgKSBj b25zdCB7IHJldHVybiAhaXNFcXVhbChhKTsgfQogICAgSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy biBkYXRhKCk7IH0KICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGRhdGEoKSArIHNpemUoKTsg fQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQogICAg Q29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7IH0KfTsK IyA0NCAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xY3N0cmluZy5o IiAyCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAojIDI2ICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAoj IDI5MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMv Y2RlZnMuaCIgMSAzIDQKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMgNAojIDMx NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1 YnMuaCIgMSAzIDQKIyAzMTUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMgNAojIDI3ICIv dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9s aWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg NAojIDIxMyAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzQgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1t b3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAq bWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl cm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHZv aWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsK CmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBj aGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGlu dCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90 IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g aW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4 ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoj IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS94bG9j YWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9j YWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9f Y3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5 cGVfdG91cHBlcjsKCgogIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xvY2FsZV90Owoj IDExNSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCmV4dGVybiBpbnQgc3RyY29sbF9s IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90 IHN0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CiMgMTYwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCmV4dGVy biBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3Ry Y3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4g KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFy ICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cg KCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRo cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3Ry Y2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpleHRlcm4g dm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNr bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3Qg X19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl c3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0 IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhs ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu IGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9p ZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9p ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qg dm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBf X2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQg ZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0 cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2Vj bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQg c3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93 ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg KnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBu Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpt ZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hh ciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzc5ICIv dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAp9CiMgNTEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxE L3F0LTIuMy4yL2luY2x1ZGUvcWNzdHJpbmcuaCIgMgojIDc4ICIvdXNyL3NyYy9wYWNrYWdlcy9C VUlMRC9xdC0yLjMuMi9pbmNsdWRlL3Fjc3RyaW5nLmgiCiB2b2lkICpxbWVtbW92ZSggdm9pZCAq ZHN0LCBjb25zdCB2b2lkICpzcmMsIHVpbnQgbGVuICk7CgoKCgoKIGNoYXIgKnFzdHJkdXAoIGNv bnN0IGNoYXIgKiApOwoKIGlubGluZSB1aW50IGNzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsg cmV0dXJuIHN0cmxlbihzdHIpOyB9CgogaW5saW5lIHVpbnQgcXN0cmxlbiggY29uc3QgY2hhciAq c3RyICkKeyByZXR1cm4gc3RyID8gc3RybGVuKHN0cikgOiAwOyB9CgogaW5saW5lIGNoYXIgKmNz dHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3RyY3B5KGRzdCxz cmMpOyB9CgogaW5saW5lIGNoYXIgKnFzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj ICkKeyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwgc3JjKSA6IDA7IH0KCiBjaGFyICpxc3RybmNw eSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVpbnQgbGVuICk7CgogaW5saW5lIGludCBj c3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3Ry Y21wKHN0cjEsc3RyMik7IH0KCiBpbmxpbmUgaW50IHFzdHJjbXAoIGNvbnN0IGNoYXIgKnN0cjEs IGNvbnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiAoc3RyMSAmJiBzdHIyKSA/IHN0cmNtcChzdHIx LHN0cjIpIDogKGludCkoKGxvbmcpc3RyMiAtIChsb25nKXN0cjEpOyB9CgogaW5saW5lIGludCBj c3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWludCBsZW4gKQp7 IHJldHVybiBzdHJuY21wKHN0cjEsc3RyMixsZW4pOyB9CgogaW5saW5lIGludCBxc3RybmNtcCgg Y29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWludCBsZW4gKQp7IHJldHVybiAo c3RyMSAmJiBzdHIyKSA/IHN0cm5jbXAoc3RyMSxzdHIyLGxlbikgOgogICAgICAgICAgICAgICAg ICAgICAgICAgIChpbnQpKChsb25nKXN0cjIgLSAobG9uZylzdHIxKTsgfQoKIGludCBxc3RyaWNt cCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCiBpbnQgcXN0cm5pY21wKCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgdWludCBsZW4gKTsKIyAxNDcgIi91c3Ivc3JjL3BhY2thZ2Vz L0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWNzdHJpbmcuaCIKIFFfVUlOVDE2IHFDaGVja3N1bSgg Y29uc3QgY2hhciAqcywgdWludCBsZW4gKTsKIyAxNTYgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxE L3F0LTIuMy4yL2luY2x1ZGUvcWNzdHJpbmcuaCIKdHlwZWRlZiBRQXJyYXk8Y2hhcj4gUUJ5dGVB cnJheTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z dCBRQnl0ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm LCBRQnl0ZUFycmF5ICYgKTsKIyAxNzMgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4y L2luY2x1ZGUvcWNzdHJpbmcuaCIKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFDU3RyaW5nIDogcHVi bGljIFFCeXRlQXJyYXkKewpwdWJsaWM6CiAgICBRQ1N0cmluZygpIHt9CiAgICBRQ1N0cmluZygg aW50IHNpemUgKTsKICAgIFFDU3RyaW5nKCBjb25zdCBRQ1N0cmluZyAmcyApIDogUUJ5dGVBcnJh eSggcyApIHt9CiAgICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmluZygg Y29uc3QgY2hhciAqc3RyLCB1aW50IG1heGxlbiApOwoKICAgIFFDU3RyaW5nICZvcGVyYXRvcj0o IGNvbnN0IFFDU3RyaW5nICZzICk7CiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBjaGFy ICpzdHIgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkgY29u c3Q7CiAgICB1aW50IGxlbmd0aCgpIGNvbnN0OwogICAgYm9vbCByZXNpemUoIHVpbnQgbmV3bGVu ICk7CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApOwogICAgYm9vbCBmaWxsKCBjaGFyIGMs IGludCBsZW4gPSAtMSApOwoKICAgIFFDU3RyaW5nIGNvcHkoKSBjb25zdDsKCiAgICBRQ1N0cmlu ZyAmc3ByaW50ZiggY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKTsKCiAgICBpbnQgZmluZCggY2hh ciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29u c3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQg ZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwogICAgaW50IGZpbmRS ZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZp bmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0 OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7 CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQg Y29udGFpbnMoIGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQg Y29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKICAgIFFDU3RyaW5nIGxlZnQoIHVp bnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAg IFFDU3RyaW5nIG1pZCggdWludCBpbmRleCwgdWludCBsZW49MHhmZmZmZmZmZikgY29uc3Q7Cgog ICAgUUNTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsIGJvb2wg dHJ1bmM9RkFMU0UpY29uc3Q7CiAgICBRQ1N0cmluZyByaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgs IGNoYXIgZmlsbD0nICcsYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKCiAgICBRQ1N0cmluZyBsb3dl cigpIGNvbnN0OwogICAgUUNTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBRQ1N0cmluZyBzdHJp cFdoaXRlU3BhY2UoKSBjb25zdDsKICAgIFFDU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNv bnN0OwoKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKiApOwog ICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciApOwogICAgUUNTdHJpbmcgJmFw cGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcHJlcGVuZCggY29uc3QgY2hhciAq ICk7CiAgICBRQ1N0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUUNT dHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBjaGFyICogKTsKICAg IFFDU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IGNoYXIgKiApOwoKICAg IHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVzaG9ydCB0b1VTaG9ydCgg Ym9vbCAqb2s9MCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpvaz0wICkgY29uc3Q7CiAg ICB1aW50IHRvVUludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgbG9uZyB0b0xvbmcoIGJvb2wg Km9rPTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAg IGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZSgg Ym9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFDU3RyaW5nICZzZXRTdHIoIGNvbnN0IGNoYXIgKnMg KTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHNob3J0ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCB1 c2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGludCApOwogICAgUUNTdHJpbmcgJnNldE51 bSggdWludCApOwogICAgUUNTdHJpbmcgJnNldE51bSggbG9uZyApOwogICAgUUNTdHJpbmcgJnNl dE51bSggdWxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFyIGY9J2cnLCBp bnQgcHJlYz02ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBkb3VibGUsIGNoYXIgZj0nZycsIGlu dCBwcmVjPTYgKTsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwgY2hhciBjICk7Cgog ICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7CiAgICBRQ1N0cmlu ZyAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmluZyAmb3BlcmF0b3Ir PSggY2hhciBjICk7Cn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl YW0gJiwgY29uc3QgUUNTdHJpbmcgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh U3RyZWFtICYsIFFDU3RyaW5nICYgKTsKCgoKCgoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6 b3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApCnsgcmV0dXJuIChRQ1N0cmluZyYpYXNzaWdu KCBzICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgY2hh ciAqc3RyICkKeyByZXR1cm4gKFFDU3RyaW5nJilkdXBsaWNhdGUoIHN0ciwgcXN0cmxlbihzdHIp KzEgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIGRh dGEoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0 dXJuIGRhdGEoKSA9PSAwIHx8ICpkYXRhKCkgPT0gJ1wwJzsgfQoKaW5saW5lIHVpbnQgUUNTdHJp bmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIHFzdHJsZW4oIGRhdGEoKSApOyB9CgppbmxpbmUg Ym9vbCBRQ1N0cmluZzo6dHJ1bmNhdGUoIHVpbnQgcG9zICkKeyByZXR1cm4gcmVzaXplKHBvcysx KTsgfQoKaW5saW5lIFFDU3RyaW5nIFFDU3RyaW5nOjpjb3B5KCkgY29uc3QKeyByZXR1cm4gUUNT dHJpbmcoIGRhdGEoKSApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpwcmVwZW5kKCBj b25zdCBjaGFyICpzICkKeyByZXR1cm4gaW5zZXJ0KDAscyk7IH0KCmlubGluZSBRQ1N0cmluZyAm UUNTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIG9wZXJhdG9yKz0ocyk7 IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggc2hvcnQgbiApCnsgcmV0dXJu IHNldE51bSgobG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1 c2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAm UUNTdHJpbmc6OnNldE51bSggaW50IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlu bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdWludCBuICkKeyByZXR1cm4gc2V0TnVt KCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBmbG9hdCBu LCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9 CgppbmxpbmUgUUNTdHJpbmc6Om9wZXJhdG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0CnsgcmV0dXJu IChjb25zdCBjaGFyICopZGF0YSgpOyB9CgoKCgoKCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBj b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAo czEuZGF0YSgpLHMyLmRhdGEoKSkgPT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNv bnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRh dGEoKSxzMikgPT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIgKnMx LCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPT0g MDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg UUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSAhPSAw OyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBj aGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSAhPSAwOyB9CgogaW5saW5l IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsg cmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSAhPSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0 b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nJiBzMiApCnsgcmV0dXJuIHFz dHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8 KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChz MS5kYXRhKCksczIpIDwgMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgY2hhciAq czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA8 IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0 IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpIDw9IDA7IH0KCiBpbmxp bmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK eyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpIDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVy YXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3Ry Y21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBj aGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRh KCkpID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFDU3RyaW5nICZzMSwg Y29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPj0gMDsgfQoK IGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAm czIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPj0gMDsgfQoKIGlubGluZSBRQ1N0 cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK ewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVy biB0bXA7Cn0KCiBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmluZyAmczEs IGNvbnN0IGNoYXIgKnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRt cCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBj b25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBz MSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRQ1N0cmluZyBv cGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFDU3RyaW5nIHRt cCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5l IFFDU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAg UUNTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRt cDsKfQojIDQ0ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FzdHJp bmcuaCIgMgoKCgoKCgoKY2xhc3MgUVJlZ0V4cDsKY2xhc3MgUVN0cmluZzsKY2xhc3MgUUNoYXJS ZWY7CgpjbGFzcyBRQ2hhciB7CnB1YmxpYzoKICAgIFFDaGFyKCk7CiAgICBRQ2hhciggY2hhciBj ICk7CiAgICBRQ2hhciggdWNoYXIgYyApOwogICAgUUNoYXIoIHVjaGFyIGMsIHVjaGFyIHIgKTsK ICAgIFFDaGFyKCBjb25zdCBRQ2hhciYgYyApOwogICAgUUNoYXIoIHVzaG9ydCByYyApOwogICAg UUNoYXIoIHNob3J0IHJjICk7CiAgICBRQ2hhciggdWludCByYyApOwogICAgUUNoYXIoIGludCBy YyApOwoKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBudWxsOwogICAgc3RhdGljIGNvbnN0IFFDaGFy IHJlcGxhY2VtZW50OwogICAgc3RhdGljIGNvbnN0IFFDaGFyIGJ5dGVPcmRlck1hcms7CiAgICBz dGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyU3dhcHBlZDsKICAgIHN0YXRpYyBjb25zdCBRQ2hh ciBuYnNwOwoKCgogICAgZW51bSBDYXRlZ29yeQogICAgewogICAgICAgIE5vQ2F0ZWdvcnksCgog ICAgICAgIE1hcmtfTm9uU3BhY2luZywKICAgICAgICBNYXJrX1NwYWNpbmdDb21iaW5pbmcsCiAg ICAgICAgTWFya19FbmNsb3NpbmcsCgogICAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQsCiAgICAg ICAgTnVtYmVyX0xldHRlciwKICAgICAgICBOdW1iZXJfT3RoZXIsCgogICAgICAgIFNlcGFyYXRv cl9TcGFjZSwKICAgICAgICBTZXBhcmF0b3JfTGluZSwKICAgICAgICBTZXBhcmF0b3JfUGFyYWdy YXBoLAoKICAgICAgICBPdGhlcl9Db250cm9sLAogICAgICAgIE90aGVyX0Zvcm1hdCwKICAgICAg ICBPdGhlcl9TdXJyb2dhdGUsCiAgICAgICAgT3RoZXJfUHJpdmF0ZVVzZSwKICAgICAgICBPdGhl cl9Ob3RBc3NpZ25lZCwKCiAgICAgICAgTGV0dGVyX1VwcGVyY2FzZSwKICAgICAgICBMZXR0ZXJf TG93ZXJjYXNlLAogICAgICAgIExldHRlcl9UaXRsZWNhc2UsCiAgICAgICAgTGV0dGVyX01vZGlm aWVyLAogICAgICAgIExldHRlcl9PdGhlciwKCiAgICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9y LAogICAgICAgIFB1bmN0dWF0aW9uX0Rhc2ssCiAgICAgICAgUHVuY3R1YXRpb25fT3BlbiwKICAg ICAgICBQdW5jdHVhdGlvbl9DbG9zZSwKICAgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUs CiAgICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSwKICAgICAgICBQdW5jdHVhdGlvbl9PdGhl ciwKCiAgICAgICAgU3ltYm9sX01hdGgsCiAgICAgICAgU3ltYm9sX0N1cnJlbmN5LAogICAgICAg IFN5bWJvbF9Nb2RpZmllciwKICAgICAgICBTeW1ib2xfT3RoZXIKICAgIH07CgogICAgZW51bSBE aXJlY3Rpb24KICAgIHsKICAgICAgICBEaXJMLCBEaXJSLCBEaXJFTiwgRGlyRVMsIERpckVULCBE aXJBTiwgRGlyQ1MsIERpckIsIERpclMsIERpcldTLCBEaXJPTiwKICAgICAgICBEaXJMUkUsIERp ckxSTywgRGlyQUwsIERpclJMRSwgRGlyUkxPLCBEaXJQREYsIERpck5TTSwgRGlyQk4KICAgIH07 CgogICAgZW51bSBEZWNvbXBvc2l0aW9uCiAgICB7CiAgICAgICAgU2luZ2xlLCBDYW5vbmljYWws IEZvbnQsIE5vQnJlYWssIEluaXRpYWwsIE1lZGlhbCwKICAgICAgICBGaW5hbCwgSXNvbGF0ZWQs IENpcmNsZSwgU3VwZXIsIFN1YiwgVmVydGljYWwsCiAgICAgICAgV2lkZSwgTmFycm93LCBTbWFs bCwgU3F1YXJlLCBDb21wYXQsIEZyYWN0aW9uCiAgICB9OwoKICAgIGVudW0gSm9pbmluZwogICAg ewogICAgICAgIE90aGVySm9pbmluZywgRHVhbCwgUmlnaHQsIENlbnRlcgogICAgfTsKCgoKICAg IGludCBkaWdpdFZhbHVlKCkgY29uc3Q7CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0OwogICAgUUNo YXIgdXBwZXIoKSBjb25zdDsKCiAgICBDYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0OwogICAgRGly ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwogICAgSm9pbmluZyBqb2luaW5nKCkgY29uc3Q7CiAg ICBib29sIG1pcnJvcmVkKCkgY29uc3Q7CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25zdDsK ICAgIFFTdHJpbmcgZGVjb21wb3NpdGlvbigpIGNvbnN0OwogICAgRGVjb21wb3NpdGlvbiBkZWNv bXBvc2l0aW9uVGFnKCkgY29uc3Q7CgogICAgY2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBy dyA/IDAgOiBjbDsgfQogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiAocncgPDwg OCkgfCBjbDsgfQoKCiAgICBvcGVyYXRvciBjaGFyKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7 IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9PTA7IH0KICAg IGJvb2wgaXNQcmludCgpIGNvbnN0OwogICAgYm9vbCBpc1B1bmN0KCkgY29uc3Q7CiAgICBib29s IGlzU3BhY2UoKSBjb25zdDsKICAgIGJvb2wgaXNNYXJrKCkgY29uc3Q7CiAgICBib29sIGlzTGV0 dGVyKCkgY29uc3Q7CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzTGV0dGVy T3JOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwoKICAgIHVjaGFyJiBj ZWxsKCkgeyByZXR1cm4gY2w7IH0KICAgIHVjaGFyJiByb3coKSB7IHJldHVybiBydzsgfQogICAg dWNoYXIgY2VsbCgpIGNvbnN0IHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7 IHJldHVybiBydzsgfQoKICAgIHN0YXRpYyBib29sIG5ldHdvcmtPcmRlcmVkKCkgeyByZXR1cm4g KGludCluZXRfb3JkZXJlZCA9PSAxOyB9CgogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I9 PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I9PSgg UUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3I9PSggUUNo YXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hh ciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yIT0oIGNoYXIg Y2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFDaGFyIGMs IGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMsIGNo YXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFy IGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBj MiApOwoKcHJpdmF0ZToKCgoKICAgIHVjaGFyIHJ3OwogICAgdWNoYXIgY2w7CgoKCiAgICBlbnVt IHsgbmV0X29yZGVyZWQgPSAxIH07CiMgMjAyICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0y LjMuMi9pbmNsdWRlL3FzdHJpbmcuaCIKfSA7CgppbmxpbmUgUUNoYXI6OlFDaGFyKCkKewogICAg cncgPSAwOyBjbCA9IDA7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggY2hhciBjICkKewogICAg cncgPSAwOyBjbCA9ICh1Y2hhciljOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMg KQp7CiAgICBydyA9IDA7IGNsID0gYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1Y2hhciBj LCB1Y2hhciByICkKewogICAgcncgPSByOyBjbCA9IGM7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hh ciggY29uc3QgUUNoYXImIGMgKQp7CiAgICBydyA9IGMucnc7IGNsID0gYy5jbDsKCgoKfQppbmxp bmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKQp7CiAgICBydyA9ICh1Y2hhcikoKHJjPj44KSYw eGZmKTsgY2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHNo b3J0IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShy YyYweGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1aW50IHJjICkKewogICAgcncgPSAo dWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUg UUNoYXI6OlFDaGFyKCBpbnQgcmMgKQp7CiAgICBydyA9ICh1Y2hhcikoKHJjPj44KSYweGZmKTsg Y2wgPSAodWNoYXIpKHJjJjB4ZmYpOwoKCgp9CgoKaW5saW5lIGludCBvcGVyYXRvcj09KCBjaGFy IGNoLCBRQ2hhciBjICkKewogICAgcmV0dXJuIGNoID09IGMuY2wgJiYgIWMucnc7Cn0KCmlubGlu ZSBpbnQgb3BlcmF0b3I9PSggUUNoYXIgYywgY2hhciBjaCApCnsKICAgIHJldHVybiBjaCA9PSBj LmNsICYmICFjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBj MiApCnsKICAgIHJldHVybiBjMS5jbCA9PSBjMi5jbAogICAgICAgICYmIGMxLnJ3ID09IGMyLnJ3 Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJl dHVybiBjMS5jbCAhPSBjMi5jbAogICAgICAgIHx8IGMxLnJ3ICE9IGMyLnJ3Owp9CgppbmxpbmUg aW50IG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gY2ggIT0gYy5j bCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7 CiAgICByZXR1cm4gY2ggIT0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0o IFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gIShjaCA8IGMuY2wgfHwgYy5ydyk7Cn0K CmlubGluZSBpbnQgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBj aCA8PSBjLmNsIHx8IGMucnc7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFD aGFyIGMyICkKewogICAgcmV0dXJuIGMxLnJ3ID4gYzIucncKICAgICAgICA/IEZBTFNFCiAgICAg ICAgOiBjMS5ydyA8IGMyLnJ3CiAgICAgICAgICAgID8gVFJVRQogICAgICAgICAgICA6IGMxLmNs IDw9IGMyLmNsOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPj0oIFFDaGFyIGMsIGNoYXIgY2ggKSB7 IHJldHVybiBjaCA8PSBjOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+PSggY2hhciBjaCwgUUNoYXIg YyApIHsgcmV0dXJuIGMgPD0gY2g7IH0KaW5saW5lIGludCBvcGVyYXRvcj49KCBRQ2hhciBjMSwg UUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggUUNo YXIgYywgY2hhciBjaCApIHsgcmV0dXJuICEoY2g8PWMpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8 KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gIShjPD1jaCk7IH0KaW5saW5lIGludCBvcGVy YXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUg aW50IG9wZXJhdG9yPiggUUNoYXIgYywgY2hhciBjaCApIHsgcmV0dXJuICEoY2g+PWMpOyB9Cmlu bGluZSBpbnQgb3BlcmF0b3I+KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gIShjPj1jaCk7 IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEo YzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFT dHJpbmdEYXRhKCkgOgogICAgICAgIHVuaWNvZGUoMCksIGFzY2lpKDApLCBsZW4oMCksIG1heGwo MCksIGRpcnR5YXNjaWkoMCkgeyByZWYoKTsgfQogICAgUVN0cmluZ0RhdGEoUUNoYXIgKnUsIHVp bnQgbCwgdWludCBtKSA6CiAgICAgICAgdW5pY29kZSh1KSwgYXNjaWkoMCksIGxlbihsKSwgbWF4 bChtKSwgZGlydHlhc2NpaSgwKSB7IH0KCiAgICB+UVN0cmluZ0RhdGEoKSB7IGlmICggdW5pY29k ZSApIGRlbGV0ZVtdICgoY2hhciopdW5pY29kZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgg YXNjaWkgKSBkZWxldGVbXSBhc2NpaTsgfQoKICAgIHZvaWQgZGVsZXRlU2VsZigpOwogICAgUUNo YXIgKnVuaWNvZGU7CiAgICBjaGFyICphc2NpaTsKICAgIHVpbnQgbGVuOwogICAgdWludCBtYXhs OjMwOwogICAgdWludCBkaXJ0eWFzY2lpOjE7Cn07CgoKY2xhc3MgUVN0cmluZwp7CnB1YmxpYzoK ICAgIFFTdHJpbmcoKTsKICAgIFFTdHJpbmcoIFFDaGFyICk7CiAgICBRU3RyaW5nKCBjb25zdCBR U3RyaW5nICYgKTsKICAgIFFTdHJpbmcoIGNvbnN0IFFCeXRlQXJyYXkmICk7CiAgICBRU3RyaW5n KCBjb25zdCBRQ2hhciogdW5pY29kZSwgdWludCBsZW5ndGggKTsKCiAgICBRU3RyaW5nKCBjb25z dCBjaGFyICpzdHIgKTsKCiAgICB+UVN0cmluZygpOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSgg Y29uc3QgUVN0cmluZyAmICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBjaGFyICog KTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmlu ZyAmb3BlcmF0b3I9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyAp OwoKICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25z dDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAg IHZvaWQgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CgoKCgogICAgdm9pZCBmaWxsKCBRQ2hhciBjLCBp bnQgbGVuID0gLTEgKTsKCiAgICBRU3RyaW5nIGNvcHkoKSBjb25zdDsKCiAgICBRU3RyaW5nIGFy Zyhsb25nIGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAgIFFTdHJp bmcgYXJnKHVsb25nIGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBjb25zdDsKICAg IFFTdHJpbmcgYXJnKGludCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7 CiAgICBRU3RyaW5nIGFyZyh1aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwKSBj b25zdDsKICAgIFFTdHJpbmcgYXJnKHNob3J0IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNl PTEwKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKHVzaG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBp bnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhjaGFyIGEsIGludCBmaWVsZHdpZHRo PTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoUUNoYXIgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29u c3Q7CiAgICBRU3RyaW5nIGFyZyhjb25zdCBRU3RyaW5nJiBhLCBpbnQgZmllbGR3aWR0aD0wKSBj b25zdDsKICAgIFFTdHJpbmcgYXJnKGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0aD0wLCBjaGFyIGZt dD0nZycsIGludCBwcmVjPS0xKSBjb25zdDsKCiAgICBRU3RyaW5nICZzcHJpbnRmKCBjb25zdCBj aGFyKiBmb3JtYXQsIC4uLiApCgogICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50 ZiwgMiwgMykpKQoKICAgICAgICA7CgogICAgaW50IGZpbmQoIFFDaGFyIGMsIGludCBpbmRleD0w LCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0w LCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRU3RyaW5nICZzdHIs IGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBR UmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7CgogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIq IHN0ciwgaW50IGluZGV4PTAgKSBjb25zdDsKCiAgICBpbnQgZmluZFJldiggUUNoYXIgYywgaW50 IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNoYXIgYywg aW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0 IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50 IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7CgogICAgaW50 IGZpbmRSZXYoIGNvbnN0IGNoYXIqIHN0ciwgaW50IGluZGV4PS0xICkgY29uc3Q7CgogICAgaW50 IGNvbnRhaW5zKCBRQ2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlu cyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdAogICAgICAgICAgICAgICAgICAgIHsgcmV0 dXJuIGNvbnRhaW5zKFFDaGFyKGMpLCBjcyk7IH0KCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNo YXIqIHN0ciwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBR U3RyaW5nICZzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25z dCBRUmVnRXhwICYgKSBjb25zdDsKCiAgICBRU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7 CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVp bnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1 c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0 OwogICAgUVN0cmluZyByaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJv b2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAgUVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0 cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7 CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmlu c2VydCggdWludCBpbmRleCwgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQo IHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2Vy dCggdWludCBpbmRleCwgUUNoYXIgKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwg Y2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGluZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAm YXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5n ICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcHJlcGVuZCggY2hhciAp OwogICAgUVN0cmluZyAmcHJlcGVuZCggUUNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNv bnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxl biApOwogICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFT dHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNv bnN0IFFDaGFyKiwgdWludCBjbGVuICk7CiAgICBRU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVn RXhwICYsIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAs IGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAsIGlu dCBiYXNlPTEwICkgY29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEw ICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25z dDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAg dWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGZsb2F0 IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZSggYm9vbCAq b2s9MCApIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNldE51bSggc2hvcnQsIGludCBiYXNlPTEwICk7 CiAgICBRU3RyaW5nICZzZXROdW0oIHVzaG9ydCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcg JnNldE51bSggaW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1aW50LCBp bnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCBsb25nLCBpbnQgYmFzZT0xMCApOwog ICAgUVN0cmluZyAmc2V0TnVtKCB1bG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNl dE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFTdHJpbmcgJnNldE51 bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgc3RhdGljIFFTdHJpbmcg bnVtYmVyKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1 bG9uZywgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBpbnQsIGludCBi YXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIHVpbnQsIGludCBiYXNlPTEwKTsK ICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02 ICk7CgogICAgdm9pZCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIFFDaGFyIGMgKTsKCiAgICBRU3Ry aW5nICZvcGVyYXRvcis9KCBjb25zdCBRU3RyaW5nICZzdHIgKTsKICAgIFFTdHJpbmcgJm9wZXJh dG9yKz0oIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwoKCiAg ICBRQ2hhciBhdCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiBpPGQtPmxlbiA/IGQt PnVuaWNvZGVbaV0gOiBRQ2hhcjo6bnVsbDsgfQogICAgUUNoYXIgb3BlcmF0b3JbXSggaW50IGkg KSBjb25zdCB7IHJldHVybiBhdCgodWludClpKTsgfQogICAgUUNoYXJSZWYgYXQoIHVpbnQgaSAp OwogICAgUUNoYXJSZWYgb3BlcmF0b3JbXSggaW50IGkgKTsKCiAgICBRQ2hhciBjb25zdHJlZih1 aW50IGkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gYXQoaSk7IH0KICAgIFFDaGFyJiByZWYodWlu dCBpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGQtPmNvdW50IT0xIHx8IGk+PWQtPmxlbikK ICAgICAgICAgICAgICAgIHN1YmF0KGkpOwogICAgICAgICAgICBkLT5kaXJ0eWFzY2lpPTE7CiAg ICAgICAgICAgIHJldHVybiBkLT51bmljb2RlW2ldOwogICAgICAgIH0KCiAgICBjb25zdCBRQ2hh ciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIGQtPnVuaWNvZGU7IH0KICAgIGNvbnN0IGNoYXIq IGFzY2lpKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBsYXRpbjEoKSBjb25zdDsKICAgIHN0YXRp YyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3QgY2hhciosIGludCBsZW49LTEpOwoKICAgIFFDU3Ry aW5nIHV0ZjgoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21VdGY4KGNvbnN0IGNoYXIq LCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmluZyBsb2NhbDhCaXQoKSBjb25zdDsKICAgIHN0YXRp YyBRU3RyaW5nIGZyb21Mb2NhbDhCaXQoY29uc3QgY2hhciosIGludCBsZW49LTEpOwogICAgYm9v bCBvcGVyYXRvciEoKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBjaGFyICooKSBjb25zdCB7 IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBRU3RyaW5nICZzZXRVbmljb2RlKCBjb25zdCBRQ2hh ciogdW5pY29kZSwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnNldFVuaWNvZGVDb2RlcyggY29u c3QgdXNob3J0KiB1bmljb2RlX2FzX3VzaG9ydHMsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZz ZXRMYXRpbjEoIGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xICk7CgogICAgaW50IGNvbXBhcmUoIGNv bnN0IFFTdHJpbmcmIHMgKSBjb25zdDsKICAgIHN0YXRpYyBpbnQgY29tcGFyZSggY29uc3QgUVN0 cmluZyYgczEsIGNvbnN0IFFTdHJpbmcmIHMyICkKICAgICAgICB7IHJldHVybiBzMS5jb21wYXJl KHMyKTsgfQoKCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFt ICYsIFFTdHJpbmcgJiApOwoKCiAgICB2b2lkIGNvbXBvc2UoKTsKICAgIFFDaGFyOjpEaXJlY3Rp b24gYmFzaWNEaXJlY3Rpb24oKTsKICAgIFFTdHJpbmcgdmlzdWFsKGludCBpbmRleCA9IDAsIGlu dCBsZW4gPSAtMSk7CgoKICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBsYXRp bjEoKTsgfQoKCiAgICBib29sIHN0YXJ0c1dpdGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7Cgpw cml2YXRlOgogICAgUVN0cmluZyggaW50IHNpemUsIGJvb2wgKTsKCiAgICB2b2lkIGRlcmVmKCk7 CiAgICB2b2lkIHJlYWxfZGV0YWNoKCk7CiAgICB2b2lkIHNldExlbmd0aCggdWludCBwb3MgKTsK ICAgIHZvaWQgc3ViYXQoIHVpbnQgKTsKICAgIGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50JiBs ZW4pIGNvbnN0OwoKICAgIHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IGNoYXIq LCB1aW50ICogbGVuLCB1aW50IG1heGxlbj0odWludCktMSApOwogICAgc3RhdGljIFFDaGFyKiBh c2NpaVRvVW5pY29kZSggY29uc3QgUUJ5dGVBcnJheSYsIHVpbnQgKiBsZW4gKTsKICAgIHN0YXRp YyBjaGFyKiB1bmljb2RlVG9Bc2NpaSggY29uc3QgUUNoYXIqLCB1aW50IGxlbiApOwoKICAgIFFT dHJpbmdEYXRhICpkOwogICAgc3RhdGljIFFTdHJpbmdEYXRhKiBzaGFyZWRfbnVsbDsKICAgIHN0 YXRpYyBRU3RyaW5nRGF0YSogbWFrZVNoYXJlZE51bGwoKTsKCiAgICBmcmllbmQgY2xhc3MgUUNv bnN0U3RyaW5nOwogICAgUVN0cmluZyhRU3RyaW5nRGF0YSogZGQsIGJvb2wgKSA6IGQoZGQpIHsg fQp9OwoKY2xhc3MgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3Ry aW5nJiBzOwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykg OiBzKCpzdHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBj b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEo KSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVm IG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNo YXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQog ICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhp czsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihw KT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNo b3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVy YXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFy UmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAg ICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlz OyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsg fQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAg Ym9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0K ICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgp OyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3Bh Y2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlz TWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihw KS5pc0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25z dHJlZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVy biBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkg Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRW YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBR Q2hhciBsb3dlcigpIHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNoYXIg dXBwZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0 ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7 IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25z dHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmluZygpIGNvbnN0 IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygpOyB9CiAgICBib29sIG1pcnJvcmVkKCkg Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBRQ2hhciBtaXJy b3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9 CiAgICBRU3RyaW5nIGRlY29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp LmRlY29tcG9zaXRpb24oKTsgfQogICAgUUNoYXI6OkRlY29tcG9zaXRpb24gZGVjb21wb3NpdGlv blRhZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGVjb21wb3NpdGlvblRhZygpOyB9 CgoKICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNlbGwoKTsg fQogICAgdWNoYXIgcm93KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5yb3coKTsgfQoK fTsKCmlubGluZSBRQ2hhclJlZiBRU3RyaW5nOjphdCggdWludCBpICkgeyByZXR1cm4gUUNoYXJS ZWYodGhpcyxpKTsgfQppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6b3BlcmF0b3JbXSggaW50IGkg KSB7IHJldHVybiBhdCgodWludClpKTsgfQoKCmNsYXNzIFFDb25zdFN0cmluZyA6IHByaXZhdGUg UVN0cmluZyB7CnB1YmxpYzoKICAgIFFDb25zdFN0cmluZyggUUNoYXIqIHVuaWNvZGUsIHVpbnQg bGVuZ3RoICk7CiAgICB+UUNvbnN0U3RyaW5nKCk7CiAgICBjb25zdCBRU3RyaW5nJiBzdHJpbmco KSBjb25zdCB7IHJldHVybiAqdGhpczsgfQp9OwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9y PDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmcgJiApOwogUURhdGFTdHJlYW0gJm9wZXJh dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmcgJiApOwojIDY0MSAiL3Vzci9zcmMvcGFja2Fn ZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpRU3Ry aW5nKCkgOgogICAgZChzaGFyZWRfbnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51bGwo KSkKewogICAgZC0+cmVmKCk7Cn0KCmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAgIGlm ICggZC0+ZGVyZWYoKSApIHsKICAgICAgICBpZiAoIGQgPT0gc2hhcmVkX251bGwgKQogICAgICAg ICAgICBzaGFyZWRfbnVsbCA9IDA7CiAgICAgICAgZC0+ZGVsZXRlU2VsZigpOwogICAgfQp9Cgpp bmxpbmUgUVN0cmluZyAmUVN0cmluZzo6b3BlcmF0b3I9KCBRQ2hhciBjICkKeyByZXR1cm4gKnRo aXMgPSBRU3RyaW5nKGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6b3BlcmF0b3I9KCBj aGFyIGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoUUNoYXIoYykpOyB9CgppbmxpbmUgYm9v bCBRU3RyaW5nOjppc051bGwoKSBjb25zdAp7IHJldHVybiB1bmljb2RlKCkgPT0gMDsgfQoKaW5s aW5lIGJvb2wgUVN0cmluZzo6b3BlcmF0b3IhKCkgY29uc3QKeyByZXR1cm4gaXNOdWxsKCk7IH0K CmlubGluZSB1aW50IFFTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIGQtPmxlbjsgfQoK aW5saW5lIGJvb2wgUVN0cmluZzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGxlbmd0aCgpID09 IDA7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRU3Ry aW5nKCAqdGhpcyApOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY29uc3Qg UVN0cmluZyAmIHMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFT dHJpbmc6OnByZXBlbmQoIFFDaGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxjKTsgfQoKaW5saW5l IFFTdHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMp OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6YXBwZW5kKCBjb25zdCBRU3RyaW5nICYgcyAp CnsgcmV0dXJuIG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBl bmQoIFFDaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9CgppbmxpbmUgUVN0cmluZyAm UVN0cmluZzo6YXBwZW5kKCBjaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9Cgppbmxp bmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBzaG9ydCBuLCBpbnQgYmFzZSApCnsgcmV0dXJu IHNldE51bSgobG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51 bSggdXNob3J0IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsg fQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggaW50IG4sIGludCBiYXNlICkKeyBy ZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6 c2V0TnVtKCB1aW50IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNl KTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBp bnQgcHJlYyApCnsgcmV0dXJuIHNldE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFT dHJpbmcgUVN0cmluZzo6YXJnKGludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0 CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJp bmcgUVN0cmluZzo6YXJnKHVpbnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7 IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmlu ZyBRU3RyaW5nOjphcmcoc2hvcnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7 IHJldHVybiBhcmcoKGxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5n IFFTdHJpbmc6OmFyZyh1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7 IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgaW50IFFT dHJpbmc6OmZpbmQoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzICkgY29uc3QKeyByZXR1cm4g ZmluZChRQ2hhcihjKSwgaW5kZXgsIGNzKTsgfQoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kUmV2 KCBjaGFyIGMsIGludCBpbmRleCwgYm9vbCBjcykgY29uc3QKeyByZXR1cm4gZmluZFJldiggUUNo YXIoYyksIGluZGV4LCBjcyApOyB9CgoKCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY29uc3Qg Y2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kKFFTdHJpbmc6OmZyb21M YXRpbjEoc3RyKSwgaW5kZXgpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNvbnN0 IGNoYXIqIHN0ciwgaW50IGluZGV4ICkgY29uc3QKeyByZXR1cm4gZmluZFJldihRU3RyaW5nOjpm cm9tTGF0aW4xKHN0ciksIGluZGV4KTsgfQoKCgoKCgoKIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg UVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPCggY29uc3Qg UVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPD0oIGNvbnN0 IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRvcj09KCBjb25z dCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I+KCBjb25z dCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I+PSggY29u c3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgogYm9vbCBvcGVyYXRvciE9KCBj b25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I8KCBjb25z dCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I8PSggY29uc3Qg UVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFT dHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJp bmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5n ICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEs IGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNv bnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25z dCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29uc3Qg UVN0cmluZyAmczIgKTsKCiBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBR U3RyaW5nICZzMiApOwoKCiBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcg JnMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1w ICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNv bnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSAp OwogICAgdG1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoczIpOwogICAgcmV0dXJuIHRtcDsKfQoK IGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcg JnMyICkKewogICAgUVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCBzMSApOwogICAg dG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiBpbmxpbmUgUVN0cmluZyBvcGVyYXRvciso IGNvbnN0IFFTdHJpbmcgJnMxLCBRQ2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwog ICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRU3RyaW5nIG9wZXJhdG9y KyggY29uc3QgUVN0cmluZyAmczEsIGNoYXIgYzIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsK ICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgUVN0cmluZyBvcGVyYXRv cisoIFFDaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAg dG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBRU3Ry aW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5n IHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KIyA0 NSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDIKIyAxICJrZXJuZWwvcW5hbWVzcGFjZS5oIiAxCiMg NDYgImtlcm5lbC9xbmFtZXNwYWNlLmgiCmNsYXNzIFFDb2xvcjsKY2xhc3MgUUN1cnNvcjsKCgpj bGFzcyBRdCB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjb2xvcjA7CiAgICBz dGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IxOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGJs YWNrOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHdoaXRlOwogICAgc3RhdGljIGNvbnN0IFFD b2xvciAmIGRhcmtHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGdyYXk7CiAgICBzdGF0 aWMgY29uc3QgUUNvbG9yICYgbGlnaHRHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHJl ZDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmVlbjsKICAgIHN0YXRpYyBjb25zdCBRQ29s b3IgJiBibHVlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGN5YW47CiAgICBzdGF0aWMgY29u c3QgUUNvbG9yICYgbWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB5ZWxsb3c7CiAg ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1JlZDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig JiBkYXJrR3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0JsdWU7CiAgICBzdGF0 aWMgY29uc3QgUUNvbG9yICYgZGFya0N5YW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFy a01hZ2VudGE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1llbGxvdzsKCgogICAgZW51 bSBCdXR0b25TdGF0ZSB7CiAgICAgICAgTm9CdXR0b24gPSAweDAwMDAsCiAgICAgICAgTGVmdEJ1 dHRvbiA9IDB4MDAwMSwKICAgICAgICBSaWdodEJ1dHRvbiA9IDB4MDAwMiwKICAgICAgICBNaWRC dXR0b24gPSAweDAwMDQsCiAgICAgICAgTW91c2VCdXR0b25NYXNrID0gMHgwMDA3LAogICAgICAg IFNoaWZ0QnV0dG9uID0gMHgwMDA4LAogICAgICAgIENvbnRyb2xCdXR0b24gPSAweDAwMTAsCiAg ICAgICAgQWx0QnV0dG9uID0gMHgwMDIwLAogICAgICAgIEtleUJ1dHRvbk1hc2sgPSAweDAwMzgs CiAgICAgICAgS2V5cGFkID0gMHg0MDAwCiAgICB9OwoKCiAgICBlbnVtIE9yaWVudGF0aW9uIHsK ICAgICAgICBIb3Jpem9udGFsLAogICAgICAgIFZlcnRpY2FsCiAgICB9OwoKCgoKICAgIGVudW0g QWxpZ25tZW50RmxhZ3MgewogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAgICBBbGln blJpZ2h0ID0gMHgwMDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAgICAgICBB bGlnblRvcCA9IDB4MDAwOCwKICAgICAgICBBbGlnbkJvdHRvbSA9IDB4MDAxMCwKICAgICAgICBB bGlnblZDZW50ZXIgPSAweDAwMjAsCiAgICAgICAgQWxpZ25DZW50ZXIgPSBBbGlnblZDZW50ZXIg fCBBbGlnbkhDZW50ZXIsCgogICAgICAgIFNpbmdsZUxpbmUgPSAweDAwNDAsCiAgICAgICAgRG9u dENsaXAgPSAweDAwODAsCiAgICAgICAgRXhwYW5kVGFicyA9IDB4MDEwMCwKICAgICAgICBTaG93 UHJlZml4ID0gMHgwMjAwLAogICAgICAgIFdvcmRCcmVhayA9IDB4MDQwMCwKICAgICAgICBEb250 UHJpbnQgPSAweDEwMDAKICAgIH07CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAgICAgIFdT dGF0ZV9DcmVhdGVkID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQgPSAweDAw MDAwMDAyLAogICAgICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAgICBXU3Rh dGVfRm9yY2VIaWRlID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29yID0gMHgw MDAwMDAxMCwKICAgICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAsCiAgICAg ICAgV1N0YXRlX0NvbXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRlX0Jsb2Nr VXBkYXRlcyA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9IDB4MDAw MDAxMDAsCiAgICAgICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAgICAgIFdT dGF0ZV9Db25maWdQZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVzaXplZCA9 IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwKICAgICAg ICBXU3RhdGVfUG9saXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQgPSAweDAw MDA0MDAwLAogICAgICAgIFdTdGF0ZV9Nb2RhbCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0YXRl X1Jlc2VydmVkMSA9IDB4MDAwMTAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMiA9IDB4MDAw MjAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMyA9IDB4MDAwNDAwMDAsCiAgICAgICAgV1N0 YXRlX01heGltaXplZCA9IDB4MDAwODAwMDAsCiAgICAgICAgV1N0YXRlX1RyYW5zbGF0ZUJhY2tn cm91bmQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0gMHgwMDIw MDAwMCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAKICAgIH07CgoKICAgIHR5 cGVkZWYgdWludCBXRmxhZ3M7CgoKICAgIGVudW0gV2lkZ2V0RmxhZ3MgewogICAgICAgIFdUeXBl X1RvcExldmVsID0gMHgwMDAwMDAwMSwKICAgICAgICBXVHlwZV9Nb2RhbCA9IDB4MDAwMDAwMDIs CiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3Ag PSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBX U3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVy ID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwK ICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAwMDAwLAogICAgICAgIFdTdHlsZV9UaXRs ZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAg ICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXpl ID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwg V1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAg ICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0RpYWxvZyA9 IDB4MDAwMDIwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAwMCwKICAg ICAgICBXU3R5bGVfTm9Cb3JkZXJFeCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0eWxlX01hc2sg PSAweDAwMDBmZmYwLAoKICAgICAgICBXRGVzdHJ1Y3RpdmVDbG9zZSA9IDB4MDAwMTAwMDAsCiAg ICAgICAgV1BhaW50RGVza3RvcCA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1BhaW50VW5jbGlwcGVk ID0gMHgwMDA0MDAwMCwKICAgICAgICBXUGFpbnRDbGV2ZXIgPSAweDAwMDgwMDAwLAogICAgICAg IFdSZXNpemVOb0VyYXNlID0gMHgwMDEwMDAwMCwKICAgICAgICBXTW91c2VOb01hc2sgPSAweDAw MjAwMDAwLAogICAgICAgIFdOb3J0aFdlc3RHcmF2aXR5ID0gMHgwMDQwMDAwMCwKICAgICAgICBX UmVwYWludE5vRXJhc2UgPSAweDAwODAwMDAwLAogICAgICAgIFdYMTFCeXBhc3NXTSA9IDB4MDEw MDAwMDAsCiAgICAgICAgV0dyb3VwTGVhZGVyID0gMHgwMjAwMDAwMAoKICAgIH07CgoKCgogICAg ZW51bSBJbWFnZUNvbnZlcnNpb25GbGFncyB7CiAgICAgICAgQ29sb3JNb2RlX01hc2sgPSAweDAw MDAwMDAzLAogICAgICAgIEF1dG9Db2xvciA9IDB4MDAwMDAwMDAsCiAgICAgICAgQ29sb3JPbmx5 ID0gMHgwMDAwMDAwMywKICAgICAgICBNb25vT25seSA9IDB4MDAwMDAwMDIsCgoKICAgICAgICBB bHBoYURpdGhlcl9NYXNrID0gMHgwMDAwMDAwYywKICAgICAgICBUaHJlc2hvbGRBbHBoYURpdGhl ciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZEFscGhhRGl0aGVyID0gMHgwMDAwMDAwNCwK ICAgICAgICBEaWZmdXNlQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA4LAogICAgICAgIE5vQWxwaGEg PSAweDAwMDAwMDBjLAoKICAgICAgICBEaXRoZXJfTWFzayA9IDB4MDAwMDAwMzAsCiAgICAgICAg RGlmZnVzZURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZERpdGhlciA9IDB4MDAw MDAwMTAsCiAgICAgICAgVGhyZXNob2xkRGl0aGVyID0gMHgwMDAwMDAyMCwKCgogICAgICAgIERp dGhlck1vZGVfTWFzayA9IDB4MDAwMDAwYzAsCiAgICAgICAgQXV0b0RpdGhlciA9IDB4MDAwMDAw MDAsCiAgICAgICAgUHJlZmVyRGl0aGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBBdm9pZERpdGhl ciA9IDB4MDAwMDAwODAKICAgIH07CgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFy ZW50TW9kZSwKICAgICAgICBPcGFxdWVNb2RlCiAgICB9OwoKICAgIGVudW0gUGFpbnRVbml0IHsK ICAgICAgICBQaXhlbFVuaXQsCiAgICAgICAgTG9NZXRyaWNVbml0LAogICAgICAgIEhpTWV0cmlj VW5pdCwKICAgICAgICBMb0VuZ2xpc2hVbml0LAogICAgICAgIEhpRW5nbGlzaFVuaXQsCiAgICAg ICAgVHdpcHNVbml0CiAgICB9OwoKICAgIGVudW0gR1VJU3R5bGUgewogICAgICAgIE1hY1N0eWxl LAogICAgICAgIFdpbmRvd3NTdHlsZSwKICAgICAgICBXaW4zU3R5bGUsCiAgICAgICAgUE1TdHls ZSwKICAgICAgICBNb3RpZlN0eWxlCiAgICB9OwoKICAgIGVudW0gTW9kaWZpZXIgewogICAgICAg IFNISUZUID0gMHgwMDIwMDAwMCwKICAgICAgICBDVFJMID0gMHgwMDQwMDAwMCwKICAgICAgICBB TFQgPSAweDAwODAwMDAwLAogICAgICAgIE1PRElGSUVSX01BU0sgPSAweDAwZTAwMDAwLAogICAg ICAgIFVOSUNPREVfQUNDRUwgPSAweDEwMDAwMDAwLAoKICAgICAgICBBU0NJSV9BQ0NFTCA9IFVO SUNPREVfQUNDRUwKICAgIH07CgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2NhcGUgPSAw eDEwMDAsCiAgICAgICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3RhYiA9IDB4 MTAwMiwgS2V5X0JhY2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3NwYWNlID0g MHgxMDAzLCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlfUmV0dXJu ID0gMHgxMDA0LAogICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlfSW5zZXJ0 ID0gMHgxMDA2LAogICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5X1BhdXNl ID0gMHgxMDA4LAogICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlfU3lzUmVx ID0gMHgxMDBhLAogICAgICAgIEtleV9Ib21lID0gMHgxMDEwLAogICAgICAgIEtleV9FbmQgPSAw eDEwMTEsCiAgICAgICAgS2V5X0xlZnQgPSAweDEwMTIsCiAgICAgICAgS2V5X1VwID0gMHgxMDEz LAogICAgICAgIEtleV9SaWdodCA9IDB4MTAxNCwKICAgICAgICBLZXlfRG93biA9IDB4MTAxNSwK ICAgICAgICBLZXlfUHJpb3IgPSAweDEwMTYsIEtleV9QYWdlVXAgPSBLZXlfUHJpb3IsCiAgICAg ICAgS2V5X05leHQgPSAweDEwMTcsIEtleV9QYWdlRG93biA9IEtleV9OZXh0LAogICAgICAgIEtl eV9TaGlmdCA9IDB4MTAyMCwKICAgICAgICBLZXlfQ29udHJvbCA9IDB4MTAyMSwKICAgICAgICBL ZXlfTWV0YSA9IDB4MTAyMiwKICAgICAgICBLZXlfQWx0ID0gMHgxMDIzLAogICAgICAgIEtleV9D YXBzTG9jayA9IDB4MTAyNCwKICAgICAgICBLZXlfTnVtTG9jayA9IDB4MTAyNSwKICAgICAgICBL ZXlfU2Nyb2xsTG9jayA9IDB4MTAyNiwKICAgICAgICBLZXlfRjEgPSAweDEwMzAsCiAgICAgICAg S2V5X0YyID0gMHgxMDMxLAogICAgICAgIEtleV9GMyA9IDB4MTAzMiwKICAgICAgICBLZXlfRjQg PSAweDEwMzMsCiAgICAgICAgS2V5X0Y1ID0gMHgxMDM0LAogICAgICAgIEtleV9GNiA9IDB4MTAz NSwKICAgICAgICBLZXlfRjcgPSAweDEwMzYsCiAgICAgICAgS2V5X0Y4ID0gMHgxMDM3LAogICAg ICAgIEtleV9GOSA9IDB4MTAzOCwKICAgICAgICBLZXlfRjEwID0gMHgxMDM5LAogICAgICAgIEtl eV9GMTEgPSAweDEwM2EsCiAgICAgICAgS2V5X0YxMiA9IDB4MTAzYiwKICAgICAgICBLZXlfRjEz ID0gMHgxMDNjLAogICAgICAgIEtleV9GMTQgPSAweDEwM2QsCiAgICAgICAgS2V5X0YxNSA9IDB4 MTAzZSwKICAgICAgICBLZXlfRjE2ID0gMHgxMDNmLAogICAgICAgIEtleV9GMTcgPSAweDEwNDAs CiAgICAgICAgS2V5X0YxOCA9IDB4MTA0MSwKICAgICAgICBLZXlfRjE5ID0gMHgxMDQyLAogICAg ICAgIEtleV9GMjAgPSAweDEwNDMsCiAgICAgICAgS2V5X0YyMSA9IDB4MTA0NCwKICAgICAgICBL ZXlfRjIyID0gMHgxMDQ1LAogICAgICAgIEtleV9GMjMgPSAweDEwNDYsCiAgICAgICAgS2V5X0Yy NCA9IDB4MTA0NywKICAgICAgICBLZXlfRjI1ID0gMHgxMDQ4LAogICAgICAgIEtleV9GMjYgPSAw eDEwNDksCiAgICAgICAgS2V5X0YyNyA9IDB4MTA0YSwKICAgICAgICBLZXlfRjI4ID0gMHgxMDRi LAogICAgICAgIEtleV9GMjkgPSAweDEwNGMsCiAgICAgICAgS2V5X0YzMCA9IDB4MTA0ZCwKICAg ICAgICBLZXlfRjMxID0gMHgxMDRlLAogICAgICAgIEtleV9GMzIgPSAweDEwNGYsCiAgICAgICAg S2V5X0YzMyA9IDB4MTA1MCwKICAgICAgICBLZXlfRjM0ID0gMHgxMDUxLAogICAgICAgIEtleV9G MzUgPSAweDEwNTIsCiAgICAgICAgS2V5X1N1cGVyX0wgPSAweDEwNTMsCiAgICAgICAgS2V5X1N1 cGVyX1IgPSAweDEwNTQsCiAgICAgICAgS2V5X01lbnUgPSAweDEwNTUsCiAgICAgICAgS2V5X0h5 cGVyX0wgPSAweDEwNTYsCiAgICAgICAgS2V5X0h5cGVyX1IgPSAweDEwNTcsCiAgICAgICAgS2V5 X0hlbHAgPSAweDEwNTgsCiAgICAgICAgS2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBLZXlfQW55 ID0gS2V5X1NwYWNlLAogICAgICAgIEtleV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtleV9RdW90 ZURibCA9IDB4MjIsCiAgICAgICAgS2V5X051bWJlclNpZ24gPSAweDIzLAogICAgICAgIEtleV9E b2xsYXIgPSAweDI0LAogICAgICAgIEtleV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBLZXlfQW1w ZXJzYW5kID0gMHgyNiwKICAgICAgICBLZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAgICAgS2V5 X1BhcmVuTGVmdCA9IDB4MjgsCiAgICAgICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAogICAgICAg IEtleV9Bc3RlcmlzayA9IDB4MmEsCiAgICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAgICAgIEtl eV9Db21tYSA9IDB4MmMsCiAgICAgICAgS2V5X01pbnVzID0gMHgyZCwKICAgICAgICBLZXlfUGVy aW9kID0gMHgyZSwKICAgICAgICBLZXlfU2xhc2ggPSAweDJmLAogICAgICAgIEtleV8wID0gMHgz MCwKICAgICAgICBLZXlfMSA9IDB4MzEsCiAgICAgICAgS2V5XzIgPSAweDMyLAogICAgICAgIEtl eV8zID0gMHgzMywKICAgICAgICBLZXlfNCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAweDM1LAog ICAgICAgIEtleV82ID0gMHgzNiwKICAgICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAgS2V5Xzgg PSAweDM4LAogICAgICAgIEtleV85ID0gMHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAweDNhLAog ICAgICAgIEtleV9TZW1pY29sb24gPSAweDNiLAogICAgICAgIEtleV9MZXNzID0gMHgzYywKICAg ICAgICBLZXlfRXF1YWwgPSAweDNkLAogICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwKICAgICAg ICBLZXlfUXVlc3Rpb24gPSAweDNmLAogICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAgICAgS2V5 X0EgPSAweDQxLAogICAgICAgIEtleV9CID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4NDMsCiAg ICAgICAgS2V5X0QgPSAweDQ0LAogICAgICAgIEtleV9FID0gMHg0NSwKICAgICAgICBLZXlfRiA9 IDB4NDYsCiAgICAgICAgS2V5X0cgPSAweDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwKICAgICAg ICBLZXlfSSA9IDB4NDksCiAgICAgICAgS2V5X0ogPSAweDRhLAogICAgICAgIEtleV9LID0gMHg0 YiwKICAgICAgICBLZXlfTCA9IDB4NGMsCiAgICAgICAgS2V5X00gPSAweDRkLAogICAgICAgIEtl eV9OID0gMHg0ZSwKICAgICAgICBLZXlfTyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAweDUwLAog ICAgICAgIEtleV9RID0gMHg1MSwKICAgICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAgS2V5X1Mg PSAweDUzLAogICAgICAgIEtleV9UID0gMHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUsCiAgICAg ICAgS2V5X1YgPSAweDU2LAogICAgICAgIEtleV9XID0gMHg1NywKICAgICAgICBLZXlfWCA9IDB4 NTgsCiAgICAgICAgS2V5X1kgPSAweDU5LAogICAgICAgIEtleV9aID0gMHg1YSwKICAgICAgICBL ZXlfQnJhY2tldExlZnQgPSAweDViLAogICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVjLAogICAg ICAgIEtleV9CcmFja2V0UmlnaHQgPSAweDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1bSA9IDB4 NWUsCiAgICAgICAgS2V5X1VuZGVyc2NvcmUgPSAweDVmLAogICAgICAgIEtleV9RdW90ZUxlZnQg PSAweDYwLAogICAgICAgIEtleV9CcmFjZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9CYXIgPSAw eDdjLAogICAgICAgIEtleV9CcmFjZVJpZ2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNjaWlUaWxk ZSA9IDB4N2UsCgoKCiAgICAgICAgS2V5X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAgICAgIEtl eV9leGNsYW1kb3duID0gMHgwYTEsCiAgICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAgICAgICBL ZXlfc3RlcmxpbmcgPSAweDBhMywKICAgICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwKICAgICAg ICBLZXlfeWVuID0gMHgwYTUsCiAgICAgICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAogICAgICAg IEtleV9zZWN0aW9uID0gMHgwYTcsCiAgICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4LAogICAg ICAgIEtleV9jb3B5cmlnaHQgPSAweDBhOSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUgPSAweDBh YSwKICAgICAgICBLZXlfZ3VpbGxlbW90bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9ub3RzaWdu ID0gMHgwYWMsCiAgICAgICAgS2V5X2h5cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9yZWdpc3Rl cmVkID0gMHgwYWUsCiAgICAgICAgS2V5X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtleV9kZWdy ZWUgPSAweDBiMCwKICAgICAgICBLZXlfcGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAgS2V5X3R3 b3N1cGVyaW9yID0gMHgwYjIsCiAgICAgICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBiMywKICAg ICAgICBLZXlfYWN1dGUgPSAweDBiNCwKICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAgICAgICBL ZXlfcGFyYWdyYXBoID0gMHgwYjYsCiAgICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0gMHgwYjcs CiAgICAgICAgS2V5X2NlZGlsbGEgPSAweDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJpb3IgPSAw eDBiOSwKICAgICAgICBLZXlfbWFzY3VsaW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1aWxsZW1v dHJpZ2h0ID0gMHgwYmIsCiAgICAgICAgS2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAgICAgICBL ZXlfb25laGFsZiA9IDB4MGJkLAogICAgICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgwYmUsCiAg ICAgICAgS2V5X3F1ZXN0aW9uZG93biA9IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUgPSAweDBj MCwKICAgICAgICBLZXlfQWFjdXRlID0gMHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1mbGV4ID0g MHgwYzIsCiAgICAgICAgS2V5X0F0aWxkZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlhZXJlc2lz ID0gMHgwYzQsCiAgICAgICAgS2V5X0FyaW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FFID0gMHgw YzYsCiAgICAgICAgS2V5X0NjZWRpbGxhID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2ZSA9IDB4 MGM4LAogICAgICAgIEtleV9FYWN1dGUgPSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1bWZsZXgg PSAweDBjYSwKICAgICAgICBLZXlfRWRpYWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtleV9JZ3Jh dmUgPSAweDBjYywKICAgICAgICBLZXlfSWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5X0ljaXJj dW1mbGV4ID0gMHgwY2UsCiAgICAgICAgS2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAgICAgICBL ZXlfRVRIID0gMHgwZDAsCiAgICAgICAgS2V5X050aWxkZSA9IDB4MGQxLAogICAgICAgIEtleV9P Z3JhdmUgPSAweDBkMiwKICAgICAgICBLZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAgS2V5X09j aXJjdW1mbGV4ID0gMHgwZDQsCiAgICAgICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAgICAgIEtl eV9PZGlhZXJlc2lzID0gMHgwZDYsCiAgICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcsCiAgICAg ICAgS2V5X09vYmxpcXVlID0gMHgwZDgsCiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5LAogICAg ICAgIEtleV9VYWN1dGUgPSAweDBkYSwKICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAweDBkYiwK ICAgICAgICBLZXlfVWRpYWVyZXNpcyA9IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUgPSAweDBk ZCwKICAgICAgICBLZXlfVEhPUk4gPSAweDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0gMHgwZGYs CiAgICAgICAgS2V5X2FncmF2ZSA9IDB4MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAweDBlMSwK ICAgICAgICBLZXlfYWNpcmN1bWZsZXggPSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRlID0gMHgw ZTMsCiAgICAgICAgS2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJpbmcgPSAw eDBlNSwKICAgICAgICBLZXlfYWUgPSAweDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEgPSAweDBl NywKICAgICAgICBLZXlfZWdyYXZlID0gMHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9IDB4MGU5 LAogICAgICAgIEtleV9lY2lyY3VtZmxleCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlhZXJlc2lz ID0gMHgwZWIsCiAgICAgICAgS2V5X2lncmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9pYWN1dGUg PSAweDBlZCwKICAgICAgICBLZXlfaWNpcmN1bWZsZXggPSAweDBlZSwKICAgICAgICBLZXlfaWRp YWVyZXNpcyA9IDB4MGVmLAogICAgICAgIEtleV9ldGggPSAweDBmMCwKICAgICAgICBLZXlfbnRp bGRlID0gMHgwZjEsCiAgICAgICAgS2V5X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtleV9vYWN1 dGUgPSAweDBmMywKICAgICAgICBLZXlfb2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAgICBLZXlf b3RpbGRlID0gMHgwZjUsCiAgICAgICAgS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAgICAgICBL ZXlfZGl2aXNpb24gPSAweDBmNywKICAgICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAgICAgICAg S2V5X3VncmF2ZSA9IDB4MGY5LAogICAgICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAgICAgICBL ZXlfdWNpcmN1bWZsZXggPSAweDBmYiwKICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAog ICAgICAgIEtleV95YWN1dGUgPSAweDBmZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBmZSwKICAg ICAgICBLZXlfeWRpYWVyZXNpcyA9IDB4MGZmLAoKICAgICAgICBLZXlfdW5rbm93biA9IDB4ZmZm ZgogICAgfTsKCiAgICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAgICAgICBE b3duQXJyb3csCiAgICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAgIH07CgoK ICAgIGVudW0gUmFzdGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1AsCiAgICAg ICAgWG9yUk9QLAogICAgICAgIE5vdEFuZFJPUCwKICAgICAgICBFcmFzZVJPUD1Ob3RBbmRST1As CiAgICAgICAgTm90Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RYb3JST1As CiAgICAgICAgQW5kUk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9QLAogICAg ICAgIENsZWFyUk9QLAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAgICAgQW5k Tm90Uk9QLAogICAgICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAgTm9yUk9Q LCBMYXN0Uk9QPU5vclJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAgICAgTm9Q ZW4sCiAgICAgICAgU29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERvdExpbmUs CiAgICAgICAgRGFzaERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAgICAgTVBl blN0eWxlID0gMHgwZgogICAgfTsKCiAgICBlbnVtIFBlbkNhcFN0eWxlIHsKICAgICAgICBGbGF0 Q2FwID0gMHgwMCwKICAgICAgICBTcXVhcmVDYXAgPSAweDEwLAogICAgICAgIFJvdW5kQ2FwID0g MHgyMCwKICAgICAgICBNUGVuQ2FwU3R5bGUgPSAweDMwCiAgICB9OwoKICAgIGVudW0gUGVuSm9p blN0eWxlIHsKICAgICAgICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9pbiA9IDB4 NDAsCiAgICAgICAgUm91bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxlID0gMHhj MAogICAgfTsKCiAgICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAgICAgICAg U29saWRQYXR0ZXJuLAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2UyUGF0dGVy biwKICAgICAgICBEZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAgICAgICAg RGVuc2U1UGF0dGVybiwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNlN1BhdHRl cm4sCiAgICAgICAgSG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAgIENyb3Nz UGF0dGVybiwKICAgICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJuLAogICAg ICAgIERpYWdDcm9zc1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAgfTsKCiAg ICBlbnVtIFdpbmRvd3NWZXJzaW9uIHsKICAgICAgICBXVl8zMnMgPSAweDAwMDEsCiAgICAgICAg V1ZfOTUgPSAweDAwMDIsCiAgICAgICAgV1ZfOTggPSAweDAwMDMsCiAgICAgICAgV1ZfRE9TX2Jh c2VkID0gMHgwMDBmLAoKICAgICAgICBXVl9OVCA9IDB4MDAxMCwKICAgICAgICBXVl8yMDAwID0g MHgwMDIwLAogICAgICAgIFdWX05UX2Jhc2VkID0gMHgwMGYwCiAgICB9OwoKICAgIGVudW0gVUlF ZmZlY3QgewogICAgICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUsCiAgICAg ICAgVUlfRmFkZU1lbnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJX0FuaW1h dGVUb29sdGlwLAogICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCgoKICAgIHN0YXRpYyBj b25zdCBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHVw QXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29yOwogICAg c3RhdGljIGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJz b3IgJiBpYmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZlckN1cnNv cjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0YXRpYyBj b25zdCBRQ3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3Ig JiBzaXplRkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVBbGxDdXJz b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3RhdGljIGNv bnN0IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBz cGxpdEhDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hhbmRDdXJz b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKCgogICAgZW51 bSBUZXh0Rm9ybWF0IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQsCiAgICAg ICAgQXV0b1RleHQKICAgIH07Cn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgogICAgZW51 bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAwLAogICAg ICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQcmludGVy ID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAweDA1LAog ICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmljZSA9IDB4 MTAKICAgIH07Cn07CiMgNDYgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAyCgoKIyAxICIvdXNyL2xp YjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0 CiMgMTEgIi91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9s aW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMu My9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi91c3IvbGliNjQvZ2NjLWxp Yi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMjIgIi91 c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9saW1pdHMuaCIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDE0NCAiL3Vzci9pbmNsdWRl L2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMyA0 CiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMgNAojIDEgIi91c3IvaW5j bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMgNAojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2Nh bF9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMgNAojIDM3 ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzIDQKIyAxMjcgIi91c3IvaW5jbHVk ZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzIDQKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg MiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMyA0CiMgMTQ5 ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv eG9wZW5fbGltLmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAz IDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAzNSAiL3Vzci9p bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMyA0CiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDIgMyA0CiMgMTIzICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4z L2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1z dXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNAojIDEyICIvdXNyL2xpYjY0 L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMg NDkgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAyCgoKCmNsYXNzIFFQYWludERldmljZTsKY2xhc3Mg UVBhaW50RGV2aWNlTWV0cmljczsKY2xhc3MgUVdpZGdldDsKY2xhc3MgUVdpZGdldE1hcHBlcjsK Y2xhc3MgUURpYWxvZzsKY2xhc3MgUUNvbG9yOwpjbGFzcyBRQ29sb3JHcm91cDsKY2xhc3MgUVBh bGV0dGU7CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFQb2ludDsKY2xhc3MgUVNpemU7CmNsYXNzIFFS ZWN0OwpjbGFzcyBRUG9pbnRBcnJheTsKY2xhc3MgUVBhaW50ZXI7CmNsYXNzIFFSZWdpb247CmNs YXNzIFFGb250OwpjbGFzcyBRRm9udE1ldHJpY3M7CmNsYXNzIFFGb250SW5mbzsKY2xhc3MgUVBl bjsKY2xhc3MgUUJydXNoOwpjbGFzcyBRV01hdHJpeDsKY2xhc3MgUVBpeG1hcDsKY2xhc3MgUUJp dG1hcDsKY2xhc3MgUU1vdmllOwpjbGFzcyBRSW1hZ2U7CmNsYXNzIFFJbWFnZUlPOwpjbGFzcyBR UGljdHVyZTsKY2xhc3MgUVByaW50ZXI7CmNsYXNzIFFBY2NlbDsKY2xhc3MgUVRpbWVyOwpjbGFz cyBRVGltZTsKY2xhc3MgUUNsaXBib2FyZDsKCgoKCmNsYXNzIFFXaWRnZXRMaXN0OwpjbGFzcyBR V2lkZ2V0TGlzdEl0OwojIDExNiAia2VybmVsL3F3aW5kb3dkZWZzLmgiCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBXSWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCgoKdHlwZWRlZiBz dHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVkZWYgdW5pb24gX1hFdmVudCBYRXZlbnQ7CnR5 cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwoK IERpc3BsYXkgKnF0X3hkaXNwbGF5KCk7CiBpbnQgcXRfeHNjcmVlbigpOwogV0lkIHF0X3hyb290 d2luKCk7CiBHQyBxdF94Z2V0X3JlYWRvbmx5X2djKCBib29sIG1vbm9jaHJvbWU9RkFMU0UgKTsK IEdDIHF0X3hnZXRfdGVtcF9nYyggYm9vbCBtb25vY2hyb21lPUZBTFNFICk7CiMgMTQ1ICJrZXJu ZWwvcXdpbmRvd2RlZnMuaCIKY2xhc3MgUUFwcGxpY2F0aW9uOwojIDE1NCAia2VybmVsL3F3aW5k b3dkZWZzLmgiCnR5cGVkZWYgUV9JTlQzMiBRQ09PUkQ7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUFY ID0gMjE0NzQ4MzY0NzsKY29uc3QgUUNPT1JEIFFDT09SRF9NSU4gPSAtUUNPT1JEX01BWCAtIDE7 Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBRUmdiOwoKIGNoYXIgKnFBcHBOYW1lKCk7CgoKCgp0eXBl ZGVmIHZvaWQgKCpRX0NsZWFuVXBGdW5jdGlvbikoKTsKIHZvaWQgcUFkZFBvc3RSb3V0aW5lKCBR X0NsZWFuVXBGdW5jdGlvbiApOwogdm9pZCBxUmVtb3ZlUG9zdFJvdXRpbmUoIFFfQ2xlYW5VcEZ1 bmN0aW9uICk7CgoKIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxkKCBRT2JqZWN0ICosIGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqICk7CiMgNDMgImtlcm5lbC9xd2lkZ2V0LmgiIDIKIyAxICJrZXJu ZWwvcW9iamVjdC5oIiAxCiMgNDUgImtlcm5lbC9xb2JqZWN0LmgiCiMgMSAia2VybmVsL3FldmVu dC5oIiAxCiMgNDMgImtlcm5lbC9xZXZlbnQuaCIKIyAxICJrZXJuZWwvcXJlZ2lvbi5oIiAxCiMg NDMgImtlcm5lbC9xcmVnaW9uLmgiCiMgMSAia2VybmVsL3FyZWN0LmgiIDEKIyA0MiAia2VybmVs L3FyZWN0LmgiCiMgMSAia2VybmVsL3FzaXplLmgiIDEKIyA0MiAia2VybmVsL3FzaXplLmgiCiMg MSAia2VybmVsL3Fwb2ludC5oIiAxCiMgNDYgImtlcm5lbC9xcG9pbnQuaCIKY2xhc3MgUVBvaW50 CnsKcHVibGljOgogICAgUVBvaW50KCk7CiAgICBRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyAp OwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5 KCkgY29uc3Q7CiAgICB2b2lkIHNldFgoIGludCB4ICk7CiAgICB2b2lkIHNldFkoIGludCB5ICk7 CgogICAgaW50IG1hbmhhdHRhbkxlbmd0aCgpIGNvbnN0OwoKICAgIFFDT09SRCAmcngoKTsKICAg IFFDT09SRCAmcnkoKTsKCiAgICBRUG9pbnQgJm9wZXJhdG9yKz0oIGNvbnN0IFFQb2ludCAmcCAp OwogICAgUVBvaW50ICZvcGVyYXRvci09KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2ludCAm b3BlcmF0b3IqPSggaW50IGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IqPSggZG91YmxlIGMgKTsK ICAgIFFQb2ludCAmb3BlcmF0b3IvPSggaW50IGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IvPSgg ZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBv aW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3Ih PSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQ b2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJp ZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50 ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICYs IGludCApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFQ b2ludCAmICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2lu dCAmLCBkb3VibGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggZG91Ymxl LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3ItKCBj b25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25z dCBRUG9pbnQgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvci8oIGNv bnN0IFFQb2ludCAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5n RGl2QnlaZXJvKCk7CgoKCgoKICAgIFFDT09SRCB4cDsKICAgIFFDT09SRCB5cDsKCn07CgoKCgoK CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVBvaW50ICYg KTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUG9pbnQgJiApOwoK CgoKCgppbmxpbmUgUVBvaW50OjpRUG9pbnQoKQp7IHhwPTA7IHlwPTA7IH0KCmlubGluZSBRUG9p bnQ6OlFQb2ludCggaW50IHhwb3MsIGludCB5cG9zICkKeyB4cD0oUUNPT1JEKXhwb3M7IHlwPShR Q09PUkQpeXBvczsgfQoKaW5saW5lIGJvb2wgUVBvaW50Ojppc051bGwoKSBjb25zdAp7IHJldHVy biB4cCA9PSAwICYmIHlwID09IDA7IH0KCmlubGluZSBpbnQgUVBvaW50Ojp4KCkgY29uc3QKeyBy ZXR1cm4geHA7IH0KCmlubGluZSBpbnQgUVBvaW50Ojp5KCkgY29uc3QKeyByZXR1cm4geXA7IH0K CmlubGluZSB2b2lkIFFQb2ludDo6c2V0WCggaW50IHggKQp7IHhwID0gKFFDT09SRCl4OyB9Cgpp bmxpbmUgdm9pZCBRUG9pbnQ6OnNldFkoIGludCB5ICkKeyB5cCA9IChRQ09PUkQpeTsgfQoKaW5s aW5lIFFDT09SRCAmUVBvaW50OjpyeCgpCnsgcmV0dXJuIHhwOyB9CgppbmxpbmUgUUNPT1JEICZR UG9pbnQ6OnJ5KCkKeyByZXR1cm4geXA7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0 b3IrPSggY29uc3QgUVBvaW50ICZwICkKeyB4cCs9cC54cDsgeXArPXAueXA7IHJldHVybiAqdGhp czsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvci09KCBjb25zdCBRUG9pbnQgJnAg KQp7IHhwLT1wLnhwOyB5cC09cC55cDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZR UG9pbnQ6Om9wZXJhdG9yKj0oIGludCBjICkKeyB4cCo9KFFDT09SRCljOyB5cCo9KFFDT09SRClj OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IqPSggZG91 YmxlIGMgKQp7IHhwPShRQ09PUkQpKHhwKmMpOyB5cD0oUUNPT1JEKSh5cCpjKTsgcmV0dXJuICp0 aGlzOyB9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBR UG9pbnQgJnAyICkKeyByZXR1cm4gcDEueHAgPT0gcDIueHAgJiYgcDEueXAgPT0gcDIueXA7IH0K CmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAm cDIgKQp7IHJldHVybiBwMS54cCAhPSBwMi54cCB8fCBwMS55cCAhPSBwMi55cDsgfQoKaW5saW5l IFFQb2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7 IHJldHVybiBRUG9pbnQocDEueHArcDIueHAsIHAxLnlwK3AyLnlwKTsgfQoKaW5saW5lIFFQb2lu dCBvcGVyYXRvci0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVy biBRUG9pbnQocDEueHAtcDIueHAsIHAxLnlwLXAyLnlwKTsgfQoKaW5saW5lIFFQb2ludCBvcGVy YXRvciooIGNvbnN0IFFQb2ludCAmcCwgaW50IGMgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBw LnlwKmMpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFQb2ludCAm cCApCnsgcmV0dXJuIFFQb2ludChwLnhwKmMsIHAueXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3Bl cmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKeyByZXR1cm4gUVBvaW50KChRQ09P UkQpKHAueHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9y KiggZG91YmxlIGMsIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShw LnhwKmMpLCAoUUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvci0oIGNv bnN0IFFQb2ludCAmcCApCnsgcmV0dXJuIFFQb2ludCgtcC54cCwgLXAueXApOyB9CgppbmxpbmUg UVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkK ICAgICAgICB3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgeHAvPShRQ09PUkQpYzsKICAgIHlwLz0o UUNPT1JEKWM7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3Bl cmF0b3IvPSggZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgd2Fybmlu Z0RpdkJ5WmVybygpOwoKICAgIHhwPShRQ09PUkQpKHhwL2MpOwogICAgeXA9KFFDT09SRCkoeXAv Yyk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBR UG9pbnQgJnAsIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICBRUG9pbnQ6Ondh cm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVBvaW50KHAueHAvYywgcC55cC9jKTsKfQoK aW5saW5lIFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMgKQp7Cgog ICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7Cgog ICAgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwL2MpLCAoUUNPT1JEKShwLnlwL2MpKTsKfQoj IDQzICJrZXJuZWwvcXNpemUuaCIgMgoKCgpjbGFzcyBRU2l6ZQp7CnB1YmxpYzoKICAgIFFTaXpl KCk7CiAgICBRU2l6ZSggaW50IHcsIGludCBoICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsK ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CgogICAg aW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldFdp ZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7CiAgICB2b2lkIHRyYW5z cG9zZSgpOwoKICAgIFFTaXplIGV4cGFuZGVkVG8oIGNvbnN0IFFTaXplICYgKSBjb25zdDsKICAg IFFTaXplIGJvdW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0OwoKICAgIFFDT09SRCAmcndp ZHRoKCk7CiAgICBRQ09PUkQgJnJoZWlnaHQoKTsKCiAgICBRU2l6ZSAmb3BlcmF0b3IrPSggY29u c3QgUVNpemUgJiApOwogICAgUVNpemUgJm9wZXJhdG9yLT0oIGNvbnN0IFFTaXplICYgKTsKICAg IFFTaXplICZvcGVyYXRvcio9KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJhdG9yKj0oIGRvdWJs ZSBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IvPSggaW50IGMgKTsKICAgIFFTaXplICZvcGVyYXRv ci89KCBkb3VibGUgYyApOwoKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25z dCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0 b3IhPSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBR U2l6ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVu ZCBpbmxpbmUgUVNpemUgb3BlcmF0b3ItKCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7 CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJiwgaW50ICk7 CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yKiggaW50LCBjb25zdCBRU2l6ZSAmICk7 CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJiwgZG91Ymxl ICk7CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yKiggZG91YmxlLCBjb25zdCBRU2l6 ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJiwg aW50ICk7CiAgICBmcmllbmQgaW5saW5lIFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJiwg ZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0RpdkJ5WmVybygpOwoK ICAgIFFDT09SRCB3ZDsKICAgIFFDT09SRCBodDsKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVy YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRU2l6ZSAmICk7CiBRRGF0YVN0cmVhbSAmb3Bl cmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVNpemUgJiApOwoKCgoKCgppbmxpbmUgUVNpemU6OlFT aXplKCkKeyB3ZCA9IGh0ID0gLTE7IH0KCmlubGluZSBRU2l6ZTo6UVNpemUoIGludCB3LCBpbnQg aCApCnsgd2Q9KFFDT09SRCl3OyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBib29sIFFTaXplOjpp c051bGwoKSBjb25zdAp7IHJldHVybiB3ZD09MCAmJiBodD09MDsgfQoKaW5saW5lIGJvb2wgUVNp emU6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB3ZDwxIHx8IGh0PDE7IH0KCmlubGluZSBib29s IFFTaXplOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4gd2Q+PTAgJiYgaHQ+PTA7IH0KCmlubGlu ZSBpbnQgUVNpemU6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBpbnQgUVNp emU6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGh0OyB9CgppbmxpbmUgdm9pZCBRU2l6ZTo6c2V0 V2lkdGgoIGludCB3ICkKeyB3ZD0oUUNPT1JEKXc7IH0KCmlubGluZSB2b2lkIFFTaXplOjpzZXRI ZWlnaHQoIGludCBoICkKeyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBRQ09PUkQgJlFTaXplOjpy d2lkdGgoKQp7IHJldHVybiB3ZDsgfQoKaW5saW5lIFFDT09SRCAmUVNpemU6OnJoZWlnaHQoKQp7 IHJldHVybiBodDsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IrPSggY29uc3QgUVNp emUgJnMgKQp7IHdkKz1zLndkOyBodCs9cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNp emUgJlFTaXplOjpvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmcyApCnsgd2QtPXMud2Q7IGh0LT1z Lmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGlu dCBjICkKeyB3ZCo9KFFDT09SRCljOyBodCo9KFFDT09SRCljOyByZXR1cm4gKnRoaXM7IH0KCmlu bGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB3ZD0oUUNPT1JEKSh3 ZCpjKTsgaHQ9KFFDT09SRCkoaHQqYyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIGJvb2wgb3Bl cmF0b3I9PSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVybiBzMS53 ZCA9PSBzMi53ZCAmJiBzMS5odCA9PSBzMi5odDsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgg Y29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVybiBzMS53ZCAhPSBzMi53 ZCB8fCBzMS5odCAhPSBzMi5odDsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKyggY29uc3QgUVNp emUgJiBzMSwgY29uc3QgUVNpemUgJiBzMiApCnsgcmV0dXJuIFFTaXplKHMxLndkK3MyLndkLCBz MS5odCtzMi5odCk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICZzMSwg Y29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gUVNpemUoczEud2QtczIud2QsIHMxLmh0LXMyLmh0 KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJnMsIGludCBjICkKeyBy ZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBp bnQgYywgY29uc3QgUVNpemUgJnMgKQp7IHJldHVybiBRU2l6ZShzLndkKmMsIHMuaHQqYyk7IH0K CmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsgcmV0 dXJuIFFTaXplKChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQqYykpOyB9CgppbmxpbmUg UVNpemUgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVNpemUgJnMgKQp7IHJldHVybiBRU2l6 ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5lIFFTaXplICZR U2l6ZTo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIHdh cm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZC89KFFDT09SRCljOyBodC89KFFDT09SRCljOwogICAg cmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci89KCBkb3VibGUg YyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5nRGl2QnlaZXJvKCk7Cgog ICAgd2Q9KFFDT09SRCkod2QvYyk7IGh0PShRQ09PUkQpKGh0L2MpOwogICAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmcywgaW50IGMgKQp7Cgog ICAgaWYgKCBjID09IDAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAg cmV0dXJuIFFTaXplKHMud2QvYywgcy5odC9jKTsKfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yLygg Y29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAgKQogICAgICAg IFFTaXplOjp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMu d2QvYyksIChRQ09PUkQpKHMuaHQvYykpOwp9CgppbmxpbmUgUVNpemUgUVNpemU6OmV4cGFuZGVk VG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAgcmV0dXJuIFFTaXplKCAo KHdkKSA+IChvdGhlclNpemUud2QpID8gKHdkKSA6IChvdGhlclNpemUud2QpKSwgKChodCkgPiAo b3RoZXJTaXplLmh0KSA/IChodCkgOiAob3RoZXJTaXplLmh0KSkgKTsKfQoKaW5saW5lIFFTaXpl IFFTaXplOjpib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAg cmV0dXJuIFFTaXplKCAoKHdkKSA8IChvdGhlclNpemUud2QpID8gKHdkKSA6IChvdGhlclNpemUu d2QpKSwgKChodCkgPCAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3RoZXJTaXplLmh0KSkgKTsK fQojIDQzICJrZXJuZWwvcXJlY3QuaCIgMgoKCgoKCgoKY2xhc3MgUVJlY3QKewpwdWJsaWM6CiAg ICBRUmVjdCgpIHsgeDEgPSB5MSA9IDA7IHgyID0geTIgPSAtMTsgfQogICAgUVJlY3QoIGNvbnN0 IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVBvaW50ICZib3R0b21yaWdodCApOwogICAgUVJlY3Qo IGNvbnN0IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVNpemUgJnNpemUgKTsKICAgIFFSZWN0KCBp bnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7CgogICAgYm9vbCBpc051 bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgYm9vbCBpc1ZhbGlkKCkg Y29uc3Q7CiAgICBRUmVjdCBub3JtYWxpemUoKSBjb25zdDsKCiAgICBpbnQgbGVmdCgpIGNvbnN0 OwogICAgaW50IHRvcCgpIGNvbnN0OwogICAgaW50IHJpZ2h0KCkgY29uc3Q7CiAgICBpbnQgYm90 dG9tKCkgY29uc3Q7CgogICAgUUNPT1JEICZyTGVmdCgpOwogICAgUUNPT1JEICZyVG9wKCk7CiAg ICBRQ09PUkQgJnJSaWdodCgpOwogICAgUUNPT1JEICZyQm90dG9tKCk7CgogICAgaW50IHgoKSBj b25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICB2b2lkIHNldExlZnQoIGludCBwb3MgKTsKICAg IHZvaWQgc2V0VG9wKCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFJpZ2h0KCBpbnQgcG9zICk7CiAg ICB2b2lkIHNldEJvdHRvbSggaW50IHBvcyApOwogICAgdm9pZCBzZXRYKCBpbnQgeCApOwogICAg dm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIFFQb2ludCB0b3BMZWZ0KCkgY29uc3Q7CiAgICBRUG9p bnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCB0b3BSaWdodCgpIGNvbnN0OwogICAg UVBvaW50IGJvdHRvbUxlZnQoKSBjb25zdDsKICAgIFFQb2ludCBjZW50ZXIoKSBjb25zdDsKCiAg ICB2b2lkIHJlY3QoIGludCAqeCwgaW50ICp5LCBpbnQgKncsIGludCAqaCApIGNvbnN0OwogICAg dm9pZCBjb29yZHMoIGludCAqeDEsIGludCAqeTEsIGludCAqeDIsIGludCAqeTIgKSBjb25zdDsK CiAgICB2b2lkIG1vdmVUb3BMZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUJv dHRvbVJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZVRvcFJpZ2h0KCBjb25z dCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUJvdHRvbUxlZnQoIGNvbnN0IFFQb2ludCAmcCAp OwogICAgdm9pZCBtb3ZlQ2VudGVyKCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUJ5 KCBpbnQgZHgsIGludCBkeSApOwoKICAgIHZvaWQgc2V0UmVjdCggaW50IHgsIGludCB5LCBpbnQg dywgaW50IGggKTsKICAgIHZvaWQgc2V0Q29vcmRzKCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBp bnQgeTIgKTsKCiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQgd2lkdGgoKSBjb25zdDsK ICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lkdGgoIGludCB3ICk7CiAgICB2 b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgc2V0U2l6ZSggY29uc3QgUVNpemUgJnMg KTsKCiAgICBRUmVjdCBvcGVyYXRvcnwoY29uc3QgUVJlY3QgJnIpIGNvbnN0OwogICAgUVJlY3Qg b3BlcmF0b3ImKGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0JiBvcGVyYXRvcnw9KGNv bnN0IFFSZWN0ICZyKTsKICAgIFFSZWN0JiBvcGVyYXRvciY9KGNvbnN0IFFSZWN0ICZyKTsKCiAg ICBib29sIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29u c3Q7CiAgICBib29sIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyPUZBTFNFICkg Y29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwgYm9vbCBwcm9wZXI9RkFM U0UgKSBjb25zdDsKICAgIFFSZWN0IHVuaXRlKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAg UVJlY3QgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAgYm9vbCBpbnRlcnNl Y3RzKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwoKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o IGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9y IT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZhdGU6CgoKCgoKCiAgICBR Q09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAgICBRQ09PUkQgeTI7Cgp9 OwoKIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwogYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CgoKCgoKCiBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlY3QgJiApOwogUURh dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWN0ICYgKTsKCgoKCgoKaW5s aW5lIFFSZWN0OjpRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo dCApCnsKICAgIHgxID0gKFFDT09SRClsZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRvcDsKICAgIHgy ID0gKFFDT09SRCkobGVmdCt3aWR0aC0xKTsKICAgIHkyID0gKFFDT09SRCkodG9wK2hlaWdodC0x KTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHgyID09IHgx LTEgJiYgeTIgPT0geTEtMTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHkoKSBjb25zdAp7 IHJldHVybiB4MSA+IHgyIHx8IHkxID4geTI7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc1ZhbGlk KCkgY29uc3QKeyByZXR1cm4geDEgPD0geDIgJiYgeTEgPD0geTI7IH0KCmlubGluZSBpbnQgUVJl Y3Q6OmxlZnQoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVjdDo6dG9wKCkg Y29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkgY29uc3QKeyBy ZXR1cm4geDI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmJvdHRvbSgpIGNvbnN0CnsgcmV0dXJuIHky OyB9CgppbmxpbmUgUUNPT1JEICZRUmVjdDo6ckxlZnQoKQp7IHJldHVybiB4MTsgfQoKaW5saW5l IFFDT09SRCAmIFFSZWN0OjpyVG9wKCkKeyByZXR1cm4geTE7IH0KCmlubGluZSBRQ09PUkQgJiBR UmVjdDo6clJpZ2h0KCkKeyByZXR1cm4geDI7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6ckJv dHRvbSgpCnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp4KCkgY29uc3QKeyByZXR1 cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnkoKSBjb25zdAp7IHJldHVybiB5MTsgfQoKaW5s aW5lIHZvaWQgUVJlY3Q6OnNldExlZnQoIGludCBwb3MgKQp7IHgxID0gKFFDT09SRClwb3M7IH0K CmlubGluZSB2b2lkIFFSZWN0OjpzZXRUb3AoIGludCBwb3MgKQp7IHkxID0gKFFDT09SRClwb3M7 IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRSaWdodCggaW50IHBvcyApCnsgeDIgPSAoUUNPT1JE KXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldEJvdHRvbSggaW50IHBvcyApCnsgeTIgPSAo UUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFgoIGludCB4ICkKeyB4MSA9IChR Q09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFkoIGludCB5ICkKeyB5MSA9IChRQ09P UkQpeTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wTGVmdCgpIGNvbnN0CnsgcmV0dXJuIFFQ b2ludCh4MSwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0 CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BSaWdo dCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0 Ojpib3R0b21MZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0KCmlubGluZSBR UG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCgoeDEreDIpLzIsICh5 MSt5MikvMik7IH0KCmlubGluZSBpbnQgUVJlY3Q6OndpZHRoKCkgY29uc3QKeyByZXR1cm4geDIg LSB4MSArIDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIHky IC0geTEgKyAxOyB9CgppbmxpbmUgUVNpemUgUVJlY3Q6OnNpemUoKSBjb25zdAp7IHJldHVybiBR U2l6ZSh4Mi14MSsxLCB5Mi15MSsxKTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmNvbnRhaW5zKCBp bnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkgY29uc3QKewogICAgaWYgKCBwcm9wZXIgKQogICAg ICAgIHJldHVybiB4ID4geDEgJiYgeCA8IHgyICYmCiAgICAgICAgICAgICAgIHkgPiB5MSAmJiB5 IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4MiAmJgogICAg ICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0KIyA0NCAia2VybmVsL3FyZWdpb24uaCIg MgoKCgoKY2xhc3MgUVJlZ2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUmVnaW9uVHlwZSB7IFJlY3Rh bmdsZSwgRWxsaXBzZSB9OwoKICAgIFFSZWdpb24oKTsKICAgIFFSZWdpb24oIGludCB4LCBpbnQg eSwgaW50IHcsIGludCBoLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9uKCBj b25zdCBRUmVjdCAmLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9uKCBjb25z dCBRUG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UgKTsKICAgIFFSZWdpb24oIGNvbnN0 IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5RUmVnaW9u KCk7CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJvb2wg aXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKCiAgICBib29sIGNvbnRh aW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IFFS ZWN0ICZyICkgY29uc3Q7CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5ICk7Cgog ICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGlu dGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAgIFFSZWdpb24gc3VidHJhY3QoIGNv bnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBlb3IoIGNvbnN0IFFSZWdpb24gJiAp IGNvbnN0OwoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwogICAgUUFycmF5PFFSZWN0 PiByZWN0cygpIGNvbnN0OwogICAgdm9pZCBzZXRSZWN0cyggY29uc3QgUVJlY3QgKiwgaW50ICk7 CgogICAgUVJlZ2lvbiBvcGVyYXRvcnwoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJl Z2lvbiBvcGVyYXRvcisoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVy YXRvciYoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRvci0oIGNv bnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRvcl4oIGNvbnN0IFFSZWdp b24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiYgb3BlcmF0b3J8PSggY29uc3QgUVJlZ2lvbiAmICk7 CiAgICBRUmVnaW9uJiBvcGVyYXRvcis9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24m IG9wZXJhdG9yJj0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ItPSgg Y29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvcl49KCBjb25zdCBRUmVnaW9u ICYgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAg Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRUmVnaW9uICZyICkgY29uc3QKICAgICAgICAgICAgICAg ICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJlZ2lvbiBoYW5k bGUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5yZ247IH0KIyAxMDYgImtlcm5lbC9xcmVnaW9uLmgi CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0 IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0 cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBib29sICk7CiAgICBR UmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CgoKCiAgICB2b2lkIGV4ZWMo IGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZlciA9IDAgKTsKICAgIHN0cnVjdCBRUmVnaW9uRGF0 YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKICAgICAgICBSZWdpb24gcmduOwogICAgICAgIFFSZWN0 IGJyOwoKCgoKCiAgICAgICAgYm9vbCBpc19udWxsOwogICAgfSAqZGF0YTsKfTsKIyAxNTAgImtl cm5lbC9xcmVnaW9uLmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg Y29uc3QgUVJlZ2lvbiAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0g JiwgUVJlZ2lvbiAmICk7CiMgNDQgImtlcm5lbC9xZXZlbnQuaCIgMgoKIyAxICJrZXJuZWwvcW1p bWUuaCIgMQojIDQ3ICJrZXJuZWwvcW1pbWUuaCIKY2xhc3MgUU1pbWVTb3VyY2UgewpwdWJsaWM6 CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJjZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3Jt YXQoIGludCBuID0gMCApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29u c3QgY2hhciogKSBjb25zdDsKICAgIHZpcnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29u c3QgY2hhciogKSBjb25zdCA9IDA7Cn07CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnlEYXRhOwpj bGFzcyBRU3RyaW5nTGlzdDsKCmNsYXNzIFFNaW1lU291cmNlRmFjdG9yeSB7CnB1YmxpYzoKICAg IFFNaW1lU291cmNlRmFjdG9yeSgpOwogICAgdmlydHVhbCB+UU1pbWVTb3VyY2VGYWN0b3J5KCk7 CgogICAgc3RhdGljIFFNaW1lU291cmNlRmFjdG9yeSogZGVmYXVsdEZhY3RvcnkoKTsKICAgIHN0 YXRpYyB2b2lkIHNldERlZmF1bHRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkqICk7CgogICAg dmlydHVhbCBjb25zdCBRTWltZVNvdXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSkg Y29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJpbmcgbWFrZUFic29sdXRlKGNvbnN0IFFTdHJpbmcmIGFi c19vcl9yZWxfbmFtZSwgY29uc3QgUVN0cmluZyYgY29udGV4dCkgY29uc3Q7CiAgICBjb25zdCBR TWltZVNvdXJjZSogZGF0YShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFT dHJpbmcmIGNvbnRleHQpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBR U3RyaW5nJiBhYnNfbmFtZSwgY29uc3QgUVN0cmluZyYgdGV4dCApOwogICAgdmlydHVhbCB2b2lk IHNldEltYWdlKCBjb25zdCBRU3RyaW5nJiBhYnNfbmFtZSwgY29uc3QgUUltYWdlJiBpbSApOwog ICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0 IFFQaXhtYXAmIHBtICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgUVN0cmluZyYg YWJzX25hbWUsIFFNaW1lU291cmNlKiBkYXRhICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZVBh dGgoIGNvbnN0IFFTdHJpbmdMaXN0JiApOwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBmaWxlUGF0 aCgpIGNvbnN0OwogICAgdm9pZCBhZGRGaWxlUGF0aCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZp cnR1YWwgdm9pZCBzZXRFeHRlbnNpb25UeXBlKCBjb25zdCBRU3RyaW5nJiBleHQsIGNvbnN0IGNo YXIqIG1pbWV0eXBlICk7Cgpwcml2YXRlOgogICAgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YSogZDsK fTsKIyA0NiAia2VybmVsL3FldmVudC5oIiAyCgoKCmNsYXNzIFFFdmVudDogcHVibGljIFF0CnsK cHVibGljOgogICAgZW51bSBUeXBlIHsKCgoKCgoKICAgICAgICBOb25lID0gMCwKCgogICAgICAg IFRpbWVyID0gMSwKICAgICAgICBNb3VzZUJ1dHRvblByZXNzID0gMiwKICAgICAgICBNb3VzZUJ1 dHRvblJlbGVhc2UgPSAzLAogICAgICAgIE1vdXNlQnV0dG9uRGJsQ2xpY2s9IDQsCiAgICAgICAg TW91c2VNb3ZlID0gNSwKICAgICAgICBLZXlQcmVzcyA9IDYsCiAgICAgICAgS2V5UmVsZWFzZSA9 IDcsCiAgICAgICAgRm9jdXNJbiA9IDgsCiAgICAgICAgRm9jdXNPdXQgPSA5LAogICAgICAgIEVu dGVyID0gMTAsCiAgICAgICAgTGVhdmUgPSAxMSwKICAgICAgICBQYWludCA9IDEyLAogICAgICAg IE1vdmUgPSAxMywKICAgICAgICBSZXNpemUgPSAxNCwKICAgICAgICBDcmVhdGUgPSAxNSwKICAg ICAgICBEZXN0cm95ID0gMTYsCiAgICAgICAgU2hvdyA9IDE3LAogICAgICAgIEhpZGUgPSAxOCwK ICAgICAgICBDbG9zZSA9IDE5LAogICAgICAgIFF1aXQgPSAyMCwKICAgICAgICBSZXBhcmVudCA9 IDIxLAogICAgICAgIFNob3dNaW5pbWl6ZWQgPSAyMiwKICAgICAgICBTaG93Tm9ybWFsID0gMjMs CiAgICAgICAgV2luZG93QWN0aXZhdGUgPSAyNCwKICAgICAgICBXaW5kb3dEZWFjdGl2YXRlID0g MjUsCiAgICAgICAgU2hvd1RvUGFyZW50ID0gMjYsCiAgICAgICAgSGlkZVRvUGFyZW50ID0gMjcs CiAgICAgICAgU2hvd01heGltaXplZCA9IDI4LAogICAgICAgIEFjY2VsID0gMzAsCiAgICAgICAg V2hlZWwgPSAzMSwKICAgICAgICBBY2NlbEF2YWlsYWJsZSA9IDMyLAogICAgICAgIENhcHRpb25D aGFuZ2UgPSAzMywKICAgICAgICBJY29uQ2hhbmdlID0gMzQsCiAgICAgICAgUGFyZW50Rm9udENo YW5nZSA9IDM1LAogICAgICAgIEFwcGxpY2F0aW9uRm9udENoYW5nZSA9IDM2LAogICAgICAgIFBh cmVudFBhbGV0dGVDaGFuZ2UgPSAzNywKICAgICAgICBBcHBsaWNhdGlvblBhbGV0dGVDaGFuZ2Ug PSAzOCwKICAgICAgICBDbGlwYm9hcmQgPSA0MCwKICAgICAgICBTcGVlY2ggPSA0MiwKICAgICAg ICBTb2NrQWN0ID0gNTAsCiAgICAgICAgQWNjZWxPdmVycmlkZSA9IDUxLAogICAgICAgIERyYWdF bnRlciA9IDYwLAogICAgICAgIERyYWdNb3ZlID0gNjEsCiAgICAgICAgRHJhZ0xlYXZlID0gNjIs CiAgICAgICAgRHJvcCA9IDYzLAogICAgICAgIERyYWdSZXNwb25zZSA9IDY0LAogICAgICAgIENo aWxkSW5zZXJ0ZWQgPSA3MCwKICAgICAgICBDaGlsZFJlbW92ZWQgPSA3MSwKICAgICAgICBMYXlv dXRIaW50ID0gNzIsCiAgICAgICAgU2hvd1dpbmRvd1JlcXVlc3QgPSA3MywKICAgICAgICBBY3Rp dmF0ZUNvbnRyb2wgPSA4MCwKICAgICAgICBEZWFjdGl2YXRlQ29udHJvbCA9IDgxLAogICAgICAg IFVzZXIgPSAxMDAwCiAgICB9OwoKICAgIFFFdmVudCggVHlwZSB0eXBlICkgOiB0KHR5cGUpLCBw b3N0ZWQoRkFMU0UpIHt9CiAgICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5cGUgdHlwZSgpIGNv bnN0IHsgcmV0dXJuIHQ7IH0KcHJvdGVjdGVkOgogICAgVHlwZSB0Owpwcml2YXRlOgogICAgYm9v bCBwb3N0ZWQ7CgoKCgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBj bGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFUaW1lckV2ZW50IDogcHVibGljIFFF dmVudAp7CnB1YmxpYzoKICAgIFFUaW1lckV2ZW50KCBpbnQgdGltZXJJZCApCiAgICAgICAgOiBR RXZlbnQoVGltZXIpLCBpZCh0aW1lcklkKSB7fQogICAgaW50IHRpbWVySWQoKSBjb25zdCB7IHJl dHVybiBpZDsgfQpwcm90ZWN0ZWQ6CiAgICBpbnQgaWQ7Cn07CgoKY2xhc3MgUU1vdXNlRXZlbnQg OiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29u c3QgUVBvaW50ICZwb3MsIGludCBidXR0b24sIGludCBzdGF0ZSApOwoKICAgIFFNb3VzZUV2ZW50 KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQmZ2xvYmFsUG9zLAog ICAgICAgICAgICAgICAgIGludCBidXR0b24sIGludCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQo dHlwZSksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBiKGJ1dHRvbikscygodXNob3J0KXN0YXRlKSB7 fTsKCiAgICBjb25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0 IFFQb2ludCAmZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25z dCB7IHJldHVybiBwLngoKTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQog ICAgaW50IGdsb2JhbFgoKSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFko KSBjb25zdCB7IHJldHVybiBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3Qg eyByZXR1cm4gKEJ1dHRvblN0YXRlKSBiOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0 IHsgcmV0dXJuIChCdXR0b25TdGF0ZSkgczsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigp IGNvbnN0Owpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAgaW50IGI7 CiAgICB1c2hvcnQgczsKfTsKCgoKY2xhc3MgUVdoZWVsRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsK cHVibGljOgogICAgUVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgZGVsdGEsIGlu dCBzdGF0ZSApOwogICAgUVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9p bnQmIGdsb2JhbFBvcywgaW50IGRlbHRhLCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KFdo ZWVsKSwgcChwb3MpLCBnKGdsb2JhbFBvcyksIGQoZGVsdGEpLCBzKCh1c2hvcnQpc3RhdGUpLAog ICAgICAgICAgYWNjcHQoVFJVRSkge30KICAgIGludCBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7 IH0KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3Qg UVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0 IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAg ICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJuIGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgp IGNvbnN0IHsgcmV0dXJuIGcueSgpOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg cmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJl dHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9p ZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAg ICBRUG9pbnQgZzsKICAgIGludCBkOwogICAgdXNob3J0IHM7CiAgICBib29sIGFjY3B0Owp9OwoK CmNsYXNzIFFLZXlFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRS2V5RXZlbnQo IFR5cGUgdHlwZSwgaW50IGtleSwgaW50IGFzY2lpLCBpbnQgc3RhdGUsCiAgICAgICAgICAgICAg ICBjb25zdCBRU3RyaW5nJiB0ZXh0PVFTdHJpbmc6Om51bGwsIGJvb2wgYXV0b3JlcD1GQUxTRSwg dXNob3J0IGNvdW50PTEgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGsoKHVz aG9ydClrZXkpLCBzKCh1c2hvcnQpc3RhdGUpLAogICAgICAgICAgICBhKCh1Y2hhcilhc2NpaSks IGFjY3B0KFRSVUUpLCBhdXRvcihhdXRvcmVwKSwgYyhjb3VudCkge30KICAgIGludCBrZXkoKSBj b25zdCB7IHJldHVybiBrOyB9CiAgICBpbnQgYXNjaWkoKSBjb25zdCB7IHJldHVybiBhOyB9CiAg ICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAg ICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29sIGlzQWNjZXB0ZWQoKSBj b25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgUVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4g dHh0OyB9CiAgICBib29sIGlzQXV0b1JlcGVhdCgpIGNvbnN0IHsgcmV0dXJuIGF1dG9yOyB9CiAg ICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBpbnQoYyk7IH0KICAgIHZvaWQgYWNjZXB0KCkg eyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9Cgpw cm90ZWN0ZWQ6CiAgICBRU3RyaW5nIHR4dDsKICAgIHVzaG9ydCBrLCBzOwogICAgdWNoYXIgYTsK ICAgIHVpbnQgYWNjcHQ6MTsKICAgIHVpbnQgYXV0b3I6MTsKICAgIHVzaG9ydCBjOwp9OwoKCmNs YXNzIFFGb2N1c0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKCiAgICBRRm9jdXNFdmVu dCggVHlwZSB0eXBlICkKICAgICAgICA6IFFFdmVudCh0eXBlKSB7fQoKICAgIGJvb2wgZ290Rm9j dXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQogICAgYm9vbCBsb3N0Rm9j dXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0KCiAgICBlbnVtIFJlYXNv biB7IE1vdXNlLCBUYWIsIEFjdGl2ZVdpbmRvdywgUG9wdXAsIFNob3J0Y3V0LCBPdGhlciB9Owog ICAgc3RhdGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldFJlYXNvbiggUmVh c29uIHJlYXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVzZXRSZWFzb24oKTsKCnByaXZhdGU6CiAg ICBzdGF0aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3RhdGljIFJlYXNvbiBwcmV2X3JlYXNvbjsK fTsKCgpjbGFzcyBRUGFpbnRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUGFp bnRFdmVudCggY29uc3QgUVJlZ2lvbiYgcGFpbnRSZWdpb24sIGJvb2wgZXJhc2VkID0gVFJVRSkK ICAgICAgICA6IFFFdmVudChQYWludCksCiAgICAgICAgICByZWMocGFpbnRSZWdpb24uYm91bmRp bmdSZWN0KCkpLAogICAgICAgICAgcmVnKHBhaW50UmVnaW9uKSwKICAgICAgICAgIGVyYXNlKGVy YXNlZCl7fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFSZWN0ICZwYWludFJlY3QsIGJvb2wgZXJh c2VkID0gVFJVRSApCiAgICAgICAgOiBRRXZlbnQoUGFpbnQpLAogICAgICAgICAgcmVjKHBhaW50 UmVjdCksCiAgICAgICAgICByZWcocGFpbnRSZWN0KSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7 fQogICAgY29uc3QgUVJlY3QgJnJlY3QoKSBjb25zdCB7IHJldHVybiByZWM7IH0KICAgIGNvbnN0 IFFSZWdpb24gJnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIHJlZzsgfQogICAgYm9vbCBlcmFzZWQo KSBjb25zdCB7IHJldHVybiBlcmFzZTsgfQpwcm90ZWN0ZWQ6CiAgICBmcmllbmQgY2xhc3MgUUFw cGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBRUmVjdCBy ZWM7CiAgICBRUmVnaW9uIHJlZzsKICAgIGJvb2wgZXJhc2U7Cn07CgoKY2xhc3MgUU1vdmVFdmVu dCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQg JnBvcywgY29uc3QgUVBvaW50ICZvbGRQb3MgKQogICAgICAgIDogUUV2ZW50KE1vdmUpLCBwKHBv cyksIG9sZHAob2xkUG9zKSB7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVy biBwOyB9CiAgICBjb25zdCBRUG9pbnQgJm9sZFBvcygpY29uc3QgeyByZXR1cm4gb2xkcDt9CnBy b3RlY3RlZDoKICAgIFFQb2ludCBwLCBvbGRwOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlv bjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFSZXNpemVF dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRUmVzaXplRXZlbnQoIGNvbnN0IFFT aXplICZzaXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSApCiAgICAgICAgOiBRRXZlbnQoUmVzaXpl KSwgcyhzaXplKSwgb2xkcyhvbGRTaXplKSB7fQogICAgY29uc3QgUVNpemUgJnNpemUoKSBjb25z dCB7IHJldHVybiBzOyB9CiAgICBjb25zdCBRU2l6ZSAmb2xkU2l6ZSgpY29uc3QgeyByZXR1cm4g b2xkczt9CnByb3RlY3RlZDoKICAgIFFTaXplIHMsIG9sZHM7CiAgICBmcmllbmQgY2xhc3MgUUFw cGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247Cn07CgoKY2xhc3Mg UUNsb3NlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNsb3NlRXZlbnQoKQog ICAgICAgIDogUUV2ZW50KENsb3NlKSwgYWNjcHQoRkFMU0UpIHt9CiAgICBib29sIGlzQWNjZXB0 ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0g VFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgog ICAgYm9vbCBhY2NwdDsKfTsKCgpjbGFzcyBRU2hvd0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1 YmxpYzoKICAgIFFTaG93RXZlbnQoYm9vbCBzcG9udGFuZW91cykKICAgICAgICA6IFFFdmVudChT aG93KSwgc3BvbnQoc3BvbnRhbmVvdXMpIHt9CiAgICBib29sIHNwb250YW5lb3VzKCkgY29uc3Qg eyByZXR1cm4gc3BvbnQ7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBzcG9udDsKfTsKCgpjbGFzcyBR SGlkZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFIaWRlRXZlbnQoYm9vbCBz cG9udGFuZW91cykKICAgICAgICA6IFFFdmVudChIaWRlKSwgc3BvbnQoc3BvbnRhbmVvdXMpIHt9 CiAgICBib29sIHNwb250YW5lb3VzKCkgY29uc3QgeyByZXR1cm4gc3BvbnQ7IH0KcHJvdGVjdGVk OgogICAgYm9vbCBzcG9udDsKfTsKCgoKCgoKCmNsYXNzIFFEcm9wRXZlbnQgOiBwdWJsaWMgUUV2 ZW50LCBwdWJsaWMgUU1pbWVTb3VyY2UKewpwdWJsaWM6CiAgICBRRHJvcEV2ZW50KCBjb25zdCBR UG9pbnQmIHBvcywgVHlwZSB0eXA9RHJvcCApCiAgICAgICAgOiBRRXZlbnQodHlwKSwgcChwb3Mp LAogICAgICAgICAgYWN0KDApLCBhY2NwdCgwKSwgYWNjcHRhY3QoMCksIHJlc3YoMCksCiAgICAg ICAgICBkKDApCiAgICAgICAge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1 cm4gcDsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQgfHwgYWNj cHRhY3Q7IH0KICAgIHZvaWQgYWNjZXB0KGJvb2wgeT1UUlVFKSB7IGFjY3B0ID0geTsgfQogICAg dm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCiAgICBib29sIGlzQWN0aW9uQWNjZXB0 ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHRBY3Rpb24oYm9v bCB5PVRSVUUpIHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7IENvcHksIExpbmss IE1vdmUsIFByaXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNldEFjdGlvbiggQWN0 aW9uIGEgKSB7IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24oKSBjb25zdCB7IHJl dHVybiBBY3Rpb24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNvbnN0OwogICAgY29u c3QgY2hhciogZm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRlQXJyYXkgZW5jb2Rl ZERhdGEoIGNvbnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFy KiApIGNvbnN0OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBmKSBjb25zdCB7IHJl dHVybiBlbmNvZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNvbnN0IFFQb2ludCYg bnAgKSB7IHAgPSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICB1aW50IGFjdDo4 OwogICAgdWludCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAgdWludCByZXN2OjU7 CiAgICB2b2lkICogZDsKfTsKCgoKY2xhc3MgUURyYWdNb3ZlRXZlbnQgOiBwdWJsaWMgUURyb3BF dmVudAp7CnB1YmxpYzoKICAgIFFEcmFnTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcywgVHlw ZSB0eXA9RHJhZ01vdmUgKQogICAgICAgIDogUURyb3BFdmVudChwb3MsdHlwKSwKICAgICAgICAg IHJlY3QoIHBvcywgUVNpemUoIDEsIDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29u c3QgeyByZXR1cm4gcmVjdDsgfQogICAgdm9pZCBhY2NlcHQoIGJvb2wgeT1UUlVFICkgeyBRRHJv cEV2ZW50OjphY2NlcHQoeSk7IH0KICAgIHZvaWQgYWNjZXB0KCBjb25zdCBRUmVjdCAmIHIpIHsg YWNjcHQgPSBUUlVFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYg cikgeyBhY2NwdCA9RkFMU0U7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgUURyb3BF dmVudDo6aWdub3JlKCk7IH0KCnByb3RlY3RlZDoKICAgIFFSZWN0IHJlY3Q7Cn07CgoKY2xhc3Mg UURyYWdFbnRlckV2ZW50IDogcHVibGljIFFEcmFnTW92ZUV2ZW50CnsKcHVibGljOgogICAgUURy YWdFbnRlckV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcyApIDoKICAgICAgICBRRHJhZ01vdmVFdmVu dChwb3MsIERyYWdFbnRlcikgeyB9Cn07CgoKCmNsYXNzIFFEcmFnUmVzcG9uc2VFdmVudCA6IHB1 YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ1Jlc3BvbnNlRXZlbnQoIGJvb2wgYWNjZXB0 ZWQgKQogICAgICAgIDogUUV2ZW50KERyYWdSZXNwb25zZSksIGEoYWNjZXB0ZWQpIHt9CiAgICBi b29sIGRyYWdBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KcHJvdGVjdGVkOgogICAgYm9v bCBhOwp9OwoKCmNsYXNzIFFEcmFnTGVhdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6 CiAgICBRRHJhZ0xlYXZlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KERyYWdMZWF2ZSkge30KfTsK CgoKY2xhc3MgUUNoaWxkRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNoaWxk RXZlbnQoIFR5cGUgdHlwZSwgUU9iamVjdCAqY2hpbGQgKQogICAgICAgIDogUUV2ZW50KHR5cGUp LCBjKGNoaWxkKSB7fQogICAgUU9iamVjdCAqY2hpbGQoKSBjb25zdCB7IHJldHVybiBjOyB9CiAg ICBib29sIGluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZEluc2VydGVkOyB9CiAg ICBib29sIHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkUmVtb3ZlZDsgfQpwcm90 ZWN0ZWQ6CiAgICBRT2JqZWN0ICpjOwp9OwoKCmNsYXNzIFFDdXN0b21FdmVudCA6IHB1YmxpYyBR RXZlbnQKewpwdWJsaWM6CiAgICBRQ3VzdG9tRXZlbnQoIGludCB0eXBlICk7CiAgICBRQ3VzdG9t RXZlbnQoIFR5cGUgdHlwZSwgdm9pZCAqZGF0YSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGQo ZGF0YSkge307CiAgICB2b2lkICpkYXRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgdm9pZCBz ZXREYXRhKCB2b2lkKiBkYXRhICkgeyBkID0gZGF0YTsgfQpwcml2YXRlOgogICAgdm9pZCAqZDsK fTsKIyA0NiAia2VybmVsL3FvYmplY3QuaCIgMgoKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlM RC9xdC0yLjMuMi9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDEKIyA0MiAiL3Vzci9zcmMvcGFja2Fn ZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIgojIDEgIi91c3Ivc3JjL3Bh Y2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMgNDMgIi91c3Iv c3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcXZhbHVlbGlzdC5oIgojIDEgIi91 c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQoj IDQyICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FkYXRhc3RyZWFt LmgiCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xaW9kZXZp Y2UuaCIgMQojIDg4ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3Fp b2RldmljZS5oIgpjbGFzcyBRSU9EZXZpY2UKewpwdWJsaWM6CiAgICBRSU9EZXZpY2UoKTsKICAg IHZpcnR1YWwgflFJT0RldmljZSgpOwoKICAgIGludCBmbGFncygpIGNvbnN0IHsgcmV0dXJuIGlv TW9kZTsgfQogICAgaW50IG1vZGUoKSBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweDAwZmY7IH0K ICAgIGludCBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4ZjAwMDsgfQoKICAgIGJv b2wgaXNEaXJlY3RBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDEwMCkgPT0g MHgwMTAwKTsgfQogICAgYm9vbCBpc1NlcXVlbnRpYWxBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAo KGlvTW9kZSAmIDB4MDIwMCkgPT0gMHgwMjAwKTsgfQogICAgYm9vbCBpc0NvbWJpbmVkQWNjZXNz KCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAzMDApID09IDB4MDMwMCk7IH0KICAgIGJv b2wgaXNCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDQwKSAhPSAweDAw NDApOyB9CiAgICBib29sIGlzUmF3KCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwNDAp ID09IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0dXJuICgo aW9Nb2RlICYgMHgwMDgwKSAhPSAweDAwODApOyB9CiAgICBib29sIGlzQXN5bmNocm9ub3VzKCkg Y29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApID09IDB4MDA4MCk7IH0KICAgIGJvb2wg aXNUcmFuc2xhdGVkKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMTApID09IDB4MDAx MCk7IH0KICAgIGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgw MDAxKSA9PSAweDAwMDEpOyB9CiAgICBib29sIGlzV3JpdGFibGUoKSBjb25zdCB7IHJldHVybiAo KGlvTW9kZSAmIDB4MDAwMikgPT0gMHgwMDAyKTsgfQogICAgYm9vbCBpc1JlYWRXcml0ZSgpIGNv bnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAzKSA9PSAweDAwMDMpOyB9CiAgICBib29sIGlz SW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDA7IH0KICAgIGJvb2wgaXNPcGVu KCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAweDEwMDA7IH0KCiAgICBpbnQgc3RhdHVzKCkg Y29uc3QgeyByZXR1cm4gaW9TdDsgfQogICAgdm9pZCByZXNldFN0YXR1cygpIHsgaW9TdCA9IDA7 IH0KCiAgICB2aXJ0dWFsIGJvb2wgb3BlbiggaW50IG1vZGUgKSA9IDA7CiAgICB2aXJ0dWFsIHZv aWQgY2xvc2UoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7CgogICAgdmlydHVh bCB1aW50IHNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGludCBhdCgpIGNvbnN0OwogICAg dmlydHVhbCBib29sIGF0KCBpbnQgKTsKICAgIHZpcnR1YWwgYm9vbCBhdEVuZCgpIGNvbnN0Owog ICAgYm9vbCByZXNldCgpIHsgcmV0dXJuIGF0KDApOyB9CgogICAgdmlydHVhbCBpbnQgcmVhZEJs b2NrKCBjaGFyICpkYXRhLCB1aW50IG1heGxlbiApID0gMDsKICAgIHZpcnR1YWwgaW50IHdyaXRl QmxvY2soIGNvbnN0IGNoYXIgKmRhdGEsIHVpbnQgbGVuICkgPSAwOwogICAgdmlydHVhbCBpbnQg cmVhZExpbmUoIGNoYXIgKmRhdGEsIHVpbnQgbWF4bGVuICk7CiAgICBpbnQgd3JpdGVCbG9jaygg Y29uc3QgUUJ5dGVBcnJheSYgZGF0YSApOwogICAgUUJ5dGVBcnJheSByZWFkQWxsKCk7CgogICAg dmlydHVhbCBpbnQgZ2V0Y2goKSA9IDA7CiAgICB2aXJ0dWFsIGludCBwdXRjaCggaW50ICkgPSAw OwogICAgdmlydHVhbCBpbnQgdW5nZXRjaCggaW50ICkgPSAwOwoKcHJvdGVjdGVkOgogICAgdm9p ZCBzZXRGbGFncyggaW50IGYgKSB7IGlvTW9kZSA9IGY7IH0KICAgIHZvaWQgc2V0VHlwZSggaW50 ICk7CiAgICB2b2lkIHNldE1vZGUoIGludCApOwogICAgdm9pZCBzZXRTdGF0ZSggaW50ICk7CiAg ICB2b2lkIHNldFN0YXR1cyggaW50ICk7CiAgICBpbnQgaW9JbmRleDsKCnByaXZhdGU6CiAgICBp bnQgaW9Nb2RlOwogICAgaW50IGlvU3Q7Cgpwcml2YXRlOgoKICAgIFFJT0RldmljZSggY29uc3Qg UUlPRGV2aWNlICYgKTsKICAgIFFJT0RldmljZSAmb3BlcmF0b3I9KCBjb25zdCBRSU9EZXZpY2Ug JiApOwoKfTsKIyA0MyAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9x ZGF0YXN0cmVhbS5oIiAyCgoKCgpjbGFzcyBRRGF0YVN0cmVhbQp7CnB1YmxpYzoKICAgIFFEYXRh U3RyZWFtKCk7CiAgICBRRGF0YVN0cmVhbSggUUlPRGV2aWNlICogKTsKICAgIFFEYXRhU3RyZWFt KCBRQnl0ZUFycmF5LCBpbnQgbW9kZSApOwogICAgdmlydHVhbCB+UURhdGFTdHJlYW0oKTsKCiAg ICBRSU9EZXZpY2UgKmRldmljZSgpIGNvbnN0OwogICAgdm9pZCBzZXREZXZpY2UoIFFJT0Rldmlj ZSAqICk7CiAgICB2b2lkIHVuc2V0RGV2aWNlKCk7CgogICAgYm9vbCBhdEVuZCgpIGNvbnN0Owog ICAgYm9vbCBlb2YoKSBjb25zdDsKCiAgICBlbnVtIEJ5dGVPcmRlciB7IEJpZ0VuZGlhbiwgTGl0 dGxlRW5kaWFuIH07CiAgICBpbnQgYnl0ZU9yZGVyKCkgY29uc3Q7CiAgICB2b2lkIHNldEJ5dGVP cmRlciggaW50ICk7CgogICAgYm9vbCBpc1ByaW50YWJsZURhdGEoKSBjb25zdDsKICAgIHZvaWQg c2V0UHJpbnRhYmxlRGF0YSggYm9vbCApOwoKICAgIGludCB2ZXJzaW9uKCkgY29uc3Q7CiAgICB2 b2lkIHNldFZlcnNpb24oIGludCApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX0lO VDggJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICk7CiAgICBR RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQxNiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9w ZXJhdG9yPj4oIFFfVUlOVDE2ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9J TlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUlOVDMyICZpICk7CiAg ICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ2NCAmaSApOwogICAgUURhdGFTdHJlYW0g Jm9wZXJhdG9yPj4oIFFfVUlOVDY0ICZpICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o IGZsb2F0ICZmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZG91YmxlICZmICk7CiAg ICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggY2hhciAqJnN0ciApOwoKICAgIFFEYXRhU3RyZWFt ICZvcGVyYXRvcjw8KCBRX0lOVDggaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFf VUlOVDggaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMTYgaSApOwogICAg UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDE2IGkgKTsKICAgIFFEYXRhU3RyZWFtICZv cGVyYXRvcjw8KCBRX0lOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJ TlQzMiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQ2NCBpICk7CiAgICBR RGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UNjQgaSApOwogICAgUURhdGFTdHJlYW0gJm9w ZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBkb3VibGUg ZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0IGNoYXIgKnN0ciApOwoKICAg IFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNoYXIgKiYsIHVpbnQgJmxlbiApOwogICAgUURhdGFT dHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50IGxlbiApOwoKICAgIFFEYXRhU3RyZWFt ICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CiAgICBRRGF0YVN0cmVhbSAm d3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAqLCB1aW50IGxlbiApOwoKcHJpdmF0ZToKICAgIFFJ T0RldmljZSAqZGV2OwogICAgYm9vbCBvd25kZXY7CiAgICBpbnQgYnl0ZW9yZGVyOwogICAgYm9v bCBwcmludGFibGU7CiAgICBib29sIG5vc3dhcDsKICAgIGludCB2ZXI7Cgpwcml2YXRlOgoKICAg IFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0cmVhbSAmICk7CiAgICBRRGF0YVN0cmVhbSAmb3Bl cmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAmICk7Cgp9OwoKCgoKCgppbmxpbmUgUUlPRGV2aWNl ICpRRGF0YVN0cmVhbTo6ZGV2aWNlKCkgY29uc3QKeyByZXR1cm4gZGV2OyB9CgppbmxpbmUgYm9v bCBRRGF0YVN0cmVhbTo6YXRFbmQoKSBjb25zdAp7IHJldHVybiBkZXYgPyBkZXYtPmF0RW5kKCkg OiBUUlVFOyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6ZW9mKCkgY29uc3QKeyByZXR1cm4g YXRFbmQoKTsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6Ynl0ZU9yZGVyKCkgY29uc3QKeyBy ZXR1cm4gYnl0ZW9yZGVyOyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6aXNQcmludGFibGVE YXRhKCkgY29uc3QKeyByZXR1cm4gcHJpbnRhYmxlOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVh bTo6c2V0UHJpbnRhYmxlRGF0YSggYm9vbCBwICkKeyBwcmludGFibGUgPSBwOyB9CgppbmxpbmUg aW50IFFEYXRhU3RyZWFtOjp2ZXJzaW9uKCkgY29uc3QKeyByZXR1cm4gdmVyOyB9CgppbmxpbmUg dm9pZCBRRGF0YVN0cmVhbTo6c2V0VmVyc2lvbiggaW50IHYgKQp7IHZlciA9IHY7IH0KCmlubGlu ZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPj4oIFFfVUlOVDggJmkgKQp7IHJl dHVybiAqdGhpcyA+PiAoUV9JTlQ4JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3Ry ZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDE2 JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJ TlQzMiAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDMyJilpOyB9CgppbmxpbmUgUURhdGFT dHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQ2NCAmaSApCnsgcmV0dXJuICp0 aGlzID4+IChRX0lOVDY0JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpv cGVyYXRvcjw8KCBRX1VJTlQ4IGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQ4KWk7IH0KCmlu bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDE2IGkgKQp7 IHJldHVybiAqdGhpcyA8PCAoUV9JTlQxNilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRh U3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQzMiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5U MzIpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9V SU5UNjQgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDY0KWk7IH0KIyA0NCAiL3Vzci9zcmMv cGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xdmFsdWVsaXN0LmgiIDIKCgoKCgoKdGVt cGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3ROb2RlCnsKcHVibGljOgogICAgUVZhbHVl TGlzdE5vZGUoIGNvbnN0IFQmIHQgKSA6IGRhdGEoIHQgKSB7IH0KICAgIFFWYWx1ZUxpc3ROb2Rl KCkgeyB9CgoKCgoKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBuZXh0OwogICAgUVZhbHVlTGlzdE5v ZGU8VD4qIHByZXY7CiAgICBUIGRhdGE7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBRVmFs dWVMaXN0SXRlcmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxU PiogTm9kZVB0cjsKCgoKCiAgICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdEl0ZXJh dG9yKCkgOiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBwICkg OiBub2RlKCBwICkge30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0 ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09 KCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9 PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRv cjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQm IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJhdG9y KigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4m IG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBvcGVyYXRvcisrKGludCkg ewogICAgICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2Rl ID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJ dGVyYXRvcjxUPiYgb3BlcmF0b3ItLSgpIHsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJh dG9yLS0oaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwog ICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0 ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcgp7CiBwdWJsaWM6 CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRyOwoKCgoKICAgIE5vZGVQ dHIgbm9kZTsKCgoKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9 CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30K ICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0Q29uc3RJdGVyYXRv cjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0 b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7 fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4m IGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9y IT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJu IG5vZGUgIT0gaXQubm9kZTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1 cm4gbm9kZS0+ZGF0YTsgfQoKCgoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVy YXRvcisrKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVyYXRvcisrKGludCkg ewogICAgICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAg IG5vZGUgPSBub2RlLT5uZXh0OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVl TGlzdENvbnN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgbm9kZSA9IG5vZGUt PnByZXY7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0 ZXJhdG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0 b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPnByZXY7CiAgICAgICAgcmV0 dXJuIHRtcDsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0UHJp dmF0ZSA6IHB1YmxpYyBRU2hhcmVkCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0 SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y PFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+IE5vZGU7CiAg ICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBOb2RlUHRyOwoKCgoKICAgIFFWYWx1ZUxpc3RQ cml2YXRlKCkgeyBub2RlID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9k ZTsgbm9kZXMgPSAwOyB9CiAgICBRVmFsdWVMaXN0UHJpdmF0ZSggY29uc3QgUVZhbHVlTGlzdFBy aXZhdGU8VD4mIF9wICkgOiBRU2hhcmVkKCkgewogICAgICAgIG5vZGUgPSBuZXcgTm9kZTsgbm9k ZS0+bmV4dCA9IG5vZGUtPnByZXYgPSBub2RlOyBub2RlcyA9IDA7CiAgICAgICAgSXRlcmF0b3Ig YiggX3Aubm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGUoIF9wLm5vZGUgKTsKICAgICAg ICBJdGVyYXRvciBpKCBub2RlICk7CiAgICAgICAgd2hpbGUoIGIgIT0gZSApCiAgICAgICAgICAg IGluc2VydCggaSwgKmIrKyApOwogICAgfQoKICAgIHZvaWQgZGVyZWZBbmREZWxldGUoKQogICAg ewogICAgICAgIGlmICggZGVyZWYoKSApCiAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgfQoK CgoKCiAgICB+UVZhbHVlTGlzdFByaXZhdGUoKSB7CiAgICAgICAgTm9kZVB0ciBwID0gbm9kZS0+ bmV4dDsKICAgICAgICB3aGlsZSggcCAhPSBub2RlICkgewogICAgICAgICAgICBOb2RlUHRyIHgg PSBwLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgcDsKICAgICAgICAgICAgcCA9IHg7CiAgICAg ICAgfQogICAgICAgIGRlbGV0ZSBub2RlOwogICAgfQoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRl cmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7CiAgICAgICAgTm9kZVB0ciBwID0gbmV3IE5vZGUoIHgg KTsKICAgICAgICBwLT5uZXh0ID0gaXQubm9kZTsKICAgICAgICBwLT5wcmV2ID0gaXQubm9kZS0+ cHJldjsKICAgICAgICBpdC5ub2RlLT5wcmV2LT5uZXh0ID0gcDsKICAgICAgICBpdC5ub2RlLT5w cmV2ID0gcDsKICAgICAgICBub2RlcysrOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIEl0 ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7CiAgICAgICAgKChpdC5ub2RlICE9IG5vZGUp ID8gKHZvaWQpMCA6IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaXQubm9k ZSAhPSBub2RlIiwiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xdmFs dWVsaXN0LmgiLDIyNikpOwogICAgICAgIE5vZGVQdHIgbmV4dCA9IGl0Lm5vZGUtPm5leHQ7CiAg ICAgICAgTm9kZVB0ciBwcmV2ID0gaXQubm9kZS0+cHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0g bmV4dDsKICAgICAgICBuZXh0LT5wcmV2ID0gcHJldjsKICAgICAgICBkZWxldGUgaXQubm9kZTsK ICAgICAgICBub2Rlcy0tOwogICAgICAgIHJldHVybiBJdGVyYXRvciggbmV4dCApOwogICAgfQoK ICAgIE5vZGVQdHIgZmluZCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0IHsKICAg ICAgICBDb25zdEl0ZXJhdG9yIGZpcnN0KCBzdGFydCApOwogICAgICAgIENvbnN0SXRlcmF0b3Ig bGFzdCggbm9kZSApOwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAg IGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Lm5vZGU7CiAg ICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsYXN0Lm5vZGU7CiAg ICB9CgogICAgaW50IGZpbmRJbmRleCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0 IHsKICAgICAgICBDb25zdEl0ZXJhdG9yIGZpcnN0KCBzdGFydCApOwogICAgICAgIENvbnN0SXRl cmF0b3IgbGFzdCggbm9kZSApOwogICAgICAgIGludCBwb3MgPSAwOwogICAgICAgIHdoaWxlKCBm aXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAg ICAgICAgcmV0dXJuIHBvczsKICAgICAgICAgICAgKytmaXJzdDsKICAgICAgICAgICAgKytwb3M7 CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICB1aW50IGNvbnRhaW5zKCBj b25zdCBUJiB4ICkgY29uc3QgewogICAgICAgIHVpbnQgcmVzdWx0ID0gMDsKICAgICAgICBJdGVy YXRvciBmaXJzdCA9IEl0ZXJhdG9yKCBub2RlLT5uZXh0ICk7CiAgICAgICAgSXRlcmF0b3IgbGFz dCA9IEl0ZXJhdG9yKCBub2RlICk7CiAgICAgICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAg ICAgICAgICAgaWYgKCAqZmlyc3QgPT0geCApCiAgICAgICAgICAgICAgICArK3Jlc3VsdDsKICAg ICAgICAgICAgKytmaXJzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0K CiAgICB2b2lkIHJlbW92ZSggY29uc3QgVCYgeCApIHsKICAgICAgICBJdGVyYXRvciBmaXJzdCA9 IEl0ZXJhdG9yKCBub2RlLT5uZXh0ICk7CiAgICAgICAgSXRlcmF0b3IgbGFzdCA9IEl0ZXJhdG9y KCBub2RlICk7CiAgICAgICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICAgICAgaWYg KCAqZmlyc3QgPT0geCApCiAgICAgICAgICAgICAgICBmaXJzdCA9IHJlbW92ZSggZmlyc3QgKTsK ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKytmaXJzdDsKICAgICAgICB9CiAgICB9 CgogICAgTm9kZVB0ciBhdCggdWludCBpICkgY29uc3QgewogICAgICAgICgoaSA8PSBub2Rlcykg PyAodm9pZCkwIDogcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpIDw9IG5v ZGVzIiwiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xdmFsdWVsaXN0 LmgiLDI4NCkpOwogICAgICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICAgICAgZm9yKCB1 aW50IHggPSAwOyB4IDwgaTsgKyt4ICkKICAgICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAg cmV0dXJuIHA7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsKICAgICAgICBub2RlcyA9IDA7CiAg ICAgICAgTm9kZVB0ciBwID0gbm9kZS0+bmV4dDsKICAgICAgICB3aGlsZSggcCAhPSBub2RlICkg ewogICAgICAgICAgICBOb2RlUHRyIG5leHQgPSBwLT5uZXh0OwogICAgICAgICAgICBkZWxldGUg cDsKICAgICAgICAgICAgcCA9IG5leHQ7CiAgICAgICAgfQogICAgICAgIG5vZGUtPm5leHQgPSBu b2RlLT5wcmV2ID0gbm9kZTsKICAgIH0KCiAgICBOb2RlUHRyIG5vZGU7CiAgICB1aW50IG5vZGVz Owp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3QKewpwdWJsaWM6CgoKCiAg ICB0eXBlZGVmIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZh bHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1 ZVR5cGU7CgoKCgogICAgUVZhbHVlTGlzdCgpIHsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8 VD47IH0KICAgIFFWYWx1ZUxpc3QoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSB7IHNoID0gbC5z aDsgc2gtPnJlZigpOyB9CiAgICB+UVZhbHVlTGlzdCgpIHsgc2gtPmRlcmVmQW5kRGVsZXRlKCk7 IH0KCiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcj0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBs ICkKICAgIHsKICAgICAgICBsLnNoLT5yZWYoKTsKICAgICAgICBzaC0+ZGVyZWZBbmREZWxldGUo KTsKICAgICAgICBzaCA9IGwuc2g7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFW YWx1ZUxpc3Q8VD4gb3BlcmF0b3IrICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0CiAg ICB7CiAgICAgICAgUVZhbHVlTGlzdDxUPiBsMiggKnRoaXMgKTsKICAgICAgICBmb3IoIENvbnN0 SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQogICAgICAgICAg ICBsMi5hcHBlbmQoICppdCApOwogICAgICAgIHJldHVybiBsMjsKICAgIH0KCiAgICBRVmFsdWVM aXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CiAgICAg ICAgZm9yKCBDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVuZCgpOyArK2l0 ICkKICAgICAgICAgICAgYXBwZW5kKCAqaXQgKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogICAgYm9vbCBvcGVyYXRvcj09ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0CiAg ICB7CiAgICAgICAgaWYgKCBjb3VudCgpICE9IGwuY291bnQoKSApCiAgICAgICAgICAgIHJldHVy biBGQUxTRTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CiAgICAgICAgQ29u c3RJdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKICAgICAgICBmb3IoIDsgaXQgIT0gbC5lbmQoKTsg KytpdCwgKytpdDIgKQogICAgICAgICAgICBpZiAoICEoICppdCA9PSAqaXQyICkgKQogICAgICAg ICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIGJv b2wgb3BlcmF0b3IhPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdCB7IHJldHVybiAh KCAqdGhpcyA9PSBsICk7IH0KCiAgICBJdGVyYXRvciBiZWdpbigpIHsgZGV0YWNoKCk7IHJldHVy biBJdGVyYXRvciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigp IGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAgIEl0 ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7IHJldHVybiBJdGVyYXRvciggc2gtPm5vZGUgKTsgfQog ICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+ bm9kZSApOyB9CiAgICBJdGVyYXRvciBmcm9tTGFzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBJdGVy YXRvciggc2gtPm5vZGUtPnByZXYgKTsgfQogICAgQ29uc3RJdGVyYXRvciBmcm9tTGFzdCgpIGNv bnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KCiAgICBib29s IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAoIHNoLT5ub2RlcyA9PSAwICk7IH0KCiAgICBJdGVy YXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJu IHNoLT5pbnNlcnQoIGl0LCB4ICk7IH0KCiAgICBJdGVyYXRvciBhcHBlbmQoIGNvbnN0IFQmIHgg KSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAgSXRlcmF0 b3IgcHJlcGVuZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBi ZWdpbigpLCB4ICk7IH0KCiAgICBJdGVyYXRvciByZW1vdmUoIEl0ZXJhdG9yIGl0ICkgeyBkZXRh Y2goKTsgcmV0dXJuIHNoLT5yZW1vdmUoIGl0ICk7IH0KICAgIHZvaWQgcmVtb3ZlKCBjb25zdCBU JiB4ICkgeyBkZXRhY2goKTsgc2gtPnJlbW92ZSggeCApOyB9CgogICAgVCYgZmlyc3QoKSB7IGRl dGFjaCgpOyByZXR1cm4gc2gtPm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIGNvbnN0IFQmIGZpcnN0 KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIFQmIGxhc3QoKSB7 IGRldGFjaCgpOyByZXR1cm4gc2gtPm5vZGUtPnByZXYtPmRhdGE7IH0KICAgIGNvbnN0IFQmIGxh c3QoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZS0+cHJldi0+ZGF0YTsgfQoKICAgIFQmIG9wZXJh dG9yW10gKCB1aW50IGkgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmF0KGkpLT5kYXRhOyB9CiAg ICBjb25zdCBUJiBvcGVyYXRvcltdICggdWludCBpICkgY29uc3QgeyByZXR1cm4gc2gtPmF0KGkp LT5kYXRhOyB9CiAgICBJdGVyYXRvciBhdCggdWludCBpICkgeyBkZXRhY2goKTsgcmV0dXJuIEl0 ZXJhdG9yKCBzaC0+YXQoaSkgKTsgfQogICAgQ29uc3RJdGVyYXRvciBhdCggdWludCBpICkgY29u c3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIEl0ZXJhdG9yIGZp bmQgKCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIEl0ZXJhdG9yKCBzaC0+ZmluZCgg c2gtPm5vZGUtPm5leHQsIHgpICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZmluZCAoIGNvbnN0IFQm IHggKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+ZmluZCggc2gtPm5vZGUtPm5l eHQsIHgpICk7IH0KICAgIEl0ZXJhdG9yIGZpbmQgKCBJdGVyYXRvciBpdCwgY29uc3QgVCYgeCAp IHsgZGV0YWNoKCk7IHJldHVybiBJdGVyYXRvciggc2gtPmZpbmQoIGl0Lm5vZGUsIHggKSApOyB9 CiAgICBDb25zdEl0ZXJhdG9yIGZpbmQgKCBDb25zdEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkg Y29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvciggc2gtPmZpbmQoIGl0Lm5vZGUsIHggKSApOyB9 CiAgICBpbnQgZmluZEluZGV4KCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gc2gtPmZpbmRJ bmRleCggc2gtPm5vZGUtPm5leHQsIHgpIDsgfQogICAgdWludCBjb250YWlucyggY29uc3QgVCYg eCApIGNvbnN0IHsgcmV0dXJuIHNoLT5jb250YWlucyggeCApOyB9CgogICAgdWludCBjb3VudCgp IGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGlmICggc2gt PmNvdW50ID09IDEgKSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBR VmFsdWVMaXN0UHJpdmF0ZTxUPjsgfSB9CgoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9wZXJhdG9yKz0g KCBjb25zdCBUJiB4ICkKICAgIHsKICAgICAgICBhcHBlbmQoIHggKTsKICAgICAgICByZXR1cm4g KnRoaXM7CiAgICB9CiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRvcjw8ICggY29uc3QgVCYgeCAp CiAgICB7CiAgICAgICAgYXBwZW5kKCB4ICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK CnByb3RlY3RlZDoKCgoKICAgIHZvaWQgZGV0YWNoKCkgeyBpZiAoIHNoLT5jb3VudCA+IDEgKSB7 IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPiggKnNoICk7IH0gfQoK CgoKICAgIFFWYWx1ZUxpc3RQcml2YXRlPFQ+KiBzaDsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBUPgpp bmxpbmUgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtJiBzLCBRVmFsdWVMaXN0 PFQ+JiBsICkKewogICAgbC5jbGVhcigpOwogICAgUV9VSU5UMzIgYzsKICAgIHMgPj4gYzsKICAg IGZvciggUV9VSU5UMzIgaSA9IDA7IGkgPCBjOyArK2kgKQogICAgewogICAgICAgIFQgdDsKICAg ICAgICBzID4+IHQ7CiAgICAgICAgbC5hcHBlbmQoIHQgKTsKICAgIH0KICAgIHJldHVybiBzOwp9 Cgp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoIFFEYXRh U3RyZWFtJiBzLCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkKewogICAgcyA8PCAoUV9VSU5UMzIp bC5jb3VudCgpOwogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gaXQgPSBsLmJlZ2luKCk7 CiAgICBmb3IoIDsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCAqaXQ7CiAgICBy ZXR1cm4gczsKfQojIDQzICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRl L3FzdHJpbmdsaXN0LmgiIDIKCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIv aW5jbHVkZS9xcmVnZXhwLmgiIDEKIyA0NiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4z LjIvaW5jbHVkZS9xcmVnZXhwLmgiCmNsYXNzIFFSZWdFeHAKewpwdWJsaWM6CiAgICBRUmVnRXhw KCk7CiAgICBRUmVnRXhwKCBjb25zdCBRU3RyaW5nICYsIGJvb2wgY2FzZVNlbnNpdGl2ZT1UUlVF LCBib29sIHdpbGRjYXJkPUZBTFNFICk7CiAgICBRUmVnRXhwKCBjb25zdCBRUmVnRXhwICYgKTsK ICAgflFSZWdFeHAoKTsKICAgIFFSZWdFeHAgJm9wZXJhdG9yPSggY29uc3QgUVJlZ0V4cCAmICk7 CiAgICBRUmVnRXhwICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJnBhdHRlcm4gKTsKCiAgICBi b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRUmVnRXhwICZyICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShyKSk7IH0KCiAgICBib29s IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiByeGRhdGEgPT0gMDsgfQogICAgYm9vbCBpc1ZhbGlk KCkgY29uc3QgeyByZXR1cm4gZXJyb3IgPT0gMDsgfQoKICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSgp IGNvbnN0IHsgcmV0dXJuIGNzOyB9CiAgICB2b2lkIHNldENhc2VTZW5zaXRpdmUoIGJvb2wgKTsK CiAgICBib29sIHdpbGRjYXJkKCkgY29uc3QgeyByZXR1cm4gd2M7IH0KICAgIHZvaWQgc2V0V2ls ZGNhcmQoIGJvb2wgKTsKCiAgICBRU3RyaW5nIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiByeHN0 cmluZzsgfQoKICAgIHZvaWQgc2V0UGF0dGVybiggY29uc3QgUVN0cmluZyYgcGF0dGVybiApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG9wZXJhdG9yPSggcGF0dGVy biApOyB9CgogICAgaW50IG1hdGNoKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBp bnQgKmxlbj0wLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5kZXhJc1N0YXJ0ID0gVFJV RSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGluZGV4ICkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1hdGNoKCBz dHIsIGluZGV4ICk7IH0KCnByb3RlY3RlZDoKICAgIHZvaWQgY29tcGlsZSgpOwogICAgY29uc3Qg UUNoYXIgKm1hdGNoc3RyKCB1aW50ICosIGNvbnN0IFFDaGFyICosIHVpbnQsIGNvbnN0IFFDaGFy ICogKSBjb25zdDsKCnByaXZhdGU6CiAgICBRU3RyaW5nIHJ4c3RyaW5nOwogICAgdWludCAqcnhk YXRhOwogICAgaW50IGVycm9yOwogICAgYm9vbCBjczsKICAgIGJvb2wgd2M7Cn07CiMgNDUgIi91 c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgoK CgoKY2xhc3MgUVN0ckxpc3Q7CgpjbGFzcyBRU3RyaW5nTGlzdCA6IHB1YmxpYyBRVmFsdWVMaXN0 PFFTdHJpbmc+CnsKcHVibGljOgogICAgUVN0cmluZ0xpc3QoKSB7IH0KICAgIFFTdHJpbmdMaXN0 KCBjb25zdCBRU3RyaW5nTGlzdCYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAg IFFTdHJpbmdMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFFTdHJpbmc+JiBsICkgOiBRVmFsdWVMaXN0 PFFTdHJpbmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmcmIGkgKSB7IGFw cGVuZChpKTsgfQoKICAgIFFTdHJpbmdMaXN0KCBjb25zdCBjaGFyKiBpICkgeyBhcHBlbmQoaSk7 IH0KCgogICAgc3RhdGljIFFTdHJpbmdMaXN0IGZyb21TdHJMaXN0KGNvbnN0IFFTdHJMaXN0Jik7 CgogICAgdm9pZCBzb3J0KCk7CgogICAgc3RhdGljIFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBR U3RyaW5nICZzZXAsIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9 IEZBTFNFICk7CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFDaGFyICZzZXAs IGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNFICk7CiAg ICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3QgUVN0 cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIFFTdHJpbmcg am9pbiggY29uc3QgUVN0cmluZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3JlcCgg Y29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzID0gVFJVRSApIGNvbnN0OwogICAgUVN0cmluZ0xp c3QgZ3JlcCggY29uc3QgUVJlZ0V4cCAmZXhwciApIGNvbnN0Owp9OwoKCmNsYXNzIFFEYXRhU3Ry ZWFtOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJp bmdMaXN0JiApOwpleHRlcm4gUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYs IGNvbnN0IFFTdHJpbmdMaXN0JiApOwojIDQ4ICJrZXJuZWwvcW9iamVjdC5oIiAyCgoKCgoKY2xh c3MgUU1ldGFPYmplY3Q7CmNsYXNzIFFWYXJpYW50OwoKCgpjbGFzcyBRT2JqZWN0OiBwdWJsaWMg UXQKewogICAKCnB1YmxpYzoKICAgIFFPYmplY3QoIFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBj aGFyICpuYW1lPTAgKTsKICAgIHZpcnR1YWwgflFPYmplY3QoKTsKCiAgICBzdGF0aWMgUVN0cmlu ZyB0ciggY29uc3QgY2hhciAqICk7CiAgICBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICogKTsKCiAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoIFFFdmVudCAqICk7CiAg ICB2aXJ0dWFsIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCiAgICB2 aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0 YU9iamVjdCgpOyB9CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OwoK ICAgIGJvb2wgaXNBKCBjb25zdCBjaGFyICogKSBjb25zdDsKICAgIGJvb2wgaW5oZXJpdHMoIGNv bnN0IGNoYXIgKiApIGNvbnN0OwoKICAgIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIGNv bnN0IGNoYXIgKm5hbWUoIGNvbnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZp cnR1YWwgdm9pZCBzZXROYW1lKCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sIGlzV2lkZ2V0 VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sIGhpZ2hQcmlvcml0eSgp IGNvbnN0IHsgcmV0dXJuIEZBTFNFOyB9CgogICAgYm9vbCBzaWduYWxzQmxvY2tlZCgpIGNvbnN0 IHsgcmV0dXJuIGJsb2NrU2lnOyB9CiAgICB2b2lkIGJsb2NrU2lnbmFscyggYm9vbCBiICk7Cgog ICAgaW50IHN0YXJ0VGltZXIoIGludCBpbnRlcnZhbCApOwogICAgdm9pZCBraWxsVGltZXIoIGlu dCBpZCApOwogICAgdm9pZCBraWxsVGltZXJzKCk7CgogICAgUU9iamVjdCAqY2hpbGQoIGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUgPSAwICk7CiAgICBjb25zdCBRT2JqZWN0TGlz dCAqY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZE9iamVjdHM7IH0KCiAgICBzdGF0aWMg Y29uc3QgUU9iamVjdExpc3QgKm9iamVjdFRyZWVzKCk7CgoKICAgIFFPYmplY3RMaXN0ICpxdWVy eUxpc3QoIGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2JqTmFtZSA9IDAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIHJlZ2V4cE1hdGNoID0gVFJVRSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VhcmNoID0gVFJVRSApOwoKICAgIHZp cnR1YWwgdm9pZCBpbnNlcnRDaGlsZCggUU9iamVjdCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVt b3ZlQ2hpbGQoIFFPYmplY3QgKiApOwoKICAgIHZvaWQgaW5zdGFsbEV2ZW50RmlsdGVyKCBjb25z dCBRT2JqZWN0ICogKTsKICAgIHZvaWQgcmVtb3ZlRXZlbnRGaWx0ZXIoIGNvbnN0IFFPYmplY3Qg KiApOwoKICAgIHN0YXRpYyBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29u c3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg KnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wgY29ubmVjdCggY29uc3Qg UU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3Q7CiAgICBzdGF0aWMgYm9vbCBkaXNjb25u ZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAq bWVtYmVyICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbD0wLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyPTAsIGNvbnN0 IGNoYXIgKm1lbWJlcj0wICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnJl Y2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwoKICAgIHZvaWQgZHVtcE9iamVjdFRyZWUo KTsKICAgIHZvaWQgZHVtcE9iamVjdEluZm8oKTsKCgogICAgYm9vbCBzZXRQcm9wZXJ0eSggY29u c3QgY2hhciAqbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVlICk7CiAgICBRVmFyaWFudCBwcm9w ZXJ0eSggY29uc3QgY2hhciAqbmFtZSApIGNvbnN0OwoKCnByb3RlY3RlZDoKICAgIHZvaWQgZGVz dHJveWVkKCk7CgpwdWJsaWM6CiAgICBRT2JqZWN0ICpwYXJlbnQoKSBjb25zdCB7IHJldHVybiBw YXJlbnRPYmo7IH0KCnByaXZhdGUgOgogICAgdm9pZCBjbGVhbnVwRXZlbnRGaWx0ZXIoKTsKCnBy b3RlY3RlZDoKICAgIGJvb2wgYWN0aXZhdGVfZmlsdGVycyggUUV2ZW50ICogKTsKICAgIFFDb25u ZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBjb25zdCBjaGFyICpzaWduYWwgKSBjb25zdDsKICAgIHZv aWQgYWN0aXZhdGVfc2lnbmFsKCBjb25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZvaWQgYWN0aXZh dGVfc2lnbmFsKCBjb25zdCBjaGFyICpzaWduYWwsIHNob3J0ICk7CiAgICB2b2lkIGFjdGl2YXRl X3NpZ25hbCggY29uc3QgY2hhciAqc2lnbmFsLCBpbnQgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2ln bmFsKCBjb25zdCBjaGFyICpzaWduYWwsIGxvbmcgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFs KCBjb25zdCBjaGFyICpzaWduYWwsIGNvbnN0IGNoYXIgKiApOwogICAgdm9pZCBhY3RpdmF0ZV9z aWduYWxfYm9vbCggY29uc3QgY2hhciAqc2lnbmFsLCBib29sICk7CiAgICB2b2lkIGFjdGl2YXRl X3NpZ25hbF9zdHJpbmcoIGNvbnN0IGNoYXIgKnNpZ25hbCwgUVN0cmluZyApOwogICAgdm9pZCBh Y3RpdmF0ZV9zaWduYWxfc3RycmVmKCBjb25zdCBjaGFyICpzaWduYWwsIGNvbnN0IFFTdHJpbmcg JiApOwoKICAgIGNvbnN0IFFPYmplY3QgKnNlbmRlcigpOwoKCiAgICB2aXJ0dWFsIHZvaWQgaW5p dE1ldGFPYmplY3QoKTsKICAgIHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgp OwoKICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2aXJ0 dWFsIHZvaWQgY2hpbGRFdmVudCggUUNoaWxkRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBj b25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNj b25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVj a0Nvbm5lY3RBcmdzKCBjb25zdCBjaGFyICpzaWduYWwsIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciAp OwogICAgc3RhdGljIFFDU3RyaW5nIG5vcm1hbGl6ZVNpZ25hbFNsb3QoIGNvbnN0IGNoYXIgKnNp Z25hbFNsb3QgKTsKCiAgICBzdGF0aWMgdm9pZCBiYWRTdXBlcmNsYXNzV2FybmluZyggY29uc3Qg Y2hhciAqY2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpzdXBlcmNsYXNzTmFtZSApOwoKcHJpdmF0ZToKICAgIHVpbnQgaXNTaWduYWwg OiAxOwogICAgdWludCBpc1dpZGdldCA6IDE7CiAgICB1aW50IHBlbmRUaW1lciA6IDE7CiAgICB1 aW50IHBlbmRFdmVudCA6IDE7CiAgICB1aW50IGJsb2NrU2lnIDogMTsKICAgIHVpbnQgd2FzRGVs ZXRlZCA6IDE7CiAgICB1aW50IGlzVHJlZSA6IDE7CgogICAgUU1ldGFPYmplY3QgKnF1ZXJ5TWV0 YU9iamVjdCgpIGNvbnN0OwogICAgc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAgY29u c3QgY2hhciAqb2JqbmFtZTsKICAgIFFPYmplY3QgKnBhcmVudE9iajsKICAgIFFPYmplY3RMaXN0 ICpjaGlsZE9iamVjdHM7CiAgICBRU2lnbmFsRGljdCAqY29ubmVjdGlvbnM7CiAgICBRT2JqZWN0 TGlzdCAqc2VuZGVyT2JqZWN0czsKICAgIFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CgoKICAg IFFPYmplY3QgKnNpZ1NlbmRlcjsKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAg ZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsK ICAgIGZyaWVuZCBjbGFzcyBRU2lnbmFsOwogICAgZnJpZW5kIGNsYXNzIFFTZW5kZXJPYmplY3Q7 Cgpwcml2YXRlOgoKICAgIFFPYmplY3QoIGNvbnN0IFFPYmplY3QgJiApOwogICAgUU9iamVjdCAm b3BlcmF0b3I9KCBjb25zdCBRT2JqZWN0ICYgKTsKCgpwdWJsaWM6CgoKICAgIFFTdHJpbmdMaXN0 IHN1cGVyQ2xhc3NlcyggYm9vbCBpbmNsdWRlVGhpcyA9IEZBTFNFICkgY29uc3Q7Cgp9OwoKCgpp bmxpbmUgYm9vbCBRT2JqZWN0Ojpjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0 IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bWVtYmVyICkgY29uc3QKewogICAgcmV0dXJuIGNvbm5lY3QoIHNlbmRlciwgc2lnbmFsLCB0aGlz LCBtZW1iZXIgKTsKfQoKaW5saW5lIGJvb2wgUU9iamVjdDo6ZGlzY29ubmVjdCggY29uc3QgY2hh ciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0 ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3Qo IHRoaXMsIHNpZ25hbCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgppbmxpbmUgYm9vbCBRT2JqZWN0 OjpkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVy ICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3QoIHRoaXMsIDAsIHJlY2VpdmVyLCBtZW1iZXIgKTsK fQoKaW5saW5lIGNvbnN0IFFPYmplY3QgKlFPYmplY3Q6OnNlbmRlcigpCnsKICAgIHJldHVybiBz aWdTZW5kZXI7Cn0KCgpjbGFzcyBRU2VuZGVyT2JqZWN0IDogcHVibGljIFFPYmplY3QKewpwdWJs aWM6CiAgICB2b2lkIHNldFNlbmRlciggUU9iamVjdCAqcyApIHsgc2lnU2VuZGVyPXM7IH0KfTsK IyA0NCAia2VybmVsL3F3aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xcGFpbnRkZXZpY2UuaCIgMQoj IDUxICJrZXJuZWwvcXBhaW50ZGV2aWNlLmgiCmNsYXNzIFFJT0RldmljZTsKY2xhc3MgUVN0cmlu ZzsKCgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGE7CgoKdW5pb24gUVBEZXZDbWRQYXJhbSB7 CiAgICBpbnQgaXZhbDsKICAgIGludCAqaXZlYzsKICAgIFFTdHJpbmcgKnN0cjsKICAgIGNvbnN0 IFFQb2ludCAqcG9pbnQ7CiAgICBjb25zdCBRUmVjdCAqcmVjdDsKICAgIGNvbnN0IFFQb2ludEFy cmF5ICpwdGFycjsKICAgIGNvbnN0IFFQaXhtYXAgKnBpeG1hcDsKICAgIGNvbnN0IFFJbWFnZSAq aW1hZ2U7CiAgICBjb25zdCBRQ29sb3IgKmNvbG9yOwogICAgY29uc3QgUUZvbnQgKmZvbnQ7CiAg ICBjb25zdCBRUGVuICpwZW47CiAgICBjb25zdCBRQnJ1c2ggKmJydXNoOwogICAgY29uc3QgUVJl Z2lvbiAqcmduOwogICAgY29uc3QgUVdNYXRyaXggKm1hdHJpeDsKICAgIFFJT0RldmljZSAqZGV2 aWNlOwp9OwoKCgpjbGFzcyBRUGFpbnREZXZpY2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RUGFp bnREZXZpY2UoKTsKCiAgICBpbnQgZGV2VHlwZSgpIGNvbnN0OwogICAgYm9vbCBpc0V4dERldigp IGNvbnN0OwogICAgYm9vbCBwYWludGluZ0FjdGl2ZSgpIGNvbnN0OwoKCgoKCgogICAgSEFORExF IGhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICAgIERpc3BsYXkgKngxMURpc3BsYXkoKSBjb25zdDsK ICAgIGludCB4MTFTY3JlZW4oKSBjb25zdDsKICAgIGludCB4MTFEZXB0aCgpIGNvbnN0OwogICAg aW50IHgxMUNlbGxzKCkgY29uc3Q7CiAgICBIQU5ETEUgeDExQ29sb3JtYXAoKSBjb25zdDsKICAg IGJvb2wgeDExRGVmYXVsdENvbG9ybWFwKCkgY29uc3Q7CiAgICB2b2lkICp4MTFWaXN1YWwoKSBj b25zdDsKICAgIGJvb2wgeDExRGVmYXVsdFZpc3VhbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBEaXNw bGF5ICp4MTFBcHBEaXNwbGF5KCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcFNjcmVlbigpOwogICAg c3RhdGljIGludCB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludCB4MTFBcHBDZWxscygpOwog ICAgc3RhdGljIGludCB4MTFBcHBEcGlYKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERwaVkoKTsK ICAgIHN0YXRpYyBIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0YXRpYyBib29sIHgxMUFw cERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFwcFZpc3VhbCgpOwogICAg c3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwogICAgc3RhdGljIHZvaWQgeDExU2V0 QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBpWShpbnQpOwojIDEzMSAi a2VybmVsL3FwYWludGRldmljZS5oIgogICAgZW51bSBQRGV2Q21kIHsKICAgICAgICBQZGNOT1Ag PSAwLAogICAgICAgIFBkY0RyYXdQb2ludCA9IDEsCiAgICAgICAgUGRjRHJhd0ZpcnN0ID0gUGRj RHJhd1BvaW50LAogICAgICAgIFBkY01vdmVUbyA9IDIsCiAgICAgICAgUGRjTGluZVRvID0gMywK ICAgICAgICBQZGNEcmF3TGluZSA9IDQsCiAgICAgICAgUGRjRHJhd1JlY3QgPSA1LAogICAgICAg IFBkY0RyYXdSb3VuZFJlY3QgPSA2LAogICAgICAgIFBkY0RyYXdFbGxpcHNlID0gNywKICAgICAg ICBQZGNEcmF3QXJjID0gOCwKICAgICAgICBQZGNEcmF3UGllID0gOSwKICAgICAgICBQZGNEcmF3 Q2hvcmQgPSAxMCwKICAgICAgICBQZGNEcmF3TGluZVNlZ21lbnRzID0gMTEsCiAgICAgICAgUGRj RHJhd1BvbHlsaW5lID0gMTIsCiAgICAgICAgUGRjRHJhd1BvbHlnb24gPSAxMywKICAgICAgICBQ ZGNEcmF3UXVhZEJlemllciA9IDE0LAogICAgICAgIFBkY0RyYXdUZXh0ID0gMTUsCiAgICAgICAg UGRjRHJhd1RleHRGb3JtYXR0ZWQgPSAxNiwKICAgICAgICBQZGNEcmF3UGl4bWFwID0gMTcsCiAg ICAgICAgUGRjRHJhd0ltYWdlID0gMTgsCiAgICAgICAgUGRjRHJhd1RleHQyID0gMTksCiAgICAg ICAgUGRjRHJhd1RleHQyRm9ybWF0dGVkID0gMjAsCiAgICAgICAgUGRjRHJhd0xhc3QgPSBQZGNE cmF3VGV4dDJGb3JtYXR0ZWQsCgoKCiAgICAgICAgUGRjQmVnaW4gPSAzMCwKICAgICAgICBQZGNF bmQgPSAzMSwKICAgICAgICBQZGNTYXZlID0gMzIsCiAgICAgICAgUGRjUmVzdG9yZSA9IDMzLAog ICAgICAgIFBkY1NldGRldiA9IDM0LAogICAgICAgIFBkY1NldEJrQ29sb3IgPSA0MCwKICAgICAg ICBQZGNTZXRCa01vZGUgPSA0MSwKICAgICAgICBQZGNTZXRST1AgPSA0MiwKICAgICAgICBQZGNT ZXRCcnVzaE9yaWdpbiA9IDQzLAogICAgICAgIFBkY1NldEZvbnQgPSA0NSwKICAgICAgICBQZGNT ZXRQZW4gPSA0NiwKICAgICAgICBQZGNTZXRCcnVzaCA9IDQ3LAogICAgICAgIFBkY1NldFRhYlN0 b3BzID0gNDgsCiAgICAgICAgUGRjU2V0VGFiQXJyYXkgPSA0OSwKICAgICAgICBQZGNTZXRVbml0 ID0gNTAsCiAgICAgICAgUGRjU2V0Vlhmb3JtID0gNTEsCiAgICAgICAgUGRjU2V0V2luZG93ID0g NTIsCiAgICAgICAgUGRjU2V0Vmlld3BvcnQgPSA1MywKICAgICAgICBQZGNTZXRXWGZvcm0gPSA1 NCwKICAgICAgICBQZGNTZXRXTWF0cml4ID0gNTUsCiAgICAgICAgUGRjU2F2ZVdNYXRyaXggPSA1 NiwKICAgICAgICBQZGNSZXN0b3JlV01hdHJpeCA9IDU3LAogICAgICAgIFBkY1NldENsaXAgPSA2 MCwKICAgICAgICBQZGNTZXRDbGlwUmVnaW9uID0gNjEsCgogICAgICAgIFBkY1Jlc2VydmVkU3Rh cnQgPSAwLAogICAgICAgIFBkY1Jlc2VydmVkU3RvcCA9IDE5OQogICAgfTsKCnByb3RlY3RlZDoK ICAgIFFQYWludERldmljZSggdWludCBkZXZmbGFncyApOwoKCgoKICAgIEhBTkRMRSBoZDsKICAg IHZvaWQgY29weVgxMURhdGEoIGNvbnN0IFFQYWludERldmljZSAqICk7CiAgICB2aXJ0dWFsIHZv aWQgc2V0WDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlWDExRGF0YSogKTsKICAgIFFQYWludERl dmljZVgxMURhdGEqIGdldFgxMURhdGEoIGJvb2wgZGVmPUZBTFNFICkgY29uc3Q7CgoKCgoKCgog ICAgdmlydHVhbCBib29sIGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsK ICAgIHZpcnR1YWwgaW50IG1ldHJpYyggaW50ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBmb250 TWV0KCBRRm9udCAqLCBpbnQsIGNvbnN0IGNoYXIgKiA9IDAsIGludCA9IDAgKSBjb25zdDsKICAg IHZpcnR1YWwgaW50IGZvbnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydCBk ZXZGbGFnczsKICAgIHVzaG9ydCBwYWludGVyczsKCiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7 CiAgICBmcmllbmQgY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKICAgIGZyaWVuZCB2b2lkIGJp dEJsdCggUVBhaW50RGV2aWNlICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRUGFpbnREZXZpY2UgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50LCBpbnQsIGludCwgaW50LCBRdDo6UmFzdGVyT3AsIGJvb2wgKTsKCiAgICBmcmll bmQgdm9pZCBxdF9pbml0X2ludGVybmFsKCBpbnQgKiwgY2hhciAqKiwgRGlzcGxheSAqICk7CgoK cHJpdmF0ZToKCiAgICBzdGF0aWMgRGlzcGxheSAqeF9hcHBkaXNwbGF5OwogICAgc3RhdGljIGlu dCB4X2FwcHNjcmVlbjsKICAgIHN0YXRpYyBpbnQgeF9hcHBkZXB0aDsKICAgIHN0YXRpYyBpbnQg eF9hcHBjZWxsczsKICAgIHN0YXRpYyBIQU5ETEUgeF9hcHBjb2xvcm1hcDsKICAgIHN0YXRpYyBi b29sIHhfYXBwZGVmY29sb3JtYXA7CiAgICBzdGF0aWMgdm9pZCAqeF9hcHB2aXN1YWw7CiAgICBz dGF0aWMgYm9vbCB4X2FwcGRlZnZpc3VhbDsKCiAgICBRUGFpbnREZXZpY2VYMTFEYXRhKiB4MTFE YXRhOwoKCnByaXZhdGU6CgogICAgUVBhaW50RGV2aWNlKCBjb25zdCBRUGFpbnREZXZpY2UgJiAp OwogICAgUVBhaW50RGV2aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFQYWludERldmljZSAmICk7Cgp9 OwoKCgp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5LAogICAg ICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50 IHN3PS0xLCBpbnQgc2g9LTEsCiAgICAgICAgICAgICBRdDo6UmFzdGVyT3AgPSBRdDo6Q29weVJP UCwgYm9vbCBpZ25vcmVNYXNrPUZBTFNFICk7CgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAq ZHN0LCBpbnQgZHgsIGludCBkeSwKICAgICAgICAgICAgIGNvbnN0IFFJbWFnZSAqc3JjLCBpbnQg c3g9MCwgaW50IHN5PTAsIGludCBzdz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgaW50IGNv bnZlcnNpb25fZmxhZ3M9MCApOwoKCgoKc3RydWN0IFFQYWludERldmljZVgxMURhdGEgewogICAg RGlzcGxheSogeF9kaXNwbGF5OwogICAgaW50IHhfc2NyZWVuOwogICAgaW50IHhfZGVwdGg7CiAg ICBpbnQgeF9jZWxsczsKICAgIEhBTkRMRSB4X2NvbG9ybWFwOwogICAgYm9vbCB4X2RlZmNvbG9y bWFwOwogICAgdm9pZCogeF92aXN1YWw7CiAgICBib29sIHhfZGVmdmlzdWFsOwp9OwoKCgoKCgoK aW5saW5lIGludCBRUGFpbnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7IHJldHVybiBkZXZGbGFn cyAmIFFJbnRlcm5hbDo6RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBib29sIFFQYWludERldmlj ZTo6aXNFeHREZXYoKSBjb25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBRSW50ZXJuYWw6OkV4dGVy bmFsRGV2aWNlKSAhPSAwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OnBhaW50aW5nQWN0 aXZlKCkgY29uc3QKeyByZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCgoKaW5saW5lIEhBTkRMRSBR UGFpbnREZXZpY2U6OmhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGhkOyB9CgoKCmlubGluZSBEaXNw bGF5ICpRUGFpbnREZXZpY2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8g eDExRGF0YS0+eF9kaXNwbGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERl dmljZTo6eDExU2NyZWVuKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfc2Ny ZWVuIDogeF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFEZXB0aCgp IGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9hcHBkZXB0aDsg fQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyByZXR1cm4geDEx RGF0YSA/IHgxMURhdGEtPnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgSEFORExFIFFQ YWludERldmljZTo6eDExQ29sb3JtYXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0 YS0+eF9jb2xvcm1hcCA6IHhfYXBwY29sb3JtYXA7IH0KCmlubGluZSBib29sIFFQYWludERldmlj ZTo6eDExRGVmYXVsdENvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEt PnhfZGVmY29sb3JtYXAgOiB4X2FwcGRlZmNvbG9ybWFwOyB9CgppbmxpbmUgdm9pZCAqUVBhaW50 RGV2aWNlOjp4MTFWaXN1YWwoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF92 aXN1YWwgOiB4X2FwcHZpc3VhbDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZh dWx0VmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfZGVmdmlzdWFs IDogeF9hcHBkZWZ2aXN1YWw7IH0KCmlubGluZSBEaXNwbGF5ICpRUGFpbnREZXZpY2U6OngxMUFw cERpc3BsYXkoKQp7IHJldHVybiB4X2FwcGRpc3BsYXk7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2 aWNlOjp4MTFBcHBTY3JlZW4oKQp7IHJldHVybiB4X2FwcHNjcmVlbjsgfQoKaW5saW5lIGludCBR UGFpbnREZXZpY2U6OngxMUFwcERlcHRoKCkKeyByZXR1cm4geF9hcHBkZXB0aDsgfQoKaW5saW5l IGludCBRUGFpbnREZXZpY2U6OngxMUFwcENlbGxzKCkKeyByZXR1cm4geF9hcHBjZWxsczsgfQoK aW5saW5lIEhBTkRMRSBRUGFpbnREZXZpY2U6OngxMUFwcENvbG9ybWFwKCkKeyByZXR1cm4geF9h cHBjb2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0Q29s b3JtYXAoKQp7IHJldHVybiB4X2FwcGRlZmNvbG9ybWFwOyB9CgppbmxpbmUgdm9pZCAqUVBhaW50 RGV2aWNlOjp4MTFBcHBWaXN1YWwoKQp7IHJldHVybiB4X2FwcHZpc3VhbDsgfQoKaW5saW5lIGJv b2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0VmlzdWFsKCkKeyByZXR1cm4geF9hcHBkZWZ2 aXN1YWw7IH0KCgoKCmlubGluZSB2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGNvbnN0 IFFQb2ludCAmZHAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICpzcmMs IGNvbnN0IFFSZWN0ICZzciA9UVJlY3QoMCwwLC0xLC0xKSwKICAgICAgICAgICAgICAgICAgICBR dDo6UmFzdGVyT3Agcm9wPVF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9RkFMU0UgKQp7CiAg ICBiaXRCbHQoIGRzdCwgZHAueCgpLCBkcC55KCksIHNyYywgc3IueCgpLCBzci55KCksIHNyLndp ZHRoKCksIHNyLmhlaWdodCgpLAogICAgICAgICAgICByb3AsIGlnbm9yZU1hc2sgKTsKfQojIDQ1 ICJrZXJuZWwvcXdpZGdldC5oIiAyCiMgMSAia2VybmVsL3FwYWxldHRlLmgiIDEKIyA0MyAia2Vy bmVsL3FwYWxldHRlLmgiCiMgMSAia2VybmVsL3Fjb2xvci5oIiAxCiMgNDUgImtlcm5lbC9xY29s b3IuaCIKY29uc3QgUVJnYiBSR0JfRElSVFkgPSAweDgwMDAwMDAwOwpjb25zdCBRUmdiIFJHQl9J TlZBTElEID0gMHg0MDAwMDAwMDsKY29uc3QgUVJnYiBSR0JfRElSRUNUID0gMHgyMDAwMDAwMDsK Y29uc3QgUVJnYiBSR0JfTUFTSyA9IDB4MDBmZmZmZmY7CgoKIGlubGluZSBpbnQgcVJlZCggUVJn YiByZ2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDE2KSAmIDB4ZmYpOyB9CgogaW5saW5lIGlu dCBxR3JlZW4oIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiA4KSAmIDB4ZmYpOyB9 CgogaW5saW5lIGludCBxQmx1ZSggUVJnYiByZ2IgKQp7IHJldHVybiAoaW50KShyZ2IgJiAweGZm KTsgfQoKIGlubGluZSBpbnQgcUFscGhhKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKChyZ2Ig Pj4gMjQpICYgMHhmZik7IH0KCiBpbmxpbmUgUVJnYiBxUmdiKCBpbnQgciwgaW50IGcsIGludCBi ICkKeyByZXR1cm4gKDB4ZmYgPDwgMjQpIHwgKChyICYgMHhmZikgPDwgMTYpIHwgKChnICYgMHhm ZikgPDwgOCkgfCAoYiAmIDB4ZmYpOyB9CgogaW5saW5lIFFSZ2IgcVJnYmEoIGludCByLCBpbnQg ZywgaW50IGIsIGludCBhICkKeyByZXR1cm4gKChhICYgMHhmZikgPDwgMjQpIHwgKChyICYgMHhm ZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkgfCAoYiAmIDB4ZmYpOyB9CgogaW5saW5lIGlu dCBxR3JheSggaW50IHIsIGludCBnLCBpbnQgYiApCnsgcmV0dXJuIChyKjExK2cqMTYrYio1KS8z MjsgfQoKIGlubGluZSBpbnQgcUdyYXkoIFFSZ2IgcmdiICkKeyByZXR1cm4gcUdyYXkoIHFSZWQo cmdiKSwgcUdyZWVuKHJnYiksIHFCbHVlKHJnYikgKTsgfQoKCmNsYXNzIFFDb2xvcgp7CnB1Ymxp YzoKICAgIGVudW0gU3BlYyB7IFJnYiwgSHN2IH07CgogICAgUUNvbG9yKCk7CiAgICBRQ29sb3Io IGludCByLCBpbnQgZywgaW50IGIgKTsKICAgIFFDb2xvciggaW50IHgsIGludCB5LCBpbnQgeiwg U3BlYyApOwogICAgUUNvbG9yKCBRUmdiIHJnYiwgdWludCBwaXhlbD0weGZmZmZmZmZmKTsKICAg IFFDb2xvciggY29uc3QgUVN0cmluZyYgbmFtZSApOwogICAgUUNvbG9yKCBjb25zdCBjaGFyICpu YW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBRQ29sb3IgJm9wZXJhdG9y PSggY29uc3QgUUNvbG9yICYgKTsKCiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIGJvb2wg aXNEaXJ0eSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXRO YW1lZENvbG9yKCBjb25zdCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwg aW50ICpnLCBpbnQgKmIgKSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNl dFJnYiggaW50IHIsIGludCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7 CgogICAgaW50IHJlZCgpIGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1 ZSgpIGNvbnN0OwoKICAgIHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7 CiAgICB2b2lkIGdldEhzdiggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0OwogICAgdm9p ZCBzZXRIc3YoIGludCBoLCBpbnQgcywgaW50IHYgKTsKCiAgICBRQ29sb3IgbGlnaHQoIGludCBm ID0gMTUwICkgY29uc3Q7CiAgICBRQ29sb3IgZGFyayggaW50IGYgPSAyMDAgKSBjb25zdDsKCiAg ICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0OwogICAgYm9vbCBvcGVy YXRvciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKCiAgICBzdGF0aWMgYm9vbCBsYXp5QWxs b2MoKTsKICAgIHN0YXRpYyB2b2lkIHNldExhenlBbGxvYyggYm9vbCApOwogICAgdWludCBhbGxv YygpOwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKICAgIHN0YXRpYyBpbnQgbWF4Q29sb3JzKCk7 CiAgICBzdGF0aWMgaW50IG51bUJpdFBsYW5lcygpOwoKICAgIHN0YXRpYyBpbnQgZW50ZXJBbGxv Y0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGxlYXZlQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0 aWMgaW50IGN1cnJlbnRBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lBbGxv Y0NvbnRleHQoIGludCApOwoKCgoKCgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAg c3RhdGljIHZvaWQgY2xlYW51cCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0U3lzdGVtTmFtZWRD b2xvciggY29uc3QgUVN0cmluZyYgbmFtZSApOwogICAgc3RhdGljIHZvaWQgaW5pdEdsb2JhbENv bG9ycygpOwogICAgc3RhdGljIFFDb2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9v bCBjb2xvcl9pbml0OwogICAgc3RhdGljIGJvb2wgZ2xvYmFsc19pbml0OwogICAgc3RhdGljIGJv b2wgbGF6eV9hbGxvYzsKCgoKICAgIHVpbnQgcGl4OwogICAgUVJnYiByZ2JWYWw7Cn07CgoKaW5s aW5lIFFDb2xvcjo6UUNvbG9yKCkKeyByZ2JWYWwgPSBSR0JfSU5WQUxJRDsgcGl4ID0gMDsgfQoK aW5saW5lIFFDb2xvcjo6UUNvbG9yKCBpbnQgciwgaW50IGcsIGludCBiICkKeyBzZXRSZ2IoIHIs IGcsIGIgKTsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4g KHJnYlZhbCAmIFJHQl9JTlZBTElEKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRQ29sb3I6OmlzRGly dHkoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0RJUlRZKSAhPSAwOyB9CgppbmxpbmUg UVJnYiBRQ29sb3I6OnJnYigpIGNvbnN0CnsgcmV0dXJuIHJnYlZhbCB8IH5SR0JfTUFTSzsgfQoK aW5saW5lIGludCBRQ29sb3I6OnJlZCgpIGNvbnN0CnsgcmV0dXJuIHFSZWQocmdiVmFsKTsgfQoK aW5saW5lIGludCBRQ29sb3I6OmdyZWVuKCkgY29uc3QKeyByZXR1cm4gcUdyZWVuKHJnYlZhbCk7 IH0KCmlubGluZSBpbnQgUUNvbG9yOjpibHVlKCkgY29uc3QKeyByZXR1cm4gcUJsdWUocmdiVmFs KTsgfQoKaW5saW5lIHVpbnQgUUNvbG9yOjpwaXhlbCgpIGNvbnN0CnsgcmV0dXJuIChyZ2JWYWwg JiBSR0JfRElSVFkpID09IDAgPyBwaXggOiAoKFFDb2xvciopdGhpcyktPmFsbG9jKCk7IH0KCmlu bGluZSBib29sIFFDb2xvcjo6bGF6eUFsbG9jKCkKeyByZXR1cm4gbGF6eV9hbGxvYzsgfQoKCmlu bGluZSBib29sIFFDb2xvcjo6b3BlcmF0b3I9PSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewog ICAgcmV0dXJuIGlzVmFsaWQoKT09Yy5pc1ZhbGlkKCkgJiYKICAgICAgICAoKCgocmdiVmFsIHwg Yy5yZ2JWYWwpICYgUkdCX0RJUkVDVCkgPT0gMCAmJgogICAgICAgICAgICAocmdiVmFsICYgUkdC X01BU0spID09IChjLnJnYlZhbCAmIFJHQl9NQVNLKSkgfHwKICAgICAgICAgICAoKHJnYlZhbCAm IGMucmdiVmFsICYgUkdCX0RJUkVDVCkgIT0gMCAmJgogICAgICAgICAgICAocmdiVmFsICYgUkdC X01BU0spID09IChjLnJnYlZhbCAmIFJHQl9NQVNLKSAmJiBwaXggPT0gYy5waXgpKTsKfQoKaW5s aW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvciE9KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdAp7CiAg ICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7Cn0KCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8 PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRv cj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29sb3IgJiApOwojIDQ0ICJrZXJuZWwvcXBhbGV0dGUuaCIg MgoKIyAxICJrZXJuZWwvcWJydXNoLmgiIDEKIyA0NyAia2VybmVsL3FicnVzaC5oIgpjbGFzcyBR QnJ1c2g6IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGljOgogICAgUUJy dXNoKCk7CiAgICBRQnJ1c2goIEJydXNoU3R5bGUgKTsKICAgIFFCcnVzaCggY29uc3QgUUNvbG9y ICYsIEJydXNoU3R5bGU9U29saWRQYXR0ZXJuICk7CiAgICBRQnJ1c2goIGNvbnN0IFFDb2xvciAm LCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFCcnVzaCggY29uc3QgUUJydXNoICYgKTsKICAgflFC cnVzaCgpOwogICAgUUJydXNoICZvcGVyYXRvcj0oIGNvbnN0IFFCcnVzaCAmICk7CgogICAgQnJ1 c2hTdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkIHNl dFN0eWxlKCBCcnVzaFN0eWxlICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCljb25zdCB7IHJl dHVybiBkYXRhLT5jb2xvcjsgfQogICAgdm9pZCBzZXRDb2xvciggY29uc3QgUUNvbG9yICYgKTsK ICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnBpeG1hcDsgfQogICAg dm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSgg Y29uc3QgUUJydXNoICZwICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFCcnVz aCAmYiApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJl dHVybiAhKG9wZXJhdG9yPT0oYikpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoIGNvcHkoKSBjb25z dDsKICAgIHZvaWQgZGV0YWNoKCk7CiAgICB2b2lkIGluaXQoIGNvbnN0IFFDb2xvciAmLCBCcnVz aFN0eWxlICk7CiAgICBzdHJ1Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgICAg ICBCcnVzaFN0eWxlIHN0eWxlOwogICAgICAgIFFDb2xvciBjb2xvcjsKICAgICAgICBRUGl4bWFw ICpwaXhtYXA7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8 KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9y Pj4oIFFEYXRhU3RyZWFtICYsIFFCcnVzaCAmICk7CiMgNDYgImtlcm5lbC9xcGFsZXR0ZS5oIiAy CgoKCmNsYXNzIFFDb2xvckdyb3VwUHJpdmF0ZTsKCgpjbGFzcyBRQ29sb3JHcm91cAp7CnB1Ymxp YzoKICAgIFFDb2xvckdyb3VwKCk7CiAgICBRQ29sb3JHcm91cCggY29uc3QgUUNvbG9yICZmb3Jl Z3JvdW5kLCBjb25zdCBRQ29sb3IgJmJ1dHRvbiwKICAgICAgICAgICAgICAgICBjb25zdCBRQ29s b3IgJmxpZ2h0LCBjb25zdCBRQ29sb3IgJmRhcmssIGNvbnN0IFFDb2xvciAmbWlkLAogICAgICAg ICAgICAgICAgIGNvbnN0IFFDb2xvciAmdGV4dCwgY29uc3QgUUNvbG9yICZiYXNlICk7CiAgICBR Q29sb3JHcm91cCggY29uc3QgUUJydXNoICZmb3JlZ3JvdW5kLCBjb25zdCBRQnJ1c2ggJmJ1dHRv biwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggJmxpZ2h0LCBjb25zdCBRQnJ1c2ggJmRh cmssIGNvbnN0IFFCcnVzaCAmbWlkLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmdGV4 dCwgY29uc3QgUUJydXNoICZicmlnaHRfdGV4dCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1 c2ggJmJhc2UsIGNvbnN0IFFCcnVzaCAmYmFja2dyb3VuZCk7CiAgICBRQ29sb3JHcm91cCggY29u c3QgUUNvbG9yR3JvdXAgJiApOwoKICAgflFDb2xvckdyb3VwKCk7CgogICAgUUNvbG9yR3JvdXAm IG9wZXJhdG9yID0oY29uc3QgUUNvbG9yR3JvdXAmKTsKCgogICAgZW51bSBDb2xvclJvbGUgeyBG b3JlZ3JvdW5kLCBCdXR0b24sIExpZ2h0LCBNaWRsaWdodCwgRGFyaywgTWlkLAogICAgICAgICAg ICAgICAgICAgICBUZXh0LCBCcmlnaHRUZXh0LCBCdXR0b25UZXh0LCBCYXNlLCBCYWNrZ3JvdW5k LCBTaGFkb3csCiAgICAgICAgICAgICAgICAgICAgIEhpZ2hsaWdodCwgSGlnaGxpZ2h0ZWRUZXh0 LAogICAgICAgICAgICAgICAgICAgICBOQ29sb3JSb2xlcyB9OwoKICAgIGNvbnN0IFFDb2xvciAm Y29sb3IoIENvbG9yUm9sZSApIGNvbnN0OwogICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JS b2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENvbG9yKCBDb2xvclJvbGUsIGNvbnN0IFFDb2xvciAm ICk7CiAgICB2b2lkIHNldEJydXNoKCBDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAg Y29uc3QgUUNvbG9yICZmb3JlZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbRm9yZWdyb3VuZF0u Y29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZidXR0b24oKSBjb25zdCB7IHJldHVybiBicltC dXR0b25dLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGlnaHQoKSBjb25zdCB7IHJldHVy biBicltMaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZkYXJrKCkgY29uc3QgeyBy ZXR1cm4gYnJbRGFya10uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZtaWQoKSBjb25zdCB7 IHJldHVybiBicltNaWRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmdGV4dCgpIGNvbnN0 IHsgcmV0dXJuIGJyW1RleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYmFzZSgpIGNv bnN0IHsgcmV0dXJuIGJyW0Jhc2VdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYmFja2dy b3VuZCgpIGNvbnN0IHsgcmV0dXJuIGJyW0JhY2tncm91bmRdLmNvbG9yKCk7IH0KCiAgICBjb25z dCBRQ29sb3IgJm1pZGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJbTWlkbGlnaHRdLmNvbG9yKCk7 IH0KICAgIGNvbnN0IFFDb2xvciAmYnJpZ2h0VGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJyW0JyaWdo dFRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmYnV0dG9uVGV4dCgpIGNvbnN0IHsg cmV0dXJuIGJyW0J1dHRvblRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmc2hhZG93 KCkgY29uc3QgeyByZXR1cm4gYnJbU2hhZG93XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3Ig JmhpZ2hsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW0hpZ2hsaWdodF0uY29sb3IoKTsgfQogICAg Y29uc3QgUUNvbG9yICZoaWdobGlnaHRlZFRleHQoKSBjb25zdHtyZXR1cm4gYnJbSGlnaGxpZ2h0 ZWRUZXh0XS5jb2xvcigpOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3JHcm91 cCAmZyApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQ29sb3JHcm91cCAmZyAp IGNvbnN0CiAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KGcpKTsgfQoKcHJpdmF0ZToKICAg IFFCcnVzaCAqYnI7CiAgICBRQ29sb3JHcm91cFByaXZhdGUgKiBkOwoKICAgIGZyaWVuZCBjbGFz cyBRUGFsZXR0ZTsKfTsKCgpjbGFzcyBRUGFsZXR0ZQp7CnB1YmxpYzoKICAgIFFQYWxldHRlKCk7 CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZidXR0b24gKTsKICAgIFFQYWxldHRlKCBjb25z dCBRQ29sb3IgJmJ1dHRvbiwgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kICk7CiAgICBRUGFsZXR0 ZSggY29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSwgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVk LAogICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSApOwogICAgUVBhbGV0 dGUoIGNvbnN0IFFQYWxldHRlICYgKTsKICAgflFQYWxldHRlKCk7CiAgICBRUGFsZXR0ZSAmb3Bl cmF0b3I9KCBjb25zdCBRUGFsZXR0ZSAmICk7CgogICAgZW51bSBDb2xvckdyb3VwIHsgTm9ybWFs LCBEaXNhYmxlZCwgQWN0aXZlLCBJbmFjdGl2ZSwgTkNvbG9yR3JvdXBzIH07CgogICAgY29uc3Qg UUNvbG9yICZjb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0 OwogICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9y Um9sZSApIGNvbnN0OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6 OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yR3Jv dXAsIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgdm9pZCBz ZXRDb2xvciggUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZv aWQgc2V0QnJ1c2goIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7Cgog ICAgUVBhbGV0dGUgY29weSgpIGNvbnN0OwoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUo KSBjb25zdCB7IHJldHVybiBkYXRhLT5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZk aXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmRpc2FibGVkOyB9CiAgICBjb25zdCBRQ29s b3JHcm91cCAmaW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5pbmFjdGl2ZTsgfQogICAg Y29uc3QgUUNvbG9yR3JvdXAgJm5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPm5vcm1hbDsg fQoKICAgIHZvaWQgc2V0QWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNl dERpc2FibGVkKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldEluYWN0aXZlKCBj b25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkIHNldE5vcm1hbCggY29uc3QgUUNvbG9yR3Jv dXAgJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdDsK ICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KHApKTsg fQogICAgYm9vbCBpc0NvcHlPZiggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGludCBzZXJpYWxO dW1iZXIoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zZXJfbm87IH0KCnByaXZhdGU6CiAgICB2b2lk IGRldGFjaCgpOwogICAgUUJydXNoICZkaXJlY3RCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3Jv dXA6OkNvbG9yUm9sZSApIGNvbnN0OwoKICAgIHN0cnVjdCBRUGFsRGF0YSA6IHB1YmxpYyBRU2hh cmVkIHsKICAgICAgICBRQ29sb3JHcm91cCBub3JtYWw7CiAgICAgICAgUUNvbG9yR3JvdXAgZGlz YWJsZWQ7CiAgICAgICAgUUNvbG9yR3JvdXAgYWN0aXZlOwogICAgICAgIGludCBzZXJfbm87CiAg ICAgICAgUUNvbG9yR3JvdXAgaW5hY3RpdmU7CiAgICB9ICpkYXRhOwogICAgc3RhdGljIFFQYWxE YXRhICpkZWZQYWxEYXRhOwogICAgc3RhdGljIHZvaWQgY2xlYW51cERlZlBhbCgpOwp9OwoKCgoK CgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3JH cm91cCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9y R3JvdXAgJiApOwoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z dCBRUGFsZXR0ZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwg UVBhbGV0dGUgJiApOwojIDQ2ICJrZXJuZWwvcXdpZGdldC5oIiAyCiMgMSAia2VybmVsL3FjdXJz b3IuaCIgMQojIDY2ICJrZXJuZWwvcWN1cnNvci5oIgpzdHJ1Y3QgUUN1cnNvckRhdGE7CgoKY2xh c3MgUUN1cnNvcgp7CnB1YmxpYzoKICAgIFFDdXJzb3IoKTsKICAgIFFDdXJzb3IoIGludCBzaGFw ZSApOwogICAgUUN1cnNvciggY29uc3QgUUJpdG1hcCAmYml0bWFwLCBjb25zdCBRQml0bWFwICZt YXNrLAogICAgICAgICAgICAgaW50IGhvdFg9LTEsIGludCBob3RZPS0xICk7CiAgICBRQ3Vyc29y KCBjb25zdCBRUGl4bWFwICZwaXhtYXAsCiAgICAgICAgICAgICBpbnQgaG90WD0tMSwgaW50IGhv dFk9LTEgKTsKICAgIFFDdXJzb3IoIGNvbnN0IFFDdXJzb3IgJiApOwogICB+UUN1cnNvcigpOwog ICAgUUN1cnNvciAmb3BlcmF0b3I9KCBjb25zdCBRQ3Vyc29yICYgKTsKCiAgICBpbnQgc2hhcGUo KSBjb25zdDsKICAgIHZvaWQgc2V0U2hhcGUoIGludCApOwoKICAgIGNvbnN0IFFCaXRtYXAgKmJp dG1hcCgpIGNvbnN0OwogICAgY29uc3QgUUJpdG1hcCAqbWFzaygpIGNvbnN0OwogICAgUVBvaW50 IGhvdFNwb3QoKSBjb25zdDsKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgoKCiAg ICBzdGF0aWMgUVBvaW50IHBvcygpOwogICAgc3RhdGljIHZvaWQgc2V0UG9zKCBpbnQgeCwgaW50 IHkgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBvcyggY29uc3QgUVBvaW50ICYgKTsKCiAgICBzdGF0 aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7Cgpwcml2YXRl OgogICAgdm9pZCBzZXRCaXRtYXAoIGNvbnN0IFFCaXRtYXAgJmJpdG1hcCwgY29uc3QgUUJpdG1h cCAmbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhvdFgsIGludCBo b3RZICk7CiAgICB2b2lkIHVwZGF0ZSgpIGNvbnN0OwogICAgUUN1cnNvckRhdGEgKmRhdGE7CiAg ICBRQ3Vyc29yICpmaW5kX2N1cihpbnQpOwp9OwojIDEyMSAia2VybmVsL3FjdXJzb3IuaCIKZW51 bSBRQ3Vyc29yU2hhcGUgewogICAgQXJyb3dDdXJzb3IsIFVwQXJyb3dDdXJzb3IsIENyb3NzQ3Vy c29yLCBXYWl0Q3Vyc29yLCBJYmVhbUN1cnNvciwKICAgIFNpemVWZXJDdXJzb3IsIFNpemVIb3JD dXJzb3IsIFNpemVCRGlhZ0N1cnNvciwgU2l6ZUZEaWFnQ3Vyc29yLAogICAgU2l6ZUFsbEN1cnNv ciwgQmxhbmtDdXJzb3IsIFNwbGl0VkN1cnNvciwgU3BsaXRIQ3Vyc29yLCBQb2ludGluZ0hhbmRD dXJzb3IsCiAgICBGb3JiaWRkZW5DdXJzb3IsIExhc3RDdXJzb3IgPSBGb3JiaWRkZW5DdXJzb3Is IEJpdG1hcEN1cnNvcj0yNCB9OwoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh U3RyZWFtICYsIGNvbnN0IFFDdXJzb3IgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFE YXRhU3RyZWFtICYsIFFDdXJzb3IgJiApOwoKCgoKaW5saW5lIHZvaWQgUUN1cnNvcjo6c2V0UG9z KCBjb25zdCBRUG9pbnQgJnAgKQp7CiAgICBzZXRQb3MoIHAueCgpLCBwLnkoKSApOwp9CiMgNDcg Imtlcm5lbC9xd2lkZ2V0LmgiIDIKIyAxICJrZXJuZWwvcWZvbnQuaCIgMQojIDQ3ICJrZXJuZWwv cWZvbnQuaCIKY2xhc3MgUVN0cmluZ0xpc3Q7CnN0cnVjdCBRRm9udERlZjsKc3RydWN0IFFGb250 RGF0YTsKY2xhc3MgUUZvbnRJbnRlcm5hbDsKY2xhc3MgUVJlbmRlcmVkRm9udDsKCmNsYXNzIFFG b250CnsKcHVibGljOgogICAgZW51bSBDaGFyU2V0IHsgSVNPXzg4NTlfMSwgTGF0aW4xID0gSVNP Xzg4NTlfMSwgQW55Q2hhclNldCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMiwgTGF0 aW4yID0gSVNPXzg4NTlfMiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMywgTGF0aW4z ID0gSVNPXzg4NTlfMywKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNCwgTGF0aW40ID0g SVNPXzg4NTlfNCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNSwKICAgICAgICAgICAg ICAgICAgICAgSVNPXzg4NTlfNiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNywKICAg ICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfOCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4 NTlfOSwgTGF0aW41ID0gSVNPXzg4NTlfOSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlf MTAsIExhdGluNiA9IElTT184ODU5XzEwLAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8x MSwgVElTNjIwID0gSVNPXzg4NTlfMTEsCiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzEy LAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8xMywgTGF0aW43ID0gSVNPXzg4NTlfMTMs CiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzE0LCBMYXRpbjggPSBJU09fODg1OV8xNCwK ICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMTUsIExhdGluOSA9IElTT184ODU5XzE1LAog ICAgICAgICAgICAgICAgICAgICBLT0k4UiwKICAgICAgICAgICAgICAgICAgICAgU2V0X0phLCBT ZXRfMSA9IFNldF9KYSwKICAgICAgICAgICAgICAgICAgICAgU2V0X0tvLAogICAgICAgICAgICAg ICAgICAgICBTZXRfVGhfVEgsCiAgICAgICAgICAgICAgICAgICAgIFNldF9aaCwKICAgICAgICAg ICAgICAgICAgICAgU2V0X1poX1RXLAogICAgICAgICAgICAgICAgICAgICBTZXRfTiA9IFNldF9a aF9UVywKICAgICAgICAgICAgICAgICAgICAgVW5pY29kZSwKCgoKCgoKICAgICAgICAgICAgICAg ICAgICAgU2V0X0dCSywKICAgICAgICAgICAgICAgICAgICAgU2V0X0JpZzUsCgogICAgICAgICAg ICAgICAgICAgICBUU0NJSSwKICAgICAgICAgICAgICAgICAgICAgS09JOFUsCiAgICAgICAgICAg ICAgICAgICAgIENQMTI1MSwKICAgICAgICAgICAgICAgICAgICAgUFQxNTQsCgoKCgogICAgICAg ICAgICAgICAgICAgICBKSVNfWF8wMjAxID0gMHhhMCwKCiAgICAgICAgICAgICAgICAgICAgIEpJ U19YXzAyMDggPSAweGMwLCBFbmMxNiA9IEpJU19YXzAyMDgsCiAgICAgICAgICAgICAgICAgICAg IEtTQ181NjAxLAogICAgICAgICAgICAgICAgICAgICBHQl8yMzEyLAogICAgICAgICAgICAgICAg ICAgICBCaWc1CiAgICB9OwogICAgZW51bSBTdHlsZUhpbnQgeyBIZWx2ZXRpY2EsIFRpbWVzLCBD b3VyaWVyLCBPbGRFbmdsaXNoLCBTeXN0ZW0sIEFueVN0eWxlLAogICAgICAgICAgICAgICAgICAg ICBTYW5zU2VyaWYgPSBIZWx2ZXRpY2EsCiAgICAgICAgICAgICAgICAgICAgIFNlcmlmID0gVGlt ZXMsCiAgICAgICAgICAgICAgICAgICAgIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgICAg ICAgICAgICAgICBEZWNvcmF0aXZlID0gT2xkRW5nbGlzaH07CiAgICBlbnVtIFN0eWxlU3RyYXRl Z3kgeyBQcmVmZXJEZWZhdWx0ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBy ZWZlckJpdG1hcCA9IDB4MDAwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJEZXZp Y2UgPSAweDAwMDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyT3V0bGluZSA9IDB4 MDAwOCwKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZU91dGxpbmUgPSAweDAwMTAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyTWF0Y2ggPSAweDAwMjAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgUHJlZmVyUXVhbGl0eSA9IDB4MDA0MCB9OwogICAgZW51bSBXZWlnaHQg eyBMaWdodCA9IDI1LCBOb3JtYWwgPSA1MCwgRGVtaUJvbGQgPSA2MywKICAgICAgICAgICAgICAg ICAgICAgQm9sZCA9IDc1LCBCbGFjayA9IDg3IH07CiAgICBRRm9udCgpOwogICAgUUZvbnQoIGNv bnN0IFFTdHJpbmcgJmZhbWlseSwgaW50IHBvaW50U2l6ZSA9IDEyLAogICAgICAgICAgIGludCB3 ZWlnaHQgPSBOb3JtYWwsIGJvb2wgaXRhbGljID0gRkFMU0UgKTsKICAgIFFGb250KCBjb25zdCBR U3RyaW5nICZmYW1pbHksIGludCBwb2ludFNpemUsCiAgICAgICAgICAgaW50IHdlaWdodCwgYm9v bCBpdGFsaWMsIENoYXJTZXQgY2hhclNldCApOwogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsK ICAgIH5RRm9udCgpOwogICAgUUZvbnQgJm9wZXJhdG9yPSggY29uc3QgUUZvbnQgJiApOwoKICAg IFFTdHJpbmcgZmFtaWx5KCkgY29uc3Q7CiAgICB2b2lkIHNldEZhbWlseSggY29uc3QgUVN0cmlu ZyAmKTsKICAgIGludCBwb2ludFNpemUoKSBjb25zdDsKICAgIGZsb2F0IHBvaW50U2l6ZUZsb2F0 KCkgY29uc3Q7CiAgICB2b2lkIHNldFBvaW50U2l6ZSggaW50ICk7CiAgICB2b2lkIHNldFBvaW50 U2l6ZUZsb2F0KCBmbG9hdCApOwogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBz ZXRQaXhlbFNpemUoIGludCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsK ICAgIGludCB3ZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2VpZ2h0KCBpbnQgKTsKICAgIGJv b2wgYm9sZCgpIGNvbnN0OwogICAgdm9pZCBzZXRCb2xkKCBib29sICk7CiAgICBib29sIGl0YWxp YygpIGNvbnN0OwogICAgdm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKICAgIGJvb2wgdW5kZXJsaW5l KCkgY29uc3Q7CiAgICB2b2lkIHNldFVuZGVybGluZSggYm9vbCApOwogICAgYm9vbCBzdHJpa2VP dXQoKSBjb25zdDsKICAgIHZvaWQgc2V0U3RyaWtlT3V0KCBib29sICk7CiAgICBib29sIGZpeGVk UGl0Y2goKSBjb25zdDsKICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwogICAgU3R5bGVI aW50IHN0eWxlSGludCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCAp OwogICAgU3R5bGVTdHJhdGVneSBzdHlsZVN0cmF0ZWd5KCkgY29uc3Q7CiAgICB2b2lkIHNldFN0 eWxlSGludCggU3R5bGVIaW50LCBTdHlsZVN0cmF0ZWd5ICk7CiAgICBDaGFyU2V0IGNoYXJTZXQo KSBjb25zdDsKICAgIHZvaWQgc2V0Q2hhclNldCggQ2hhclNldCApOwoKICAgIHN0YXRpYyBDaGFy U2V0IGNoYXJTZXRGb3JMb2NhbGUoKTsKCiAgICBib29sIHJhd01vZGUoKSBjb25zdDsKICAgIHZv aWQgc2V0UmF3TW9kZSggYm9vbCApOwoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAg IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRRm9udCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9u dCAmICkgY29uc3Q7CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9p ZCBzZXRSYXdOYW1lKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNv bnN0OwoKICAgIFFTdHJpbmcga2V5KCkgY29uc3Q7CgogICAgc3RhdGljIFFTdHJpbmcgZW5jb2Rp bmdOYW1lKCBDaGFyU2V0ICk7CgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBz dGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKICAgIHN0YXRpYyBR U3RyaW5nIHN1YnN0aXR1dGUoIGNvbnN0IFFTdHJpbmcgJmZhbWlseU5hbWUgKTsKICAgIHN0YXRp YyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbiggY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcg Jik7CiAgICBzdGF0aWMgdm9pZCByZW1vdmVTdWJzdGl0dXRpb24oIGNvbnN0IFFTdHJpbmcgJik7 CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3Vic3RpdHV0aW9ucygpOwoKICAgIHN0YXRpYyB2b2lk IGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2b2lkIGxvY2FsZV9pbml0KCk7CiAgICBzdGF0aWMg dm9pZCBjbGVhbnVwKCk7CiAgICBzdGF0aWMgdm9pZCBjYWNoZVN0YXRpc3RpY3MoKTsKCgoKCgpw cm90ZWN0ZWQ6CiAgICBib29sIGRpcnR5KCkgY29uc3Q7CgogICAgUVN0cmluZyBkZWZhdWx0RmFt aWx5KCkgY29uc3Q7CiAgICBRU3RyaW5nIGxhc3RSZXNvcnRGYW1pbHkoKSBjb25zdDsKICAgIFFT dHJpbmcgbGFzdFJlc29ydEZvbnQoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29u c3Q7Cgpwcml2YXRlOgogICAgUUZvbnQoIFFGb250RGF0YSAqICk7CiAgICB2b2lkIGluaXQoKTsK ICAgIHZvaWQgZGV0YWNoKCk7CiAgICB2b2lkIGluaXRGb250SW5mbygpIGNvbnN0OwogICAgdm9p ZCBsb2FkKCkgY29uc3Q7CiMgMjIxICJrZXJuZWwvcWZvbnQuaCIKICAgIGZyaWVuZCBjbGFzcyBR Rm9udF9Qcml2YXRlOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW50ZXJuYWw7CiAgICBmcmllbmQg Y2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVu ZCBjbGFzcyBRUGFpbnRlcjsKCiAgICBmcmllbmQgdm9pZCAqIHF0X2Z0X2ZvbnQgKGNvbnN0IFFG b250ICpmKTsKCgoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl YW0gJiwgY29uc3QgUUZvbnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+ KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgogICAgUUZvbnREYXRhICpkOwogICAgc3RhdGlj IENoYXJTZXQgZGVmYXVsdENoYXJTZXQ7Cn07CgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNv bnN0CnsgcmV0dXJuIHdlaWdodCgpID4gTm9ybWFsOyB9CgppbmxpbmUgdm9pZCBRRm9udDo6c2V0 Qm9sZCggYm9vbCBlbmFibGUgKQp7IHNldFdlaWdodCggZW5hYmxlID8gQm9sZCA6IE5vcm1hbCAp OyB9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0 IFFGb250ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9u dCAmICk7CiMgNDggImtlcm5lbC9xd2lkZ2V0LmgiIDIKIyAxICJrZXJuZWwvcWZvbnRtZXRyaWNz LmgiIDEKIyA0NiAia2VybmVsL3Fmb250bWV0cmljcy5oIgpjbGFzcyBRVGV4dENvZGVjOwoKCmNs YXNzIFFGb250TWV0cmljcwp7CnB1YmxpYzoKICAgIFFGb250TWV0cmljcyggY29uc3QgUUZvbnQg JiApOwogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9udE1ldHJpY3MgJiApOwogICB+UUZvbnRN ZXRyaWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVyYXRvcj0oIGNvbnN0IFFGb250TWV0cmlj cyAmICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0OwogICAgaW50IGRlc2NlbnQoKSBjb25zdDsK ICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBsZWFkaW5nKCkgY29uc3Q7CiAgICBpbnQg bGluZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5MZWZ0QmVhcmluZygpIGNvbnN0OwogICAg aW50IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1heFdpZHRoKCkgY29uc3Q7Cgog ICAgYm9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAgIGludCBsZWZ0QmVhcmluZyhRQ2hhcikg Y29uc3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGludCB3aWR0aCgg Y29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIGludCB3aWR0aCggUUNo YXIgKSBjb25zdDsKICAgIGludCB3aWR0aCggY2hhciBjICkgY29uc3QgeyByZXR1cm4gd2lkdGgo IChRQ2hhcikgYyApOyB9CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwg aW50IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIFFDaGFyICkgY29u c3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBp bnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0 ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqdGFiYXJyYXk9MCwgY2hhciAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZSBz aXplKCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdHIs IGludCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAogICAgICAgICAgICAgICAgICAgICAgaW50ICp0 YWJhcnJheT0wLCBjaGFyICoqaW50ZXJuPTAgKSBjb25zdDsKCiAgICBpbnQgdW5kZXJsaW5lUG9z KCkgY29uc3Q7CiAgICBpbnQgc3RyaWtlT3V0UG9zKCkgY29uc3Q7CiAgICBpbnQgbGluZVdpZHRo KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRUGFpbnRlciAqICk7 CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwogICAgY29uc3QgUUZv bnREZWYgKnNwZWMoKSBjb25zdDsKCgoKCgogICAgdm9pZCAqZm9udFN0cnVjdCgpIGNvbnN0Owog ICAgdm9pZCAqZm9udFNldCgpIGNvbnN0OwogICAgY29uc3QgUVRleHRDb2RlYyAqbWFwcGVyKCkg Y29uc3Q7CiAgICBpbnQgcHJpbnRlckFkanVzdGVkKGludCkgY29uc3Q7CgoKCgogICAgZnJpZW5k IGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgogICAgUUZvbnRJbnRl cm5hbCAqZmluOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9v bCB1bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAg ICBib29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7 IH0KICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lk IHNldFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ5ICJrZXJuZWwvcXdp ZGdldC5oIiAyCiMgMSAia2VybmVsL3Fmb250aW5mby5oIiAxCiMgNDYgImtlcm5lbC9xZm9udGlu Zm8uaCIKY2xhc3MgUUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9u dCAmICk7CiAgICBRRm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgIH5RRm9udEluZm8o KTsKCiAgICBRRm9udEluZm8gJm9wZXJhdG9yPSggY29uc3QgUUZvbnRJbmZvICYgKTsKCiAgICBR U3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgYm9v bCBpdGFsaWMoKSBjb25zdDsKICAgIGludCB3ZWlnaHQoKSBjb25zdDsKICAgIGJvb2wgYm9sZCgp IGNvbnN0OwogICAgYm9vbCB1bmRlcmxpbmUoKSBjb25zdDsKICAgIGJvb2wgc3RyaWtlT3V0KCkg Y29uc3Q7CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIFFGb250OjpTdHlsZUhpbnQg c3R5bGVIaW50KCkgY29uc3Q7CiAgICBRRm9udDo6Q2hhclNldCBjaGFyU2V0KCkgY29uc3Q7CiAg ICBib29sIHJhd01vZGUoKSBjb25zdDsKCiAgICBib29sIGV4YWN0TWF0Y2goKSBjb25zdDsKCgog ICAgY29uc3QgUUZvbnQgJmZvbnQoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUUZvbnRJbmZvKCBj b25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIg KiApOwogICAgY29uc3QgUUZvbnREZWYgKnNwZWMoKSBjb25zdDsKCiAgICBRRm9udEludGVybmFs ICpmaW47CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAgIGludCBmbGFnczsKCiAgICBib29sIHVu ZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7IH0KICAgIGJv b2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4MikgIT0gMDsgfQog ICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4NCkgIT0g MDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkgeyBmbGFncyB8PSAweDE7IH0KICAgIHZv aWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0gMHgyOyB9CiAgICB2b2lkIHNldEV4YWN0 TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsK ICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRRm9udEluZm86OmJv bGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFGb250OjpOb3JtYWw7IH0KIyA1MCAia2Vy bmVsL3F3aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xc3R5bGUuaCIgMQojIDQ2ICJrZXJuZWwvcXN0 eWxlLmgiCmNsYXNzIFFCdXR0b247CmNsYXNzIFFQdXNoQnV0dG9uOwpjbGFzcyBRU2Nyb2xsQmFy OwpjbGFzcyBRVGFiQmFyOwpjbGFzcyBRVGFiOwpjbGFzcyBRUG9wdXBNZW51OwpjbGFzcyBRTWVu dUl0ZW07CmNsYXNzIFFUb29sQnV0dG9uOwoKY2xhc3MgUVN0eWxlOiBwdWJsaWMgUU9iamVjdAp7 CiAgICBwdWJsaWM6IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3Rh dGljTWV0YU9iamVjdCgpOyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMg UU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3Qg Y2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90 ZWN0ZWQ6IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0 ICptZXRhT2JqOwogICAgR1VJU3R5bGUgZ3M7Cgpwcml2YXRlOgogICAgUVN0eWxlKEdVSVN0eWxl KTsKICAgIFFTdHlsZSgpOwogICAgZnJpZW5kIGNsYXNzIFFDb21tb25TdHlsZTsKCnB1YmxpYzoK ICAgIHZpcnR1YWwgflFTdHlsZSgpOwoKCiAgICBvcGVyYXRvciBHVUlTdHlsZSgpIGNvbnN0IHsg cmV0dXJuIGdzOyB9CiAgICBpbnQgb3BlcmF0b3I9PShHVUlTdHlsZSBzKSBjb25zdCB7IHJldHVy biBncz09czsgfQogICAgaW50IG9wZXJhdG9yIT0oR1VJU3R5bGUgcykgY29uc3QgeyByZXR1cm4g Z3MhPXM7IH0KCgogICAgR1VJU3R5bGUgZ3VpU3R5bGUoKSBjb25zdCB7IHJldHVybiBnczsgfQoK CgogICAgdmlydHVhbCB2b2lkIHBvbGlzaCggUVdpZGdldCogKTsKICAgIHZpcnR1YWwgdm9pZCB1 blBvbGlzaCggUVdpZGdldCogKTsKCiAgICB2aXJ0dWFsIHZvaWQgcG9saXNoKCBRQXBwbGljYXRp b24qKTsKICAgIHZpcnR1YWwgdm9pZCB1blBvbGlzaCggUUFwcGxpY2F0aW9uKik7CgogICAgdmly dHVhbCB2b2lkIHBvbGlzaCggUVBhbGV0dGUmKTsKCiAgICB2aXJ0dWFsIFFSZWN0IGl0ZW1SZWN0 KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAg ICAgICAgaW50IGZsYWdzLCBib29sIGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg UVBpeG1hcCAqcGl4bWFwLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRleHQs IGludCBsZW49LTEgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd0l0ZW0oIFFQYWludGVyICpwLCBp bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3Ms IGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAg Y29uc3QgUVBpeG1hcCAqcGl4bWFwLCBjb25zdCBRU3RyaW5nJiB0ZXh0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbGVuPS0xLCBjb25zdCBRQ29sb3IqIHBlbkNvbG9yID0gMCApOwoK CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NlcGFyYXRvciggUVBhaW50ZXIgKnAsIGludCB4MSwgaW50 IHkxLCBpbnQgeDIsIGludCB5MiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3Jv dXAgJmcsIGJvb2wgc3Vua2VuID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVX aWR0aCA9IDEsIGludCBtaWRMaW5lV2lkdGggPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdS ZWN0KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAg ICAgICAgICAgY29uc3QgUUNvbG9yICYsIGludCBsaW5lV2lkdGggPSAxLAogICAgICAgICAgICAg ICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1Jl Y3RTdHJvbmcoIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgYm9vbCBzdW5rZW49RkFMU0UsCiAg ICAgICAgICAgICAgICAgICAgIGludCBsaW5lV2lkdGggPSAxLCBpbnQgbWlkTGluZVdpZHRoID0g MCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJydXNoICpmaWxsID0gMCApOwoKICAgIHZp cnR1YWwgdm9pZCBkcmF3QnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1 bmtlbiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAw ICkgPSAwOwoKICAgIHZpcnR1YWwgUVJlY3QgYnV0dG9uUmVjdCggaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgpOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QnV0dG9uTWFzayggUVBhaW50ZXIgKnAs IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd0JldmVs QnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZBTFNFLAog ICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICkgPSAwOwoKICAgIFFS ZWN0IGJldmVsQnV0dG9uUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAgIHZp cnR1YWwgdm9pZCBkcmF3VG9vbEJ1dHRvbiggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50 IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9v bCBzdW5rZW4gPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJydXNoICpmaWxs ID0gMCApOwogICAgdm9pZCBkcmF3VG9vbEJ1dHRvbiggUVRvb2xCdXR0b24qIGJ0biwgUVBhaW50 ZXIgKnApOwoKICAgIFFSZWN0IHRvb2xCdXR0b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBp bnQgaCk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdQYW5lbCggUVBhaW50ZXIgKnAsIGludCB4LCBp bnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3Vw ICYsIGJvb2wgc3Vua2VuPUZBTFNFLAogICAgICAgICAgICAgICAgICAgIGludCBsaW5lV2lkdGgg PSAxLCBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdQb3B1 cFBhbmVsKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICYsIGludCBsaW5lV2lk dGggPSAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZp bGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRyYXdBcnJvdyggUVBhaW50ZXIgKnAsIFF0OjpB cnJvd1R5cGUgdHlwZSwgYm9vbCBkb3duLAogICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50 IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAg JmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgUUJydXNoICpmaWxsID0gMCApID0gMDsKCgogICAgdmly dHVhbCBRU2l6ZSBleGNsdXNpdmVJbmRpY2F0b3JTaXplKCkgY29uc3QgPSAwOwogICAgdmlydHVh bCB2b2lkIGRyYXdFeGNsdXNpdmVJbmRpY2F0b3IoIFFQYWludGVyKiBwLCBpbnQgeCwgaW50IHks IGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywg Ym9vbCBvbiwgYm9vbCBkb3duID0gRkFMU0UsIGJvb2wgZW5hYmxlZCA9IFRSVUUgKSA9IDA7CiAg ICB2aXJ0dWFsIHZvaWQgZHJhd0V4Y2x1c2l2ZUluZGljYXRvck1hc2soIFFQYWludGVyICpwLCBp bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBvbik7CgoKICAgIHZpcnR1YWwgUVNpemUg aW5kaWNhdG9yU2l6ZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5kaWNhdG9y KCBRUGFpbnRlciogcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGNvbnN0IFFDb2xvckdy b3VwICZnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZSwgYm9vbCBk b3duID0gRkFMU0UsIGJvb2wgZW5hYmxlZCA9IFRSVUUgKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg ZHJhd0luZGljYXRvck1hc2soIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg aCwgaW50IHN0YXRlKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSZWN0KCBRUGFpbnRl ciosIGNvbnN0IFFSZWN0ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUNvbG9yR3JvdXAgJiwgY29uc3QgUUNvbG9yKiBiZyA9IDAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCA9IEZBTFNFICkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgZHJh d0NvbWJvQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9v bCBzdW5rZW4gPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg ZWRpdGFibGUgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg ZW5hYmxlZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR QnJ1c2ggKmZpbGwgPSAwICkgPSAwOwogICAgdmlydHVhbCBRUmVjdCBjb21ib0J1dHRvblJlY3Qo IGludCB4LCBpbnQgeSwKICAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgpID0gMDsKICAg IHZpcnR1YWwgUVJlY3QgY29tYm9CdXR0b25Gb2N1c1JlY3QoIGludCB4LCBpbnQgeSwKICAgICAg ICAgICAgICAgICAgICBpbnQgdywgaW50IGgpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd0Nv bWJvQnV0dG9uTWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSA9 IDA7CgoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UHVzaEJ1dHRvbiggUVB1c2hCdXR0b24qIGJ0biwg UVBhaW50ZXIgKnApID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1B1c2hCdXR0b25MYWJlbCgg UVB1c2hCdXR0b24qIGJ0biwgUVBhaW50ZXIgKnApID0gMDsKICAgIFFSZWN0IHB1c2hCdXR0b25D b250ZW50c1JlY3QoIFFQdXNoQnV0dG9uKiBidG4gKTsKICAgIGludCBtZW51QnV0dG9uSW5kaWNh dG9yV2lkdGgoIGludCBoICk7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0QnV0dG9uU2hpZnQoIGludCAm eCwgaW50ICZ5KSA9IDA7CgoKICAgIHZpcnR1YWwgaW50IGRlZmF1bHRGcmFtZVdpZHRoKCkgY29u c3QgPSAwOwoKCiAgICB2aXJ0dWFsIHZvaWQgdGFiYmFyTWV0cmljcyggY29uc3QgUVRhYkJhcios CiAgICAgICAgICAgICAgICAgICAgaW50JiwgaW50JiwgaW50JiApID0gMDsKICAgIHZpcnR1YWwg dm9pZCBkcmF3VGFiKCBRUGFpbnRlciosIGNvbnN0IFFUYWJCYXIqLCBRVGFiKiwgYm9vbCBzZWxl Y3RlZCApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3VGFiTWFzayggUVBhaW50ZXIqLCBjb25z dCBRVGFiQmFyKiwgUVRhYiosIGJvb2wgc2VsZWN0ZWQgKSA9IDA7CgoKICAgIGVudW0gU2Nyb2xs Q29udHJvbCB7IEFkZExpbmUgPSAweDEgLCBTdWJMaW5lID0gMHgyICwgQWRkUGFnZSA9IDB4NCwK ICAgICAgICAgICAgICAgICAgICAgICAgIFN1YlBhZ2UgPSAweDggLCBGaXJzdCA9IDB4MTAsIExh c3QgPSAweDIwLAogICAgICAgICAgICAgICAgICAgICAgICAgU2xpZGVyID0gMHg0MCwgTm9TY3Jv bGwgPSAweDgwIH07CgogICAgdmlydHVhbCB2b2lkIHNjcm9sbEJhck1ldHJpY3MoIGNvbnN0IFFT Y3JvbGxCYXIqLAogICAgICAgICAgICAgICAgICAgIGludCYsIGludCYsIGludCYsIGludCYpID0g MDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U2Nyb2xsQmFyQ29udHJvbHMoIFFQYWludGVyKiwgY29u c3QgUVNjcm9sbEJhciosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgc2xpZGVyU3RhcnQsIHVpbnQgY29udHJvbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50IGFjdGl2ZUNvbnRyb2wgKSA9IDA7CiAgICB2aXJ0dWFsIFNjcm9s bENvbnRyb2wgc2Nyb2xsQmFyUG9pbnRPdmVyKCBjb25zdCBRU2Nyb2xsQmFyKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbGlkZXJTdGFydCwgY29uc3QgUVBv aW50JiApID0gMDsKCgogICAgdmlydHVhbCBpbnQgc2xpZGVyTGVuZ3RoKCkgY29uc3QgPSAwOwog ICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXIoIFFQYWludGVyICpwLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9yaWVudGF0aW9uLCBib29sIHRpY2tBYm92ZSwgYm9vbCB0aWNrQmVsb3cpID0gMDsK CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NsaWRlck1hc2soIFFQYWludGVyICpwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb24sIGJvb2wgdGlja0Fib3ZlLCBi b29sIHRpY2tCZWxvdykgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXJHcm9vdmUoIFFQ YWludGVyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQg eSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFFDb2xvckdyb3VwJiBnLCBRQ09PUkQgYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPcmllbnRhdGlvbiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U2xpZGVyR3Jvb3Zl TWFzayggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRQ09PUkQgYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3JpZW50YXRpb24gKSA9IDA7CiAgICB2aXJ0dWFsIGludCBtYXhpbXVtU2xpZGVyRHJhZ0Rp c3RhbmNlKCkgY29uc3QgPSAwOwoKICAgIHZpcnR1YWwgaW50IHNwbGl0dGVyV2lkdGgoKSBjb25z dCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NwbGl0dGVyKCBRUGFpbnRlciAqcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPcmllbnRhdGlvbikgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3 Q2hlY2tNYXJrKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3QsIGJvb2wgZGlzICkgPSAwOwogICAgdmly dHVhbCB2b2lkIHBvbGlzaFBvcHVwTWVudSggUVBvcHVwTWVudSogKSA9IDA7CgogICAgdmlydHVh bCBpbnQgZXh0cmFQb3B1cE1lbnVJdGVtV2lkdGgoIGJvb2wgY2hlY2thYmxlLCBpbnQgbWF4cG13 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNZW51SXRlbSogbWksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUZvbnRNZXRyaWNzJiBmbSApID0gMDsKICAg IHZpcnR1YWwgaW50IHBvcHVwU3VibWVudUluZGljYXRvcldpZHRoKAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IFFGb250TWV0cmljcyYgZm0gKSA9IDA7CiAgICB2aXJ0dWFs IGludCBwb3B1cE1lbnVJdGVtSGVpZ2h0KCBib29sIGNoZWNrYWJsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRTWVudUl0ZW0qIG1pLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFFGb250TWV0cmljcyYgZm0gKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJh d1BvcHVwTWVudUl0ZW0oIFFQYWludGVyKiBwLCBib29sIGNoZWNrYWJsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heHBtdywgaW50IHRhYiwgUU1lbnVJdGVtKiBt aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhbGV0dGUmIHBh bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3QsIGJvb2wgZW5h YmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBp bnQgdywgaW50IGgpID0gMDsKICAgIHZvaWQgZHJhd01lbnVCYXJJdGVtKCBRUGFpbnRlciogcCwg aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFNZW51SXRlbSogbWksIFFDb2xvckdyb3VwJiBnLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGVuYWJsZWQsIGJvb2wgYWN0aXZlICk7CgoKICAgIFFTaXpl IHNjcm9sbEJhckV4dGVudCgpOwogICAgaW50IGJ1dHRvbkRlZmF1bHRJbmRpY2F0b3JXaWR0aCgp IGNvbnN0OwogICAgaW50IGJ1dHRvbk1hcmdpbigpIGNvbnN0OwogICAgaW50IHRvb2xCYXJIYW5k bGVFeHRlbnQoKSBjb25zdDsKICAgIGludCB0b29sQmFySGFuZGxlRXh0ZW5kKCkgY29uc3Q7CiAg ICBpbnQgc2xpZGVyVGhpY2tuZXNzKCkgY29uc3QgOwogICAgdm9pZCBkcmF3VG9vbEJhckhhbmRs ZSggUVBhaW50ZXIgKnAsIGNvbnN0IFFSZWN0ICZyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBoaWdobGlnaHQsIGNvbnN0IFFDb2xvckdyb3VwICZjZywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgZHJhd0JvcmRlciA9IEZBTFNFICk7Cgpwcm90ZWN0ZWQ6CiAgICB2 b2lkIHNldFNjcm9sbEJhckV4dGVudCggaW50IHcsIGludCBoPS0xICk7CiAgICB2b2lkIHNldEJ1 dHRvbkRlZmF1bHRJbmRpY2F0b3JXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0QnV0dG9uTWFy Z2luKCBpbnQgdyApOwogICAgdm9pZCBzZXRTbGlkZXJUaGlja25lc3MoaW50IHQpOwoKCnByaXZh dGU6CgogICAgUVN0eWxlKCBjb25zdCBRU3R5bGUgJiApOwogICAgUVN0eWxlJiBvcGVyYXRvcj0o IGNvbnN0IFFTdHlsZSAmICk7Cgp9OwojIDUxICJrZXJuZWwvcXdpZGdldC5oIiAyCiMgMSAia2Vy bmVsL3FzaXplcG9saWN5LmgiIDEKIyA0NSAia2VybmVsL3FzaXplcG9saWN5LmgiCmNsYXNzIFFT aXplUG9saWN5CnsKcHJpdmF0ZToKICAgIGVudW0geyBIU2l6ZSA9IDYsIEhNYXNrID0gMHgzZiwg Vk1hc2sgPSBITWFzayA8PCBIU2l6ZSwKICAgICAgICAgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9 IDIsIE1heVNocmluayA9IDQgfTsKcHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0g MCwKICAgICAgICAgICAgICAgICAgICBNaW5pbXVtID0gTWF5R3JvdywKICAgICAgICAgICAgICAg ICAgICBNYXhpbXVtID0gTWF5U2hyaW5rLAogICAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCA9 IE1heUdyb3d8TWF5U2hyaW5rICwKICAgICAgICAgICAgICAgICAgICBNaW5pbXVtRXhwYW5kaW5n ID0gTWluaW11bXxFeHBNYXNrLAogICAgICAgICAgICAgICAgICAgIEV4cGFuZGluZyA9IE1pbmlt dW1FeHBhbmRpbmd8TWF5U2hyaW5rIH07CgogICAgZW51bSBFeHBhbmREYXRhIHsgTm9EaXJlY3Rp b24gPSAwLAogICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbCA9IDEsCiAgICAgICAgICAg ICAgICAgICAgICBWZXJ0aWNhbCA9IDIsCiAgICAgICAgICAgICAgICAgICAgICBCb3RoRGlyZWN0 aW9ucyA9IEhvcml6b250YWwgfCBWZXJ0aWNhbCB9OwoKICAgIFFTaXplUG9saWN5KCkgeyBkYXRh ID0gMDsgfQoKICAgIFFTaXplUG9saWN5KCBTaXplVHlwZSBob3IsIFNpemVUeXBlIHZlciwgYm9v bCBoZncgPSBGQUxTRSApOwoKICAgIFNpemVUeXBlIGhvckRhdGEoKSBjb25zdCB7IHJldHVybiAo U2l6ZVR5cGUpKCBkYXRhICYgSE1hc2sgKTsgfQogICAgU2l6ZVR5cGUgdmVyRGF0YSgpIGNvbnN0 IHsgcmV0dXJuIChTaXplVHlwZSkoKCBkYXRhICYgVk1hc2sgKSA+PiBIU2l6ZSk7IH0KCiAgICBi b29sIG1heVNocmlua0hvcml6b250YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1h eVNocmluazsgfQogICAgYm9vbCBtYXlTaHJpbmtWZXJ0aWNhbGx5KCkgY29uc3QgeyByZXR1cm4g dmVyRGF0YSgpICYgTWF5U2hyaW5rOyB9CiAgICBib29sIG1heUdyb3dIb3Jpem9udGFsbHkoKSBj b25zdCB7IHJldHVybiBob3JEYXRhKCkgJiBNYXlHcm93OyB9CiAgICBib29sIG1heUdyb3dWZXJ0 aWNhbGx5KCkgY29uc3QgeyByZXR1cm4gdmVyRGF0YSgpICYgTWF5R3JvdzsgfQoKICAgIEV4cGFu ZERhdGEgZXhwYW5kaW5nKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKEV4cGFuZERhdGEp KCAoaW50KSh2ZXJEYXRhKCkmRXhwTWFzayA/IFZlcnRpY2FsIDogMCkrCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGludCkoaG9yRGF0YSgpJkV4cE1hc2sgPyBIb3Jpem9udGFsIDogMCkg KTsKICAgIH0KCiAgICB2b2lkIHNldEhvckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoZGF0 YSAmIH5ITWFzaykgfCBkOyB9CiAgICB2b2lkIHNldFZlckRhdGEoIFNpemVUeXBlIGQgKSB7IGRh dGEgPSAoZGF0YSAmIH4oSE1hc2s8PEhTaXplKSkgfAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGQ8PEhTaXplKTsgfQoKICAgIHZvaWQgc2V0SGVpZ2h0Rm9yV2lk dGgoIGJvb2wgYiApIHsgZGF0YSA9IGIgPyAoIGRhdGEgfCAoIDEgPDwgMipIU2l6ZSApICkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBkYXRhICYgfigg MSA8PCAyKkhTaXplICkgKTsgfQogICAgYm9vbCBoYXNIZWlnaHRGb3JXaWR0aCgpIGNvbnN0IHsg cmV0dXJuIGRhdGEgJiAoIDEgPDwgMipIU2l6ZSApOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBj b25zdCBRU2l6ZVBvbGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gcy5kYXRhOyB9CiAg ICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplUG9saWN5JiBzICkgY29uc3QgeyByZXR1cm4g ZGF0YSAhPSBzLmRhdGE7IH0KCnByaXZhdGU6CiAgICBRU2l6ZVBvbGljeSggaW50IGkgKTogZGF0 YSggaSApIHt9CgogICAgUV9VSU5UMTYgZGF0YTsKfTsKCgppbmxpbmUgUVNpemVQb2xpY3k6OlFT aXplUG9saWN5KCBTaXplVHlwZSBob3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgKQogICAgICAg IDogZGF0YSggaG9yIHwgKHZlcjw8SFNpemUpIHwgKGhmdyA/ICgxPDwyKkhTaXplKSA6IDApICkg e30KIyA1MiAia2VybmVsL3F3aWRnZXQuaCIgMgoKCmNsYXNzIFFMYXlvdXQ7CnN0cnVjdCBRV0V4 dHJhOwpzdHJ1Y3QgUVRMV0V4dHJhOwpjbGFzcyBRRm9jdXNEYXRhOwpjbGFzcyBRU3R5bGU7CmNs YXNzIFFXU1JlZ2lvbk1hbmFnZXI7CgpjbGFzcyBRV2lkZ2V0IDogcHVibGljIFFPYmplY3QsIHB1 YmxpYyBRUGFpbnREZXZpY2UKewogICAgcHVibGljOiBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgp IGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSBjb25zdCBjaGFyICpjbGFzc05h bWUoKSBjb25zdDsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IHN0YXRp YyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhcios IGNvbnN0IGNoYXIqKTsgcHJvdGVjdGVkOiB2b2lkIGluaXRNZXRhT2JqZWN0KCk7IHByaXZhdGU6 IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog ICAKCiAgIAogICAKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIFFXaWRnZXQo IFFXaWRnZXQgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAsIFdGbGFncyBmPTAgKTsKICAg IH5RV2lkZ2V0KCk7CgogICAgV0lkIHdpbklkKCkgY29uc3Q7CiAgICB2b2lkIHNldE5hbWUoIGNv bnN0IGNoYXIgKm5hbWUgKTsKCgoKICAgIFFTdHlsZSAmc3R5bGUoKSBjb25zdDsKICAgIHZvaWQg c2V0U3R5bGUoIFFTdHlsZSAqICk7CgoKCiAgICBib29sIGlzVG9wTGV2ZWwoKSBjb25zdDsKICAg IGJvb2wgaXNNb2RhbCgpIGNvbnN0OwogICAgYm9vbCBpc1BvcHVwKCkgY29uc3Q7CiAgICBib29s IGlzRGVza3RvcCgpIGNvbnN0OwoKICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICBib29s IGlzRW5hYmxlZFRvKFFXaWRnZXQqKSBjb25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG9UTFcoKSBj b25zdDsKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAg dm9pZCBzZXREaXNhYmxlZCggYm9vbCApOwoKCgpwdWJsaWM6CiAgICBRUmVjdCBmcmFtZUdlb21l dHJ5KCkgY29uc3Q7CiAgICBjb25zdCBRUmVjdCAmZ2VvbWV0cnkoKSBjb25zdDsKICAgIGludCB4 KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0OwogICAgUVBvaW50IHBvcygpIGNvbnN0OwogICAg UVNpemUgZnJhbWVTaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQg d2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIFFSZWN0IHJlY3QoKSBj b25zdDsKICAgIFFSZWN0IGNoaWxkcmVuUmVjdCgpIGNvbnN0OwogICAgUVJlZ2lvbiBjaGlsZHJl blJlZ2lvbigpIGNvbnN0OwoKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6 ZSBtYXhpbXVtU2l6ZSgpIGNvbnN0OwogICAgaW50IG1pbmltdW1XaWR0aCgpIGNvbnN0OwogICAg aW50IG1pbmltdW1IZWlnaHQoKSBjb25zdDsKICAgIGludCBtYXhpbXVtV2lkdGgoKSBjb25zdDsK ICAgIGludCBtYXhpbXVtSGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldE1pbmltdW1TaXplKCBj b25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53 LCBpbnQgbWluaCApOwogICAgdm9pZCBzZXRNYXhpbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwog ICAgdmlydHVhbCB2b2lkIHNldE1heGltdW1TaXplKCBpbnQgbWF4dywgaW50IG1heGggKTsKICAg IHZvaWQgc2V0TWluaW11bVdpZHRoKCBpbnQgbWludyApOwogICAgdm9pZCBzZXRNaW5pbXVtSGVp Z2h0KCBpbnQgbWluaCApOwogICAgdm9pZCBzZXRNYXhpbXVtV2lkdGgoIGludCBtYXh3ICk7CiAg ICB2b2lkIHNldE1heGltdW1IZWlnaHQoIGludCBtYXhoICk7CgogICAgUVNpemUgc2l6ZUluY3Jl bWVudCgpIGNvbnN0OwogICAgdm9pZCBzZXRTaXplSW5jcmVtZW50KCBjb25zdCBRU2l6ZSAmICk7 CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUluY3JlbWVudCggaW50IHcsIGludCBoICk7CiAgICBR U2l6ZSBiYXNlU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUg JiApOwogICAgdm9pZCBzZXRCYXNlU2l6ZSggaW50IGJhc2V3LCBpbnQgYmFzZWggKTsKCiAgICB2 b2lkIHNldEZpeGVkU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRGaXhlZFNpemUo IGludCB3LCBpbnQgaCApOwogICAgdm9pZCBzZXRGaXhlZFdpZHRoKCBpbnQgdyApOwogICAgdm9p ZCBzZXRGaXhlZEhlaWdodCggaW50IGggKTsKCgoKICAgIFFQb2ludCBtYXBUb0dsb2JhbCggY29u c3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tR2xvYmFsKCBjb25zdCBRUG9p bnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcFRvUGFyZW50KCBjb25zdCBRUG9pbnQgJiApIGNv bnN0OwogICAgUVBvaW50IG1hcEZyb21QYXJlbnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAg ICBRUG9pbnQgbWFwVG8oIFFXaWRnZXQgKiwgY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQ b2ludCBtYXBGcm9tKCBRV2lkZ2V0ICosIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CgogICAgUVdp ZGdldCAqdG9wTGV2ZWxXaWRnZXQoKSBjb25zdDsKCgoKICAgIGVudW0gQmFja2dyb3VuZE1vZGUg eyBGaXhlZENvbG9yLCBGaXhlZFBpeG1hcCwgTm9CYWNrZ3JvdW5kLAogICAgICAgICAgICAgICAg ICAgICAgICAgIFBhbGV0dGVGb3JlZ3JvdW5kLCBQYWxldHRlQnV0dG9uLCBQYWxldHRlTGlnaHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZU1pZGxpZ2h0LCBQYWxldHRlRGFyaywg UGFsZXR0ZU1pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQYWxldHRlVGV4dCwgUGFsZXR0 ZUJyaWdodFRleHQsIFBhbGV0dGVCYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBhbGV0 dGVCYWNrZ3JvdW5kLCBQYWxldHRlU2hhZG93LCBQYWxldHRlSGlnaGxpZ2h0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIFBhbGV0dGVIaWdobGlnaHRlZFRleHQsIFBhbGV0dGVCdXR0b25UZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIFgxMVBhcmVudFJlbGF0aXZlIH07CgogICAgQmFj a2dyb3VuZE1vZGUgYmFja2dyb3VuZE1vZGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRC YWNrZ3JvdW5kTW9kZSggQmFja2dyb3VuZE1vZGUgKTsKCiAgICBjb25zdCBRQ29sb3IgJiBiYWNr Z3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIGNvbnN0IFFDb2xvciAmIGZvcmVncm91bmRDb2xvcigp IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9y ICYgKTsKCiAgICBjb25zdCBRUGl4bWFwICogYmFja2dyb3VuZFBpeG1hcCgpIGNvbnN0OwogICAg dmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKCiAg ICBjb25zdCBRQ29sb3JHcm91cCAmIGNvbG9yR3JvdXAoKSBjb25zdDsKICAgIGNvbnN0IFFQYWxl dHRlICYgcGFsZXR0ZSgpIGNvbnN0OwogICAgYm9vbCBvd25QYWxldHRlKCkgY29uc3Q7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICAgdm9pZCB1bnNl dFBhbGV0dGUoKTsKCiAgICBRRm9udCBmb250KCkgY29uc3Q7CiAgICBib29sIG93bkZvbnQoKSBj b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmICk7CiAgICB2b2lk IHVuc2V0Rm9udCgpOwogICAgUUZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICBR Rm9udEluZm8gZm9udEluZm8oKSBjb25zdDsKCiAgICBlbnVtIFByb3BhZ2F0aW9uTW9kZSB7IE5v Q2hpbGRyZW4sIEFsbENoaWxkcmVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1lRm9u dCwgU2FtZVBhbGV0dGUgPSBTYW1lRm9udCB9OwoKICAgIFByb3BhZ2F0aW9uTW9kZSBmb250UHJv cGFnYXRpb24oKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRGb250UHJvcGFnYXRpb24oIFBy b3BhZ2F0aW9uTW9kZSApOwoKICAgIFByb3BhZ2F0aW9uTW9kZSBwYWxldHRlUHJvcGFnYXRpb24o KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlUHJvcGFnYXRpb24oIFByb3BhZ2F0 aW9uTW9kZSApOwoKICAgIGNvbnN0IFFDdXJzb3IgJmN1cnNvcigpIGNvbnN0OwogICAgYm9vbCBv d25DdXJzb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoIGNvbnN0IFFDdXJz b3IgJiApOwogICAgdmlydHVhbCB2b2lkIHVuc2V0Q3Vyc29yKCk7CgogICAgUVN0cmluZyBjYXB0 aW9uKCkgY29uc3Q7CiAgICBjb25zdCBRUGl4bWFwICppY29uKCkgY29uc3Q7CiAgICBRU3RyaW5n IGljb25UZXh0KCkgY29uc3Q7CiAgICBib29sIGhhc01vdXNlVHJhY2tpbmcoKSBjb25zdDsKCiAg ICB2aXJ0dWFsIHZvaWQgc2V0TWFzayggY29uc3QgUUJpdG1hcCAmICk7CiAgICB2aXJ0dWFsIHZv aWQgc2V0TWFzayggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lkIGNsZWFyTWFzaygpOwoKcHVi bGljIDoKICAgIHZpcnR1YWwgdm9pZCBzZXRDYXB0aW9uKCBjb25zdCBRU3RyaW5nICYpOwogICAg dmlydHVhbCB2b2lkIHNldEljb24oIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdmlydHVhbCB2b2lk IHNldEljb25UZXh0KCBjb25zdCBRU3RyaW5nICYpOwogICAgdmlydHVhbCB2b2lkIHNldE1vdXNl VHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsK ICAgIHZvaWQgY2xlYXJGb2N1cygpOwoKcHVibGljOgogICAgZW51bSBGb2N1c1BvbGljeSB7CiAg ICAgICAgTm9Gb2N1cyA9IDAsCiAgICAgICAgVGFiRm9jdXMgPSAweDEsCiAgICAgICAgQ2xpY2tG b2N1cyA9IDB4MiwKICAgICAgICBTdHJvbmdGb2N1cyA9IDB4MywKICAgICAgICBXaGVlbEZvY3Vz ID0gMHg3CiAgICB9OwoKICAgIGJvb2wgaXNBY3RpdmVXaW5kb3coKSBjb25zdDsKICAgIHZpcnR1 YWwgdm9pZCBzZXRBY3RpdmVXaW5kb3coKTsKICAgIGJvb2wgaXNGb2N1c0VuYWJsZWQoKSBjb25z dDsKCiAgICBGb2N1c1BvbGljeSBmb2N1c1BvbGljeSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk IHNldEZvY3VzUG9saWN5KCBGb2N1c1BvbGljeSApOwogICAgYm9vbCBoYXNGb2N1cygpIGNvbnN0 OwogICAgc3RhdGljIHZvaWQgc2V0VGFiT3JkZXIoIFFXaWRnZXQgKiwgUVdpZGdldCAqICk7CiAg ICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQcm94eSggUVdpZGdldCAqICk7CiAgICBRV2lkZ2V0ICog Zm9jdXNQcm94eSgpIGNvbnN0OwoKCgogICAgdm9pZCBncmFiTW91c2UoKTsKCiAgICB2b2lkIGdy YWJNb3VzZSggY29uc3QgUUN1cnNvciAmICk7CgogICAgdm9pZCByZWxlYXNlTW91c2UoKTsKICAg IHZvaWQgZ3JhYktleWJvYXJkKCk7CiAgICB2b2lkIHJlbGVhc2VLZXlib2FyZCgpOwogICAgc3Rh dGljIFFXaWRnZXQgKiBtb3VzZUdyYWJiZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICoga2V5Ym9h cmRHcmFiYmVyKCk7CgoKCiAgICBib29sIGlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdDsKCgoKCnB1 YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBkYXRlc0VuYWJsZWQoIGJvb2wgZW5hYmxlICk7 CiAgICB2b2lkIHVwZGF0ZSgpOwogICAgdm9pZCB1cGRhdGUoIGludCB4LCBpbnQgeSwgaW50IHcs IGludCBoICk7CiAgICB2b2lkIHVwZGF0ZSggY29uc3QgUVJlY3QmICk7CiAgICB2b2lkIHJlcGFp bnQoKTsKICAgIHZvaWQgcmVwYWludCggYm9vbCBlcmFzZSApOwogICAgdm9pZCByZXBhaW50KCBp bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBlcmFzZT1UUlVFICk7CiAgICB2b2lkIHJl cGFpbnQoIGNvbnN0IFFSZWN0ICYsIGJvb2wgZXJhc2U9VFJVRSApOwogICAgdm9pZCByZXBhaW50 KCBjb25zdCBRUmVnaW9uICYsIGJvb2wgZXJhc2U9VFJVRSApOwoKCgogICAgdmlydHVhbCB2b2lk IHNob3coKTsKICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CgogICAgdm9pZCBpY29uaWZ5KCkgeyBz aG93TWluaW1pemVkKCk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgc2hvd01pbmltaXplZCgpOwogICAg dmlydHVhbCB2b2lkIHNob3dNYXhpbWl6ZWQoKTsKICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsK ICAgIHZpcnR1YWwgdm9pZCBzaG93Tm9ybWFsKCk7CiAgICB2aXJ0dWFsIHZvaWQgcG9saXNoKCk7 CiAgICB2b2lkIGNvbnN0UG9saXNoKCkgY29uc3Q7CiAgICBib29sIGNsb3NlKCk7CgogICAgdm9p ZCByYWlzZSgpOwogICAgdm9pZCBsb3dlcigpOwogICAgdm9pZCBzdGFja1VuZGVyKCBRV2lkZ2V0 KiApOwogICAgdmlydHVhbCB2b2lkIG1vdmUoIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBtb3Zl KCBjb25zdCBRUG9pbnQgJiApOwogICAgdmlydHVhbCB2b2lkIHJlc2l6ZSggaW50IHcsIGludCBo ICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNl dEdlb21ldHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwogICAgdmlydHVhbCB2b2lk IHNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmICk7CgpwdWJsaWM6CiAgICB2aXJ0dWFsIGJvb2wg Y2xvc2UoIGJvb2wgYWxzb0RlbGV0ZSApOwogICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKICAg IGJvb2wgaXNWaXNpYmxlVG8oUVdpZGdldCopIGNvbnN0OwogICAgYm9vbCBpc1Zpc2libGVUb1RM VygpIGNvbnN0OwogICAgUVJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdDsKICAgIGJvb2wgaXNIaWRk ZW4oKSBjb25zdDsKICAgIGJvb2wgaXNNaW5pbWl6ZWQoKSBjb25zdDsKICAgIGJvb2wgaXNNYXhp bWl6ZWQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CiAgICB2 aXJ0dWFsIFFTaXplIG1pbmltdW1TaXplSGludCgpIGNvbnN0OwogICAgdmlydHVhbCBRU2l6ZVBv bGljeSBzaXplUG9saWN5KCkgY29uc3Q7CiAgICB2b2lkIHNldFNpemVQb2xpY3koIFFTaXplUG9s aWN5ICk7CiAgICB2aXJ0dWFsIGludCBoZWlnaHRGb3JXaWR0aChpbnQpIGNvbnN0OwoKICAgIHZp cnR1YWwgdm9pZCBhZGp1c3RTaXplKCk7CgogICAgUUxheW91dCAqIGxheW91dCgpIGNvbnN0IHsg cmV0dXJuIGxheV9vdXQ7IH0KCiAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CiAgICB2aXJ0dWFs IHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdzLCBjb25zdCBRUG9pbnQgJiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvd0l0PUZBTFNFICk7CiAg ICB2b2lkIHJlcGFyZW50KCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFQb2ludCAmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKTsKCiAgICB2b2lk IHJlY3JlYXRlKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncyBmLCBjb25zdCBRUG9pbnQgJiBwLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKQogICAg eyByZXBhcmVudChwYXJlbnQsZixwLHNob3dJdCk7IH0KCgogICAgdm9pZCBlcmFzZSgpOwogICAg dm9pZCBlcmFzZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZXJhc2Uo IGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZXJhc2UoIGNvbnN0IFFSZWdpb24gJiApOwogICAg dm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5ICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4LCBp bnQgZHksIGNvbnN0IFFSZWN0JiApOwoKICAgIHZvaWQgZHJhd1RleHQoIGludCB4LCBpbnQgeSwg Y29uc3QgUVN0cmluZyAmKTsKICAgIHZvaWQgZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBjb25z dCBRU3RyaW5nICYpOwoKCgogICAgUVdpZGdldCAqIGZvY3VzV2lkZ2V0KCkgY29uc3Q7CiAgICBR UmVjdCBtaWNyb0ZvY3VzSGludCgpIGNvbnN0OwoKCgogICAgYm9vbCBhY2NlcHREcm9wcygpIGNv bnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjY2VwdERyb3BzKCBib29sIG9uICk7CgoKCiAgICB2 aXJ0dWFsIHZvaWQgc2V0QXV0b01hc2soYm9vbCk7CiAgICBib29sIGF1dG9NYXNrKCkgY29uc3Q7 CgogICAgZW51bSBCYWNrZ3JvdW5kT3JpZ2luIHsgV2lkZ2V0T3JpZ2luLCBQYXJlbnRPcmlnaW4g fTsKCiAgICB2b2lkIHNldEJhY2tncm91bmRPcmlnaW4oIEJhY2tncm91bmRPcmlnaW4gKTsKICAg IEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9yaWdpbigpIGNvbnN0OwoKCgogICAgdmlydHVh bCBib29sIGN1c3RvbVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIFFXaWRnZXQgKiBwYXJlbnRXaWRn ZXQoKSBjb25zdDsKICAgIGJvb2wgdGVzdFdTdGF0ZSggdWludCBuICkgY29uc3Q7CiAgICBib29s IHRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3Q7CiAgICBzdGF0aWMgUVdpZGdldCAqIGZpbmQo IFdJZCApOwogICAgc3RhdGljIFFXaWRnZXRNYXBwZXIgKndtYXBwZXIoKTsKCgoKCgpwcm90ZWN0 ZWQ6CgogICAgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBtb3VzZVBy ZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBtb3VzZVJlbGVhc2VF dmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tF dmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZUV2ZW50KCBR TW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQg KiApOwogICAgdmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7CiAgICB2 aXJ0dWFsIHZvaWQga2V5UmVsZWFzZUV2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdmlydHVhbCB2 b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGZvY3Vz T3V0RXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBlbnRlckV2ZW50KCBR RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGxlYXZlRXZlbnQoIFFFdmVudCAqICk7CiAgICB2 aXJ0dWFsIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lk IG1vdmVFdmVudCggUU1vdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplRXZlbnQo IFFSZXNpemVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY2xvc2VFdmVudCggUUNsb3NlRXZl bnQgKiApOwoKCiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VudGVyRXZlbnQoIFFEcmFnRW50ZXJFdmVu dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiAp OwogICAgdmlydHVhbCB2b2lkIGRyYWdMZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwog ICAgdmlydHVhbCB2b2lkIGRyb3BFdmVudCggUURyb3BFdmVudCAqICk7CgoKICAgIHZpcnR1YWwg dm9pZCBzaG93RXZlbnQoIFFTaG93RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGhpZGVFdmVu dCggUUhpZGVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY3VzdG9tRXZlbnQoIFFDdXN0b21F dmVudCAqICk7CiMgNDY0ICJrZXJuZWwvcXdpZGdldC5oIgogICAgdmlydHVhbCBib29sIHgxMUV2 ZW50KCBYRXZlbnQgKiApOwoKCgoKCgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZU1hc2soKTsKCgoK cHJvdGVjdGVkOgoKICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZSggUVN0eWxlJiApOwoKICAg IHZpcnR1YWwgdm9pZCBlbmFibGVkQ2hhbmdlKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgYmFj a2dyb3VuZENvbG9yQ2hhbmdlKCBjb25zdCBRQ29sb3IgJiApOwogICAgdmlydHVhbCB2b2lkIGJh Y2tncm91bmRQaXhtYXBDaGFuZ2UoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIHZpcnR1YWwgdm9p ZCBwYWxldHRlQ2hhbmdlKCBjb25zdCBRUGFsZXR0ZSAmICk7CgogICAgdmlydHVhbCB2b2lkIGZv bnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKCiAgICBpbnQgbWV0cmljKCBpbnQgKSBjb25zdDsK CiAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlKCBXSWQgPSAwLCBib29sIGluaXRpYWxpemVXaW5kb3cg PSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95T2xkV2luZG93ID0g VFJVRSApOwogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koIGJvb2wgZGVzdHJveVdpbmRvdyA9IFRS VUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXN0cm95U3ViV2luZG93cyA9IFRS VUUgKTsKICAgIHVpbnQgZ2V0V1N0YXRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V1N0 YXRlKCB1aW50ICk7CiAgICB2b2lkIGNsZWFyV1N0YXRlKCB1aW50IG4gKTsKICAgIFdGbGFncyBn ZXRXRmxhZ3MoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXRmxhZ3MoIFdGbGFncyApOwog ICAgdm9pZCBjbGVhcldGbGFncyggV0ZsYWdzIG4gKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0RlJl Y3QoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRDUmVjdCggY29uc3QgUVJl Y3QgJiApOwoKICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2Q2hpbGQoIGJvb2wgbmV4dCAp OwoKICAgIFFXRXh0cmEgKmV4dHJhRGF0YSgpOwogICAgUVRMV0V4dHJhICp0b3BEYXRhKCk7CiAg ICBRRm9jdXNEYXRhICpmb2N1c0RhdGEoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0S2V5Q29tcHJl c3Npb24oYm9vbCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWljcm9Gb2N1c0hpbnQoaW50IHgsIGlu dCB5LCBpbnQgdywgaW50IGgsIGJvb2wgdGV4dD1UUlVFKTsKCnByaXZhdGUgOgogICAgdm9pZCBm b2N1c1Byb3h5RGVzdHJveWVkKCk7Cgpwcml2YXRlOgogICAgdm9pZCBzZXRGb250U3lzKCk7Cgog ICAgdm9pZCBzZXRMYXlvdXQoIFFMYXlvdXQgKmwgKTsKCiAgICB2b2lkIHNldFdpbklkKCBXSWQg KTsKICAgIHZvaWQgc2hvd1dpbmRvdygpOwogICAgdm9pZCBoaWRlV2luZG93KCk7CiAgICB2b2lk IHNlbmRTaG93RXZlbnRzVG9DaGlsZHJlbiggYm9vbCBzcG9udGFuZW91cyApOwogICAgdm9pZCBz ZW5kSGlkZUV2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsKICAgIHZvaWQgY3Jl YXRlVExFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVFeHRyYSgpOwogICAgdm9pZCBkZWxldGVFeHRy YSgpOwogICAgdm9pZCBjcmVhdGVTeXNFeHRyYSgpOwogICAgdm9pZCBkZWxldGVTeXNFeHRyYSgp OwogICAgdm9pZCBjcmVhdGVUTFN5c0V4dHJhKCk7CiAgICB2b2lkIGRlbGV0ZVRMU3lzRXh0cmEo KTsKICAgIHZvaWQgZGVhY3RpdmF0ZVdpZGdldENsZWFudXAoKTsKICAgIHZvaWQgaW50ZXJuYWxT ZXRHZW9tZXRyeSggaW50LCBpbnQsIGludCwgaW50LCBib29sICk7CiAgICB2b2lkIHJlcGFyZW50 Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAgIFFGb2N1c0RhdGEgKmZvY3VzRGF0YSggYm9v bCBjcmVhdGUgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZEZyb21Nb2RlKCk7CiAgICB2b2lkIHNl dEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QmFj a2dyb3VuZFBpeG1hcERpcmVjdCggY29uc3QgUVBpeG1hcCAmICk7CiAgICB2b2lkIHNldEJhY2tn cm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9kZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5k RW1wdHkoKTsKCiAgICB2b2lkIHNldEJhY2tncm91bmRYMTFSZWxhdGl2ZSgpOwogICAgdm9pZCBj aGVja0NoaWxkcmVuRG5kKCk7CgoKICAgIFdJZCB3aW5pZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRl OwogICAgdWludCB3aWRnZXRfZmxhZ3M7CiAgICB1aW50IHByb3BhZ2F0ZV9mb250IDogMjsKICAg IHVpbnQgcHJvcGFnYXRlX3BhbGV0dGUgOiAyOwogICAgdWludCBmb2N1c19wb2xpY3kgOiA0Owog ICAgdWludCBvd25fZm9udCA6MTsKICAgIHVpbnQgb3duX3BhbGV0dGUgOjE7CiAgICB1aW50IHNp emVoaW50X2ZvcmNlZCA6MTsKICAgIHVpbnQgaXNfY2xvc2luZyA6MTsKICAgIHVpbnQgaW5fc2hv dyA6IDE7CiAgICB1aW50IGluX3Nob3dfbWF4aW1pemVkIDogMTsKICAgIFFQb2ludCBmcG9zOwog ICAgUVJlY3QgY3JlY3Q7CiAgICBRQ29sb3IgYmdfY29sOwoKICAgIFFQYWxldHRlIHBhbDsKCiAg ICBRRm9udCBmbnQ7CgogICAgUUxheW91dCAqbGF5X291dDsKCiAgICBRV0V4dHJhICpleHRyYTsK IyA1OTMgImtlcm5lbC9xd2lkZ2V0LmgiCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVNYXBwZXIoKTsK ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lNYXBwZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAq d0xpc3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqdGx3TGlzdCgpOwogICAgc3RhdGljIFFX aWRnZXRNYXBwZXIgKm1hcHBlcjsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBm cmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsK ICAgIGZyaWVuZCBjbGFzcyBRRm9udE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJbmZv OwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKCiAgICBmcmllbmQgY2xhc3MgUUxheW91dDsK CgoKcHJpdmF0ZToKCiAgICBRV2lkZ2V0KCBjb25zdCBRV2lkZ2V0ICYgKTsKICAgIFFXaWRnZXQg Jm9wZXJhdG9yPSggY29uc3QgUVdpZGdldCAmICk7CgoKcHVibGljOgoKICAgIHZvaWQgc2V0UGFs ZXR0ZSggY29uc3QgUVBhbGV0dGUgJiwgYm9vbCBpUmVhbGx5TWVhbkl0ICk7CgogICAgdm9pZCBz ZXRGb250KCBjb25zdCBRRm9udCAmLCBib29sIGlSZWFsbHlNZWFuSXQgKTsKfTsKCgppbmxpbmUg Ym9vbCBRV2lkZ2V0Ojp0ZXN0V1N0YXRlKCB1aW50IGYgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0 X3N0YXRlICYgZikgIT0gMDsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6dGVzdFdGbGFncyggV0Zs YWdzIGYgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0X2ZsYWdzICYgZikgIT0gMDsgfQoKCmlubGlu ZSBXSWQgUVdpZGdldDo6d2luSWQoKSBjb25zdAp7IHJldHVybiB3aW5pZDsgfQoKaW5saW5lIGJv b2wgUVdpZGdldDo6aXNUb3BMZXZlbCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVf VG9wTGV2ZWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc01vZGFsKCkgY29uc3QKeyByZXR1 cm4gdGVzdFdGbGFncyhXVHlwZV9Nb2RhbCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzUG9w dXAoKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdzKFdUeXBlX1BvcHVwKTsgfQoKaW5saW5lIGJv b2wgUVdpZGdldDo6aXNEZXNrdG9wKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9E ZXNrdG9wKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKeyByZXR1 cm4gIXRlc3RXU3RhdGUoV1N0YXRlX0Rpc2FibGVkKTsgfQoKaW5saW5lIGNvbnN0IFFSZWN0ICZR V2lkZ2V0OjpnZW9tZXRyeSgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0OyB9CgppbmxpbmUgaW50IFFX aWRnZXQ6OngoKSBjb25zdAp7IHJldHVybiBmcG9zLngoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0 Ojp5KCkgY29uc3QKeyByZXR1cm4gZnBvcy55KCk7IH0KCmlubGluZSBRUG9pbnQgUVdpZGdldDo6 cG9zKCkgY29uc3QKeyByZXR1cm4gZnBvczsgfQoKaW5saW5lIFFTaXplIFFXaWRnZXQ6OnNpemUo KSBjb25zdAp7IHJldHVybiBjcmVjdC5zaXplKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6d2lk dGgoKSBjb25zdAp7IHJldHVybiBjcmVjdC53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6 OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LmhlaWdodCgpOyB9CgppbmxpbmUgUVJlY3Qg UVdpZGdldDo6cmVjdCgpIGNvbnN0CnsgcmV0dXJuIFFSZWN0KDAsMCxjcmVjdC53aWR0aCgpLGNy ZWN0LmhlaWdodCgpKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0OjptaW5pbXVtV2lkdGgoKSBjb25z dAp7IHJldHVybiBtaW5pbXVtU2l6ZSgpLndpZHRoKCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6 bWluaW11bUhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIG1pbmltdW1TaXplKCkuaGVpZ2h0KCk7IH0K CmlubGluZSBpbnQgUVdpZGdldDo6bWF4aW11bVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWF4aW11 bVNpemUoKS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1IZWlnaHQoKSBj b25zdAp7IHJldHVybiBtYXhpbXVtU2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUgdm9pZCBRV2lk Z2V0OjpzZXRNaW5pbXVtU2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldE1pbmltdW1TaXplKHMu d2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0TWF4aW11bVNp emUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRNYXhpbXVtU2l6ZShzLndpZHRoKCkscy5oZWlnaHQo KSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFNpemVJbmNyZW1lbnQoIGNvbnN0IFFTaXpl ICZzICkKeyBzZXRTaXplSW5jcmVtZW50KHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5l IHZvaWQgUVdpZGdldDo6c2V0QmFzZVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRCYXNlU2l6 ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSBjb25zdCBRQ29sb3IgJlFXaWRnZXQ6 OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CnsgcmV0dXJuIGJnX2NvbDsgfQoKCmlubGluZSBjb25z dCBRUGFsZXR0ZSAmUVdpZGdldDo6cGFsZXR0ZSgpIGNvbnN0CnsgcmV0dXJuIHBhbDsgfQoKCmlu bGluZSBRRm9udCBRV2lkZ2V0Ojpmb250KCkgY29uc3QKeyByZXR1cm4gZm50OyB9CgppbmxpbmUg UUZvbnRNZXRyaWNzIFFXaWRnZXQ6OmZvbnRNZXRyaWNzKCkgY29uc3QKeyByZXR1cm4gUUZvbnRN ZXRyaWNzKGZvbnQoKSk7IH0KCmlubGluZSBRRm9udEluZm8gUVdpZGdldDo6Zm9udEluZm8oKSBj b25zdAp7IHJldHVybiBRRm9udEluZm8oZm9udCgpKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6 aGFzTW91c2VUcmFja2luZygpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX01vdXNl VHJhY2tpbmcpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0ZvY3VzRW5hYmxlZCgpIGNvbnN0 CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3kgIT0gTm9Gb2N1czsgfQoKaW5saW5l IFFXaWRnZXQ6OkZvY3VzUG9saWN5IFFXaWRnZXQ6OmZvY3VzUG9saWN5KCkgY29uc3QKeyByZXR1 cm4gKEZvY3VzUG9saWN5KWZvY3VzX3BvbGljeTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNV cGRhdGVzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9CbG9ja1Vw ZGF0ZXMpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojp1cGRhdGUoIGNvbnN0IFFSZWN0ICZyICkK eyB1cGRhdGUoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGlu ZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoKQp7IHJlcGFpbnQoIDAsIDAsIGNyZWN0LndpZHRoKCks IGNyZWN0LmhlaWdodCgpLCBUUlVFICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQo IGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdo dCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCBjb25zdCBRUmVj dCAmciwgYm9vbCBlcmFzZSApCnsgcmVwYWludCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIu aGVpZ2h0KCksIGVyYXNlICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCkKeyBlcmFz ZSggMCwgMCwgY3JlY3Qud2lkdGgoKSwgY3JlY3QuaGVpZ2h0KCkgKTsgfQoKaW5saW5lIHZvaWQg UVdpZGdldDo6ZXJhc2UoIGNvbnN0IFFSZWN0ICZyICkKeyBlcmFzZSggci54KCksIHIueSgpLCBy LndpZHRoKCksIHIuaGVpZ2h0KCkgKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6Y2xvc2UoKQp7 IHJldHVybiBjbG9zZSggRkFMU0UgKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNWaXNpYmxl KCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfVmlzaWJsZSk7IH0KCmlubGluZSBi b29sIFFXaWRnZXQ6OmlzSGlkZGVuKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVf Rm9yY2VIaWRlKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6bW92ZSggY29uc3QgUVBvaW50ICZw ICkKeyBtb3ZlKCBwLngoKSwgcC55KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6cmVzaXpl KCBjb25zdCBRU2l6ZSAmcyApCnsgcmVzaXplKCBzLndpZHRoKCksIHMuaGVpZ2h0KCkpOyB9Cgpp bmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRHZW9tZXRyeSggY29uc3QgUVJlY3QgJnIgKQp7IHNldEdl b21ldHJ5KCByLmxlZnQoKSwgci50b3AoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlu bGluZSB2b2lkIFFXaWRnZXQ6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAsIGNvbnN0IFFTdHJp bmcgJnMgKQp7IGRyYXdUZXh0KCBwLngoKSwgcC55KCksIHMgKTsgfQoKaW5saW5lIFFXaWRnZXQg KlFXaWRnZXQ6OnBhcmVudFdpZGdldCgpIGNvbnN0CnsgcmV0dXJuIChRV2lkZ2V0ICopUU9iamVj dDo6cGFyZW50KCk7IH0KCmlubGluZSBRV2lkZ2V0TWFwcGVyICpRV2lkZ2V0Ojp3bWFwcGVyKCkK eyByZXR1cm4gbWFwcGVyOyB9CgppbmxpbmUgdWludCBRV2lkZ2V0OjpnZXRXU3RhdGUoKSBjb25z dAp7IHJldHVybiB3aWRnZXRfc3RhdGU7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdTdGF0 ZSggdWludCBmICkKeyB3aWRnZXRfc3RhdGUgfD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6 Y2xlYXJXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0YXRlICY9IH5mOyB9CgppbmxpbmUgUXQ6 OldGbGFncyBRV2lkZ2V0OjpnZXRXRmxhZ3MoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfZmxhZ3M7 IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9m bGFncyB8PSBmOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpjbGVhcldGbGFncyggV0ZsYWdzIGYg KQp7IHdpZGdldF9mbGFncyAmPSB+ZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y29uc3RQb2xp c2goKSBjb25zdAp7CiAgICBpZiAoICF0ZXN0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hlZCkgKSB7CiAg ICAgICAgUVdpZGdldCogdGhhdCA9IChRV2lkZ2V0KikgdGhpczsKICAgICAgICB0aGF0LT5wb2xp c2goKTsKICAgICAgICB0aGF0LT5zZXRXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKTsKICAgIH0KfQoK aW5saW5lIGJvb2wgUVdpZGdldDo6b3duQ3Vyc29yKCkgY29uc3QKewogICAgcmV0dXJuIHRlc3RX U3RhdGUoIFdTdGF0ZV9Pd25DdXJzb3IgKTsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duRm9u dCgpIGNvbnN0CnsKICAgIHJldHVybiBvd25fZm9udDsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6 b3duUGFsZXR0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBvd25fcGFsZXR0ZTsKfQoKCgoKCgpjbGFz cyBRRm9jdXNEYXRhOwpjbGFzcyBRV1NNYW5hZ2VyOwoKCgoKc3RydWN0IFFUTFdFeHRyYSB7CiAg ICBRU3RyaW5nIGNhcHRpb247CiAgICBRU3RyaW5nIGljb25UZXh0OwogICAgUVBpeG1hcCAqaWNv bjsKICAgIFFGb2N1c0RhdGEgKmZvY3VzRGF0YTsKICAgIFFTaXplIGZzaXplOwogICAgc2hvcnQg aW5jdywgaW5jaDsKICAgIHVpbnQgaWNvbmljOiAxOwogICAgdWludCBmdWxsc2NyZWVuIDogMTsK ICAgIHVpbnQgc2hvd01vZGU6IDI7CiAgICBzaG9ydCBiYXNldywgYmFzZWg7CgogICAgV0lkIHBh cmVudFdpbklkOwogICAgdWludCBlbWJlZGRlZCA6IDE7CiAgICB1aW50IHJlc2VydmVkOiAyOwog ICAgdWludCBkbmQgOiAxOwogICAgdWludCB1c3BvcyA6IDE7CiAgICB1aW50IHVzc2l6ZSA6IDE7 CiAgICB2b2lkICp4aWM7CiMgODUwICJrZXJuZWwvcXdpZGdldC5oIgogICAgUVJlY3Qgbm9ybWFs R2VvbWV0cnk7Cn07CgoKCgoKCnN0cnVjdCBRV0V4dHJhIHsKICAgIFFfSU5UMTYgbWludywgbWlu aDsKICAgIFFfSU5UMTYgbWF4dywgbWF4aDsKICAgIFFQaXhtYXAgKmJnX3BpeDsKICAgIFFXaWRn ZXQgKmZvY3VzX3Byb3h5OwoKICAgIFFDdXJzb3IgKmN1cnM7CgogICAgUVRMV0V4dHJhICp0b3Bl eHRyYTsKCgoKCiAgICBXSWQgeERuZFByb3h5OwoKCgoKICAgIGNoYXIgYmdfbW9kZTsKCiAgICBR U3R5bGUqIHN0eWxlOwoKICAgIFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7CiAgICBRU2l6ZVBvbGlj eSBzaXplX3BvbGljeTsKICAgIHZvaWQgKiBwb3N0ZWRfZXZlbnRzOwoKICAgIHVpbnQgY2hpbGRy ZW5fdXNlX2RuZCA6IDE7Cgp9OwojIDE3ICJrZXJuZWwvbW9jX3F3aWRnZXQuY3BwIiAyCiMgMSAi L3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xbWV0YW9iamVjdC5oIiAx CiMgNDIgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcW1ldGFvYmpl Y3QuaCIKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3Fjb25u ZWN0aW9uLmgiIDEKIyA0MiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVk ZS9xY29ubmVjdGlvbi5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2lu Y2x1ZGUvcW9iamVjdC5oIiAxCiMgNDMgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4y L2luY2x1ZGUvcWNvbm5lY3Rpb24uaCIgMgoKCgp0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipRTWVt YmVyKSgpOwoKCmNsYXNzIFFDb25uZWN0aW9uCnsKcHVibGljOgogICAgUUNvbm5lY3Rpb24oIGNv bnN0IFFPYmplY3QgKiwgUU1lbWJlciwgY29uc3QgY2hhciAqbWVtYmVyTmFtZSApOwogICB+UUNv bm5lY3Rpb24oKSB7fQoKICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBvYmog IT0gMDsgfQoKICAgIFFPYmplY3QgKm9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG9iajsgfQogICAg UU1lbWJlciAqbWVtYmVyKCkgY29uc3QgeyByZXR1cm4gKFFNZW1iZXIqKSZtYnI7IH0KICAgIGNv bnN0IGNoYXIgKm1lbWJlck5hbWUoKSBjb25zdCB7IHJldHVybiBtYnJfbmFtZTsgfQogICAgaW50 IG51bUFyZ3MoKSBjb25zdCB7IHJldHVybiBuYXJnczsgfQoKcHJpdmF0ZToKICAgIFFPYmplY3Qg Km9iajsKICAgIFFNZW1iZXIgbWJyOwogICAgY29uc3QgY2hhciAqbWJyX25hbWU7CiAgICBpbnQg bmFyZ3M7Cgpwcml2YXRlOgoKICAgIFFDb25uZWN0aW9uKCBjb25zdCBRQ29ubmVjdGlvbiAmICk7 CiAgICBRQ29ubmVjdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQ29ubmVjdGlvbiAmICk7Cgp9Owoj IDQzICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FtZXRhb2JqZWN0 LmgiIDIKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FzdHJs aXN0LmgiIDEKIyA0MyAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9x c3RybGlzdC5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUv cWxpc3QuaCIgMQojIDQyICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRl L3FsaXN0LmgiCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9x Z2xpc3QuaCIgMQojIDQyICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRl L3FnbGlzdC5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUv cWNvbGxlY3Rpb24uaCIgMQojIDQ2ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9p bmNsdWRlL3Fjb2xsZWN0aW9uLmgiCmNsYXNzIFFHVmVjdG9yOwpjbGFzcyBRR0xpc3Q7CmNsYXNz IFFHRGljdDsKCgpjbGFzcyBRQ29sbGVjdGlvbgp7CnB1YmxpYzoKICAgIGJvb2wgYXV0b0RlbGV0 ZSgpIGNvbnN0IHsgcmV0dXJuIGRlbF9pdGVtOyB9CiAgICB2b2lkIHNldEF1dG9EZWxldGUoIGJv b2wgZW5hYmxlICkgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1YWwgdWludCBjb3Vu dCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKCiAgICB0eXBlZGVm IHZvaWQgKkl0ZW07Cgpwcm90ZWN0ZWQ6CiAgICBRQ29sbGVjdGlvbigpIHsgZGVsX2l0ZW0gPSBG QUxTRTsgfQogICAgUUNvbGxlY3Rpb24oY29uc3QgUUNvbGxlY3Rpb24gJikgeyBkZWxfaXRlbSA9 IEZBTFNFOyB9CiAgICB2aXJ0dWFsIH5RQ29sbGVjdGlvbigpIHt9CgogICAgYm9vbCBkZWxfaXRl bTsKCiAgICB2aXJ0dWFsIEl0ZW0gbmV3SXRlbSggSXRlbSApOwogICAgdmlydHVhbCB2b2lkIGRl bGV0ZUl0ZW0oIEl0ZW0gKTsKfTsKIyA0MyAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4z LjIvaW5jbHVkZS9xZ2xpc3QuaCIgMgoKCgoKCgoKY2xhc3MgUUxOb2RlCnsKZnJpZW5kIGNsYXNz IFFHTGlzdDsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpwdWJsaWM6CiAgICBRQ29sbGVj dGlvbjo6SXRlbSBnZXREYXRhKCkgeyByZXR1cm4gZGF0YTsgfQpwcml2YXRlOgogICAgUUNvbGxl Y3Rpb246Okl0ZW0gZGF0YTsKICAgIFFMTm9kZSAqcHJldjsKICAgIFFMTm9kZSAqbmV4dDsKICAg IFFMTm9kZSggUUNvbGxlY3Rpb246Okl0ZW0gZCApIHsgZGF0YSA9IGQ7IH0KfTsKCgoKCgoKY2xh c3MgUUdMaXN0IDogcHVibGljIFFDb2xsZWN0aW9uCnsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJh dG9yOwpmcmllbmQgY2xhc3MgUUdWZWN0b3I7CnB1YmxpYzoKICAgIHVpbnQgY291bnQoKSBjb25z dDsKCgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3Ry ZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgUUdMaXN0 KCk7CiAgICBRR0xpc3QoIGNvbnN0IFFHTGlzdCAmICk7CiAgICB2aXJ0dWFsIH5RR0xpc3QoKTsK CiAgICBRR0xpc3QgJm9wZXJhdG9yPSggY29uc3QgUUdMaXN0ICYgKTsKICAgIGJvb2wgb3BlcmF0 b3I9PSggY29uc3QgUUdMaXN0JiApIGNvbnN0OwoKICAgIHZvaWQgaW5Tb3J0KCBRQ29sbGVjdGlv bjo6SXRlbSApOwogICAgdm9pZCBhcHBlbmQoIFFDb2xsZWN0aW9uOjpJdGVtICk7CiAgICBib29s IGluc2VydEF0KCB1aW50IGluZGV4LCBRQ29sbGVjdGlvbjo6SXRlbSApOwogICAgdm9pZCByZWxp bmtOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCByZW1vdmVOb2RlKCBRTE5vZGUgKiApOwogICAg Ym9vbCByZW1vdmUoIFFDb2xsZWN0aW9uOjpJdGVtID0gMCApOwogICAgYm9vbCByZW1vdmVSZWYo IFFDb2xsZWN0aW9uOjpJdGVtID0gMCApOwogICAgYm9vbCByZW1vdmVGaXJzdCgpOwogICAgYm9v bCByZW1vdmVMYXN0KCk7CiAgICBib29sIHJlbW92ZUF0KCB1aW50IGluZGV4ICk7CiAgICBRQ29s bGVjdGlvbjo6SXRlbSB0YWtlTm9kZSggUUxOb2RlICogKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVt IHRha2UoKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VBdCggdWludCBpbmRleCApOwogICAg UUNvbGxlY3Rpb246Okl0ZW0gdGFrZUZpcnN0KCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtl TGFzdCgpOwoKICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGludCBmaW5k UmVmKCBRQ29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKICAgIGludCBmaW5kKCBRQ29s bGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUgKTsKCiAgICB1aW50IGNvbnRhaW5zUmVmKCBRQ29s bGVjdGlvbjo6SXRlbSApIGNvbnN0OwogICAgdWludCBjb250YWlucyggUUNvbGxlY3Rpb246Okl0 ZW0gKSBjb25zdDsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSBhdCggdWludCBpbmRleCApOwogICAg aW50IGF0KCkgY29uc3Q7CiAgICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7CgogICAgUUNv bGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CgogICAgUUNvbGxlY3Rpb246Okl0ZW0gY2ZpcnN0 KCkgY29uc3Q7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpIGNvbnN0OwogICAgUUNvbGxl Y3Rpb246Okl0ZW0gZmlyc3QoKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxhc3QoKTsKICAgIFFD b2xsZWN0aW9uOjpJdGVtIG5leHQoKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHByZXYoKTsKCiAg ICB2b2lkIHRvVmVjdG9yKCBRR1ZlY3RvciAqICkgY29uc3Q7CgogICAgdmlydHVhbCBpbnQgY29t cGFyZUl0ZW1zKCBRQ29sbGVjdGlvbjo6SXRlbSwgUUNvbGxlY3Rpb246Okl0ZW0gKTsKCgogICAg dmlydHVhbCBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246Okl0 ZW0gJiApOwogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYsIFFD b2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBwcmVwZW5kKCBRQ29s bGVjdGlvbjo6SXRlbSApOwoKICAgIHZvaWQgaGVhcFNvcnRQdXNoRG93biggUUNvbGxlY3Rpb246 Okl0ZW0qIGhlYXAsIGludCBmaXJzdCwgaW50IGxhc3QgKTsKCiAgICBRTE5vZGUgKmZpcnN0Tm9k ZTsKICAgIFFMTm9kZSAqbGFzdE5vZGU7CiAgICBRTE5vZGUgKmN1ck5vZGU7CiAgICBpbnQgY3Vy SW5kZXg7CiAgICB1aW50IG51bU5vZGVzOwogICAgUUdMaXN0ICppdGVyYXRvcnM7CgogICAgUUxO b2RlICpsb2NhdGUoIHVpbnQgKTsKICAgIFFMTm9kZSAqdW5saW5rKCk7Cn07CgoKaW5saW5lIHVp bnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5l IGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJzdCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVt b3ZlKCk7Cn0KCmlubGluZSBib29sIFFHTGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsK ICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewog ICAgcmV0dXJuIGN1ckluZGV4Owp9CgppbmxpbmUgUUNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0Ojph dCggdWludCBpbmRleCApCnsKICAgIFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAgIHJl dHVybiBuID8gbi0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVudE5v ZGUoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFDb2xsZWN0aW9uOjpJ dGVtIFFHTGlzdDo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5k YXRhIDogMDsKfQoKaW5saW5lIFFDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2ZpcnN0KCkgY29u c3QKewogICAgcmV0dXJuIGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7Cn0KCmlubGlu ZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewogICAgcmV0dXJuIGxh c3ROb2RlID8gbGFzdE5vZGUtPmRhdGEgOiAwOwp9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJh dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFHTGlzdCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8 PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgoKCgoKY2xhc3MgUUdMaXN0SXRl cmF0b3IKewpmcmllbmQgY2xhc3MgUUdMaXN0Owpwcm90ZWN0ZWQ6CiAgICBRR0xpc3RJdGVyYXRv ciggY29uc3QgUUdMaXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBRR0xpc3RJdGVy YXRvciAmICk7CiAgICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3RJdGVy YXRvciAmICk7CiAgIH5RR0xpc3RJdGVyYXRvcigpOwoKICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0 OwogICAgYm9vbCBhdExhc3QoKSBjb25zdDsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRvRmlyc3Qo KTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRvTGFzdCgpOwoKICAgIFFDb2xsZWN0aW9uOjpJdGVt IGdldCgpIGNvbnN0OwogICAgUUNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUUNv bGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrKygpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0 b3IrPSh1aW50KTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsKICAgIFFDb2xs ZWN0aW9uOjpJdGVtIG9wZXJhdG9yLT0odWludCk7Cgpwcm90ZWN0ZWQ6CiAgICBRR0xpc3QgKmxp c3Q7Cgpwcml2YXRlOgogICAgUUxOb2RlICpjdXJOb2RlOwp9OwoKCmlubGluZSBib29sIFFHTGlz dEl0ZXJhdG9yOjphdEZpcnN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+ Zmlyc3ROb2RlOwp9CgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCkgY29uc3QK ewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+bGFzdE5vZGU7Cn0KCmlubGluZSBRQ29sbGVj dGlvbjo6SXRlbSBRR0xpc3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5v ZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsKfQojIDQzICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9x dC0yLjMuMi9pbmNsdWRlL3FsaXN0LmgiIDIKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3Mg UUxpc3QgOiBwdWJsaWMgUUdMaXN0CnsKcHVibGljOgogICAgUUxpc3QoKSB7fQogICAgUUxpc3Qo IGNvbnN0IFFMaXN0PHR5cGU+ICZsICkgOiBRR0xpc3QobCkge30KICAgflFMaXN0KCkgeyBjbGVh cigpOyB9CiAgICBRTGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFMaXN0PHR5cGU+ICZsKQog ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUUxpc3Q8dHlwZT4mKVFHTGlzdDo6b3Bl cmF0b3I9KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFMaXN0PHR5cGU+ICZsaXN0 ICkgY29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0b3I9PSggbGlzdCApOyB9CiAgICB1 aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpOyB9CiAgICBib29sIGlz RW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBp bnNlcnQoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCl7IHJldHVybiBRR0xpc3Q6Omluc2VydEF0KGks KFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIGluU29ydCggY29uc3QgdHlwZSAqZCAp IHsgUUdMaXN0OjppblNvcnQoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIHByZXBl bmQoIGNvbnN0IHR5cGUgKmQgKSB7IFFHTGlzdDo6aW5zZXJ0QXQoMCwoUUNvbGxlY3Rpb246Okl0 ZW0pZCk7IH0KICAgIHZvaWQgYXBwZW5kKCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6OmFwcGVu ZCgoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlKCB1aW50IGkgKSB7IHJl dHVybiBRR0xpc3Q6OnJlbW92ZUF0KGkpOyB9CiAgICBib29sIHJlbW92ZSgpIHsgcmV0dXJuIFFH TGlzdDo6cmVtb3ZlKChRQ29sbGVjdGlvbjo6SXRlbSkwKTsgfQogICAgYm9vbCByZW1vdmUoIGNv bnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZSgoUUNvbGxlY3Rpb246Okl0ZW0p ZCk7IH0KICAgIGJvb2wgcmVtb3ZlUmVmKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0 OjpyZW1vdmVSZWYoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIHJlbW92ZU5vZGUo IFFMTm9kZSAqbiApIHsgUUdMaXN0OjpyZW1vdmVOb2RlKG4pOyB9CiAgICBib29sIHJlbW92ZUZp cnN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVGaXJzdCgpOyB9CiAgICBib29sIHJlbW92ZUxh c3QoKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUxhc3QoKTsgfQogICAgdHlwZSAqdGFrZSggdWlu dCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VBdChpKTsgfQogICAgdHlwZSAqdGFr ZSgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlKCk7IH0KICAgIHR5cGUgKnRha2VOb2Rl KCBRTE5vZGUgKm4gKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6dGFrZU5vZGUobik7IH0KICAg IHZvaWQgY2xlYXIoKSB7IFFHTGlzdDo6Y2xlYXIoKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0xp c3Q6OnNvcnQoKTsgfQogICAgaW50IGZpbmQoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xp c3Q6OmZpbmQoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBpbnQgZmluZE5leHQoIGNvbnN0 IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFDb2xsZWN0aW9uOjpJdGVtKWQsRkFM U0UpOyB9CiAgICBpbnQgZmluZFJlZiggY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6 ZmluZFJlZigoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIGludCBmaW5kTmV4dFJlZiggY29u c3QgdHlwZSAqZCApeyByZXR1cm4gUUdMaXN0OjpmaW5kUmVmKChRQ29sbGVjdGlvbjo6SXRlbSlk LEZBTFNFKTt9CiAgICB1aW50IGNvbnRhaW5zKCBjb25zdCB0eXBlICpkICkgY29uc3QgeyByZXR1 cm4gUUdMaXN0Ojpjb250YWlucygoUUNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHVpbnQgY29u dGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeyByZXR1cm4gUUdMaXN0Ojpjb250YWluc1JlZigoUUNvbGxlY3Rpb246 Okl0ZW0pZCk7IH0KICAgIHR5cGUgKmF0KCB1aW50IGkgKSB7IHJldHVybiAodHlwZSAqKVFHTGlz dDo6YXQoaSk7IH0KICAgIGludCBhdCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6YXQoKTsgfQog ICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpnZXQoKTsg fQogICAgUUxOb2RlICpjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y3VycmVu dE5vZGUoKTsgfQogICAgdHlwZSAqZ2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFH TGlzdDo6Y2ZpcnN0KCk7IH0KICAgIHR5cGUgKmdldExhc3QoKSBjb25zdCB7IHJldHVybiAodHlw ZSAqKVFHTGlzdDo6Y2xhc3QoKTsgfQogICAgdHlwZSAqZmlyc3QoKSB7IHJldHVybiAodHlwZSAq KVFHTGlzdDo6Zmlyc3QoKTsgfQogICAgdHlwZSAqbGFzdCgpIHsgcmV0dXJuICh0eXBlICopUUdM aXN0OjpsYXN0KCk7IH0KICAgIHR5cGUgKm5leHQoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6 bmV4dCgpOyB9CiAgICB0eXBlICpwcmV2KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnByZXYo KTsgfQogICAgdm9pZCB0b1ZlY3RvciggUUdWZWN0b3IgKnZlYyApY29uc3R7IFFHTGlzdDo6dG9W ZWN0b3IodmVjKTsgfQpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJdGVtKCBRQ29sbGVjdGlvbjo6 SXRlbSBkICk7Cn07CgoKdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBRTGlzdDx2b2lkPjo6ZGVsZXRl SXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBpbmxp bmUgdm9pZCBRTGlzdDx0eXBlPjo6ZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApCnsK ICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg dHlwZT4gY2xhc3MgUUxpc3RJdGVyYXRvciA6IHB1YmxpYyBRR0xpc3RJdGVyYXRvcgp7CnB1Ymxp YzoKICAgIFFMaXN0SXRlcmF0b3IoY29uc3QgUUxpc3Q8dHlwZT4gJmwpIDpRR0xpc3RJdGVyYXRv cigoUUdMaXN0ICYpbCkge30KICAgflFMaXN0SXRlcmF0b3IoKSB7fQogICAgdWludCBjb3VudCgp IGNvbnN0IHsgcmV0dXJuIGxpc3QtPmNvdW50KCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIGxpc3QtPmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCBhdEZpcnN0KCkgY29uc3Qg eyByZXR1cm4gUUdMaXN0SXRlcmF0b3I6OmF0Rmlyc3QoKTsgfQogICAgYm9vbCBhdExhc3QoKSBj b25zdCB7IHJldHVybiBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCk7IH0KICAgIHR5cGUgKnRvRmly c3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIHR5 cGUgKnRvTGFzdCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OnRvTGFzdCgpOyB9 CiAgICBvcGVyYXRvciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJh dG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IqKCkgeyByZXR1cm4gKHR5cGUgKilRR0xp c3RJdGVyYXRvcjo6Z2V0KCk7IH0KCgoKCgoKCiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyBy ZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y KCkoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7fQogICAg dHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJh dG9yKysoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICop UUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQogICAgdHlwZSAqb3BlcmF0b3ItLSgpIHsg cmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsgfQogICAgdHlwZSAq b3BlcmF0b3ItPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJh dG9yLT0oaik7fQogICAgUUxpc3RJdGVyYXRvcjx0eXBlPiYgb3BlcmF0b3I9KGNvbnN0IFFMaXN0 SXRlcmF0b3I8dHlwZT4maXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdMaXN0 SXRlcmF0b3I6Om9wZXJhdG9yPShpdCk7IHJldHVybiAqdGhpczsgfQp9OwojIDQ0ICIvdXNyL3Ny Yy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FzdHJsaXN0LmgiIDIKIyA1MyAiL3Vz ci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xc3RybGlzdC5oIgp0eXBlZGVm IFFMaXN0PGNoYXI+IFFTdHJMaXN0QmFzZTsKdHlwZWRlZiBRTGlzdEl0ZXJhdG9yPGNoYXI+IFFT dHJMaXN0SXRlcmF0b3I7CgoKY2xhc3MgUVN0ckxpc3QgOiBwdWJsaWMgUVN0ckxpc3RCYXNlCnsK cHVibGljOgogICAgUVN0ckxpc3QoIGJvb2wgZGVlcENvcGllcz1UUlVFICkgeyBkYyA9IGRlZXBD b3BpZXM7IGRlbF9pdGVtID0gZGVlcENvcGllczsgfQogICAgUVN0ckxpc3QoIGNvbnN0IFFTdHJM aXN0ICYgKTsKICAgflFTdHJMaXN0KCkgeyBjbGVhcigpOyB9CiAgICBRU3RyTGlzdCYgb3BlcmF0 b3I9KCBjb25zdCBRU3RyTGlzdCAmICk7Cgpwcml2YXRlOgogICAgUUNvbGxlY3Rpb246Okl0ZW0g bmV3SXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0dXJuIGRjID8gcXN0cmR1cCggKGNv bnN0IGNoYXIqKWQgKSA6IGQ7IH0KICAgIHZvaWQgZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0 ZW0gZCApIHsgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZVtdIChjaGFyKilkOyB9CiAgICBpbnQgY29t cGFyZUl0ZW1zKCBRQ29sbGVjdGlvbjo6SXRlbSBzMSwgUUNvbGxlY3Rpb246Okl0ZW0gczIgKSB7 IHJldHVybiBxc3RyY21wKChjb25zdCBjaGFyKilzMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKXMyKTsgfQoKICAg IFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmcywgUUNvbGxlY3Rpb246Okl0ZW0gJmQg KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcyA+PiAoY2hhciAqJilkOyByZXR1 cm4gczsgfQogICAgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmcywgUUNvbGxlY3Rp b246Okl0ZW0gZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1 cm4gcyA8PCAoY29uc3QgY2hhciAqKWQ7IH0KCiAgICBib29sIGRjOwp9OwoKCmNsYXNzIFFTdHJJ TGlzdCA6IHB1YmxpYyBRU3RyTGlzdAp7CnB1YmxpYzoKICAgIFFTdHJJTGlzdCggYm9vbCBkZWVw Q29waWVzPVRSVUUgKSA6IFFTdHJMaXN0KCBkZWVwQ29waWVzICkge30KICAgflFTdHJJTGlzdCgp IHsgY2xlYXIoKTsgfQpwcml2YXRlOgogICAgaW50IGNvbXBhcmVJdGVtcyggUUNvbGxlY3Rpb246 Okl0ZW0gczEsIFFDb2xsZWN0aW9uOjpJdGVtIHMyICkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7IHJldHVybiBxc3RyaWNtcCgoY29uc3QgY2hhciopczEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopczIpOyB9 Cn07CgoKaW5saW5lIFFTdHJMaXN0ICYgUVN0ckxpc3Q6Om9wZXJhdG9yPSggY29uc3QgUVN0ckxp c3QgJnN0ckxpc3QgKQp7CiAgICBjbGVhcigpOwogICAgZGMgPSBzdHJMaXN0LmRjOwogICAgZGVs X2l0ZW0gPSBkYzsKICAgIFFTdHJMaXN0QmFzZTo6b3BlcmF0b3I9KHN0ckxpc3QpOwogICAgcmV0 dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFTdHJMaXN0KCBjb25zdCBRU3RyTGlzdCAm c3RyTGlzdCApCiAgICA6IFFTdHJMaXN0QmFzZSggc3RyTGlzdCApCnsKICAgIGRjID0gRkFMU0U7 CiAgICBvcGVyYXRvcj0oc3RyTGlzdCk7Cn0KIyA0NCAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQv cXQtMi4zLjIvaW5jbHVkZS9xbWV0YW9iamVjdC5oIiAyCgoKY2xhc3MgUU9iamVjdDsKCnN0cnVj dCBRTWV0YURhdGEKewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIFFNZW1iZXIgcHRyOwogICAg ZW51bSBBY2Nlc3MgeyBQcml2YXRlLCBQcm90ZWN0ZWQsIFB1YmxpYyB9OwoKCgp9OwoKCnN0cnVj dCBRTWV0YUVudW0KewogICAgUU1ldGFFbnVtKCkgeyB9CiAgICB+UU1ldGFFbnVtKCkgeyBkZWxl dGUgW10gaXRlbXM7IH0KICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50IGNvdW50OwogICAg c3RydWN0IEl0ZW0KICAgIHsKICAgICAgICBjb25zdCBjaGFyICprZXk7CiAgICAgICAgaW50IHZh bHVlOwogICAgfTsKICAgIEl0ZW0gKml0ZW1zOwogICAgYm9vbCBzZXQ7Cn07CgoKY2xhc3MgUU1l dGFQcm9wZXJ0eQp7CnB1YmxpYzoKICAgIFFNZXRhUHJvcGVydHkoKTsKICAgIH5RTWV0YVByb3Bl cnR5KCk7CgogICAgY29uc3QgY2hhciAqdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0KICAgIGNv bnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBuOyB9CgogICAgYm9vbCB3cml0YWJsZSgp IGNvbnN0OwogICAgYm9vbCB3cml0ZWFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNv bnN0OwoKICAgIGJvb2wgaXNTZXRUeXBlKCkgY29uc3Q7CiAgICBib29sIGlzRW51bVR5cGUoKSBj b25zdDsKICAgIFFTdHJMaXN0IGVudW1LZXlzKCkgY29uc3Q7CgogICAgaW50IGtleVRvVmFsdWUo IGNvbnN0IGNoYXIqIGtleSApIGNvbnN0OwogICAgY29uc3QgY2hhciogdmFsdWVUb0tleSggaW50 IHZhbHVlICkgY29uc3Q7CiAgICBpbnQga2V5c1RvVmFsdWUoIGNvbnN0IFFTdHJMaXN0JiBrZXlz ICkgY29uc3Q7CiAgICBRU3RyTGlzdCB2YWx1ZVRvS2V5cyggaW50IHZhbHVlICkgY29uc3Q7Cgog ICAgYm9vbCBzdG9yZWQoIFFPYmplY3QqICkgY29uc3Q7CiAgICBib29sIGRlc2lnbmFibGUoKSBj b25zdDsKCiAgICBjb25zdCBjaGFyKiB0OwogICAgY29uc3QgY2hhciogbjsKICAgIFFNZW1iZXIg Z2V0OwogICAgUU1lbWJlciBzZXQ7CiAgICBRTWVtYmVyIHN0b3JlOwogICAgUU1lbWJlciByZXNl dDsKICAgIFFNZXRhRW51bSAqZW51bURhdGE7CgogICAgZW51bSBTcGVjaWZpY2F0aW9uIHsgVW5z cGVjaWZpZWQsIENsYXNzLCBSZWZlcmVuY2UsIFBvaW50ZXIsIENvbnN0Q2hhclN0YXIgfTsKICAg IFNwZWNpZmljYXRpb24gZ3NwZWM7CiAgICBTcGVjaWZpY2F0aW9uIHNzcGVjOwoKICAgIGVudW0g RmxhZ3MgewogICAgICAgIFVucmVzb2x2ZWRFbnVtID0gMHgwMDAwMDAwMSwKICAgICAgICBVbnJl c29sdmVkU2V0ID0gMHgwMDAwMDAwMiwKICAgICAgICBVbnJlc29sdmVkRW51bU9yU2V0ID0gMHgw MDAwMDAwNCwKICAgICAgICBVbnJlc29sdmVkU3RvcmVkID0gMHgwMDAwMDAwOCwKICAgICAgICBV bnJlc29sdmVkRGVzaWduYWJsZSA9IDB4MDAwMDAwMTAsCiAgICAgICAgTm90RGVzaWduYWJsZSA9 IDB4MDAwMDAwMjAsCiAgICAgICAgTm90U3RvcmVkID0gMHgwMDAwMDA0MCwKICAgICAgICBTdGRT ZXQgPSAweDAwMDAwMDgwCiAgICB9OwoKICAgIGJvb2wgdGVzdEZsYWdzKCB1aW50IGYgKSBjb25z dDsKICAgIHZvaWQgc2V0RmxhZ3MoIHVpbnQgZiApOwogICAgdm9pZCBjbGVhckZsYWdzKCB1aW50 IGYgKTsKCnByaXZhdGU6CiAgICB1aW50IGZsYWdzOwp9OwoKCnN0cnVjdCBRQ2xhc3NJbmZvCnsK ICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICBjb25zdCBjaGFyKiB2YWx1ZTsKfTsKCmNsYXNzIFFN ZXRhT2JqZWN0UHJpdmF0ZTsKCmNsYXNzIFFNZXRhT2JqZWN0CnsKcHVibGljOgogICAgUU1ldGFP YmplY3QoIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsIGNvbnN0IGNoYXIgKnN1cGVyY2xhc3NfbmFt ZSwKICAgICAgICAgICAgICAgICBRTWV0YURhdGEgKnNsb3RfZGF0YSwgaW50IG5fc2xvdHMsCiAg ICAgICAgICAgICAgICAgUU1ldGFEYXRhICpzaWduYWxfZGF0YSwgaW50IG5fc2lnbmFscyApOwog ICAgUU1ldGFPYmplY3QoIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsIGNvbnN0IGNoYXIgKnN1cGVy Y2xhc3NfbmFtZSwKICAgICAgICAgICAgICAgICBRTWV0YURhdGEgKnNsb3RfZGF0YSwgaW50IG5f c2xvdHMsCiAgICAgICAgICAgICAgICAgUU1ldGFEYXRhICpzaWduYWxfZGF0YSwgaW50IG5fc2ln bmFscywKCiAgICAgICAgICAgICAgICAgUU1ldGFQcm9wZXJ0eSAqcHJvcF9kYXRhLCBpbnQgbl9w cm9wcywKICAgICAgICAgICAgICAgICBRTWV0YUVudW0gKmVudW1fZGF0YSwgaW50IG5fZW51bXMs CgogICAgICAgICAgICAgICAgIFFDbGFzc0luZm8gKmNsYXNzX2luZm8sIGludCBuX2luZm8gKTsK CgogICAgdmlydHVhbCB+UU1ldGFPYmplY3QoKTsKCiAgICBjb25zdCBjaGFyICpjbGFzc05hbWUo KSBjb25zdCB7IHJldHVybiBjbGFzc25hbWU7IH0KICAgIGNvbnN0IGNoYXIgKnN1cGVyQ2xhc3NO YW1lKCkgY29uc3QgeyByZXR1cm4gc3VwZXJjbGFzc25hbWU7IH0KCiAgICBRTWV0YU9iamVjdCAq c3VwZXJDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHN1cGVyY2xhc3M7IH0KCiAgICBib29sIGluaGVy aXRzKCBjb25zdCBjaGFyKiBjbG5hbWUgKSBjb25zdDsKCiAgICBpbnQgbnVtU2xvdHMoIGJvb2wg c3VwZXIgPSBGQUxTRSApIGNvbnN0OwogICAgaW50IG51bVNpZ25hbHMoIGJvb2wgc3VwZXIgPSBG QUxTRSApIGNvbnN0OwoKICAgIFFNZXRhRGF0YSAqc2xvdCggaW50IGluZGV4LCBib29sIHN1cGVy ID0gRkFMU0UgKSBjb25zdDsKICAgIFFNZXRhRGF0YSAqc2lnbmFsKCBpbnQgaW5kZXgsIGJvb2wg c3VwZXIgPSBGQUxTRSApIGNvbnN0OwoKICAgIFFNZXRhRGF0YSAqc2xvdCggY29uc3QgY2hhciAq LCBib29sIHN1cGVyID0gRkFMU0UgKSBjb25zdDsKICAgIFFNZXRhRGF0YSAqc2lnbmFsKCBjb25z dCBjaGFyICosIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0OwoKICAgIFFTdHJMaXN0IHNsb3RO YW1lcyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CiAgICBRU3RyTGlzdCBzaWduYWxOYW1l cyggYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CgogICAgaW50IG51bUNsYXNzSW5mbyggYm9v bCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CiAgICBRQ2xhc3NJbmZvICpjbGFzc0luZm8oIGludCBp bmRleCwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7CiAgICBjb25zdCBjaGFyICpjbGFzc0lu Zm8oIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgc3VwZXIgPSBGQUxTRSApIGNvbnN0OwoKCiAgICBj b25zdCBRTWV0YVByb3BlcnR5ICpwcm9wZXJ0eSggY29uc3QgY2hhciogbmFtZSwgYm9vbCBzdXBl ciA9IEZBTFNFICkgY29uc3Q7CiAgICBRU3RyTGlzdCBwcm9wZXJ0eU5hbWVzKCBib29sIHN1cGVy ID0gRkFMU0UgKSBjb25zdDsKICAgIHZvaWQgcmVzb2x2ZVByb3BlcnR5KCBRTWV0YVByb3BlcnR5 KiBwcm9wICk7CgoKCgoKICAgIHN0YXRpYyBRTWV0YU9iamVjdCAqbmV3X21ldGFvYmplY3QoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUU1ldGFEYXRhICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFNZXRhRGF0YSAqLCBpbnQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUU1ldGFQcm9wZXJ0eSAqcHJvcF9kYXRhLCBpbnQgbl9wcm9wcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNZXRhRW51bSAqZW51bV9kYXRhLCBp bnQgbl9lbnVtcywKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ2xh c3NJbmZvICogY2xhc3NfaW5mbywgaW50IG5faW5mbyApOwogICAgc3RhdGljIFFNZXRhT2JqZWN0 ICpuZXdfbWV0YW9iamVjdCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTWV0YURhdGEgKiwgaW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1ldGFEYXRhICosIGludCApOwogICAgc3Rh dGljIFFNZXRhRGF0YSAqbmV3X21ldGFkYXRhKCBpbnQgKTsKICAgIHN0YXRpYyBRTWV0YURhdGE6 OkFjY2VzcyAqbmV3X21ldGFhY2Nlc3MoIGludCApOwogICAgdm9pZCBzZXRfc2xvdF9hY2Nlc3Mo IFFNZXRhRGF0YTo6QWNjZXNzKiApOwogICAgUU1ldGFEYXRhOjpBY2Nlc3Mgc2xvdF9hY2Nlc3Mo aW50IGluZGV4LCBib29sIHN1cGVyID0gRkFMU0UgKTsKICAgIHN0YXRpYyBRTWV0YUVudW0gKm5l d19tZXRhZW51bSggaW50ICk7CiAgICBzdGF0aWMgUU1ldGFFbnVtOjpJdGVtICpuZXdfbWV0YWVu dW1faXRlbSggaW50ICk7CgogICAgc3RhdGljIFFNZXRhUHJvcGVydHkgKm5ld19tZXRhcHJvcGVy dHkoIGludCApOwoKICAgIHN0YXRpYyBRQ2xhc3NJbmZvICpuZXdfY2xhc3NpbmZvKCBpbnQgKTsK CnByaXZhdGU6CiAgICBRTWVtYmVyRGljdCAqaW5pdCggUU1ldGFEYXRhICosIGludCApOwogICAg UU1ldGFEYXRhICptZGF0YSggaW50IGNvZGUsIGNvbnN0IGNoYXIgKiwgYm9vbCApIGNvbnN0Owog ICAgUU1ldGFEYXRhICptZGF0YSggaW50IGNvZGUsIGludCBpbmRleCwgYm9vbCBzdXBlciApIGNv bnN0OwoKICAgIGNvbnN0IGNoYXIgKmNsYXNzbmFtZTsKICAgIGNvbnN0IGNoYXIgKnN1cGVyY2xh c3NuYW1lOwogICAgUU1ldGFPYmplY3QgKnN1cGVyY2xhc3M7CiAgICBRTWV0YU9iamVjdFByaXZh dGUgKmQ7CiAgICB2b2lkICpyZXNlcnZlZDsKICAgIFFNZXRhRGF0YSAqc2xvdERhdGE7CiAgICBR TWVtYmVyRGljdCAqc2xvdERpY3Q7CiAgICBRTWV0YURhdGEgKnNpZ25hbERhdGE7CiAgICBRTWVt YmVyRGljdCAqc2lnbmFsRGljdDsKICAgIFFNZXRhRW51bSAqZW51bWVyYXRvciggY29uc3QgY2hh ciogbmFtZSwgYm9vbCBzdXBlciA9IEZBTFNFICkgY29uc3Q7Cgpwcml2YXRlOgoKICAgIFFNZXRh T2JqZWN0KCBjb25zdCBRTWV0YU9iamVjdCAmICk7CiAgICBRTWV0YU9iamVjdCAmb3BlcmF0b3I9 KCBjb25zdCBRTWV0YU9iamVjdCAmICk7Cgp9OwoKCmlubGluZSBib29sIFFNZXRhUHJvcGVydHk6 OndyaXRhYmxlKCkgY29uc3QKeyByZXR1cm4gc2V0ICE9IDA7IH0KaW5saW5lIGJvb2wgUU1ldGFQ cm9wZXJ0eTo6d3JpdGVhYmxlKCkgY29uc3QKeyByZXR1cm4gc2V0ICE9IDA7IH0KaW5saW5lIGJv b2wgUU1ldGFQcm9wZXJ0eTo6dGVzdEZsYWdzKCB1aW50IGYgKSBjb25zdAp7IHJldHVybiAoZmxh Z3MgJiAodWludClmKSAhPSAodWludCkwOyB9CmlubGluZSBib29sIFFNZXRhUHJvcGVydHk6Omlz VmFsaWQoKSBjb25zdAp7IHJldHVybiBnZXQgIT0gMCAmJiAhdGVzdEZsYWdzKCBVbnJlc29sdmVk RW51bSB8IFVucmVzb2x2ZWREZXNpZ25hYmxlIHwgVW5yZXNvbHZlZFN0b3JlZCApIDsgfQppbmxp bmUgYm9vbCBRTWV0YVByb3BlcnR5Ojppc1NldFR5cGUoKSBjb25zdAp7IHJldHVybiAoIGVudW1E YXRhICE9IDAgJiYgZW51bURhdGEtPnNldCApOyB9CmlubGluZSBib29sIFFNZXRhUHJvcGVydHk6 OmlzRW51bVR5cGUoKSBjb25zdAp7IHJldHVybiAoIGVudW1EYXRhICE9IDAgKTsgfQppbmxpbmUg Ym9vbCBRTWV0YVByb3BlcnR5OjpkZXNpZ25hYmxlKCkgY29uc3QKeyByZXR1cm4gKCBpc1ZhbGlk KCkgJiYgc2V0ICE9IDAgJiYgIXRlc3RGbGFncyggTm90RGVzaWduYWJsZSB8IFVucmVzb2x2ZWRE ZXNpZ25hYmxlICkgKTsgfQppbmxpbmUgdm9pZCBRTWV0YVByb3BlcnR5OjpzZXRGbGFncyggdWlu dCBmICkKeyBmbGFncyB8PSAodWludClmOyB9CmlubGluZSB2b2lkIFFNZXRhUHJvcGVydHk6OmNs ZWFyRmxhZ3MoIHVpbnQgZiApCnsgZmxhZ3MgJj0gfih1aW50KWY7IH0KCgoKY2xhc3MgUU1ldGFP YmplY3RJbml0IHsKcHVibGljOgogICAgUU1ldGFPYmplY3RJbml0KHZvaWQoKikoKSk7CiAgICBz dGF0aWMgaW50IGluaXQoKTsKfTsKIyAxOCAia2VybmVsL21vY19xd2lkZ2V0LmNwcCIgMgojIDEg Ii91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgi IDEKIyA0MiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xYXBwbGlj YXRpb24uaCIKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3F3 aWRnZXQuaCIgMQojIDQzICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRl L3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIv aW5jbHVkZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQt Mi4zLjIvaW5jbHVkZS9xYXNjaWlkaWN0LmgiCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQv cXQtMi4zLjIvaW5jbHVkZS9xZ2RpY3QuaCIgMQojIDQ2ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlM RC9xdC0yLjMuMi9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3Mg UUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUUNvbGxlY3Rpb246 Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFDb2xsZWN0aW9uOjpJdGVtIHNl dERhdGEoIFFDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQogICAgUUJh c2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5leHQoIFFC YXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVja2V0KCBR Q29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4dChuKSB7 fQogICAgUUNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0Owp9OwoK Y2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFT dHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNl QnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgY29u c3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICBR U3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7 CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUUNvbGxlY3Rpb246Okl0 ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQoZCxuKSwga2V5KGsp IHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0 ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJh c2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFDb2xsZWN0aW9uOjpJ dGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShr KSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAg IGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1 YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNl QnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9p ZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7 Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGljIFFDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWlu dCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25z dCB7IHJldHVybiB2bGVuOyB9CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29u c3QgUVN0cmluZyYga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNv bnN0IGNoYXIgKmtleSwgUUNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUUNvbGxlY3Rpb246 Okl0ZW0gbG9va19pbnQoIGxvbmcga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBR Q29sbGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwg aW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRh U3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51 bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBR R0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0Rp Y3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9y PSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJp bmcgJmtleSwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9hc2Np aSggY29uc3QgY2hhciAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wg cmVtb3ZlX2ludCggbG9uZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9v bCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAg UUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwogICAg UUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAgICBRQ29s bGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVt IHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6 ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAg IGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQgc3RhdGlzdGljcygp IGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBR Q29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURh dGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFz ZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxlbjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50 IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNlcyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAg IFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAgdm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNl QnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJp bmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFD b2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2Np aSggY29uc3QgY2hhciAqLCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1 Y2tldCAqdW5saW5rX2ludCggbG9uZywgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAg IFFQdHJCdWNrZXQgKnVubGlua19wdHIoIHZvaWQgKiwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9 IDAgKTsKICAgIHZvaWQgaW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJp ZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJp ZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGlj dCAmICk7CiAgICBRR0RpY3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAg UUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+ UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAg UUNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygp IGNvbnN0OwogICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0 S2V5SW50KCkgY29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRQ29sbGVj dGlvbjo6SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisr KCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgog ICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAg dWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRv cjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRhKCkg OiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkgY29u c3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5nZXRL ZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVyYXRv cjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lpQnVj a2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVyYXRv cjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNrZXQq KWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRvcjo6 Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQqKWN1 ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQt Mi4zLjIvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDIKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gY2xh c3MgUUFzY2lpRGljdCA6IHB1YmxpYyBRR0RpY3QKewpwdWJsaWM6CiAgICBRQXNjaWlEaWN0KGlu dCBzaXplPTE3LCBib29sIGNhc2VTZW5zaXRpdmU9VFJVRSwgYm9vbCBjb3B5S2V5cz1UUlVFICkK ICAgICAgICA6IFFHRGljdChzaXplLEFzY2lpS2V5LGNhc2VTZW5zaXRpdmUsY29weUtleXMpIHt9 CiAgICBRQXNjaWlEaWN0KCBjb25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkICkgOiBRR0RpY3QoZCkg e30KICAgflFBc2NpaURpY3QoKSB7IGNsZWFyKCk7IH0KICAgIFFBc2NpaURpY3Q8dHlwZT4gJm9w ZXJhdG9yPShjb25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkKQogICAgICAgICAgICAgICAgICAgICAg ICB7IHJldHVybiAoUUFzY2lpRGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRvcj0oZCk7IH0KICAg IHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7IH0KICAgIHVpbnQg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgpOyB9CiAgICBib29sIGlzRW1wdHko KSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0gMDsgfQoKICAgIHZvaWQgaW5zZXJ0 KCBjb25zdCBjaGFyICprLCBjb25zdCB0eXBlICpkICkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2FzY2lpKGssKEl0ZW0pZCwxKTsgfQogICAg dm9pZCByZXBsYWNlKCBjb25zdCBjaGFyICprLCBjb25zdCB0eXBlICpkICkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2FzY2lpKGssKEl0ZW0p ZCwyKTsgfQogICAgYm9vbCByZW1vdmUoIGNvbnN0IGNoYXIgKmsgKSB7IHJldHVybiBRR0RpY3Q6 OnJlbW92ZV9hc2NpaShrKTsgfQogICAgdHlwZSAqdGFrZSggY29uc3QgY2hhciAqayApIHsgcmV0 dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX2FzY2lpKGspOyB9CiAgICB0eXBlICpmaW5kKCBjb25z dCBjaGFyICprICkgY29uc3QKICAgICAgICAgICAgICAgIHsgcmV0dXJuICh0eXBlICopKChRR0Rp Y3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNjaWkoaywwLDApOyB9CiAgICB0eXBlICpvcGVyYXRv cltdKCBjb25zdCBjaGFyICprICkgY29uc3QKICAgICAgICAgICAgICAgIHsgcmV0dXJuICh0eXBl ICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNjaWkoaywwLDApOyB9CgogICAgdm9p ZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigpOyB9CiAgICB2b2lkIHJlc2l6ZSggdWludCBuICkg eyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAgdm9pZCBzdGF0aXN0aWNzKCkgY29uc3QgeyBRR0Rp Y3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJdGVtKCBJdGVtIGQg KTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFBc2NpaURpY3Q8dm9pZD46OmRlbGV0ZUl0 ZW0oIEl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRQXNjaWlE aWN0PHR5cGU+OjpkZWxldGVJdGVtKCBRQ29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBk ZWxfaXRlbSApIGRlbGV0ZSAodHlwZSAqKWQ7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFz cyBRQXNjaWlEaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdEaWN0SXRlcmF0b3IKewpwdWJsaWM6CiAg ICBRQXNjaWlEaWN0SXRlcmF0b3IoY29uc3QgUUFzY2lpRGljdDx0eXBlPiAmZCkKICAgICAgICA6 IFFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQogICB+UUFzY2lpRGljdEl0ZXJhdG9yKCkg e30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3VudCgpOyB9CiAgICBi b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3VudCgpID09IDA7IH0KICAgIHR5 cGUgKnRvRmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7 IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRl cmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKHR5cGUg KilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIGNvbnN0IGNoYXIgKmN1cnJlbnRLZXkoKSBj b25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWkoKTsgfQogICAgdHlwZSAq b3BlcmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKCko KTsgfQogICAgdHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0 b3I6Om9wZXJhdG9yKysoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50IGopIHsgcmV0dXJu ICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQp9OwojIDQ0ICIvdXNyL3Ny Yy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAi L3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xcGFsZXR0ZS5oIiAxCiMg NDUgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2luY2x1ZGUvcWFwcGxpY2F0aW9u LmgiIDIKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3F0cmFu c2xhdG9yLmgiIDEKIyA0NCAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVk ZS9xdHJhbnNsYXRvci5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3F0LTIuMy4yL2lu Y2x1ZGUvcWludGRpY3QuaCIgMQojIDQ2ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMu Mi9pbmNsdWRlL3FpbnRkaWN0LmgiCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFJbnREaWN0 IDogcHVibGljIFFHRGljdAp7CnB1YmxpYzoKICAgIFFJbnREaWN0KGludCBzaXplPTE3KSA6IFFH RGljdChzaXplLEludEtleSwwLDApIHt9CiAgICBRSW50RGljdCggY29uc3QgUUludERpY3Q8dHlw ZT4gJmQgKSA6IFFHRGljdChkKSB7fQogICB+UUludERpY3QoKSB7IGNsZWFyKCk7IH0KICAgIFFJ bnREaWN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUludERpY3Q8dHlwZT4gJmQpCiAgICAgICAg ICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRSW50RGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRv cj0oZCk7IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7 IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgpOyB9CiAgICBi b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0gMDsgfQogICAg dm9pZCBpbnNlcnQoIGxvbmcgaywgY29uc3QgdHlwZSAqZCApCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19pbnQoaywoSXRlbSlkLDEpOyB9CiAg ICB2b2lkIHJlcGxhY2UoIGxvbmcgaywgY29uc3QgdHlwZSAqZCApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19pbnQoaywoSXRlbSlkLDIpOyB9 CiAgICBib29sIHJlbW92ZSggbG9uZyBrICkgeyByZXR1cm4gUUdEaWN0OjpyZW1vdmVfaW50KGsp OyB9CiAgICB0eXBlICp0YWtlKCBsb25nIGsgKSB7IHJldHVybiAodHlwZSopUUdEaWN0Ojp0YWtl X2ludChrKTsgfQogICAgdHlwZSAqZmluZCggbG9uZyBrICkgY29uc3QKICAgICAgICAgICAgICAg IHsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfaW50KGssMCww KTsgfQogICAgdHlwZSAqb3BlcmF0b3JbXSggbG9uZyBrICkgY29uc3QKICAgICAgICAgICAgICAg IHsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfaW50KGssMCww KTsgfQogICAgdm9pZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigpOyB9CiAgICB2b2lkIHJlc2l6 ZSggdWludCBuICkgeyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAgdm9pZCBzdGF0aXN0aWNzKCkg Y29uc3QgeyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJ dGVtKCBJdGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFJbnREaWN0PHZvaWQ+ OjpkZWxldGVJdGVtKCBRQ29sbGVjdGlvbjo6SXRlbSApCnsKfQoKCnRlbXBsYXRlPGNsYXNzIHR5 cGU+IGlubGluZSB2b2lkIFFJbnREaWN0PHR5cGU+OjpkZWxldGVJdGVtKCBRQ29sbGVjdGlvbjo6 SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZSAodHlwZSAqKWQ7Cn0KCnRlbXBs YXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFJbnREaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdEaWN0SXRl cmF0b3IKewpwdWJsaWM6CiAgICBRSW50RGljdEl0ZXJhdG9yKGNvbnN0IFFJbnREaWN0PHR5cGU+ ICZkKSA6UUdEaWN0SXRlcmF0b3IoKFFHRGljdCAmKWQpIHt9CiAgIH5RSW50RGljdEl0ZXJhdG9y KCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3VudCgpOyB9CiAg ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3VudCgpID09IDA7IH0KICAg IHR5cGUgKnRvRmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjp0b0ZpcnN0 KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdEaWN0 SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKHR5 cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIGxvbmcgY3VycmVudEtleSgpIGNvbnN0 IHsgcmV0dXJuIFFHRGljdEl0ZXJhdG9yOjpnZXRLZXlJbnQoKTsgfQogICAgdHlwZSAqb3BlcmF0 b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTsgfQog ICAgdHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9w ZXJhdG9yKysoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBl ICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQp9OwojIDQ1ICIvdXNyL3NyYy9wYWNr YWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiIDIKCgoKCmNsYXNzIFFU cmFuc2xhdG9yUHJpdmF0ZTsKCgpjbGFzcyBRVHJhbnNsYXRvck1lc3NhZ2UKewpwdWJsaWM6CiAg ICBRVHJhbnNsYXRvck1lc3NhZ2UoKTsKICAgIFFUcmFuc2xhdG9yTWVzc2FnZSggY29uc3QgY2hh ciAqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzb3VyY2VU ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29tbWVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdHJhbnNsYXRpb24gPSBRU3RyaW5nOjpu dWxsICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFUcmFu c2xhdG9yTWVzc2FnZSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlICYgbSApOwoKICAgIFFUcmFu c2xhdG9yTWVzc2FnZSAmIG9wZXJhdG9yPSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlICYgbSAp OwoKICAgIHVpbnQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIGg7IH0KICAgIGNvbnN0IGNoYXIgKmNv bnRleHQoKSBjb25zdCB7IHJldHVybiBjeDsgfQogICAgY29uc3QgY2hhciAqc291cmNlVGV4dCgp IGNvbnN0IHsgcmV0dXJuIHN0OyB9CiAgICBjb25zdCBjaGFyICpjb21tZW50KCkgY29uc3QgeyBy ZXR1cm4gY207IH0KCiAgICB2b2lkIHNldFRyYW5zbGF0aW9uKCBjb25zdCBRU3RyaW5nICYgdHJh bnNsYXRpb24gKSB7IHRuID0gdHJhbnNsYXRpb247IH0KICAgIFFTdHJpbmcgdHJhbnNsYXRpb24o KSBjb25zdCB7IHJldHVybiB0bjsgfQoKICAgIGVudW0gUHJlZml4IHsgTm9QcmVmaXgsIEhhc2gs IEhhc2hDb250ZXh0LCBIYXNoQ29udGV4dFNvdXJjZVRleHQsCiAgICAgICAgICAgICAgICAgIEhh c2hDb250ZXh0U291cmNlVGV4dENvbW1lbnQgfTsKICAgIHZvaWQgd3JpdGUoIFFEYXRhU3RyZWFt ICYgcywgYm9vbCBzdHJpcCwKICAgICAgICAgICAgICAgIFByZWZpeCBwcmVmaXggPSBIYXNoQ29u dGV4dFNvdXJjZVRleHRDb21tZW50ICkgY29uc3Q7CiAgICBQcmVmaXggY29tbW9uUHJlZml4KCBj b25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBj b25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSgg Y29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv cj09KCBtICk7IH0KICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2Um IG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdl JiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj4oIG0gKTsgfQogICAgYm9vbCBvcGVy YXRvcj4oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiB0 aGlzLT5vcGVyYXRvcjwoIG0gKTsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRVHJhbnNs YXRvck1lc3NhZ2UmIG0gKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPCggbSApOyB9Cgpw cml2YXRlOgogICAgdWludCBoOwogICAgUUNTdHJpbmcgY3g7CiAgICBRQ1N0cmluZyBzdDsKICAg IFFDU3RyaW5nIGNtOwogICAgUVN0cmluZyB0bjsKCiAgICBlbnVtIFRhZyB7IFRhZ19FbmQgPSAx LCBUYWdfU291cmNlVGV4dDE2LCBUYWdfVHJhbnNsYXRpb24sIFRhZ19Db250ZXh0MTYsCiAgICAg ICAgICAgICAgIFRhZ19IYXNoLCBUYWdfU291cmNlVGV4dCwgVGFnX0NvbnRleHQsIFRhZ19Db21t ZW50LAogICAgICAgICAgICAgICBUYWdfT2Jzb2xldGUxIH07Cn07CgoKY2xhc3MgUVRyYW5zbGF0 b3I6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gY29uc3QgY2hhciAqY2xhc3NO YW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBzdGF0 aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIq LCBjb25zdCBjaGFyKik7IHByb3RlY3RlZDogdm9pZCBpbml0TWV0YU9iamVjdCgpOyBwcml2YXRl OiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFUcmFuc2xhdG9yKCBR T2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICogbmFtZSA9IDAgKTsKICAgIH5RVHJhbnNsYXRv cigpOwoKCiAgICBRU3RyaW5nIGZpbmQoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICogKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgZmluZCggY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgZmluZE1lc3Nh Z2UoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBib29sIGxvYWQoIGNvbnN0IFFT dHJpbmcgJiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmIGRpcmVjdG9y eSA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiBzZWFyY2hf ZGVsaW1pdGVycyA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcg JiBzdWZmaXggPSBRU3RyaW5nOjpudWxsICk7CgogICAgZW51bSBTYXZlTW9kZSB7IEV2ZXJ5dGhp bmcsIFN0cmlwcGVkIH07CgogICAgYm9vbCBzYXZlKCBjb25zdCBRU3RyaW5nICYgZmlsZW5hbWUs IFNhdmVNb2RlIG1vZGUgPSBFdmVyeXRoaW5nICk7CgogICAgdm9pZCBjbGVhcigpOwoKICAgIHZv aWQgaW5zZXJ0KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmICk7CgogICAgdm9pZCBpbnNlcnQo IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBRU3RyaW5nICYgKTsKICAgIHZvaWQg cmVtb3ZlKCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmICk7CgogICAgdm9pZCByZW1vdmUoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgYm9vbCBjb250YWlu cyggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKSBjb25zdDsKCgoKICAgIHZvaWQgc3F1ZWV6 ZSggU2F2ZU1vZGUgKTsKICAgIHZvaWQgc3F1ZWV6ZSgpOwogICAgdm9pZCB1bnNxdWVlemUoKTsK CiAgICBRVmFsdWVMaXN0PFFUcmFuc2xhdG9yTWVzc2FnZT4gbWVzc2FnZXMoKSBjb25zdDsKCnBy aXZhdGU6CiAgICBRVHJhbnNsYXRvclByaXZhdGUgKiBkOwoKcHJpdmF0ZToKCiAgICBRVHJhbnNs YXRvciggY29uc3QgUVRyYW5zbGF0b3IgJiApOwogICAgUVRyYW5zbGF0b3IgJm9wZXJhdG9yPSgg Y29uc3QgUVRyYW5zbGF0b3IgJiApOwoKfTsKIyA0NiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQv cXQtMi4zLjIvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKCmNsYXNzIFFTZXNzaW9uTWFuYWdl cjsKY2xhc3MgUVN0eWxlOwpjbGFzcyBRVHJhbnNsYXRvcjsKCgoKdGVtcGxhdGUgPGNsYXNzIHR5 cGU+IGNsYXNzIFFMaXN0OwoKY2xhc3MgUUFwcGxpY2F0aW9uOwpleHRlcm4gUUFwcGxpY2F0aW9u ICpxQXBwOwojIDY3ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9xdC0yLjMuMi9pbmNsdWRlL3Fh cHBsaWNhdGlvbi5oIgpjbGFzcyBRQXBwbGljYXRpb24gOiBwdWJsaWMgUU9iamVjdAp7CiAgICBw dWJsaWM6IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0 YU9iamVjdCgpOyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFP YmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciop OyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6 IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRh T2JqOwpwdWJsaWM6CiAgICBRQXBwbGljYXRpb24oIGludCAmYXJnYywgY2hhciAqKmFyZ3YpOwog ICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2LCBib29sIEdVSWVuYWJsZWQg KTsKICAgIGVudW0gVHlwZSB7IFR0eSwgR3VpQ2xpZW50LCBHdWlTZXJ2ZXIgfTsKICAgIFFBcHBs aWNhdGlvbiggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgVHlwZSApOwoKICAgIFFBcHBsaWNhdGlv biggRGlzcGxheSogZHB5ICk7CiAgICBRQXBwbGljYXRpb24oIERpc3BsYXkgKmRweSwgaW50IGFy Z2MsIGNoYXIgKiphcmd2KTsKCiAgICB2aXJ0dWFsIH5RQXBwbGljYXRpb24oKTsKCiAgICBpbnQg YXJnYygpIGNvbnN0OwogICAgY2hhciAqKmFyZ3YoKSBjb25zdDsKCiAgICBUeXBlIHR5cGUoKSBj b25zdDsKCgogICAgc3RhdGljIFFTdHlsZSAmc3R5bGUoKTsKICAgIHN0YXRpYyB2b2lkIHNldFN0 eWxlKCBRU3R5bGUqICk7CgoKICAgIGVudW0gQ29sb3JNb2RlIHsgTm9ybWFsQ29sb3JzLCBDdXN0 b21Db2xvcnMgfTsKICAgIHN0YXRpYyBDb2xvck1vZGUgY29sb3JNb2RlKCk7CiAgICBzdGF0aWMg dm9pZCBzZXRDb2xvck1vZGUoIFFBcHBsaWNhdGlvbjo6Q29sb3JNb2RlICk7CgoKICAgIGVudW0g Q29sb3JTcGVjIHsgTm9ybWFsQ29sb3I9MCwgQ3VzdG9tQ29sb3I9MSwgTWFueUNvbG9yPTIgfTsK ICAgIHN0YXRpYyBpbnQgY29sb3JTcGVjKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRDb2xvclNwZWMo IGludCApOwoKICAgIHN0YXRpYyBRQ3Vyc29yICpvdmVycmlkZUN1cnNvcigpOwogICAgc3RhdGlj IHZvaWQgc2V0T3ZlcnJpZGVDdXJzb3IoIGNvbnN0IFFDdXJzb3IgJiwgYm9vbCByZXBsYWNlPUZB TFNFICk7CiAgICBzdGF0aWMgdm9pZCByZXN0b3JlT3ZlcnJpZGVDdXJzb3IoKTsKCiAgICBzdGF0 aWMgYm9vbCBoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRHbG9i YWxNb3VzZVRyYWNraW5nKCBib29sIGVuYWJsZSApOwoKICAgIHN0YXRpYyBRUGFsZXR0ZSBwYWxl dHRlKCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBhbGV0dGUoIGNv bnN0IFFQYWxldHRlICYsIGJvb2wgaW5mb3JtV2lkZ2V0cz1GQUxTRSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gMCApOwoKICAgIHN0YXRp YyBRRm9udCBmb250KCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0YXRpYyB2b2lkIHNldEZv bnQoIGNvbnN0IFFGb250ICYsIGJvb2wgaW5mb3JtV2lkZ2V0cz1GQUxTRSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gMCApOwogICAgc3RhdGlj IFFGb250TWV0cmljcyBmb250TWV0cmljcygpOwoKICAgIFFXaWRnZXQgKm1haW5XaWRnZXQoKSBj b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluV2lkZ2V0KCBRV2lkZ2V0ICogKTsKICAgIHZp cnR1YWwgdm9pZCBwb2xpc2goIFFXaWRnZXQgKiApOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAq YWxsV2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXRMaXN0ICp0b3BMZXZlbFdpZGdldHMoKTsK ICAgIHN0YXRpYyBRV2lkZ2V0ICpkZXNrdG9wKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZl UG9wdXBXaWRnZXQoKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICphY3RpdmVNb2RhbFdpZGdldCgpOwog ICAgc3RhdGljIFFDbGlwYm9hcmQgKmNsaXBib2FyZCgpOwogICAgUVdpZGdldCAqZm9jdXNXaWRn ZXQoKSBjb25zdDsKICAgIFFXaWRnZXQgKmFjdGl2ZVdpbmRvdygpIGNvbnN0OwoKICAgIHN0YXRp YyBRV2lkZ2V0ICp3aWRnZXRBdCggaW50IHgsIGludCB5LCBib29sIGNoaWxkPUZBTFNFICk7CiAg ICBzdGF0aWMgUVdpZGdldCAqd2lkZ2V0QXQoIGNvbnN0IFFQb2ludCAmLCBib29sIGNoaWxkPUZB TFNFICk7CgogICAgaW50IGV4ZWMoKTsKICAgIHZvaWQgcHJvY2Vzc0V2ZW50cygpOwogICAgdm9p ZCBwcm9jZXNzRXZlbnRzKCBpbnQgbWF4dGltZSApOwogICAgdm9pZCBwcm9jZXNzT25lRXZlbnQo KTsKICAgIGludCBlbnRlcl9sb29wKCk7CiAgICB2b2lkIGV4aXRfbG9vcCgpOwogICAgaW50IGxv b3BMZXZlbCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgZXhpdCggaW50IHJldGNvZGU9MCApOwoK ICAgIHN0YXRpYyBib29sIHNlbmRFdmVudCggUU9iamVjdCAqcmVjZWl2ZXIsIFFFdmVudCAqZXZl bnQgKTsKICAgIHN0YXRpYyB2b2lkIHBvc3RFdmVudCggUU9iamVjdCAqcmVjZWl2ZXIsIFFFdmVu dCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHNlbmRQb3N0ZWRFdmVudHMoIFFPYmplY3QgKnJl Y2VpdmVyLCBpbnQgZXZlbnRfdHlwZSApOwogICAgc3RhdGljIHZvaWQgc2VuZFBvc3RlZEV2ZW50 cygpOwoKICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBvc3RlZEV2ZW50cyggUU9iamVjdCAqcmVjZWl2 ZXIgKTsKCiAgICB2aXJ0dWFsIGJvb2wgbm90aWZ5KCBRT2JqZWN0ICosIFFFdmVudCAqICk7Cgog ICAgc3RhdGljIGJvb2wgc3RhcnRpbmdVcCgpOwogICAgc3RhdGljIGJvb2wgY2xvc2luZ0Rvd24o KTsKCiAgICBzdGF0aWMgdm9pZCBmbHVzaFgoKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNYKCk7Cgog ICAgc3RhdGljIHZvaWQgYmVlcCgpOwoKCiAgICB2b2lkIHNldERlZmF1bHRDb2RlYyggUVRleHRD b2RlYyogKTsKICAgIFFUZXh0Q29kZWMqIGRlZmF1bHRDb2RlYygpIGNvbnN0OwogICAgdm9pZCBp bnN0YWxsVHJhbnNsYXRvciggUVRyYW5zbGF0b3IgKiApOwogICAgdm9pZCByZW1vdmVUcmFuc2xh dG9yKCBRVHJhbnNsYXRvciAqICk7CgogICAgUVN0cmluZyB0cmFuc2xhdGUoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqICkgY29uc3Q7CiAgICBRU3RyaW5nIHRyYW5zbGF0ZSggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqICkgY29uc3Q7CgogICAgc3RhdGljIHZvaWQgc2V0V2luU3R5bGVIaWdobGlnaHRDb2xv ciggY29uc3QgUUNvbG9yICYgKTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJndpblN0eWxlSGln aGxpZ2h0Q29sb3IoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXREZXNrdG9wU2V0dGluZ3NBd2FyZSgg Ym9vbCApOwogICAgc3RhdGljIGJvb2wgZGVza3RvcFNldHRpbmdzQXdhcmUoKTsKCiAgICBzdGF0 aWMgdm9pZCBzZXRDdXJzb3JGbGFzaFRpbWUoIGludCApOwogICAgc3RhdGljIGludCBjdXJzb3JG bGFzaFRpbWUoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXREb3VibGVDbGlja0ludGVydmFsKCBpbnQg KTsKICAgIHN0YXRpYyBpbnQgZG91YmxlQ2xpY2tJbnRlcnZhbCgpOwoKICAgIHN0YXRpYyB2b2lk IHNldFdoZWVsU2Nyb2xsTGluZXMoIGludCApOwogICAgc3RhdGljIGludCB3aGVlbFNjcm9sbExp bmVzKCk7CgogICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsU3RydXQoIGNvbnN0IFFTaXplICYgKTsK ICAgIHN0YXRpYyBRU2l6ZSBnbG9iYWxTdHJ1dCgpOwoKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0 RHJhZ1RpbWUoIGludCBtcyApOwogICAgc3RhdGljIGludCBzdGFydERyYWdUaW1lKCk7CiAgICBz dGF0aWMgdm9pZCBzZXRTdGFydERyYWdEaXN0YW5jZSggaW50IGwgKTsKICAgIHN0YXRpYyBpbnQg c3RhcnREcmFnRGlzdGFuY2UoKTsKCiAgICBzdGF0aWMgYm9vbCBpc0VmZmVjdEVuYWJsZWQoIFF0 OjpVSUVmZmVjdCApOwogICAgc3RhdGljIHZvaWQgc2V0RWZmZWN0RW5hYmxlZCggUXQ6OlVJRWZm ZWN0LCBib29sIGVuYWJsZSA9IFRSVUUgKTsKIyAyMDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxE L3F0LTIuMy4yL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCiAgICB2aXJ0dWFsIGJvb2wgeDExRXZl bnRGaWx0ZXIoIFhFdmVudCAqICk7CiAgICB2aXJ0dWFsIGludCB4MTFDbGllbnRNZXNzYWdlKCBR V2lkZ2V0KiwgWEV2ZW50KiwgYm9vbCBwYXNzaXZlX29ubHkpOwogICAgaW50IHgxMVByb2Nlc3NF dmVudCggWEV2ZW50KiApOwojIDIyMiAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIv aW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGJvb2wgaXNTZXNzaW9uUmVzdG9yZWQoKSBjb25z dDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY29tbWl0 RGF0YSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwogICAgdmlydHVhbCB2b2lkIHNhdmVTdGF0ZSgg UVNlc3Npb25NYW5hZ2VyJiBzbSApOwoKCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVfeGltKCk7CiAg ICBzdGF0aWMgdm9pZCBjbG9zZV94aW0oKTsKCiAgICB2b2lkIHdha2VVcEd1aVRocmVhZCgpOwoK CgoKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGxhc3RXaW5kb3dDbG9zZWQoKTsKICAgIHZvaWQgYWJv dXRUb1F1aXQoKTsKICAgIHZvaWQgZ3VpVGhyZWFkQXdha2UoKTsKCnB1YmxpYyA6CiAgICB2b2lk IHF1aXQoKTsKICAgIHZvaWQgY2xvc2VBbGxXaW5kb3dzKCk7CgoKCgoKCnByaXZhdGU6CiAgICB2 b2lkIGNvbnN0cnVjdCggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgVHlwZSApOwogICAgYm9vbCBw cm9jZXNzTmV4dEV2ZW50KCBib29sICk7CiAgICB2b2lkIGluaXRpYWxpemUoIGludCwgY2hhciAq KiApOwogICAgdm9pZCBpbml0X3ByZWNtZGxpbmUoKTsKICAgIHZvaWQgcHJvY2Vzc19jbWRsaW5l KCBpbnQqIGFyZ2NwdHIsIGNoYXIgKiogYXJndiApOwojIDI2NyAiL3Vzci9zcmMvcGFja2FnZXMv QlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGludCBhcHBfYXJnYzsK ICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJvb2wgcXVpdF9ub3c7CiAgICBpbnQgcXVpdF9jb2Rl OwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0eWxlOwogICAgc3RhdGljIGludCBhcHBfY3NwZWM7 CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoKICAgIHN0YXRpYyBRRm9udCAqYXBwX2Zv bnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFwcF9jdXJzb3I7CgogICAgc3RhdGljIGludCBhcHBf dHJhY2tpbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfcnVubmluZzsKICAgIHN0YXRpYyBib29s IGlzX2FwcF9jbG9zaW5nOwogICAgc3RhdGljIGJvb2wgYXBwX2V4aXRfbG9vcDsKICAgIHN0YXRp YyBpbnQgbG9vcF9sZXZlbDsKICAgIHN0YXRpYyBRV2lkZ2V0ICptYWluX3dpZGdldDsKICAgIHN0 YXRpYyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlX3dp bmRvdzsKICAgIHN0YXRpYyBib29sIG9iZXlfZGVza3RvcF9zZXR0aW5nczsKICAgIHN0YXRpYyBp bnQgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBzdGF0aWMgaW50IG1vdXNlX2RvdWJsZV9jbGlja190 aW1lOwogICAgc3RhdGljIGludCB3aGVlbF9zY3JvbGxfbGluZXM7CgogICAgc3RhdGljIGJvb2wg YW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfbWVudTsKICAgIHN0YXRpYyBib29s IGFuaW1hdGVfdG9vbHRpcDsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfY29tYm87CiAgICBzdGF0 aWMgYm9vbCBmYWRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBmYWRlX3Rvb2x0aXA7CgogICAgUUxp c3Q8UVRyYW5zbGF0b3I+ICp0cmFuc2xhdG9yczsKCiAgICBRU2Vzc2lvbk1hbmFnZXIgKnNlc3Np b25fbWFuYWdlcjsKICAgIFFTdHJpbmcgc2Vzc2lvbl9pZDsKICAgIGJvb2wgaXNfc2Vzc2lvbl9y ZXN0b3JlZDsKCgogICAgc3RhdGljIHZvaWQgeDExX2luaXRpYWxpemVfc3R5bGUoKTsKCgogICAg c3RhdGljIFFTaXplIGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUUFzY2lpRGljdDxRUGFsZXR0ZT4g KmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFGb250PiAqYXBwX2ZvbnRzOwoK ICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwogICAgYm9vbCBpblBvcHVwTW9k ZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVwKCBRV2lkZ2V0ICpwb3B1cCApOwogICAgdm9p ZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lkIHNldEFjdGl2ZVdpbmRvdygg UVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIHZvaWQgcmVtb3ZlUG9zdGVkRXZlbnQoIFFFdmVu dCAqICk7CgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUUVUV2lk Z2V0OwogICAgZnJpZW5kIGNsYXNzIFFFdmVudDsKCnByaXZhdGU6CgogICAgUUFwcGxpY2F0aW9u KCBjb25zdCBRQXBwbGljYXRpb24gJiApOwogICAgUUFwcGxpY2F0aW9uICZvcGVyYXRvcj0oIGNv bnN0IFFBcHBsaWNhdGlvbiAmICk7Cgp9OwoKCmlubGluZSBpbnQgUUFwcGxpY2F0aW9uOjphcmdj KCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9hcmdjOwp9CgppbmxpbmUgY2hhciAqKlFBcHBsaWNh dGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJldHVybiBhcHBfYXJndjsKfQojIDM1NCAiL3Vzci9z cmMvcGFja2FnZXMvQlVJTEQvcXQtMi4zLjIvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKaW5saW5l IFFTdHlsZSYgUUFwcGxpY2F0aW9uOjpzdHlsZSgpCnsKICAgIHJldHVybiAqYXBwX3N0eWxlOwp9 CgoKaW5saW5lIFFDdXJzb3IgKlFBcHBsaWNhdGlvbjo6b3ZlcnJpZGVDdXJzb3IoKQp7CiAgICBy ZXR1cm4gYXBwX2N1cnNvcjsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjpoYXNHbG9iYWxN b3VzZVRyYWNraW5nKCkKewogICAgcmV0dXJuIGFwcF90cmFja2luZyA+IDA7Cn0KCmlubGluZSBR V2lkZ2V0ICpRQXBwbGljYXRpb246Om1haW5XaWRnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gbWFp bl93aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OmZvY3VzV2lkZ2V0KCkg Y29uc3QKewogICAgcmV0dXJuIGZvY3VzX3dpZGdldDsKfQoKaW5saW5lIFFXaWRnZXQgKlFBcHBs aWNhdGlvbjo6YWN0aXZlV2luZG93KCkgY29uc3QKewogICAgcmV0dXJuIGFjdGl2ZV93aW5kb3c7 Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OndpZGdldEF0KCBjb25zdCBRUG9pbnQg JnAsIGJvb2wgY2hpbGQgKQp7CiAgICByZXR1cm4gd2lkZ2V0QXQoIHAueCgpLCBwLnkoKSwgY2hp bGQgKTsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjppblBvcHVwTW9kZSgpIGNvbnN0CnsK ICAgIHJldHVybiBwb3B1cFdpZGdldHMgIT0gMDsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9u Ojppc1Nlc3Npb25SZXN0b3JlZCgpIGNvbnN0CnsKICAgIHJldHVybiBpc19zZXNzaW9uX3Jlc3Rv cmVkOwp9CgppbmxpbmUgUVN0cmluZyBRQXBwbGljYXRpb246OnNlc3Npb25JZCgpIGNvbnN0CnsK ICAgIHJldHVybiBzZXNzaW9uX2lkOwp9CgppbmxpbmUgUVNpemUgUUFwcGxpY2F0aW9uOjpnbG9i YWxTdHJ1dCgpCnsKICAgIHJldHVybiBhcHBfc3RydXQ7Cn0KCmlubGluZSBib29sIFFBcHBsaWNh dGlvbjo6c2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCApCnsgcmV0 dXJuIHFBcHAtPm5vdGlmeSggcmVjZWl2ZXIsIGV2ZW50ICk7IH0KIyAxOSAia2VybmVsL21vY19x d2lkZ2V0LmNwcCIgMgoKCgpjb25zdCBjaGFyICpRV2lkZ2V0OjpjbGFzc05hbWUoKSBjb25zdAp7 CiAgICByZXR1cm4gIlFXaWRnZXQiOwp9CgpRTWV0YU9iamVjdCAqUVdpZGdldDo6bWV0YU9iaiA9 IDA7Cgp2b2lkIFFXaWRnZXQ6OmluaXRNZXRhT2JqZWN0KCkKewogICAgaWYgKCBtZXRhT2JqICkK ICAgICAgICByZXR1cm47CiAgICBpZiAoIHFzdHJjbXAoUU9iamVjdDo6Y2xhc3NOYW1lKCksICJR T2JqZWN0IikgIT0gMCApCiAgICAgICAgYmFkU3VwZXJjbGFzc1dhcm5pbmcoIlFXaWRnZXQiLCJR T2JqZWN0Iik7CiAgICAodm9pZCkgc3RhdGljTWV0YU9iamVjdCgpOwp9CgoKClFTdHJpbmcgUVdp ZGdldDo6dHIoY29uc3QgY2hhciogcykKewogICAgcmV0dXJuIHFBcHAtPnRyYW5zbGF0ZSggIlFX aWRnZXQiLCBzLCAwICk7Cn0KClFTdHJpbmcgUVdpZGdldDo6dHIoY29uc3QgY2hhciogcywgY29u c3QgY2hhciAqIGMpCnsKICAgIHJldHVybiBxQXBwLT50cmFuc2xhdGUoICJRV2lkZ2V0Iiwgcywg YyApOwp9CgoKClFNZXRhT2JqZWN0KiBRV2lkZ2V0OjpzdGF0aWNNZXRhT2JqZWN0KCkKewogICAg aWYgKCBtZXRhT2JqICkKICAgICAgICByZXR1cm4gbWV0YU9iajsKICAgICh2b2lkKSBRT2JqZWN0 OjpzdGF0aWNNZXRhT2JqZWN0KCk7CgogICAgUU1ldGFFbnVtKiBlbnVtX3RibCA9IFFNZXRhT2Jq ZWN0OjpuZXdfbWV0YWVudW0oIDQgKTsKICAgIGVudW1fdGJsWzBdLm5hbWUgPSAiQmFja2dyb3Vu ZE1vZGUiOwogICAgZW51bV90YmxbMF0uY291bnQgPSAxODsKICAgIGVudW1fdGJsWzBdLml0ZW1z ID0gUU1ldGFPYmplY3Q6Om5ld19tZXRhZW51bV9pdGVtKCAxOCApOwogICAgZW51bV90YmxbMF0u c2V0ID0gRkFMU0U7CiAgICBlbnVtX3RibFswXS5pdGVtc1swXS5rZXkgPSAiRml4ZWRDb2xvciI7 CiAgICBlbnVtX3RibFswXS5pdGVtc1swXS52YWx1ZSA9IChpbnQpIFFXaWRnZXQ6OkZpeGVkQ29s b3I7CiAgICBlbnVtX3RibFswXS5pdGVtc1sxXS5rZXkgPSAiRml4ZWRQaXhtYXAiOwogICAgZW51 bV90YmxbMF0uaXRlbXNbMV0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpGaXhlZFBpeG1hcDsKICAg IGVudW1fdGJsWzBdLml0ZW1zWzJdLmtleSA9ICJOb0JhY2tncm91bmQiOwogICAgZW51bV90Ymxb MF0uaXRlbXNbMl0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpOb0JhY2tncm91bmQ7CiAgICBlbnVt X3RibFswXS5pdGVtc1szXS5rZXkgPSAiUGFsZXR0ZUZvcmVncm91bmQiOwogICAgZW51bV90Ymxb MF0uaXRlbXNbM10udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpQYWxldHRlRm9yZWdyb3VuZDsKICAg IGVudW1fdGJsWzBdLml0ZW1zWzRdLmtleSA9ICJQYWxldHRlQnV0dG9uIjsKICAgIGVudW1fdGJs WzBdLml0ZW1zWzRdLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFsZXR0ZUJ1dHRvbjsKICAgIGVu dW1fdGJsWzBdLml0ZW1zWzVdLmtleSA9ICJQYWxldHRlTGlnaHQiOwogICAgZW51bV90YmxbMF0u aXRlbXNbNV0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpQYWxldHRlTGlnaHQ7CiAgICBlbnVtX3Ri bFswXS5pdGVtc1s2XS5rZXkgPSAiUGFsZXR0ZU1pZGxpZ2h0IjsKICAgIGVudW1fdGJsWzBdLml0 ZW1zWzZdLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFsZXR0ZU1pZGxpZ2h0OwogICAgZW51bV90 YmxbMF0uaXRlbXNbN10ua2V5ID0gIlBhbGV0dGVEYXJrIjsKICAgIGVudW1fdGJsWzBdLml0ZW1z WzddLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFsZXR0ZURhcms7CiAgICBlbnVtX3RibFswXS5p dGVtc1s4XS5rZXkgPSAiUGFsZXR0ZU1pZCI7CiAgICBlbnVtX3RibFswXS5pdGVtc1s4XS52YWx1 ZSA9IChpbnQpIFFXaWRnZXQ6OlBhbGV0dGVNaWQ7CiAgICBlbnVtX3RibFswXS5pdGVtc1s5XS5r ZXkgPSAiUGFsZXR0ZVRleHQiOwogICAgZW51bV90YmxbMF0uaXRlbXNbOV0udmFsdWUgPSAoaW50 KSBRV2lkZ2V0OjpQYWxldHRlVGV4dDsKICAgIGVudW1fdGJsWzBdLml0ZW1zWzEwXS5rZXkgPSAi UGFsZXR0ZUJyaWdodFRleHQiOwogICAgZW51bV90YmxbMF0uaXRlbXNbMTBdLnZhbHVlID0gKGlu dCkgUVdpZGdldDo6UGFsZXR0ZUJyaWdodFRleHQ7CiAgICBlbnVtX3RibFswXS5pdGVtc1sxMV0u a2V5ID0gIlBhbGV0dGVCYXNlIjsKICAgIGVudW1fdGJsWzBdLml0ZW1zWzExXS52YWx1ZSA9IChp bnQpIFFXaWRnZXQ6OlBhbGV0dGVCYXNlOwogICAgZW51bV90YmxbMF0uaXRlbXNbMTJdLmtleSA9 ICJQYWxldHRlQmFja2dyb3VuZCI7CiAgICBlbnVtX3RibFswXS5pdGVtc1sxMl0udmFsdWUgPSAo aW50KSBRV2lkZ2V0OjpQYWxldHRlQmFja2dyb3VuZDsKICAgIGVudW1fdGJsWzBdLml0ZW1zWzEz XS5rZXkgPSAiUGFsZXR0ZVNoYWRvdyI7CiAgICBlbnVtX3RibFswXS5pdGVtc1sxM10udmFsdWUg PSAoaW50KSBRV2lkZ2V0OjpQYWxldHRlU2hhZG93OwogICAgZW51bV90YmxbMF0uaXRlbXNbMTRd LmtleSA9ICJQYWxldHRlSGlnaGxpZ2h0IjsKICAgIGVudW1fdGJsWzBdLml0ZW1zWzE0XS52YWx1 ZSA9IChpbnQpIFFXaWRnZXQ6OlBhbGV0dGVIaWdobGlnaHQ7CiAgICBlbnVtX3RibFswXS5pdGVt c1sxNV0ua2V5ID0gIlBhbGV0dGVIaWdobGlnaHRlZFRleHQiOwogICAgZW51bV90YmxbMF0uaXRl bXNbMTVdLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFsZXR0ZUhpZ2hsaWdodGVkVGV4dDsKICAg IGVudW1fdGJsWzBdLml0ZW1zWzE2XS5rZXkgPSAiUGFsZXR0ZUJ1dHRvblRleHQiOwogICAgZW51 bV90YmxbMF0uaXRlbXNbMTZdLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFsZXR0ZUJ1dHRvblRl eHQ7CiAgICBlbnVtX3RibFswXS5pdGVtc1sxN10ua2V5ID0gIlgxMVBhcmVudFJlbGF0aXZlIjsK ICAgIGVudW1fdGJsWzBdLml0ZW1zWzE3XS52YWx1ZSA9IChpbnQpIFFXaWRnZXQ6OlgxMVBhcmVu dFJlbGF0aXZlOwogICAgZW51bV90YmxbMV0ubmFtZSA9ICJQcm9wYWdhdGlvbk1vZGUiOwogICAg ZW51bV90YmxbMV0uY291bnQgPSA0OwogICAgZW51bV90YmxbMV0uaXRlbXMgPSBRTWV0YU9iamVj dDo6bmV3X21ldGFlbnVtX2l0ZW0oIDQgKTsKICAgIGVudW1fdGJsWzFdLnNldCA9IEZBTFNFOwog ICAgZW51bV90YmxbMV0uaXRlbXNbMF0ua2V5ID0gIk5vQ2hpbGRyZW4iOwogICAgZW51bV90Ymxb MV0uaXRlbXNbMF0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpOb0NoaWxkcmVuOwogICAgZW51bV90 YmxbMV0uaXRlbXNbMV0ua2V5ID0gIkFsbENoaWxkcmVuIjsKICAgIGVudW1fdGJsWzFdLml0ZW1z WzFdLnZhbHVlID0gKGludCkgUVdpZGdldDo6QWxsQ2hpbGRyZW47CiAgICBlbnVtX3RibFsxXS5p dGVtc1syXS5rZXkgPSAiU2FtZUZvbnQiOwogICAgZW51bV90YmxbMV0uaXRlbXNbMl0udmFsdWUg PSAoaW50KSBRV2lkZ2V0OjpTYW1lRm9udDsKICAgIGVudW1fdGJsWzFdLml0ZW1zWzNdLmtleSA9 ICJTYW1lUGFsZXR0ZSI7CiAgICBlbnVtX3RibFsxXS5pdGVtc1szXS52YWx1ZSA9IChpbnQpIFFX aWRnZXQ6OlNhbWVQYWxldHRlOwogICAgZW51bV90YmxbMl0ubmFtZSA9ICJGb2N1c1BvbGljeSI7 CiAgICBlbnVtX3RibFsyXS5jb3VudCA9IDU7CiAgICBlbnVtX3RibFsyXS5pdGVtcyA9IFFNZXRh T2JqZWN0OjpuZXdfbWV0YWVudW1faXRlbSggNSApOwogICAgZW51bV90YmxbMl0uc2V0ID0gRkFM U0U7CiAgICBlbnVtX3RibFsyXS5pdGVtc1swXS5rZXkgPSAiTm9Gb2N1cyI7CiAgICBlbnVtX3Ri bFsyXS5pdGVtc1swXS52YWx1ZSA9IChpbnQpIFFXaWRnZXQ6Ok5vRm9jdXM7CiAgICBlbnVtX3Ri bFsyXS5pdGVtc1sxXS5rZXkgPSAiVGFiRm9jdXMiOwogICAgZW51bV90YmxbMl0uaXRlbXNbMV0u dmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpUYWJGb2N1czsKICAgIGVudW1fdGJsWzJdLml0ZW1zWzJd LmtleSA9ICJDbGlja0ZvY3VzIjsKICAgIGVudW1fdGJsWzJdLml0ZW1zWzJdLnZhbHVlID0gKGlu dCkgUVdpZGdldDo6Q2xpY2tGb2N1czsKICAgIGVudW1fdGJsWzJdLml0ZW1zWzNdLmtleSA9ICJT dHJvbmdGb2N1cyI7CiAgICBlbnVtX3RibFsyXS5pdGVtc1szXS52YWx1ZSA9IChpbnQpIFFXaWRn ZXQ6OlN0cm9uZ0ZvY3VzOwogICAgZW51bV90YmxbMl0uaXRlbXNbNF0ua2V5ID0gIldoZWVsRm9j dXMiOwogICAgZW51bV90YmxbMl0uaXRlbXNbNF0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpXaGVl bEZvY3VzOwogICAgZW51bV90YmxbM10ubmFtZSA9ICJCYWNrZ3JvdW5kT3JpZ2luIjsKICAgIGVu dW1fdGJsWzNdLmNvdW50ID0gMjsKICAgIGVudW1fdGJsWzNdLml0ZW1zID0gUU1ldGFPYmplY3Q6 Om5ld19tZXRhZW51bV9pdGVtKCAyICk7CiAgICBlbnVtX3RibFszXS5zZXQgPSBGQUxTRTsKICAg IGVudW1fdGJsWzNdLml0ZW1zWzBdLmtleSA9ICJXaWRnZXRPcmlnaW4iOwogICAgZW51bV90Ymxb M10uaXRlbXNbMF0udmFsdWUgPSAoaW50KSBRV2lkZ2V0OjpXaWRnZXRPcmlnaW47CiAgICBlbnVt X3RibFszXS5pdGVtc1sxXS5rZXkgPSAiUGFyZW50T3JpZ2luIjsKICAgIGVudW1fdGJsWzNdLml0 ZW1zWzFdLnZhbHVlID0gKGludCkgUVdpZGdldDo6UGFyZW50T3JpZ2luOwoKCiAgICB0eXBlZGVm IGJvb2wgKFFXaWRnZXQ6OiptM190MCkoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0 Ojoqb20zX3QwKSgpY29uc3Q7CiAgICB0eXBlZGVmIGJvb2wgKFFXaWRnZXQ6OiptM190MykoKWNv bnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3QzKSgpY29uc3Q7CiAgICB0eXBl ZGVmIGJvb2wgKFFXaWRnZXQ6OiptM190NikoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2Jq ZWN0Ojoqb20zX3Q2KSgpY29uc3Q7CiAgICB0eXBlZGVmIGJvb2wgKFFXaWRnZXQ6OiptM190OSko KWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3Q5KSgpY29uc3Q7CiAgICB0 eXBlZGVmIGJvb2wgKFFXaWRnZXQ6OiptM190MTIpKCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAo UU9iamVjdDo6Km9tM190MTIpKCljb25zdDsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0z X3QxMykoYm9vbCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDEzKShib29sKTsK ICAgIHR5cGVkZWYgY29uc3QgUVJlY3QmIChRV2lkZ2V0OjoqbTNfdDE1KSgpY29uc3Q7CiAgICB0 eXBlZGVmIGNvbnN0IFFSZWN0JiAoUU9iamVjdDo6Km9tM190MTUpKCljb25zdDsKICAgIHR5cGVk ZWYgdm9pZCAoUVdpZGdldDo6Km0zX3QxNikoY29uc3QgUVJlY3QmKTsKICAgIHR5cGVkZWYgdm9p ZCAoUU9iamVjdDo6Km9tM190MTYpKGNvbnN0IFFSZWN0Jik7CiAgICB0eXBlZGVmIFFSZWN0IChR V2lkZ2V0OjoqbTNfdDE4KSgpY29uc3Q7CiAgICB0eXBlZGVmIFFSZWN0IChRT2JqZWN0Ojoqb20z X3QxOCkoKWNvbnN0OwogICAgdHlwZWRlZiBpbnQgKFFXaWRnZXQ6OiptM190MjEpKCljb25zdDsK ICAgIHR5cGVkZWYgaW50IChRT2JqZWN0Ojoqb20zX3QyMSkoKWNvbnN0OwogICAgdHlwZWRlZiBp bnQgKFFXaWRnZXQ6OiptM190MjQpKCljb25zdDsKICAgIHR5cGVkZWYgaW50IChRT2JqZWN0Ojoq b20zX3QyNCkoKWNvbnN0OwogICAgdHlwZWRlZiBRUG9pbnQgKFFXaWRnZXQ6OiptM190MjcpKClj b25zdDsKICAgIHR5cGVkZWYgUVBvaW50IChRT2JqZWN0Ojoqb20zX3QyNykoKWNvbnN0OwogICAg dHlwZWRlZiBRU2l6ZSAoUVdpZGdldDo6Km0zX3QzMCkoKWNvbnN0OwogICAgdHlwZWRlZiBRU2l6 ZSAoUU9iamVjdDo6Km9tM190MzApKCljb25zdDsKICAgIHR5cGVkZWYgUVNpemUgKFFXaWRnZXQ6 OiptM190MzMpKCljb25zdDsKICAgIHR5cGVkZWYgUVNpemUgKFFPYmplY3Q6OipvbTNfdDMzKSgp Y29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190MzQpKGNvbnN0IFFTaXplJik7 CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDM0KShjb25zdCBRU2l6ZSYpOwogICAg dHlwZWRlZiBpbnQgKFFXaWRnZXQ6OiptM190MzYpKCljb25zdDsKICAgIHR5cGVkZWYgaW50IChR T2JqZWN0Ojoqb20zX3QzNikoKWNvbnN0OwogICAgdHlwZWRlZiBpbnQgKFFXaWRnZXQ6OiptM190 MzkpKCljb25zdDsKICAgIHR5cGVkZWYgaW50IChRT2JqZWN0Ojoqb20zX3QzOSkoKWNvbnN0Owog ICAgdHlwZWRlZiBRUmVjdCAoUVdpZGdldDo6Km0zX3Q0MikoKWNvbnN0OwogICAgdHlwZWRlZiBR UmVjdCAoUU9iamVjdDo6Km9tM190NDIpKCljb25zdDsKICAgIHR5cGVkZWYgUVJlY3QgKFFXaWRn ZXQ6OiptM190NDUpKCljb25zdDsKICAgIHR5cGVkZWYgUVJlY3QgKFFPYmplY3Q6OipvbTNfdDQ1 KSgpY29uc3Q7CiAgICB0eXBlZGVmIFFSZWdpb24gKFFXaWRnZXQ6OiptM190NDgpKCljb25zdDsK ICAgIHR5cGVkZWYgUVJlZ2lvbiAoUU9iamVjdDo6Km9tM190NDgpKCljb25zdDsKICAgIHR5cGVk ZWYgUVNpemVQb2xpY3kgKFFXaWRnZXQ6OiptM190NTEpKCljb25zdDsKICAgIHR5cGVkZWYgUVNp emVQb2xpY3kgKFFPYmplY3Q6OipvbTNfdDUxKSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFX aWRnZXQ6OiptM190NTIpKFFTaXplUG9saWN5KTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6 Km9tM190NTIpKFFTaXplUG9saWN5KTsKICAgIHR5cGVkZWYgUVNpemUgKFFXaWRnZXQ6OiptM190 NTQpKCljb25zdDsKICAgIHR5cGVkZWYgUVNpemUgKFFPYmplY3Q6OipvbTNfdDU0KSgpY29uc3Q7 CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190NTUpKGNvbnN0IFFTaXplJik7CiAgICB0 eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDU1KShjb25zdCBRU2l6ZSYpOwogICAgdHlwZWRl ZiBRU2l6ZSAoUVdpZGdldDo6Km0zX3Q1NykoKWNvbnN0OwogICAgdHlwZWRlZiBRU2l6ZSAoUU9i amVjdDo6Km9tM190NTcpKCljb25zdDsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0zX3Q1 OCkoY29uc3QgUVNpemUmKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190NTgpKGNv bnN0IFFTaXplJik7CiAgICB0eXBlZGVmIGludCAoUVdpZGdldDo6Km0zX3Q2MCkoKWNvbnN0Owog ICAgdHlwZWRlZiBpbnQgKFFPYmplY3Q6OipvbTNfdDYwKSgpY29uc3Q7CiAgICB0eXBlZGVmIHZv aWQgKFFXaWRnZXQ6OiptM190NjEpKGludCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6Oipv bTNfdDYxKShpbnQpOwogICAgdHlwZWRlZiBpbnQgKFFXaWRnZXQ6OiptM190NjMpKCljb25zdDsK ICAgIHR5cGVkZWYgaW50IChRT2JqZWN0Ojoqb20zX3Q2MykoKWNvbnN0OwogICAgdHlwZWRlZiB2 b2lkIChRV2lkZ2V0OjoqbTNfdDY0KShpbnQpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoq b20zX3Q2NCkoaW50KTsKICAgIHR5cGVkZWYgaW50IChRV2lkZ2V0OjoqbTNfdDY2KSgpY29uc3Q7 CiAgICB0eXBlZGVmIGludCAoUU9iamVjdDo6Km9tM190NjYpKCljb25zdDsKICAgIHR5cGVkZWYg dm9pZCAoUVdpZGdldDo6Km0zX3Q2NykoaW50KTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6 Km9tM190NjcpKGludCk7CiAgICB0eXBlZGVmIGludCAoUVdpZGdldDo6Km0zX3Q2OSkoKWNvbnN0 OwogICAgdHlwZWRlZiBpbnQgKFFPYmplY3Q6OipvbTNfdDY5KSgpY29uc3Q7CiAgICB0eXBlZGVm IHZvaWQgKFFXaWRnZXQ6OiptM190NzApKGludCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6 OipvbTNfdDcwKShpbnQpOwogICAgdHlwZWRlZiBRU2l6ZSAoUVdpZGdldDo6Km0zX3Q3MikoKWNv bnN0OwogICAgdHlwZWRlZiBRU2l6ZSAoUU9iamVjdDo6Km9tM190NzIpKCljb25zdDsKICAgIHR5 cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0zX3Q3MykoY29uc3QgUVNpemUmKTsKICAgIHR5cGVkZWYg dm9pZCAoUU9iamVjdDo6Km9tM190NzMpKGNvbnN0IFFTaXplJik7CiAgICB0eXBlZGVmIFFTaXpl IChRV2lkZ2V0OjoqbTNfdDc1KSgpY29uc3Q7CiAgICB0eXBlZGVmIFFTaXplIChRT2JqZWN0Ojoq b20zX3Q3NSkoKWNvbnN0OwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTNfdDc2KShjb25z dCBRU2l6ZSYpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20zX3Q3NikoY29uc3QgUVNp emUmKTsKICAgIHR5cGVkZWYgQmFja2dyb3VuZE1vZGUgKFFXaWRnZXQ6OiptM190NzgpKCljb25z dDsKICAgIHR5cGVkZWYgQmFja2dyb3VuZE1vZGUgKFFPYmplY3Q6OipvbTNfdDc4KSgpY29uc3Q7 CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190NzkpKEJhY2tncm91bmRNb2RlKTsKICAg IHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190NzkpKEJhY2tncm91bmRNb2RlKTsKICAgIHR5 cGVkZWYgY29uc3QgUUNvbG9yJiAoUVdpZGdldDo6Km0zX3Q4MSkoKWNvbnN0OwogICAgdHlwZWRl ZiBjb25zdCBRQ29sb3ImIChRT2JqZWN0Ojoqb20zX3Q4MSkoKWNvbnN0OwogICAgdHlwZWRlZiB2 b2lkIChRV2lkZ2V0OjoqbTNfdDgyKShjb25zdCBRQ29sb3ImKTsKICAgIHR5cGVkZWYgdm9pZCAo UU9iamVjdDo6Km9tM190ODIpKGNvbnN0IFFDb2xvciYpOwogICAgdHlwZWRlZiBjb25zdCBRQ29s b3ImIChRV2lkZ2V0OjoqbTNfdDg0KSgpY29uc3Q7CiAgICB0eXBlZGVmIGNvbnN0IFFDb2xvciYg KFFPYmplY3Q6OipvbTNfdDg0KSgpY29uc3Q7CiAgICB0eXBlZGVmIGNvbnN0IFFQaXhtYXAqIChR V2lkZ2V0OjoqbTNfdDg3KSgpY29uc3Q7CiAgICB0eXBlZGVmIGNvbnN0IFFQaXhtYXAqIChRT2Jq ZWN0Ojoqb20zX3Q4NykoKWNvbnN0OwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTNfdDg4 KShjb25zdCBRUGl4bWFwJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDg4KShj b25zdCBRUGl4bWFwJik7CiAgICB0eXBlZGVmIGNvbnN0IFFDb2xvckdyb3VwJiAoUVdpZGdldDo6 Km0zX3Q5MCkoKWNvbnN0OwogICAgdHlwZWRlZiBjb25zdCBRQ29sb3JHcm91cCYgKFFPYmplY3Q6 OipvbTNfdDkwKSgpY29uc3Q7CiAgICB0eXBlZGVmIGNvbnN0IFFQYWxldHRlJiAoUVdpZGdldDo6 Km0zX3Q5MykoKWNvbnN0OwogICAgdHlwZWRlZiBjb25zdCBRUGFsZXR0ZSYgKFFPYmplY3Q6Oipv bTNfdDkzKSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190OTQpKGNvbnN0 IFFQYWxldHRlJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDk0KShjb25zdCBR UGFsZXR0ZSYpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTNfdDk1KSgpOwogICAgdHlw ZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20zX3Q5NSkoKTsKICAgIHR5cGVkZWYgYm9vbCAoUVdpZGdl dDo6Km0zX3Q5NikoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3Q5Niko KWNvbnN0OwogICAgdHlwZWRlZiBRRm9udCAoUVdpZGdldDo6Km0zX3Q5OSkoKWNvbnN0OwogICAg dHlwZWRlZiBRRm9udCAoUU9iamVjdDo6Km9tM190OTkpKCljb25zdDsKICAgIHR5cGVkZWYgdm9p ZCAoUVdpZGdldDo6Km0zX3QxMDApKGNvbnN0IFFGb250Jik7CiAgICB0eXBlZGVmIHZvaWQgKFFP YmplY3Q6OipvbTNfdDEwMCkoY29uc3QgUUZvbnQmKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdl dDo6Km0zX3QxMDEpKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDEwMSkoKTsK ICAgIHR5cGVkZWYgYm9vbCAoUVdpZGdldDo6Km0zX3QxMDIpKCljb25zdDsKICAgIHR5cGVkZWYg Ym9vbCAoUU9iamVjdDo6Km9tM190MTAyKSgpY29uc3Q7CiAgICB0eXBlZGVmIGNvbnN0IFFDdXJz b3ImIChRV2lkZ2V0OjoqbTNfdDEwNSkoKWNvbnN0OwogICAgdHlwZWRlZiBjb25zdCBRQ3Vyc29y JiAoUU9iamVjdDo6Km9tM190MTA1KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6 OiptM190MTA2KShjb25zdCBRQ3Vyc29yJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6Oipv bTNfdDEwNikoY29uc3QgUUN1cnNvciYpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTNf dDEwNykoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190MTA3KSgpOwogICAgdHlw ZWRlZiBib29sIChRV2lkZ2V0OjoqbTNfdDEwOCkoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChR T2JqZWN0Ojoqb20zX3QxMDgpKCljb25zdDsKICAgIHR5cGVkZWYgUVN0cmluZyAoUVdpZGdldDo6 Km0zX3QxMTEpKCljb25zdDsKICAgIHR5cGVkZWYgUVN0cmluZyAoUU9iamVjdDo6Km9tM190MTEx KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190MTEyKShjb25zdCBRU3Ry aW5nJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTNfdDExMikoY29uc3QgUVN0cmlu ZyYpOwogICAgdHlwZWRlZiBjb25zdCBRUGl4bWFwKiAoUVdpZGdldDo6Km0zX3QxMTQpKCljb25z dDsKICAgIHR5cGVkZWYgY29uc3QgUVBpeG1hcCogKFFPYmplY3Q6OipvbTNfdDExNCkoKWNvbnN0 OwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTNfdDExNSkoY29uc3QgUVBpeG1hcCYpOwog ICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20zX3QxMTUpKGNvbnN0IFFQaXhtYXAmKTsKICAg IHR5cGVkZWYgUVN0cmluZyAoUVdpZGdldDo6Km0zX3QxMTcpKCljb25zdDsKICAgIHR5cGVkZWYg UVN0cmluZyAoUU9iamVjdDo6Km9tM190MTE3KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFX aWRnZXQ6OiptM190MTE4KShjb25zdCBRU3RyaW5nJik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmpl Y3Q6OipvbTNfdDExOCkoY29uc3QgUVN0cmluZyYpOwogICAgdHlwZWRlZiBib29sIChRV2lkZ2V0 OjoqbTNfdDEyMCkoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3QxMjAp KCljb25zdDsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0zX3QxMjEpKGJvb2wpOwogICAg dHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20zX3QxMjEpKGJvb2wpOwogICAgdHlwZWRlZiBib29s IChRV2lkZ2V0OjoqbTNfdDEyMykoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoq b20zX3QxMjMpKCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUVdpZGdldDo6Km0zX3QxMjYpKClj b25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUU9iamVjdDo6Km9tM190MTI2KSgpY29uc3Q7CiAgICB0 eXBlZGVmIEZvY3VzUG9saWN5IChRV2lkZ2V0OjoqbTNfdDEyOSkoKWNvbnN0OwogICAgdHlwZWRl ZiBGb2N1c1BvbGljeSAoUU9iamVjdDo6Km9tM190MTI5KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZv aWQgKFFXaWRnZXQ6OiptM190MTMwKShGb2N1c1BvbGljeSk7CiAgICB0eXBlZGVmIHZvaWQgKFFP YmplY3Q6OipvbTNfdDEzMCkoRm9jdXNQb2xpY3kpOwogICAgdHlwZWRlZiBib29sIChRV2lkZ2V0 OjoqbTNfdDEzMikoKWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3QxMzIp KCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUVdpZGdldDo6Km0zX3QxMzUpKCljb25zdDsKICAg IHR5cGVkZWYgYm9vbCAoUU9iamVjdDo6Km9tM190MTM1KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZv aWQgKFFXaWRnZXQ6OiptM190MTM2KShib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6 Km9tM190MTM2KShib29sKTsKICAgIHR5cGVkZWYgYm9vbCAoUVdpZGdldDo6Km0zX3QxMzgpKClj b25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUU9iamVjdDo6Km9tM190MTM4KSgpY29uc3Q7CiAgICB0 eXBlZGVmIFFSZWN0IChRV2lkZ2V0OjoqbTNfdDE0MSkoKWNvbnN0OwogICAgdHlwZWRlZiBRUmVj dCAoUU9iamVjdDo6Km9tM190MTQxKSgpY29uc3Q7CiAgICB0eXBlZGVmIGJvb2wgKFFXaWRnZXQ6 OiptM190MTQ0KSgpY29uc3Q7CiAgICB0eXBlZGVmIGJvb2wgKFFPYmplY3Q6OipvbTNfdDE0NCko KWNvbnN0OwogICAgdHlwZWRlZiBib29sIChRV2lkZ2V0OjoqbTNfdDE0NykoKWNvbnN0OwogICAg dHlwZWRlZiBib29sIChRT2JqZWN0Ojoqb20zX3QxNDcpKCljb25zdDsKICAgIHR5cGVkZWYgUVNp emUgKFFXaWRnZXQ6OiptM190MTUwKSgpY29uc3Q7CiAgICB0eXBlZGVmIFFTaXplIChRT2JqZWN0 Ojoqb20zX3QxNTApKCljb25zdDsKICAgIHR5cGVkZWYgUVNpemUgKFFXaWRnZXQ6OiptM190MTUz KSgpY29uc3Q7CiAgICB0eXBlZGVmIFFTaXplIChRT2JqZWN0Ojoqb20zX3QxNTMpKCljb25zdDsK ICAgIHR5cGVkZWYgUVJlY3QgKFFXaWRnZXQ6OiptM190MTU2KSgpY29uc3Q7CiAgICB0eXBlZGVm IFFSZWN0IChRT2JqZWN0Ojoqb20zX3QxNTYpKCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUVdp ZGdldDo6Km0zX3QxNTkpKCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUU9iamVjdDo6Km9tM190 MTU5KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190MTYwKShib29sKTsK ICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190MTYwKShib29sKTsKICAgIHR5cGVkZWYg Ym9vbCAoUVdpZGdldDo6Km0zX3QxNjIpKCljb25zdDsKICAgIHR5cGVkZWYgYm9vbCAoUU9iamVj dDo6Km9tM190MTYyKSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190MTYz KShib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190MTYzKShib29sKTsKICAg IHR5cGVkZWYgQmFja2dyb3VuZE9yaWdpbiAoUVdpZGdldDo6Km0zX3QxNjUpKCljb25zdDsKICAg IHR5cGVkZWYgQmFja2dyb3VuZE9yaWdpbiAoUU9iamVjdDo6Km9tM190MTY1KSgpY29uc3Q7CiAg ICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptM190MTY2KShCYWNrZ3JvdW5kT3JpZ2luKTsKICAg IHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tM190MTY2KShCYWNrZ3JvdW5kT3JpZ2luKTsKICAg IHR5cGVkZWYgYm9vbCAoUVdpZGdldDo6Km0zX3QxNjgpKCljb25zdDsKICAgIHR5cGVkZWYgYm9v bCAoUU9iamVjdDo6Km9tM190MTY4KSgpY29uc3Q7CiAgICBtM190MCB2M18wID0gJlFXaWRnZXQ6 OmlzVG9wTGV2ZWw7CiAgICBvbTNfdDAgb3YzXzAgPSAob20zX3QwKXYzXzA7CiAgICBtM190MyB2 M18zID0gJlFXaWRnZXQ6OmlzTW9kYWw7CiAgICBvbTNfdDMgb3YzXzMgPSAob20zX3QzKXYzXzM7 CiAgICBtM190NiB2M182ID0gJlFXaWRnZXQ6OmlzUG9wdXA7CiAgICBvbTNfdDYgb3YzXzYgPSAo b20zX3Q2KXYzXzY7CiAgICBtM190OSB2M185ID0gJlFXaWRnZXQ6OmlzRGVza3RvcDsKICAgIG9t M190OSBvdjNfOSA9IChvbTNfdDkpdjNfOTsKICAgIG0zX3QxMiB2M18xMiA9ICZRV2lkZ2V0Ojpp c0VuYWJsZWQ7CiAgICBvbTNfdDEyIG92M18xMiA9IChvbTNfdDEyKXYzXzEyOwogICAgbTNfdDEz IHYzXzEzID0gJlFXaWRnZXQ6OnNldEVuYWJsZWQ7CiAgICBvbTNfdDEzIG92M18xMyA9IChvbTNf dDEzKXYzXzEzOwogICAgbTNfdDE1IHYzXzE1ID0gJlFXaWRnZXQ6Omdlb21ldHJ5OwogICAgb20z X3QxNSBvdjNfMTUgPSAob20zX3QxNSl2M18xNTsKICAgIG0zX3QxNiB2M18xNiA9ICZRV2lkZ2V0 OjpzZXRHZW9tZXRyeTsKICAgIG9tM190MTYgb3YzXzE2ID0gKG9tM190MTYpdjNfMTY7CiAgICBt M190MTggdjNfMTggPSAmUVdpZGdldDo6ZnJhbWVHZW9tZXRyeTsKICAgIG9tM190MTggb3YzXzE4 ID0gKG9tM190MTgpdjNfMTg7CiAgICBtM190MjEgdjNfMjEgPSAmUVdpZGdldDo6eDsKICAgIG9t M190MjEgb3YzXzIxID0gKG9tM190MjEpdjNfMjE7CiAgICBtM190MjQgdjNfMjQgPSAmUVdpZGdl dDo6eTsKICAgIG9tM190MjQgb3YzXzI0ID0gKG9tM190MjQpdjNfMjQ7CiAgICBtM190MjcgdjNf MjcgPSAmUVdpZGdldDo6cG9zOwogICAgb20zX3QyNyBvdjNfMjcgPSAob20zX3QyNyl2M18yNzsK ICAgIG0zX3QzMCB2M18zMCA9ICZRV2lkZ2V0OjpmcmFtZVNpemU7CiAgICBvbTNfdDMwIG92M18z MCA9IChvbTNfdDMwKXYzXzMwOwogICAgbTNfdDMzIHYzXzMzID0gJlFXaWRnZXQ6OnNpemU7CiAg ICBvbTNfdDMzIG92M18zMyA9IChvbTNfdDMzKXYzXzMzOwogICAgbTNfdDM0IHYzXzM0ID0gJlFX aWRnZXQ6OnJlc2l6ZTsKICAgIG9tM190MzQgb3YzXzM0ID0gKG9tM190MzQpdjNfMzQ7CiAgICBt M190MzYgdjNfMzYgPSAmUVdpZGdldDo6d2lkdGg7CiAgICBvbTNfdDM2IG92M18zNiA9IChvbTNf dDM2KXYzXzM2OwogICAgbTNfdDM5IHYzXzM5ID0gJlFXaWRnZXQ6OmhlaWdodDsKICAgIG9tM190 Mzkgb3YzXzM5ID0gKG9tM190MzkpdjNfMzk7CiAgICBtM190NDIgdjNfNDIgPSAmUVdpZGdldDo6 cmVjdDsKICAgIG9tM190NDIgb3YzXzQyID0gKG9tM190NDIpdjNfNDI7CiAgICBtM190NDUgdjNf NDUgPSAmUVdpZGdldDo6Y2hpbGRyZW5SZWN0OwogICAgb20zX3Q0NSBvdjNfNDUgPSAob20zX3Q0 NSl2M180NTsKICAgIG0zX3Q0OCB2M180OCA9ICZRV2lkZ2V0OjpjaGlsZHJlblJlZ2lvbjsKICAg IG9tM190NDggb3YzXzQ4ID0gKG9tM190NDgpdjNfNDg7CiAgICBtM190NTEgdjNfNTEgPSAmUVdp ZGdldDo6c2l6ZVBvbGljeTsKICAgIG9tM190NTEgb3YzXzUxID0gKG9tM190NTEpdjNfNTE7CiAg ICBtM190NTIgdjNfNTIgPSAmUVdpZGdldDo6c2V0U2l6ZVBvbGljeTsKICAgIG9tM190NTIgb3Yz XzUyID0gKG9tM190NTIpdjNfNTI7CiAgICBtM190NTQgdjNfNTQgPSAmUVdpZGdldDo6bWluaW11 bVNpemU7CiAgICBvbTNfdDU0IG92M181NCA9IChvbTNfdDU0KXYzXzU0OwogICAgbTNfdDU1IHYz XzU1ID0gJlFXaWRnZXQ6OnNldE1pbmltdW1TaXplOwogICAgb20zX3Q1NSBvdjNfNTUgPSAob20z X3Q1NSl2M181NTsKICAgIG0zX3Q1NyB2M181NyA9ICZRV2lkZ2V0OjptYXhpbXVtU2l6ZTsKICAg IG9tM190NTcgb3YzXzU3ID0gKG9tM190NTcpdjNfNTc7CiAgICBtM190NTggdjNfNTggPSAmUVdp ZGdldDo6c2V0TWF4aW11bVNpemU7CiAgICBvbTNfdDU4IG92M181OCA9IChvbTNfdDU4KXYzXzU4 OwogICAgbTNfdDYwIHYzXzYwID0gJlFXaWRnZXQ6Om1pbmltdW1XaWR0aDsKICAgIG9tM190NjAg b3YzXzYwID0gKG9tM190NjApdjNfNjA7CiAgICBtM190NjEgdjNfNjEgPSAmUVdpZGdldDo6c2V0 TWluaW11bVdpZHRoOwogICAgb20zX3Q2MSBvdjNfNjEgPSAob20zX3Q2MSl2M182MTsKICAgIG0z X3Q2MyB2M182MyA9ICZRV2lkZ2V0OjptaW5pbXVtSGVpZ2h0OwogICAgb20zX3Q2MyBvdjNfNjMg PSAob20zX3Q2Myl2M182MzsKICAgIG0zX3Q2NCB2M182NCA9ICZRV2lkZ2V0OjpzZXRNaW5pbXVt SGVpZ2h0OwogICAgb20zX3Q2NCBvdjNfNjQgPSAob20zX3Q2NCl2M182NDsKICAgIG0zX3Q2NiB2 M182NiA9ICZRV2lkZ2V0OjptYXhpbXVtV2lkdGg7CiAgICBvbTNfdDY2IG92M182NiA9IChvbTNf dDY2KXYzXzY2OwogICAgbTNfdDY3IHYzXzY3ID0gJlFXaWRnZXQ6OnNldE1heGltdW1XaWR0aDsK ICAgIG9tM190Njcgb3YzXzY3ID0gKG9tM190NjcpdjNfNjc7CiAgICBtM190NjkgdjNfNjkgPSAm UVdpZGdldDo6bWF4aW11bUhlaWdodDsKICAgIG9tM190Njkgb3YzXzY5ID0gKG9tM190NjkpdjNf Njk7CiAgICBtM190NzAgdjNfNzAgPSAmUVdpZGdldDo6c2V0TWF4aW11bUhlaWdodDsKICAgIG9t M190NzAgb3YzXzcwID0gKG9tM190NzApdjNfNzA7CiAgICBtM190NzIgdjNfNzIgPSAmUVdpZGdl dDo6c2l6ZUluY3JlbWVudDsKICAgIG9tM190NzIgb3YzXzcyID0gKG9tM190NzIpdjNfNzI7CiAg ICBtM190NzMgdjNfNzMgPSAmUVdpZGdldDo6c2V0U2l6ZUluY3JlbWVudDsKICAgIG9tM190NzMg b3YzXzczID0gKG9tM190NzMpdjNfNzM7CiAgICBtM190NzUgdjNfNzUgPSAmUVdpZGdldDo6YmFz ZVNpemU7CiAgICBvbTNfdDc1IG92M183NSA9IChvbTNfdDc1KXYzXzc1OwogICAgbTNfdDc2IHYz Xzc2ID0gJlFXaWRnZXQ6OnNldEJhc2VTaXplOwogICAgb20zX3Q3NiBvdjNfNzYgPSAob20zX3Q3 Nil2M183NjsKICAgIG0zX3Q3OCB2M183OCA9ICZRV2lkZ2V0OjpiYWNrZ3JvdW5kTW9kZTsKICAg IG9tM190Nzggb3YzXzc4ID0gKG9tM190NzgpdjNfNzg7CiAgICBtM190NzkgdjNfNzkgPSAmUVdp ZGdldDo6c2V0QmFja2dyb3VuZE1vZGU7CiAgICBvbTNfdDc5IG92M183OSA9IChvbTNfdDc5KXYz Xzc5OwogICAgbTNfdDgxIHYzXzgxID0gJlFXaWRnZXQ6OmJhY2tncm91bmRDb2xvcjsKICAgIG9t M190ODEgb3YzXzgxID0gKG9tM190ODEpdjNfODE7CiAgICBtM190ODIgdjNfODIgPSAmUVdpZGdl dDo6c2V0QmFja2dyb3VuZENvbG9yOwogICAgb20zX3Q4MiBvdjNfODIgPSAob20zX3Q4Mil2M184 MjsKICAgIG0zX3Q4NCB2M184NCA9ICZRV2lkZ2V0Ojpmb3JlZ3JvdW5kQ29sb3I7CiAgICBvbTNf dDg0IG92M184NCA9IChvbTNfdDg0KXYzXzg0OwogICAgbTNfdDg3IHYzXzg3ID0gJlFXaWRnZXQ6 OmJhY2tncm91bmRQaXhtYXA7CiAgICBvbTNfdDg3IG92M184NyA9IChvbTNfdDg3KXYzXzg3Owog ICAgbTNfdDg4IHYzXzg4ID0gJlFXaWRnZXQ6OnNldEJhY2tncm91bmRQaXhtYXA7CiAgICBvbTNf dDg4IG92M184OCA9IChvbTNfdDg4KXYzXzg4OwogICAgbTNfdDkwIHYzXzkwID0gJlFXaWRnZXQ6 OmNvbG9yR3JvdXA7CiAgICBvbTNfdDkwIG92M185MCA9IChvbTNfdDkwKXYzXzkwOwogICAgbTNf dDkzIHYzXzkzID0gJlFXaWRnZXQ6OnBhbGV0dGU7CiAgICBvbTNfdDkzIG92M185MyA9IChvbTNf dDkzKXYzXzkzOwogICAgbTNfdDk0IHYzXzk0ID0gJlFXaWRnZXQ6OnNldFBhbGV0dGU7CiAgICBv bTNfdDk0IG92M185NCA9IChvbTNfdDk0KXYzXzk0OwogICAgbTNfdDk1IHYzXzk1ID0gJlFXaWRn ZXQ6OnVuc2V0UGFsZXR0ZTsKICAgIG9tM190OTUgb3YzXzk1ID0gKG9tM190OTUpdjNfOTU7CiAg ICBtM190OTYgdjNfOTYgPSAmUVdpZGdldDo6b3duUGFsZXR0ZTsKICAgIG9tM190OTYgb3YzXzk2 ID0gKG9tM190OTYpdjNfOTY7CiAgICBtM190OTkgdjNfOTkgPSAmUVdpZGdldDo6Zm9udDsKICAg IG9tM190OTkgb3YzXzk5ID0gKG9tM190OTkpdjNfOTk7CiAgICBtM190MTAwIHYzXzEwMCA9ICZR V2lkZ2V0OjpzZXRGb250OwogICAgb20zX3QxMDAgb3YzXzEwMCA9IChvbTNfdDEwMCl2M18xMDA7 CiAgICBtM190MTAxIHYzXzEwMSA9ICZRV2lkZ2V0Ojp1bnNldEZvbnQ7CiAgICBvbTNfdDEwMSBv djNfMTAxID0gKG9tM190MTAxKXYzXzEwMTsKICAgIG0zX3QxMDIgdjNfMTAyID0gJlFXaWRnZXQ6 Om93bkZvbnQ7CiAgICBvbTNfdDEwMiBvdjNfMTAyID0gKG9tM190MTAyKXYzXzEwMjsKICAgIG0z X3QxMDUgdjNfMTA1ID0gJlFXaWRnZXQ6OmN1cnNvcjsKICAgIG9tM190MTA1IG92M18xMDUgPSAo b20zX3QxMDUpdjNfMTA1OwogICAgbTNfdDEwNiB2M18xMDYgPSAmUVdpZGdldDo6c2V0Q3Vyc29y OwogICAgb20zX3QxMDYgb3YzXzEwNiA9IChvbTNfdDEwNil2M18xMDY7CiAgICBtM190MTA3IHYz XzEwNyA9ICZRV2lkZ2V0Ojp1bnNldEN1cnNvcjsKICAgIG9tM190MTA3IG92M18xMDcgPSAob20z X3QxMDcpdjNfMTA3OwogICAgbTNfdDEwOCB2M18xMDggPSAmUVdpZGdldDo6b3duQ3Vyc29yOwog ICAgb20zX3QxMDggb3YzXzEwOCA9IChvbTNfdDEwOCl2M18xMDg7CiAgICBtM190MTExIHYzXzEx MSA9ICZRV2lkZ2V0OjpjYXB0aW9uOwogICAgb20zX3QxMTEgb3YzXzExMSA9IChvbTNfdDExMSl2 M18xMTE7CiAgICBtM190MTEyIHYzXzExMiA9ICZRV2lkZ2V0OjpzZXRDYXB0aW9uOwogICAgb20z X3QxMTIgb3YzXzExMiA9IChvbTNfdDExMil2M18xMTI7CiAgICBtM190MTE0IHYzXzExNCA9ICZR V2lkZ2V0OjppY29uOwogICAgb20zX3QxMTQgb3YzXzExNCA9IChvbTNfdDExNCl2M18xMTQ7CiAg ICBtM190MTE1IHYzXzExNSA9ICZRV2lkZ2V0OjpzZXRJY29uOwogICAgb20zX3QxMTUgb3YzXzEx NSA9IChvbTNfdDExNSl2M18xMTU7CiAgICBtM190MTE3IHYzXzExNyA9ICZRV2lkZ2V0OjppY29u VGV4dDsKICAgIG9tM190MTE3IG92M18xMTcgPSAob20zX3QxMTcpdjNfMTE3OwogICAgbTNfdDEx OCB2M18xMTggPSAmUVdpZGdldDo6c2V0SWNvblRleHQ7CiAgICBvbTNfdDExOCBvdjNfMTE4ID0g KG9tM190MTE4KXYzXzExODsKICAgIG0zX3QxMjAgdjNfMTIwID0gJlFXaWRnZXQ6Omhhc01vdXNl VHJhY2tpbmc7CiAgICBvbTNfdDEyMCBvdjNfMTIwID0gKG9tM190MTIwKXYzXzEyMDsKICAgIG0z X3QxMjEgdjNfMTIxID0gJlFXaWRnZXQ6OnNldE1vdXNlVHJhY2tpbmc7CiAgICBvbTNfdDEyMSBv djNfMTIxID0gKG9tM190MTIxKXYzXzEyMTsKICAgIG0zX3QxMjMgdjNfMTIzID0gJlFXaWRnZXQ6 OmlzQWN0aXZlV2luZG93OwogICAgb20zX3QxMjMgb3YzXzEyMyA9IChvbTNfdDEyMyl2M18xMjM7 CiAgICBtM190MTI2IHYzXzEyNiA9ICZRV2lkZ2V0Ojppc0ZvY3VzRW5hYmxlZDsKICAgIG9tM190 MTI2IG92M18xMjYgPSAob20zX3QxMjYpdjNfMTI2OwogICAgbTNfdDEyOSB2M18xMjkgPSAmUVdp ZGdldDo6Zm9jdXNQb2xpY3k7CiAgICBvbTNfdDEyOSBvdjNfMTI5ID0gKG9tM190MTI5KXYzXzEy OTsKICAgIG0zX3QxMzAgdjNfMTMwID0gJlFXaWRnZXQ6OnNldEZvY3VzUG9saWN5OwogICAgb20z X3QxMzAgb3YzXzEzMCA9IChvbTNfdDEzMCl2M18xMzA7CiAgICBtM190MTMyIHYzXzEzMiA9ICZR V2lkZ2V0OjpoYXNGb2N1czsKICAgIG9tM190MTMyIG92M18xMzIgPSAob20zX3QxMzIpdjNfMTMy OwogICAgbTNfdDEzNSB2M18xMzUgPSAmUVdpZGdldDo6aXNVcGRhdGVzRW5hYmxlZDsKICAgIG9t M190MTM1IG92M18xMzUgPSAob20zX3QxMzUpdjNfMTM1OwogICAgbTNfdDEzNiB2M18xMzYgPSAm UVdpZGdldDo6c2V0VXBkYXRlc0VuYWJsZWQ7CiAgICBvbTNfdDEzNiBvdjNfMTM2ID0gKG9tM190 MTM2KXYzXzEzNjsKICAgIG0zX3QxMzggdjNfMTM4ID0gJlFXaWRnZXQ6OmlzVmlzaWJsZTsKICAg IG9tM190MTM4IG92M18xMzggPSAob20zX3QxMzgpdjNfMTM4OwogICAgbTNfdDE0MSB2M18xNDEg PSAmUVdpZGdldDo6dmlzaWJsZVJlY3Q7CiAgICBvbTNfdDE0MSBvdjNfMTQxID0gKG9tM190MTQx KXYzXzE0MTsKICAgIG0zX3QxNDQgdjNfMTQ0ID0gJlFXaWRnZXQ6OmlzSGlkZGVuOwogICAgb20z X3QxNDQgb3YzXzE0NCA9IChvbTNfdDE0NCl2M18xNDQ7CiAgICBtM190MTQ3IHYzXzE0NyA9ICZR V2lkZ2V0Ojppc01pbmltaXplZDsKICAgIG9tM190MTQ3IG92M18xNDcgPSAob20zX3QxNDcpdjNf MTQ3OwogICAgbTNfdDE1MCB2M18xNTAgPSAmUVdpZGdldDo6c2l6ZUhpbnQ7CiAgICBvbTNfdDE1 MCBvdjNfMTUwID0gKG9tM190MTUwKXYzXzE1MDsKICAgIG0zX3QxNTMgdjNfMTUzID0gJlFXaWRn ZXQ6Om1pbmltdW1TaXplSGludDsKICAgIG9tM190MTUzIG92M18xNTMgPSAob20zX3QxNTMpdjNf MTUzOwogICAgbTNfdDE1NiB2M18xNTYgPSAmUVdpZGdldDo6bWljcm9Gb2N1c0hpbnQ7CiAgICBv bTNfdDE1NiBvdjNfMTU2ID0gKG9tM190MTU2KXYzXzE1NjsKICAgIG0zX3QxNTkgdjNfMTU5ID0g JlFXaWRnZXQ6OmFjY2VwdERyb3BzOwogICAgb20zX3QxNTkgb3YzXzE1OSA9IChvbTNfdDE1OSl2 M18xNTk7CiAgICBtM190MTYwIHYzXzE2MCA9ICZRV2lkZ2V0OjpzZXRBY2NlcHREcm9wczsKICAg IG9tM190MTYwIG92M18xNjAgPSAob20zX3QxNjApdjNfMTYwOwogICAgbTNfdDE2MiB2M18xNjIg PSAmUVdpZGdldDo6YXV0b01hc2s7CiAgICBvbTNfdDE2MiBvdjNfMTYyID0gKG9tM190MTYyKXYz XzE2MjsKICAgIG0zX3QxNjMgdjNfMTYzID0gJlFXaWRnZXQ6OnNldEF1dG9NYXNrOwogICAgb20z X3QxNjMgb3YzXzE2MyA9IChvbTNfdDE2Myl2M18xNjM7CiAgICBtM190MTY1IHYzXzE2NSA9ICZR V2lkZ2V0OjpiYWNrZ3JvdW5kT3JpZ2luOwogICAgb20zX3QxNjUgb3YzXzE2NSA9IChvbTNfdDE2 NSl2M18xNjU7CiAgICBtM190MTY2IHYzXzE2NiA9ICZRV2lkZ2V0OjpzZXRCYWNrZ3JvdW5kT3Jp Z2luOwogICAgb20zX3QxNjYgb3YzXzE2NiA9IChvbTNfdDE2Nil2M18xNjY7CiAgICBtM190MTY4 IHYzXzE2OCA9ICZRV2lkZ2V0OjpjdXN0b21XaGF0c1RoaXM7CiAgICBvbTNfdDE2OCBvdjNfMTY4 ID0gKG9tM190MTY4KXYzXzE2ODsKICAgIFFNZXRhUHJvcGVydHkgKnByb3BzX3RibCA9IFFNZXRh T2JqZWN0OjpuZXdfbWV0YXByb3BlcnR5KCA1NyApOwogICAgcHJvcHNfdGJsWzBdLnQgPSAiYm9v bCI7CiAgICBwcm9wc190YmxbMF0ubiA9ICJpc1RvcExldmVsIjsKICAgIHByb3BzX3RibFswXS5n ZXQgPSAoUU1lbWJlcilvdjNfMDsKICAgIHByb3BzX3RibFswXS5zZXQgPSAwOwogICAgcHJvcHNf dGJsWzBdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFswXS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6 OkNsYXNzOwogICAgcHJvcHNfdGJsWzBdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZp ZWQ7CiAgICBwcm9wc190YmxbMV0udCA9ICJib29sIjsKICAgIHByb3BzX3RibFsxXS5uID0gImlz TW9kYWwiOwogICAgcHJvcHNfdGJsWzFdLmdldCA9IChRTWVtYmVyKW92M18zOwogICAgcHJvcHNf dGJsWzFdLnNldCA9IDA7CiAgICBwcm9wc190YmxbMV0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJs WzFdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMV0uc3NwZWMg PSBRTWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFsyXS50ID0gImJvb2wi OwogICAgcHJvcHNfdGJsWzJdLm4gPSAiaXNQb3B1cCI7CiAgICBwcm9wc190YmxbMl0uZ2V0ID0g KFFNZW1iZXIpb3YzXzY7CiAgICBwcm9wc190YmxbMl0uc2V0ID0gMDsKICAgIHByb3BzX3RibFsy XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbMl0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFz czsKICAgIHByb3BzX3RibFsyXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3BlY2lmaWVkOwog ICAgcHJvcHNfdGJsWzNdLnQgPSAiYm9vbCI7CiAgICBwcm9wc190YmxbM10ubiA9ICJpc0Rlc2t0 b3AiOwogICAgcHJvcHNfdGJsWzNdLmdldCA9IChRTWVtYmVyKW92M185OwogICAgcHJvcHNfdGJs WzNdLnNldCA9IDA7CiAgICBwcm9wc190YmxbM10ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzNd LmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbM10uc3NwZWMgPSBR TWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFs0XS50ID0gImJvb2wiOwog ICAgcHJvcHNfdGJsWzRdLm4gPSAiZW5hYmxlZCI7CiAgICBwcm9wc190YmxbNF0uZ2V0ID0gKFFN ZW1iZXIpb3YzXzEyOwogICAgcHJvcHNfdGJsWzRdLnNldCA9IChRTWVtYmVyKW92M18xMzsKICAg IHByb3BzX3RibFs0XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbNF0uZ3NwZWMgPSBRTWV0YVBy b3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFs0XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNs YXNzOwogICAgcHJvcHNfdGJsWzRdLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAg ICBwcm9wc190YmxbNV0udCA9ICJRUmVjdCI7CiAgICBwcm9wc190YmxbNV0ubiA9ICJnZW9tZXRy eSI7CiAgICBwcm9wc190YmxbNV0uZ2V0ID0gKFFNZW1iZXIpb3YzXzE1OwogICAgcHJvcHNfdGJs WzVdLnNldCA9IChRTWVtYmVyKW92M18xNjsKICAgIHByb3BzX3RibFs1XS5yZXNldCA9IDA7CiAg ICBwcm9wc190YmxbNV0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9w c190YmxbNV0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190Ymxb NV0uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFs2XS50ID0g IlFSZWN0IjsKICAgIHByb3BzX3RibFs2XS5uID0gImZyYW1lR2VvbWV0cnkiOwogICAgcHJvcHNf dGJsWzZdLmdldCA9IChRTWVtYmVyKW92M18xODsKICAgIHByb3BzX3RibFs2XS5zZXQgPSAwOwog ICAgcHJvcHNfdGJsWzZdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs2XS5nc3BlYyA9IFFNZXRh UHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzZdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6 VW5zcGVjaWZpZWQ7CiAgICBwcm9wc190YmxbN10udCA9ICJpbnQiOwogICAgcHJvcHNfdGJsWzdd Lm4gPSAieCI7CiAgICBwcm9wc190YmxbN10uZ2V0ID0gKFFNZW1iZXIpb3YzXzIxOwogICAgcHJv cHNfdGJsWzddLnNldCA9IDA7CiAgICBwcm9wc190YmxbN10ucmVzZXQgPSAwOwogICAgcHJvcHNf dGJsWzddLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbN10uc3Nw ZWMgPSBRTWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFs4XS50ID0gImlu dCI7CiAgICBwcm9wc190YmxbOF0ubiA9ICJ5IjsKICAgIHByb3BzX3RibFs4XS5nZXQgPSAoUU1l bWJlcilvdjNfMjQ7CiAgICBwcm9wc190YmxbOF0uc2V0ID0gMDsKICAgIHByb3BzX3RibFs4XS5y ZXNldCA9IDA7CiAgICBwcm9wc190YmxbOF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsK ICAgIHByb3BzX3RibFs4XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3BlY2lmaWVkOwogICAg cHJvcHNfdGJsWzldLnQgPSAiUVBvaW50IjsKICAgIHByb3BzX3RibFs5XS5uID0gInBvcyI7CiAg ICBwcm9wc190YmxbOV0uZ2V0ID0gKFFNZW1iZXIpb3YzXzI3OwogICAgcHJvcHNfdGJsWzldLnNl dCA9IDA7CiAgICBwcm9wc190YmxbOV0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzldLmdzcGVj ID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbOV0uc3NwZWMgPSBRTWV0YVBy b3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFsxMF0udCA9ICJRU2l6ZSI7CiAgICBw cm9wc190YmxbMTBdLm4gPSAiZnJhbWVTaXplIjsKICAgIHByb3BzX3RibFsxMF0uZ2V0ID0gKFFN ZW1iZXIpb3YzXzMwOwogICAgcHJvcHNfdGJsWzEwXS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzEw XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbMTBdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xh c3M7CiAgICBwcm9wc190YmxbMTBdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7 CiAgICBwcm9wc190YmxbMTFdLnQgPSAiUVNpemUiOwogICAgcHJvcHNfdGJsWzExXS5uID0gInNp emUiOwogICAgcHJvcHNfdGJsWzExXS5nZXQgPSAoUU1lbWJlcilvdjNfMzM7CiAgICBwcm9wc190 YmxbMTFdLnNldCA9IChRTWVtYmVyKW92M18zNDsKICAgIHByb3BzX3RibFsxMV0ucmVzZXQgPSAw OwogICAgcHJvcHNfdGJsWzExXS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJv cHNfdGJsWzExXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlJlZmVyZW5jZTsKICAgIHByb3BzX3Ri bFsxMV0uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6Tm90RGVzaWduYWJsZSk7CiAgICBwcm9wc190 YmxbMTJdLnQgPSAiaW50IjsKICAgIHByb3BzX3RibFsxMl0ubiA9ICJ3aWR0aCI7CiAgICBwcm9w c190YmxbMTJdLmdldCA9IChRTWVtYmVyKW92M18zNjsKICAgIHByb3BzX3RibFsxMl0uc2V0ID0g MDsKICAgIHByb3BzX3RibFsxMl0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzEyXS5nc3BlYyA9 IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzEyXS5zc3BlYyA9IFFNZXRhUHJv cGVydHk6OlVuc3BlY2lmaWVkOwogICAgcHJvcHNfdGJsWzEzXS50ID0gImludCI7CiAgICBwcm9w c190YmxbMTNdLm4gPSAiaGVpZ2h0IjsKICAgIHByb3BzX3RibFsxM10uZ2V0ID0gKFFNZW1iZXIp b3YzXzM5OwogICAgcHJvcHNfdGJsWzEzXS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzEzXS5yZXNl dCA9IDA7CiAgICBwcm9wc190YmxbMTNdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAg ICBwcm9wc190YmxbMTNdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7CiAgICBw cm9wc190YmxbMTRdLnQgPSAiUVJlY3QiOwogICAgcHJvcHNfdGJsWzE0XS5uID0gInJlY3QiOwog ICAgcHJvcHNfdGJsWzE0XS5nZXQgPSAoUU1lbWJlcilvdjNfNDI7CiAgICBwcm9wc190YmxbMTRd LnNldCA9IDA7CiAgICBwcm9wc190YmxbMTRdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFsxNF0u Z3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsxNF0uc3NwZWMgPSBR TWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFsxNV0udCA9ICJRUmVjdCI7 CiAgICBwcm9wc190YmxbMTVdLm4gPSAiY2hpbGRyZW5SZWN0IjsKICAgIHByb3BzX3RibFsxNV0u Z2V0ID0gKFFNZW1iZXIpb3YzXzQ1OwogICAgcHJvcHNfdGJsWzE1XS5zZXQgPSAwOwogICAgcHJv cHNfdGJsWzE1XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbMTVdLmdzcGVjID0gUU1ldGFQcm9w ZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMTVdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5z cGVjaWZpZWQ7CiAgICBwcm9wc190YmxbMTZdLnQgPSAiUVJlZ2lvbiI7CiAgICBwcm9wc190Ymxb MTZdLm4gPSAiY2hpbGRyZW5SZWdpb24iOwogICAgcHJvcHNfdGJsWzE2XS5nZXQgPSAoUU1lbWJl cilvdjNfNDg7CiAgICBwcm9wc190YmxbMTZdLnNldCA9IDA7CiAgICBwcm9wc190YmxbMTZdLnJl c2V0ID0gMDsKICAgIHByb3BzX3RibFsxNl0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsK ICAgIHByb3BzX3RibFsxNl0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAg IHByb3BzX3RibFsxN10udCA9ICJRU2l6ZVBvbGljeSI7CiAgICBwcm9wc190YmxbMTddLm4gPSAi c2l6ZVBvbGljeSI7CiAgICBwcm9wc190YmxbMTddLmdldCA9IChRTWVtYmVyKW92M181MTsKICAg IHByb3BzX3RibFsxN10uc2V0ID0gKFFNZW1iZXIpb3YzXzUyOwogICAgcHJvcHNfdGJsWzE3XS5y ZXNldCA9IDA7CiAgICBwcm9wc190YmxbMTddLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7 CiAgICBwcm9wc190YmxbMTddLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9w c190YmxbMTddLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190Ymxb MThdLnQgPSAiUVNpemUiOwogICAgcHJvcHNfdGJsWzE4XS5uID0gIm1pbmltdW1TaXplIjsKICAg IHByb3BzX3RibFsxOF0uZ2V0ID0gKFFNZW1iZXIpb3YzXzU0OwogICAgcHJvcHNfdGJsWzE4XS5z ZXQgPSAoUU1lbWJlcilvdjNfNTU7CiAgICBwcm9wc190YmxbMThdLnJlc2V0ID0gMDsKICAgIHBy b3BzX3RibFsxOF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsx OF0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190YmxbMThdLnNl dEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190YmxbMTldLnQgPSAiUVNp emUiOwogICAgcHJvcHNfdGJsWzE5XS5uID0gIm1heGltdW1TaXplIjsKICAgIHByb3BzX3RibFsx OV0uZ2V0ID0gKFFNZW1iZXIpb3YzXzU3OwogICAgcHJvcHNfdGJsWzE5XS5zZXQgPSAoUU1lbWJl cilvdjNfNTg7CiAgICBwcm9wc190YmxbMTldLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFsxOV0u Z3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsxOV0uc3NwZWMgPSBR TWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190YmxbMTldLnNldEZsYWdzKFFNZXRh UHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190YmxbMjBdLnQgPSAiaW50IjsKICAgIHByb3Bz X3RibFsyMF0ubiA9ICJtaW5pbXVtV2lkdGgiOwogICAgcHJvcHNfdGJsWzIwXS5nZXQgPSAoUU1l bWJlcilvdjNfNjA7CiAgICBwcm9wc190YmxbMjBdLnNldCA9IChRTWVtYmVyKW92M182MTsKICAg IHByb3BzX3RibFsyMF0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzIwXS5nc3BlYyA9IFFNZXRh UHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzIwXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6 OkNsYXNzOwogICAgcHJvcHNfdGJsWzIwXS5zZXRGbGFncyhRTWV0YVByb3BlcnR5OjpOb3RTdG9y ZWR8UU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFsyMV0udCA9ICJpbnQiOwog ICAgcHJvcHNfdGJsWzIxXS5uID0gIm1pbmltdW1IZWlnaHQiOwogICAgcHJvcHNfdGJsWzIxXS5n ZXQgPSAoUU1lbWJlcilvdjNfNjM7CiAgICBwcm9wc190YmxbMjFdLnNldCA9IChRTWVtYmVyKW92 M182NDsKICAgIHByb3BzX3RibFsyMV0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzIxXS5nc3Bl YyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzIxXS5zc3BlYyA9IFFNZXRh UHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzIxXS5zZXRGbGFncyhRTWV0YVByb3BlcnR5 OjpOb3RTdG9yZWR8UU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFsyMl0udCA9 ICJpbnQiOwogICAgcHJvcHNfdGJsWzIyXS5uID0gIm1heGltdW1XaWR0aCI7CiAgICBwcm9wc190 YmxbMjJdLmdldCA9IChRTWVtYmVyKW92M182NjsKICAgIHByb3BzX3RibFsyMl0uc2V0ID0gKFFN ZW1iZXIpb3YzXzY3OwogICAgcHJvcHNfdGJsWzIyXS5yZXNldCA9IDA7CiAgICBwcm9wc190Ymxb MjJdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMjJdLnNzcGVj ID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMjJdLnNldEZsYWdzKFFNZXRh UHJvcGVydHk6Ok5vdFN0b3JlZHxRTWV0YVByb3BlcnR5OjpTdGRTZXQpOwogICAgcHJvcHNfdGJs WzIzXS50ID0gImludCI7CiAgICBwcm9wc190YmxbMjNdLm4gPSAibWF4aW11bUhlaWdodCI7CiAg ICBwcm9wc190YmxbMjNdLmdldCA9IChRTWVtYmVyKW92M182OTsKICAgIHByb3BzX3RibFsyM10u c2V0ID0gKFFNZW1iZXIpb3YzXzcwOwogICAgcHJvcHNfdGJsWzIzXS5yZXNldCA9IDA7CiAgICBw cm9wc190YmxbMjNdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190Ymxb MjNdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMjNdLnNldEZs YWdzKFFNZXRhUHJvcGVydHk6Ok5vdFN0b3JlZHxRTWV0YVByb3BlcnR5OjpTdGRTZXQpOwogICAg cHJvcHNfdGJsWzI0XS50ID0gIlFTaXplIjsKICAgIHByb3BzX3RibFsyNF0ubiA9ICJzaXplSW5j cmVtZW50IjsKICAgIHByb3BzX3RibFsyNF0uZ2V0ID0gKFFNZW1iZXIpb3YzXzcyOwogICAgcHJv cHNfdGJsWzI0XS5zZXQgPSAoUU1lbWJlcilvdjNfNzM7CiAgICBwcm9wc190YmxbMjRdLnJlc2V0 ID0gMDsKICAgIHByb3BzX3RibFsyNF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAg IHByb3BzX3RibFsyNF0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9w c190YmxbMjRdLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190Ymxb MjVdLnQgPSAiUVNpemUiOwogICAgcHJvcHNfdGJsWzI1XS5uID0gImJhc2VTaXplIjsKICAgIHBy b3BzX3RibFsyNV0uZ2V0ID0gKFFNZW1iZXIpb3YzXzc1OwogICAgcHJvcHNfdGJsWzI1XS5zZXQg PSAoUU1lbWJlcilvdjNfNzY7CiAgICBwcm9wc190YmxbMjVdLnJlc2V0ID0gMDsKICAgIHByb3Bz X3RibFsyNV0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsyNV0u c3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190YmxbMjVdLnNldEZs YWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190YmxbMjZdLnQgPSAiQmFja2dy b3VuZE1vZGUiOwogICAgcHJvcHNfdGJsWzI2XS5uID0gImJhY2tncm91bmRNb2RlIjsKICAgIHBy b3BzX3RibFsyNl0uZ2V0ID0gKFFNZW1iZXIpb3YzXzc4OwogICAgcHJvcHNfdGJsWzI2XS5zZXQg PSAoUU1lbWJlcilvdjNfNzk7CiAgICBwcm9wc190YmxbMjZdLnJlc2V0ID0gMDsKICAgIHByb3Bz X3RibFsyNl0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsyNl0u c3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFsyNl0uZW51bURhdGEg PSAmZW51bV90YmxbMF07CiAgICBwcm9wc190YmxbMjZdLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6 Ok5vdERlc2lnbmFibGV8UU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFsyN10u dCA9ICJRQ29sb3IiOwogICAgcHJvcHNfdGJsWzI3XS5uID0gImJhY2tncm91bmRDb2xvciI7CiAg ICBwcm9wc190YmxbMjddLmdldCA9IChRTWVtYmVyKW92M184MTsKICAgIHByb3BzX3RibFsyN10u c2V0ID0gKFFNZW1iZXIpb3YzXzgyOwogICAgcHJvcHNfdGJsWzI3XS5yZXNldCA9IDA7CiAgICBw cm9wc190YmxbMjddLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6UmVmZXJlbmNlOwogICAgcHJvcHNf dGJsWzI3XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlJlZmVyZW5jZTsKICAgIHByb3BzX3RibFsy N10uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6Tm90RGVzaWduYWJsZXxRTWV0YVByb3BlcnR5OjpT dGRTZXQpOwogICAgcHJvcHNfdGJsWzI4XS50ID0gIlFDb2xvciI7CiAgICBwcm9wc190YmxbMjhd Lm4gPSAiZm9yZWdyb3VuZENvbG9yIjsKICAgIHByb3BzX3RibFsyOF0uZ2V0ID0gKFFNZW1iZXIp b3YzXzg0OwogICAgcHJvcHNfdGJsWzI4XS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzI4XS5yZXNl dCA9IDA7CiAgICBwcm9wc190YmxbMjhdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6UmVmZXJlbmNl OwogICAgcHJvcHNfdGJsWzI4XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3BlY2lmaWVkOwog ICAgcHJvcHNfdGJsWzI5XS50ID0gIlFQaXhtYXAiOwogICAgcHJvcHNfdGJsWzI5XS5uID0gImJh Y2tncm91bmRQaXhtYXAiOwogICAgcHJvcHNfdGJsWzI5XS5nZXQgPSAoUU1lbWJlcilvdjNfODc7 CiAgICBwcm9wc190YmxbMjldLnNldCA9IChRTWVtYmVyKW92M184ODsKICAgIHByb3BzX3RibFsy OV0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzI5XS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OlBv aW50ZXI7CiAgICBwcm9wc190YmxbMjldLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6UmVmZXJlbmNl OwogICAgcHJvcHNfdGJsWzI5XS5zZXRGbGFncyhRTWV0YVByb3BlcnR5OjpOb3REZXNpZ25hYmxl fFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190YmxbMzBdLnQgPSAiUUNvbG9yR3Jv dXAiOwogICAgcHJvcHNfdGJsWzMwXS5uID0gImNvbG9yR3JvdXAiOwogICAgcHJvcHNfdGJsWzMw XS5nZXQgPSAoUU1lbWJlcilvdjNfOTA7CiAgICBwcm9wc190YmxbMzBdLnNldCA9IDA7CiAgICBw cm9wc190YmxbMzBdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFszMF0uZ3NwZWMgPSBRTWV0YVBy b3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190YmxbMzBdLnNzcGVjID0gUU1ldGFQcm9wZXJ0 eTo6VW5zcGVjaWZpZWQ7CiAgICBwcm9wc190YmxbMzFdLnQgPSAiUVBhbGV0dGUiOwogICAgcHJv cHNfdGJsWzMxXS5uID0gInBhbGV0dGUiOwogICAgcHJvcHNfdGJsWzMxXS5nZXQgPSAoUU1lbWJl cilvdjNfOTM7CiAgICBwcm9wc190YmxbMzFdLnNldCA9IChRTWVtYmVyKW92M185NDsKICAgIHBy b3BzX3RibFszMV0ucmVzZXQgPSAoUU1lbWJlcilvdjNfOTU7CiAgICBwcm9wc190YmxbMzFdLmdz cGVjID0gUU1ldGFQcm9wZXJ0eTo6UmVmZXJlbmNlOwogICAgcHJvcHNfdGJsWzMxXS5zc3BlYyA9 IFFNZXRhUHJvcGVydHk6OlJlZmVyZW5jZTsKICAgIHByb3BzX3RibFszMV0uc2V0RmxhZ3MoUU1l dGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFszMl0udCA9ICJib29sIjsKICAgIHBy b3BzX3RibFszMl0ubiA9ICJvd25QYWxldHRlIjsKICAgIHByb3BzX3RibFszMl0uZ2V0ID0gKFFN ZW1iZXIpb3YzXzk2OwogICAgcHJvcHNfdGJsWzMyXS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzMy XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbMzJdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xh c3M7CiAgICBwcm9wc190YmxbMzJdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7 CiAgICBwcm9wc190YmxbMzNdLnQgPSAiUUZvbnQiOwogICAgcHJvcHNfdGJsWzMzXS5uID0gImZv bnQiOwogICAgcHJvcHNfdGJsWzMzXS5nZXQgPSAoUU1lbWJlcilvdjNfOTk7CiAgICBwcm9wc190 YmxbMzNdLnNldCA9IChRTWVtYmVyKW92M18xMDA7CiAgICBwcm9wc190YmxbMzNdLnJlc2V0ID0g KFFNZW1iZXIpb3YzXzEwMTsKICAgIHByb3BzX3RibFszM10uZ3NwZWMgPSBRTWV0YVByb3BlcnR5 OjpDbGFzczsKICAgIHByb3BzX3RibFszM10uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVu Y2U7CiAgICBwcm9wc190YmxbMzNdLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAg ICBwcm9wc190YmxbMzRdLnQgPSAiYm9vbCI7CiAgICBwcm9wc190YmxbMzRdLm4gPSAib3duRm9u dCI7CiAgICBwcm9wc190YmxbMzRdLmdldCA9IChRTWVtYmVyKW92M18xMDI7CiAgICBwcm9wc190 YmxbMzRdLnNldCA9IDA7CiAgICBwcm9wc190YmxbMzRdLnJlc2V0ID0gMDsKICAgIHByb3BzX3Ri bFszNF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFszNF0uc3Nw ZWMgPSBRTWV0YVByb3BlcnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFszNV0udCA9ICJR Q3Vyc29yIjsKICAgIHByb3BzX3RibFszNV0ubiA9ICJjdXJzb3IiOwogICAgcHJvcHNfdGJsWzM1 XS5nZXQgPSAoUU1lbWJlcilvdjNfMTA1OwogICAgcHJvcHNfdGJsWzM1XS5zZXQgPSAoUU1lbWJl cilvdjNfMTA2OwogICAgcHJvcHNfdGJsWzM1XS5yZXNldCA9IChRTWVtYmVyKW92M18xMDc7CiAg ICBwcm9wc190YmxbMzVdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6UmVmZXJlbmNlOwogICAgcHJv cHNfdGJsWzM1XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlJlZmVyZW5jZTsKICAgIHByb3BzX3Ri bFszNV0uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFszNl0u dCA9ICJib29sIjsKICAgIHByb3BzX3RibFszNl0ubiA9ICJvd25DdXJzb3IiOwogICAgcHJvcHNf dGJsWzM2XS5nZXQgPSAoUU1lbWJlcilvdjNfMTA4OwogICAgcHJvcHNfdGJsWzM2XS5zZXQgPSAw OwogICAgcHJvcHNfdGJsWzM2XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbMzZdLmdzcGVjID0g UU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbMzZdLnNzcGVjID0gUU1ldGFQcm9w ZXJ0eTo6VW5zcGVjaWZpZWQ7CiAgICBwcm9wc190YmxbMzddLnQgPSAiUVN0cmluZyI7CiAgICBw cm9wc190YmxbMzddLm4gPSAiY2FwdGlvbiI7CiAgICBwcm9wc190YmxbMzddLmdldCA9IChRTWVt YmVyKW92M18xMTE7CiAgICBwcm9wc190YmxbMzddLnNldCA9IChRTWVtYmVyKW92M18xMTI7CiAg ICBwcm9wc190YmxbMzddLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFszN10uZ3NwZWMgPSBRTWV0 YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFszN10uc3NwZWMgPSBRTWV0YVByb3BlcnR5 OjpSZWZlcmVuY2U7CiAgICBwcm9wc190YmxbMzddLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0 ZFNldCk7CiAgICBwcm9wc190YmxbMzhdLnQgPSAiUVBpeG1hcCI7CiAgICBwcm9wc190YmxbMzhd Lm4gPSAiaWNvbiI7CiAgICBwcm9wc190YmxbMzhdLmdldCA9IChRTWVtYmVyKW92M18xMTQ7CiAg ICBwcm9wc190YmxbMzhdLnNldCA9IChRTWVtYmVyKW92M18xMTU7CiAgICBwcm9wc190YmxbMzhd LnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFszOF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpQb2lu dGVyOwogICAgcHJvcHNfdGJsWzM4XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlJlZmVyZW5jZTsK ICAgIHByb3BzX3RibFszOF0uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHBy b3BzX3RibFszOV0udCA9ICJRU3RyaW5nIjsKICAgIHByb3BzX3RibFszOV0ubiA9ICJpY29uVGV4 dCI7CiAgICBwcm9wc190YmxbMzldLmdldCA9IChRTWVtYmVyKW92M18xMTc7CiAgICBwcm9wc190 YmxbMzldLnNldCA9IChRTWVtYmVyKW92M18xMTg7CiAgICBwcm9wc190YmxbMzldLnJlc2V0ID0g MDsKICAgIHByb3BzX3RibFszOV0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHBy b3BzX3RibFszOV0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpSZWZlcmVuY2U7CiAgICBwcm9wc190 YmxbMzldLnNldEZsYWdzKFFNZXRhUHJvcGVydHk6OlN0ZFNldCk7CiAgICBwcm9wc190YmxbNDBd LnQgPSAiYm9vbCI7CiAgICBwcm9wc190YmxbNDBdLm4gPSAibW91c2VUcmFja2luZyI7CiAgICBw cm9wc190YmxbNDBdLmdldCA9IChRTWVtYmVyKW92M18xMjA7CiAgICBwcm9wc190YmxbNDBdLnNl dCA9IChRTWVtYmVyKW92M18xMjE7CiAgICBwcm9wc190YmxbNDBdLnJlc2V0ID0gMDsKICAgIHBy b3BzX3RibFs0MF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFs0 MF0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFs0MF0uc2V0Rmxh Z3MoUU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFs0MV0udCA9ICJib29sIjsK ICAgIHByb3BzX3RibFs0MV0ubiA9ICJpc0FjdGl2ZVdpbmRvdyI7CiAgICBwcm9wc190YmxbNDFd LmdldCA9IChRTWVtYmVyKW92M18xMjM7CiAgICBwcm9wc190YmxbNDFdLnNldCA9IDA7CiAgICBw cm9wc190YmxbNDFdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs0MV0uZ3NwZWMgPSBRTWV0YVBy b3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFs0MV0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpV bnNwZWNpZmllZDsKICAgIHByb3BzX3RibFs0Ml0udCA9ICJib29sIjsKICAgIHByb3BzX3RibFs0 Ml0ubiA9ICJmb2N1c0VuYWJsZWQiOwogICAgcHJvcHNfdGJsWzQyXS5nZXQgPSAoUU1lbWJlcilv djNfMTI2OwogICAgcHJvcHNfdGJsWzQyXS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzQyXS5yZXNl dCA9IDA7CiAgICBwcm9wc190YmxbNDJdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAg ICBwcm9wc190YmxbNDJdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7CiAgICBw cm9wc190YmxbNDNdLnQgPSAiRm9jdXNQb2xpY3kiOwogICAgcHJvcHNfdGJsWzQzXS5uID0gImZv Y3VzUG9saWN5IjsKICAgIHByb3BzX3RibFs0M10uZ2V0ID0gKFFNZW1iZXIpb3YzXzEyOTsKICAg IHByb3BzX3RibFs0M10uc2V0ID0gKFFNZW1iZXIpb3YzXzEzMDsKICAgIHByb3BzX3RibFs0M10u cmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzQzXS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNz OwogICAgcHJvcHNfdGJsWzQzXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJv cHNfdGJsWzQzXS5lbnVtRGF0YSA9ICZlbnVtX3RibFsyXTsKICAgIHByb3BzX3RibFs0M10uc2V0 RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6U3RkU2V0KTsKICAgIHByb3BzX3RibFs0NF0udCA9ICJib29s IjsKICAgIHByb3BzX3RibFs0NF0ubiA9ICJmb2N1cyI7CiAgICBwcm9wc190YmxbNDRdLmdldCA9 IChRTWVtYmVyKW92M18xMzI7CiAgICBwcm9wc190YmxbNDRdLnNldCA9IDA7CiAgICBwcm9wc190 YmxbNDRdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs0NF0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5 OjpDbGFzczsKICAgIHByb3BzX3RibFs0NF0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpVbnNwZWNp ZmllZDsKICAgIHByb3BzX3RibFs0NV0udCA9ICJib29sIjsKICAgIHByb3BzX3RibFs0NV0ubiA9 ICJ1cGRhdGVzRW5hYmxlZCI7CiAgICBwcm9wc190YmxbNDVdLmdldCA9IChRTWVtYmVyKW92M18x MzU7CiAgICBwcm9wc190YmxbNDVdLnNldCA9IChRTWVtYmVyKW92M18xMzY7CiAgICBwcm9wc190 YmxbNDVdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs0NV0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5 OjpDbGFzczsKICAgIHByb3BzX3RibFs0NV0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpDbGFzczsK ICAgIHByb3BzX3RibFs0NV0uc2V0RmxhZ3MoUU1ldGFQcm9wZXJ0eTo6Tm90RGVzaWduYWJsZXxR TWV0YVByb3BlcnR5OjpTdGRTZXQpOwogICAgcHJvcHNfdGJsWzQ2XS50ID0gImJvb2wiOwogICAg cHJvcHNfdGJsWzQ2XS5uID0gInZpc2libGUiOwogICAgcHJvcHNfdGJsWzQ2XS5nZXQgPSAoUU1l bWJlcilvdjNfMTM4OwogICAgcHJvcHNfdGJsWzQ2XS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzQ2 XS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbNDZdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xh c3M7CiAgICBwcm9wc190YmxbNDZdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7 CiAgICBwcm9wc190YmxbNDddLnQgPSAiUVJlY3QiOwogICAgcHJvcHNfdGJsWzQ3XS5uID0gInZp c2libGVSZWN0IjsKICAgIHByb3BzX3RibFs0N10uZ2V0ID0gKFFNZW1iZXIpb3YzXzE0MTsKICAg IHByb3BzX3RibFs0N10uc2V0ID0gMDsKICAgIHByb3BzX3RibFs0N10ucmVzZXQgPSAwOwogICAg cHJvcHNfdGJsWzQ3XS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJs WzQ3XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3BlY2lmaWVkOwogICAgcHJvcHNfdGJsWzQ4 XS50ID0gImJvb2wiOwogICAgcHJvcHNfdGJsWzQ4XS5uID0gImhpZGRlbiI7CiAgICBwcm9wc190 YmxbNDhdLmdldCA9IChRTWVtYmVyKW92M18xNDQ7CiAgICBwcm9wc190YmxbNDhdLnNldCA9IDA7 CiAgICBwcm9wc190YmxbNDhdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs0OF0uZ3NwZWMgPSBR TWV0YVByb3BlcnR5OjpDbGFzczsKICAgIHByb3BzX3RibFs0OF0uc3NwZWMgPSBRTWV0YVByb3Bl cnR5OjpVbnNwZWNpZmllZDsKICAgIHByb3BzX3RibFs0OV0udCA9ICJib29sIjsKICAgIHByb3Bz X3RibFs0OV0ubiA9ICJtaW5pbWl6ZWQiOwogICAgcHJvcHNfdGJsWzQ5XS5nZXQgPSAoUU1lbWJl cilvdjNfMTQ3OwogICAgcHJvcHNfdGJsWzQ5XS5zZXQgPSAwOwogICAgcHJvcHNfdGJsWzQ5XS5y ZXNldCA9IDA7CiAgICBwcm9wc190YmxbNDldLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7 CiAgICBwcm9wc190YmxbNDldLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6VW5zcGVjaWZpZWQ7CiAg ICBwcm9wc190YmxbNTBdLnQgPSAiUVNpemUiOwogICAgcHJvcHNfdGJsWzUwXS5uID0gInNpemVI aW50IjsKICAgIHByb3BzX3RibFs1MF0uZ2V0ID0gKFFNZW1iZXIpb3YzXzE1MDsKICAgIHByb3Bz X3RibFs1MF0uc2V0ID0gMDsKICAgIHByb3BzX3RibFs1MF0ucmVzZXQgPSAwOwogICAgcHJvcHNf dGJsWzUwXS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzUwXS5z c3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3BlY2lmaWVkOwogICAgcHJvcHNfdGJsWzUxXS50ID0g IlFTaXplIjsKICAgIHByb3BzX3RibFs1MV0ubiA9ICJtaW5pbXVtU2l6ZUhpbnQiOwogICAgcHJv cHNfdGJsWzUxXS5nZXQgPSAoUU1lbWJlcilvdjNfMTUzOwogICAgcHJvcHNfdGJsWzUxXS5zZXQg PSAwOwogICAgcHJvcHNfdGJsWzUxXS5yZXNldCA9IDA7CiAgICBwcm9wc190YmxbNTFdLmdzcGVj ID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbNTFdLnNzcGVjID0gUU1ldGFQ cm9wZXJ0eTo6VW5zcGVjaWZpZWQ7CiAgICBwcm9wc190YmxbNTJdLnQgPSAiUVJlY3QiOwogICAg cHJvcHNfdGJsWzUyXS5uID0gIm1pY3JvRm9jdXNIaW50IjsKICAgIHByb3BzX3RibFs1Ml0uZ2V0 ID0gKFFNZW1iZXIpb3YzXzE1NjsKICAgIHByb3BzX3RibFs1Ml0uc2V0ID0gMDsKICAgIHByb3Bz X3RibFs1Ml0ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzUyXS5nc3BlYyA9IFFNZXRhUHJvcGVy dHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzUyXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OlVuc3Bl Y2lmaWVkOwogICAgcHJvcHNfdGJsWzUzXS50ID0gImJvb2wiOwogICAgcHJvcHNfdGJsWzUzXS5u ID0gImFjY2VwdERyb3BzIjsKICAgIHByb3BzX3RibFs1M10uZ2V0ID0gKFFNZW1iZXIpb3YzXzE1 OTsKICAgIHByb3BzX3RibFs1M10uc2V0ID0gKFFNZW1iZXIpb3YzXzE2MDsKICAgIHByb3BzX3Ri bFs1M10ucmVzZXQgPSAwOwogICAgcHJvcHNfdGJsWzUzXS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6 OkNsYXNzOwogICAgcHJvcHNfdGJsWzUzXS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwog ICAgcHJvcHNfdGJsWzUzXS5zZXRGbGFncyhRTWV0YVByb3BlcnR5OjpTdGRTZXQpOwogICAgcHJv cHNfdGJsWzU0XS50ID0gImJvb2wiOwogICAgcHJvcHNfdGJsWzU0XS5uID0gImF1dG9NYXNrIjsK ICAgIHByb3BzX3RibFs1NF0uZ2V0ID0gKFFNZW1iZXIpb3YzXzE2MjsKICAgIHByb3BzX3RibFs1 NF0uc2V0ID0gKFFNZW1iZXIpb3YzXzE2MzsKICAgIHByb3BzX3RibFs1NF0ucmVzZXQgPSAwOwog ICAgcHJvcHNfdGJsWzU0XS5nc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNf dGJsWzU0XS5zc3BlYyA9IFFNZXRhUHJvcGVydHk6OkNsYXNzOwogICAgcHJvcHNfdGJsWzU0XS5z ZXRGbGFncyhRTWV0YVByb3BlcnR5OjpTdGRTZXQpOwogICAgcHJvcHNfdGJsWzU1XS50ID0gIkJh Y2tncm91bmRPcmlnaW4iOwogICAgcHJvcHNfdGJsWzU1XS5uID0gImJhY2tncm91bmRPcmlnaW4i OwogICAgcHJvcHNfdGJsWzU1XS5nZXQgPSAoUU1lbWJlcilvdjNfMTY1OwogICAgcHJvcHNfdGJs WzU1XS5zZXQgPSAoUU1lbWJlcilvdjNfMTY2OwogICAgcHJvcHNfdGJsWzU1XS5yZXNldCA9IDA7 CiAgICBwcm9wc190YmxbNTVdLmdzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9w c190YmxbNTVdLnNzcGVjID0gUU1ldGFQcm9wZXJ0eTo6Q2xhc3M7CiAgICBwcm9wc190YmxbNTVd LmVudW1EYXRhID0gJmVudW1fdGJsWzNdOwogICAgcHJvcHNfdGJsWzU1XS5zZXRGbGFncyhRTWV0 YVByb3BlcnR5OjpTdGRTZXQpOwogICAgcHJvcHNfdGJsWzU2XS50ID0gImJvb2wiOwogICAgcHJv cHNfdGJsWzU2XS5uID0gImN1c3RvbVdoYXRzVGhpcyI7CiAgICBwcm9wc190YmxbNTZdLmdldCA9 IChRTWVtYmVyKW92M18xNjg7CiAgICBwcm9wc190YmxbNTZdLnNldCA9IDA7CiAgICBwcm9wc190 YmxbNTZdLnJlc2V0ID0gMDsKICAgIHByb3BzX3RibFs1Nl0uZ3NwZWMgPSBRTWV0YVByb3BlcnR5 OjpDbGFzczsKICAgIHByb3BzX3RibFs1Nl0uc3NwZWMgPSBRTWV0YVByb3BlcnR5OjpVbnNwZWNp ZmllZDsKCiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MCkoYm9vbCk7CiAgICB0eXBl ZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDApKGJvb2wpOwogICAgdHlwZWRlZiB2b2lkIChRV2lk Z2V0OjoqbTFfdDEpKGJvb2wpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3QxKShi b29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QyKShjb25zdCBRU3RyaW5nJik7 CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDIpKGNvbnN0IFFTdHJpbmcmKTsKICAg IHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QzKShjb25zdCBRUGl4bWFwJik7CiAgICB0eXBl ZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDMpKGNvbnN0IFFQaXhtYXAmKTsKICAgIHR5cGVkZWYg dm9pZCAoUVdpZGdldDo6Km0xX3Q0KShjb25zdCBRU3RyaW5nJik7CiAgICB0eXBlZGVmIHZvaWQg KFFPYmplY3Q6OipvbTFfdDQpKGNvbnN0IFFTdHJpbmcmKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdp ZGdldDo6Km0xX3Q1KShib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90NSko Ym9vbCk7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90NikoKTsKICAgIHR5cGVkZWYg dm9pZCAoUU9iamVjdDo6Km9tMV90NikoKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0x X3Q3KSgpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3Q3KSgpOwogICAgdHlwZWRl ZiB2b2lkIChRV2lkZ2V0OjoqbTFfdDgpKGJvb2wpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0 Ojoqb20xX3Q4KShib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3Q5KSgpOwog ICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3Q5KSgpOwogICAgdHlwZWRlZiB2b2lkIChR V2lkZ2V0OjoqbTFfdDEwKShpbnQsaW50LGludCxpbnQpOwogICAgdHlwZWRlZiB2b2lkIChRT2Jq ZWN0Ojoqb20xX3QxMCkoaW50LGludCxpbnQsaW50KTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdl dDo6Km0xX3QxMSkoY29uc3QgUVJlY3QmKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9t MV90MTEpKGNvbnN0IFFSZWN0Jik7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MTIp KCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDEyKSgpOwogICAgdHlwZWRlZiB2 b2lkIChRV2lkZ2V0OjoqbTFfdDEzKShib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6 Km9tMV90MTMpKGJvb2wpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTFfdDE0KShpbnQs aW50LGludCxpbnQsYm9vbCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDE0KShp bnQsaW50LGludCxpbnQsYm9vbCk7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MTUp KGNvbnN0IFFSZWN0Jixib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MTUp KGNvbnN0IFFSZWN0Jixib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QxNiko Y29uc3QgUVJlZ2lvbiYsYm9vbCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDE2 KShjb25zdCBRUmVnaW9uJixib29sKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3Qx NykoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MTcpKCk7CiAgICB0eXBlZGVm IHZvaWQgKFFXaWRnZXQ6OiptMV90MTgpKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6Oipv bTFfdDE4KSgpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTFfdDE5KSgpOwogICAgdHlw ZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3QxOSkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdl dDo6Km0xX3QyMCkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MjApKCk7CiAg ICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MjEpKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFP YmplY3Q6OipvbTFfdDIxKSgpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTFfdDIyKSgp OwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3QyMikoKTsKICAgIHR5cGVkZWYgdm9p ZCAoUVdpZGdldDo6Km0xX3QyMykoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90 MjMpKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MjQpKCk7CiAgICB0eXBlZGVm IHZvaWQgKFFPYmplY3Q6OipvbTFfdDI0KSgpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0Ojoq bTFfdDI1KSgpY29uc3Q7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDI1KSgpY29u c3Q7CiAgICB0eXBlZGVmIGJvb2wgKFFXaWRnZXQ6OiptMV90MjYpKCk7CiAgICB0eXBlZGVmIGJv b2wgKFFPYmplY3Q6OipvbTFfdDI2KSgpOwogICAgdHlwZWRlZiB2b2lkIChRV2lkZ2V0OjoqbTFf dDI3KSgpOwogICAgdHlwZWRlZiB2b2lkIChRT2JqZWN0Ojoqb20xX3QyNykoKTsKICAgIHR5cGVk ZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QyOCkoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6 Km9tMV90MjgpKCk7CiAgICB0eXBlZGVmIHZvaWQgKFFXaWRnZXQ6OiptMV90MjkpKFFXaWRnZXQq KTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MjkpKFFXaWRnZXQqKTsKICAgIHR5 cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QzMCkoaW50LGludCk7CiAgICB0eXBlZGVmIHZvaWQg KFFPYmplY3Q6OipvbTFfdDMwKShpbnQsaW50KTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6 Km0xX3QzMSkoY29uc3QgUVBvaW50Jik7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFf dDMxKShjb25zdCBRUG9pbnQmKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QzMiko aW50LGludCk7CiAgICB0eXBlZGVmIHZvaWQgKFFPYmplY3Q6OipvbTFfdDMyKShpbnQsaW50KTsK ICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6Km0xX3QzMykoY29uc3QgUVNpemUmKTsKICAgIHR5 cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MzMpKGNvbnN0IFFTaXplJik7CiAgICB0eXBlZGVm IHZvaWQgKFFXaWRnZXQ6OiptMV90MzQpKGludCxpbnQsaW50LGludCk7CiAgICB0eXBlZGVmIHZv aWQgKFFPYmplY3Q6OipvbTFfdDM0KShpbnQsaW50LGludCxpbnQpOwogICAgdHlwZWRlZiB2b2lk IChRV2lkZ2V0OjoqbTFfdDM1KShjb25zdCBRUmVjdCYpOwogICAgdHlwZWRlZiB2b2lkIChRT2Jq ZWN0Ojoqb20xX3QzNSkoY29uc3QgUVJlY3QmKTsKICAgIHR5cGVkZWYgdm9pZCAoUVdpZGdldDo6 Km0xX3QzNikoKTsKICAgIHR5cGVkZWYgdm9pZCAoUU9iamVjdDo6Km9tMV90MzYpKCk7CiAgICBt MV90MCB2MV8wID0gJlFXaWRnZXQ6OnNldEVuYWJsZWQ7CiAgICBvbTFfdDAgb3YxXzAgPSAob20x X3QwKXYxXzA7CiAgICBtMV90MSB2MV8xID0gJlFXaWRnZXQ6OnNldERpc2FibGVkOwogICAgb20x X3QxIG92MV8xID0gKG9tMV90MSl2MV8xOwogICAgbTFfdDIgdjFfMiA9ICZRV2lkZ2V0OjpzZXRD YXB0aW9uOwogICAgb20xX3QyIG92MV8yID0gKG9tMV90Mil2MV8yOwogICAgbTFfdDMgdjFfMyA9 ICZRV2lkZ2V0OjpzZXRJY29uOwogICAgb20xX3QzIG92MV8zID0gKG9tMV90Myl2MV8zOwogICAg bTFfdDQgdjFfNCA9ICZRV2lkZ2V0OjpzZXRJY29uVGV4dDsKICAgIG9tMV90NCBvdjFfNCA9IChv bTFfdDQpdjFfNDsKICAgIG0xX3Q1IHYxXzUgPSAmUVdpZGdldDo6c2V0TW91c2VUcmFja2luZzsK ICAgIG9tMV90NSBvdjFfNSA9IChvbTFfdDUpdjFfNTsKICAgIG0xX3Q2IHYxXzYgPSAmUVdpZGdl dDo6c2V0Rm9jdXM7CiAgICBvbTFfdDYgb3YxXzYgPSAob20xX3Q2KXYxXzY7CiAgICBtMV90NyB2 MV83ID0gJlFXaWRnZXQ6OmNsZWFyRm9jdXM7CiAgICBvbTFfdDcgb3YxXzcgPSAob20xX3Q3KXYx Xzc7CiAgICBtMV90OCB2MV84ID0gJlFXaWRnZXQ6OnNldFVwZGF0ZXNFbmFibGVkOwogICAgb20x X3Q4IG92MV84ID0gKG9tMV90OCl2MV84OwogICAgbTFfdDkgdjFfOSA9ICZRV2lkZ2V0Ojp1cGRh dGU7CiAgICBvbTFfdDkgb3YxXzkgPSAob20xX3Q5KXYxXzk7CiAgICBtMV90MTAgdjFfMTAgPSAm UVdpZGdldDo6dXBkYXRlOwogICAgb20xX3QxMCBvdjFfMTAgPSAob20xX3QxMCl2MV8xMDsKICAg IG0xX3QxMSB2MV8xMSA9ICZRV2lkZ2V0Ojp1cGRhdGU7CiAgICBvbTFfdDExIG92MV8xMSA9IChv bTFfdDExKXYxXzExOwogICAgbTFfdDEyIHYxXzEyID0gJlFXaWRnZXQ6OnJlcGFpbnQ7CiAgICBv bTFfdDEyIG92MV8xMiA9IChvbTFfdDEyKXYxXzEyOwogICAgbTFfdDEzIHYxXzEzID0gJlFXaWRn ZXQ6OnJlcGFpbnQ7CiAgICBvbTFfdDEzIG92MV8xMyA9IChvbTFfdDEzKXYxXzEzOwogICAgbTFf dDE0IHYxXzE0ID0gJlFXaWRnZXQ6OnJlcGFpbnQ7CiAgICBvbTFfdDE0IG92MV8xNCA9IChvbTFf dDE0KXYxXzE0OwogICAgbTFfdDE1IHYxXzE1ID0gJlFXaWRnZXQ6OnJlcGFpbnQ7CiAgICBvbTFf dDE1IG92MV8xNSA9IChvbTFfdDE1KXYxXzE1OwogICAgbTFfdDE2IHYxXzE2ID0gJlFXaWRnZXQ6 OnJlcGFpbnQ7CiAgICBvbTFfdDE2IG92MV8xNiA9IChvbTFfdDE2KXYxXzE2OwogICAgbTFfdDE3 IHYxXzE3ID0gJlFXaWRnZXQ6OnNob3c7CiAgICBvbTFfdDE3IG92MV8xNyA9IChvbTFfdDE3KXYx XzE3OwogICAgbTFfdDE4IHYxXzE4ID0gJlFXaWRnZXQ6OmhpZGU7CiAgICBvbTFfdDE4IG92MV8x OCA9IChvbTFfdDE4KXYxXzE4OwogICAgbTFfdDE5IHYxXzE5ID0gJlFXaWRnZXQ6Omljb25pZnk7 CiAgICBvbTFfdDE5IG92MV8xOSA9IChvbTFfdDE5KXYxXzE5OwogICAgbTFfdDIwIHYxXzIwID0g JlFXaWRnZXQ6OnNob3dNaW5pbWl6ZWQ7CiAgICBvbTFfdDIwIG92MV8yMCA9IChvbTFfdDIwKXYx XzIwOwogICAgbTFfdDIxIHYxXzIxID0gJlFXaWRnZXQ6OnNob3dNYXhpbWl6ZWQ7CiAgICBvbTFf dDIxIG92MV8yMSA9IChvbTFfdDIxKXYxXzIxOwogICAgbTFfdDIyIHYxXzIyID0gJlFXaWRnZXQ6 OnNob3dGdWxsU2NyZWVuOwogICAgb20xX3QyMiBvdjFfMjIgPSAob20xX3QyMil2MV8yMjsKICAg IG0xX3QyMyB2MV8yMyA9ICZRV2lkZ2V0OjpzaG93Tm9ybWFsOwogICAgb20xX3QyMyBvdjFfMjMg PSAob20xX3QyMyl2MV8yMzsKICAgIG0xX3QyNCB2MV8yNCA9ICZRV2lkZ2V0Ojpwb2xpc2g7CiAg ICBvbTFfdDI0IG92MV8yNCA9IChvbTFfdDI0KXYxXzI0OwogICAgbTFfdDI1IHYxXzI1ID0gJlFX aWRnZXQ6OmNvbnN0UG9saXNoOwogICAgb20xX3QyNSBvdjFfMjUgPSAob20xX3QyNSl2MV8yNTsK ICAgIG0xX3QyNiB2MV8yNiA9ICZRV2lkZ2V0OjpjbG9zZTsKICAgIG9tMV90MjYgb3YxXzI2ID0g KG9tMV90MjYpdjFfMjY7CiAgICBtMV90MjcgdjFfMjcgPSAmUVdpZGdldDo6cmFpc2U7CiAgICBv bTFfdDI3IG92MV8yNyA9IChvbTFfdDI3KXYxXzI3OwogICAgbTFfdDI4IHYxXzI4ID0gJlFXaWRn ZXQ6Omxvd2VyOwogICAgb20xX3QyOCBvdjFfMjggPSAob20xX3QyOCl2MV8yODsKICAgIG0xX3Qy OSB2MV8yOSA9ICZRV2lkZ2V0OjpzdGFja1VuZGVyOwogICAgb20xX3QyOSBvdjFfMjkgPSAob20x X3QyOSl2MV8yOTsKICAgIG0xX3QzMCB2MV8zMCA9ICZRV2lkZ2V0Ojptb3ZlOwogICAgb20xX3Qz MCBvdjFfMzAgPSAob20xX3QzMCl2MV8zMDsKICAgIG0xX3QzMSB2MV8zMSA9ICZRV2lkZ2V0Ojpt b3ZlOwogICAgb20xX3QzMSBvdjFfMzEgPSAob20xX3QzMSl2MV8zMTsKICAgIG0xX3QzMiB2MV8z MiA9ICZRV2lkZ2V0OjpyZXNpemU7CiAgICBvbTFfdDMyIG92MV8zMiA9IChvbTFfdDMyKXYxXzMy OwogICAgbTFfdDMzIHYxXzMzID0gJlFXaWRnZXQ6OnJlc2l6ZTsKICAgIG9tMV90MzMgb3YxXzMz ID0gKG9tMV90MzMpdjFfMzM7CiAgICBtMV90MzQgdjFfMzQgPSAmUVdpZGdldDo6c2V0R2VvbWV0 cnk7CiAgICBvbTFfdDM0IG92MV8zNCA9IChvbTFfdDM0KXYxXzM0OwogICAgbTFfdDM1IHYxXzM1 ID0gJlFXaWRnZXQ6OnNldEdlb21ldHJ5OwogICAgb20xX3QzNSBvdjFfMzUgPSAob20xX3QzNSl2 MV8zNTsKICAgIG0xX3QzNiB2MV8zNiA9ICZRV2lkZ2V0Ojpmb2N1c1Byb3h5RGVzdHJveWVkOwog ICAgb20xX3QzNiBvdjFfMzYgPSAob20xX3QzNil2MV8zNjsKICAgIFFNZXRhRGF0YSAqc2xvdF90 YmwgPSBRTWV0YU9iamVjdDo6bmV3X21ldGFkYXRhKDM3KTsKICAgIFFNZXRhRGF0YTo6QWNjZXNz ICpzbG90X3RibF9hY2Nlc3MgPSBRTWV0YU9iamVjdDo6bmV3X21ldGFhY2Nlc3MoMzcpOwogICAg c2xvdF90YmxbMF0ubmFtZSA9ICJzZXRFbmFibGVkKGJvb2wpIjsKICAgIHNsb3RfdGJsWzBdLnB0 ciA9IChRTWVtYmVyKW92MV8wOwogICAgc2xvdF90YmxfYWNjZXNzWzBdID0gUU1ldGFEYXRhOjpQ dWJsaWM7CiAgICBzbG90X3RibFsxXS5uYW1lID0gInNldERpc2FibGVkKGJvb2wpIjsKICAgIHNs b3RfdGJsWzFdLnB0ciA9IChRTWVtYmVyKW92MV8xOwogICAgc2xvdF90YmxfYWNjZXNzWzFdID0g UU1ldGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFsyXS5uYW1lID0gInNldENhcHRpb24oY29u c3QgUVN0cmluZyYpIjsKICAgIHNsb3RfdGJsWzJdLnB0ciA9IChRTWVtYmVyKW92MV8yOwogICAg c2xvdF90YmxfYWNjZXNzWzJdID0gUU1ldGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFszXS5u YW1lID0gInNldEljb24oY29uc3QgUVBpeG1hcCYpIjsKICAgIHNsb3RfdGJsWzNdLnB0ciA9IChR TWVtYmVyKW92MV8zOwogICAgc2xvdF90YmxfYWNjZXNzWzNdID0gUU1ldGFEYXRhOjpQdWJsaWM7 CiAgICBzbG90X3RibFs0XS5uYW1lID0gInNldEljb25UZXh0KGNvbnN0IFFTdHJpbmcmKSI7CiAg ICBzbG90X3RibFs0XS5wdHIgPSAoUU1lbWJlcilvdjFfNDsKICAgIHNsb3RfdGJsX2FjY2Vzc1s0 XSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbNV0ubmFtZSA9ICJzZXRNb3VzZVRy YWNraW5nKGJvb2wpIjsKICAgIHNsb3RfdGJsWzVdLnB0ciA9IChRTWVtYmVyKW92MV81OwogICAg c2xvdF90YmxfYWNjZXNzWzVdID0gUU1ldGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFs2XS5u YW1lID0gInNldEZvY3VzKCkiOwogICAgc2xvdF90YmxbNl0ucHRyID0gKFFNZW1iZXIpb3YxXzY7 CiAgICBzbG90X3RibF9hY2Nlc3NbNl0gPSBRTWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3RfdGJs WzddLm5hbWUgPSAiY2xlYXJGb2N1cygpIjsKICAgIHNsb3RfdGJsWzddLnB0ciA9IChRTWVtYmVy KW92MV83OwogICAgc2xvdF90YmxfYWNjZXNzWzddID0gUU1ldGFEYXRhOjpQdWJsaWM7CiAgICBz bG90X3RibFs4XS5uYW1lID0gInNldFVwZGF0ZXNFbmFibGVkKGJvb2wpIjsKICAgIHNsb3RfdGJs WzhdLnB0ciA9IChRTWVtYmVyKW92MV84OwogICAgc2xvdF90YmxfYWNjZXNzWzhdID0gUU1ldGFE YXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFs5XS5uYW1lID0gInVwZGF0ZSgpIjsKICAgIHNsb3Rf dGJsWzldLnB0ciA9IChRTWVtYmVyKW92MV85OwogICAgc2xvdF90YmxfYWNjZXNzWzldID0gUU1l dGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFsxMF0ubmFtZSA9ICJ1cGRhdGUoaW50LGludCxp bnQsaW50KSI7CiAgICBzbG90X3RibFsxMF0ucHRyID0gKFFNZW1iZXIpb3YxXzEwOwogICAgc2xv dF90YmxfYWNjZXNzWzEwXSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMTFdLm5h bWUgPSAidXBkYXRlKGNvbnN0IFFSZWN0JikiOwogICAgc2xvdF90YmxbMTFdLnB0ciA9IChRTWVt YmVyKW92MV8xMTsKICAgIHNsb3RfdGJsX2FjY2Vzc1sxMV0gPSBRTWV0YURhdGE6OlB1YmxpYzsK ICAgIHNsb3RfdGJsWzEyXS5uYW1lID0gInJlcGFpbnQoKSI7CiAgICBzbG90X3RibFsxMl0ucHRy ID0gKFFNZW1iZXIpb3YxXzEyOwogICAgc2xvdF90YmxfYWNjZXNzWzEyXSA9IFFNZXRhRGF0YTo6 UHVibGljOwogICAgc2xvdF90YmxbMTNdLm5hbWUgPSAicmVwYWludChib29sKSI7CiAgICBzbG90 X3RibFsxM10ucHRyID0gKFFNZW1iZXIpb3YxXzEzOwogICAgc2xvdF90YmxfYWNjZXNzWzEzXSA9 IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMTRdLm5hbWUgPSAicmVwYWludChpbnQs aW50LGludCxpbnQsYm9vbCkiOwogICAgc2xvdF90YmxbMTRdLnB0ciA9IChRTWVtYmVyKW92MV8x NDsKICAgIHNsb3RfdGJsX2FjY2Vzc1sxNF0gPSBRTWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3Rf dGJsWzE1XS5uYW1lID0gInJlcGFpbnQoY29uc3QgUVJlY3QmLGJvb2wpIjsKICAgIHNsb3RfdGJs WzE1XS5wdHIgPSAoUU1lbWJlcilvdjFfMTU7CiAgICBzbG90X3RibF9hY2Nlc3NbMTVdID0gUU1l dGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFsxNl0ubmFtZSA9ICJyZXBhaW50KGNvbnN0IFFS ZWdpb24mLGJvb2wpIjsKICAgIHNsb3RfdGJsWzE2XS5wdHIgPSAoUU1lbWJlcilvdjFfMTY7CiAg ICBzbG90X3RibF9hY2Nlc3NbMTZdID0gUU1ldGFEYXRhOjpQdWJsaWM7CiAgICBzbG90X3RibFsx N10ubmFtZSA9ICJzaG93KCkiOwogICAgc2xvdF90YmxbMTddLnB0ciA9IChRTWVtYmVyKW92MV8x NzsKICAgIHNsb3RfdGJsX2FjY2Vzc1sxN10gPSBRTWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3Rf dGJsWzE4XS5uYW1lID0gImhpZGUoKSI7CiAgICBzbG90X3RibFsxOF0ucHRyID0gKFFNZW1iZXIp b3YxXzE4OwogICAgc2xvdF90YmxfYWNjZXNzWzE4XSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAg c2xvdF90YmxbMTldLm5hbWUgPSAiaWNvbmlmeSgpIjsKICAgIHNsb3RfdGJsWzE5XS5wdHIgPSAo UU1lbWJlcilvdjFfMTk7CiAgICBzbG90X3RibF9hY2Nlc3NbMTldID0gUU1ldGFEYXRhOjpQdWJs aWM7CiAgICBzbG90X3RibFsyMF0ubmFtZSA9ICJzaG93TWluaW1pemVkKCkiOwogICAgc2xvdF90 YmxbMjBdLnB0ciA9IChRTWVtYmVyKW92MV8yMDsKICAgIHNsb3RfdGJsX2FjY2Vzc1syMF0gPSBR TWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3RfdGJsWzIxXS5uYW1lID0gInNob3dNYXhpbWl6ZWQo KSI7CiAgICBzbG90X3RibFsyMV0ucHRyID0gKFFNZW1iZXIpb3YxXzIxOwogICAgc2xvdF90Ymxf YWNjZXNzWzIxXSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMjJdLm5hbWUgPSAi c2hvd0Z1bGxTY3JlZW4oKSI7CiAgICBzbG90X3RibFsyMl0ucHRyID0gKFFNZW1iZXIpb3YxXzIy OwogICAgc2xvdF90YmxfYWNjZXNzWzIyXSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90 YmxbMjNdLm5hbWUgPSAic2hvd05vcm1hbCgpIjsKICAgIHNsb3RfdGJsWzIzXS5wdHIgPSAoUU1l bWJlcilvdjFfMjM7CiAgICBzbG90X3RibF9hY2Nlc3NbMjNdID0gUU1ldGFEYXRhOjpQdWJsaWM7 CiAgICBzbG90X3RibFsyNF0ubmFtZSA9ICJwb2xpc2goKSI7CiAgICBzbG90X3RibFsyNF0ucHRy ID0gKFFNZW1iZXIpb3YxXzI0OwogICAgc2xvdF90YmxfYWNjZXNzWzI0XSA9IFFNZXRhRGF0YTo6 UHVibGljOwogICAgc2xvdF90YmxbMjVdLm5hbWUgPSAiY29uc3RQb2xpc2goKSI7CiAgICBzbG90 X3RibFsyNV0ucHRyID0gKFFNZW1iZXIpb3YxXzI1OwogICAgc2xvdF90YmxfYWNjZXNzWzI1XSA9 IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMjZdLm5hbWUgPSAiY2xvc2UoKSI7CiAg ICBzbG90X3RibFsyNl0ucHRyID0gKFFNZW1iZXIpb3YxXzI2OwogICAgc2xvdF90YmxfYWNjZXNz WzI2XSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMjddLm5hbWUgPSAicmFpc2Uo KSI7CiAgICBzbG90X3RibFsyN10ucHRyID0gKFFNZW1iZXIpb3YxXzI3OwogICAgc2xvdF90Ymxf YWNjZXNzWzI3XSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMjhdLm5hbWUgPSAi bG93ZXIoKSI7CiAgICBzbG90X3RibFsyOF0ucHRyID0gKFFNZW1iZXIpb3YxXzI4OwogICAgc2xv dF90YmxfYWNjZXNzWzI4XSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90YmxbMjldLm5h bWUgPSAic3RhY2tVbmRlcihRV2lkZ2V0KikiOwogICAgc2xvdF90YmxbMjldLnB0ciA9IChRTWVt YmVyKW92MV8yOTsKICAgIHNsb3RfdGJsX2FjY2Vzc1syOV0gPSBRTWV0YURhdGE6OlB1YmxpYzsK ICAgIHNsb3RfdGJsWzMwXS5uYW1lID0gIm1vdmUoaW50LGludCkiOwogICAgc2xvdF90YmxbMzBd LnB0ciA9IChRTWVtYmVyKW92MV8zMDsKICAgIHNsb3RfdGJsX2FjY2Vzc1szMF0gPSBRTWV0YURh dGE6OlB1YmxpYzsKICAgIHNsb3RfdGJsWzMxXS5uYW1lID0gIm1vdmUoY29uc3QgUVBvaW50Jiki OwogICAgc2xvdF90YmxbMzFdLnB0ciA9IChRTWVtYmVyKW92MV8zMTsKICAgIHNsb3RfdGJsX2Fj Y2Vzc1szMV0gPSBRTWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3RfdGJsWzMyXS5uYW1lID0gInJl c2l6ZShpbnQsaW50KSI7CiAgICBzbG90X3RibFszMl0ucHRyID0gKFFNZW1iZXIpb3YxXzMyOwog ICAgc2xvdF90YmxfYWNjZXNzWzMyXSA9IFFNZXRhRGF0YTo6UHVibGljOwogICAgc2xvdF90Ymxb MzNdLm5hbWUgPSAicmVzaXplKGNvbnN0IFFTaXplJikiOwogICAgc2xvdF90YmxbMzNdLnB0ciA9 IChRTWVtYmVyKW92MV8zMzsKICAgIHNsb3RfdGJsX2FjY2Vzc1szM10gPSBRTWV0YURhdGE6OlB1 YmxpYzsKICAgIHNsb3RfdGJsWzM0XS5uYW1lID0gInNldEdlb21ldHJ5KGludCxpbnQsaW50LGlu dCkiOwogICAgc2xvdF90YmxbMzRdLnB0ciA9IChRTWVtYmVyKW92MV8zNDsKICAgIHNsb3RfdGJs X2FjY2Vzc1szNF0gPSBRTWV0YURhdGE6OlB1YmxpYzsKICAgIHNsb3RfdGJsWzM1XS5uYW1lID0g InNldEdlb21ldHJ5KGNvbnN0IFFSZWN0JikiOwogICAgc2xvdF90YmxbMzVdLnB0ciA9IChRTWVt YmVyKW92MV8zNTsKICAgIHNsb3RfdGJsX2FjY2Vzc1szNV0gPSBRTWV0YURhdGE6OlB1YmxpYzsK ICAgIHNsb3RfdGJsWzM2XS5uYW1lID0gImZvY3VzUHJveHlEZXN0cm95ZWQoKSI7CiAgICBzbG90 X3RibFszNl0ucHRyID0gKFFNZW1iZXIpb3YxXzM2OwogICAgc2xvdF90YmxfYWNjZXNzWzM2XSA9 IFFNZXRhRGF0YTo6UHJpdmF0ZTsKICAgIG1ldGFPYmogPSBRTWV0YU9iamVjdDo6bmV3X21ldGFv YmplY3QoCiAgICAgICAgIlFXaWRnZXQiLCAiUU9iamVjdCIsCiAgICAgICAgc2xvdF90YmwsIDM3 LAogICAgICAgIDAsIDAsCgogICAgICAgIHByb3BzX3RibCwgNTcsCiAgICAgICAgZW51bV90Ymws IDQsCgogICAgICAgIDAsIDAgKTsKICAgIG1ldGFPYmotPnNldF9zbG90X2FjY2Vzcyggc2xvdF90 YmxfYWNjZXNzICk7CgoKICAgIHJldHVybiBtZXRhT2JqOwp9Cg==