From mboxrd@z Thu Jan 1 00:00:00 1970 From: cgw@alum.mit.edu To: gcc-gnats@gcc.gnu.org Subject: c++/3085: Internal compiler error compiling a gtk-- test prog. Date: Fri, 08 Jun 2001 08:46:00 -0000 Message-id: <20010608154523.23367.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00297.html List-Id: >Number: 3085 >Category: c++ >Synopsis: Internal compiler error compiling a gtk-- test prog. >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jun 08 08:46:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: cgw@alum.mit.edu >Release: gcc version 2.95.3 20010315 (release) >Organization: >Environment: SunOS 5.7 Generic_106542-12 i86pc i386 i86pc >Description: Got a Internal compiler error 373 compiling a trivial test program. (The test program is incorrect, but I don't think that it should trigger a compiler errror). Also note that the page http://www.gnu.org/software/gcc/bugs.html suggests the use of "gccbug" for submitting bug reports, but as far as I can tell this program is not installed with gcc. >How-To-Repeat: g++ -c t_gtk.ii >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="t_gtk.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="t_gtk.ii" IyAxICJ0X2d0ay5jcHAiCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz Mi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtIiAxIDMKIAogCgoK CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjcvaW5j bHVkZS9fR19jb25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAgICAgICBpbnQg ICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7 CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f KF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf XygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MzJfdCBf X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H X3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiAgICAg ICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf X0RJX18pKSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xsb25nOwpfX2V4 dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsKCgoKCgoKCgp0 eXBlZGVmIGxvbmcgX0dfY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2Rldl90Owp0 eXBlZGVmIGxvbmcgX0dfZnBvc190Owp0eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBfR19pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21vZGVfdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19vZmZfdDsKdHlw ZWRlZiBsb25nIF9HX3BpZF90OwoKCgp0eXBlZGVmIGludCBfR19wdHJkaWZmX3Q7CnR5cGVkZWYg aW50ICAgX0dfc2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlw ZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9HX3VpZF90Owp0eXBlZGVmIGxvbmcg aW50IF9HX3djaGFyX3Q7CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3NzaXplX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlzdDsK CgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJp czIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKCgoKCgoKIAoKCiMgMTkgIi9vcHQv Z251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYu aCIgMyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYt cGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMg MTkwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKCgogCgojIDI3MSAiL29wdC9nbnUvbGliL2djYy1saWIv aTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgojIDI4MyAi L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAzIDQKCgogCgogCgojIDMxNyAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIyA4NiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu OTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjcvaW5jbHVkZS9fR19jb25maWcuaCIg MiAzIDQKCgojIDMwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoKCgoKCgoKCgoK CgoKIyA1NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKIyAxMDQgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3Ry dWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc1ICIvb3B0L2dudS9saWIv Z2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvbGliaW8uaCIgMwoKCgoKCgoKCgogICAgdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoK IAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1 Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDIwOCAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkg CgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJ IAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNo YXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lP X2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVf YmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7 ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9j aGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwoKCgogIF9HX29mZl90ICBfb2Zm c2V0OwoKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7 CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCgoKCgoKCgp9OwoKCgoKCgoKCgoKCnN0cnVjdCBf SU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lP X3N0ZG91dF8sIF9JT19zdGRlcnJfOwoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIF9HX3NzaXpl X3QgICgqcmVhZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsK ICBfR19zc2l6ZV90ICAoKndyaXRlKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICos IF9HX3NzaXplX3QgKSAgOwogIF9HX29mZl90ICAoKnNlZWspICAoc3RydWN0IF9JT19GSUxFICos IF9HX29mZl90ICwgaW50KSAgOwogIGludCAoKmNsb3NlKSAgKHN0cnVjdCBfSU9fRklMRSAqKSAg Owp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CgogCnN0cnVjdCBfSU9fY29va2llX2ZpbGUK ewogIHN0cnVjdCBfSU9fRklMRSBmaWxlOwogIGNvbnN0IHZvaWQgKnZ0YWJsZTsKICB2b2lkICpj b29raWU7CiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBpb19mdW5jdGlvbnM7Cn07CgoKCmV4 dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAgOwpleHRl cm4gaW50IF9fdWZsb3cgIChfSU9fRklMRSAqKSAgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChf SU9fRklMRSAqLCBpbnQpICA7CgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAg KF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJ TEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9fRklMRSAqX19mcCkgIDsKZXh0 ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7CgpleHRlcm4gaW50IF9JT19w ZWVrY19sb2NrZWQgIChfSU9fRklMRSAqX19mcCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zs b2NrZmlsZSAgKF9JT19GSUxFICopICA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAgKF9J T19GSUxFICopICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICA7 CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiwgY29uc3Qg Y2hhciAqLCBfR192YV9saXN0ICwgaW50ICopICA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAo X0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfR192YV9saXN0ICkgIDsKZXh0ZXJuIF9HX3NzaXpl X3QgIF9JT19wYWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfR19zc2l6ZV90ICkgIDsKZXh0ZXJuIF9H X3NpemVfdCAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zaXplX3QgKSAgOwoK CgoKCmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfR19vZmZfdCAs IGludCwgaW50KSAgOwpleHRlcm4gX0dfb2ZmX3QgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwg X0dfb2ZmX3QgLCBpbnQpICA7CgoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChf SU9fRklMRSAqKSAgOwoKCn0KCgoKIyAzNiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAy IDMKCn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlz dHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRl ZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBl ZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRm bGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxk cwp7ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQg X3dpZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lv c3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNp b247CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL29wdC9n bnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRz IHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVi bGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9z dGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90ICBz dHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAx ICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7Cglp biA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglu b2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9 IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYg ZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAg bGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0 PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAg LAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9 IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQw MDAwIAoKCgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9h dGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRl cm5hbAogICAgfTsKCiMgMTc3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgogICAg b3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9z dHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsg fQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHNo b3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3 ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxh Z3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKCWZtdGZsYWdzIG9s ZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBp bnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNp c2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVj aXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBvbGRwOyB9CiAgICBmbXRmbGFn cyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFn cyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZh bCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyA9 IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm bXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFn czsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNv bnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUg PSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJv d19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkg ewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAm IF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZs YWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBm bGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAg IGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBj b25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25z dCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50 IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRl IHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkg Y29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50 IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRp b25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhp b3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7CglpZiAoX3N0YXRlICYgX2V4 Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29u c3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYgKl9z KSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJidWYgPSBfczsgY2xlYXIg KCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9u KTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3luY193aXRoX3N0ZGlvKDEp OyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0YXRpYyBpbnQgeGFsbG9j KCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7CiAg ICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNvbnN0OwoKCgoKCgoKCgog ICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9 OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFt KiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lk IGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlv czo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAogCmNsYXNzIHN0cmVhbW1hcmtl ciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOwogICAg dm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1YmxpYzoK ICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIoKTsKICAg IGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYp OwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxF IHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAg ZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAg Y29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxF Kil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9h bGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lk IF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh ZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9 CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAg PyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3Qg eyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVy biBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVy biBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAg Y2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1 ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsg cmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihj aGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVy biBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2Zs YWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3Mg IHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxh Z3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGlu dCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19y ZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47 IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNl dHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0 cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcs IGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBf YXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsg X0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0 YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwIDsgfQog ICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jh c2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGlu X2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICAgCiAgICBjaGFy ICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZl X2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KICAg ICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQg OiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFz ZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBo YXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsIDsgfQogICAgaW50 IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0KICAgIHZvaWQg ZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgCiAgICBpbnQg cHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0KICAgIGludCBzd2l0Y2hfdG9f Z2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAg ICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVi dWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92 ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIAog ICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBj KTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1z aXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl IG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2Rpciwg aW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9z KHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CgogICAgc3RyZWFt cG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6Omlu fGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7 IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9z Ojppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9k ZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1v ZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBv cywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBz ZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0 dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFy aywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3Vu Z2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAyICA/IDEgOiAw OyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6 IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAyIDsg ZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKCXsgaWYg KGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4weDIwMCA7IH0KICAgIGludCBh bGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxz ZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAo YmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7 CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7 IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3Jp dGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl IG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFk LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0 cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4o dGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7 CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIF9H X3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRj KGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsg cmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhp cyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVy ZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAg dGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19y ZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkg IHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAg ICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3Jl YWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBh cCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAg Li4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCk7CiAg ICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAgdmlydHVhbCBzdHJlYW1z aXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBz dHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQg c3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKCgoKCn07Cgog CiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2 b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OyAgCiAg ICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hh ciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGlu dCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFy ICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Bl bm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygp OwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQgaXNfb3Bl bigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyBy ZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBjbG9zZSgp OwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vl a29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAg ICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgc3RyZWFt c2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVhbXNpemUg eHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAg cHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2soKSAhPSBl Z3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdw dHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0 cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBz dHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2Zm LCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFy Kiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKICAgIHZp cnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJl YW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJp dCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUgPSB0aWVf dG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsK CgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFt YnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBp b3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5 cyk7Cn0KfSAgCgojIDMxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJu ICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19t YW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBl ZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhp c3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVy biBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3Ry ZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAog ICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVh bShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkg ewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgp OyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYg KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJl YW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMp OyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg c3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMs IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30K ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0 ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVh bSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAg ICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZv cm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIg YykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29u c3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7 IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVy biAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNv bnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFt JiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9u ZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4 dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNp b25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3Ry ZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAg IG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8 KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJl dHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJs ZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8 PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4p IHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9zdHJlYW0m IG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9 CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3MgaXN0cmVh bSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAg X2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9n Y291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9f bnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9 ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh ciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K ICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFy JiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIq IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1 bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4g Z2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25l ZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNp Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0 KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBj aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgo Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0 cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFt c2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFt JiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVh ZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNp emUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYg Z2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMo Y2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkg ewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsK CSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwg bmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tp cHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBp bnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4g MDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxh Z3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsK CX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFp bGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+ aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAg IHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4g KC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAo Y2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAg cmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90ICBnY291 bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50 IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJl YW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3Ry ZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29k KCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQp OwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBf c3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAq dGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0 cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCgoKCgoK ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1 bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0 cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFy KilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9y Pj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3RyZWFt JiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9y Pj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z aWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAg aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9y dCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9wZXJh dG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBpc3Ry ZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KCBf X21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0m IG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAg IGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6IHB1 YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7 IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07 CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6 CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0 cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQog ICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07 CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6 CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0 cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQog ICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07 CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19vc3RyZWFt X3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNs b2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJl YW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBv dXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0 cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6 OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z JiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv Y3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9j dCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgojIDYgIi9v cHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9pb3N0cmVhbSIgMiAzCgoKIyAxICJ0X2d0ay5jcHAiIDIKCiMgMSAiL29w dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2ZzdHJlYW0iIDEgMwogCiAKCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxp Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvZnN0 cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNl CgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGZzdHJlYW1iYXNlIDogdmlydHVhbCBwdWJsaWMgaW9z IHsKCiAgICBtdXRhYmxlIGZpbGVidWYgX19teV9mYjsgIAoKICAgIHZvaWQgX19mYl9pbml0ICgp OwogIHB1YmxpYzoKICAgIGZzdHJlYW1iYXNlKCk7CiAgICBmc3RyZWFtYmFzZShpbnQgZmQpOwog ICAgZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk7ICAKICAgIGZzdHJlYW1iYXNl KGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIHZvaWQgY2xv c2UoKTsKCiAgICBmaWxlYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuICZfX215X2ZiOyB9CgoK CiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQp OwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVuKCk7IH0K ICAgIHZvaWQgc2V0YnVmKGNoYXIgKnB0ciwgaW50IGxlbikgeyByZGJ1ZigpLT5zZXRidWYocHRy LCBsZW4pOyB9CiAgICB2b2lkIGF0dGFjaChpbnQgZmQpOwoKCgoKfTsKCmNsYXNzIGlmc3RyZWFt IDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGljOgogICAgaWZz dHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQpIDogZnN0cmVh bWJhc2UoZmQpIHsgfQogICAgaWZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3Ry ZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIGlmc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGlu dCBtb2RlPWlvczo6aW4sIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUg fCBpb3M6OmluLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQg bW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBt b2RlIHwgaW9zOjppbiwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGljIGZzdHJl YW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6IGZzdHJl YW1iYXNlKCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQog ICAgb2ZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwg bCkgeyB9ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0 LCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjpvdXQsIHBy b3QpIHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0 LCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlIHwgaW9zOjpv dXQsIHByb3QpOyB9Cn07CgpjbGFzcyBmc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJs aWMgaW9zdHJlYW0gewogIHB1YmxpYzoKICAgIGZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9 CiAgICBmc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBmc3RyZWFtKGNv bnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShu YW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIGZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkg OiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpu YW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwg bW9kZSwgcHJvdCk7IH0KfTsKfSAgCgojIDYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtIiAyIDMK CgojIDIgInRfZ3RrLmNwcCIgMgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIAoK CgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwogCiAKCiAKIAogCiAK IAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK CgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMKIAogCgoKCiMgMSAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMgNAoKCgoKCgogCgoKCgoKCgogCgogCgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L2du dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi IDMgNAoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90 OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAKCiMgMzE3ICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMg NAoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRl ZiIgMiAzCgoKIyAzNSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAi L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAK IAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKIAojcHJhZ21hIGludGVyZmFjZSAic3RkL3N0 cmFpdHMuaCIKCgoKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0 IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKCiAgIAoK ICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp CiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcSAoY29uc3QgY2hhcl90eXBlJiBjMSwg Y29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMg Ym9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsg cmV0dXJuICEoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYg YzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0 aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVybiBjaGFyX3R5cGUoKTsgfSAgCiAgc3RhdGljIGJv b2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAwOyB9CiAgIAogIAogICAKCiAgc3RhdGlj IGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBz aXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyAr K2kpCglpZiAobmUgKHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/ IC0xIDogMTsKCiAgICAgIHJldHVybiAwOwogICAgfQogICAgCiAgc3RhdGljIHNpemVfdCBsZW5n dGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3 aGlsZSAobmUgKCpzKyssIGVvcyAoKSkpCgkrK2w7CiAgICAgIHJldHVybiBsOwogICAgfQoKICBz dGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy LCBzaXplX3QgbikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgczJb bl0pOwogICAgICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNo YXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBj aGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyAr K2kpCglhc3NpZ24gKGFbaV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkK CWFzc2lnbiAoczFbaV0sIGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBj aGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3Qg bikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJl dHVybiBzMTsKICAgIH0KfTsKCmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL29w dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2NjdHlwZSIgMSAzCiAKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3R5cGUuaAkx LjMwCTk4LzAxLzE2IFNNSSIJCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o IiAxIDMgNAogCgoKCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWZlYXR1cmVfdGVzdHMu aAkxLjE3CTk3LzEyLzA0IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAx IDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1 IFNNSSIKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoK IAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCiMgMzIzICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCgoKCgoKfQoKCgoj IDE1ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMiAzIDQKCgoKZXh0ZXJuICJD IiB7CgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoK IyAxOCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOwpleHRlcm4gaW50IGlz YWxwaGEoaW50KTsKZXh0ZXJuIGludCBpc2NudHJsKGludCk7CmV4dGVybiBpbnQgaXNkaWdpdChp bnQpOwpleHRlcm4gaW50IGlzZ3JhcGgoaW50KTsKZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CmV4 dGVybiBpbnQgaXNwcmludChpbnQpOwpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsKZXh0ZXJuIGlu dCBpc3NwYWNlKGludCk7CmV4dGVybiBpbnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRp Z2l0KGludCk7CmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50 KTsKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsK ZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CgoKCmV4 dGVybiB1bnNpZ25lZCBjaGFyCV9fY3R5cGVbXTsKZXh0ZXJuIHVuc2lnbmVkIGludAkqX19jdHlw ZV9tYXNrOwpleHRlcm4gaW50CQkqX190cmFuc191cHBlcjsKZXh0ZXJuIGludAkJKl9fdHJhbnNf bG93ZXI7CgogCgoKCgoKCgoKCgojIDEwMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTYwICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMyA0CgoKCn0KCgoKIyA2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAyIDMKCgojIDEwNSAi L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDIgMwoKIyAxICIvb3B0L2dudS9saWIvZ2Nj LWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv Y3N0cmluZyIgMSAzCiAKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiAK IAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJpbmcuaAkxLjIyCTk3LzEy LzIyIFNNSSIJCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZv aWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1l bW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHko Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBjaGFyICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK CmV4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpl eHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQg c3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RybmNtcChj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25z dCB2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICos IGludCk7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 CmV4dGVybiBjaGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJu IGNoYXIgKnN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVy biBjaGFyICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICop OwoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl X3QpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQp OwpleHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl cm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoK CgoKCmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKCgojIDE0MyAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzIDQKCgoKfQoKCgojIDcgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYt cGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAy IDMKCgojIDk0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMwoKCgojIDEwNiAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0ZC9zdHJhaXRzLmgiIDIgMwoKCnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNo YXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNo YXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0 aWMgYm9vbCBlcSAoY29uc3QgY2hhcl90eXBlICYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAg ICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlw ZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgIT0gYzIpOyB9CiAg c3RhdGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp CiAgICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJl dHVybiAwOyB9CiAgc3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAoKF9f Y3R5cGUgKyAxKVsgYSBdICYgMHgwMDAwMDAwOCApIDsgfQoKICBzdGF0aWMgaW50IGNvbXBhcmUg KGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAg eyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGggKGNv bnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMgY2hh cl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3Qg bikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBzdGF0 aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBz aXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4pOyB9 CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUm IGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMsIG4p OyB9Cn07CgojIDE1OSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKCn0gIAoKIyAz NiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgogCiMgMSAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9n Y2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKCiAK IAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTc4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBj LXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5o IiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMzQgIi9vcHQvZ251L2xpYi9n Y2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoK CgoKCgoKIAogCiMgMzE2ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAxOCAiL29wdC9nbnUvbGliL2dj Yy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2FsbG9jLmgiIDIgMwoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJp czIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiAK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoK CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgNTMgIi9vcHQvZ251L2xp Yi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQK IAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGxpYi5oCTEuNDQJOTgv MDEvMjIgU01JIgkKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZglzdHJ1Y3QgewoJaW50 CXF1b3Q7CglpbnQJcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZwlxdW90OwoJ bG9uZwlyZW07Cn0gbGRpdl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcgbG9uZwlxdW90OwoJ bG9uZyBsb25nCXJlbTsKfSBsbGRpdl90OwoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nCXVp ZF90OwkJCSAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiMgMTAxICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMgNAoKCiAKIyAxMTcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKZXh0 ZXJuIHVuc2lnbmVkIGNoYXIJX19jdHlwZVtdOwoKCgpleHRlcm4gZG91YmxlIGF0b2YoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBh dG9sKGNvbnN0IGNoYXIgKik7CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hh ciAqKik7CmV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp OwpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKios IGludCk7CgpleHRlcm4gaW50IHJhbmQodm9pZCk7CmV4dGVybiB2b2lkIHNyYW5kKHVuc2lnbmVk IGludCk7CgoKCgoKZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2 b2lkIGZyZWUodm9pZCAqKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gdm9p ZCAqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CgpleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKZXh0 ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4 dGVybiB2b2lkIF9leGl0aGFuZGxlKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNo YXIgKik7CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gdm9pZCAqYnNl YXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCop KGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwg c2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Cgpl eHRlcm4gaW50IGFicyhpbnQpOwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxv bmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKCmV4dGVy biBpbnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50 IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3 Y2hhcl90KTsKCmV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgodm9pZCk7CmV4dGVybiBkb3VibGUg ZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBz aG9ydCAqKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxv bmcgbHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcg bnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgo dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CmV4dGVybiBpbnQg cHV0ZW52KGNoYXIgKik7CmV4dGVybiB2b2lkIHNldGtleShjb25zdCBjaGFyICopOwoKCgoKCmV4 dGVybiB2b2lkIHN3YWIoY29uc3QgY2hhciAqLCBjaGFyICosIGludCk7CgoKCgpleHRlcm4gaW50 CW1rc3RlbXAoY2hhciAqKTsKCgpleHRlcm4gaW50CW1rc3RlbXA2NChjaGFyICopOwoKCgoKCgpl eHRlcm4gbG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0KGRvdWJsZSwg aW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dChkb3VibGUsIGludCwgaW50ICos IGludCAqKTsKZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBp bnQgZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwpleHRlcm4gaW50 ICBncmFudHB0KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5zaWduZWQsIGNoYXIgKiwg c2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFyICpta3RlbXAoY2hh ciAqKTsKZXh0ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQp OwpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwpleHRlcm4gY2hh ciAqc2V0c3RhdGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCk7 CmV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCAgdW5sb2NrcHQoaW50KTsKZXh0 ZXJuIHZvaWQgKnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsK ZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVy biBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hh ciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChj aGFyICosIHNpemVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsKZXh0 ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNv bnN0ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0 aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRw dyh1aWRfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQgKm1l bWFsaWduKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRl cm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxhYnMo bG9uZyBsb25nKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwpl eHRlcm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcg c3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hhciAq dWxsdG9zdHIodW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwoKCgoKIyAzODAgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMyA0CgoKCn0KCgoKIyA1NCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxv Yy5oIiAyIDMKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y Ljk1LjMvLi4vLi4vLi4vLi4vaTM4Ni1wYy1zb2xhcmlzMi43L2luY2x1ZGUvYXNzZXJ0LmgiIDEg MyA0CiAKCgoKCgoKCgojIDE5ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy LjcvMi45NS4zLy4uLy4uLy4uLy4uL2kzODYtcGMtc29sYXJpczIuNy9pbmNsdWRlL2Fzc2VydC5o IiAzIDQKCgoKCiAKCmV4dGVybiAiQyIgewpleHRlcm4gdm9pZCBfX2VwcmludGYgKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1 dGVfXyAoKG5vcmV0dXJuKSk7Cn0KCgoKCgoKCgoKCgoKIyA1MiAiL29wdC9nbnUvbGliL2djYy1s aWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMy LjcvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CgoKCiMgNTYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs b2MuaCIgMiAzCgoKCgoKCgoKCgoKIyA3OCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAz CgojIDg3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCiMgOTcgIi9vcHQvZ251L2xp Yi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYWxsb2MuaCIgMwoKIyAxMTUgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIg MwoKCiAKCgoKCgoKIAoKCgoKCiAKIAoKCgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xh c3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9T X29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos IHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciko KTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAg IHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19y ZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBz dGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApCiAgewogICAgZnJlZShf X3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICwg c2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f bmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9j KF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQg KCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgq IF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCiAKCgp0ZW1w bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2lu c3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Mo c2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9p ZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIg PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv Y19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9 CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFs bG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9 Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p bnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgq IF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7 KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k bGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0 IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hh bmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBp ZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikg X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXpl b2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3Qg X19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICog c2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAg ICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgogCiAKIAog CiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToK CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShz aXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2Nh dGUoX19uICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0 dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3Ag LSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8g MCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvb3B0 L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNjMgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9 PSBfX24iICksIDApICkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsg X1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChj aGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09 IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAl cydcbiIsCSAgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgLCAgIDI3MCAsICAiKihzaXpl X3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiApLCAwKSApKSA7CiAgICBjaGFyKiBfX3Jlc3VsdCA9 IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIF9T X2V4dHJhLCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9f bmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKCgoKCgoKCgoK CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCnRl bXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGUgewoKcHJpdmF0ZToKICAgCiAgIAoKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51 bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMv X0FMSUdOfTsKCiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQog ICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkgJiB+KF9BTElHTiAtIDEpKTsgfQoK cHJpdmF0ZSA6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0 X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIAogIH07CnByaXZhdGU6 CgoKCgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgc3Rh dGljICBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICBy ZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkvX0FMSUdOIC0gMSk7CiAgfQoKICAgCiAgc3Rh dGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsKICAgCiAgIAogIHN0YXRpYyBjaGFyKiBf U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKICAgCiAgc3RhdGlj IGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRp YyBzaXplX3QgX1NfaGVhcF9zaXplOwoKCgoKCgoKCgoKCgoKCgojIDM4OSAiL29wdC9nbnUvbGli L2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAg ICAgICAgICAgIF9Mb2NrKCkgeyAgOyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgIDsgfQogICAg fTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBh bGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwogICAg X09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewog ICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19t eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAg IAogICAgIAogICAgIAoKCgoKICAgIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYg KF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRf dXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9 IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAg fTsKCiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz dDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIG1hbGxvY19h bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgX19t eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAg IAoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAg ICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9j YXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoKfSA7Cgp0 eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2UgLCAwPiBhbGxvYzsKdHlwZWRl ZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7 CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxv YyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0Owog ICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9f Ynl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRl c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy ZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVy bihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAg ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3Rh bF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9m cmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1 cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQg PQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsK ICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09i aiogICogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xp c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2Jq KilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsK ICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAg ICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0 KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBf X2k7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsK ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9y IChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAg ICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu ZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg ICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xp c3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3Rh cnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf U19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19h bGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2Zy ZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9j OjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAog ICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3Rv X2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl dDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9 Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXpl X3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2No dW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsKICAg IF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4 dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5r KTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo X19uKTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215 X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBm b3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29i ajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7 CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9 IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0 ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoK ICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6 ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikp OwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25l d19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAg ICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Owog ICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwg X19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCgoKCgoKCgoKCgoKCgojIDYwMiAi L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi9vcHQvZ251L2xpYi9nY2Mt bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hh ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRf ZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g MDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqICAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9ORlJFRUxJU1RTCl0gPSB7 MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIAogCiAK CgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxs b2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsgICAgICAgICAgIApwdWJsaWM6CiAgdHlw ZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1Rw KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRl ZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVf dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30K ICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSAge30KICB0ZW1wbGF0ZSA8Y2xh c3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgIHt9CiAg fmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194 KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogICAKICBfVHAqIGFsbG9j YXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAw ID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkp CiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2lu dGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19u ICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkg CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1 Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg fQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxh dGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90 eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g c3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy biB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsK ICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxv YzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwog IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAg IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9j YXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkg dGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2Mp IHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0 b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2Mo X19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpICB7fQoK ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihf X3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDog MDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p CiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U cCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVy biBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBf X3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVz dHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B bGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qg ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3Rf cG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxj bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg X0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg X19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv Yz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3Vu ZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ex LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg X19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs eWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9w ZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJl dHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1 cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1w bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0o Y29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy biB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAog CgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNv bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCiAKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2Nh dG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21h bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+ CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg c2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBh bGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMg Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j PF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCiAK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19t YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9j YXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQg X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBf X2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190 eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2Fs bG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoK CgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgoj IDQwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwoKCgoKIAogCiAKIyAzOSAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFt OyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy aXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2 LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9w cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7 CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wg b3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShf X3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49 KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7 Cn0KCiAKCgoKIAogCiAKIyAzMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz Mi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMgMSAi L29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz Mi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgMzIgIi9vcHQvZ251L2xpYi9nY2Mt bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9p dGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRl cmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndh cmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9 OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcge307CgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf RGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRv cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgdmFs dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAg ICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVm IG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAg ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlwZWRl ZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAg ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICBwb2ludGVy OwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAg ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf VHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAg ICAgIHJlZmVyZW5jZTsKfTsKCiMgOTggIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg MwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9y X2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAg ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5 cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50 ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVy ZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBp dGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRl cjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsK ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg Y29uc3QgX1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAm ICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0 b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRl Z29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5s aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19k aXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6 dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNf Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBf X2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFz cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVu Y2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3Rh bmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRl ciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKCgoKCiMgMjU5ICIvb3B0L2du dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAt IF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewog IF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0 YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0 X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX2xhc3Qg LSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlz dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRv cl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBf X2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlz dGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg X0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxz ZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9S YW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAg ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX19pICs9IF9fbjsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk IGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5j ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf Q29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u dGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAg Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVy ZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6 IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jgog IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVl KSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJl dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDM3OCAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+Cmlu bGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250 YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0 ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5 cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1 dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy aXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4g ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRh aW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1 YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlw ZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9p ZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7 CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJh dG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKSAK ICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0Nv bnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5 cGUmIF9fdmFsdWUpIHsgCiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1 ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxf Q29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07 CgojIDQ1OSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNs YXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAg dHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVu Y2UgPSBfVHAmLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpj bGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9i aWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNl PiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1 YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJl bmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p dGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9C aWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJl Y3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVy ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1w ID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3It PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisr KCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv cisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJl dHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBf X3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMg NTUwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs X2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0 IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0 YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKIAog CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9y IAp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAg ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVu Y2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigp IHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy ZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJl bnQoX194LmN1cnJlbnQpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0 ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQo X194LmJhc2UoKSkge30KCiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVy biBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRv ciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9w ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9w ZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm IG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50 OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3Vy cmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAg IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAg fQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0 dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJl bmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVy biBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5j ZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJu ICooKnRoaXMgKyBfX24pOyB9ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9f eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9f eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KCiMgODA1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0 ZXJhdG9yLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRy ZGlmZl90PiAKY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9 PSA8PiAgKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImKTsKcHJvdGVjdGVk OgogIGlzdHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFy a2VyOwogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkg PyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92 YWx1ZTsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAg fQpwdWJsaWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp c3QgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAg ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgIHJlZmVyZW5jZTsK CiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKCZjaW4pLCBfTV9lbmRfbWFya2VyKGZh bHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19z KSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBf TV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh dG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkg eyAKICAgIF9NX3JlYWQoKTsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0 b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9U cCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7 CiAgfQp9OwoKIyA4NjQgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kpIHsK ICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAgX194 Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5fTV9l bmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9z dHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0eXBl ZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lk ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsK ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJh dG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9z dHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBfTV9z dHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYg b3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192YWx1 ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJu ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4g KnRoaXM7IH0gCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0gCn07CgojIDkwNyAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh cmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAz CgoKIAoKCgogCiAKIAojIDM4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwoKCgoKIAog CiAKIyA0NCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKCmV4dGVybiB2 b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9l cnJvciAoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFyVD4sCgkgIGNsYXNzIEFsbG9j YXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJpdmF0ZToKICBzdHJ1Y3QgUmVw IHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBzZWxmaXNoOwoKICAgIGNoYXJU KiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhclQgKj4odGhpcyArIDEpOyB9 CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0dXJuIGRhdGEgKCkgW3NdOyB9 CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1cm4gY2xvbmUgKCk7ICsrcmVm OyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5o IiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9 CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3Qp OwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlu bGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7Cgog ICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAg aW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5s aW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlubGlu ZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0 YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZvcGVy YXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJ CXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVf dHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3Jl ZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQq IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29u c3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxp dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxj b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6 ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVw ICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7 IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5k YXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0 dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyBy ZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1 cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0 dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJl dHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25z dAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRv cj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlz KSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChu aWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0 cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBi YXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAg OiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf c3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmlsUmVwLmdy YWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMp CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmlu ZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNz aWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNf c3RyaW5nKElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBfX2VuZCkKCgoKICAg IDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKF9fYmVnaW4sIF9fZW5kKTsgfQoKICB+ YmFzaWNfc3RyaW5nICgpCiAgICB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgfQoKICB2b2lkIHN3YXAg KGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5kYXQ7IHMuZGF0ID0g ZDsgfQoKICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp emVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBs YWNlIChsZW5ndGggKCksIDAsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5k IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5n dGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBz KQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNf c3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFj ZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y PgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVy YXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVuZCAoKSwgZmly c3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFwcGVuZCgxLCBf X2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3Ry LCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4g cmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24g KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5w b3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzKQogICAg eyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5n JiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwg bnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2lj X3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkK CgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3Qp OyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0 dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hhclQgYykKICAg IHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChj b25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQogIGJh c2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBl bmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyByZXR1 cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBv czEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVf dHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwg bik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQog IGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcykKICAg IHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNf c3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg eyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVy YXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAg ICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJu IGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBzaXplX3R5 cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAg IGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBp YmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIHZv aWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig bGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0 cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7 IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRl cmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBiZWdpbigp OwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBzZWxmaXNo ICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVy YXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdpbigpOwog ICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAo KTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYgcmVwbGFj ZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs CgkJCSBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3N0 cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCog cywKCQkJIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAo cG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFj ZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpOwog IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJU IGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAgYmFzaWNfc3RyaW5n JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0cmluZyYg c3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHN0cik7 IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVn aW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRv ciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAo aTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChp dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1 cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9CgogIHRlbXBsYXRl PGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRlcmF0b3Ig aTEsIGl0ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIp OwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVv cyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4gMSkgYWxsb2MgKGxl bmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7IHJlcCAoKS0+ c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUg cG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkKCXJldHVybiBlb3Mg KCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVyYXRv cltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bv c107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICBkbyB7IGlm ICggcG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIp OyB9IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiAoKnRoaXMpW3Bvc107CiAgICB9CiAgY29uc3Rf cmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBkbyB7IGlmICgg cG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIpOyB9 IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9Cgpwcml2YXRlOgog IHZvaWQgdGVybWluYXRlICgpIGNvbnN0CiAgICB7IHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb bGVuZ3RoICgpXSwgZW9zICgpKTsgfQoKcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0ciAoKSBj b25zdAogICAgeyBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRlICgpOyBy ZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAg dm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2 b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVfdHlwZSBjb3B5IChjaGFyVCogcywg c2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmQg KGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsg cmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw ZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0 OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNv bnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBz aXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXpl X3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBv cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo KSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz aXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFp dHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUg cG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBiYXNp Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5k X2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg ZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBu KSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAocywgcG9zLCB0 cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNoYXJUIGMs IHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoYywgcG9zKTsgfQoK ICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90 eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0ci5kYXRh KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0 IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBl IGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z dAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7 IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBv cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5k X2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywg c3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hh clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmlu ZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QK ICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChz KSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBw b3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGJhc2lj X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZp bmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVf dHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6 ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFy VCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rf bm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9s YXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwoKICBiYXNp Y19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKSBj b25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhpcywgcG9zLCBuKTsgfQoKICBpbnQg Y29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXpl X3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMs IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3Qg Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAo cywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJhdG9yIGJlZ2luICgpIHsgc2Vs ZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0b3IgZW5kICgpIHsgc2VsZmlz aCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnByaXZhdGU6CiAgaXRlcmF0b3Ig aWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07IH0KICBpdGVyYXRvciBpZW5k ICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgpXTsgfQoKcHVibGljOgogIGNv bnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0 X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgpOyB9CgogIHJldmVyc2VfaXRl cmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsg fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yICAgICAg IHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVfdHlwZSBz aXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNoYXJUKiBw dHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxpbmUgYm9v bCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAgbmlsUmVw OwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBJbnB1 dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXplX3R5cGUg bGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsKICBzaXpl X3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogIGRvIHsgaWYg KCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7 CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxl biAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBt YXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z ICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNz aWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7 CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0g KHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6 OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXds ZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNo YXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg cmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhz KTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5k IChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICBy ZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp bmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAo bGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1 cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25z dCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s Cm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y PiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAh PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAw KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNv bXBhcmUgKGxocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewog IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChj b25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv b2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykg PiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJo cy5jb21wYXJlIChsaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh dG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsK fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K aW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21w YXJlIChyaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBh cmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg KHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChy aHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo cykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9y Pj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0 cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0gIAoK IyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiAxIDMKIAogCgogCiAKIAogCiAK CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQg KiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9y IG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRyYSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9j YXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQg KiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXplb2YoUmVwKSArCgkJCXJl aW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCgkJCXNpemVvZiAoY2hhclQpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s aW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6 CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykg aSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJh ICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAt PnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJl cCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAg cC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qg cywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3Jl YWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAo Y2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYg PiAxCgkgIHx8IHMgPiBjYXBhY2l0eSAoKQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBh Y2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAg aWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVw OjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3NhdmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAs IGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAtPmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBl bHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAocCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKCSBjb25zdCBiYXNpY19z dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVf dCBsZW4yID0gc3RyLmxlbmd0aCAoKTsKCiAgaWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGgg KCkgJiYgcG9zMiA9PSAwICYmIG4yID49IGxlbjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIp OwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBsZW4y Iik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIg LSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAocG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwg bjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlm IChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQg YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXpl X3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6 bW92ZSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVw bGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90 eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICgg cG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwog IGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4g LSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4 X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4x ICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAg PSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsK ICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr IG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9 CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9z ICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIp OwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2 b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0IChz aXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikKewogIHRyYWl0czo6c2V0ICAoZGF0 YSAoKSArIHBvcywgYywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz LCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y PiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25z dCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9v Zl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9z KQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkg LSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0g d2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNr X3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXds ZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3Mg KyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0 ICAocG9zLCBjLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAg IHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr IG4xKSk7CiAgICAgIHJlcCAoKS0+c2V0ICAocG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5s ZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8g eyBpZiAoIG4gPiBtYXhfc2l6ZSAoKSApIF9fbGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgp Iik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBs ZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVyYXNlIChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQqIHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9z KSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgi cG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBw b3MpCiAgICBuID0gbGVuZ3RoICgpIC0gcG9zOwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkg KyBwb3MsIG4pOwogIHJldHVybiBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OgpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0 CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyAr K3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRz Ojpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7 CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OgpfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVf dHlwZSBsZW4pCnsKICBmb3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6 ZXEgKHB0ciBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBl IHBvcykgY29uc3QKewogIHJldHVybiBfZmluZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGgg KCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlm ICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7 ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNv bXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICBy ZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNo YXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAoMSA+IGxlbmd0aCAoKSkKICAgIHJl dHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBw b3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYg KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0 dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90 eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rf b2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewog IHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAg ICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSAhPSBucG9zKQogICAgICByZXR1 cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl IG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVf dCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7 CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4 cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3Qg eHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9m aW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7 CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRf Zmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgc2l6ZV90IHhw b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFp dHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29m IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBp ZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3Ro ICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7 IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0g bnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBw b3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVf dCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7 CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkg W3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBiYXNpY19z dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlm ICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsg fSB3aGlsZSAoMCkgOwoKICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxl biA+IG4pCiAgICBybGVuID0gbjsKICBpZiAocmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVu ID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBv cywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAo cmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3Ry Lmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u c3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+ IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0g cG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGludCByID0gdHJhaXRzOjpjb21w YXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAociAhPSAwKQogICAgcmV0dXJuIHI7 CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtICYKb3BlcmF0b3I+PiAo aXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiAmcykK ewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5pcGZ4MCAoKSkKICAgIHsKICAgICAg cmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7 CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwoJICBpZiAoY2gg PT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZW9mYml0KTsKCSAgICAg IGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAodHJhaXRzOjppc19kZWwgKGNoKSkKCSAgICB7Cgkg ICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgcyArPSBzdGF0aWNf Y2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0tdyA9PSAxKQoJICAgIGJyZWFrOwoJfQogICAgfQoK ICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQogICAgaXMuc2V0c3RhdGUgKGlv czo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0g Jm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcykKewog IHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSYKZ2V0bGlu ZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg cywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAgICB7CiAgICAgIF9HX3NpemVf dCAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMucmRidWYgKCk7CiAgICAgIHMu cmVzaXplICgwKTsKCiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+c2J1bXBjICgp OwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGNvdW50ID09 IDAKCQkJICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQoJCQkgICA6IGlvczo6ZW9mYml0 KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCgkgICsrY291bnQ7CgoJICBpZiAoY2ggPT0gZGVsaW0p CgkgICAgYnJlYWs7CgoJICBzICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwoKCSAgaWYgKHMu bGVuZ3RoICgpID09IHMubnBvcyAtIDEpCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6 ZmFpbGJpdCk7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9CgogICAKICAgCiAgaXMuaXNm eCAoKTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OlJlcApiYXNpY19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0g eyAwLCAwLCAxLCBmYWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjpucG9zOwoKfSAgCiMgNjU1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMy LjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoK CgojIDYgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJpbmciIDIgMwoKCmV4dGVybiAiQysrIiB7CnR5cGVk ZWYgYmFzaWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7CiAKfSAgCgoKIyAzICJ0X2d0ay5jcHAiIDIK CiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3NzdHJlYW0iIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAogCgoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3Mgc3RyaW5nYnVmIDogcHVibGlj IHN0cmVhbWJ1ZgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAg dHlwZWRlZiBpbnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAg ICB0eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgc3RyaW5nYnVm KGludCB3aGljaD1pb3M6OmlufGlvczo6b3V0KQogICAgICA6IHN0cmVhbWJ1ZigpLCBtb2RlKHN0 YXRpY19jYXN0PGlvczo6b3Blbl9tb2RlPih3aGljaCkpLAoJc3RyZWFtKF9fbnVsbCApLCBzdHJl YW1fbGVuKDApCiAgICB7CiAgICAgIHN0cmluZ2J1Zl9pbml0KCk7CiAgICB9CgogICAgZXhwbGlj aXQKICAgIHN0cmluZ2J1Zihjb25zdCBzdHJpbmcgJnN0ciwgaW50IHdoaWNoPWlvczo6aW58aW9z OjpvdXQpCiAgICAgIDogc3RyZWFtYnVmKCksIG1vZGUoc3RhdGljX2Nhc3Q8aW9zOjpvcGVuX21v ZGU+KHdoaWNoKSksCglzdHJlYW0oX19udWxsICksIHN0cmVhbV9sZW4oMCkKICAgIHsKICAgICAg aWYgKG1vZGUgJiAoaW9zOjppbnxpb3M6Om91dCkpCgl7CgkgIHN0cmVhbV9sZW4gPSBzdHIuc2l6 ZSgpOwoJICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwoJICBzdHIuY29weShz dHJlYW0sIHN0cmVhbV9sZW4pOwoJfQogICAgICBzdHJpbmdidWZfaW5pdCgpOwogICAgfQoKICAg IHZpcnR1YWwKICAgIH5zdHJpbmdidWYoKQogICAgewogICAgICBkZWxldGVbXSBzdHJlYW07CiAg ICB9CgogICAgc3RyaW5nCiAgICBzdHIoKSBjb25zdAogICAgewogICAgICBpZiAocGJhc2UoKSAh PSAwKQoJcmV0dXJuIHN0cmluZyhzdHJlYW0sIHBwdHIoKS1wYmFzZSgpKTsKICAgICAgZWxzZQoJ cmV0dXJuIHN0cmluZygpOwogICAgfQoKICAgIHZvaWQKICAgIHN0cihjb25zdCBzdHJpbmcmIHN0 cikKICAgIHsKICAgICAgZGVsZXRlW10gc3RyZWFtOwogICAgICBzdHJlYW1fbGVuID0gc3RyLnNp emUoKTsKICAgICAgc3RyZWFtID0gbmV3IGNoYXJfdHlwZVtzdHJlYW1fbGVuXTsKICAgICAgc3Ry LmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKICAgICAgc3RyaW5nYnVmX2luaXQoKTsKICAgIH0K CiAgcHJvdGVjdGVkOgogICAgIAogICAgdmlydHVhbCBpbnQKICAgIHVuZGVyZmxvdygpCiAgICB7 CiAgICAgIHJldHVybiAoLTEpIDsKICAgIH0KCiAgICB2aXJ0dWFsIGludAogICAgb3ZlcmZsb3co aW50IGMgPSAoLTEpICkKICAgIHsKICAgICAgaW50IHJlczsKICAgICAgaWYgKG1vZGUgJiBpb3M6 Om91dCkKCXsKCSAgaWYgKGMgIT0gKC0xKSApCgkgICAgewoJICAgICAgc3RyZWFtc2l6ZSBvbGRf c3RyZWFtX2xlbiA9IHN0cmVhbV9sZW47CgkgICAgICBzdHJlYW1fbGVuICs9IDE7CgkgICAgICBj aGFyX3R5cGUqIG5ld19zdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOwoJICAgICAg bWVtY3B5KG5ld19zdHJlYW0sIHN0cmVhbSwgb2xkX3N0cmVhbV9sZW4pOwoJICAgICAgZGVsZXRl W10gc3RyZWFtOwoJICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKCSAgICAgIHN0cmluZ2J1Zl9z eW5jKGdwdHIoKS1lYmFjaygpLCBwcHRyKCktcGJhc2UoKSk7CgkgICAgICBzcHV0YyhjKTsKCSAg ICAgIHJlcyA9IGM7CgkgICAgfQoJICBlbHNlCgkgICAgcmVzID0gKC0xKSA7Cgl9CiAgICAgIGVs c2UKCXJlcyA9IDA7CiAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgdmlydHVhbCBzdHJlYW1i dWYqCiAgICBzZXRidWYoY2hhcl90eXBlKiBzLCBzdHJlYW1zaXplIG4pCiAgICB7CiAgICAgIGlm IChuICE9IDApCgl7CgkgIGRlbGV0ZVtdIHN0cmVhbTsKCSAgc3RyZWFtID0gbmV3IGNoYXJfdHlw ZVtuXTsKCSAgbWVtY3B5KHN0cmVhbSwgcywgbik7CgkgIHN0cmVhbV9sZW4gPSBuOwoJICBzdHJp bmdidWZfc3luYygwLCAwKTsKCX0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgdmlydHVh bCBwb3NfdHlwZQogICAgc2Vla29mZihvZmZfdHlwZSBvZmYsIGlvczo6c2Vla19kaXIgd2F5LCBp bnQgd2hpY2ggPSBpb3M6OmluIHwgaW9zOjpvdXQpCiAgICB7CiAgICAgIHBvc190eXBlIHJldCA9 ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwogICAgICBib29sIHRlc3RpbiA9IHdoaWNoICYgaW9z OjppbiAmJiBtb2RlICYgaW9zOjppbjsKICAgICAgYm9vbCB0ZXN0b3V0ID0gd2hpY2ggJiBpb3M6 Om91dCAmJiBtb2RlICYgaW9zOjpvdXQ7CiAgICAgIGJvb2wgdGVzdGJvdGggPSB0ZXN0aW4gJiYg dGVzdG91dCAmJiB3YXkgIT0gaW9zOjpjdXI7CgogICAgICBpZiAoc3RyZWFtX2xlbiAmJiAoKHRl c3RpbiAhPSB0ZXN0b3V0KSB8fCB0ZXN0Ym90aCkpCgl7CgkgIGNoYXJfdHlwZSogYmVnID0gc3Ry ZWFtOwoJICBjaGFyX3R5cGUqIGN1cmkgPSBfX251bGwgOwoJICBjaGFyX3R5cGUqIGN1cm8gPSBf X251bGwgOwoJICBjaGFyX3R5cGUqIGVuZGkgPSBfX251bGwgOwoJICBjaGFyX3R5cGUqIGVuZG8g PSBfX251bGwgOwoKCSAgaWYgKHRlc3RpbikKCSAgICB7CgkgICAgICBjdXJpID0gZ3B0cigpOwoJ ICAgICAgZW5kaSA9IGVncHRyKCk7CgkgICAgfQoJICBpZiAodGVzdG91dCkKCSAgICB7CgkgICAg ICBjdXJvID0gcHB0cigpOwoJICAgICAgZW5kbyA9IGVwcHRyKCk7CgkgICAgfQoKCSAgb2ZmX3R5 cGUgbmV3b2ZmaSA9IDA7CgkgIG9mZl90eXBlIG5ld29mZm8gPSAwOwoJICBpZiAod2F5ID09IGlv czo6YmVnKQoJICAgIHsKCSAgICAgIG5ld29mZmkgPSBiZWcgLSBjdXJpOwoJICAgICAgbmV3b2Zm byA9IGJlZyAtIGN1cm87CgkgICAgfQoJICBlbHNlIGlmICh3YXkgPT0gaW9zOjplbmQpCgkgICAg ewoJICAgICAgbmV3b2ZmaSA9IGVuZGkgLSBjdXJpOwoJICAgICAgbmV3b2ZmbyA9IGVuZG8gLSBj dXJvOwoJICAgIH0KCgkgIGlmICh0ZXN0aW4gJiYgbmV3b2ZmaSArIG9mZiArIGN1cmkgLSBiZWcg Pj0gMCAmJgoJICAgICAgZW5kaSAtIGJlZyA+PSBuZXdvZmZpICsgb2ZmICsgY3VyaSAtIGJlZykK CSAgICB7CgkgICAgICBnYnVtcChuZXdvZmZpICsgb2ZmKTsKCSAgICAgIHJldCA9IHBvc190eXBl KG5ld29mZmkgKyBvZmYgKyBjdXJpKTsKCSAgICB9CgkgIGlmICh0ZXN0b3V0ICYmIG5ld29mZm8g KyBvZmYgKyBjdXJvIC0gYmVnID49IDAgJiYKCSAgICAgIGVuZG8gLSBiZWcgPj0gbmV3b2ZmbyAr IG9mZiArIGN1cm8gLSBiZWcpCgkgICAgewoJICAgICAgcGJ1bXAobmV3b2ZmbyArIG9mZik7Cgkg ICAgICByZXQgPSBwb3NfdHlwZShuZXdvZmZvICsgb2ZmICsgY3Vybyk7CgkgICAgfQoJfQogICAg ICByZXR1cm4gcmV0OwogICAgfQoKICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgIHNlZWtwb3MocG9z X3R5cGUgc3AsIGludCB3aGljaCA9IGlvczo6aW4gfCBpb3M6Om91dCkKICAgIHsKICAgICAgcG9z X3R5cGUgcmV0ID0gc2Vla29mZihzcCwgaW9zOjpiZWcsIHdoaWNoKTsKICAgICAgcmV0dXJuIHJl dDsKICAgIH0KCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIHN0cmluZ2J1Zl9zeW5jKHN0cmVhbXNp emUgaSwgc3RyZWFtc2l6ZSBvKQogICAgewogICAgICBpZiAobW9kZSAmIGlvczo6aW4pCglzZXRn KHN0cmVhbSwgc3RyZWFtICsgaSwgc3RyZWFtICsgc3RyZWFtX2xlbik7CiAgICAgIGlmIChtb2Rl ICYgaW9zOjpvdXQpCgl7CgkgIHNldHAoc3RyZWFtLCBzdHJlYW0gKyBzdHJlYW1fbGVuKTsKCSAg cGJ1bXAobyk7Cgl9CiAgICB9CiAgICB2b2lkCiAgICBzdHJpbmdidWZfaW5pdCgpCiAgICB7CiAg ICAgIGlmIChtb2RlICYgaW9zOjphdGUpCglzdHJpbmdidWZfc3luYygwLCBzdHJlYW1fbGVuKTsK ICAgICAgZWxzZQoJc3RyaW5nYnVmX3N5bmMoMCwgMCk7CiAgICB9CgogIHByaXZhdGU6CiAgICBp b3M6Om9wZW5fbW9kZQltb2RlOwogICAgY2hhcl90eXBlKgkJc3RyZWFtOwogICAgc3RyZWFtc2l6 ZQkJc3RyZWFtX2xlbjsKICB9OwoMCiAgY2xhc3MgaXN0cmluZ3N0cmVhbSA6IHB1YmxpYyBpc3Ry ZWFtIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAgdHlwZWRlZiBp bnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAgICB0eXBlZGVm IHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgaXN0cmluZ3N0cmVhbShpbnQg d2hpY2g9aW9zOjppbikKICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjppbikK ICAgIHsgfQoKICAgIGV4cGxpY2l0CiAgICBpc3RyaW5nc3RyZWFtKGNvbnN0IHN0cmluZyYgc3Ry LCBpbnQgd2hpY2g9aW9zOjppbikKICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHN0ciwgd2hpY2gg fCBpb3M6OmluKQogICAgeyB9CgogICAgc3RyaW5nYnVmKgogICAgcmRidWYoKSBjb25zdAogICAg ewogICAgICByZXR1cm4gY29uc3RfY2FzdDxzdHJpbmdidWYqPigmc2IpOwogICAgfQoKICAgIHN0 cmluZwogICAgc3RyKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHJkYnVmKCktPnN0cigpOwog ICAgfQogICAgdm9pZAogICAgc3RyKGNvbnN0IHN0cmluZyYgcykKICAgIHsKICAgICAgcmRidWYo KS0+c3RyKHMpOwogICAgfQogIHByaXZhdGU6CiAgICBzdHJpbmdidWYgc2I7CiAgfTsKDAogIGNs YXNzIG9zdHJpbmdzdHJlYW0gOiBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgdHlwZWRl ZiBjaGFyCWNoYXJfdHlwZTsKICAgIHR5cGVkZWYgaW50CQlpbnRfdHlwZTsKICAgIHR5cGVkZWYg c3RyZWFtcG9zCXBvc190eXBlOwogICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7CgogICAg ZXhwbGljaXQKICAgIG9zdHJpbmdzdHJlYW0oaW50IHdoaWNoPWlvczo6b3V0KQogICAgICA6IG9z dHJlYW0oJnNiKSwgc2Iod2hpY2ggfCBpb3M6Om91dCkKICAgIHsgfQoKICAgIGV4cGxpY2l0CiAg ICBvc3RyaW5nc3RyZWFtKGNvbnN0IHN0cmluZyYgc3RyLCBpbnQgd2hpY2g9aW9zOjpvdXQpCiAg ICAgIDogb3N0cmVhbSgmc2IpLCBzYihzdHIsIHdoaWNoIHwgaW9zOjpvdXQpCiAgICB7IH0KCiAg ICBzdHJpbmdidWYqCiAgICByZGJ1ZigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBjb25zdF9j YXN0PHN0cmluZ2J1Zio+KCZzYik7CiAgICB9CgogICAgc3RyaW5nCiAgICBzdHIoKSBjb25zdAog ICAgewogICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7CiAgICB9CgogICAgdm9pZCBzdHIoY29u c3Qgc3RyaW5nJiBzKQogICAgewogICAgICByZGJ1ZigpLT5zdHIocyk7CiAgICB9CiAgcHJpdmF0 ZToKICAgIHN0cmluZ2J1ZiBzYjsKICB9OwoMCiAgY2xhc3Mgc3RyaW5nc3RyZWFtIDogcHVibGlj IGlvc3RyZWFtIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOwogICAgdHlw ZWRlZiBpbnQJCWludF90eXBlOwogICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CiAgICB0 eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKCiAgICBleHBsaWNpdAogICAgc3RyaW5nc3RyZWFt KGludCB3aGljaD1pb3M6Om91dHxpb3M6OmluKQogICAgICA6IGlvc3RyZWFtKCZzYiksIHNiKHdo aWNoKQogICAgeyB9CgogICAgZXhwbGljaXQKICAgIHN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcm IHN0ciwgaW50IHdoaWNoPWlvczo6b3V0fGlvczo6aW4pCiAgICAgIDogaW9zdHJlYW0oJnNiKSwg c2Ioc3RyLCB3aGljaCkKICAgIHsgfQoKICAgIHN0cmluZ2J1ZioKICAgIHJkYnVmKCkgY29uc3QK ICAgIHsKICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8c3RyaW5nYnVmKj4oJnNiKTsKICAgIH0KCiAg ICBzdHJpbmcKICAgIHN0cigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiByZGJ1ZigpLT5zdHIo KTsKICAgIH0KCiAgICB2b2lkCiAgICBzdHIoY29uc3Qgc3RyaW5nJiBzKQogICAgewogICAgICBy ZGJ1ZigpLT5zdHIocyk7CiAgICB9CiAgcHJpdmF0ZToKICAgIHN0cmluZ2J1ZiBzYjsKICB9Owp9 OwoKCiMgNCAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMt c29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxn b2Jhc2UuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoj IDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBw YWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBl OwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNl Y29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBm aXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3Mg X1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3Qp LCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJz dCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3ku Zmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29u ZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9f eSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0 MiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvdHlwZV90cmFpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBf X2ZhbHNlX3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFp dHMgeyAKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9i ZV9maXJzdDsKICAgICAgICAgICAgICAgICAgICAKCgoKCgogICAgCgoKCgoKCgoKIAoKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCiAKIAogCgoKCnRlbXBsYXRl PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz X1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj dCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNo YXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp c19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BP RF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8 ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91 YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaXNfUE9EX3R5cGU7Cn07CgojIDI5NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1w Yy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRz LmgiIDMKCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewog IHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0 IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK CgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWdu ZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8 PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFy X3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAg c3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsK ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf SXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl bXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxs b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25n PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1 Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07CgoKCgoKIAogCiAKIyA0NSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv YmFzZS5oIiAyIDMKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz Mi43LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKCgoKCiAKIyAxICIvb3B0 L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3lzbGlt aXRzLmgiIDEgMyA0CiAKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s YXJpczIuNy8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCiMgMTE0ICIvb3B0 L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRz LmgiIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCgoKIAogCgog CiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWxpbWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIgkK CgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMSAzIDQK IAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWludF9saW1pdHMuaAkxLjUJOTgvMDEvMDYgU01J IgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK fQoKCgojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJCSAKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkgCgoK CgoKCgoKCgoKCgoKCgoJCQkJCQkgCgoJCQkJCQkgCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZwljbG9ja190OwoKCmV4dGVy biBsb25nIF9zeXNjb25mKGludCk7CSAKCgoKCgoKCiAKCgoKCgoKCgogCgoKCiMgMzA0ICIvdXNy L2luY2x1ZGUvbGltaXRzLmgiIDMgNAoKCgp9CgoKCiMgMTE3ICIvb3B0L2dudS9saWIvZ2NjLWxp Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgoj IDcgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgojIDExICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBj LXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgoKIAoKCgogCgoK CiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoKCgoKCgoK IAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCiMg NDkgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg MyA0CiMgMzQyICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4z L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKIyA1MSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1w Yy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFz ZS5oIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIu OTUuMy9pbmNsdWRlL25ldy5oIiAxIDMgNAogCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGli L2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvaW5jbHVkZS9uZXciIDEgMyA0CiAKIAoKCgoKI3By YWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv bGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMg NAoKIyA4ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2lu Y2x1ZGUvbmV3IiAyIDMgNAoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy aXMyLjcvMi45NS4zL2luY2x1ZGUvZXhjZXB0aW9uIiAxIDMgNAogCiAKCgoKCiNwcmFnbWEgaW50 ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFz cyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2Vw dGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFz cyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0 aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZv aWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFu ZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFu ZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK dW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2 b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVu Y2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvb3B0L2dudS9saWIvZ2NjLWxp Yi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMgNAoKCmV4dGVybiAi QysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2Vw dGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhy b3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93X3Qge307 CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRsZXIpOwoK fSAgCgogCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp Owp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2 b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0 ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBjb25zdCBz dGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNv bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQg KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd ICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5lIHZvaWQg Km9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNl OyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJv dygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAoKCiMgNiAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAyIDMgNAoKCnVzaW5nIHN0ZDo6 bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwoKCiMgNTIgIi9vcHQvZ251 L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCop IHsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGlu ZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsK ICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9U cCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1 cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29u c3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2Ip ID8gX19iIDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1 dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0 cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0g X19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg KytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jl c3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVy biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29w eV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog ICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwg KF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2Nv cHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5 KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsK ICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9U cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgog ICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBf T3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7Cn0KCiMgMjEzICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRl bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXIyLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f bGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9i YWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7 IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9f cmVzdWx0Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpz dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAg ICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlv bmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGlj IF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1 ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6 ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBf X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6 Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3Qs IF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAg ICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAg ICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9C STIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0KTsKfQoKIyAzMDMgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRl cj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2Zp cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2Nv dW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19y ZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0 LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh c3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlf bihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIg X19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1 dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f Y29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRl ciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQs IF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291 bnQsIF9fcmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRw dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1 dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7 IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0 dXJuIF9fZmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJz dDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBy ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGlu ZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJz dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEg IT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQ cmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgog CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9v bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3Qy KSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAg IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0 dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+ CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAg IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAg fQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0K CmlubGluZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19m aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz dDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0 IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0 ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0 dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlu bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4 aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo YXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9 CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4x ID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3Qy IC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl c3VsdCAKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChf X2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGlj YWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNv bnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf M3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq KSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk IGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz aWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL29w dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2 LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0 cnVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAKIAoK dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikg ewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAg bmV3IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUp CnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYq X19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9p ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1 ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4K aW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ dGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8 X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3Rvcigp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ry b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewog IF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0K CmlubGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95 KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMiAiL29wdC9nbnUvbGliL2dj Yy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3ZlY3RvciIgMiAzCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIu Ny8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdW5pbml0aWFsaXplZC5oIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgogCgogCiAKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRl ciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1 eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg X19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7 CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAg IGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNh dGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9CgoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpp bmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpp c19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5p dGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7Cn0KCmlubGluZSBjaGFy KiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAg bWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9f cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCogCnVuaW5pdGlh bGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1 bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0 dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJ dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2Zp cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBf Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19jb3Vu dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgCiAgICAgIGNvbnN0cnVjdCgm Kl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0 ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0 LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFj Y2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBf X2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAog ICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0 SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3Vu dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9y d2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAg cmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSggX19m aXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+ CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFs aXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7 CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19j dXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9 CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxp bmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9U cCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6 aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwg X19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICAgICAgICAgICAgICAgICAKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVk X2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBf X3gsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9f dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkK ewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmlu aXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewog IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fbiA+ IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJl dHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7 IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUs IGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxp emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f eCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP RF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmly c3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIAp1bmluaXRpYWxp emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f eCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBf X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5s aW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIHRyeSAg ewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp OwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlkKSA7IHRocm93OyB9 IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9j b3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVk X2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSAgewogICAgcmV0dXJuIHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBk ZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv aWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ dGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgIHsKICAgIHVuaW5pdGlhbGl6ZWRf ZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShf X2ZpcnN0MiwgX19taWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAojIDMzICIvb3B0L2du dS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1z b2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKICAKCgoKCgoKIAogCiAKIAog CgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0 aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg IGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7 IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3Rh cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVj dGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9UcCogX01fc3RhcnQ7 CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1RwKiBfTV9h bGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2Nh dGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAg IHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KfTsK CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9y X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg ICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBj b25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShj b25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9N X2VuZF9vZl9zdG9yYWdlKDApIAogIHt9CiAgCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0YXJ0Owog IF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2Nf dHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2Nf dHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6 ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFzZQogIDog cHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4K ewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxs b2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07ICAgIAoKIyAx NTAgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9UcCA+ICA+CmNsYXNzIHZlY3RvciA6IHByb3Rl Y3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IAp7CnByaXZhdGU6CiAgdHlwZWRlZiBfVmVj dG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1 ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogaXRlcmF0b3I7CiAg dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHZhbHVl X3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVy ZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm ZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh bGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy ZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCnByb3RlY3Rl ZDoKCiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9j YXRlOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwog IHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsKCgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9p bnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIF9N X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVn aW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg eyByZXR1cm4gX01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7 IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAg cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl bmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJl dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig cmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1 cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj b25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CiAgc2l6ZV90 eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShfTV9lbmRfb2Zfc3Rv cmFnZSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdp bigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsg cmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShz aXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIGV4cGxp Y2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkK ICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBf X3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkgCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxp emVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBsaWNpdCB2ZWN0b3Io c2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBf TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0K CiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgCiAgICA6IF9CYXNlKF9f eC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlh bGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogICAKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5 cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK ICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0K CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lu dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAgX01fc3RhcnQg PSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9f bjsgCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBf X3ZhbHVlKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N X2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFu Z2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmly c3QgKSApOwogIH0KCgoKCgoKCgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp bmlzaCk7IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3Rvcjxf VHAsIF9BbGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlm IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0g c2l6ZSgpOwogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwg X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7 CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh cnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9f b2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9 CiAgfQoKICAgCiAgIAogICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0 IF9UcCYgX192YWwpOwoKCiAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv aWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkg ewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRl Z3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBf SW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9h c3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUp CiAgICB7IGFzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fzc2ln bl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4 KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKTsgCgoKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7 IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog IHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJl bmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2Jh Y2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7 CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZv aWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y PF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQp OwogICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9l bmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJhdG9yIGlu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6ZV90eXBl IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9m aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p bnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9 CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHNpemVfdHlwZSBf X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m X3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmlu aXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9h dXgoX19wb3NpdGlvbik7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogICAKICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3Ms IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50 ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0lu dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5z ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBpbnNlcnQoX19w b3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp IHsKICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9y X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKICB2b2lkIGluc2VydCAoaXRlcmF0b3Ig X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKCiAgdm9pZCBwb3BfYmFjaygp IHsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gpOwogIH0KICBpdGVyYXRv ciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0g ZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIF9NX2ZpbmlzaCwgX19wb3NpdGlvbik7 CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bv c2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmly c3QpOwogICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5p c2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CgogIHZvaWQg cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9f bmV3X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k KCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9f eCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25l d19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7 IH0KCnByb3RlY3RlZDoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIGl0 ZXJhdG9yIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCnsKICAgIGl0ZXJhdG9yIF9fcmVzdWx0ID0gX01f YWxsb2NhdGUoX19uKTsKICAgIHRyeSAgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNh dGNoKC4uLikgeyAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19uKSA7IHRocm93OyB9IDsKICB9 CiMgNDQwICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICAgCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFs aXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNp emVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAg X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9z dGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZyk7CgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wgCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgp ICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0 b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigp LCBfX3guZW5kKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4o KSwgX195LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVy YXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhp cykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194 bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu ZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01f c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6 ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5iZWdpbigpLCBf X3guZW5kKCksIGJlZ2luKCkpOwogICAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIH0K ICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwg X01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCks IF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg X194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90IF9fbiwgY29u c3QgdmFsdWVfdHlwZSYgX192YWwpIHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVj dG9yPF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAg X190bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmls bChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m aWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJh c2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2 ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0 KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJh c2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFz dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9f bGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVu ID4gY2FwYWNpdHkoKSkgewogICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29w eShfX2xlbiwgX19maXJzdCwgX19sYXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz aCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0 YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2Zp bmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg ewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0 YXJ0KTsKICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9f Zmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21p ZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBf X2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m X3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwog ICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJk KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRp b24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6 ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/ IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh dGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0 cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBf X3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9f eCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQogICAg Y2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAg ICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0g OwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0 LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh cnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3Ig X19wb3NpdGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAg IGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7 CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAt IDEpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXpl X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f b2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0 YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19u ZXdfc3RhcnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChf X25ld19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0g dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsK ICAgIH0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNo KSwgCiAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7 IHRocm93OyB9IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0 ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9 IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5 cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194 X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmlu aXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNo OwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRf Y29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9m aW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmlu aXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3Np dGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5p dGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkp OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5p dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAg ICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAg aXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9y IF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0 YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19m aW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0 aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAg fQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCks IAogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7 IHRocm93OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg IF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsK ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0K fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytf X3BvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3Jh bmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2Zp cnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g X01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIg PSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBf TV9maW5pc2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAg ICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBf X29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNf YWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5p c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVu aW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAg ICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBf X21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBz aXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu ID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25l d19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNo ID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3 X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRf Y29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAg Y2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAg ICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsg fSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFy dCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODEw ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgoKCgogIAoKCgogCiAKIAojIDM0 ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIv aTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9i dmVjdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgpzdGF0 aWMgY29uc3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoK CgoKCgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNp Z25lZCBpbnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5z aWduZWQgaW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6 CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBi b29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZl cmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAgKl9NX3AgfD0gX01f bWFzazsKICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194 KSAKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNv bnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9 PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194 KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9p ZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRf cmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsK ICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVi bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBf Qml0X3JlZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50 ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCog X01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlm IChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwog ICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29m ZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0t X01fcDsKICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgw KSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kp IAogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9y KigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAg aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3Bl cmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVy YXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1 bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShk aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01f b2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19X T1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBp bnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9v ZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5 cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g X19pOwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAt IF9feC5fTV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlw ZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IGl0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9N X29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl cmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zm c2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAm JiBfTV9vZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9p dGVyYXRvcgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90 Pgp7CiAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBi b29sICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29s KiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgY29uc3Rf aXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0 OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0g MSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQg YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0 ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfY29uc3Rf aXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0 b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCks IF9NX29mZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJh dG9yJiBfX3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0KF9feC5fTV9vZmZzZXQp IHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0 X3JlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYg b3BlcmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29u c3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0g KnRoaXM7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh dG9yJiBvcGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBf X3RtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNv bnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIGRpZmZl cmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09S RF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAg ICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1f TV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICAg IHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5j ZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAg IGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwog IH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qg ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBf X2k7CiAgfQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgX194KSBj b25zdCB7CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsgX01fb2Zm c2V0IC0gX194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm ZmVyZW5jZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsgCiAgfQogIGJv b2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0K ICBib29sIG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf TV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9N X29mZnNldCk7CiAgfQp9OwoKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJv b2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf dHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2Fs bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0 b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9 Cgpwcm90ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAg ICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAt IDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0 YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01f cCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug LSBfTV9zdGFydC5fTV9wKTsKICB9ICAKCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25l ZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZSAKICAgICAgICAgIF9NX2RhdGFfYWxs b2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5p c2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCiAKdGVtcGxhdGUgPGNs YXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1 ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv Y2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2Nh dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7 IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9N X3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVk OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0 b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgICAgICAgICAKICB1bnNp Z25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9BbGxvY190 eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9p ZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190 eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfSAgCgogIF9CaXRfaXRl cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50 KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsgIAoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3Mg X0J2ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+Ojpf U19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46 Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9y X2Jhc2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMgMzQ4ICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAKIAogCiAKCgoKCgoKCgoKCiAgICAgICAgCgogICAg ICAgIAp0ZW1wbGF0ZTxjbGFzcyBfQWxsb2M+IGNsYXNzIHZlY3Rvcjxib29sLF9BbGxvYz4KICA6 IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KCgoKCnsKCiAgdHlwZWRlZiBfQnZlY3Rvcl9i YXNlPF9BbGxvYz4gX0Jhc2U7CgoKCnB1YmxpYzoKICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j ZV90eXBlOyAKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJv b2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAg dHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICB0eXBlZGVmIF9CaXRfaXRlcmF0 b3IgICAgICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9y ICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCiAgdHlwZWRlZiB0eXBl bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7 IH0KCnByb3RlY3RlZDoKCgoKCgoKCgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbml0aWFsaXplKHNp emVfdHlwZSBfX24pIHsKICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7 CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19X T1JEX0JJVDsKICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIF9NX2ZpbmlzaCA9 IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQogIHZvaWQgX01faW5zZXJ0X2F1 eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9w ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg X01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAg ICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNp emUoKSA/IDIgKiBzaXplKCkgOiBfX1dPUkRfQklUOwogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9 IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwg X19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICpfX2krKyA9IF9feDsKICAgICAg X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgX01fZGVhbGxv Y2F0ZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg ICB9CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5p dGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAg X01fc3RhcnQgPSBpdGVyYXRvcigpOwogICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gMDsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwog ICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01faW5pdGlhbGl6ZShfX24p OwogICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgX19w b3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgKytfX3BvczsKICAgIH0KICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3Jhbmdl KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7 CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbik7CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNv cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlw ZShfX24pKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAg ICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAg ICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0 ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7 CiAgICAgICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgX01fZmlu aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRl KCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU IC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg ICAgIH0KICAgIH0KICB9ICAgICAgCgoKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0 dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf TV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0 X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0 ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IgcmVuZCgpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp bigpKTsgCiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShl bmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g c2l6ZV90eXBlKC0xKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgIHJldHVy biBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4o KSk7CiAgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9 CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgewogICAgcmV0dXJuICooYmVn aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh dG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuICooYmVnaW4oKSArIGRpZmZl cmVuY2VfdHlwZShfX24pKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvciAoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVj dG9yIChzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewog ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf c3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IgKHNpemVf dHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgewogICAgX01faW5pdGlh bGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7 CiAgfQoKICB2ZWN0b3IgKGNvbnN0IHZlY3RvciAmIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9j YXRvcigpKSB7CiAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgY29weShfX3guYmVn aW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IgKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9N X2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQog ICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNw YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgIF9NX2lu aXRpYWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9feCA/IH4wIDogMCk7CiAgfQogICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs c2VfdHlwZSkgewogICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRl cmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwogIH0KIyA1ODcgIi9vcHQvZ251L2xpYi9nY2Mt bGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGxfYnZlY3Rvci5oIiAzCgoKICB+dmVjdG9yICgpIHsgfQoKICB2ZWN0b3IgJiBvcGVyYXRvcj0o Y29uc3QgdmVjdG9yICYgX194KSB7CiAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7 CiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgp OwogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgfQogICAgY29weShfX3guYmVn aW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZm ZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICAgCiAgIAog ICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICBpZiAoX19u ID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9feCA/IH4wIDogMCk7CiAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwog ICAgfQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAg ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg IH0KICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWdu KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50 ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlz cGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IGFz c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmly c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytf X2ZpcnN0KQogICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgp LCBfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKSB7CiAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19s YXN0LCBfX2xlbik7CiAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgIGVyYXNlKGNvcHkoX19m aXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgZWxzZSB7CiAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwog ICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBf X21pZCwgX19sYXN0KTsKICAgIH0KICB9ICAgIAoKCgogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICB1bnNpZ25lZCBpbnQqIF9f cSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVu ZCgpLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTV9z dGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsg KF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgfQogIH0KCiAgcmVmZXJlbmNl IGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBj b25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihl bmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVu ZCgpIC0gMSk7IH0KICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgaWYgKF9NX2Zpbmlz aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAg ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgc3dhcCh2 ZWN0b3IgJiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAg Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9z dG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRl cmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGRpZmZlcmVuY2VfdHlw ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBf TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAqX01fZmluaXNo KysgPSBfX3g7CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsK ICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg X0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9f bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRl Z2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5z ZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChib29sKSBfX3gpOwogIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9y IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpIHsKICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNzYxICIvb3B0L2dudS9saWIvZ2Nj LWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2J2ZWN0b3IuaCIgMwoKICAKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBz aXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICBp ZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgY29weV9iYWNrd2FyZChfX3Bv c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBm aWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsK ICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgZWxzZSB7 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAg IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3Ig X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAg ZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s IGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUo KTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0g MSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQog IH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRvciBlcmFzZShp dGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAg ICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgLS1fTV9m aW5pc2g7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0 b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz dCwgZW5kKCksIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZvaWQgcmVzaXpl KHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgaWYgKF9fbmV3 X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f bmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6 ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5k KCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9yOwoKIyA4 MjIgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCgoKCgoKCgoKCgogIAoKCgogCiAK IAojIDM1ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCgoKCiAKIAogCiMgNSAidF9ndGsu Y3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvcml0aG0iIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29s YXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdGVtcGJ1Zi5oIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IApfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp ZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3ICAg LyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgICAvIHNpemVvZihfVHApOwoK ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6 ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVy biBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAg fQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFy eV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZm ZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgogCiAKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4K aW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm X3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwg KF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3Jhcnlf YnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6 CiAgcHRyZGlmZl90ICBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90ICBfTV9sZW47CiAgX1Rw KiAgICAgICBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01f b3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVu ID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4g PSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewog ICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAg ICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9 CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBl KSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2Vf dHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7 CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9 CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxf bGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9UcCogZW5kKCkg eyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwogICAgdHJ5ICB7CiAgICAgIF9NX2xlbiA9IDA7 CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAgICAgX01fYWxsb2Nh dGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVf YnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAgZnJl ZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwIDsgdGhyb3c7IH0gOwogIH0K IAogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsgIAogICAgZGVzdHJveShfTV9idWZmZXIsIF9NX2J1 ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKICAgCiAg X1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3Bl cmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCiAKCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yLCAKICAgICAgICAgIGNsYXNzIF9UcCAKCiAgICAgICAgICAgICAg ICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl X3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBf VGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg e30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07CiAgICAKIAoKCgogCiAKIAojIDMzICIvb3B0 L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAyIDMKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL29wdC9nbnUv bGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9oZWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK IAoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9E aXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkIApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2Ug X190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xl SW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog ICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfSAgICAKICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVz aF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1 c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0 YW5jZSgwKSwgCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgCnB1c2hfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK ewogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBj bGFzcyBfVHAsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUg KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQp LCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg X19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9f aG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh bHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29t cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAK X19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAg ICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBf RGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwgCiAgICAgICAg ICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnB1c2hfaGVh cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9fcHVzaF9oZWFwX2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBf X2ZpcnN0ICkgLCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZCAK X19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9f aG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCnsK ICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29u ZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9f bGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAo X19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJ bmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENo aWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmly c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmly c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu ZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJz dDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFz dCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFz dCAtIDEsIAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUo IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp bmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3BvcF9o ZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAg ICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewog IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25k Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19s ZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJz dCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihf X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBf X2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3Nl Y29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp KTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFw KF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgCl9fcG9wX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192 YWx1ZSwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rp c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCAKICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29t cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xh c3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAg ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCAKcG9wX2hlYXAo X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogICAgX19wb3BfaGVhcF9hdXgoX19maXJz dCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl Pgp2b2lkIApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewog IGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKICAg IAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBf X2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDAp IHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19tYWtlX2hlYXAo X19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwg X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz IF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1 cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19w YXJlbnQgPSAoX19sZW4gLSAyKS8yOwogICAgCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0 X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQp KSwKICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1 cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIAptYWtlX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBf X2NvbXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3RhbmNl X3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkK ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgCnNvcnRfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkK ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9CgoKCgoKIAoKCgogCiAK IAojIDM0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ28uaCIgMiAzCgoKIAoKCgoKCiAKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpIHsKICBpZiAoX19hIDwgX19iKQogICAg aWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYgKF9fYSA8IF9fYykK ICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChf X2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgIHJldHVy biBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmCl9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChf X2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBf X2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAg ZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICBy ZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwog IGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9GdW5jdGlvbj4KX0Z1bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCiAKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZp bmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0 ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAqX19maXJzdCAhPSBf X3ZhbCkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgq X19maXJzdCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZp bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf X2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1 cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0 KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK ICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6 CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0g KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0t X190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0 OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh c2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m aXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJu IF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4K aW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKICByZXR1cm4g ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0 ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cmlu bGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIHJl dHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5 KCBfX2ZpcnN0ICkgKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zvcndh cmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9G b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg ewogICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg X19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFj ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewog IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVy IF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKIAogCiAKIAogCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBj b3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f dmFsdWUsCiAgICAgICAgICAgX1NpemUmIF9fbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9T aXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgIF9TaXplJiBfX24pIHsKICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK ICAgICAgKytfX247Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4K dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291 bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh bHVlKSB7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNl X3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CnR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50X2lmKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKSB7CiAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19u ID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19w cmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoKCgoKIAoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRl cjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy MiBfX2xhc3QyKSAKewogICAKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoKICAgCiAgX0ZvcndhcmRJdGVyMiBfX3Rt cChfX2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVy biBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKICAgCgogIF9Gb3J3YXJkSXRl cjIgX19wMSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVy MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK ICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBf X3AxOwogICAgX19jdXJyZW50ID0gX19maXJzdDE7IAogICAgaWYgKCsrX19jdXJyZW50ID09IF9f bGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpf X3ApIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Qx OwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0 MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmlu YXJ5UHJlZD4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkICBfX3ByZWRpY2F0ZSkgCnsKICAgCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwg X19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCiAgIAogIF9Gb3J3YXJk SXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIp CiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCiAgIAoKICBf Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19w cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19f Zmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog ICAgX19jdXJyZW50ID0gX19maXJzdDE7IAogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp IHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19w KSkgewogICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7 CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3Qx OwogICAgfQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKIAoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcD4KX0Zv cndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBf X3ZhbCkgewogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9f Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChf X2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19f aTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFz dCwgX192YWwpOwogICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQ cmVkPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlf cHJlZCkgewogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlfcHJlZCgq X19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAgICB9CiAg ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu dCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg ICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19p LCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBp ZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAg IHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19p LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQog ICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAg fQp9IAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRl cjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl cjIgX19maXJzdDIpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs ICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICByZXR1cm4g X19maXJzdDI7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX19vcGVyKSB7CiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0g X19vcGVyKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAg ICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkgewogIGZvciAoIDsgX19maXJz dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpf X3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19y ZXN1bHQ7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9p ZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkg ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJz dCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lk IHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkg ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIg cmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUp IHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAg ICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9f Zmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVy IHJlcGxhY2VfY29weV9pZihJdGVyYXRvciBfX2ZpcnN0LCBJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0 SXRlciBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRv ciBfX2dlbikgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp cnN0ID0gX19nZW4oKTsKICByZXR1cm4gX19maXJzdDsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsK ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3Qg IT0gX192YWx1ZSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3Vs dDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091dHB1dEl0ZXIgcmVtb3Zl X2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVk KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3By ZWQoKl9fZmlyc3QpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVz dWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWx1ZSkgewogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0Zv cndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19m aXJzdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwgX19s YXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCkgewogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVk KTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xh c3QgPyBfX2ZpcnN0IAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lm KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3Vu aXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopIHsKICBfVHAgX192 YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJz dCAhPSBfX2xhc3QpCiAgICBpZiAoX192YWx1ZSAhPSAqX19maXJzdCkgewogICAgICBfX3ZhbHVl ID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4g KytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ dGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1 dF9pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7 CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAg ICBpZiAoKl9fcmVzdWx0ICE9ICpfX2ZpcnN0KSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJl dHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091 dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jl c3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkgKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf QmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBfVHAqKSB7CiAgX1RwIF9fdmFs dWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewog ICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAg IH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0 ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFn KSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19i aW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3Qg KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsr X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19m aXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFy eVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeSggX19yZXN1bHQgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpf Rm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0KSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1 cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVu aXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBfX2ZpcnN0ID0g YWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVybiB1 bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9Cgog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgCiAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpCiAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgcmV0 dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNlKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkK ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIF9fcmV2ZXJzZShfX2ZpcnN0 LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIg cmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlk ZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmlu Z0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdF bGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVt ZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAg cmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3Rh bmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwK ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fZmly c3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgID09IF9fbWlk ZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlk ZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgfSB3aGlsZSAo X19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmly c3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3Qp IHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09 IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgZWxzZSBpZiAoX19maXJz dDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIH0KCiAgcmV0dXJuIF9f bmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz IF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChf X2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBf X21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwgIF9fbWlk ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUs IF9fbGFzdCwgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9fZmly c3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmlyc3Qr KywgKi0tX19sYXN0KTsKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2ZXJz ZShfX21pZGRsZSwgX19sYXN0LCAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAg cmV0dXJuIF9fbGFzdDsKICB9CiAgZWxzZSB7CiAgICBfX3JldmVyc2UoX19maXJzdCwgIF9fbWlk ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0Owog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2Us IGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlICosIF9UcCAqKSB7CgogIF9E aXN0YW5jZSBfX24gPSBfX2xhc3QgICAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlk ZGxlIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nl c3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChf X2sgPT0gX19sKSB7CiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUp OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg X19rKTsKCiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAg X1RwIF9fdG1wID0gKl9fZmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0 OwoKICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q IDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewog ICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAg ICAgfQoKICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAg ICAgIH0KICAgIH0KCiAgICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19q IDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2sp IHsKICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwog ICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9f bDsKICAgICAgfQogICAgfQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9Cgog IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l IF9Gb3J3YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkg ewogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAg cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19y ZXN1bHQpKTsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRGlz dGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pIHsKCgoKICByZXR1cm4gbHJhbmQ0 OCgpICUgX19uOwoKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp bmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmly c3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZv aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im IF9fcmFuZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0K CiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz cyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcmVt YWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBf RGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkg ewogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9f b3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0t X19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5j ZSwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJh bmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlz dGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy YXRvciYgX19yYW5kKQp7CiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwg X19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChfX3JlbWFp bmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAg ICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQog IHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9t X3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3Rh bmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkgCiAgICBfX291dFtfX21dID0g Kl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBf RGlzdGFuY2UgX19NID0gX19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQog ICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4g X19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNz IF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0g MDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg X19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoK ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9f TSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpf X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBf UmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBs ZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwg X19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAg ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkgCnsKICByZXR1cm4gX19yYW5k b21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0 X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0gX19v dXRfZmlyc3QpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJl ZGljYXRlPgpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCgkJ ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKCQkJIF9QcmVkaWNhdGUgICBfX3ByZWQsCgkJ CSBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu IF9fZmlyc3Q7CgogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz dDsKCiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkp IHsKICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0K CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIs IGNsYXNzIF9QcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX2xhc3QsCgkJCSAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKCQkJICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdo aWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0 OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlICh0cnVl KQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgLS1fX2xhc3Q7CiAgICAgIGVs c2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytf X2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp Y2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs CiAgIAkJCSAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCgkJCSAgICAgIF9QcmVkaWNhdGUgICBf X3ByZWQpIHsKICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9f aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIg X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E aXN0YW5jZSBfX2xlbikgewogIGlmIChfX2xlbiA9PSAxKQogICAgcmV0dXJuIF9fcHJlZCgqX19m aXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmly c3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICByZXR1cm4gcm90YXRlKF9faW5w bGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAgICAgICAg ICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRp b24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIAogICAgICAgICAg Y2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZl KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6 ZSkgCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAg IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICsrX19y ZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJz dDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQogICAgY29weShfX2J1ZmZlciwgX19yZXN1 bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVzdWx0MTsKICB9CiAgZWxzZSB7CiAgICBf Rm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19s ZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSks CiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX19zdGFi bGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxl LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVu IC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8 X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLnNp emUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3Qs IF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQogICAg cmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVk LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYu cmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0Zvcndh cmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q cmVkaWNhdGUgX19wcmVkKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9f Zmlyc3Q7CiAgZWxzZQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwg X19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl X3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp c3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KSAKewogIHdoaWxlICh0cnVlKSB7CiAg ICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFz dDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAo IShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAo X19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0gICAgCgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21B Y2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg X19waXZvdCwgX0NvbXBhcmUgX19jb21wKSAKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAo X19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7 CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAg IGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJf c3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9f c3RsX3RocmVzaG9sZCA9IDE2OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9f bGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAqX19sYXN0 ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19s YXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9f bGFzdDsKICAtLV9fbmV4dDsgIAogIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAg ICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0Owog IH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9UcCopIHsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX3ZhbCA8ICpf X2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7 CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf aW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2Vy dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX1Rw IF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNv cHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0g X192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBf X3ZhbCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lk IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47IAogIGZvciAo X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p KQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKCBfX2ZpcnN0 ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy ZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5l YXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXAp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBf X3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1RwKikgewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19p ICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1Rw KCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p ZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp IHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Zh bHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u X3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIGZvciAoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p ZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApIHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNl CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRp b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsKICAgIF9fdW5n dWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwg X19jb21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXplIF9fbGcoX1Np emUgX19uKSB7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0g MSkgKytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGlt aXQpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAg aWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19s YXN0LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4o Kl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0 LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9IF9fY3V0Owog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz IF9TaXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBf Q29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVz aG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsKICAgIH0KICAg IC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191 bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSks CiAgICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1Rw KikgMCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAg ICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgX19maW5hbF9pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2lu dHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f Zmlyc3QpICogMiwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmluYWxfaW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIH0KfQoKIAoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBf X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5k b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7 CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRk bGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2 b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJl IF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9t QWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwog IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBfX2lu cGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICBfX21lcmdlX3dp dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xh c3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwK ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9t QWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcjEgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIg X19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVw ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCAr PSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAt IF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl cF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9f dHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49 IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9f c3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f Zmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CiAg X19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6 ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICBfX2Zp cnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCwKICAgICAgICBfX2Nv bXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtfc2l6ZSA9IDc7CiAgICAgICAgCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtf aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9EaXN0YW5jZSBfX2NodW5r X3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICBf X2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0 YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0 ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0 ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFu Y2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz dGFuY2UqKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRl ciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9z aXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np emUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVy LCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAq PSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9p bnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19t ZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVy IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfQ29t cGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Q b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19z dGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXpl IDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZm ZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVy Z2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6 ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQg X19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf c2l6ZSkgewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwog IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xl biA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRh cHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KICBl bHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19i dWZmZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJnZV9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2Zp cnN0KSwgCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwgCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4g PSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJs ZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rp c3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0 YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIF9f bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlk ZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9f bWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFu ZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2lu KCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVs c2UgCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2lu KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz dGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k b21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4o KSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w KTsKICBlbHNlIAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1 Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUo KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0KSB7CiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICBf X2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAs CiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLCAKICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19t aWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f bGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KSAKICAgICAgX19wb3BfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksCiAgICAgICAgICAgICAgICAgX19kaXN0 YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHBhcnRpYWxf c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0 aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq LCBfQ29tcGFyZSBfX2NvbXApIHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29t cCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0 OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFw KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAg ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf Q29tcGFyZSBfX2NvbXApIHsKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAog ICAgICAgICAgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBf VHAqKSB7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl c3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVz dWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFz dCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7 CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFw KF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KSAKICAgICAgX19h ZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRf aGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1 bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkgewogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19yZXN1bHRfZmlyc3QgKSAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFu ZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikgewog IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz dDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJz dDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y ZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytf X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3Vs dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAg ICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCks CiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f cmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBf X3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVz dWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19yZXN1bHRfZmlyc3QgKSAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK IAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19u dGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikg ewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz dCAtIDEpKSkpOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7 CiAgICBlbHNlIAogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QpIHsKICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFs dWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsK ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkvMiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0 IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9f bnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNlIAogICAgICBfX2xhc3QgPSBfX2N1 dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2 b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbnRoLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Nv bXBhcmUgX19jb21wKSB7CiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBf X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f bG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopIAp7 CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUg KF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19m aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwg X192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAg IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBfX2xlbiA9 IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKSB7CiAgcmV0dXJuIF9fbG93ZXJfYm91bmQo X19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl X3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xv d2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv bXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg fQogICAgZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+ CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19m aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlz dGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBf X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNl IF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsK ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZh bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBf X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkg KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAg X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9f bGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJz dDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAq X19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0 ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs ZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVy IHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl IF9fY29tcCkgewogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWws IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3Qg KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9E aXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh bCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAw KSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewog ICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBf X2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkK ICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl bik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3Zh bCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFs X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsKSB7CiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3Zh bCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1 YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7 CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBf X3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxl OwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg fQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9f aGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAg ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t cCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQs IF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk SXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0gICAgICAgICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0Zvcndh cmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApIHsKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0 ICkgKTsKfSAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KYm9vbCBi aW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIF9Gb3J3YXJkSXRlciBfX2kg PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9f bGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfRm9y d2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w KTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoKIAoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091 dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7 CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0K ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1 dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21w KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikg ewogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1 bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKSB7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9 PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpf X21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog ICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0 OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFu Y2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1 dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZh bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBp ZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19m aXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAg fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0g MDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0 X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu MjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShf X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEs IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9C aWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplKSB7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+ IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0g Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVy X2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7 CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAg ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJu IHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFj a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIzIF9fcmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx OwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNr d2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAg IH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy LAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9C aWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJz dDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3Qy LCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9f bGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3Qx KSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1f X3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg ICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h bEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFw dGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYm IF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBj b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19i dWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19s ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7 CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVu MikgewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1 dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j dXQsIF9fbGVuMjIpOyAKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8g MjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1 dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAg ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmly c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBf X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu MTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl KTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFz dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4y MiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAg IGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk ZGxlLCAKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl cl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9f bGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVy IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1l cmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9f Y29tcCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9p bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg IF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9l bmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEg PSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg ewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg X19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xh c3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj b25kX2N1dCwgX19sZW4yMik7ICAgCiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9f bGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg X19jb21wKTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwog ICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRl X2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBf X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l d19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVy LCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAg ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21w KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKSB7CiAgX0Rpc3RhbmNl IF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rp c3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsK CiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly c3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91 dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVs c2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x LCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShf X2J1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX1RwLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGlu ZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJz dCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2Uo X19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0 aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2lu KCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXI+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBp ZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47 CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3RhbmNlX3R5cGUo IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRk bGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19m aXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MikgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4g ZmFsc2U7CiAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgCiAgICAgICsrX19maXJz dDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2Zp cnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQog ICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0 MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh c3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2Ug aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0Nv bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK ICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7 CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytf X2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3Qy LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRl cj4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIAogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg CiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIAog ICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAg IH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBh cmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsK ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19f Zmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1 dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsr X19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK ICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0 SXRlciwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVu Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w YXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7 CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAr K19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7 CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1 dEl0ZXI+Cl9PdXRwdXRJdGVyIApzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg ICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7 CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytf X3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmly c3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3Qx LCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21w YXJlPgpfT3V0cHV0SXRlciAKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1 bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jl c3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3Qy OwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+ Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f bGFzdCkgCiAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19m aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0 OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpIAogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQg PSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz dDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KSAKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQg PSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f Zmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2Zp cnN0ICE9IF9fbGFzdCkgCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAg ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCiAKCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBm YWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19pIDwgKl9faWkpIHsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKl9f aSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAg cmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChf X2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJl dHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1 cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAg aWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0t X19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg LS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQog ICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwg X19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3Qp IHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAg ICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIHByZXZf cGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3Io OzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBp ZiAoKl9faWkgPCAqX19pKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7 CiAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dh cChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRy dWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0 LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0 aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2Nv bXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0 ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCnsKICBmb3IgKCA7 IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIg X19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYg KCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4g X19sYXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1 dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewogIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkgCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0 ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19j b21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVy biBfX2xhc3QxOwp9CgoKIAogCiAKIAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg Y2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRl cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9y X3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAg ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgx KSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jlc3Vs dCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAg ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1 bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBf QmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFn LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBp ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAg X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBf Rm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9 PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAg X19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7 CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKIAoKCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpfQmlk aXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB0 eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwog IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7 CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f Zmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3Qx KSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s YXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVy biBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f cnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIs IF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9C aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCAKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t cCkKewogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2 SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9S ZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19y bGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIx KF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ dGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7 CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJh c2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0Mikp OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMSAKZmluZF9l bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLCAKICAgICAg ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CiAgcmV0 dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkgLAogICAgICAg ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIAogICAgICAgICAg Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9G b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9G b3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeSggX19maXJzdDEgKSAsCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl Z29yeSggX19maXJzdDIgKSAsCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKIAogCiAK CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpib29s IF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19uKQp7CiAg X0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19j aGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2Zp cnN0W19fY2hpbGRdKSAKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkg PT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vh a09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU3Ry aWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikKewog IF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9f Y2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50 XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGls ZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgcmV0dXJu IF9faXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJv b2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsK ICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3QsIF9fY29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0K CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpib29sIGlzX3NvcnRlZChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz dDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCAr K19fbmV4dCkgewogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNl OwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVy aW5nIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoK ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQg IT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgq X19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl Owp9CgoKCgoKIAoKCgogCiAKIAojIDM0ICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNv bGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAyIDMK CgoKCiAKIAogCiMgNiAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kz ODYtcGMtc29sYXJpczIuNy8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlv bmFsIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9nbnUvbGliL2djYy1saWIvaTM4 Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL29w dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzIDQKCiMgMTkgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNy8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL29w dC9nbnUvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi43LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0 IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B cmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9B cmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRf dHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07ICAgICAgCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCiAKCnRlbXBsYXRl IDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChwbHVzPF9UcD4pIHsKICBy ZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlf ZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gCnsKICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVz cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8 IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7 IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29s Pgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194 OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAg OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlw ZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhw bGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkg e30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRf dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPiAK bm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9Q cmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiAKY2xhc3Mg YmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp Y2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGlj OgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3By ZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpm aXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGlj YXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPiAKbm90Mihjb25zdCBfUHJlZGlj YXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjFzdAogIDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3Vs dF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3Qg X09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpm aXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQog IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gb3AodmFsdWUsIF9feCk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u LCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4gCmJpbmQxc3QoY29uc3Qg X09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmlu ZGVyMXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3Rl Y3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1 bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUmIF9feSkgCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9P cGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gs IHZhbHVlKTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4K aW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPiAKYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBf X29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6 c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVy YXRpb24+KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9P cGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAog ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlw ZT4gCnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9fb3AxOwogIF9PcGVyYXRpb24yIF9fb3Ay OwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBf T3BlcmF0aW9uMiYgX195KSAKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVu YW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3Ax KF9fb3AyKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3Mg X09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24y PiAKY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYg X19vcDIpCnsKICByZXR1cm4gdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4o X19vcDEsIF9fb3AyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3Bl cmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmNsYXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl PiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9vcDE7CiAgX09wZXJhdGlvbjIgX01fb3Ay OwogIF9PcGVyYXRpb24zIF9NX29wMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9P cGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksIAogICAgICAgICAgICAgICAg IGNvbnN0IF9PcGVyYXRpb24zJiBfX3opIAogICAgOiBfTV9vcDEoX194KSwgX01fb3AyKF9feSks IF9NX29wMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9w ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX29wMShfTV9vcDIoX194KSwgX01fb3AzKF9feCkpOwogIH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNz IF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRp b24yLCBfT3BlcmF0aW9uMz4gCmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29u c3QgX09wZXJhdGlvbjImIF9fb3AyLCAKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fb3Az KQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVy YXRpb24zPgogICAgKF9fb3AxLCBfX29wMiwgX19vcDMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy ZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgq X01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQog IGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykp IDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsg cmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl c3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRy X2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1 bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u IDogCiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3Rl Y3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBv aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmlu YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIAogICAgICA6IF9NX3B0 cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNv bnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90 b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gCnB0cl9mdW4oX1Jlc3VsdCAo Kl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv bjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgogCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIGNvbnN0 IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5 PF9UcD4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7 CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1Bh aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q YWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICBjb25zdCB0eXBlbmFtZSBfUGFp cjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAg cmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qg c2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3Mg X1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307Cgog CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDFzdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMT4gewogIF9BcmcxIG9w ZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3QgX0FyZzImKSBjb25zdCB7IHJldHVybiBf X3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJv amVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMj4gewog IF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYgX195KSBjb25zdCB7 IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+IApz dHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoK dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBw dWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsKCiAKIAogCnRlbXBsYXRlIDxjbGFz cyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9mdW4KewogIHR5cGVkZWYgX1Jlc3VsdCBy ZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfX3ZhbDsKICBjb25zdGFudF92b2lkX2Z1bihjb25z dCByZXN1bHRfdHlwZSYgX192KSA6IF9fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYg b3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9fdmFsOyB9Cn07ICAKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4KCgoKc3RydWN0IGNvbnN0YW50 X3VuYXJ5X2Z1biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJndW1lbnQsIF9SZXN1bHQ+IHsK ICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF91bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192 KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShjb25zdCBfQXJn dW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl c3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFzcyBfQXJnMiA9IF9BcmcxPgoKCgpzdHJ1 Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9B cmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihj b25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVy YXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01f dmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdm9p ZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJu IGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S ZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFu dDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9S ZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5l IGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+IApjb25zdGFudDIo Y29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVz dWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgogCiAKY2xhc3Mgc3VidHJhY3RpdmVfcm5n IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnBy aXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsKICBzaXplX3QgX01faW5kZXgxOwog IHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNp Z25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7 CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxlW19NX2lu ZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKICAgIHJl dHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9CgogIHZvaWQgX01faW5pdGlh bGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwog ICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0g MDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsg MSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9 IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAg IGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9y IChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBf TV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBf TV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmco dW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXplKF9fc2VlZCk7IH0KICBzdWJ0cmFj dGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4dSk7IH0KfTsKCgogCgogCiAKIAog CiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChf X3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0 PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9U cDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBf QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf UmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m dW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVy biAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykg Y29uc3Q7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBf VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25z dF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAq LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6Oipf X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoK ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2 b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZv aWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZv aWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCko X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6 CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gCiAgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBj b25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko X0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt ZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQg KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1Rw JiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0 IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9Bcmcp IGNvbnN0Owp9OwoKCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp bmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7 IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1Jl dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9U cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9m dW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkgCiAgeyBy ZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9m dW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu X3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9S ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp bmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxf QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn PgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAo X1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp bmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1Jl dCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZf dDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShf UmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K aW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1Rw OjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1Jl dCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn PgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVm KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFf cmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKIAoKCgogCiAKIAojIDIwICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvZnVuY3Rpb25hbCIgMiAzCgoKCgogCiAKIAojIDcgInRfZ3RrLmNwcCIgMgoKCiMgMSAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKI3By YWdtYSBpZGVudAkiQCgjKXN0ZGlvLmgJMS42OQk5OC8wNy8xMyBTTUkiCQoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl2 YV9saXN0LmgJMS4xMQk5Ny8xMS8yMiBTTUkiCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoK dHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQoKCgojIDIzICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAogCgoKCgoK CgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4LzA0LzIwIFNNSSIKCgpleHRl cm4gIkMiIHsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBGSUxFICBfX0ZJTEU7CgoKCn0KCgoKIyAy NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19p bXBsLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pbXBsLmgJMS44 CTk5LzA2LzMwIFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQJc3NpemVf dDsJCSAKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CgoKc3RydWN0IEZJ TEUgCSAKewoKCgoKCXNzaXplX3QJCV9jbnQ7CSAKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCgl1 bnNpZ25lZCBjaGFyCSpfYmFzZTsJIAoJdW5zaWduZWQgY2hhcglfZmxhZzsJIAoJdW5zaWduZWQg Y2hhcglfZmlsZTsJIAoJdW5zaWduZWQJX19vcmllbnRhdGlvbjoyOyAgCgl1bnNpZ25lZAlfX2lv bm9sb2NrOjE7CSAKCXVuc2lnbmVkCV9fZmlsbGVyOjU7Cn07CgoKCgp9CgoKCiMgMjUgIi91c3Iv aW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCnR5cGVk ZWYJX19GSUxFIEZJTEU7CgoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmCWxvbmcgbG9uZwlfX2xv bmdsb25nX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcJCW9mZl90OwoKCgoKCgoKdHlwZWRl ZiBfX2xvbmdsb25nX3QJb2ZmNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CgoKCgoK Cgp0eXBlZGVmIF9fbG9uZ2xvbmdfdAlmcG9zNjRfdDsKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKZXh0ZXJuIEZJTEUJX19pb2JbNjAgXTsKCgoKCgoKCgoKCgpleHRlcm4gdW5z aWduZWQgY2hhcgkgX3NpYnVmW10sIF9zb2J1ZltdOwoKCiAKIyAyMjcgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzIDQKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJKl9idWZlbmR0YWJbXTsKZXh0ZXJu IEZJTEUJCSpfbGFzdGJ1ZjsKCgogCiMgMjU3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoK CgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXJlbmFtZShjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlKHZvaWQpOwpleHRl cm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CgoKCmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7CmV4 dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFyICopOwoKCmV4 dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBz ZXRsaW5lYnVmKEZJTEUgKik7CgpleHRlcm4gaW50CXNldHZidWYoRklMRSAqLCBjaGFyICosIGlu dCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4u Lik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0 ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc2NhbmYoY29u c3QgY2hhciAqLCAuLi4pOwoKCgogCmV4dGVybiBpbnQJc25wcmludGYoY2hhciAqLCBzaXplX3Qs IGNvbnN0IGNoYXIgKiwgLi4uKTsKCiAKZXh0ZXJuIGludAlzcHJpbnRmKGNoYXIgKiwgY29uc3Qg Y2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCAuLi4pOwpleHRlcm4gaW50CXZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3Zh X2xpc3QpOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwoKCgpl eHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX3ZhX2xp c3QpOwoKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0 KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBp bnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50CWZw dXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjKEZJTEUgKik7CmV4dGVy biBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAqKTsKZXh0ZXJuIGlu dAlwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjaGFyKGludCk7CmV4dGVybiBpbnQJ cHV0cyhjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXVuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVy biBzaXplX3QJZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIHNp emVfdAlmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJu IGludAlmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50CWZzZWVrKEZJTEUgKiwg bG9uZywgaW50KTsKZXh0ZXJuIGludAlmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpl eHRlcm4gbG9uZwlmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZAlyZXdpbmQoRklMRSAqKTsKZXh0 ZXJuIHZvaWQJY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludAlmZW9mKEZJTEUgKik7CmV4dGVy biBpbnQJZmVycm9yKEZJTEUgKik7CmV4dGVybiB2b2lkCXBlcnJvcihjb25zdCBjaGFyICopOwoK CmV4dGVybiBpbnQJX19maWxidWYoRklMRSAqKTsKZXh0ZXJuIGludAlfX2Zsc2J1ZihpbnQsIEZJ TEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwpl eHRlcm4gY2hhcgkqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gaW50CWZpbGVubyhGSUxFICopOwoK CgogCgoKIyAzNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgogCgoKCgpleHRlcm4gRklM RQkqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3VzZXJp ZChjaGFyICopOwpleHRlcm4gY2hhcgkqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg Kik7CmV4dGVybiBpbnQJZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsK CmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwoK ZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0ZXJuIGludAlvcHRpbmQsIG9wdGVyciwgb3B0b3B0Owpl eHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsKZXh0 ZXJuIGludAlwY2xvc2UoRklMRSAqKTsKCgoKIAoKCgpleHRlcm4gaW50CWZzZWVrbyhGSUxFICos IG9mZl90LCBpbnQpOwpleHRlcm4gb2ZmX3QJZnRlbGxvKEZJTEUgKik7CgoKIAoKCgoKCmV4dGVy biBGSUxFCSpmb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUJ KmZyZW9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIEZJ TEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0ZXJuIGludAlmZ2V0cG9zNjQoRklMRSAqLCBmcG9zNjRf dCAqKTsKZXh0ZXJuIGludAlmc2V0cG9zNjQoRklMRSAqLCBjb25zdCBmcG9zNjRfdCAqKTsKZXh0 ZXJuIGludAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBvZmY2NF90CWZ0 ZWxsbzY0KEZJTEUgKik7CgoKIyA1MTUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoK CgoKCn0KCgoKIyA5ICJ0X2d0ay5jcHAiIDIKCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGst LS93aW5kb3cuaCIgMQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3Rr L2luY2x1ZGUvZ3RrLS0vYmluLmgiIDEKIAogCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAx ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2NvbnRhaW5lci5oIiAxCiAKIAoKCgogCgogCgoKCgoK CgoKCgoKCgoKCgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aWRnZXQuaCIgMQogCiAK CgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0tL29iamVjdC5oIiAxCiAKIAoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi9v cHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYmFzZS5oIiAxCiAKIAoKCgogCgogCgoKCgoKCgoKCgoKCgoK CgoKCiMgMSAiL29wdC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ3RrLS1jb25maWcuaCIgMQogCgoK CiAKCgoKCiAKIyAyMSAiL29wdC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ3RrLS1jb25maWcuaCIK CgoKCgogCgoKIAogCiAKIAoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKIyAyNyAiL29wdC9ndGsvaW5j bHVkZS9ndGstLS9iYXNlLmgiIDIKCgoKIAogCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0u aCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0xLjIvZ2RrL2dkay5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIv b3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dka3R5cGVzLmgiIDEKIAoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgogCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xpYi5o IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9saWIvZ2xpYi9pbmNsdWRlL2dsaWJjb25maWcu aCIgMQogCgoKCgoKCgojIDEgIi9vcHQvZ251L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIu Ny8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCiMgMTE0ICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDMg NAoKCgoKCgoKIyA5ICIvb3B0L2d0ay9saWIvZ2xpYi9pbmNsdWRlL2dsaWJjb25maWcuaCIgMgoK IyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1 ZGUvZmxvYXQuaCIgMSAzIDQKIAoKCiAKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAg CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAg CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgogICAg CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK CgoKCiMgMTAgIi9vcHQvZ3RrL2xpYi9nbGliL2luY2x1ZGUvZ2xpYmNvbmZpZy5oIiAyCgoKCgpl eHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgZ2ludDg7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBndWludDg7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGdpbnQxNjsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBndWludDE2Owp0eXBlZGVmIHNpZ25lZCBpbnQgZ2ludDMyOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBndWludDMyOwoKCgoKCgoKCgpfX2V4dGVuc2lvbl9fICB0eXBl ZGVmIHNpZ25lZCBsb25nIGxvbmcgZ2ludDY0OwpfX2V4dGVuc2lvbl9fICB0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBndWludDY0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgX0dTdGF0aWNNdXRleCBHU3RhdGljTXV0ZXg7CnN0cnVjdCBfR1N0YXRp Y011dGV4CnsKICBzdHJ1Y3QgX0dNdXRleCAqcnVudGltZV9tdXRleDsKICB1bmlvbiB7CiAgICBj aGFyICAgcGFkWzI0XTsKICAgIGRvdWJsZSBkdW1teV9kb3VibGU7CiAgICB2b2lkICAqZHVtbXlf cG9pbnRlcjsKICAgIGxvbmcgICBkdW1teV9sb25nOwogIH0gYWxpZ25lZF9wYWRfdTsKfTsKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgNjYgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ2xpYi0xLjIvZ2xpYi5oIiAyCgoKIAoKIyAxICIvb3B0L2dudS9saWIvZ2NjLWxpYi9p Mzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCnR5cGVkZWYgY2hhciAqX19nbnVjX3ZhX2xpc3Q7CgoKCgoKIAoKCgogCgoKCgoKCgoK CgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCiMgMjA3ICIvb3B0L2dudS9s aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjcvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMg NAoKCgoKCgojIDcwICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIgMgoKCiAKCgoK CgoKIyA4OSAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKCiAKCgoKCgoKIyAx MDcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xpYi5oIgoKCgoKCmV4dGVybiAiQyIgewoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMTU3ICIvb3B0L2d0ay9pbmNs dWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMg MjAzICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgojIDM2OCAiL29wdC9ndGsvaW5jbHVkZS9n bGliLTEuMi9nbGliLmgiCgoKCgoKCgoKCiMgMzk1ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4y L2dsaWIuaCIKCgoKCgoKCgoKCgoKCgoKIyA0MjEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIv Z2xpYi5oIgoKCiMgNDM0ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCiMgNDYx ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgogCgoKCgoKCnR5cGVkZWYg Y2hhciAgIGdjaGFyOwp0eXBlZGVmIHNob3J0ICBnc2hvcnQ7CnR5cGVkZWYgbG9uZyAgIGdsb25n Owp0eXBlZGVmIGludCAgICBnaW50Owp0eXBlZGVmIGdpbnQgICBnYm9vbGVhbjsKCnR5cGVkZWYg dW5zaWduZWQgY2hhcglndWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJZ3VzaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nCWd1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJZ3VpbnQ7Cgp0 eXBlZGVmIGZsb2F0CWdmbG9hdDsKdHlwZWRlZiBkb3VibGUJZ2RvdWJsZTsKCiAKCgoKCgoKCgoK CnR5cGVkZWYgdm9pZCogZ3BvaW50ZXI7CnR5cGVkZWYgY29uc3Qgdm9pZCAqZ2NvbnN0cG9pbnRl cjsKCgp0eXBlZGVmIGdpbnQzMglnc3NpemU7CnR5cGVkZWYgZ3VpbnQzMiBnc2l6ZTsKdHlwZWRl ZiBndWludDMyIEdRdWFyazsKdHlwZWRlZiBnaW50MzIJR1RpbWU7CgoKIAoKCgoKCgoJCgoKIAoK CgoKCgoKCgoKIAoKCgojIDU0MiAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoK CgojIDU1NyAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCiMgNTY4ICIvb3B0L2d0 ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKIyA1OTMgIi9vcHQvZ3RrL2luY2x1 ZGUvZ2xpYi0xLjIvZ2xpYi5oIgoKCiMgNjA5ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2ds aWIuaCIKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCiAKCgoKCgoKCgoKCgoKCmV4dGVybiAgY29uc3QgZ3VpbnQgZ2xpYl9tYWpvcl92ZXJzaW9u OwpleHRlcm4gIGNvbnN0IGd1aW50IGdsaWJfbWlub3JfdmVyc2lvbjsKZXh0ZXJuICBjb25zdCBn dWludCBnbGliX21pY3JvX3ZlcnNpb247CmV4dGVybiAgY29uc3QgZ3VpbnQgZ2xpYl9pbnRlcmZh Y2VfYWdlOwpleHRlcm4gIGNvbnN0IGd1aW50IGdsaWJfYmluYXJ5X2FnZTsKCgoKCgoKCiAKCnR5 cGVkZWYgc3RydWN0IF9HQWxsb2NhdG9yCUdBbGxvY2F0b3I7CnR5cGVkZWYgc3RydWN0IF9HQXJy YXkJCUdBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlQXJyYXkJR0J5dGVBcnJheTsKdHlwZWRl ZiBzdHJ1Y3QgX0dDYWNoZQkJR0NhY2hlOwp0eXBlZGVmIHN0cnVjdCBfR0NvbXBsZXRpb24JR0Nv bXBsZXRpb247CnR5cGVkZWYJc3RydWN0IF9HRGF0YQkJR0RhdGE7CnR5cGVkZWYgc3RydWN0IF9H RGVidWdLZXkJR0RlYnVnS2V5Owp0eXBlZGVmIHN0cnVjdCBfR0hhc2hUYWJsZQlHSGFzaFRhYmxl Owp0eXBlZGVmIHN0cnVjdCBfR0hvb2sJCUdIb29rOwp0eXBlZGVmIHN0cnVjdCBfR0hvb2tMaXN0 CUdIb29rTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0dMaXN0CQlHTGlzdDsKdHlwZWRlZiBzdHJ1Y3Qg X0dNZW1DaHVuawlHTWVtQ2h1bms7CnR5cGVkZWYgc3RydWN0IF9HTm9kZQkJR05vZGU7CnR5cGVk ZWYgc3RydWN0IF9HUHRyQXJyYXkJR1B0ckFycmF5Owp0eXBlZGVmIHN0cnVjdCBfR1JlbGF0aW9u CUdSZWxhdGlvbjsKdHlwZWRlZiBzdHJ1Y3QgX0dTY2FubmVyCUdTY2FubmVyOwp0eXBlZGVmIHN0 cnVjdCBfR1NjYW5uZXJDb25maWcJR1NjYW5uZXJDb25maWc7CnR5cGVkZWYgc3RydWN0IF9HU0xp c3QJCUdTTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmcJCUdTdHJpbmc7CnR5cGVkZWYgc3Ry dWN0IF9HU3RyaW5nQ2h1bmsJR1N0cmluZ0NodW5rOwp0eXBlZGVmIHN0cnVjdCBfR1RpbWVyCQlH VGltZXI7CnR5cGVkZWYgc3RydWN0IF9HVHJlZQkJR1RyZWU7CnR5cGVkZWYgc3RydWN0IF9HVHVw bGVzCQlHVHVwbGVzOwp0eXBlZGVmIHVuaW9uICBfR1Rva2VuVmFsdWUJR1Rva2VuVmFsdWU7CnR5 cGVkZWYgc3RydWN0IF9HSU9DaGFubmVsCUdJT0NoYW5uZWw7CgogCnR5cGVkZWYgZW51bQp7CiAg R19UUkFWRVJTRV9MRUFGUwk9IDEgPDwgMCwKICBHX1RSQVZFUlNFX05PTl9MRUFGUwk9IDEgPDwg MSwKICBHX1RSQVZFUlNFX0FMTAk9IEdfVFJBVkVSU0VfTEVBRlMgfCBHX1RSQVZFUlNFX05PTl9M RUFGUywKICBHX1RSQVZFUlNFX01BU0sJPSAweDAzCn0gR1RyYXZlcnNlRmxhZ3M7CgogCnR5cGVk ZWYgZW51bQp7CiAgR19JTl9PUkRFUiwKICBHX1BSRV9PUkRFUiwKICBHX1BPU1RfT1JERVIsCiAg R19MRVZFTF9PUkRFUgp9IEdUcmF2ZXJzZVR5cGU7CgogCgoKCgogCgp0eXBlZGVmIGVudW0Kewog ICAKICBHX0xPR19GTEFHX1JFQ1VSU0lPTgkJPSAxIDw8IDAsCiAgR19MT0dfRkxBR19GQVRBTAkJ PSAxIDw8IDEsCiAgCiAgIAogIEdfTE9HX0xFVkVMX0VSUk9SCQk9IDEgPDwgMiwJIAogIEdfTE9H X0xFVkVMX0NSSVRJQ0FMCQk9IDEgPDwgMywKICBHX0xPR19MRVZFTF9XQVJOSU5HCQk9IDEgPDwg NCwKICBHX0xPR19MRVZFTF9NRVNTQUdFCQk9IDEgPDwgNSwKICBHX0xPR19MRVZFTF9JTkZPCQk9 IDEgPDwgNiwKICBHX0xPR19MRVZFTF9ERUJVRwkJPSAxIDw8IDcsCiAgCiAgR19MT0dfTEVWRUxf TUFTSwkJPSB+KEdfTE9HX0ZMQUdfUkVDVVJTSU9OIHwgR19MT0dfRkxBR19GQVRBTCkKfSBHTG9n TGV2ZWxGbGFnczsKCiAKCgoKdHlwZWRlZiBncG9pbnRlcgkoKkdDYWNoZU5ld0Z1bmMpCShncG9p bnRlcglrZXkpOwp0eXBlZGVmIGdwb2ludGVyCSgqR0NhY2hlRHVwRnVuYykJKGdwb2ludGVyCXZh bHVlKTsKdHlwZWRlZiB2b2lkCQkoKkdDYWNoZURlc3Ryb3lGdW5jKQkoZ3BvaW50ZXIJdmFsdWUp Owp0eXBlZGVmIGdpbnQJCSgqR0NvbXBhcmVGdW5jKQkJKGdjb25zdHBvaW50ZXIJYSwKCQkJCQkJ IGdjb25zdHBvaW50ZXIJYik7CnR5cGVkZWYgZ2NoYXIqCQkoKkdDb21wbGV0aW9uRnVuYykJKGdw b2ludGVyKTsKdHlwZWRlZiB2b2lkCQkoKkdEZXN0cm95Tm90aWZ5KQkoZ3BvaW50ZXIJZGF0YSk7 CnR5cGVkZWYgdm9pZAkJKCpHRGF0YUZvcmVhY2hGdW5jKQkoR1F1YXJrCQlrZXlfaWQsCgkJCQkJ CSBncG9pbnRlcglkYXRhLAoJCQkJCQkgZ3BvaW50ZXIJdXNlcl9kYXRhKTsKdHlwZWRlZiB2b2lk CQkoKkdGdW5jKQkJKGdwb2ludGVyCWRhdGEsCgkJCQkJCSBncG9pbnRlcgl1c2VyX2RhdGEpOwp0 eXBlZGVmIGd1aW50CQkoKkdIYXNoRnVuYykJCShnY29uc3Rwb2ludGVyCWtleSk7CnR5cGVkZWYg dm9pZAkJKCpHRnJlZUZ1bmMpCQkoZ3BvaW50ZXIJZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHSEZ1 bmMpCQkoZ3BvaW50ZXIJa2V5LAoJCQkJCQkgZ3BvaW50ZXIJdmFsdWUsCgkJCQkJCSBncG9pbnRl cgl1c2VyX2RhdGEpOwp0eXBlZGVmIGdib29sZWFuCSgqR0hSRnVuYykJCShncG9pbnRlcglrZXks CgkJCQkJCSBncG9pbnRlcgl2YWx1ZSwKCQkJCQkJIGdwb2ludGVyCXVzZXJfZGF0YSk7CnR5cGVk ZWYgZ2ludAkJKCpHSG9va0NvbXBhcmVGdW5jKQkoR0hvb2sJCSpuZXdfaG9vaywKCQkJCQkJIEdI b29rCQkqc2libGluZyk7CnR5cGVkZWYgZ2Jvb2xlYW4JKCpHSG9va0ZpbmRGdW5jKQkoR0hvb2sJ CSpob29rLAoJCQkJCQkgZ3BvaW50ZXIJIGRhdGEpOwp0eXBlZGVmIHZvaWQJCSgqR0hvb2tNYXJz aGFsbGVyKQkoR0hvb2sJCSpob29rLAoJCQkJCQkgZ3BvaW50ZXIJIGRhdGEpOwp0eXBlZGVmIGdi b29sZWFuCSgqR0hvb2tDaGVja01hcnNoYWxsZXIpCShHSG9vawkJKmhvb2ssCgkJCQkJCSBncG9p bnRlcgkgZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHSG9va0Z1bmMpCQkoZ3BvaW50ZXIJIGRhdGEp Owp0eXBlZGVmIGdib29sZWFuCSgqR0hvb2tDaGVja0Z1bmMpCShncG9pbnRlcgkgZGF0YSk7CnR5 cGVkZWYgdm9pZAkJKCpHSG9va0ZyZWVGdW5jKQkoR0hvb2tMaXN0ICAgICAgKmhvb2tfbGlzdCwK CQkJCQkJIEdIb29rICAgICAgICAgICpob29rKTsKdHlwZWRlZiB2b2lkCQkoKkdMb2dGdW5jKQkJ KGNvbnN0IGdjaGFyICAgKmxvZ19kb21haW4sCgkJCQkJCSBHTG9nTGV2ZWxGbGFncwlsb2dfbGV2 ZWwsCgkJCQkJCSBjb25zdCBnY2hhciAgICptZXNzYWdlLAoJCQkJCQkgZ3BvaW50ZXIJdXNlcl9k YXRhKTsKdHlwZWRlZiBnYm9vbGVhbgkoKkdOb2RlVHJhdmVyc2VGdW5jKQkoR05vZGUJICAgICAg ICpub2RlLAoJCQkJCQkgZ3BvaW50ZXIJZGF0YSk7CnR5cGVkZWYgdm9pZAkJKCpHTm9kZUZvcmVh Y2hGdW5jKQkoR05vZGUJICAgICAgICpub2RlLAoJCQkJCQkgZ3BvaW50ZXIJZGF0YSk7CnR5cGVk ZWYgZ2ludAkJKCpHU2VhcmNoRnVuYykJCShncG9pbnRlcglrZXksCgkJCQkJCSBncG9pbnRlcglk YXRhKTsKdHlwZWRlZiB2b2lkCQkoKkdTY2FubmVyTXNnRnVuYykJKEdTY2FubmVyICAgICAgKnNj YW5uZXIsCgkJCQkJCSBnY2hhcgkgICAgICAgKm1lc3NhZ2UsCgkJCQkJCSBnaW50CQllcnJvcik7 CnR5cGVkZWYgZ2ludAkJKCpHVHJhdmVyc2VGdW5jKQkoZ3BvaW50ZXIJa2V5LAoJCQkJCQkgZ3Bv aW50ZXIJdmFsdWUsCgkJCQkJCSBncG9pbnRlcglkYXRhKTsKdHlwZWRlZgl2b2lkCQkoKkdWb2lk RnVuYykJCSh2b2lkKTsKCgpzdHJ1Y3QgX0dMaXN0CnsKICBncG9pbnRlciBkYXRhOwogIEdMaXN0 ICpuZXh0OwogIEdMaXN0ICpwcmV2Owp9OwoKc3RydWN0IF9HU0xpc3QKewogIGdwb2ludGVyIGRh dGE7CiAgR1NMaXN0ICpuZXh0Owp9OwoKc3RydWN0IF9HU3RyaW5nCnsKICBnY2hhciAqc3RyOwog IGdpbnQgbGVuOwp9OwoKc3RydWN0IF9HQXJyYXkKewogIGdjaGFyICpkYXRhOwogIGd1aW50IGxl bjsKfTsKCnN0cnVjdCBfR0J5dGVBcnJheQp7CiAgZ3VpbnQ4ICpkYXRhOwogIGd1aW50CSAgbGVu Owp9OwoKc3RydWN0IF9HUHRyQXJyYXkKewogIGdwb2ludGVyICpwZGF0YTsKICBndWludAkgICAg bGVuOwp9OwoKc3RydWN0IF9HVHVwbGVzCnsKICBndWludCBsZW47Cn07CgpzdHJ1Y3QgX0dEZWJ1 Z0tleQp7CiAgZ2NoYXIgKmtleTsKICBndWludAkgdmFsdWU7Cn07CgoKIAoKdm9pZCAgIGdfbGlz dF9wdXNoX2FsbG9jYXRvciAgICAoR0FsbG9jYXRvciAgICAgKmFsbG9jYXRvcik7CnZvaWQgICBn X2xpc3RfcG9wX2FsbG9jYXRvciAgICAgKHZvaWQpOwpHTGlzdCogZ19saXN0X2FsbG9jCQkodm9p ZCk7CnZvaWQgICBnX2xpc3RfZnJlZQkJKEdMaXN0CQkqbGlzdCk7CnZvaWQgICBnX2xpc3RfZnJl ZV8xCQkoR0xpc3QJCSpsaXN0KTsKR0xpc3QqIGdfbGlzdF9hcHBlbmQJCShHTGlzdAkJKmxpc3Qs CgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19saXN0X3ByZXBlbmQJCShHTGlzdAkJKmxp c3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19saXN0X2luc2VydAkJKEdMaXN0CQkq bGlzdCwKCQkJCSBncG9pbnRlcgkgZGF0YSwKCQkJCSBnaW50CQkgcG9zaXRpb24pOwpHTGlzdCog Z19saXN0X2luc2VydF9zb3J0ZWQJKEdMaXN0CQkqbGlzdCwKCQkJCSBncG9pbnRlcgkgZGF0YSwK CQkJCSBHQ29tcGFyZUZ1bmMJIGZ1bmMpOwpHTGlzdCogZ19saXN0X2NvbmNhdAkJKEdMaXN0CQkq bGlzdDEsCgkJCQkgR0xpc3QJCSpsaXN0Mik7CkdMaXN0KiBnX2xpc3RfcmVtb3ZlCQkoR0xpc3QJ CSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmVfbGluawko R0xpc3QJCSpsaXN0LAoJCQkJIEdMaXN0CQkqbGxpbmspOwpHTGlzdCogZ19saXN0X3JldmVyc2UJ CShHTGlzdAkJKmxpc3QpOwpHTGlzdCogZ19saXN0X2NvcHkJCShHTGlzdAkJKmxpc3QpOwpHTGlz dCogZ19saXN0X250aAkJKEdMaXN0CQkqbGlzdCwKCQkJCSBndWludAkJIG4pOwpHTGlzdCogZ19s aXN0X2ZpbmQJCShHTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHTGlzdCogZ19s aXN0X2ZpbmRfY3VzdG9tCShHTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkg R0NvbXBhcmVGdW5jCSBmdW5jKTsKZ2ludCAgIGdfbGlzdF9wb3NpdGlvbgkJKEdMaXN0CQkqbGlz dCwKCQkJCSBHTGlzdAkJKmxsaW5rKTsKZ2ludCAgIGdfbGlzdF9pbmRleAkJKEdMaXN0CQkqbGlz dCwKCQkJCSBncG9pbnRlcgkgZGF0YSk7CkdMaXN0KiBnX2xpc3RfbGFzdAkJKEdMaXN0CQkqbGlz dCk7CkdMaXN0KiBnX2xpc3RfZmlyc3QJCShHTGlzdAkJKmxpc3QpOwpndWludCAgZ19saXN0X2xl bmd0aAkJKEdMaXN0CQkqbGlzdCk7CnZvaWQgICBnX2xpc3RfZm9yZWFjaAkJKEdMaXN0CQkqbGlz dCwKCQkJCSBHRnVuYwkJIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7CkdMaXN0KiBn X2xpc3Rfc29ydCAgICAgICAgICAgICAgKEdMaXN0ICAgICAgICAgICpsaXN0LAoJCSAgICAgICAg ICAgICAgICAgR0NvbXBhcmVGdW5jICAgIGNvbXBhcmVfZnVuYyk7Cmdwb2ludGVyIGdfbGlzdF9u dGhfZGF0YQkoR0xpc3QJCSpsaXN0LAoJCQkJIGd1aW50CQkgbik7CgoKCgogCgp2b2lkICAgIGdf c2xpc3RfcHVzaF9hbGxvY2F0b3IgIChHQWxsb2NhdG9yICAgICAqYWxsb2NhdG9yKTsKdm9pZCAg ICBnX3NsaXN0X3BvcF9hbGxvY2F0b3IgICAodm9pZCk7CkdTTGlzdCogZ19zbGlzdF9hbGxvYwkJ KHZvaWQpOwp2b2lkCWdfc2xpc3RfZnJlZQkJKEdTTGlzdAkJKmxpc3QpOwp2b2lkCWdfc2xpc3Rf ZnJlZV8xCQkoR1NMaXN0CQkqbGlzdCk7CkdTTGlzdCogZ19zbGlzdF9hcHBlbmQJCShHU0xpc3QJ CSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3ByZXBlbmQJCShH U0xpc3QJCSpsaXN0LAoJCQkJIGdwb2ludGVyCSBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X2luc2Vy dAkJKEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkgZ2ludAkJIHBvc2l0 aW9uKTsKR1NMaXN0KiBnX3NsaXN0X2luc2VydF9zb3J0ZWQJKEdTTGlzdAkJKmxpc3QsCgkJCQkg Z3BvaW50ZXIJIGRhdGEsCgkJCQkgR0NvbXBhcmVGdW5jCSBmdW5jKTsKR1NMaXN0KiBnX3NsaXN0 X2NvbmNhdAkJKEdTTGlzdAkJKmxpc3QxLAoJCQkJIEdTTGlzdAkJKmxpc3QyKTsKR1NMaXN0KiBn X3NsaXN0X3JlbW92ZQkJKEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHU0xp c3QqIGdfc2xpc3RfcmVtb3ZlX2xpbmsJKEdTTGlzdAkJKmxpc3QsCgkJCQkgR1NMaXN0CQkqbGxp bmspOwpHU0xpc3QqIGdfc2xpc3RfcmV2ZXJzZQkJKEdTTGlzdAkJKmxpc3QpOwpHU0xpc3QqCWdf c2xpc3RfY29weQkJKEdTTGlzdAkJKmxpc3QpOwpHU0xpc3QqIGdfc2xpc3RfbnRoCQkoR1NMaXN0 CQkqbGlzdCwKCQkJCSBndWludAkJIG4pOwpHU0xpc3QqIGdfc2xpc3RfZmluZAkJKEdTTGlzdAkJ Kmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfZmluZF9jdXN0b20J KEdTTGlzdAkJKmxpc3QsCgkJCQkgZ3BvaW50ZXIJIGRhdGEsCgkJCQkgR0NvbXBhcmVGdW5jCSBm dW5jKTsKZ2ludAlnX3NsaXN0X3Bvc2l0aW9uCShHU0xpc3QJCSpsaXN0LAoJCQkJIEdTTGlzdAkJ KmxsaW5rKTsKZ2ludAlnX3NsaXN0X2luZGV4CQkoR1NMaXN0CQkqbGlzdCwKCQkJCSBncG9pbnRl cgkgZGF0YSk7CkdTTGlzdCogZ19zbGlzdF9sYXN0CQkoR1NMaXN0CQkqbGlzdCk7Cmd1aW50CWdf c2xpc3RfbGVuZ3RoCQkoR1NMaXN0CQkqbGlzdCk7CnZvaWQJZ19zbGlzdF9mb3JlYWNoCQkoR1NM aXN0CQkqbGlzdCwKCQkJCSBHRnVuYwkJIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7 CkdTTGlzdCogIGdfc2xpc3Rfc29ydCAgICAgICAgICAgKEdTTGlzdCAgICAgICAgICAqbGlzdCwK CQkgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyAgICBjb21wYXJlX2Z1bmMpOwpncG9pbnRl ciBnX3NsaXN0X250aF9kYXRhCShHU0xpc3QJCSpsaXN0LAoJCQkJIGd1aW50CQkgbik7CgoKCiAK CkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXcJCShHSGFzaEZ1bmMJIGhhc2hfZnVuYywKCQkJ CQkgR0NvbXBhcmVGdW5jCSBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgICAgZ19oYXNoX3RhYmxl X2Rlc3Ryb3kJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAgICBnX2hhc2hfdGFibGVf aW5zZXJ0CQkoR0hhc2hUYWJsZQkqaGFzaF90YWJsZSwKCQkJCQkgZ3BvaW50ZXIJIGtleSwKCQkJ CQkgZ3BvaW50ZXIJIHZhbHVlKTsKdm9pZAkgICAgZ19oYXNoX3RhYmxlX3JlbW92ZQkJKEdIYXNo VGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIGdjb25zdHBvaW50ZXIJIGtleSk7Cmdwb2ludGVyICAg IGdfaGFzaF90YWJsZV9sb29rdXAJCShHSGFzaFRhYmxlCSpoYXNoX3RhYmxlLAoJCQkJCSBnY29u c3Rwb2ludGVyCSBrZXkpOwpnYm9vbGVhbiAgICBnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVk KEdIYXNoVGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIGdjb25zdHBvaW50ZXIJIGxvb2t1cF9rZXks CgkJCQkJIGdwb2ludGVyCSpvcmlnX2tleSwKCQkJCQkgZ3BvaW50ZXIJKnZhbHVlKTsKdm9pZAkg ICAgZ19oYXNoX3RhYmxlX2ZyZWV6ZQkJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAg ICBnX2hhc2hfdGFibGVfdGhhdwkJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUpOwp2b2lkCSAgICBn X2hhc2hfdGFibGVfZm9yZWFjaAkoR0hhc2hUYWJsZQkqaGFzaF90YWJsZSwKCQkJCQkgR0hGdW5j CQkgZnVuYywKCQkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7Cmd1aW50CSAgICBnX2hhc2hfdGFi bGVfZm9yZWFjaF9yZW1vdmUJKEdIYXNoVGFibGUJKmhhc2hfdGFibGUsCgkJCQkJIEdIUkZ1bmMJ IGZ1bmMsCgkJCQkJIGdwb2ludGVyCSB1c2VyX2RhdGEpOwpndWludAkgICAgZ19oYXNoX3RhYmxl X3NpemUJCShHSGFzaFRhYmxlCSpoYXNoX3RhYmxlKTsKCgogCgpHQ2FjaGUqCSBnX2NhY2hlX25l dwkgICAgICAgKEdDYWNoZU5ld0Z1bmMJICAgdmFsdWVfbmV3X2Z1bmMsCgkJCQlHQ2FjaGVEZXN0 cm95RnVuYyAgdmFsdWVfZGVzdHJveV9mdW5jLAoJCQkJR0NhY2hlRHVwRnVuYwkgICBrZXlfZHVw X2Z1bmMsCgkJCQlHQ2FjaGVEZXN0cm95RnVuYyAga2V5X2Rlc3Ryb3lfZnVuYywKCQkJCUdIYXNo RnVuYwkgICBoYXNoX2tleV9mdW5jLAoJCQkJR0hhc2hGdW5jCSAgIGhhc2hfdmFsdWVfZnVuYywK CQkJCUdDb21wYXJlRnVuYwkgICBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgZ19jYWNoZV9kZXN0 cm95ICAgICAgIChHQ2FjaGUJCSAgKmNhY2hlKTsKZ3BvaW50ZXIgZ19jYWNoZV9pbnNlcnQJICAg ICAgIChHQ2FjaGUJCSAgKmNhY2hlLAoJCQkJZ3BvaW50ZXIJICAga2V5KTsKdm9pZAkgZ19jYWNo ZV9yZW1vdmUJICAgICAgIChHQ2FjaGUJCSAgKmNhY2hlLAoJCQkJZ3BvaW50ZXIJICAgdmFsdWUp Owp2b2lkCSBnX2NhY2hlX2tleV9mb3JlYWNoICAgKEdDYWNoZQkJICAqY2FjaGUsCgkJCQlHSEZ1 bmMJCSAgIGZ1bmMsCgkJCQlncG9pbnRlcgkgICB1c2VyX2RhdGEpOwp2b2lkCSBnX2NhY2hlX3Zh bHVlX2ZvcmVhY2ggKEdDYWNoZQkJICAqY2FjaGUsCgkJCQlHSEZ1bmMJCSAgIGZ1bmMsCgkJCQln cG9pbnRlcgkgICB1c2VyX2RhdGEpOwoKCiAKCkdUcmVlKgkgZ190cmVlX25ldwkgKEdDb21wYXJl RnVuYwkga2V5X2NvbXBhcmVfZnVuYyk7CnZvaWQJIGdfdHJlZV9kZXN0cm95CSAoR1RyZWUJCSp0 cmVlKTsKdm9pZAkgZ190cmVlX2luc2VydAkgKEdUcmVlCQkqdHJlZSwKCQkJICBncG9pbnRlcgkg a2V5LAoJCQkgIGdwb2ludGVyCSB2YWx1ZSk7CnZvaWQJIGdfdHJlZV9yZW1vdmUJIChHVHJlZQkJ KnRyZWUsCgkJCSAgZ3BvaW50ZXIJIGtleSk7Cmdwb2ludGVyIGdfdHJlZV9sb29rdXAJIChHVHJl ZQkJKnRyZWUsCgkJCSAgZ3BvaW50ZXIJIGtleSk7CnZvaWQJIGdfdHJlZV90cmF2ZXJzZSAoR1Ry ZWUJCSp0cmVlLAoJCQkgIEdUcmF2ZXJzZUZ1bmMJIHRyYXZlcnNlX2Z1bmMsCgkJCSAgR1RyYXZl cnNlVHlwZQkgdHJhdmVyc2VfdHlwZSwKCQkJICBncG9pbnRlcgkgZGF0YSk7Cmdwb2ludGVyIGdf dHJlZV9zZWFyY2gJIChHVHJlZQkJKnRyZWUsCgkJCSAgR1NlYXJjaEZ1bmMJIHNlYXJjaF9mdW5j LAoJCQkgIGdwb2ludGVyCSBkYXRhKTsKZ2ludAkgZ190cmVlX2hlaWdodAkgKEdUcmVlCQkqdHJl ZSk7CmdpbnQJIGdfdHJlZV9ubm9kZXMJIChHVHJlZQkJKnRyZWUpOwoKCgogCgpzdHJ1Y3QgX0dO b2RlCnsKICBncG9pbnRlciBkYXRhOwogIEdOb2RlCSAgKm5leHQ7CiAgR05vZGUJICAqcHJldjsK ICBHTm9kZQkgICpwYXJlbnQ7CiAgR05vZGUJICAqY2hpbGRyZW47Cn07CgoKCgoKCnZvaWQgICAg IGdfbm9kZV9wdXNoX2FsbG9jYXRvciAgKEdBbGxvY2F0b3IgICAgICAgKmFsbG9jYXRvcik7CnZv aWQgICAgIGdfbm9kZV9wb3BfYWxsb2NhdG9yICAgKHZvaWQpOwpHTm9kZSoJIGdfbm9kZV9uZXcJ CShncG9pbnRlcgkgICBkYXRhKTsKdm9pZAkgZ19ub2RlX2Rlc3Ryb3kJCShHTm9kZQkJICAqcm9v dCk7CnZvaWQJIGdfbm9kZV91bmxpbmsJCShHTm9kZQkJICAqbm9kZSk7CkdOb2RlKgkgZ19ub2Rl X2luc2VydAkJKEdOb2RlCQkgICpwYXJlbnQsCgkJCQkgZ2ludAkJICAgcG9zaXRpb24sCgkJCQkg R05vZGUJCSAgKm5vZGUpOwpHTm9kZSoJIGdfbm9kZV9pbnNlcnRfYmVmb3JlCShHTm9kZQkJICAq cGFyZW50LAoJCQkJIEdOb2RlCQkgICpzaWJsaW5nLAoJCQkJIEdOb2RlCQkgICpub2RlKTsKR05v ZGUqCSBnX25vZGVfcHJlcGVuZAkJKEdOb2RlCQkgICpwYXJlbnQsCgkJCQkgR05vZGUJCSAgKm5v ZGUpOwpndWludAkgZ19ub2RlX25fbm9kZXMJCShHTm9kZQkJICAqcm9vdCwKCQkJCSBHVHJhdmVy c2VGbGFncwkgICBmbGFncyk7CkdOb2RlKgkgZ19ub2RlX2dldF9yb290CShHTm9kZQkJICAqbm9k ZSk7Cmdib29sZWFuIGdfbm9kZV9pc19hbmNlc3RvcgkoR05vZGUJCSAgKm5vZGUsCgkJCQkgR05v ZGUJCSAgKmRlc2NlbmRhbnQpOwpndWludAkgZ19ub2RlX2RlcHRoCQkoR05vZGUJCSAgKm5vZGUp OwpHTm9kZSoJIGdfbm9kZV9maW5kCQkoR05vZGUJCSAgKnJvb3QsCgkJCQkgR1RyYXZlcnNlVHlw ZQkgICBvcmRlciwKCQkJCSBHVHJhdmVyc2VGbGFncwkgICBmbGFncywKCQkJCSBncG9pbnRlcgkg ICBkYXRhKTsKCiAKCgoKCgoKCgoKCgogCgoKCgp2b2lkCSBnX25vZGVfdHJhdmVyc2UJKEdOb2Rl CQkgICpyb290LAoJCQkJIEdUcmF2ZXJzZVR5cGUJICAgb3JkZXIsCgkJCQkgR1RyYXZlcnNlRmxh Z3MJICAgZmxhZ3MsCgkJCQkgZ2ludAkJICAgbWF4X2RlcHRoLAoJCQkJIEdOb2RlVHJhdmVyc2VG dW5jIGZ1bmMsCgkJCQkgZ3BvaW50ZXIJICAgZGF0YSk7CgogCgoKCgpndWludAkgZ19ub2RlX21h eF9oZWlnaHQJIChHTm9kZSAqcm9vdCk7Cgp2b2lkCSBnX25vZGVfY2hpbGRyZW5fZm9yZWFjaCAo R05vZGUJCSAgKm5vZGUsCgkJCQkgIEdUcmF2ZXJzZUZsYWdzICAgZmxhZ3MsCgkJCQkgIEdOb2Rl Rm9yZWFjaEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIJICAgZGF0YSk7CnZvaWQJIGdfbm9kZV9y ZXZlcnNlX2NoaWxkcmVuIChHTm9kZQkJICAqbm9kZSk7Cmd1aW50CSBnX25vZGVfbl9jaGlsZHJl bgkgKEdOb2RlCQkgICpub2RlKTsKR05vZGUqCSBnX25vZGVfbnRoX2NoaWxkCSAoR05vZGUJCSAg Km5vZGUsCgkJCQkgIGd1aW50CQkgICBuKTsKR05vZGUqCSBnX25vZGVfbGFzdF9jaGlsZAkgKEdO b2RlCQkgICpub2RlKTsKR05vZGUqCSBnX25vZGVfZmluZF9jaGlsZAkgKEdOb2RlCQkgICpub2Rl LAoJCQkJICBHVHJhdmVyc2VGbGFncyAgIGZsYWdzLAoJCQkJICBncG9pbnRlcgkgICBkYXRhKTsK Z2ludAkgZ19ub2RlX2NoaWxkX3Bvc2l0aW9uCSAoR05vZGUJCSAgKm5vZGUsCgkJCQkgIEdOb2Rl CQkgICpjaGlsZCk7CmdpbnQJIGdfbm9kZV9jaGlsZF9pbmRleAkgKEdOb2RlCQkgICpub2RlLAoJ CQkJICBncG9pbnRlcgkgICBkYXRhKTsKCkdOb2RlKgkgZ19ub2RlX2ZpcnN0X3NpYmxpbmcJIChH Tm9kZQkJICAqbm9kZSk7CkdOb2RlKgkgZ19ub2RlX2xhc3Rfc2libGluZwkgKEdOb2RlCQkgICpu b2RlKTsKCgoKCgoKCgoKIAoKCnR5cGVkZWYgZW51bQp7CiAgR19IT09LX0ZMQUdfQUNUSVZFCT0g MSA8PCAwLAogIEdfSE9PS19GTEFHX0lOX0NBTEwJPSAxIDw8IDEsCiAgR19IT09LX0ZMQUdfTUFT Swk9IDB4MGYKfSBHSG9va0ZsYWdNYXNrOwoKCgpzdHJ1Y3QgX0dIb29rTGlzdAp7CiAgZ3VpbnQJ CSBzZXFfaWQ7CiAgZ3VpbnQJCSBob29rX3NpemU7CiAgZ3VpbnQJCSBpc19zZXR1cCA6IDE7CiAg R0hvb2sJCSpob29rczsKICBHTWVtQ2h1bmsJKmhvb2tfbWVtY2h1bms7CiAgR0hvb2tGcmVlRnVu YwkgaG9va19mcmVlOyAgCiAgR0hvb2tGcmVlRnVuYwkgaG9va19kZXN0cm95OyAgCn07CgpzdHJ1 Y3QgX0dIb29rCnsKICBncG9pbnRlcgkgZGF0YTsKICBHSG9vawkJKm5leHQ7CiAgR0hvb2sJCSpw cmV2OwogIGd1aW50CQkgcmVmX2NvdW50OwogIGd1aW50CQkgaG9va19pZDsKICBndWludAkJIGZs YWdzOwogIGdwb2ludGVyCSBmdW5jOwogIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cn07CgoKCgoK CgoKCgoKCnZvaWQJIGdfaG9va19saXN0X2luaXQJCShHSG9va0xpc3QJCSpob29rX2xpc3QsCgkJ CQkJIGd1aW50CQkJIGhvb2tfc2l6ZSk7CnZvaWQJIGdfaG9va19saXN0X2NsZWFyCQkoR0hvb2tM aXN0CQkqaG9va19saXN0KTsKR0hvb2sqCSBnX2hvb2tfYWxsb2MJCQkoR0hvb2tMaXN0CQkqaG9v a19saXN0KTsKdm9pZAkgZ19ob29rX2ZyZWUJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJ CSBHSG9vawkJCSpob29rKTsKdm9pZAkgZ19ob29rX3JlZgkJCShHSG9va0xpc3QJCSpob29rX2xp c3QsCgkJCQkJIEdIb29rCQkJKmhvb2spOwp2b2lkCSBnX2hvb2tfdW5yZWYJCQkoR0hvb2tMaXN0 CQkqaG9va19saXN0LAoJCQkJCSBHSG9vawkJCSpob29rKTsKZ2Jvb2xlYW4gZ19ob29rX2Rlc3Ry b3kJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBndWludAkJCSBob29rX2lkKTsKdm9p ZAkgZ19ob29rX2Rlc3Ryb3lfbGluawkJKEdIb29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgR0hv b2sJCQkqaG9vayk7CnZvaWQJIGdfaG9va19wcmVwZW5kCQkJKEdIb29rTGlzdAkJKmhvb2tfbGlz dCwKCQkJCQkgR0hvb2sJCQkqaG9vayk7CnZvaWQJIGdfaG9va19pbnNlcnRfYmVmb3JlCQkoR0hv b2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBHSG9vawkJCSpzaWJsaW5nLAoJCQkJCSBHSG9vawkJ CSpob29rKTsKdm9pZAkgZ19ob29rX2luc2VydF9zb3J0ZWQJCShHSG9va0xpc3QJCSpob29rX2xp c3QsCgkJCQkJIEdIb29rCQkJKmhvb2ssCgkJCQkJIEdIb29rQ29tcGFyZUZ1bmMJIGZ1bmMpOwpH SG9vayoJIGdfaG9va19nZXQJCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJCSBndWludAkJ CSBob29rX2lkKTsKR0hvb2sqCSBnX2hvb2tfZmluZAkJCShHSG9va0xpc3QJCSpob29rX2xpc3Qs CgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIEdIb29rRmluZEZ1bmMJCSBmdW5j LAoJCQkJCSBncG9pbnRlcgkJIGRhdGEpOwpHSG9vayoJIGdfaG9va19maW5kX2RhdGEJCShHSG9v a0xpc3QJCSpob29rX2xpc3QsCgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIGdw b2ludGVyCQkgZGF0YSk7CkdIb29rKgkgZ19ob29rX2ZpbmRfZnVuYwkJKEdIb29rTGlzdAkJKmhv b2tfbGlzdCwKCQkJCQkgZ2Jvb2xlYW4JCSBuZWVkX3ZhbGlkcywKCQkJCQkgZ3BvaW50ZXIJCSBm dW5jKTsKR0hvb2sqCSBnX2hvb2tfZmluZF9mdW5jX2RhdGEJCShHSG9va0xpc3QJCSpob29rX2xp c3QsCgkJCQkJIGdib29sZWFuCQkgbmVlZF92YWxpZHMsCgkJCQkJIGdwb2ludGVyCQkgZnVuYywK CQkJCQkgZ3BvaW50ZXIJCSBkYXRhKTsKIApHSG9vayoJIGdfaG9va19maXJzdF92YWxpZAkJKEdI b29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgZ2Jvb2xlYW4JCSBtYXlfYmVfaW5fY2FsbCk7CiAK CgpHSG9vayoJIGdfaG9va19uZXh0X3ZhbGlkCQkoR0hvb2tMaXN0CQkqaG9va19saXN0LAoJCQkJ CSBHSG9vawkJCSpob29rLAoJCQkJCSBnYm9vbGVhbgkJIG1heV9iZV9pbl9jYWxsKTsKCiAKZ2lu dAkgZ19ob29rX2NvbXBhcmVfaWRzCQkoR0hvb2sJCQkqbmV3X2hvb2ssCgkJCQkJIEdIb29rCQkJ KnNpYmxpbmcpOwoKIAoKCgogCgp2b2lkCSBnX2hvb2tfbGlzdF9pbnZva2UJCShHSG9va0xpc3QJ CSpob29rX2xpc3QsCgkJCQkJIGdib29sZWFuCQkgbWF5X3JlY3Vyc2UpOwogCgoKdm9pZAkgZ19o b29rX2xpc3RfaW52b2tlX2NoZWNrCShHSG9va0xpc3QJCSpob29rX2xpc3QsCgkJCQkJIGdib29s ZWFuCQkgbWF5X3JlY3Vyc2UpOwogCgp2b2lkCSBnX2hvb2tfbGlzdF9tYXJzaGFsCQkoR0hvb2tM aXN0CQkqaG9va19saXN0LAoJCQkJCSBnYm9vbGVhbgkJIG1heV9yZWN1cnNlLAoJCQkJCSBHSG9v a01hcnNoYWxsZXIJIG1hcnNoYWxsZXIsCgkJCQkJIGdwb2ludGVyCQkgZGF0YSk7CnZvaWQJIGdf aG9va19saXN0X21hcnNoYWxfY2hlY2sJKEdIb29rTGlzdAkJKmhvb2tfbGlzdCwKCQkJCQkgZ2Jv b2xlYW4JCSBtYXlfcmVjdXJzZSwKCQkJCQkgR0hvb2tDaGVja01hcnNoYWxsZXIJIG1hcnNoYWxs ZXIsCgkJCQkJIGdwb2ludGVyCQkgZGF0YSk7CgoKIAoKCgoKCgoKCnZvaWQgZ19vbl9lcnJvcl9x dWVyeSAoY29uc3QgZ2NoYXIgKnByZ19uYW1lKTsKdm9pZCBnX29uX2Vycm9yX3N0YWNrX3RyYWNl IChjb25zdCBnY2hhciAqcHJnX25hbWUpOwoKCiAKCmV4dGVybgkgICAgICAgIGNvbnN0IGdjaGFy CQkqZ19sb2dfZG9tYWluX2dsaWI7Cmd1aW50CQlnX2xvZ19zZXRfaGFuZGxlcgkoY29uc3QgZ2No YXIJKmxvZ19kb21haW4sCgkJCQkJIEdMb2dMZXZlbEZsYWdzCSBsb2dfbGV2ZWxzLAoJCQkJCSBH TG9nRnVuYwkgbG9nX2Z1bmMsCgkJCQkJIGdwb2ludGVyCSB1c2VyX2RhdGEpOwp2b2lkCQlnX2xv Z19yZW1vdmVfaGFuZGxlcgkoY29uc3QgZ2NoYXIJKmxvZ19kb21haW4sCgkJCQkJIGd1aW50CQkg aGFuZGxlcl9pZCk7CnZvaWQJCWdfbG9nX2RlZmF1bHRfaGFuZGxlcgkoY29uc3QgZ2NoYXIJKmxv Z19kb21haW4sCgkJCQkJIEdMb2dMZXZlbEZsYWdzCSBsb2dfbGV2ZWwsCgkJCQkJIGNvbnN0IGdj aGFyCSptZXNzYWdlLAoJCQkJCSBncG9pbnRlcgkgdW51c2VkX2RhdGEpOwp2b2lkCQlnX2xvZwkJ CShjb25zdCBnY2hhcgkqbG9nX2RvbWFpbiwKCQkJCQkgR0xvZ0xldmVsRmxhZ3MJIGxvZ19sZXZl bCwKCQkJCQkgY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkgLi4uKSBfX2F0dHJpYnV0ZV9fKChm b3JtYXQgKHByaW50ZiwgIDMgLCAgIDQgKSkpIDsKdm9pZAkJZ19sb2d2CQkJKGNvbnN0IGdjaGFy CSpsb2dfZG9tYWluLAoJCQkJCSBHTG9nTGV2ZWxGbGFncwkgbG9nX2xldmVsLAoJCQkJCSBjb25z dCBnY2hhcgkqZm9ybWF0LAoJCQkJCSB2YV9saXN0CSBhcmdzKTsKR0xvZ0xldmVsRmxhZ3MJZ19s b2dfc2V0X2ZhdGFsX21hc2sJKGNvbnN0IGdjaGFyCSpsb2dfZG9tYWluLAoJCQkJCSBHTG9nTGV2 ZWxGbGFncwkgZmF0YWxfbWFzayk7CkdMb2dMZXZlbEZsYWdzCWdfbG9nX3NldF9hbHdheXNfZmF0 YWwJKEdMb2dMZXZlbEZsYWdzCSBmYXRhbF9tYXNrKTsKCgoKIyAxMzA3ICIvb3B0L2d0ay9pbmNs dWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKCgoKCgoKCgoKCiMgMTM0OCAiL29wdC9ndGsvaW5jbHVk ZS9nbGliLTEuMi9nbGliLmgiCgoKdHlwZWRlZiB2b2lkCSgqR1ByaW50RnVuYykJCShjb25zdCBn Y2hhcgkqc3RyaW5nKTsKdm9pZAkJZ19wcmludAkJCShjb25zdCBnY2hhcgkqZm9ybWF0LAoJCQkJ CSAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMSAsICAgMiApKSkgOwpHUHJp bnRGdW5jCWdfc2V0X3ByaW50X2hhbmRsZXIJKEdQcmludEZ1bmMJIGZ1bmMpOwp2b2lkCQlnX3By aW50ZXJyCQkoY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkgLi4uKSBfX2F0dHJpYnV0ZV9fKChm b3JtYXQgKHByaW50ZiwgIDEgLCAgIDIgKSkpIDsKR1ByaW50RnVuYwlnX3NldF9wcmludGVycl9o YW5kbGVyCShHUHJpbnRGdW5jCSBmdW5jKTsKCiAKdHlwZWRlZiB2b2lkCQkoKkdFcnJvckZ1bmMp CQkoY29uc3QgZ2NoYXIgKnN0cik7CnR5cGVkZWYgdm9pZAkJKCpHV2FybmluZ0Z1bmMpCQkoY29u c3QgZ2NoYXIgKnN0cik7CkdFcnJvckZ1bmMgICBnX3NldF9lcnJvcl9oYW5kbGVyICAgKEdFcnJv ckZ1bmMJIGZ1bmMpOwpHV2FybmluZ0Z1bmMgZ19zZXRfd2FybmluZ19oYW5kbGVyIChHV2Fybmlu Z0Z1bmMgZnVuYyk7CkdQcmludEZ1bmMgICBnX3NldF9tZXNzYWdlX2hhbmRsZXIgKEdQcmludEZ1 bmMgZnVuYyk7CgoKIAoKCgoKCgoKCgoKZ3BvaW50ZXIgZ19tYWxsb2MgICAgICAoZ3Vsb25nCSAg c2l6ZSk7Cmdwb2ludGVyIGdfbWFsbG9jMCAgICAgKGd1bG9uZwkgIHNpemUpOwpncG9pbnRlciBn X3JlYWxsb2MgICAgIChncG9pbnRlciAgbWVtLAoJCQlndWxvbmcJICBzaXplKTsKdm9pZAkgZ19m cmVlCSAgICAgICAoZ3BvaW50ZXIgIG1lbSk7CgoKCnZvaWQJIGdfbWVtX3Byb2ZpbGUgKHZvaWQp Owp2b2lkCSBnX21lbV9jaGVjayAgIChncG9pbnRlciAgbWVtKTsKCiAKCkdBbGxvY2F0b3IqIGdf YWxsb2NhdG9yX25ldyAgIChjb25zdCBnY2hhciAgKm5hbWUsCgkJCSAgICAgICBndWludCAgICAg ICAgIG5fcHJlYWxsb2NzKTsKdm9pZCAgICAgICAgZ19hbGxvY2F0b3JfZnJlZSAgKEdBbGxvY2F0 b3IgICAqYWxsb2NhdG9yKTsKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKR01lbUNodW5r KiBnX21lbV9jaHVua19uZXcgICAgIChnY2hhcgkgICpuYW1lLAoJCQkJZ2ludAkgICBhdG9tX3Np emUsCgkJCQlndWxvbmcJICAgYXJlYV9zaXplLAoJCQkJZ2ludAkgICB0eXBlKTsKdm9pZAkgICBn X21lbV9jaHVua19kZXN0cm95IChHTWVtQ2h1bmsgKm1lbV9jaHVuayk7Cmdwb2ludGVyICAgZ19t ZW1fY2h1bmtfYWxsb2MgICAoR01lbUNodW5rICptZW1fY2h1bmspOwpncG9pbnRlciAgIGdfbWVt X2NodW5rX2FsbG9jMCAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZAkgICBnX21lbV9jaHVu a19mcmVlICAgIChHTWVtQ2h1bmsgKm1lbV9jaHVuaywKCQkJCWdwb2ludGVyICAgbWVtKTsKdm9p ZAkgICBnX21lbV9jaHVua19jbGVhbiAgIChHTWVtQ2h1bmsgKm1lbV9jaHVuayk7CnZvaWQJICAg Z19tZW1fY2h1bmtfcmVzZXQgICAoR01lbUNodW5rICptZW1fY2h1bmspOwp2b2lkCSAgIGdfbWVt X2NodW5rX3ByaW50ICAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZAkgICBnX21lbV9jaHVu a19pbmZvICAgICh2b2lkKTsKCiAKCgoKCgoKCnZvaWQgZ19ibG93X2NodW5rcyAodm9pZCk7CgoK IAoKR1RpbWVyKiBnX3RpbWVyX25ldwkodm9pZCk7CnZvaWQJZ190aW1lcl9kZXN0cm95IChHVGlt ZXIJICp0aW1lcik7CnZvaWQJZ190aW1lcl9zdGFydAkoR1RpbWVyCSAqdGltZXIpOwp2b2lkCWdf dGltZXJfc3RvcAkoR1RpbWVyCSAqdGltZXIpOwp2b2lkCWdfdGltZXJfcmVzZXQJKEdUaW1lcgkg KnRpbWVyKTsKZ2RvdWJsZSBnX3RpbWVyX2VsYXBzZWQgKEdUaW1lcgkgKnRpbWVyLAoJCQkgZ3Vs b25nCSAqbWljcm9zZWNvbmRzKTsKCgogCgoKCmdjaGFyKgkgZ19zdHJkZWxpbWl0CQkoZ2NoYXIJ ICAgICAqc3RyaW5nLAoJCQkJIGNvbnN0IGdjaGFyICpkZWxpbWl0ZXJzLAoJCQkJIGdjaGFyCSAg ICAgIG5ld19kZWxpbWl0ZXIpOwpnZG91YmxlCSBnX3N0cnRvZAkJKGNvbnN0IGdjaGFyICpucHRy LAoJCQkJIGdjaGFyCSAgICAqKmVuZHB0cik7CmdjaGFyKgkgZ19zdHJlcnJvcgkJKGdpbnQJICAg ICAgZXJybnVtKTsKZ2NoYXIqCSBnX3N0cnNpZ25hbAkJKGdpbnQJICAgICAgc2lnbnVtKTsKZ2lu dAkgZ19zdHJjYXNlY21wCQkoY29uc3QgZ2NoYXIgKnMxLAoJCQkJIGNvbnN0IGdjaGFyICpzMik7 CmdpbnQJIGdfc3RybmNhc2VjbXAJCShjb25zdCBnY2hhciAqczEsCgkJCQkgY29uc3QgZ2NoYXIg KnMyLAoJCQkJIGd1aW50IAkgICAgICBuKTsKdm9pZAkgZ19zdHJkb3duCQkoZ2NoYXIJICAgICAq c3RyaW5nKTsKdm9pZAkgZ19zdHJ1cAkJKGdjaGFyCSAgICAgKnN0cmluZyk7CnZvaWQJIGdfc3Ry cmV2ZXJzZQkJKGdjaGFyCSAgICAgKnN0cmluZyk7CiAKZ2NoYXIqICAgZ19zdHJjaHVnICAgICAg ICAgICAgICAoZ2NoYXIgICAgICAgICpzdHJpbmcpOwogCmdjaGFyKiAgZ19zdHJjaG9tcCAgICAg ICAgICAgICAgKGdjaGFyICAgICAgICAqc3RyaW5nKTsKIAoKCiAKCgpnY2hhcioJIGdfc3RyZHVw CQkoY29uc3QgZ2NoYXIgKnN0cik7CmdjaGFyKgkgZ19zdHJkdXBfcHJpbnRmCShjb25zdCBnY2hh ciAqZm9ybWF0LAoJCQkJIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsICAxICwg ICAyICkpKSA7CmdjaGFyKgkgZ19zdHJkdXBfdnByaW50ZgkoY29uc3QgZ2NoYXIgKmZvcm1hdCwK CQkJCSB2YV9saXN0ICAgICAgYXJncyk7CmdjaGFyKgkgZ19zdHJuZHVwCQkoY29uc3QgZ2NoYXIg KnN0ciwKCQkJCSBndWludAkgICAgICBuKTsKZ2NoYXIqCSBnX3N0cm5maWxsCQkoZ3VpbnQJICAg ICAgbGVuZ3RoLAoJCQkJIGdjaGFyCSAgICAgIGZpbGxfY2hhcik7CmdjaGFyKgkgZ19zdHJjb25j YXQJCShjb25zdCBnY2hhciAqc3RyaW5nMSwKCQkJCSAuLi4pOyAgCmdjaGFyKiAgIGdfc3Ryam9p bgkJKGNvbnN0IGdjaGFyICAqc2VwYXJhdG9yLAoJCQkJIC4uLik7ICAKZ2NoYXIqCSBnX3N0cmVz Y2FwZQkJKGdjaGFyCSAgICAgICpzdHJpbmcpOwpncG9pbnRlciBnX21lbWR1cAkJKGdjb25zdHBv aW50ZXIgbWVtLAoJCQkJIGd1aW50CSAgICAgICBieXRlX3NpemUpOwoKIAoKCgoKCgpnY2hhcioq CSBnX3N0cnNwbGl0CQkoY29uc3QgZ2NoYXIgICpzdHJpbmcsCgkJCQkgY29uc3QgZ2NoYXIgICpk ZWxpbWl0ZXIsCgkJCQkgZ2ludCAgICAgICAgICBtYXhfdG9rZW5zKTsKZ2NoYXIqICAgZ19zdHJq b2ludgkJKGNvbnN0IGdjaGFyICAqc2VwYXJhdG9yLAoJCQkJIGdjaGFyICAgICAgICoqc3RyX2Fy cmF5KTsKdm9pZCAgICAgZ19zdHJmcmVldgkJKGdjaGFyICAgICAgICoqc3RyX2FycmF5KTsKCgoK IAoKZ3VpbnQJZ19wcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kIChjb25zdCBnY2hhciogZm9ybWF0 LAoJCQkJICAgICB2YV9saXN0CSAgYXJncyk7CgoKIAoKZ2NoYXIqCWdfZ2V0X3VzZXJfbmFtZQkJ KHZvaWQpOwpnY2hhcioJZ19nZXRfcmVhbF9uYW1lCQkodm9pZCk7CmdjaGFyKglnX2dldF9ob21l X2RpcgkJKHZvaWQpOwpnY2hhcioJZ19nZXRfdG1wX2RpcgkJKHZvaWQpOwpnY2hhcioJZ19nZXRf cHJnbmFtZQkJKHZvaWQpOwp2b2lkCWdfc2V0X3ByZ25hbWUJCShjb25zdCBnY2hhciAqcHJnbmFt ZSk7CgoKIAoKZ3VpbnQJZ19wYXJzZV9kZWJ1Z19zdHJpbmcJKGNvbnN0IGdjaGFyICpzdHJpbmcs CgkJCQkgR0RlYnVnS2V5ICAgKmtleXMsCgkJCQkgZ3VpbnQJICAgICAgbmtleXMpOwpnaW50CWdf c25wcmludGYJCShnY2hhcgkgICAgICpzdHJpbmcsCgkJCQkgZ3Vsb25nCSAgICAgIG4sCgkJCQkg Z2NoYXIgY29uc3QgKmZvcm1hdCwKCQkJCSAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJp bnRmLCAgMyAsICAgNCApKSkgOwpnaW50CWdfdnNucHJpbnRmCQkoZ2NoYXIJICAgICAqc3RyaW5n LAoJCQkJIGd1bG9uZwkgICAgICBuLAoJCQkJIGdjaGFyIGNvbnN0ICpmb3JtYXQsCgkJCQkgdmFf bGlzdCAgICAgIGFyZ3MpOwpnY2hhcioJZ19iYXNlbmFtZQkJKGNvbnN0IGdjaGFyICpmaWxlX25h bWUpOwogCmdib29sZWFuIGdfcGF0aF9pc19hYnNvbHV0ZQkoY29uc3QgZ2NoYXIgKmZpbGVfbmFt ZSk7CiAKZ2NoYXIqICBnX3BhdGhfc2tpcF9yb290CShnY2hhciAgICAgICAqZmlsZV9uYW1lKTsK CiAKZ2NoYXIqCWdfZGlybmFtZQkJKGNvbnN0IGdjaGFyICpmaWxlX25hbWUpOwpnY2hhcioJZ19n ZXRfY3VycmVudF9kaXIJKHZvaWQpOwoKIAoKZ2NoYXIqICBnX2dldGVudgkJKGNvbnN0IGdjaGFy ICp2YXJpYWJsZSk7CgoKIAoKCgoKdm9pZAlnX2F0ZXhpdAkJKEdWb2lkRnVuYyAgICBmdW5jKTsK CgogCgpleHRlcm4gIGdpbnQJZ19iaXRfbnRoX2xzZiAoZ3VpbnQzMiBtYXNrLAoJCQkJICAgICAg IGdpbnQgICAgbnRoX2JpdCk7CiMgMTU4OSAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGli LmgiCgoKZXh0ZXJuICBnaW50CWdfYml0X250aF9tc2YgKGd1aW50MzIgbWFzaywKCQkJCSAgICAg ICBnaW50ICAgIG50aF9iaXQpOwojIDE2MDkgIi9vcHQvZ3RrL2luY2x1ZGUvZ2xpYi0xLjIvZ2xp Yi5oIgoKCmV4dGVybiAgZ3VpbnQJZ19iaXRfc3RvcmFnZSAoZ3VpbnQgbnVtYmVyKTsKIyAxNjI2 ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgogCgpHU3RyaW5nQ2h1bmsqIGdf c3RyaW5nX2NodW5rX25ldwkgICAoZ2ludCBzaXplKTsKdm9pZAkgICAgICBnX3N0cmluZ19jaHVu a19mcmVlCSAgIChHU3RyaW5nQ2h1bmsgKmNodW5rKTsKZ2NoYXIqCSAgICAgIGdfc3RyaW5nX2No dW5rX2luc2VydAkgICAoR1N0cmluZ0NodW5rICpjaHVuaywKCQkJCQkgICAgY29uc3QgZ2NoYXIJ ICpzdHJpbmcpOwpnY2hhcioJICAgICAgZ19zdHJpbmdfY2h1bmtfaW5zZXJ0X2NvbnN0ICAoR1N0 cmluZ0NodW5rICpjaHVuaywKCQkJCQkgICAgY29uc3QgZ2NoYXIJICpzdHJpbmcpOwoKCiAKCkdT dHJpbmcqIGdfc3RyaW5nX25ldwkgICAgKGNvbnN0IGdjaGFyICppbml0KTsKR1N0cmluZyogZ19z dHJpbmdfc2l6ZWRfbmV3IChndWludAkgIGRmbF9zaXplKTsKdm9pZAkgZ19zdHJpbmdfZnJlZQkg ICAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2ludAkgIGZyZWVfc2VnbWVudCk7CkdTdHJp bmcqIGdfc3RyaW5nX2Fzc2lnbiAgICAoR1N0cmluZwkgKmx2YWwsCgkJCSAgICAgY29uc3QgZ2No YXIgKnJ2YWwpOwpHU3RyaW5nKiBnX3N0cmluZ190cnVuY2F0ZSAgKEdTdHJpbmcJICpzdHJpbmcs CgkJCSAgICAgZ2ludAkgIGxlbik7CkdTdHJpbmcqIGdfc3RyaW5nX2FwcGVuZCAgICAoR1N0cmlu ZwkgKnN0cmluZywKCQkJICAgICBjb25zdCBnY2hhciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdf YXBwZW5kX2MgIChHU3RyaW5nCSAqc3RyaW5nLAoJCQkgICAgIGdjaGFyCSAgYyk7CkdTdHJpbmcq IGdfc3RyaW5nX3ByZXBlbmQgICAoR1N0cmluZwkgKnN0cmluZywKCQkJICAgICBjb25zdCBnY2hh ciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdfcHJlcGVuZF9jIChHU3RyaW5nCSAqc3RyaW5nLAoJ CQkgICAgIGdjaGFyCSAgYyk7CkdTdHJpbmcqIGdfc3RyaW5nX2luc2VydCAgICAoR1N0cmluZwkg KnN0cmluZywKCQkJICAgICBnaW50CSAgcG9zLAoJCQkgICAgIGNvbnN0IGdjaGFyICp2YWwpOwpH U3RyaW5nKiBnX3N0cmluZ19pbnNlcnRfYyAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2lu dAkgIHBvcywKCQkJICAgICBnY2hhcgkgIGMpOwpHU3RyaW5nKiBnX3N0cmluZ19lcmFzZQkgICAg KEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgZ2ludAkgIHBvcywKCQkJICAgICBnaW50CSAgbGVu KTsKR1N0cmluZyogZ19zdHJpbmdfZG93bgkgICAgKEdTdHJpbmcJICpzdHJpbmcpOwpHU3RyaW5n KiBnX3N0cmluZ191cAkgICAgKEdTdHJpbmcJICpzdHJpbmcpOwp2b2lkCSBnX3N0cmluZ19zcHJp bnRmICAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKCQkJ ICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMiAsICAgMyApKSkgOwp2 b2lkCSBnX3N0cmluZ19zcHJpbnRmYSAgKEdTdHJpbmcJICpzdHJpbmcsCgkJCSAgICAgY29uc3Qg Z2NoYXIgKmZvcm1hdCwKCQkJICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRm LCAgMiAsICAgMyApKSkgOwoKCiAKCgoKCgoKCgoKR0FycmF5KiBnX2FycmF5X25ldwkgICAgICAg ICAgKGdib29sZWFuCSAgICB6ZXJvX3Rlcm1pbmF0ZWQsCgkJCQkgICBnYm9vbGVhbgkgICAgY2xl YXIsCgkJCQkgICBndWludAkgICAgZWxlbWVudF9zaXplKTsKdm9pZAlnX2FycmF5X2ZyZWUJICAg ICAgICAgIChHQXJyYXkJICAgKmFycmF5LAoJCQkJICAgZ2Jvb2xlYW4JICAgIGZyZWVfc2VnbWVu dCk7CkdBcnJheSogZ19hcnJheV9hcHBlbmRfdmFscyAgICAgICAoR0FycmF5CSAgICphcnJheSwK CQkJCSAgIGdjb25zdHBvaW50ZXIgICAgZGF0YSwKCQkJCSAgIGd1aW50CSAgICBsZW4pOwpHQXJy YXkqIGdfYXJyYXlfcHJlcGVuZF92YWxzICAgICAgKEdBcnJheQkgICAqYXJyYXksCgkJCQkgICBn Y29uc3Rwb2ludGVyICAgIGRhdGEsCgkJCQkgICBndWludAkgICAgbGVuKTsKR0FycmF5KiBnX2Fy cmF5X2luc2VydF92YWxzICAgICAgIChHQXJyYXkgICAgICAgICAgKmFycmF5LAoJCQkJICAgZ3Vp bnQgICAgICAgICAgICBpbmRleCwKCQkJCSAgIGdjb25zdHBvaW50ZXIgICAgZGF0YSwKCQkJCSAg IGd1aW50ICAgICAgICAgICAgbGVuKTsKR0FycmF5KiBnX2FycmF5X3NldF9zaXplICAgICAgICAg IChHQXJyYXkJICAgKmFycmF5LAoJCQkJICAgZ3VpbnQJICAgIGxlbmd0aCk7CkdBcnJheSogZ19h cnJheV9yZW1vdmVfaW5kZXgJICAoR0FycmF5CSAgICphcnJheSwKCQkJCSAgIGd1aW50CSAgICBp bmRleCk7CkdBcnJheSogZ19hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoR0FycmF5CSAgICphcnJh eSwKCQkJCSAgIGd1aW50CSAgICBpbmRleCk7CgogCgoKCgoKR1B0ckFycmF5KiAgZ19wdHJfYXJy YXlfbmV3CQkgICAodm9pZCk7CnZvaWQJICAgIGdfcHRyX2FycmF5X2ZyZWUJCSAgIChHUHRyQXJy YXkJKmFycmF5LAoJCQkJCSAgICBnYm9vbGVhbgkgZnJlZV9zZWcpOwp2b2lkCSAgICBnX3B0cl9h cnJheV9zZXRfc2l6ZQkgICAoR1B0ckFycmF5CSphcnJheSwKCQkJCQkgICAgZ2ludAkgbGVuZ3Ro KTsKZ3BvaW50ZXIgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4CSAgIChHUHRyQXJyYXkJKmFy cmF5LAoJCQkJCSAgICBndWludAkgaW5kZXgpOwpncG9pbnRlciAgICBnX3B0cl9hcnJheV9yZW1v dmVfaW5kZXhfZmFzdCAgKEdQdHJBcnJheQkqYXJyYXksCgkJCQkJICAgIGd1aW50CSBpbmRleCk7 Cmdib29sZWFuICAgIGdfcHRyX2FycmF5X3JlbW92ZQkJICAgKEdQdHJBcnJheQkqYXJyYXksCgkJ CQkJICAgIGdwb2ludGVyCSBkYXRhKTsKZ2Jvb2xlYW4gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2Zh c3QgICAgICAgIChHUHRyQXJyYXkJKmFycmF5LAoJCQkJCSAgICBncG9pbnRlcgkgZGF0YSk7CnZv aWQJICAgIGdfcHRyX2FycmF5X2FkZAkJICAgKEdQdHJBcnJheQkqYXJyYXksCgkJCQkJICAgIGdw b2ludGVyCSBkYXRhKTsKCiAKCgoKR0J5dGVBcnJheSogZ19ieXRlX2FycmF5X25ldwkgICAgICAg ICAgICh2b2lkKTsKdm9pZAkgICAgZ19ieXRlX2FycmF5X2ZyZWUJICAgICAgICAgICAoR0J5dGVB cnJheQkgKmFycmF5LAoJCQkJCSAgICBnYm9vbGVhbgkgIGZyZWVfc2VnbWVudCk7CkdCeXRlQXJy YXkqIGdfYnl0ZV9hcnJheV9hcHBlbmQJICAgICAgICAgICAoR0J5dGVBcnJheQkgKmFycmF5LAoJ CQkJCSAgICBjb25zdCBndWludDggKmRhdGEsCgkJCQkJICAgIGd1aW50CSAgbGVuKTsKR0J5dGVB cnJheSogZ19ieXRlX2FycmF5X3ByZXBlbmQgICAgICAgICAgIChHQnl0ZUFycmF5CSAqYXJyYXks CgkJCQkJICAgIGNvbnN0IGd1aW50OCAqZGF0YSwKCQkJCQkgICAgZ3VpbnQJICBsZW4pOwpHQnl0 ZUFycmF5KiBnX2J5dGVfYXJyYXlfc2V0X3NpemUgICAgICAgICAgKEdCeXRlQXJyYXkJICphcnJh eSwKCQkJCQkgICAgZ3VpbnQJICBsZW5ndGgpOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfcmVt b3ZlX2luZGV4CSAgIChHQnl0ZUFycmF5CSAqYXJyYXksCgkJCQkJICAgIGd1aW50CSAgaW5kZXgp OwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKEdCeXRlQXJyYXkJ ICphcnJheSwKCQkJCQkgICAgZ3VpbnQJICBpbmRleCk7CgoKIAoKZ2ludCAgZ19zdHJfZXF1YWwg KGdjb25zdHBvaW50ZXIgICB2LAoJCSAgIGdjb25zdHBvaW50ZXIgICB2Mik7Cmd1aW50IGdfc3Ry X2hhc2ggIChnY29uc3Rwb2ludGVyICAgdik7CgpnaW50ICBnX2ludF9lcXVhbCAoZ2NvbnN0cG9p bnRlciAgIHYsCgkJICAgZ2NvbnN0cG9pbnRlciAgIHYyKTsKZ3VpbnQgZ19pbnRfaGFzaCAgKGdj b25zdHBvaW50ZXIgICB2KTsKCiAKCgoKCgpndWludCBnX2RpcmVjdF9oYXNoICAoZ2NvbnN0cG9p bnRlciB2KTsKZ2ludCAgZ19kaXJlY3RfZXF1YWwgKGdjb25zdHBvaW50ZXIgdiwKCQkgICAgICBn Y29uc3Rwb2ludGVyIHYyKTsKCgogCgpHUXVhcmsJICBnX3F1YXJrX3RyeV9zdHJpbmcJCShjb25z dCBnY2hhcgkqc3RyaW5nKTsKR1F1YXJrCSAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcJKGNv bnN0IGdjaGFyCSpzdHJpbmcpOwpHUXVhcmsJICBnX3F1YXJrX2Zyb21fc3RyaW5nCQkoY29uc3Qg Z2NoYXIJKnN0cmluZyk7CmdjaGFyKgkgIGdfcXVhcmtfdG9fc3RyaW5nCQkoR1F1YXJrCQkgcXVh cmspOwoKCiAKCgp2b2lkCSAgZ19kYXRhbGlzdF9pbml0CQkgKEdEYXRhCQkgKipkYXRhbGlzdCk7 CnZvaWQJICBnX2RhdGFsaXN0X2NsZWFyCQkgKEdEYXRhCQkgKipkYXRhbGlzdCk7Cmdwb2ludGVy ICBnX2RhdGFsaXN0X2lkX2dldF9kYXRhCSAoR0RhdGEJCSAqKmRhdGFsaXN0LAoJCQkJCSAgR1F1 YXJrCSAgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFsaXN0X2lkX3NldF9kYXRhX2Z1bGwJIChHRGF0 YQkJICoqZGF0YWxpc3QsCgkJCQkJICBHUXVhcmsJICAga2V5X2lkLAoJCQkJCSAgZ3BvaW50ZXIJ ICAgZGF0YSwKCQkJCQkgIEdEZXN0cm95Tm90aWZ5ICAgZGVzdHJveV9mdW5jKTsKdm9pZAkgIGdf ZGF0YWxpc3RfaWRfcmVtb3ZlX25vX25vdGlmeSAoR0RhdGEJCSAqKmRhdGFsaXN0LAoJCQkJCSAg R1F1YXJrCSAgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFsaXN0X2ZvcmVhY2gJCSAoR0RhdGEJCSAq KmRhdGFsaXN0LAoJCQkJCSAgR0RhdGFGb3JlYWNoRnVuYyBmdW5jLAoJCQkJCSAgZ3BvaW50ZXIJ ICAgdXNlcl9kYXRhKTsKCgoKCgoKCgoKCgoKCgoKCiAKCgp2b2lkCSAgZ19kYXRhc2V0X2Rlc3Ry b3kJCShnY29uc3Rwb2ludGVyCSAgZGF0YXNldF9sb2NhdGlvbik7Cmdwb2ludGVyICBnX2RhdGFz ZXRfaWRfZ2V0X2RhdGEJCShnY29uc3Rwb2ludGVyCSAgZGF0YXNldF9sb2NhdGlvbiwKCQkJCQkg R1F1YXJrCQkgIGtleV9pZCk7CnZvaWQJICBnX2RhdGFzZXRfaWRfc2V0X2RhdGFfZnVsbAkoZ2Nv bnN0cG9pbnRlcgkgIGRhdGFzZXRfbG9jYXRpb24sCgkJCQkJIEdRdWFyawkJICBrZXlfaWQsCgkJ CQkJIGdwb2ludGVyCSAgZGF0YSwKCQkJCQkgR0Rlc3Ryb3lOb3RpZnkJICBkZXN0cm95X2Z1bmMp Owp2b2lkCSAgZ19kYXRhc2V0X2lkX3JlbW92ZV9ub19ub3RpZnkJKGdjb25zdHBvaW50ZXIJICBk YXRhc2V0X2xvY2F0aW9uLAoJCQkJCSBHUXVhcmsJCSAga2V5X2lkKTsKdm9pZAkgIGdfZGF0YXNl dF9mb3JlYWNoCQkoZ2NvbnN0cG9pbnRlcgkgIGRhdGFzZXRfbG9jYXRpb24sCgkJCQkJIEdEYXRh Rm9yZWFjaEZ1bmMgZnVuYywKCQkJCQkgZ3BvaW50ZXIJICB1c2VyX2RhdGEpOwoKCgoKCgoKCgoK CgoKCgoKIAoKCiAKCgoKCgoKCgoKCgogCnR5cGVkZWYgZW51bQp7CiAgR19FUlJfVU5LTk9XTiwK ICBHX0VSUl9VTkVYUF9FT0YsCiAgR19FUlJfVU5FWFBfRU9GX0lOX1NUUklORywKICBHX0VSUl9V TkVYUF9FT0ZfSU5fQ09NTUVOVCwKICBHX0VSUl9OT05fRElHSVRfSU5fQ09OU1QsCiAgR19FUlJf RElHSVRfUkFESVgsCiAgR19FUlJfRkxPQVRfUkFESVgsCiAgR19FUlJfRkxPQVRfTUFMRk9STUVE Cn0gR0Vycm9yVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHX1RPS0VOX0VPRgkJCT0gICAwLAog IAogIEdfVE9LRU5fTEVGVF9QQVJFTgkJPSAnKCcsCiAgR19UT0tFTl9SSUdIVF9QQVJFTgkJPSAn KScsCiAgR19UT0tFTl9MRUZUX0NVUkxZCQk9ICd7JywKICBHX1RPS0VOX1JJR0hUX0NVUkxZCQk9 ICd9JywKICBHX1RPS0VOX0xFRlRfQlJBQ0UJCT0gJ1snLAogIEdfVE9LRU5fUklHSFRfQlJBQ0UJ CT0gJ10nLAogIEdfVE9LRU5fRVFVQUxfU0lHTgkJPSAnPScsCiAgR19UT0tFTl9DT01NQQkJCT0g JywnLAogIAogIEdfVE9LRU5fTk9ORQkJCT0gMjU2LAogIAogIEdfVE9LRU5fRVJST1IsCiAgCiAg R19UT0tFTl9DSEFSLAogIEdfVE9LRU5fQklOQVJZLAogIEdfVE9LRU5fT0NUQUwsCiAgR19UT0tF Tl9JTlQsCiAgR19UT0tFTl9IRVgsCiAgR19UT0tFTl9GTE9BVCwKICBHX1RPS0VOX1NUUklORywK ICAKICBHX1RPS0VOX1NZTUJPTCwKICBHX1RPS0VOX0lERU5USUZJRVIsCiAgR19UT0tFTl9JREVO VElGSUVSX05VTEwsCiAgCiAgR19UT0tFTl9DT01NRU5UX1NJTkdMRSwKICBHX1RPS0VOX0NPTU1F TlRfTVVMVEksCiAgR19UT0tFTl9MQVNUCn0gR1Rva2VuVHlwZTsKCnVuaW9uCV9HVG9rZW5WYWx1 ZQp7CiAgZ3BvaW50ZXIJdl9zeW1ib2w7CiAgZ2NoYXIJCSp2X2lkZW50aWZpZXI7CiAgZ3Vsb25n CXZfYmluYXJ5OwogIGd1bG9uZwl2X29jdGFsOwogIGd1bG9uZwl2X2ludDsKICBnZG91YmxlCXZf ZmxvYXQ7CiAgZ3Vsb25nCXZfaGV4OwogIGdjaGFyCQkqdl9zdHJpbmc7CiAgZ2NoYXIJCSp2X2Nv bW1lbnQ7CiAgZ3VjaGFyCXZfY2hhcjsKICBndWludAkJdl9lcnJvcjsKfTsKCnN0cnVjdAlfR1Nj YW5uZXJDb25maWcKewogICAKCiAgZ2NoYXIJCSpjc2V0X3NraXBfY2hhcmFjdGVyczsJCSAKICBn Y2hhcgkJKmNzZXRfaWRlbnRpZmllcl9maXJzdDsKICBnY2hhcgkJKmNzZXRfaWRlbnRpZmllcl9u dGg7CiAgZ2NoYXIJCSpjcGFpcl9jb21tZW50X3NpbmdsZTsJCSAKICAKICAgCgogIGd1aW50CQlj YXNlX3NlbnNpdGl2ZSA6IDE7CiAgCiAgIAoKCiAgZ3VpbnQJCXNraXBfY29tbWVudF9tdWx0aSA6 IDE7CQkgCiAgZ3VpbnQJCXNraXBfY29tbWVudF9zaW5nbGUgOiAxOwkgCiAgZ3VpbnQJCXNjYW5f Y29tbWVudF9tdWx0aSA6IDE7CQkgCiAgZ3VpbnQJCXNjYW5faWRlbnRpZmllciA6IDE7CiAgZ3Vp bnQJCXNjYW5faWRlbnRpZmllcl8xY2hhciA6IDE7CiAgZ3VpbnQJCXNjYW5faWRlbnRpZmllcl9O VUxMIDogMTsKICBndWludAkJc2Nhbl9zeW1ib2xzIDogMTsKICBndWludAkJc2Nhbl9iaW5hcnkg OiAxOwogIGd1aW50CQlzY2FuX29jdGFsIDogMTsKICBndWludAkJc2Nhbl9mbG9hdCA6IDE7CiAg Z3VpbnQJCXNjYW5faGV4IDogMTsJCQkgCiAgZ3VpbnQJCXNjYW5faGV4X2RvbGxhciA6IDE7CQkg CiAgZ3VpbnQJCXNjYW5fc3RyaW5nX3NxIDogMTsJCSAKICBndWludAkJc2Nhbl9zdHJpbmdfZHEg OiAxOwkJIAogIGd1aW50CQludW1iZXJzXzJfaW50IDogMTsJCSAKICBndWludAkJaW50XzJfZmxv YXQgOiAxOwkJIAogIGd1aW50CQlpZGVudGlmaWVyXzJfc3RyaW5nIDogMTsKICBndWludAkJY2hh cl8yX3Rva2VuIDogMTsJCSAKICBndWludAkJc3ltYm9sXzJfdG9rZW4gOiAxOwogIGd1aW50CQlz Y29wZV8wX2ZhbGxiYWNrIDogMTsJCSAKfTsKCnN0cnVjdAlfR1NjYW5uZXIKewogICAKICBncG9p bnRlcgkJdXNlcl9kYXRhOwogIGd1aW50CQkJbWF4X3BhcnNlX2Vycm9yczsKICAKICAgCiAgZ3Vp bnQJCQlwYXJzZV9lcnJvcnM7CiAgCiAgIAogIGNvbnN0IGdjaGFyCQkqaW5wdXRfbmFtZTsKICAK ICAgCiAgZ3BvaW50ZXIJCWRlcml2ZWRfZGF0YTsKICAKICAgCiAgR1NjYW5uZXJDb25maWcJKmNv bmZpZzsKICAKICAgCiAgR1Rva2VuVHlwZQkJdG9rZW47CiAgR1Rva2VuVmFsdWUJCXZhbHVlOwog IGd1aW50CQkJbGluZTsKICBndWludAkJCXBvc2l0aW9uOwogIAogICAKICBHVG9rZW5UeXBlCQlu ZXh0X3Rva2VuOwogIEdUb2tlblZhbHVlCQluZXh0X3ZhbHVlOwogIGd1aW50CQkJbmV4dF9saW5l OwogIGd1aW50CQkJbmV4dF9wb3NpdGlvbjsKICAKICAgCiAgR0hhc2hUYWJsZQkJKnN5bWJvbF90 YWJsZTsKICBnaW50CQkJaW5wdXRfZmQ7CiAgY29uc3QgZ2NoYXIJCSp0ZXh0OwogIGNvbnN0IGdj aGFyCQkqdGV4dF9lbmQ7CiAgZ2NoYXIJCQkqYnVmZmVyOwogIGd1aW50CQkJc2NvcGVfaWQ7CiAg CiAgIAogIEdTY2FubmVyTXNnRnVuYwltc2dfaGFuZGxlcjsKfTsKCkdTY2FubmVyKglnX3NjYW5u ZXJfbmV3CQkJKEdTY2FubmVyQ29uZmlnICpjb25maWdfdGVtcGwpOwp2b2lkCQlnX3NjYW5uZXJf ZGVzdHJveQkJKEdTY2FubmVyCSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVyX2lucHV0X2ZpbGUJ CShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGdpbnQJCWlucHV0X2ZkKTsKdm9pZAkJZ19zY2Fu bmVyX3N5bmNfZmlsZV9vZmZzZXQJKEdTY2FubmVyCSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVy X2lucHV0X3RleHQJCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGNvbnN0CWdjaGFyCSp0ZXh0 LAoJCQkJCQkgZ3VpbnQJCXRleHRfbGVuKTsKR1Rva2VuVHlwZQlnX3NjYW5uZXJfZ2V0X25leHRf dG9rZW4JKEdTY2FubmVyCSpzY2FubmVyKTsKR1Rva2VuVHlwZQlnX3NjYW5uZXJfcGVla19uZXh0 X3Rva2VuCShHU2Nhbm5lcgkqc2Nhbm5lcik7CkdUb2tlblR5cGUJZ19zY2FubmVyX2N1cl90b2tl bgkJKEdTY2FubmVyCSpzY2FubmVyKTsKR1Rva2VuVmFsdWUJZ19zY2FubmVyX2N1cl92YWx1ZQkJ KEdTY2FubmVyCSpzY2FubmVyKTsKZ3VpbnQJCWdfc2Nhbm5lcl9jdXJfbGluZQkJKEdTY2FubmVy CSpzY2FubmVyKTsKZ3VpbnQJCWdfc2Nhbm5lcl9jdXJfcG9zaXRpb24JCShHU2Nhbm5lcgkqc2Nh bm5lcik7Cmdib29sZWFuCWdfc2Nhbm5lcl9lb2YJCQkoR1NjYW5uZXIJKnNjYW5uZXIpOwpndWlu dAkJZ19zY2FubmVyX3NldF9zY29wZQkJKEdTY2FubmVyCSpzY2FubmVyLAoJCQkJCQkgZ3VpbnQJ CSBzY29wZV9pZCk7CnZvaWQJCWdfc2Nhbm5lcl9zY29wZV9hZGRfc3ltYm9sCShHU2Nhbm5lcgkq c2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJCSBjb25zdCBnY2hhcgkqc3lt Ym9sLAoJCQkJCQkgZ3BvaW50ZXIJdmFsdWUpOwp2b2lkCQlnX3NjYW5uZXJfc2NvcGVfcmVtb3Zl X3N5bWJvbAkoR1NjYW5uZXIJKnNjYW5uZXIsCgkJCQkJCSBndWludAkJIHNjb3BlX2lkLAoJCQkJ CQkgY29uc3QgZ2NoYXIJKnN5bWJvbCk7Cmdwb2ludGVyCWdfc2Nhbm5lcl9zY29wZV9sb29rdXBf c3ltYm9sCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJ CSBjb25zdCBnY2hhcgkqc3ltYm9sKTsKdm9pZAkJZ19zY2FubmVyX3Njb3BlX2ZvcmVhY2hfc3lt Ym9sCShHU2Nhbm5lcgkqc2Nhbm5lciwKCQkJCQkJIGd1aW50CQkgc2NvcGVfaWQsCgkJCQkJCSBH SEZ1bmMJCSBmdW5jLAoJCQkJCQkgZ3BvaW50ZXIJIHVzZXJfZGF0YSk7Cmdwb2ludGVyCWdfc2Nh bm5lcl9sb29rdXBfc3ltYm9sCQkoR1NjYW5uZXIJKnNjYW5uZXIsCgkJCQkJCSBjb25zdCBnY2hh cgkqc3ltYm9sKTsKdm9pZAkJZ19zY2FubmVyX2ZyZWV6ZV9zeW1ib2xfdGFibGUJKEdTY2FubmVy CSpzY2FubmVyKTsKdm9pZAkJZ19zY2FubmVyX3RoYXdfc3ltYm9sX3RhYmxlCShHU2Nhbm5lcgkq c2Nhbm5lcik7CnZvaWQJCWdfc2Nhbm5lcl91bmV4cF90b2tlbgkJKEdTY2FubmVyCSpzY2FubmVy LAoJCQkJCQkgR1Rva2VuVHlwZQlleHBlY3RlZF90b2tlbiwKCQkJCQkJIGNvbnN0IGdjaGFyCSpp ZGVudGlmaWVyX3NwZWMsCgkJCQkJCSBjb25zdCBnY2hhcgkqc3ltYm9sX3NwZWMsCgkJCQkJCSBj b25zdCBnY2hhcgkqc3ltYm9sX25hbWUsCgkJCQkJCSBjb25zdCBnY2hhcgkqbWVzc2FnZSwKCQkJ CQkJIGdpbnQJCSBpc19lcnJvcik7CnZvaWQJCWdfc2Nhbm5lcl9lcnJvcgkJCShHU2Nhbm5lcgkq c2Nhbm5lciwKCQkJCQkJIGNvbnN0IGdjaGFyCSpmb3JtYXQsCgkJCQkJCSAuLi4pIF9fYXR0cmli dXRlX18oKGZvcm1hdCAocHJpbnRmLCAgMiAsICAzICkpKSA7CnZvaWQJCWdfc2Nhbm5lcl93YXJu CQkJKEdTY2FubmVyCSpzY2FubmVyLAoJCQkJCQkgY29uc3QgZ2NoYXIJKmZvcm1hdCwKCQkJCQkJ IC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsICAyICwgIDMgKSkpIDsKZ2ludAkJ Z19zY2FubmVyX3N0YXRfbW9kZQkJKGNvbnN0IGdjaGFyCSpmaWxlbmFtZSk7CiAKCgoKCgoKCgoK CgogCgoKc3RydWN0IF9HQ29tcGxldGlvbgp7CiAgR0xpc3QqIGl0ZW1zOwogIEdDb21wbGV0aW9u RnVuYyBmdW5jOwogIAogIGdjaGFyKiBwcmVmaXg7CiAgR0xpc3QqIGNhY2hlOwp9OwoKR0NvbXBs ZXRpb24qIGdfY29tcGxldGlvbl9uZXcJICAgICAgIChHQ29tcGxldGlvbkZ1bmMgZnVuYyk7CnZv aWQJICAgICBnX2NvbXBsZXRpb25fYWRkX2l0ZW1zICAgIChHQ29tcGxldGlvbioJY21wLAoJCQkJ CUdMaXN0KgkJaXRlbXMpOwp2b2lkCSAgICAgZ19jb21wbGV0aW9uX3JlbW92ZV9pdGVtcyAoR0Nv bXBsZXRpb24qCWNtcCwKCQkJCQlHTGlzdCoJCWl0ZW1zKTsKdm9pZAkgICAgIGdfY29tcGxldGlv bl9jbGVhcl9pdGVtcyAgKEdDb21wbGV0aW9uKgljbXApOwpHTGlzdCoJICAgICBnX2NvbXBsZXRp b25fY29tcGxldGUgICAgIChHQ29tcGxldGlvbioJY21wLAoJCQkJCWdjaGFyKgkJcHJlZml4LAoJ CQkJCWdjaGFyKioJCW5ld19wcmVmaXgpOwp2b2lkCSAgICAgZ19jb21wbGV0aW9uX2ZyZWUJICAg ICAgIChHQ29tcGxldGlvbioJY21wKTsKCgogCgoKCgoKCgoKdHlwZWRlZiBndWludDE2IEdEYXRl WWVhcjsKdHlwZWRlZiBndWludDggIEdEYXRlRGF5OyAgICAKdHlwZWRlZiBzdHJ1Y3QgX0dEYXRl IEdEYXRlOwogCnN0cnVjdCB0bTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHX0RBVEVfREFZICAgPSAw LAogIEdfREFURV9NT05USCA9IDEsCiAgR19EQVRFX1lFQVIgID0gMgp9IEdEYXRlRE1ZOwoKIAp0 eXBlZGVmIGVudW0KewogIEdfREFURV9CQURfV0VFS0RBWSAgPSAwLAogIEdfREFURV9NT05EQVkg ICAgICAgPSAxLAogIEdfREFURV9UVUVTREFZICAgICAgPSAyLAogIEdfREFURV9XRURORVNEQVkg ICAgPSAzLAogIEdfREFURV9USFVSU0RBWSAgICAgPSA0LAogIEdfREFURV9GUklEQVkgICAgICAg PSA1LAogIEdfREFURV9TQVRVUkRBWSAgICAgPSA2LAogIEdfREFURV9TVU5EQVkgICAgICAgPSA3 Cn0gR0RhdGVXZWVrZGF5Owp0eXBlZGVmIGVudW0KewogIEdfREFURV9CQURfTU9OVEggPSAwLAog IEdfREFURV9KQU5VQVJZICAgPSAxLAogIEdfREFURV9GRUJSVUFSWSAgPSAyLAogIEdfREFURV9N QVJDSCAgICAgPSAzLAogIEdfREFURV9BUFJJTCAgICAgPSA0LAogIEdfREFURV9NQVkgICAgICAg PSA1LAogIEdfREFURV9KVU5FICAgICAgPSA2LAogIEdfREFURV9KVUxZICAgICAgPSA3LAogIEdf REFURV9BVUdVU1QgICAgPSA4LAogIEdfREFURV9TRVBURU1CRVIgPSA5LAogIEdfREFURV9PQ1RP QkVSICAgPSAxMCwKICBHX0RBVEVfTk9WRU1CRVIgID0gMTEsCiAgR19EQVRFX0RFQ0VNQkVSICA9 IDEyCn0gR0RhdGVNb250aDsKCgoKCgogCgoKCgpzdHJ1Y3QgX0dEYXRlCnsgCiAgZ3VpbnQganVs aWFuX2RheXMgOiAzMjsgIAoKCgoKCiAgZ3VpbnQganVsaWFuIDogMTsgICAgIAogIGd1aW50IGRt eSAgICA6IDE7ICAgICAKCiAgIAogIGd1aW50IGRheSAgICA6IDY7ICAKICBndWludCBtb250aCAg OiA0OyAKICBndWludCB5ZWFyICAgOiAxNjsgCn07CgogCgoKCkdEYXRlKiAgICAgICBnX2RhdGVf bmV3ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKR0RhdGUqICAgICAgIGdfZGF0ZV9uZXdfZG15 ICAgICAgICAgICAgICAgKEdEYXRlRGF5ICAgICBkYXksIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250aCAgIG1vbnRoLCAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciAgICB5ZWFyKTsKR0RhdGUqICAg ICAgIGdfZGF0ZV9uZXdfanVsaWFuICAgICAgICAgICAgKGd1aW50MzIgICAgICBqdWxpYW5fZGF5 KTsKdm9pZCAgICAgICAgIGdfZGF0ZV9mcmVlICAgICAgICAgICAgICAgICAgKEdEYXRlICAgICAg ICpkYXRlKTsKCiAKCgoKCmdib29sZWFuICAgICBnX2RhdGVfdmFsaWQgICAgICAgICAgICAgICAg IChHRGF0ZSAgICAgICAqZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfdmFsaWRfZGF5ICAgICAg ICAgICAgIChHRGF0ZURheSAgICAgZGF5KTsKZ2Jvb2xlYW4gICAgIGdfZGF0ZV92YWxpZF9tb250 aCAgICAgICAgICAgKEdEYXRlTW9udGggICBtb250aCk7Cmdib29sZWFuICAgICBnX2RhdGVfdmFs aWRfeWVhciAgICAgICAgICAgIChHRGF0ZVllYXIgICAgeWVhcik7Cmdib29sZWFuICAgICBnX2Rh dGVfdmFsaWRfd2Vla2RheSAgICAgICAgIChHRGF0ZVdlZWtkYXkgd2Vla2RheSk7Cmdib29sZWFu ICAgICBnX2RhdGVfdmFsaWRfanVsaWFuICAgICAgICAgIChndWludDMyICAgICAganVsaWFuX2Rh dGUpOwpnYm9vbGVhbiAgICAgZ19kYXRlX3ZhbGlkX2RteSAgICAgICAgICAgICAoR0RhdGVEYXkg ICAgIGRheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRl TW9udGggICBtb250aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdEYXRlWWVhciAgICB5ZWFyKTsKCkdEYXRlV2Vla2RheSBnX2RhdGVfd2Vla2RheSAgICAgICAg ICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlTW9udGggICBnX2RhdGVfbW9udGggICAg ICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlWWVhciAgICBnX2RhdGVfeWVh ciAgICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CkdEYXRlRGF5ICAgICBnX2Rh dGVfZGF5ICAgICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmd1aW50MzIgICAg ICBnX2RhdGVfanVsaWFuICAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmd1aW50 ICAgICAgICBnX2RhdGVfZGF5X29mX3llYXIgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7 CgogCgoKCgoKZ3VpbnQgICAgICAgIGdfZGF0ZV9tb25kYXlfd2Vla19vZl95ZWFyICAgKEdEYXRl ICAgICAgKmRhdGUpOwpndWludCAgICAgICAgZ19kYXRlX3N1bmRheV93ZWVrX29mX3llYXIgICAo R0RhdGUgICAgICAqZGF0ZSk7CgogCgoKCnZvaWQgICAgICAgICBnX2RhdGVfY2xlYXIgICAgICAg ICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9kYXRlcyk7CgogCgoKCnZvaWQgICAgICAg ICBnX2RhdGVfc2V0X3BhcnNlICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIpOwp2 b2lkICAgICAgICAgZ19kYXRlX3NldF90aW1lICAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRh dGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RpbWUgICAg ICAgIHRpbWUpOwp2b2lkICAgICAgICAgZ19kYXRlX3NldF9tb250aCAgICAgICAgICAgICAoR0Rh dGUgICAgICAgKmRhdGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0RhdGVNb250aCAgIG1vbnRoKTsKdm9pZCAgICAgICAgIGdfZGF0ZV9zZXRfZGF5ICAgICAg ICAgICAgICAgKEdEYXRlICAgICAgICpkYXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdEYXRlRGF5ICAgICBkYXkpOwp2b2lkICAgICAgICAgZ19kYXRlX3Nl dF95ZWFyICAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZVllYXIgICAgeWVhcik7CnZvaWQgICAgICAg ICBnX2RhdGVfc2V0X2RteSAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlRGF5ICAgICBkYXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZU1vbnRoICAgbW9u dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZVllYXIg ICAgeSk7CnZvaWQgICAgICAgICBnX2RhdGVfc2V0X2p1bGlhbiAgICAgICAgICAgIChHRGF0ZSAg ICAgICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1 aW50MzIgICAgICBqdWxpYW5fZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfaXNfZmlyc3Rfb2Zf bW9udGggICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7Cmdib29sZWFuICAgICBnX2RhdGVfaXNfbGFz dF9vZl9tb250aCAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSk7CgogCnZvaWQgICAgICAgICBnX2Rh dGVfYWRkX2RheXMgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqZGF0ZSwgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9kYXlzKTsKdm9p ZCAgICAgICAgIGdfZGF0ZV9zdWJ0cmFjdF9kYXlzICAgICAgICAgKEdEYXRlICAgICAgICpkYXRl LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAg ICBuX2RheXMpOwoKIAp2b2lkICAgICAgICAgZ19kYXRlX2FkZF9tb250aHMgICAgICAgICAgICAo R0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBndWludCAgICAgICAgbl9tb250aHMpOwp2b2lkICAgICAgICAgZ19kYXRlX3N1YnRyYWN0 X21vbnRocyAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl9tb250aHMpOwoKIAp2b2lkICAgICAg ICAgZ19kYXRlX2FkZF95ZWFycyAgICAgICAgICAgICAoR0RhdGUgICAgICAgKmRhdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbl95ZWFy cyk7CnZvaWQgICAgICAgICBnX2RhdGVfc3VidHJhY3RfeWVhcnMgICAgICAgIChHRGF0ZSAgICAg ICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50 ICAgICAgICBuX3llYXJzKTsKZ2Jvb2xlYW4gICAgIGdfZGF0ZV9pc19sZWFwX3llYXIgICAgICAg ICAgKEdEYXRlWWVhciAgICB5ZWFyKTsKZ3VpbnQ4ICAgICAgIGdfZGF0ZV9kYXlzX2luX21vbnRo ICAgICAgICAgKEdEYXRlTW9udGggICBtb250aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHRGF0ZVllYXIgICAgeWVhcik7Cmd1aW50OCAgICAgICBnX2RhdGVf bW9uZGF5X3dlZWtzX2luX3llYXIgIChHRGF0ZVllYXIgICAgeWVhcik7Cmd1aW50OCAgICAgICBn X2RhdGVfc3VuZGF5X3dlZWtzX2luX3llYXIgIChHRGF0ZVllYXIgICAgeWVhcik7CgogCmdpbnQg ICAgICAgICBnX2RhdGVfY29tcGFyZSAgICAgICAgICAgICAgIChHRGF0ZSAgICAgICAqbGhzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgKnJo cyk7CnZvaWQgICAgICAgICBnX2RhdGVfdG9fc3RydWN0X3RtICAgICAgICAgIChHRGF0ZSAgICAg ICAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0bSAgICp0bSk7CgogCgoKZ3NpemUgICAgICAgIGdfZGF0ZV9zdHJmdGltZSAgICAgICAgICAg ICAgKGdjaGFyICAgICAgICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NpemUgICAgICAgIHNsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgKmRhdGUpOwoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCkdSZWxhdGlvbiogZ19yZWxhdGlvbl9uZXcgICAgIChnaW50CSAgICBmaWVsZHMpOwp2 b2lkCSAgIGdfcmVsYXRpb25fZGVzdHJveSAoR1JlbGF0aW9uICAgKnJlbGF0aW9uKTsKdm9pZAkg ICBnX3JlbGF0aW9uX2luZGV4ICAgKEdSZWxhdGlvbiAgICpyZWxhdGlvbiwKCQkJICAgICAgIGdp bnQJICAgIGZpZWxkLAoJCQkgICAgICAgR0hhc2hGdW5jICAgIGhhc2hfZnVuYywKCQkJICAgICAg IEdDb21wYXJlRnVuYyBrZXlfY29tcGFyZV9mdW5jKTsKdm9pZAkgICBnX3JlbGF0aW9uX2luc2Vy dCAgKEdSZWxhdGlvbiAgICpyZWxhdGlvbiwKCQkJICAgICAgIC4uLik7CmdpbnQJICAgZ19yZWxh dGlvbl9kZWxldGUgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2lu dGVyICBrZXksCgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7CkdUdXBsZXMqICAgZ19yZWxhdGlv bl9zZWxlY3QgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2ludGVy ICBrZXksCgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7CmdpbnQJICAgZ19yZWxhdGlvbl9jb3Vu dCAgIChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICBnY29uc3Rwb2ludGVyICBrZXks CgkJCSAgICAgICBnaW50CSAgICBmaWVsZCk7Cmdib29sZWFuICAgZ19yZWxhdGlvbl9leGlzdHMg IChHUmVsYXRpb24gICAqcmVsYXRpb24sCgkJCSAgICAgICAuLi4pOwp2b2lkCSAgIGdfcmVsYXRp b25fcHJpbnQgICAoR1JlbGF0aW9uICAgKnJlbGF0aW9uKTsKCnZvaWQJICAgZ190dXBsZXNfZGVz dHJveSAgIChHVHVwbGVzCSAgICp0dXBsZXMpOwpncG9pbnRlciAgIGdfdHVwbGVzX2luZGV4ICAg ICAoR1R1cGxlcwkgICAqdHVwbGVzLAoJCQkgICAgICAgZ2ludAkgICAgaW5kZXgsCgkJCSAgICAg ICBnaW50CSAgICBmaWVsZCk7CgoKIAoKCiAKCgoKCgpndWludAkgICBnX3NwYWNlZF9wcmltZXNf Y2xvc2VzdCAoZ3VpbnQgbnVtKTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX0dJT0Z1bmNzIEdJT0Z1 bmNzOwp0eXBlZGVmIGVudW0KewogIEdfSU9fRVJST1JfTk9ORSwKICBHX0lPX0VSUk9SX0FHQUlO LAogIEdfSU9fRVJST1JfSU5WQUwsCiAgR19JT19FUlJPUl9VTktOT1dOCn0gR0lPRXJyb3I7CnR5 cGVkZWYgZW51bQp7CiAgR19TRUVLX0NVUiwKICBHX1NFRUtfU0VULAogIEdfU0VFS19FTkQKfSBH U2Vla1R5cGU7CnR5cGVkZWYgZW51bQp7CiAgR19JT19JTgk9MSAsCiAgR19JT19PVVQJPTQgLAog IEdfSU9fUFJJCT0yICwKICBHX0lPX0VSUgk9OCAsCiAgR19JT19IVVAJPTE2ICwKICBHX0lPX05W QUwJPTMyIAp9IEdJT0NvbmRpdGlvbjsKCnN0cnVjdCBfR0lPQ2hhbm5lbAp7CiAgZ3VpbnQgY2hh bm5lbF9mbGFnczsKICBndWludCByZWZfY291bnQ7CiAgR0lPRnVuY3MgKmZ1bmNzOwp9OwoKdHlw ZWRlZiBnYm9vbGVhbiAoKkdJT0Z1bmMpIChHSU9DaGFubmVsICAgKnNvdXJjZSwKCQkJICAgICBH SU9Db25kaXRpb24gIGNvbmRpdGlvbiwKCQkJICAgICBncG9pbnRlciAgICAgIGRhdGEpOwpzdHJ1 Y3QgX0dJT0Z1bmNzCnsKICBHSU9FcnJvciAoKmlvX3JlYWQpICAgKEdJT0NoYW5uZWwgCSpjaGFu bmVsLCAKCQkgICAgICAgICBnY2hhciAgICAgIAkqYnVmLCAKCQkgICAgICAgICBndWludCAgICAg IAkgY291bnQsCgkJCSBndWludCAgICAgIAkqYnl0ZXNfcmVhZCk7CiAgR0lPRXJyb3IgKCppb193 cml0ZSkgIChHSU9DaGFubmVsIAkqY2hhbm5lbCwgCgkJIAkgZ2NoYXIgICAgICAJKmJ1ZiwgCgkJ CSBndWludCAgICAgIAkgY291bnQsCgkJCSBndWludCAgICAgIAkqYnl0ZXNfd3JpdHRlbik7CiAg R0lPRXJyb3IgKCppb19zZWVrKSAgIChHSU9DaGFubmVsICAgCSpjaGFubmVsLCAKCQkgCSBnaW50 ICAgICAgIAkgb2Zmc2V0LCAKCQkgIAkgR1NlZWtUeXBlICAJIHR5cGUpOwogIHZvaWQgKCppb19j bG9zZSkgICAgICAoR0lPQ2hhbm5lbAkqY2hhbm5lbCk7CiAgZ3VpbnQgKCppb19hZGRfd2F0Y2gp IChHSU9DaGFubmVsICAgICAqY2hhbm5lbCwKCQkJIGdpbnQgICAgICAgICAgICBwcmlvcml0eSwK CQkJIEdJT0NvbmRpdGlvbiAgICBjb25kaXRpb24sCgkJCSBHSU9GdW5jICAgICAgICAgZnVuYywK CQkJIGdwb2ludGVyICAgICAgICB1c2VyX2RhdGEsCgkJCSBHRGVzdHJveU5vdGlmeSAgbm90aWZ5 KTsKICB2b2lkICgqaW9fZnJlZSkgICAgICAgKEdJT0NoYW5uZWwJKmNoYW5uZWwpOwp9OwoKdm9p ZCAgICAgICAgZ19pb19jaGFubmVsX2luaXQgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCk7CnZv aWQgICAgICAgIGdfaW9fY2hhbm5lbF9yZWYgICAgKEdJT0NoYW5uZWwgICAgKmNoYW5uZWwpOwp2 b2lkICAgICAgICBnX2lvX2NoYW5uZWxfdW5yZWYgIChHSU9DaGFubmVsICAgICpjaGFubmVsKTsK R0lPRXJyb3IgICAgZ19pb19jaGFubmVsX3JlYWQgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwg CgkJCSAgICAgICAgIGdjaGFyICAgICAgICAgKmJ1ZiwgCgkJCSAgICAgICAgIGd1aW50ICAgICAg ICAgIGNvdW50LAoJCQkgICAgICAgICBndWludCAgICAgICAgICpieXRlc19yZWFkKTsKR0lPRXJy b3IgIGdfaW9fY2hhbm5lbF93cml0ZSAgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwgCgkJCSAg ICAgICAgIGdjaGFyICAgICAgICAgKmJ1ZiwgCgkJCSAgICAgICAgIGd1aW50ICAgICAgICAgIGNv dW50LAoJCQkgICAgICAgICBndWludCAgICAgICAgICpieXRlc193cml0dGVuKTsKR0lPRXJyb3Ig IGdfaW9fY2hhbm5lbF9zZWVrICAgICAoR0lPQ2hhbm5lbCAgICAqY2hhbm5lbCwKCQkJICAgICAg ICAgZ2ludCAgICAgICAgICAgb2Zmc2V0LCAKCQkJICAgICAgICAgR1NlZWtUeXBlICAgICAgdHlw ZSk7CnZvaWQgICAgICBnX2lvX2NoYW5uZWxfY2xvc2UgICAgKEdJT0NoYW5uZWwgICAgKmNoYW5u ZWwpOwpndWludCAgICAgZ19pb19hZGRfd2F0Y2hfZnVsbCAgIChHSU9DaGFubmVsICAgICpjaGFu bmVsLAoJCQkgICAgICAgICBnaW50ICAgICAgICAgICBwcmlvcml0eSwKCQkJICAgICAgICAgR0lP Q29uZGl0aW9uICAgY29uZGl0aW9uLAoJCQkgICAgICAgICBHSU9GdW5jICAgICAgICBmdW5jLAoJ CQkgICAgICAgICBncG9pbnRlciAgICAgICB1c2VyX2RhdGEsCgkJCSAgICAgICAgIEdEZXN0cm95 Tm90aWZ5IG5vdGlmeSk7Cmd1aW50ICAgIGdfaW9fYWRkX3dhdGNoICAgICAgICAgKEdJT0NoYW5u ZWwgICAgKmNoYW5uZWwsCgkJCSAgICAgICAgIEdJT0NvbmRpdGlvbiAgIGNvbmRpdGlvbiwKCQkJ ICAgICAgICAgR0lPRnVuYyAgICAgICAgZnVuYywKCQkJICAgICAgICAgZ3BvaW50ZXIgICAgICAg dXNlcl9kYXRhKTsKCgogCgp0eXBlZGVmIHN0cnVjdCBfR1RpbWVWYWwJR1RpbWVWYWw7CnR5cGVk ZWYgc3RydWN0IF9HU291cmNlRnVuY3MJR1NvdXJjZUZ1bmNzOwp0eXBlZGVmIHN0cnVjdCBfR01h aW5Mb29wCUdNYWluTG9vcDsJIAoKc3RydWN0IF9HVGltZVZhbAp7CiAgZ2xvbmcgdHZfc2VjOwog IGdsb25nIHR2X3VzZWM7Cn07CnN0cnVjdCBfR1NvdXJjZUZ1bmNzCnsKICBnYm9vbGVhbiAoKnBy ZXBhcmUpICAoZ3BvaW50ZXIgIHNvdXJjZV9kYXRhLCAKCQkJR1RpbWVWYWwgKmN1cnJlbnRfdGlt ZSwKCQkJZ2ludCAgICAgKnRpbWVvdXQsCgkJCWdwb2ludGVyICB1c2VyX2RhdGEpOwogIGdib29s ZWFuICgqY2hlY2spICAgIChncG9pbnRlciAgc291cmNlX2RhdGEsCgkJCUdUaW1lVmFsICpjdXJy ZW50X3RpbWUsCgkJCWdwb2ludGVyICB1c2VyX2RhdGEpOwogIGdib29sZWFuICgqZGlzcGF0Y2gp IChncG9pbnRlciAgc291cmNlX2RhdGEsIAoJCQlHVGltZVZhbCAqZGlzcGF0Y2hfdGltZSwKCQkJ Z3BvaW50ZXIgIHVzZXJfZGF0YSk7CiAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveTsKfTsKCiAKCgoK CgoKCnR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEpOwoKIApn dWludCAgICBnX3NvdXJjZV9hZGQgICAgICAgICAgICAgICAgICAgICAgICAoZ2ludCAgICAgICAg ICAgcHJpb3JpdHksIAoJCQkJCSAgICAgIGdib29sZWFuICAgICAgIGNhbl9yZWN1cnNlLAoJCQkJ CSAgICAgIEdTb3VyY2VGdW5jcyAgKmZ1bmNzLAoJCQkJCSAgICAgIGdwb2ludGVyICAgICAgIHNv dXJjZV9kYXRhLCAKCQkJCQkgICAgICBncG9pbnRlciAgICAgICB1c2VyX2RhdGEsCgkJCQkJICAg ICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlICAgICAg ICAgICAgICAgICAgICAgKGd1aW50ICAgICAgICAgIHRhZyk7Cmdib29sZWFuIGdfc291cmNlX3Jl bW92ZV9ieV91c2VyX2RhdGEgICAgICAgIChncG9pbnRlciAgICAgICB1c2VyX2RhdGEpOwpnYm9v bGVhbiBnX3NvdXJjZV9yZW1vdmVfYnlfc291cmNlX2RhdGEgICAgICAoZ3BvaW50ZXIgICAgICAg c291cmNlX2RhdGEpOwpnYm9vbGVhbiBnX3NvdXJjZV9yZW1vdmVfYnlfZnVuY3NfdXNlcl9kYXRh ICAoR1NvdXJjZUZ1bmNzICAqZnVuY3MsCgkJCQkJICAgICAgZ3BvaW50ZXIgICAgICAgdXNlcl9k YXRhKTsKCnZvaWQgZ19nZXRfY3VycmVudF90aW1lCQkgICAgICAgIChHVGltZVZhbAkqcmVzdWx0 KTsKCiAKR01haW5Mb29wKglnX21haW5fbmV3CQkoZ2Jvb2xlYW4JIGlzX3J1bm5pbmcpOwp2b2lk CQlnX21haW5fcnVuCQkoR01haW5Mb29wCSpsb29wKTsKdm9pZAkJZ19tYWluX3F1aXQJCShHTWFp bkxvb3AJKmxvb3ApOwp2b2lkCQlnX21haW5fZGVzdHJveQkJKEdNYWluTG9vcAkqbG9vcCk7Cmdi b29sZWFuCWdfbWFpbl9pc19ydW5uaW5nCShHTWFpbkxvb3AJKmxvb3ApOwoKIAoKCmdib29sZWFu CWdfbWFpbl9pdGVyYXRpb24JKGdib29sZWFuCW1heV9ibG9jayk7CgogCmdib29sZWFuCWdfbWFp bl9wZW5kaW5nCQkodm9pZCk7CgogCmd1aW50CQlnX3RpbWVvdXRfYWRkX2Z1bGwJKGdpbnQgICAg ICAgICAgIHByaW9yaXR5LAoJCQkJCSBndWludCAgICAgICAgICBpbnRlcnZhbCwgCgkJCQkJIEdT b3VyY2VGdW5jICAgIGZ1bmN0aW9uLAoJCQkJCSBncG9pbnRlciAgICAgICBkYXRhLAoJCQkJCSBH RGVzdHJveU5vdGlmeSBub3RpZnkpOwpndWludAkJZ190aW1lb3V0X2FkZAkJKGd1aW50ICAgICAg ICAgIGludGVydmFsLAoJCQkJCSBHU291cmNlRnVuYyAgICBmdW5jdGlvbiwKCQkJCQkgZ3BvaW50 ZXIgICAgICAgZGF0YSk7Cmd1aW50CQlnX2lkbGVfYWRkCSAgIAkoR1NvdXJjZUZ1bmMJZnVuY3Rp b24sCgkJCQkJIGdwb2ludGVyCWRhdGEpOwpndWludAkgICAJZ19pZGxlX2FkZF9mdWxsCQkoZ2lu dCAgIAlwcmlvcml0eSwKCQkJCQkgR1NvdXJjZUZ1bmMJZnVuY3Rpb24sCgkJCQkJIGdwb2ludGVy CWRhdGEsCgkJCQkJIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3kpOwpnYm9vbGVhbglnX2lkbGVfcmVt b3ZlX2J5X2RhdGEJKGdwb2ludGVyCWRhdGEpOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5 cGVkZWYgc3RydWN0IF9HUG9sbEZEIEdQb2xsRkQ7CnR5cGVkZWYgZ2ludAkoKkdQb2xsRnVuYykJ KEdQb2xsRkQgKnVmZHMsCgkJCQkgZ3VpbnQJICBuZnNkLAoJCQkJIGdpbnQgICAgIHRpbWVvdXQp OwpzdHJ1Y3QgX0dQb2xsRkQKewogIGdpbnQJCWZkOwogIGd1c2hvcnQgCWV2ZW50czsKICBndXNo b3J0IAlyZXZlbnRzOwp9OwoKdm9pZCAgICAgICAgZ19tYWluX2FkZF9wb2xsICAgICAgICAgIChH UG9sbEZEICAgICpmZCwKCQkJCSAgICAgIGdpbnQgICAgICAgIHByaW9yaXR5KTsKdm9pZCAgICAg ICAgZ19tYWluX3JlbW92ZV9wb2xsICAgICAgIChHUG9sbEZEICAgICpmZCk7CnZvaWQgICAgICAg IGdfbWFpbl9zZXRfcG9sbF9mdW5jICAgICAoR1BvbGxGdW5jICAgZnVuYyk7CgogCgoKCgoKCgoK CgpHSU9DaGFubmVsKiBnX2lvX2NoYW5uZWxfdW5peF9uZXcgICAgKGludCAgICAgICAgIGZkKTsK Z2ludCAgICAgICAgZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkIChHSU9DaGFubmVsICpjaGFubmVs KTsKCiMgMjYxMyAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKIAoKIyAyNjcy ICIvb3B0L2d0ay9pbmNsdWRlL2dsaWItMS4yL2dsaWIuaCIKCgoKIAoKdHlwZWRlZiBzdHJ1Y3Qg X0dNdXRleAkJR011dGV4Owp0eXBlZGVmIHN0cnVjdCBfR0NvbmQJCUdDb25kOwp0eXBlZGVmIHN0 cnVjdCBfR1ByaXZhdGUJR1ByaXZhdGU7CnR5cGVkZWYgc3RydWN0IF9HU3RhdGljUHJpdmF0ZQlH U3RhdGljUHJpdmF0ZTsKdHlwZWRlZiBzdHJ1Y3QgX0dUaHJlYWRGdW5jdGlvbnMgR1RocmVhZEZ1 bmN0aW9uczsKc3RydWN0IF9HVGhyZWFkRnVuY3Rpb25zCnsKICBHTXV0ZXgqICAoKm11dGV4X25l dykgICAgICAgKHZvaWQpOwogIHZvaWQgICAgICgqbXV0ZXhfbG9jaykgICAgICAoR011dGV4CQkq bXV0ZXgpOwogIGdib29sZWFuICgqbXV0ZXhfdHJ5bG9jaykgICAoR011dGV4CQkqbXV0ZXgpOwog IHZvaWQgICAgICgqbXV0ZXhfdW5sb2NrKSAgICAoR011dGV4CQkqbXV0ZXgpOwogIHZvaWQgICAg ICgqbXV0ZXhfZnJlZSkgICAgICAoR011dGV4CQkqbXV0ZXgpOwogIEdDb25kKiAgICgqY29uZF9u ZXcpICAgICAgICAodm9pZCk7CiAgdm9pZCAgICAgKCpjb25kX3NpZ25hbCkgICAgIChHQ29uZAkJ KmNvbmQpOwogIHZvaWQgICAgICgqY29uZF9icm9hZGNhc3QpICAoR0NvbmQJCSpjb25kKTsKICB2 b2lkICAgICAoKmNvbmRfd2FpdCkgICAgICAgKEdDb25kCQkqY29uZCwKCQkJICAgICAgIEdNdXRl eAkJKm11dGV4KTsKICBnYm9vbGVhbiAoKmNvbmRfdGltZWRfd2FpdCkgKEdDb25kCQkqY29uZCwK CQkJICAgICAgIEdNdXRleAkJKm11dGV4LCAKCQkJICAgICAgIEdUaW1lVmFsIAkqZW5kX3RpbWUp OwogIHZvaWQgICAgICAoKmNvbmRfZnJlZSkgICAgICAoR0NvbmQJCSpjb25kKTsKICBHUHJpdmF0 ZSogKCpwcml2YXRlX25ldykgICAgKEdEZXN0cm95Tm90aWZ5CSBkZXN0cnVjdG9yKTsKICBncG9p bnRlciAgKCpwcml2YXRlX2dldCkgICAgKEdQcml2YXRlCQkqcHJpdmF0ZV9rZXkpOwogIHZvaWQg ICAgICAoKnByaXZhdGVfc2V0KSAgICAoR1ByaXZhdGUJCSpwcml2YXRlX2tleSwKCQkJICAgICAg IGdwb2ludGVyCQkgZGF0YSk7Cn07CgpleHRlcm4gIEdUaHJlYWRGdW5jdGlvbnMJZ190aHJlYWRf ZnVuY3Rpb25zX2Zvcl9nbGliX3VzZTsKZXh0ZXJuICBnYm9vbGVhbgkJZ190aHJlYWRfdXNlX2Rl ZmF1bHRfaW1wbDsKZXh0ZXJuICBnYm9vbGVhbgkJZ190aHJlYWRzX2dvdF9pbml0aWFsaXplZDsK CiAKCgoKdm9pZCAgIGdfdGhyZWFkX2luaXQgICAoR1RocmVhZEZ1bmN0aW9ucyAgICAgICAqdnRh YmxlKTsKCiAKR011dGV4KglnX3N0YXRpY19tdXRleF9nZXRfbXV0ZXhfaW1wbAkoR011dGV4CSoq bXV0ZXgpOwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCnN0 cnVjdCBfR1N0YXRpY1ByaXZhdGUKewogIGd1aW50IGluZGV4Owp9OwoKZ3BvaW50ZXIgZ19zdGF0 aWNfcHJpdmF0ZV9nZXQgKEdTdGF0aWNQcml2YXRlCSpwcml2YXRlX2tleSk7CnZvaWQgICAgIGdf c3RhdGljX3ByaXZhdGVfc2V0IChHU3RhdGljUHJpdmF0ZQkqcHJpdmF0ZV9rZXksIAoJCQkgICAg ICAgZ3BvaW50ZXIgICAgICAgIAkgZGF0YSwKCQkJICAgICAgIEdEZXN0cm95Tm90aWZ5ICAgIG5v dGlmeSk7CgogCgoKCgoKCgoKZXh0ZXJuIHZvaWQgZ2xpYl9kdW1teV9kZWNsICh2b2lkKTsKCgoK CgoKCiMgMjgwOCAiL29wdC9ndGsvaW5jbHVkZS9nbGliLTEuMi9nbGliLmgiCgoKCgoKCgoKCgoK CgoKCn0KCgoKCiMgMzMgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9nZGsvZ2RrdHlwZXMuaCIg MgoKCgoKCgoKIAoKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgp0eXBlZGVmIGd1bG9uZwkJCSAgICAg IEdka0F0b207CnR5cGVkZWYgc3RydWN0IF9HZGtDb2xvcgkgICAgICBHZGtDb2xvcjsKdHlwZWRl ZiBzdHJ1Y3QgX0dka0NvbG9ybWFwCSAgICAgIEdka0NvbG9ybWFwOwp0eXBlZGVmIHN0cnVjdCBf R2RrVmlzdWFsCSAgICAgIEdka1Zpc3VhbDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dpbmRvd0F0dHIJ ICAgICAgR2RrV2luZG93QXR0cjsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dpbmRvdwkgICAgICBHZGtX aW5kb3c7CnR5cGVkZWYgc3RydWN0IF9HZGtXaW5kb3cJICAgICAgR2RrUGl4bWFwOwp0eXBlZGVm IHN0cnVjdCBfR2RrV2luZG93CSAgICAgIEdka0JpdG1hcDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1dp bmRvdwkgICAgICBHZGtEcmF3YWJsZTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0dlb21ldHJ5ICAgICAg ICAgICBHZGtHZW9tZXRyeTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0ltYWdlCSAgICAgIEdka0ltYWdl Owp0eXBlZGVmIHN0cnVjdCBfR2RrR0NWYWx1ZXMJICAgICAgR2RrR0NWYWx1ZXM7CnR5cGVkZWYg c3RydWN0IF9HZGtHQwkJICAgICAgR2RrR0M7CnR5cGVkZWYgc3RydWN0IF9HZGtQb2ludAkgICAg ICBHZGtQb2ludDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZQkgICAgICBHZGtSZWN0YW5n bGU7CnR5cGVkZWYgc3RydWN0IF9HZGtTZWdtZW50CSAgICAgIEdka1NlZ21lbnQ7CnR5cGVkZWYg c3RydWN0IF9HZGtGb250CQkgICAgICBHZGtGb250Owp0eXBlZGVmIHN0cnVjdCBfR2RrQ3Vyc29y CSAgICAgIEdka0N1cnNvcjsKdHlwZWRlZiBzdHJ1Y3QgX0dka0NvbG9yQ29udGV4dERpdGhlciBH ZGtDb2xvckNvbnRleHREaXRoZXI7CnR5cGVkZWYgc3RydWN0IF9HZGtDb2xvckNvbnRleHQJICAg ICAgR2RrQ29sb3JDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfR2RrRHJhZ0NvbnRleHQgICAgICAg IEdka0RyYWdDb250ZXh0OwoKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50QW55CSAgICBHZGtFdmVu dEFueTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlCSAgICBHZGtFdmVudEV4cG9zZTsK dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Tm9FeHBvc2UgICAgR2RrRXZlbnROb0V4cG9zZTsKdHlw ZWRlZiBzdHJ1Y3QgX0dka0V2ZW50VmlzaWJpbGl0eSAgR2RrRXZlbnRWaXNpYmlsaXR5Owp0eXBl ZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24JICAgIEdka0V2ZW50TW90aW9uOwp0eXBlZGVmIHN0 cnVjdCBfR2RrRXZlbnRCdXR0b24JICAgIEdka0V2ZW50QnV0dG9uOwp0eXBlZGVmIHN0cnVjdCBf R2RrRXZlbnRLZXkJICAgIEdka0V2ZW50S2V5Owp0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRGb2N1 cwkgICAgR2RrRXZlbnRGb2N1czsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q3Jvc3NpbmcgICAg R2RrRXZlbnRDcm9zc2luZzsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q29uZmlndXJlICAgR2Rr RXZlbnRDb25maWd1cmU7CnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudFByb3BlcnR5ICAgIEdka0V2 ZW50UHJvcGVydHk7CnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudFNlbGVjdGlvbiAgIEdka0V2ZW50 U2VsZWN0aW9uOwp0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRQcm94aW1pdHkgICBHZGtFdmVudFBy b3hpbWl0eTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50Q2xpZW50CSAgICBHZGtFdmVudENsaWVu dDsKCnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudERORCAgICAgICAgIEdka0V2ZW50RE5EOwoKdHlw ZWRlZiB1bmlvbiAgX0dka0V2ZW50CSAgICBHZGtFdmVudDsKCnR5cGVkZWYgc3RydWN0IF9HZGtE ZXZpY2VLZXkJICAgIEdka0RldmljZUtleTsKdHlwZWRlZiBzdHJ1Y3QgX0dka0RldmljZUluZm8J ICAgIEdka0RldmljZUluZm87CnR5cGVkZWYgc3RydWN0IF9HZGtUaW1lQ29vcmQJICAgIEdka1Rp bWVDb29yZDsKdHlwZWRlZiBzdHJ1Y3QgX0dka1JlZ2lvbgkgICAgR2RrUmVnaW9uOwp0eXBlZGVm IHZvaWQgKCpHZGtFdmVudEZ1bmMpIChHZGtFdmVudCAqZXZlbnQsCgkJCSAgICAgIGdwb2ludGVy CWRhdGEpOwoKdHlwZWRlZiBzdHJ1Y3QgX0dka0lDICAgICAgICAgICAgICAgR2RrSUM7CnR5cGVk ZWYgc3RydWN0IF9HZGtJQ0F0dHIJICAgIEdka0lDQXR0cjsKCnR5cGVkZWYgZ3VpbnQzMgkJCSAg ICBHZGtXQ2hhcjsKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtf V0lORE9XX1JPT1QsCiAgR0RLX1dJTkRPV19UT1BMRVZFTCwKICBHREtfV0lORE9XX0NISUxELAog IEdES19XSU5ET1dfRElBTE9HLAogIEdES19XSU5ET1dfVEVNUCwKICBHREtfV0lORE9XX1BJWE1B UCwKICBHREtfV0lORE9XX0ZPUkVJR04KfSBHZGtXaW5kb3dUeXBlOwoKIAoKCgoKCgoKCnR5cGVk ZWYgZW51bQp7CiAgR0RLX0lOUFVUX09VVFBVVCwKICBHREtfSU5QVVRfT05MWQp9IEdka1dpbmRv d0NsYXNzOwoKIAoKCgoKCgoKCgp0eXBlZGVmIGVudW0KewogIEdES19JTUFHRV9OT1JNQUwsCiAg R0RLX0lNQUdFX1NIQVJFRCwKICBHREtfSU1BR0VfRkFTVEVTVAp9IEdka0ltYWdlVHlwZTsKCiAK CgoKCgoKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1ZJU1VBTF9TVEFUSUNfR1JBWSwKICBHREtfVklT VUFMX0dSQVlTQ0FMRSwKICBHREtfVklTVUFMX1NUQVRJQ19DT0xPUiwKICBHREtfVklTVUFMX1BT RVVET19DT0xPUiwKICBHREtfVklTVUFMX1RSVUVfQ09MT1IsCiAgR0RLX1ZJU1VBTF9ESVJFQ1Rf Q09MT1IKfSBHZGtWaXN1YWxUeXBlOwoKIAoKCgp0eXBlZGVmIGVudW0KewogIEdES19GT05UX0ZP TlQsCiAgR0RLX0ZPTlRfRk9OVFNFVAp9IEdka0ZvbnRUeXBlOwoKIAoKCgoKCgoKdHlwZWRlZiBl bnVtCnsKICBHREtfV0FfVElUTEUJICA9IDEgPDwgMSwKICBHREtfV0FfWAkgID0gMSA8PCAyLAog IEdES19XQV9ZCSAgPSAxIDw8IDMsCiAgR0RLX1dBX0NVUlNPUgkgID0gMSA8PCA0LAogIEdES19X QV9DT0xPUk1BUCA9IDEgPDwgNSwKICBHREtfV0FfVklTVUFMCSAgPSAxIDw8IDYsCiAgR0RLX1dB X1dNQ0xBU1MgID0gMSA8PCA3LAogIEdES19XQV9OT1JFRElSICA9IDEgPDwgOAp9IEdka1dpbmRv d0F0dHJpYnV0ZXNUeXBlOwoKIAoKdHlwZWRlZiBlbnVtCnsKICBHREtfSElOVF9QT1MJICAgICAg PSAxIDw8IDAsCiAgR0RLX0hJTlRfTUlOX1NJWkUgICA9IDEgPDwgMSwKICBHREtfSElOVF9NQVhf U0laRSAgID0gMSA8PCAyLAogIEdES19ISU5UX0JBU0VfU0laRSAgPSAxIDw8IDMsCiAgR0RLX0hJ TlRfQVNQRUNUICAgICA9IDEgPDwgNCwKICBHREtfSElOVF9SRVNJWkVfSU5DID0gMSA8PCA1Cn0g R2RrV2luZG93SGludHM7CgogCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtf Q09QWSwKICBHREtfSU5WRVJULAogIEdES19YT1IsCiAgR0RLX0NMRUFSLAogIEdES19BTkQsCiAg R0RLX0FORF9SRVZFUlNFLAogIEdES19BTkRfSU5WRVJULAogIEdES19OT09QLAogIEdES19PUiwK ICBHREtfRVFVSVYsCiAgR0RLX09SX1JFVkVSU0UsCiAgR0RLX0NPUFlfSU5WRVJULAogIEdES19P Ul9JTlZFUlQsCiAgR0RLX05BTkQsCiAgR0RLX1NFVAp9IEdka0Z1bmN0aW9uOwoKIAoKCgoKCnR5 cGVkZWYgZW51bQp7CiAgR0RLX1NPTElELAogIEdES19USUxFRCwKICBHREtfU1RJUFBMRUQsCiAg R0RLX09QQVFVRV9TVElQUExFRAp9IEdka0ZpbGw7CgogCgoKCnR5cGVkZWYgZW51bQp7CiAgR0RL X0VWRU5fT0REX1JVTEUsCiAgR0RLX1dJTkRJTkdfUlVMRQp9IEdka0ZpbGxSdWxlOwoKIAoKCgoK dHlwZWRlZiBlbnVtCnsKICBHREtfTElORV9TT0xJRCwKICBHREtfTElORV9PTl9PRkZfREFTSCwK ICBHREtfTElORV9ET1VCTEVfREFTSAp9IEdka0xpbmVTdHlsZTsKCiAKCgoKCgp0eXBlZGVmIGVu dW0KewogIEdES19DQVBfTk9UX0xBU1QsCiAgR0RLX0NBUF9CVVRULAogIEdES19DQVBfUk9VTkQs CiAgR0RLX0NBUF9QUk9KRUNUSU5HCn0gR2RrQ2FwU3R5bGU7CgogCgoKCgp0eXBlZGVmIGVudW0K ewogIEdES19KT0lOX01JVEVSLAogIEdES19KT0lOX1JPVU5ELAogIEdES19KT0lOX0JFVkVMCn0g R2RrSm9pblN0eWxlOwoKIAoKdHlwZWRlZiBlbnVtCnsKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0xLjIvZ2RrL2dka2N1cnNvcnMuaCIgMQpHREtfTlVNX0dMWVBIUyA9IDE1NCwKR0RLX1hfQ1VS U09SID0gMCwKR0RLX0FSUk9XID0gMiwKR0RLX0JBU0VEX0FSUk9XX0RPV04gPSA0LApHREtfQkFT RURfQVJST1dfVVAgPSA2LApHREtfQk9BVCA9IDgsCkdES19CT0dPU0lUWSA9IDEwLApHREtfQk9U VE9NX0xFRlRfQ09STkVSID0gMTIsCkdES19CT1RUT01fUklHSFRfQ09STkVSID0gMTQsCkdES19C T1RUT01fU0lERSA9IDE2LApHREtfQk9UVE9NX1RFRSA9IDE4LApHREtfQk9YX1NQSVJBTCA9IDIw LApHREtfQ0VOVEVSX1BUUiA9IDIyLApHREtfQ0lSQ0xFID0gMjQsCkdES19DTE9DSyA9IDI2LApH REtfQ09GRkVFX01VRyA9IDI4LApHREtfQ1JPU1MgPSAzMCwKR0RLX0NST1NTX1JFVkVSU0UgPSAz MiwKR0RLX0NST1NTSEFJUiA9IDM0LApHREtfRElBTU9ORF9DUk9TUyA9IDM2LApHREtfRE9UID0g MzgsCkdES19ET1RCT1ggPSA0MCwKR0RLX0RPVUJMRV9BUlJPVyA9IDQyLApHREtfRFJBRlRfTEFS R0UgPSA0NCwKR0RLX0RSQUZUX1NNQUxMID0gNDYsCkdES19EUkFQRURfQk9YID0gNDgsCkdES19F WENIQU5HRSA9IDUwLApHREtfRkxFVVIgPSA1MiwKR0RLX0dPQkJMRVIgPSA1NCwKR0RLX0dVTUJZ ID0gNTYsCkdES19IQU5EMSA9IDU4LApHREtfSEFORDIgPSA2MCwKR0RLX0hFQVJUID0gNjIsCkdE S19JQ09OID0gNjQsCkdES19JUk9OX0NST1NTID0gNjYsCkdES19MRUZUX1BUUiA9IDY4LApHREtf TEVGVF9TSURFID0gNzAsCkdES19MRUZUX1RFRSA9IDcyLApHREtfTEVGVEJVVFRPTiA9IDc0LApH REtfTExfQU5HTEUgPSA3NiwKR0RLX0xSX0FOR0xFID0gNzgsCkdES19NQU4gPSA4MCwKR0RLX01J RERMRUJVVFRPTiA9IDgyLApHREtfTU9VU0UgPSA4NCwKR0RLX1BFTkNJTCA9IDg2LApHREtfUElS QVRFID0gODgsCkdES19QTFVTID0gOTAsCkdES19RVUVTVElPTl9BUlJPVyA9IDkyLApHREtfUklH SFRfUFRSID0gOTQsCkdES19SSUdIVF9TSURFID0gOTYsCkdES19SSUdIVF9URUUgPSA5OCwKR0RL X1JJR0hUQlVUVE9OID0gMTAwLApHREtfUlRMX0xPR08gPSAxMDIsCkdES19TQUlMQk9BVCA9IDEw NCwKR0RLX1NCX0RPV05fQVJST1cgPSAxMDYsCkdES19TQl9IX0RPVUJMRV9BUlJPVyA9IDEwOCwK R0RLX1NCX0xFRlRfQVJST1cgPSAxMTAsCkdES19TQl9SSUdIVF9BUlJPVyA9IDExMiwKR0RLX1NC X1VQX0FSUk9XID0gMTE0LApHREtfU0JfVl9ET1VCTEVfQVJST1cgPSAxMTYsCkdES19TSFVUVExF ID0gMTE4LApHREtfU0laSU5HID0gMTIwLApHREtfU1BJREVSID0gMTIyLApHREtfU1BSQVlDQU4g PSAxMjQsCkdES19TVEFSID0gMTI2LApHREtfVEFSR0VUID0gMTI4LApHREtfVENST1NTID0gMTMw LApHREtfVE9QX0xFRlRfQVJST1cgPSAxMzIsCkdES19UT1BfTEVGVF9DT1JORVIgPSAxMzQsCkdE S19UT1BfUklHSFRfQ09STkVSID0gMTM2LApHREtfVE9QX1NJREUgPSAxMzgsCkdES19UT1BfVEVF ID0gMTQwLApHREtfVFJFSyA9IDE0MiwKR0RLX1VMX0FOR0xFID0gMTQ0LApHREtfVU1CUkVMTEEg PSAxNDYsCkdES19VUl9BTkdMRSA9IDE0OCwKR0RLX1dBVENIID0gMTUwLApHREtfWFRFUk0gPSAx NTIsCiMgMzMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dka3R5cGVzLmgiIDIKCiAg R0RLX0xBU1RfQ1VSU09SLAogIEdES19DVVJTT1JfSVNfUElYTUFQID0gLTEKfSBHZGtDdXJzb3JU eXBlOwoKdHlwZWRlZiBlbnVtIHsKICBHREtfRklMVEVSX0NPTlRJTlVFLAkgICAKICBHREtfRklM VEVSX1RSQU5TTEFURSwJICAgCiAgR0RLX0ZJTFRFUl9SRU1PVkUJICAgCn0gR2RrRmlsdGVyUmV0 dXJuOwoKdHlwZWRlZiBlbnVtIHsKICBHREtfVklTSUJJTElUWV9VTk9CU0NVUkVELAogIEdES19W SVNJQklMSVRZX1BBUlRJQUwsCiAgR0RLX1ZJU0lCSUxJVFlfRlVMTFlfT0JTQ1VSRUQKfSBHZGtW aXNpYmlsaXR5U3RhdGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgZW51bQp7CiAg R0RLX05PVEhJTkcJCT0gLTEsCiAgR0RLX0RFTEVURQkJPSAwLAogIEdES19ERVNUUk9ZCQk9IDEs CiAgR0RLX0VYUE9TRQkJPSAyLAogIEdES19NT1RJT05fTk9USUZZCT0gMywKICBHREtfQlVUVE9O X1BSRVNTCT0gNCwKICBHREtfMkJVVFRPTl9QUkVTUwk9IDUsCiAgR0RLXzNCVVRUT05fUFJFU1MJ PSA2LAogIEdES19CVVRUT05fUkVMRUFTRQk9IDcsCiAgR0RLX0tFWV9QUkVTUwkJPSA4LAogIEdE S19LRVlfUkVMRUFTRQk9IDksCiAgR0RLX0VOVEVSX05PVElGWQk9IDEwLAogIEdES19MRUFWRV9O T1RJRlkJPSAxMSwKICBHREtfRk9DVVNfQ0hBTkdFCT0gMTIsCiAgR0RLX0NPTkZJR1VSRQkJPSAx MywKICBHREtfTUFQCQk9IDE0LAogIEdES19VTk1BUAkJPSAxNSwKICBHREtfUFJPUEVSVFlfTk9U SUZZCT0gMTYsCiAgR0RLX1NFTEVDVElPTl9DTEVBUgk9IDE3LAogIEdES19TRUxFQ1RJT05fUkVR VUVTVCA9IDE4LAogIEdES19TRUxFQ1RJT05fTk9USUZZCT0gMTksCiAgR0RLX1BST1hJTUlUWV9J Tgk9IDIwLAogIEdES19QUk9YSU1JVFlfT1VUCT0gMjEsCiAgR0RLX0RSQUdfRU5URVIgICAgICAg ID0gMjIsCiAgR0RLX0RSQUdfTEVBVkUgICAgICAgID0gMjMsCiAgR0RLX0RSQUdfTU9USU9OICAg ICAgID0gMjQsCiAgR0RLX0RSQUdfU1RBVFVTICAgICAgID0gMjUsCiAgR0RLX0RST1BfU1RBUlQg ICAgICAgID0gMjYsCiAgR0RLX0RST1BfRklOSVNIRUQgICAgID0gMjcsCiAgR0RLX0NMSUVOVF9F VkVOVAk9IDI4LAogIEdES19WSVNJQklMSVRZX05PVElGWSA9IDI5LAogIEdES19OT19FWFBPU0UJ CT0gMzAKfSBHZGtFdmVudFR5cGU7CgogCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfRVhQT1NVUkVf TUFTSwkJPSAxIDw8IDEsCiAgR0RLX1BPSU5URVJfTU9USU9OX01BU0sJPSAxIDw8IDIsCiAgR0RL X1BPSU5URVJfTU9USU9OX0hJTlRfTUFTSwk9IDEgPDwgMywKICBHREtfQlVUVE9OX01PVElPTl9N QVNLCT0gMSA8PCA0LAogIEdES19CVVRUT04xX01PVElPTl9NQVNLCT0gMSA8PCA1LAogIEdES19C VVRUT04yX01PVElPTl9NQVNLCT0gMSA8PCA2LAogIEdES19CVVRUT04zX01PVElPTl9NQVNLCT0g MSA8PCA3LAogIEdES19CVVRUT05fUFJFU1NfTUFTSwkJPSAxIDw8IDgsCiAgR0RLX0JVVFRPTl9S RUxFQVNFX01BU0sJPSAxIDw8IDksCiAgR0RLX0tFWV9QUkVTU19NQVNLCQk9IDEgPDwgMTAsCiAg R0RLX0tFWV9SRUxFQVNFX01BU0sJCT0gMSA8PCAxMSwKICBHREtfRU5URVJfTk9USUZZX01BU0sJ CT0gMSA8PCAxMiwKICBHREtfTEVBVkVfTk9USUZZX01BU0sJCT0gMSA8PCAxMywKICBHREtfRk9D VVNfQ0hBTkdFX01BU0sJCT0gMSA8PCAxNCwKICBHREtfU1RSVUNUVVJFX01BU0sJCT0gMSA8PCAx NSwKICBHREtfUFJPUEVSVFlfQ0hBTkdFX01BU0sJPSAxIDw8IDE2LAogIEdES19WSVNJQklMSVRZ X05PVElGWV9NQVNLCT0gMSA8PCAxNywKICBHREtfUFJPWElNSVRZX0lOX01BU0sJCT0gMSA8PCAx OCwKICBHREtfUFJPWElNSVRZX09VVF9NQVNLCT0gMSA8PCAxOSwKICBHREtfU1VCU1RSVUNUVVJF X01BU0sJCT0gMSA8PCAyMCwKICBHREtfQUxMX0VWRU5UU19NQVNLCQk9IDB4MEZGRkZGCn0gR2Rr RXZlbnRNYXNrOwoKIAoKCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfTk9USUZZX0FOQ0VTVE9S CQk9IDAsCiAgR0RLX05PVElGWV9WSVJUVUFMCQk9IDEsCiAgR0RLX05PVElGWV9JTkZFUklPUgkJ PSAyLAogIEdES19OT1RJRllfTk9OTElORUFSCQk9IDMsCiAgR0RLX05PVElGWV9OT05MSU5FQVJf VklSVFVBTAk9IDQsCiAgR0RLX05PVElGWV9VTktOT1dOCQk9IDUKfSBHZGtOb3RpZnlUeXBlOwoK IAoKCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfQ1JPU1NJTkdfTk9STUFMLAogIEdES19DUk9TU0lO R19HUkFCLAogIEdES19DUk9TU0lOR19VTkdSQUIKfSBHZGtDcm9zc2luZ01vZGU7CgogCgp0eXBl ZGVmIGVudW0KewogIEdES19TSElGVF9NQVNLICAgID0gMSA8PCAwLAogIEdES19MT0NLX01BU0sJ ICAgID0gMSA8PCAxLAogIEdES19DT05UUk9MX01BU0sgID0gMSA8PCAyLAogIEdES19NT0QxX01B U0sJICAgID0gMSA8PCAzLAogIEdES19NT0QyX01BU0sJICAgID0gMSA8PCA0LAogIEdES19NT0Qz X01BU0sJICAgID0gMSA8PCA1LAogIEdES19NT0Q0X01BU0sJICAgID0gMSA8PCA2LAogIEdES19N T0Q1X01BU0sJICAgID0gMSA8PCA3LAogIEdES19CVVRUT04xX01BU0sgID0gMSA8PCA4LAogIEdE S19CVVRUT04yX01BU0sgID0gMSA8PCA5LAogIEdES19CVVRUT04zX01BU0sgID0gMSA8PCAxMCwK ICBHREtfQlVUVE9ONF9NQVNLICA9IDEgPDwgMTEsCiAgR0RLX0JVVFRPTjVfTUFTSyAgPSAxIDw8 IDEyLAogIEdES19SRUxFQVNFX01BU0sgID0gMSA8PCAxMywKICBHREtfTU9ESUZJRVJfTUFTSyA9 IDB4M2ZmZgp9IEdka01vZGlmaWVyVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX0NMSVBfQllf Q0hJTERSRU4JPSAwLAogIEdES19JTkNMVURFX0lORkVSSU9SUyA9IDEKfSBHZGtTdWJ3aW5kb3dN b2RlOwoKdHlwZWRlZiBlbnVtCnsKICBHREtfSU5QVVRfUkVBRCAgICAgICA9IDEgPDwgMCwKICBH REtfSU5QVVRfV1JJVEUgICAgICA9IDEgPDwgMSwKICBHREtfSU5QVVRfRVhDRVBUSU9OICA9IDEg PDwgMgp9IEdka0lucHV0Q29uZGl0aW9uOwoKdHlwZWRlZiBlbnVtCnsKICBHREtfT0sJICA9IDAs CiAgR0RLX0VSUk9SCSAgPSAtMSwKICBHREtfRVJST1JfUEFSQU0gPSAtMiwKICBHREtfRVJST1Jf RklMRSAgPSAtMywKICBHREtfRVJST1JfTUVNCSAgPSAtNAp9IEdka1N0YXR1czsKCnR5cGVkZWYg ZW51bQp7CiAgR0RLX0xTQl9GSVJTVCwKICBHREtfTVNCX0ZJUlNUCn0gR2RrQnl0ZU9yZGVyOwoK dHlwZWRlZiBlbnVtCnsKICBHREtfR0NfRk9SRUdST1VORCAgICA9IDEgPDwgMCwKICBHREtfR0Nf QkFDS0dST1VORCAgICA9IDEgPDwgMSwKICBHREtfR0NfRk9OVAkgICAgICAgPSAxIDw8IDIsCiAg R0RLX0dDX0ZVTkNUSU9OICAgICAgPSAxIDw8IDMsCiAgR0RLX0dDX0ZJTEwJICAgICAgID0gMSA8 PCA0LAogIEdES19HQ19USUxFCSAgICAgICA9IDEgPDwgNSwKICBHREtfR0NfU1RJUFBMRSAgICAg ICA9IDEgPDwgNiwKICBHREtfR0NfQ0xJUF9NQVNLICAgICA9IDEgPDwgNywKICBHREtfR0NfU1VC V0lORE9XICAgICA9IDEgPDwgOCwKICBHREtfR0NfVFNfWF9PUklHSU4gICA9IDEgPDwgOSwKICBH REtfR0NfVFNfWV9PUklHSU4gICA9IDEgPDwgMTAsCiAgR0RLX0dDX0NMSVBfWF9PUklHSU4gPSAx IDw8IDExLAogIEdES19HQ19DTElQX1lfT1JJR0lOID0gMSA8PCAxMiwKICBHREtfR0NfRVhQT1NV UkVTICAgICA9IDEgPDwgMTMsCiAgR0RLX0dDX0xJTkVfV0lEVEggICAgPSAxIDw8IDE0LAogIEdE S19HQ19MSU5FX1NUWUxFICAgID0gMSA8PCAxNSwKICBHREtfR0NfQ0FQX1NUWUxFICAgICA9IDEg PDwgMTYsCiAgR0RLX0dDX0pPSU5fU1RZTEUgICAgPSAxIDw8IDE3Cn0gR2RrR0NWYWx1ZXNNYXNr OwoKdHlwZWRlZiBlbnVtCnsKICBHREtfU0VMRUNUSU9OX1BSSU1BUlkgPSAxLAogIEdES19TRUxF Q1RJT05fU0VDT05EQVJZID0gMgp9IEdka1NlbGVjdGlvbjsKCnR5cGVkZWYgZW51bQp7CiAgR0RL X1BST1BFUlRZX05FV19WQUxVRSwKICBHREtfUFJPUEVSVFlfREVMRVRFCn0gR2RrUHJvcGVydHlT dGF0ZTsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1BST1BfTU9ERV9SRVBMQUNFLAogIEdES19QUk9Q X01PREVfUFJFUEVORCwKICBHREtfUFJPUF9NT0RFX0FQUEVORAp9IEdka1Byb3BNb2RlOwoKIAoK dHlwZWRlZiBlbnVtCnsKICBHREtfU09VUkNFX01PVVNFLAogIEdES19TT1VSQ0VfUEVOLAogIEdE S19TT1VSQ0VfRVJBU0VSLAogIEdES19TT1VSQ0VfQ1VSU09SCn0gR2RrSW5wdXRTb3VyY2U7Cgp0 eXBlZGVmIGVudW0KewogIEdES19NT0RFX0RJU0FCTEVELAogIEdES19NT0RFX1NDUkVFTiwKICBH REtfTU9ERV9XSU5ET1cKfSBHZGtJbnB1dE1vZGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19BWElT X0lHTk9SRSwKICBHREtfQVhJU19YLAogIEdES19BWElTX1ksCiAgR0RLX0FYSVNfUFJFU1NVUkUs CiAgR0RLX0FYSVNfWFRJTFQsCiAgR0RLX0FYSVNfWVRJTFQsCiAgR0RLX0FYSVNfTEFTVAp9IEdk a0F4aXNVc2U7CgogCgoKdHlwZWRlZiBlbnVtCnsKICBHREtfVEFSR0VUX0JJVE1BUCA9IDUsCiAg R0RLX1RBUkdFVF9DT0xPUk1BUCA9IDcsCiAgR0RLX1RBUkdFVF9EUkFXQUJMRSA9IDE3LAogIEdE S19UQVJHRVRfUElYTUFQID0gMjAsCiAgR0RLX1RBUkdFVF9TVFJJTkcgPSAzMQp9IEdka1Rhcmdl dDsKCnR5cGVkZWYgZW51bQp7CiAgR0RLX1NFTEVDVElPTl9UWVBFX0FUT00gPSA0LAogIEdES19T RUxFQ1RJT05fVFlQRV9CSVRNQVAgPSA1LAogIEdES19TRUxFQ1RJT05fVFlQRV9DT0xPUk1BUCA9 IDcsCiAgR0RLX1NFTEVDVElPTl9UWVBFX0RSQVdBQkxFID0gMTcsCiAgR0RLX1NFTEVDVElPTl9U WVBFX0lOVEVHRVIgPSAxOSwKICBHREtfU0VMRUNUSU9OX1RZUEVfUElYTUFQID0gMjAsCiAgR0RL X1NFTEVDVElPTl9UWVBFX1dJTkRPVyA9IDMzLAogIEdES19TRUxFQ1RJT05fVFlQRV9TVFJJTkcg PSAzMQp9IEdka1NlbGVjdGlvblR5cGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19FWFRFTlNJT05f RVZFTlRTX05PTkUsCiAgR0RLX0VYVEVOU0lPTl9FVkVOVFNfQUxMLAogIEdES19FWFRFTlNJT05f RVZFTlRTX0NVUlNPUgp9IEdka0V4dGVuc2lvbk1vZGU7Cgp0eXBlZGVmIGVudW0JCQkgCnsKICBH REtfSU1fUFJFRURJVF9BUkVBCSAgID0gMHgwMDAxLCAKICBHREtfSU1fUFJFRURJVF9DQUxMQkFD S1MgPSAweDAwMDIsIAogIEdES19JTV9QUkVFRElUX1BPU0lUSU9OICA9IDB4MDAwNCwKICBHREtf SU1fUFJFRURJVF9OT1RISU5HICAgPSAweDAwMDgsCiAgR0RLX0lNX1BSRUVESVRfTk9ORQkgICA9 IDB4MDAxMCwKICBHREtfSU1fUFJFRURJVF9NQVNLICAgICAgPSAweDAwMWYsCgogIEdES19JTV9T VEFUVVNfQVJFQQkgICA9IDB4MDEwMCwgCiAgR0RLX0lNX1NUQVRVU19DQUxMQkFDS1MgID0gMHgw MjAwLAogIEdES19JTV9TVEFUVVNfTk9USElORwkgICA9IDB4MDQwMCwKICBHREtfSU1fU1RBVFVT X05PTkUJICAgPSAweDA4MDAsCiAgR0RLX0lNX1NUQVRVU19NQVNLCSAgID0gMHgwZjAwIAp9IEdk a0lNU3R5bGU7Cgp0eXBlZGVmIGVudW0KewogIEdES19JQ19TVFlMRQkJCT0gMSA8PCAwLAogIEdE S19JQ19DTElFTlRfV0lORE9XCQk9IDEgPDwgMSwKICBHREtfSUNfRk9DVVNfV0lORE9XCQk9IDEg PDwgMiwKICBHREtfSUNfRklMVEVSX0VWRU5UUwkJPSAxIDw8IDMsCiAgR0RLX0lDX1NQT1RfTE9D QVRJT04JCT0gMSA8PCA0LAogIEdES19JQ19MSU5FX1NQQUNJTkcJCT0gMSA8PCA1LAogIEdES19J Q19DVVJTT1IJCQk9IDEgPDwgNiwKCiAgR0RLX0lDX1BSRUVESVRfRk9OVFNFVAk9IDEgPDwgMTAs CiAgR0RLX0lDX1BSRUVESVRfQVJFQQkJPSAxIDw8IDExLAogIEdES19JQ19QUkVFRElUX0FSRUFf TkVFREVECT0gMSA8PCAxMiwKICBHREtfSUNfUFJFRURJVF9GT1JFR1JPVU5ECT0gMSA8PCAxMywK ICBHREtfSUNfUFJFRURJVF9CQUNLR1JPVU5ECT0gMSA8PCAxNCwKICBHREtfSUNfUFJFRURJVF9Q SVhNQVAJCT0gMSA8PCAxNSwKICBHREtfSUNfUFJFRURJVF9DT0xPUk1BUAk9IDEgPDwgMTYsCgog IEdES19JQ19TVEFUVVNfRk9OVFNFVAkJPSAxIDw8IDIxLAogIEdES19JQ19TVEFUVVNfQVJFQQkJ PSAxIDw8IDIyLAogIEdES19JQ19TVEFUVVNfQVJFQV9ORUVERUQJPSAxIDw8IDIzLAogIEdES19J Q19TVEFUVVNfRk9SRUdST1VORAk9IDEgPDwgMjQsCiAgR0RLX0lDX1NUQVRVU19CQUNLR1JPVU5E CT0gMSA8PCAyNSwKICBHREtfSUNfU1RBVFVTX1BJWE1BUAkJPSAxIDw8IDI2LAogIEdES19JQ19T VEFUVVNfQ09MT1JNQVAJPSAxIDw8IDI3LAoKICBHREtfSUNfQUxMX1JFUQkJPSBHREtfSUNfU1RZ TEUgfAogICAgCQkJCSAgR0RLX0lDX0NMSUVOVF9XSU5ET1csCgogIEdES19JQ19QUkVFRElUX0FS RUFfUkVRCT0gR0RLX0lDX1BSRUVESVRfQVJFQSB8IAoJCQkJICBHREtfSUNfUFJFRURJVF9GT05U U0VULAogIEdES19JQ19QUkVFRElUX1BPU0lUSU9OX1JFUQk9IEdES19JQ19QUkVFRElUX0FSRUEg fCBHREtfSUNfU1BPVF9MT0NBVElPTiB8CgkJCQkgIEdES19JQ19QUkVFRElUX0ZPTlRTRVQsCgog IEdES19JQ19TVEFUVVNfQVJFQV9SRVEJPSBHREtfSUNfU1RBVFVTX0FSRUEgfCAKCQkJCSAgR0RL X0lDX1NUQVRVU19GT05UU0VUCn0gR2RrSUNBdHRyaWJ1dGVzVHlwZTsKCiAKCgoKCnR5cGVkZWYg ZW51bQp7CiAgR0RLX0RFQ09SX0FMTAkJPSAxIDw8IDAsCiAgR0RLX0RFQ09SX0JPUkRFUgk9IDEg PDwgMSwKICBHREtfREVDT1JfUkVTSVpFSAk9IDEgPDwgMiwKICBHREtfREVDT1JfVElUTEUJPSAx IDw8IDMsCiAgR0RLX0RFQ09SX01FTlUJPSAxIDw8IDQsCiAgR0RLX0RFQ09SX01JTklNSVpFCT0g MSA8PCA1LAogIEdES19ERUNPUl9NQVhJTUlaRQk9IDEgPDwgNgp9IEdka1dNRGVjb3JhdGlvbjsK CnR5cGVkZWYgZW51bQp7CiAgR0RLX0ZVTkNfQUxMCQk9IDEgPDwgMCwKICBHREtfRlVOQ19SRVNJ WkUJPSAxIDw8IDEsCiAgR0RLX0ZVTkNfTU9WRQkJPSAxIDw8IDIsCiAgR0RLX0ZVTkNfTUlOSU1J WkUJPSAxIDw8IDMsCiAgR0RLX0ZVTkNfTUFYSU1JWkUJPSAxIDw8IDQsCiAgR0RLX0ZVTkNfQ0xP U0UJPSAxIDw8IDUKfSBHZGtXTUZ1bmN0aW9uOwoKdHlwZWRlZiB2b2lkICgqR2RrSW5wdXRGdW5j dGlvbikgKGdwb2ludGVyCSAgICBkYXRhLAoJCQkJICBnaW50CQkgICAgc291cmNlLAoJCQkJICBH ZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24pOwoKdHlwZWRlZiB2b2lkICgqR2RrRGVzdHJveU5v dGlmeSkgKGdwb2ludGVyIGRhdGEpOwoKIAoKCgoKCgoKIAoKdHlwZWRlZiBlbnVtCnsKICBHREtf Q0NfTU9ERV9VTkRFRklORUQsCiAgR0RLX0NDX01PREVfQlcsCiAgR0RLX0NDX01PREVfU1REX0NN QVAsCiAgR0RLX0NDX01PREVfVFJVRSwKICBHREtfQ0NfTU9ERV9NWV9HUkFZLAogIEdES19DQ19N T0RFX1BBTEVUVEUKfSBHZGtDb2xvckNvbnRleHRNb2RlOwoKIAoKCgoKCnR5cGVkZWYgZW51bQp7 CiAgR0RLX09WRVJMQVBfUkVDVEFOR0xFX0lOLAogIEdES19PVkVSTEFQX1JFQ1RBTkdMRV9PVVQs CiAgR0RLX09WRVJMQVBfUkVDVEFOR0xFX1BBUlQKfSBHZGtPdmVybGFwVHlwZTsKCnR5cGVkZWYg ZW51bSB7CiAgR0RLX0FDVElPTl9ERUZBVUxUID0gMSA8PCAwLAogIEdES19BQ1RJT05fQ09QWSAg ICA9IDEgPDwgMSwKICBHREtfQUNUSU9OX01PVkUgICAgPSAxIDw8IDIsCiAgR0RLX0FDVElPTl9M SU5LICAgID0gMSA8PCAzLAogIEdES19BQ1RJT05fUFJJVkFURSA9IDEgPDwgNCwKICBHREtfQUNU SU9OX0FTSyAgICAgPSAxIDw8IDUKfSBHZGtEcmFnQWN0aW9uOwoKdHlwZWRlZiBlbnVtIHsKICBH REtfRFJBR19QUk9UT19NT1RJRiwKICBHREtfRFJBR19QUk9UT19YRE5ELAogIEdES19EUkFHX1BS T1RPX1JPT1RXSU4sCSAKCiAgR0RLX0RSQUdfUFJPVE9fTk9ORQkJIAp9IEdka0RyYWdQcm90b2Nv bDsKCiAKCgoKCgoKc3RydWN0IF9HZGtDb2xvcgp7CiAgZ3Vsb25nICBwaXhlbDsKICBndXNob3J0 IHJlZDsKICBndXNob3J0IGdyZWVuOwogIGd1c2hvcnQgYmx1ZTsKfTsKCiAKCgpzdHJ1Y3QgX0dk a0NvbG9ybWFwCnsKICBnaW50ICAgICAgc2l6ZTsKICBHZGtDb2xvciAqY29sb3JzOwp9OwoKIAoK CgoKCgoKCgoKCnN0cnVjdCBfR2RrVmlzdWFsCnsKICBHZGtWaXN1YWxUeXBlIHR5cGU7CiAgZ2lu dCBkZXB0aDsKICBHZGtCeXRlT3JkZXIgYnl0ZV9vcmRlcjsKICBnaW50IGNvbG9ybWFwX3NpemU7 CiAgZ2ludCBiaXRzX3Blcl9yZ2I7CgogIGd1aW50MzIgcmVkX21hc2s7CiAgZ2ludCByZWRfc2hp ZnQ7CiAgZ2ludCByZWRfcHJlYzsKCiAgZ3VpbnQzMiBncmVlbl9tYXNrOwogIGdpbnQgZ3JlZW5f c2hpZnQ7CiAgZ2ludCBncmVlbl9wcmVjOwoKICBndWludDMyIGJsdWVfbWFzazsKICBnaW50IGJs dWVfc2hpZnQ7CiAgZ2ludCBibHVlX3ByZWM7Cn07CgpzdHJ1Y3QgX0dka1dpbmRvd0F0dHIKewog IGdjaGFyICp0aXRsZTsKICBnaW50IGV2ZW50X21hc2s7CiAgZ2ludDE2IHgsIHk7CiAgZ2ludDE2 IHdpZHRoOwogIGdpbnQxNiBoZWlnaHQ7CiAgR2RrV2luZG93Q2xhc3Mgd2NsYXNzOwogIEdka1Zp c3VhbCAqdmlzdWFsOwogIEdka0NvbG9ybWFwICpjb2xvcm1hcDsKICBHZGtXaW5kb3dUeXBlIHdp bmRvd190eXBlOwogIEdka0N1cnNvciAqY3Vyc29yOwogIGdjaGFyICp3bWNsYXNzX25hbWU7CiAg Z2NoYXIgKndtY2xhc3NfY2xhc3M7CiAgZ2Jvb2xlYW4gb3ZlcnJpZGVfcmVkaXJlY3Q7Cn07Cgpz dHJ1Y3QgX0dka1dpbmRvdwp7CiAgZ3BvaW50ZXIgdXNlcl9kYXRhOwp9OwoKc3RydWN0IF9HZGtH ZW9tZXRyeSB7CiAgZ2ludCBtaW5fd2lkdGg7CiAgZ2ludCBtaW5faGVpZ2h0OwogIGdpbnQgbWF4 X3dpZHRoOwogIGdpbnQgbWF4X2hlaWdodDsKICBnaW50IGJhc2Vfd2lkdGg7CiAgZ2ludCBiYXNl X2hlaWdodDsKICBnaW50IHdpZHRoX2luYzsKICBnaW50IGhlaWdodF9pbmM7CiAgZ2RvdWJsZSBt aW5fYXNwZWN0OwogIGdkb3VibGUgbWF4X2FzcGVjdDsKICAgCn07CgpzdHJ1Y3QgX0dka0ltYWdl CnsKICBHZGtJbWFnZVR5cGUJdHlwZTsKICBHZGtWaXN1YWwgICAgKnZpc3VhbDsJICAgICAKICBH ZGtCeXRlT3JkZXIJYnl0ZV9vcmRlcjsKICBndWludDE2CXdpZHRoOwogIGd1aW50MTYJaGVpZ2h0 OwogIGd1aW50MTYJZGVwdGg7CiAgZ3VpbnQxNglicHA7CSAgICAgCiAgZ3VpbnQxNglicGw7CSAg ICAgCiAgZ3BvaW50ZXIJbWVtOwp9OwoKc3RydWN0IF9HZGtHQ1ZhbHVlcwp7CiAgR2RrQ29sb3IJ ICAgIGZvcmVncm91bmQ7CiAgR2RrQ29sb3IJICAgIGJhY2tncm91bmQ7CiAgR2RrRm9udAkgICAq Zm9udDsKICBHZGtGdW5jdGlvbgkgICAgZnVuY3Rpb247CiAgR2RrRmlsbAkgICAgZmlsbDsKICBH ZGtQaXhtYXAJICAgKnRpbGU7CiAgR2RrUGl4bWFwCSAgICpzdGlwcGxlOwogIEdka1BpeG1hcAkg ICAqY2xpcF9tYXNrOwogIEdka1N1YndpbmRvd01vZGUgIHN1YndpbmRvd19tb2RlOwogIGdpbnQJ CSAgICB0c194X29yaWdpbjsKICBnaW50CQkgICAgdHNfeV9vcmlnaW47CiAgZ2ludAkJICAgIGNs aXBfeF9vcmlnaW47CiAgZ2ludAkJICAgIGNsaXBfeV9vcmlnaW47CiAgZ2ludAkJICAgIGdyYXBo aWNzX2V4cG9zdXJlczsKICBnaW50CQkgICAgbGluZV93aWR0aDsKICBHZGtMaW5lU3R5bGUJICAg IGxpbmVfc3R5bGU7CiAgR2RrQ2FwU3R5bGUJICAgIGNhcF9zdHlsZTsKICBHZGtKb2luU3R5bGUJ ICAgIGpvaW5fc3R5bGU7Cn07CgpzdHJ1Y3QgX0dka0dDCnsKICBnaW50IGR1bW15X3ZhcjsKfTsK CnN0cnVjdCBfR2RrUG9pbnQKewogIGdpbnQxNiB4OwogIGdpbnQxNiB5Owp9OwoKc3RydWN0IF9H ZGtSZWN0YW5nbGUKewogIGdpbnQxNiB4OwogIGdpbnQxNiB5OwogIGd1aW50MTYgd2lkdGg7CiAg Z3VpbnQxNiBoZWlnaHQ7Cn07CgpzdHJ1Y3QgX0dka1NlZ21lbnQKewogIGdpbnQxNiB4MTsKICBn aW50MTYgeTE7CiAgZ2ludDE2IHgyOwogIGdpbnQxNiB5MjsKfTsKCnN0cnVjdCBfR2RrRm9udAp7 CiAgR2RrRm9udFR5cGUgdHlwZTsKICBnaW50IGFzY2VudDsKICBnaW50IGRlc2NlbnQ7Cn07Cgpz dHJ1Y3QgX0dka0N1cnNvcgp7CiAgR2RrQ3Vyc29yVHlwZSB0eXBlOwp9OwoKCnN0cnVjdCBfR2Rr Q29sb3JDb250ZXh0RGl0aGVyCnsKICBnaW50IGZhc3RfcmdiWzMyXVszMl1bMzJdOyAgCiAgZ2lu dCBmYXN0X2VyclszMl1bMzJdWzMyXTsgIAogIGdpbnQgZmFzdF9lcmdbMzJdWzMyXVszMl07CiAg Z2ludCBmYXN0X2VyYlszMl1bMzJdWzMyXTsKfTsKCnN0cnVjdCBfR2RrQ29sb3JDb250ZXh0CnsK ICBHZGtWaXN1YWwgKnZpc3VhbDsKICBHZGtDb2xvcm1hcCAqY29sb3JtYXA7CgogIGdpbnQgbnVt X2NvbG9yczsJCSAKICBnaW50IG1heF9jb2xvcnM7CQkgCiAgZ2ludCBudW1fYWxsb2NhdGVkOwkJ IAoKICBHZGtDb2xvckNvbnRleHRNb2RlIG1vZGU7CiAgZ2ludCBuZWVkX3RvX2ZyZWVfY29sb3Jt YXA7CiAgR2RrQXRvbSBzdGRfY21hcF9hdG9tOwoKICBndWxvbmcgKmNsdXQ7CQkJIAogIEdka0Nv bG9yICpjbWFwOwkJIAoKICBHSGFzaFRhYmxlICpjb2xvcl9oYXNoOwkgCiAgR2RrQ29sb3IgKnBh bGV0dGU7CQkgCiAgZ2ludCBudW1fcGFsZXR0ZTsJCSAKCiAgR2RrQ29sb3JDb250ZXh0RGl0aGVy ICpmYXN0X2RpdGhlcjsJIAoKICBzdHJ1Y3QKICB7CiAgICBnaW50IHJlZDsKICAgIGdpbnQgZ3Jl ZW47CiAgICBnaW50IGJsdWU7CiAgfSBzaGlmdHM7CgogIHN0cnVjdAogIHsKICAgIGd1bG9uZyBy ZWQ7CiAgICBndWxvbmcgZ3JlZW47CiAgICBndWxvbmcgYmx1ZTsKICB9IG1hc2tzOwoKICBzdHJ1 Y3QKICB7CiAgICBnaW50IHJlZDsKICAgIGdpbnQgZ3JlZW47CiAgICBnaW50IGJsdWU7CiAgfSBi aXRzOwoKICBndWxvbmcgbWF4X2VudHJ5OwoKICBndWxvbmcgYmxhY2tfcGl4ZWw7CiAgZ3Vsb25n IHdoaXRlX3BpeGVsOwp9OwoKIAoKc3RydWN0IF9HZGtEZXZpY2VLZXkKewogIGd1aW50IGtleXZh bDsKICBHZGtNb2RpZmllclR5cGUgbW9kaWZpZXJzOwp9OwoKc3RydWN0IF9HZGtEZXZpY2VJbmZv CnsKICBndWludDMyIGRldmljZWlkOwogIGdjaGFyICpuYW1lOwogIEdka0lucHV0U291cmNlIHNv dXJjZTsKICBHZGtJbnB1dE1vZGUgbW9kZTsKICBnaW50IGhhc19jdXJzb3I7CSAKICBnaW50IG51 bV9heGVzOwogIEdka0F4aXNVc2UgKmF4ZXM7ICAgICAKICBnaW50IG51bV9rZXlzOwogIEdka0Rl dmljZUtleSAqa2V5czsKfTsKCnN0cnVjdCBfR2RrVGltZUNvb3JkCnsKICBndWludDMyIHRpbWU7 CiAgZ2RvdWJsZSB4OwogIGdkb3VibGUgeTsKICBnZG91YmxlIHByZXNzdXJlOwogIGdkb3VibGUg eHRpbHQ7CiAgZ2RvdWJsZSB5dGlsdDsKfTsKCiAKCgpzdHJ1Y3QgX0dka0RyYWdDb250ZXh0IHsK ICBHZGtEcmFnUHJvdG9jb2wgcHJvdG9jb2w7CiAgCiAgZ2Jvb2xlYW4gaXNfc291cmNlOwogIAog IEdka1dpbmRvdyAqc291cmNlX3dpbmRvdzsKICBHZGtXaW5kb3cgKmRlc3Rfd2luZG93OwoKICBH TGlzdCAqdGFyZ2V0czsKICBHZGtEcmFnQWN0aW9uIGFjdGlvbnM7CiAgR2RrRHJhZ0FjdGlvbiBz dWdnZXN0ZWRfYWN0aW9uOwogIEdka0RyYWdBY3Rpb24gYWN0aW9uOyAKCiAgZ3VpbnQzMiBzdGFy dF90aW1lOwp9OwoKIAoKdHlwZWRlZiB2b2lkIEdka1hFdmVudDsJICAgCgp0eXBlZGVmIEdka0Zp bHRlclJldHVybiAoKkdka0ZpbHRlckZ1bmMpIChHZGtYRXZlbnQgKnhldmVudCwKCQkJCQkgIEdk a0V2ZW50ICpldmVudCwKCQkJCQkgIGdwb2ludGVyICBkYXRhKTsKCnN0cnVjdCBfR2RrRXZlbnRB bnkKewogIEdka0V2ZW50VHlwZSB0eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNl bmRfZXZlbnQ7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlCnsKICBHZGtFdmVudFR5cGUgdHlw ZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50OwogIEdka1JlY3Rhbmds ZSBhcmVhOwogIGdpbnQgY291bnQ7ICAKfTsKCnN0cnVjdCBfR2RrRXZlbnROb0V4cG9zZQp7CiAg R2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVu dDsKICAgCn07CgpzdHJ1Y3QgX0dka0V2ZW50VmlzaWJpbGl0eQp7CiAgR2RrRXZlbnRUeXBlIHR5 cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBHZGtWaXNpYmls aXR5U3RhdGUgc3RhdGU7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50TW90aW9uCnsKICBHZGtFdmVudFR5 cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50OwogIGd1aW50 MzIgdGltZTsKICBnZG91YmxlIHg7CiAgZ2RvdWJsZSB5OwogIGdkb3VibGUgcHJlc3N1cmU7CiAg Z2RvdWJsZSB4dGlsdDsKICBnZG91YmxlIHl0aWx0OwogIGd1aW50IHN0YXRlOwogIGdpbnQxNiBp c19oaW50OwogIEdka0lucHV0U291cmNlIHNvdXJjZTsKICBndWludDMyIGRldmljZWlkOwogIGdk b3VibGUgeF9yb290LCB5X3Jvb3Q7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50QnV0dG9uCnsKICBHZGtF dmVudFR5cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50Owog IGd1aW50MzIgdGltZTsKICBnZG91YmxlIHg7CiAgZ2RvdWJsZSB5OwogIGdkb3VibGUgcHJlc3N1 cmU7CiAgZ2RvdWJsZSB4dGlsdDsKICBnZG91YmxlIHl0aWx0OwogIGd1aW50IHN0YXRlOwogIGd1 aW50IGJ1dHRvbjsKICBHZGtJbnB1dFNvdXJjZSBzb3VyY2U7CiAgZ3VpbnQzMiBkZXZpY2VpZDsK ICBnZG91YmxlIHhfcm9vdCwgeV9yb290Owp9OwoKc3RydWN0IF9HZGtFdmVudEtleQp7CiAgR2Rr RXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsK ICBndWludDMyIHRpbWU7CiAgZ3VpbnQgc3RhdGU7CiAgZ3VpbnQga2V5dmFsOwogIGdpbnQgbGVu Z3RoOwogIGdjaGFyICpzdHJpbmc7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50Q3Jvc3NpbmcKewogIEdk a0V2ZW50VHlwZSB0eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7 CiAgR2RrV2luZG93ICpzdWJ3aW5kb3c7CiAgZ3VpbnQzMiB0aW1lOwogIGdkb3VibGUgeDsKICBn ZG91YmxlIHk7CiAgZ2RvdWJsZSB4X3Jvb3Q7CiAgZ2RvdWJsZSB5X3Jvb3Q7CiAgR2RrQ3Jvc3Np bmdNb2RlIG1vZGU7CiAgR2RrTm90aWZ5VHlwZSBkZXRhaWw7CiAgZ2Jvb2xlYW4gZm9jdXM7CiAg Z3VpbnQgc3RhdGU7Cn07CgpzdHJ1Y3QgX0dka0V2ZW50Rm9jdXMKewogIEdka0V2ZW50VHlwZSB0 eXBlOwogIEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7CiAgZ2ludDE2IGlu Owp9OwoKc3RydWN0IF9HZGtFdmVudENvbmZpZ3VyZQp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAg R2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBnaW50MTYgeCwgeTsKICBn aW50MTYgd2lkdGg7CiAgZ2ludDE2IGhlaWdodDsKfTsKCnN0cnVjdCBfR2RrRXZlbnRQcm9wZXJ0 eQp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2Vu ZF9ldmVudDsKICBHZGtBdG9tIGF0b207CiAgZ3VpbnQzMiB0aW1lOwogIGd1aW50IHN0YXRlOwp9 OwoKc3RydWN0IF9HZGtFdmVudFNlbGVjdGlvbgp7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2Rr V2luZG93ICp3aW5kb3c7CiAgZ2ludDggc2VuZF9ldmVudDsKICBHZGtBdG9tIHNlbGVjdGlvbjsK ICBHZGtBdG9tIHRhcmdldDsKICBHZGtBdG9tIHByb3BlcnR5OwogIGd1aW50MzIgcmVxdWVzdG9y OwogIGd1aW50MzIgdGltZTsKfTsKCiAKCgpzdHJ1Y3QgX0dka0V2ZW50UHJveGltaXR5CnsKICBH ZGtFdmVudFR5cGUgdHlwZTsKICBHZGtXaW5kb3cgKndpbmRvdzsKICBnaW50OCBzZW5kX2V2ZW50 OwogIGd1aW50MzIgdGltZTsKICBHZGtJbnB1dFNvdXJjZSBzb3VyY2U7CiAgZ3VpbnQzMiBkZXZp Y2VpZDsKfTsKCnN0cnVjdCBfR2RrRXZlbnRDbGllbnQKewogIEdka0V2ZW50VHlwZSB0eXBlOwog IEdka1dpbmRvdyAqd2luZG93OwogIGdpbnQ4IHNlbmRfZXZlbnQ7CiAgR2RrQXRvbSBtZXNzYWdl X3R5cGU7CiAgZ3VzaG9ydCBkYXRhX2Zvcm1hdDsKICB1bmlvbiB7CiAgICBjaGFyIGJbMjBdOwog ICAgc2hvcnQgc1sxMF07CiAgICBsb25nIGxbNV07CiAgfSBkYXRhOwp9OwoKIAoKc3RydWN0IF9H ZGtFdmVudERORCB7CiAgR2RrRXZlbnRUeXBlIHR5cGU7CiAgR2RrV2luZG93ICp3aW5kb3c7CiAg Z2ludDggc2VuZF9ldmVudDsKICBHZGtEcmFnQ29udGV4dCAqY29udGV4dDsKCiAgZ3VpbnQzMiB0 aW1lOwogIGdzaG9ydCB4X3Jvb3QsIHlfcm9vdDsKfTsKCnVuaW9uIF9HZGtFdmVudAp7CiAgR2Rr RXZlbnRUeXBlCQkgICAgdHlwZTsKICBHZGtFdmVudEFueQkJICAgIGFueTsKICBHZGtFdmVudEV4 cG9zZQkgICAgZXhwb3NlOwogIEdka0V2ZW50Tm9FeHBvc2UJICAgIG5vX2V4cG9zZTsKICBHZGtF dmVudFZpc2liaWxpdHkJICAgIHZpc2liaWxpdHk7CiAgR2RrRXZlbnRNb3Rpb24JICAgIG1vdGlv bjsKICBHZGtFdmVudEJ1dHRvbgkgICAgYnV0dG9uOwogIEdka0V2ZW50S2V5CQkgICAga2V5Owog IEdka0V2ZW50Q3Jvc3NpbmcJICAgIGNyb3NzaW5nOwogIEdka0V2ZW50Rm9jdXMJCSAgICBmb2N1 c19jaGFuZ2U7CiAgR2RrRXZlbnRDb25maWd1cmUJICAgIGNvbmZpZ3VyZTsKICBHZGtFdmVudFBy b3BlcnR5CSAgICBwcm9wZXJ0eTsKICBHZGtFdmVudFNlbGVjdGlvbgkgICAgc2VsZWN0aW9uOwog IEdka0V2ZW50UHJveGltaXR5CSAgICBwcm94aW1pdHk7CiAgR2RrRXZlbnRDbGllbnQJICAgIGNs aWVudDsKICBHZGtFdmVudERORCAgICAgICAgICAgICAgIGRuZDsKfTsKCnN0cnVjdCBfR2RrUmVn aW9uCnsKICBncG9pbnRlciB1c2VyX2RhdGE7Cn07CgpzdHJ1Y3QgX0dka0lDQXR0cgp7CiAgR2Rr SU1TdHlsZSBzdHlsZTsKICBHZGtXaW5kb3cgKmNsaWVudF93aW5kb3c7CiAgR2RrV2luZG93ICpm b2N1c193aW5kb3c7CiAgR2RrRXZlbnRNYXNrIGZpbHRlcl9ldmVudHM7CiAgR2RrUG9pbnQgc3Bv dF9sb2NhdGlvbjsKICBnaW50IGxpbmVfc3BhY2luZzsKICBHZGtDdXJzb3IgKmN1cnNvcjsKCiAg R2RrRm9udCAqcHJlZWRpdF9mb250c2V0OwogIEdka1JlY3RhbmdsZSBwcmVlZGl0X2FyZWE7CiAg R2RrUmVjdGFuZ2xlIHByZWVkaXRfYXJlYV9uZWVkZWQ7IAogIEdka0NvbG9yIHByZWVkaXRfZm9y ZWdyb3VuZDsKICBHZGtDb2xvciBwcmVlZGl0X2JhY2tncm91bmQ7CiAgR2RrUGl4bWFwICpwcmVl ZGl0X3BpeG1hcDsKICBHZGtDb2xvcm1hcCAqcHJlZWRpdF9jb2xvcm1hcDsKCiAgR2RrRm9udCAq c3RhdHVzX2ZvbnRzZXQ7CiAgR2RrUmVjdGFuZ2xlIHN0YXR1c19hcmVhOwogIEdka1JlY3Rhbmds ZSBzdGF0dXNfYXJlYV9uZWVkZWQ7IAogIEdka0NvbG9yIHN0YXR1c19mb3JlZ3JvdW5kOwogIEdk a0NvbG9yIHN0YXR1c19iYWNrZ3JvdW5kOwogIEdka1BpeG1hcCAqc3RhdHVzX3BpeG1hcDsKICBH ZGtDb2xvcm1hcCAqc3RhdHVzX2NvbG9ybWFwOwp9OwoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ3RrLTEuMi9nZGsvZ2RrLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgp2b2lkIAkg IGdka19pbml0CQkgICAJKGdpbnQJICAgCSphcmdjLAoJCQkJCSBnY2hhciAgICAgICAgKioqYXJn dik7Cmdib29sZWFuICBnZGtfaW5pdF9jaGVjayAgIAkgICAgICAgIChnaW50CSAgIAkqYXJnYywK CQkJCQkgZ2NoYXIgICAgICAgICoqKmFyZ3YpOwp2b2lkICAJICBnZGtfZXhpdAkJICAgCShnaW50 CSAgICAJIGVycm9yX2NvZGUpOwpnY2hhcioJICBnZGtfc2V0X2xvY2FsZQkgICAJKHZvaWQpOwoK IAoKdm9pZCAgICAgIGdka19lcnJvcl90cmFwX3B1c2ggICAgICAgICAgICh2b2lkKTsKZ2ludCAg ICAgIGdka19lcnJvcl90cmFwX3BvcCAgICAgICAgICAgICh2b2lkKTsKCgpnYm9vbGVhbiAgZ2Rr X2V2ZW50c19wZW5kaW5nCSAJKHZvaWQpOwpHZGtFdmVudCogZ2RrX2V2ZW50X2dldAkJCSh2b2lk KTsKCkdka0V2ZW50KiBnZGtfZXZlbnRfcGVlayAgICAgICAgICAgICAgICAodm9pZCk7Ckdka0V2 ZW50KiBnZGtfZXZlbnRfZ2V0X2dyYXBoaWNzX2V4cG9zZSAoR2RrV2luZG93IAkqd2luZG93KTsK dm9pZCAgICAgIGdka19ldmVudF9wdXQJIAkJKEdka0V2ZW50ICAJKmV2ZW50KTsKCkdka0V2ZW50 KiBnZGtfZXZlbnRfY29weSAgICAgCQkoR2RrRXZlbnQgCSpldmVudCk7CnZvaWQJICBnZGtfZXZl bnRfZnJlZSAgICAgCQkoR2RrRXZlbnQgCSpldmVudCk7Cmd1aW50MzIgICBnZGtfZXZlbnRfZ2V0 X3RpbWUgCQkoR2RrRXZlbnQgCSpldmVudCk7Cgp2b2lkCSAgZ2RrX2V2ZW50X2hhbmRsZXJfc2V0 IAkoR2RrRXZlbnRGdW5jICAgIGZ1bmMsCgkJCQkJIGdwb2ludGVyICAgICAgICBkYXRhLAoJCQkJ CSBHRGVzdHJveU5vdGlmeSAgbm90aWZ5KTsKCnZvaWQJICBnZGtfc2V0X3Nob3dfZXZlbnRzCQko Z2Jvb2xlYW4JIHNob3dfZXZlbnRzKTsKdm9pZAkgIGdka19zZXRfdXNlX3hzaG0JCShnYm9vbGVh bgkgdXNlX3hzaG0pOwoKZ2Jvb2xlYW4gIGdka19nZXRfc2hvd19ldmVudHMJCSh2b2lkKTsKZ2Jv b2xlYW4gIGdka19nZXRfdXNlX3hzaG0JCSh2b2lkKTsKZ2NoYXIqCSAgZ2RrX2dldF9kaXNwbGF5 CQkodm9pZCk7CgpndWludDMyIGdka190aW1lX2dldAkgICh2b2lkKTsKZ3VpbnQzMiBnZGtfdGlt ZXJfZ2V0CSAgKHZvaWQpOwp2b2lkCWdka190aW1lcl9zZXQJICAoZ3VpbnQzMiBtaWxsaXNlY29u ZHMpOwp2b2lkCWdka190aW1lcl9lbmFibGUgICh2b2lkKTsKdm9pZAlnZGtfdGltZXJfZGlzYWJs ZSAodm9pZCk7CgpnaW50IGdka19pbnB1dF9hZGRfZnVsbAkgIChnaW50CQkgICAgIHNvdXJjZSwK CQkJICAgR2RrSW5wdXRDb25kaXRpb24gY29uZGl0aW9uLAoJCQkgICBHZGtJbnB1dEZ1bmN0aW9u ICBmdW5jdGlvbiwKCQkJICAgZ3BvaW50ZXIJICAgICBkYXRhLAoJCQkgICBHZGtEZXN0cm95Tm90 aWZ5ICBkZXN0cm95KTsKZ2ludCBnZGtfaW5wdXRfYWRkCSAgKGdpbnQJCSAgICAgc291cmNlLAoJ CQkgICBHZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24sCgkJCSAgIEdka0lucHV0RnVuY3Rpb24g IGZ1bmN0aW9uLAoJCQkgICBncG9pbnRlcgkgICAgIGRhdGEpOwp2b2lkIGdka19pbnB1dF9yZW1v dmUJICAoZ2ludAkJICAgICB0YWcpOwoKZ2ludCAgICAgZ2RrX3BvaW50ZXJfZ3JhYiAgICAgICAo R2RrV2luZG93ICAgICp3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp bnQgICAgICAgICAgb3duZXJfZXZlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHZGtFdmVudE1hc2sgIGV2ZW50X21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdka1dpbmRvdyAgICAqY29uZmluZV90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR2RrQ3Vyc29yICAgICpjdXJzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGd1aW50MzIgICAgICAgdGltZSk7CnZvaWQgICAgIGdka19wb2ludGVyX3VuZ3JhYiAgICAg KGd1aW50MzIgICAgICAgdGltZSk7CmdpbnQgICAgIGdka19rZXlib2FyZF9ncmFiICAgICAgKEdk a1dpbmRvdyAgICAqd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v bGVhbiAgICAgIG93bmVyX2V2ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3VpbnQzMiAgICAgICB0aW1lKTsKdm9pZCAgICAgZ2RrX2tleWJvYXJkX3VuZ3JhYiAgICAoZ3Vp bnQzMiAgICAgICB0aW1lKTsKZ2Jvb2xlYW4gZ2RrX3BvaW50ZXJfaXNfZ3JhYmJlZCAodm9pZCk7 CgoKZ2ludCBnZGtfc2NyZWVuX3dpZHRoICAodm9pZCk7CmdpbnQgZ2RrX3NjcmVlbl9oZWlnaHQg KHZvaWQpOwoKZ2ludCBnZGtfc2NyZWVuX3dpZHRoX21tICAodm9pZCk7CmdpbnQgZ2RrX3NjcmVl bl9oZWlnaHRfbW0gKHZvaWQpOwoKdm9pZCBnZGtfZmx1c2ggKHZvaWQpOwp2b2lkIGdka19iZWVw ICh2b2lkKTsKCnZvaWQgZ2RrX2tleV9yZXBlYXRfZGlzYWJsZSAodm9pZCk7CnZvaWQgZ2RrX2tl eV9yZXBlYXRfcmVzdG9yZSAodm9pZCk7CgoKIAoKZ2ludAkgICAgICBnZGtfdmlzdWFsX2dldF9i ZXN0X2RlcHRoCSAgICAgKHZvaWQpOwpHZGtWaXN1YWxUeXBlIGdka192aXN1YWxfZ2V0X2Jlc3Rf dHlwZQkgICAgICh2b2lkKTsKR2RrVmlzdWFsKiAgICBnZGtfdmlzdWFsX2dldF9zeXN0ZW0JICAg ICAodm9pZCk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVzdAkgICAgICh2b2lkKTsK R2RrVmlzdWFsKiAgICBnZGtfdmlzdWFsX2dldF9iZXN0X3dpdGhfZGVwdGggKGdpbnQJICAgICBk ZXB0aCk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVzdF93aXRoX3R5cGUgIChHZGtW aXN1YWxUeXBlICB2aXN1YWxfdHlwZSk7Ckdka1Zpc3VhbCogICAgZ2RrX3Zpc3VhbF9nZXRfYmVz dF93aXRoX2JvdGggIChnaW50CSAgICAgZGVwdGgsCgkJCQkJICAgICAgR2RrVmlzdWFsVHlwZSAg dmlzdWFsX3R5cGUpOwoKIApHZGtWaXN1YWwqIGdka192aXN1YWxfcmVmIChHZGtWaXN1YWwgKnZp c3VhbCk7CnZvaWQJICAgZ2RrX3Zpc3VhbF91bnJlZiAoR2RrVmlzdWFsICp2aXN1YWwpOwoKdm9p ZCBnZGtfcXVlcnlfZGVwdGhzCSAgICAoZ2ludAkgICAgKipkZXB0aHMsCgkJCSAgICAgZ2ludAkg ICAgICpjb3VudCk7CnZvaWQgZ2RrX3F1ZXJ5X3Zpc3VhbF90eXBlcyAoR2RrVmlzdWFsVHlwZSAg Kip2aXN1YWxfdHlwZXMsCgkJCSAgICAgZ2ludAkgICAgICpjb3VudCk7CgpHTGlzdCogZ2RrX2xp c3RfdmlzdWFscyAodm9pZCk7CgoKIAoKR2RrV2luZG93KiAgICBnZGtfd2luZG93X25ldwkgICAg IChHZGtXaW5kb3cJICAgICpwYXJlbnQsCgkJCQkgICAgICBHZGtXaW5kb3dBdHRyICphdHRyaWJ1 dGVzLAoJCQkJICAgICAgZ2ludAkgICAgIGF0dHJpYnV0ZXNfbWFzayk7Cgp2b2lkCSAgICAgIGdk a193aW5kb3dfZGVzdHJveSAgICAgKEdka1dpbmRvdwkgICAgKndpbmRvdyk7Ckdka1dpbmRvdyog ICAgZ2RrX3dpbmRvd19yZWYJICAgICAoR2RrV2luZG93CSAgICAqd2luZG93KTsKdm9pZAkgICAg ICBnZGtfd2luZG93X3VucmVmCSAgICAgKEdka1dpbmRvdwkgICAgKndpbmRvdyk7CgpHZGtXaW5k b3cqICAgIGdka193aW5kb3dfYXRfcG9pbnRlciAgKGdpbnQJICAgKndpbl94LAoJCQkJICAgICAg Z2ludAkgICAqd2luX3kpOwp2b2lkCSAgICAgIGdka193aW5kb3dfc2hvdwkgICAgIChHZGtXaW5k b3cJICAgKndpbmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19oaWRlCSAgICAgKEdka1dpbmRv dwkgICAqd2luZG93KTsKdm9pZAkgICAgICBnZGtfd2luZG93X3dpdGhkcmF3ICAgIChHZGtXaW5k b3cJICAgKndpbmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19tb3ZlCSAgICAgKEdka1dpbmRv dwkgICAqd2luZG93LAoJCQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHkp Owp2b2lkCSAgICAgIGdka193aW5kb3dfcmVzaXplCSAgICAgKEdka1dpbmRvdwkgICAqd2luZG93 LAoJCQkJICAgICAgZ2ludAkgICAgd2lkdGgsCgkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwp2 b2lkCSAgICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUgKEdka1dpbmRvdwkgICAqd2luZG93LAoJ CQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHksCgkJCQkgICAgICBnaW50 CSAgICB3aWR0aCwKCQkJCSAgICAgIGdpbnQJICAgIGhlaWdodCk7CnZvaWQJICAgICAgZ2RrX3dp bmRvd19yZXBhcmVudCAgICAoR2RrV2luZG93CSAgICp3aW5kb3csCgkJCQkgICAgICBHZGtXaW5k b3cJICAgKm5ld19wYXJlbnQsCgkJCQkgICAgICBnaW50CSAgICB4LAoJCQkJICAgICAgZ2ludAkg ICAgeSk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19jbGVhcgkgICAgIChHZGtXaW5kb3cJICAgKndp bmRvdyk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19jbGVhcl9hcmVhICAoR2RrV2luZG93CSAgICp3 aW5kb3csCgkJCQkgICAgICBnaW50CSAgICB4LAoJCQkJICAgICAgZ2ludAkgICAgeSwKCQkJCSAg ICAgIGdpbnQJICAgIHdpZHRoLAoJCQkJICAgICAgZ2ludAkgICAgaGVpZ2h0KTsKdm9pZAkgICAg ICBnZGtfd2luZG93X2NsZWFyX2FyZWFfZShHZGtXaW5kb3cJICAgKndpbmRvdywKCQkJCSAgICAg IGdpbnQJICAgIHgsCgkJCQkgICAgICBnaW50CSAgICB5LAoJCQkJICAgICAgZ2ludAkgICAgd2lk dGgsCgkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwp2b2lkCSAgICAgIGdka193aW5kb3dfY29w eV9hcmVhICAgKEdka1dpbmRvdwkgICAqd2luZG93LAoJCQkJICAgICAgR2RrR0MJICAgKmdjLAoJ CQkJICAgICAgZ2ludAkgICAgeCwKCQkJCSAgICAgIGdpbnQJICAgIHksCgkJCQkgICAgICBHZGtX aW5kb3cJICAgKnNvdXJjZV93aW5kb3csCgkJCQkgICAgICBnaW50CSAgICBzb3VyY2VfeCwKCQkJ CSAgICAgIGdpbnQJICAgIHNvdXJjZV95LAoJCQkJICAgICAgZ2ludAkgICAgd2lkdGgsCgkJCQkg ICAgICBnaW50CSAgICBoZWlnaHQpOwp2b2lkCSAgICAgIGdka193aW5kb3dfcmFpc2UJICAgICAo R2RrV2luZG93CSAgICp3aW5kb3cpOwp2b2lkCSAgICAgIGdka193aW5kb3dfbG93ZXIJICAgICAo R2RrV2luZG93CSAgICp3aW5kb3cpOwoKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF91c2VyX2Rh dGEJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgZ3BvaW50ZXIJICAgdXNlcl9kYXRhKTsK dm9pZAkgICAgICBnZGtfd2luZG93X3NldF9vdmVycmlkZV9yZWRpcmVjdChHZGtXaW5kb3cgICp3 aW5kb3csCgkJCQkJICAgICAgIGdib29sZWFuIG92ZXJyaWRlX3JlZGlyZWN0KTsKCnZvaWQJICAg ICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyCShHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCQkJIEdk a0ZpbHRlckZ1bmMJZnVuY3Rpb24sCgkJCQkJIGdwb2ludGVyCWRhdGEpOwp2b2lkCSAgICAgIGdk a193aW5kb3dfcmVtb3ZlX2ZpbHRlcgkoR2RrV2luZG93ICAgICAqd2luZG93LAoJCQkJCSBHZGtG aWx0ZXJGdW5jCWZ1bmN0aW9uLAoJCQkJCSBncG9pbnRlcglkYXRhKTsKCiAKCgoKCgp2b2lkIGdk a193aW5kb3dfc2hhcGVfY29tYmluZV9tYXNrIChHZGtXaW5kb3cJICAgICp3aW5kb3csCgkJCQkg ICAgR2RrQml0bWFwCSAgICAqc2hhcGVfbWFzaywKCQkJCSAgICBnaW50CSAgICAgb2Zmc2V0X3gs CgkJCQkgICAgZ2ludAkgICAgIG9mZnNldF95KTsKIAoKCgoKCgp2b2lkIGdka193aW5kb3dfc2V0 X2NoaWxkX3NoYXBlcyAoR2RrV2luZG93ICp3aW5kb3cpOwoKIAoKCgoKCgp2b2lkIGdka193aW5k b3dfbWVyZ2VfY2hpbGRfc2hhcGVzIChHZGtXaW5kb3cgKndpbmRvdyk7CgogCgoKCgoKZ2Jvb2xl YW4gZ2RrX3dpbmRvd19pc192aXNpYmxlICAgICAoR2RrV2luZG93ICp3aW5kb3cpOwpnYm9vbGVh biBnZGtfd2luZG93X2lzX3ZpZXdhYmxlICAgIChHZGtXaW5kb3cgKndpbmRvdyk7CgogCgoKZ2Jv b2xlYW4gZ2RrX3dpbmRvd19zZXRfc3RhdGljX2dyYXZpdGllcyAoR2RrV2luZG93ICp3aW5kb3cs CgkJCQkJICBnYm9vbGVhbiAgIHVzZV9zdGF0aWMpOyAgIAogCgoKCnZvaWQgZ2RrX2FkZF9jbGll bnRfbWVzc2FnZV9maWx0ZXIgKEdka0F0b20gICAgICAgbWVzc2FnZV90eXBlLAoJCQkJICAgIEdk a0ZpbHRlckZ1bmMgZnVuYywKCQkJCSAgICBncG9pbnRlciAgICAgIGRhdGEpOwoKIAoKR2RrRHJh Z0NvbnRleHQgKiBnZGtfZHJhZ19jb250ZXh0X25ldyAgICAgICAgKHZvaWQpOwp2b2lkICAgICAg ICAgICAgIGdka19kcmFnX2NvbnRleHRfcmVmICAgICAgICAoR2RrRHJhZ0NvbnRleHQgKmNvbnRl eHQpOwp2b2lkICAgICAgICAgICAgIGdka19kcmFnX2NvbnRleHRfdW5yZWYgICAgICAoR2RrRHJh Z0NvbnRleHQgKmNvbnRleHQpOwoKIAoKdm9pZCAgICAgICAgICAgICBnZGtfZHJhZ19zdGF0dXMg ICAgICAgIChHZGtEcmFnQ29udGV4dCAgICpjb250ZXh0LAoJCQkJICAgICAgICAgR2RrRHJhZ0Fj dGlvbiAgICAgYWN0aW9uLAoJCQkJCSBndWludDMyICAgICAgICAgICB0aW1lKTsKdm9pZCAgICAg ICAgICAgICBnZGtfZHJvcF9yZXBseSAgICAgICAgIChHZGtEcmFnQ29udGV4dCAgICpjb250ZXh0 LAoJCQkJCSBnYm9vbGVhbiAgICAgICAgICBvaywKCQkJCQkgZ3VpbnQzMiAgICAgICAgICAgdGlt ZSk7CnZvaWQgICAgICAgICAgICAgZ2RrX2Ryb3BfZmluaXNoICAgICAgICAoR2RrRHJhZ0NvbnRl eHQgICAqY29udGV4dCwKCQkJCQkgZ2Jvb2xlYW4gICAgICAgICAgc3VjY2VzcywKCQkJCQkgZ3Vp bnQzMiAgICAgICAgICAgdGltZSk7Ckdka0F0b20gICAgICAgICAgZ2RrX2RyYWdfZ2V0X3NlbGVj dGlvbiAoR2RrRHJhZ0NvbnRleHQgICAqY29udGV4dCk7CgogCgpHZGtEcmFnQ29udGV4dCAqIGdk a19kcmFnX2JlZ2luICAgICAgKEdka1dpbmRvdyAgICAgICp3aW5kb3csCgkJCQkgICAgICBHTGlz dCAgICAgICAgICAqdGFyZ2V0cyk7Cmd1aW50MzIgICAgICAgICBnZGtfZHJhZ19nZXRfcHJvdG9j b2wgKGd1aW50MzIgICAgICAgICAgeGlkLAoJCQkJICAgICAgIEdka0RyYWdQcm90b2NvbCAqcHJv dG9jb2wpOwp2b2lkICAgICAgICAgICAgIGdka19kcmFnX2ZpbmRfd2luZG93IChHZGtEcmFnQ29u dGV4dCAgICpjb250ZXh0LAoJCQkJICAgICAgIEdka1dpbmRvdyAgICAgICAqZHJhZ193aW5kb3cs CgkJCSAJICAgICAgIGdpbnQgICAgICAgICAgICAgeF9yb290LAoJCQkJICAgICAgIGdpbnQgICAg ICAgICAgICAgeV9yb290LAoJCQkJICAgICAgIEdka1dpbmRvdyAgICAgICoqZGVzdF93aW5kb3cs CgkJCQkgICAgICAgR2RrRHJhZ1Byb3RvY29sICpwcm90b2NvbCk7Cmdib29sZWFuICAgICAgICBn ZGtfZHJhZ19tb3Rpb24gICAgICAoR2RrRHJhZ0NvbnRleHQgKmNvbnRleHQsCgkJCQkgICAgICBH ZGtXaW5kb3cgICAgICAqZGVzdF93aW5kb3csCgkJCQkgICAgICBHZGtEcmFnUHJvdG9jb2wgcHJv dG9jb2wsCgkJCQkgICAgICBnaW50ICAgICAgICAgICAgeF9yb290LCAKCQkJCSAgICAgIGdpbnQg ICAgICAgICAgICB5X3Jvb3QsCgkJCQkgICAgICBHZGtEcmFnQWN0aW9uICAgc3VnZ2VzdGVkX2Fj dGlvbiwKCQkJCSAgICAgIEdka0RyYWdBY3Rpb24gICBwb3NzaWJsZV9hY3Rpb25zLAoJCQkJICAg ICAgZ3VpbnQzMiAgICAgICAgIHRpbWUpOwp2b2lkICAgICAgICAgICAgZ2RrX2RyYWdfZHJvcCAg ICAgICAgKEdka0RyYWdDb250ZXh0ICpjb250ZXh0LAoJCQkJICAgICAgZ3VpbnQzMiAgICAgICAg IHRpbWUpOwp2b2lkICAgICAgICAgICAgZ2RrX2RyYWdfYWJvcnQgICAgICAgKEdka0RyYWdDb250 ZXh0ICpjb250ZXh0LAoJCQkJICAgICAgZ3VpbnQzMiAgICAgICAgIHRpbWUpOwoKIAoKdm9pZAkg ICAgICBnZGtfd2luZG93X3NldF9oaW50cwkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBn aW50CQkgICB4LAoJCQkJCSAgZ2ludAkJICAgeSwKCQkJCQkgIGdpbnQJCSAgIG1pbl93aWR0aCwK CQkJCQkgIGdpbnQJCSAgIG1pbl9oZWlnaHQsCgkJCQkJICBnaW50CQkgICBtYXhfd2lkdGgsCgkJ CQkJICBnaW50CQkgICBtYXhfaGVpZ2h0LAoJCQkJCSAgZ2ludAkJICAgZmxhZ3MpOwp2b2lkICAg ICAgICAgIGdka193aW5kb3dfc2V0X2dlb21ldHJ5X2hpbnRzIChHZGtXaW5kb3cgICAgICAgICp3 aW5kb3csCgkJCQkJICAgICBHZGtHZW9tZXRyeSAgICAgICpnZW9tZXRyeSwKCQkJCQkgICAgIEdk a1dpbmRvd0hpbnRzICAgIGZsYWdzKTsKdm9pZCAgICAgICAgICBnZGtfc2V0X3NtX2NsaWVudF9p ZCAgICAgICAgIChjb25zdCBnY2hhciAqc21fY2xpZW50X2lkKTsKCgp2b2lkCSAgICAgIGdka193 aW5kb3dfc2V0X3RpdGxlCSAgIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgICBjb25zdCBn Y2hhcgkgICp0aXRsZSk7CnZvaWQgICAgICAgICAgZ2RrX3dpbmRvd19zZXRfcm9sZSAgICAgICAg ICAoR2RrV2luZG93ICAgICAgICp3aW5kb3csCgkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAqcm9s ZSk7CnZvaWQgICAgICAgICAgZ2RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvciAoR2RrV2luZG93 ICAgICAgICp3aW5kb3csIAoJCQkJCSAgICBHZGtXaW5kb3cgICAgICAgKmxlYWRlcik7CnZvaWQJ ICAgICAgZ2RrX3dpbmRvd19zZXRfYmFja2dyb3VuZAkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJ CQkJICBHZGtDb2xvcgkgICpjb2xvcik7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19zZXRfYmFja19w aXhtYXAgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBHZGtQaXhtYXAJICAqcGl4bWFwLAoJ CQkJCSAgZ2Jvb2xlYW4gICAgICAgICBwYXJlbnRfcmVsYXRpdmUpOwp2b2lkCSAgICAgIGdka193 aW5kb3dfc2V0X2N1cnNvcgkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBHZGtDdXJzb3IJ ICAqY3Vyc29yKTsKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF9jb2xvcm1hcAkgKEdka1dpbmRv dwkgICp3aW5kb3csCgkJCQkJICBHZGtDb2xvcm1hcAkgICpjb2xvcm1hcCk7CnZvaWQJICAgICAg Z2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhCSAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdw b2ludGVyCSAgKmRhdGEpOwp2b2lkCSAgICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5CSAoR2Rr V2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBnaW50CQkgICp5LAoJ CQkJCSAgZ2ludAkJICAqd2lkdGgsCgkJCQkJICBnaW50CQkgICpoZWlnaHQsCgkJCQkJICBnaW50 CQkgICpkZXB0aCk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19nZXRfcG9zaXRpb24JIChHZGtXaW5k b3cJICAqd2luZG93LAoJCQkJCSAgZ2ludAkJICAqeCwKCQkJCQkgIGdpbnQJCSAgKnkpOwp2b2lk CSAgICAgIGdka193aW5kb3dfZ2V0X3NpemUJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAg Z2ludAkJICAqd2lkdGgsCgkJCQkJICBnaW50CQkgICpoZWlnaHQpOwpHZGtWaXN1YWwqICAgIGdk a193aW5kb3dfZ2V0X3Zpc3VhbAkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpHZGtDb2xvcm1hcCog IGdka193aW5kb3dfZ2V0X2NvbG9ybWFwCSAoR2RrV2luZG93CSAgKndpbmRvdyk7Ckdka1dpbmRv d1R5cGUgZ2RrX3dpbmRvd19nZXRfdHlwZQkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpnaW50CSAg ICAgIGdka193aW5kb3dfZ2V0X29yaWdpbgkgKEdka1dpbmRvdwkgICp3aW5kb3csCgkJCQkJICBn aW50CQkgICp4LAoJCQkJCSAgZ2ludAkJICAqeSk7Cmdib29sZWFuICAgICAgZ2RrX3dpbmRvd19n ZXRfZGVza3JlbGF0aXZlX29yaWdpbiAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJ CSAgKngsCgkJCQkJICBnaW50CQkgICp5KTsKdm9pZAkgICAgICBnZGtfd2luZG93X2dldF9yb290 X29yaWdpbiAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBn aW50CQkgICp5KTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dldF9wb2ludGVyCSAoR2RrV2lu ZG93CSAgKndpbmRvdywKCQkJCQkgIGdpbnQJCSAgKngsCgkJCQkJICBnaW50CQkgICp5LAoJCQkJ CSAgR2RrTW9kaWZpZXJUeXBlICptYXNrKTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dldF9w YXJlbnQJIChHZGtXaW5kb3cJICAqd2luZG93KTsKR2RrV2luZG93KiAgICBnZGtfd2luZG93X2dl dF90b3BsZXZlbAkgKEdka1dpbmRvdwkgICp3aW5kb3cpOwpHTGlzdCoJICAgICAgZ2RrX3dpbmRv d19nZXRfY2hpbGRyZW4JIChHZGtXaW5kb3cJICAqd2luZG93KTsKR2RrRXZlbnRNYXNrICBnZGtf d2luZG93X2dldF9ldmVudHMJIChHZGtXaW5kb3cJICAqd2luZG93KTsKdm9pZAkgICAgICBnZGtf d2luZG93X3NldF9ldmVudHMJIChHZGtXaW5kb3cJICAqd2luZG93LAoJCQkJCSAgR2RrRXZlbnRN YXNrCSAgIGV2ZW50X21hc2spOwoKdm9pZAkgICAgICBnZGtfd2luZG93X3NldF9pY29uCSAoR2Rr V2luZG93CSAgKndpbmRvdywgCgkJCQkJICBHZGtXaW5kb3cJICAqaWNvbl93aW5kb3csCgkJCQkJ ICBHZGtQaXhtYXAJICAqcGl4bWFwLAoJCQkJCSAgR2RrQml0bWFwCSAgKm1hc2spOwp2b2lkCSAg ICAgIGdka193aW5kb3dfc2V0X2ljb25fbmFtZQkgKEdka1dpbmRvdwkgICp3aW5kb3csIAoJCQkJ CSAgY29uc3QgZ2NoYXIJICAqbmFtZSk7CnZvaWQJICAgICAgZ2RrX3dpbmRvd19zZXRfZ3JvdXAJ IChHZGtXaW5kb3cJICAqd2luZG93LCAKCQkJCQkgIEdka1dpbmRvdwkgICpsZWFkZXIpOwp2b2lk CSAgICAgIGdka193aW5kb3dfc2V0X2RlY29yYXRpb25zIChHZGtXaW5kb3cJICAqd2luZG93LAoJ CQkJCSAgR2RrV01EZWNvcmF0aW9uICBkZWNvcmF0aW9ucyk7CnZvaWQJICAgICAgZ2RrX3dpbmRv d19zZXRfZnVuY3Rpb25zCSAoR2RrV2luZG93CSAgKndpbmRvdywKCQkJCQkgIEdka1dNRnVuY3Rp b24JICAgZnVuY3Rpb25zKTsKR0xpc3QgKiAgICAgICBnZGtfd2luZG93X2dldF90b3BsZXZlbHMg ICAodm9pZCk7Cgp2b2lkICAgICAgICAgIGdka193aW5kb3dfcmVnaXN0ZXJfZG5kICAgIChHZGtX aW5kb3cgICAgICAgKndpbmRvdyk7Cgp2b2lkICAgICAgICAgIGdka19kcmF3YWJsZV9zZXRfZGF0 YSAgICAgIChHZGtEcmF3YWJsZSAgICAgKmRyYXdhYmxlLAoJCQkJCSAgY29uc3QgZ2NoYXIgICAg ICprZXksCgkJCQkJICBncG9pbnRlcgkgICBkYXRhLAoJCQkJCSAgR0Rlc3Ryb3lOb3RpZnkgICBk ZXN0cm95X2Z1bmMpOwoJCQkJCSAgCgogCgpHZGtDdXJzb3IqIGdka19jdXJzb3JfbmV3CQkgKEdk a0N1cnNvclR5cGUJICBjdXJzb3JfdHlwZSk7Ckdka0N1cnNvciogZ2RrX2N1cnNvcl9uZXdfZnJv bV9waXhtYXAJIChHZGtQaXhtYXAJICAqc291cmNlLAoJCQkJCSAgR2RrUGl4bWFwCSAgKm1hc2ss CgkJCQkJICBHZGtDb2xvcgkgICpmZywKCQkJCQkgIEdka0NvbG9yCSAgKmJnLAoJCQkJCSAgZ2lu dAkJICAgeCwKCQkJCQkgIGdpbnQJCSAgIHkpOwp2b2lkCSAgIGdka19jdXJzb3JfZGVzdHJveQkJ IChHZGtDdXJzb3IJICpjdXJzb3IpOwoKCiAKCkdka0dDKiBnZGtfZ2NfbmV3CQkgIChHZGtXaW5k b3cJICAgICp3aW5kb3cpOwpHZGtHQyogZ2RrX2djX25ld193aXRoX3ZhbHVlcwkgIChHZGtXaW5k b3cJICAgICp3aW5kb3csCgkJCQkgICBHZGtHQ1ZhbHVlcwkgICAgKnZhbHVlcywKCQkJCSAgIEdk a0dDVmFsdWVzTWFzayAgIHZhbHVlc19tYXNrKTsKR2RrR0MqIGdka19nY19yZWYJCSAgKEdka0dD CSAgICAqZ2MpOwp2b2lkICAgZ2RrX2djX3VucmVmCQkgIChHZGtHQwkgICAgKmdjKTsKdm9pZCAg IGdka19nY19kZXN0cm95CQkgIChHZGtHQwkgICAgKmdjKTsKdm9pZCAgIGdka19nY19nZXRfdmFs dWVzCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBHZGtHQ1ZhbHVlcwkgICAgKnZhbHVlcyk7CnZv aWQgICBnZGtfZ2Nfc2V0X2ZvcmVncm91bmQJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0Nv bG9yCSAgICAqY29sb3IpOwp2b2lkICAgZ2RrX2djX3NldF9iYWNrZ3JvdW5kCSAgKEdka0dDCSAg ICAqZ2MsCgkJCQkgICBHZGtDb2xvcgkgICAgKmNvbG9yKTsKdm9pZCAgIGdka19nY19zZXRfZm9u dAkJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0ZvbnQJICAgICpmb250KTsKdm9pZCAgIGdk a19nY19zZXRfZnVuY3Rpb24JICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka0Z1bmN0aW9uCSAg ICAgZnVuY3Rpb24pOwp2b2lkICAgZ2RrX2djX3NldF9maWxsCQkgIChHZGtHQwkgICAgKmdjLAoJ CQkJICAgR2RrRmlsbAkgICAgIGZpbGwpOwp2b2lkICAgZ2RrX2djX3NldF90aWxlCQkgIChHZGtH QwkgICAgKmdjLAoJCQkJICAgR2RrUGl4bWFwCSAgICAqdGlsZSk7CnZvaWQgICBnZGtfZ2Nfc2V0 X3N0aXBwbGUJICAoR2RrR0MJICAgICpnYywKCQkJCSAgIEdka1BpeG1hcAkgICAgKnN0aXBwbGUp Owp2b2lkICAgZ2RrX2djX3NldF90c19vcmlnaW4JICAoR2RrR0MJICAgICpnYywKCQkJCSAgIGdp bnQJCSAgICAgeCwKCQkJCSAgIGdpbnQJCSAgICAgeSk7CnZvaWQgICBnZGtfZ2Nfc2V0X2NsaXBf b3JpZ2luCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBnaW50CQkgICAgIHgsCgkJCQkgICBnaW50 CQkgICAgIHkpOwp2b2lkICAgZ2RrX2djX3NldF9jbGlwX21hc2sJICAoR2RrR0MJICAgICpnYywK CQkJCSAgIEdka0JpdG1hcAkgICAgKm1hc2spOwp2b2lkICAgZ2RrX2djX3NldF9jbGlwX3JlY3Rh bmdsZSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBHZGtSZWN0YW5nbGUJICAgICpyZWN0YW5nbGUp Owp2b2lkICAgZ2RrX2djX3NldF9jbGlwX3JlZ2lvbgkgIChHZGtHQwkgICAgKmdjLAoJCQkJICAg R2RrUmVnaW9uCSAgICAqcmVnaW9uKTsKdm9pZCAgIGdka19nY19zZXRfc3Vid2luZG93CSAgKEdk a0dDCSAgICAqZ2MsCgkJCQkgICBHZGtTdWJ3aW5kb3dNb2RlICBtb2RlKTsKdm9pZCAgIGdka19n Y19zZXRfZXhwb3N1cmVzCSAgKEdka0dDCSAgICAqZ2MsCgkJCQkgICBnYm9vbGVhbiAgICAgICAg ICBleHBvc3VyZXMpOwp2b2lkICAgZ2RrX2djX3NldF9saW5lX2F0dHJpYnV0ZXMgKEdka0dDCSAg ICAqZ2MsCgkJCQkgICBnaW50CQkgICAgIGxpbmVfd2lkdGgsCgkJCQkgICBHZGtMaW5lU3R5bGUJ ICAgICBsaW5lX3N0eWxlLAoJCQkJICAgR2RrQ2FwU3R5bGUJICAgICBjYXBfc3R5bGUsCgkJCQkg ICBHZGtKb2luU3R5bGUJICAgICBqb2luX3N0eWxlKTsKdm9pZCAgIGdka19nY19zZXRfZGFzaGVz ICAgICAgICAgIChHZGtHQyAgICAgICAgICAgICpnYywKCQkJCSAgIGdpbnQJICAgICAgICAgICAg IGRhc2hfb2Zmc2V0LAoJCQkJICAgZ2ludDggICAgICAgICAgICAgZGFzaF9saXN0W10sCgkJCQkg ICBnaW50ICAgICAgICAgICAgICBuKTsKdm9pZCAgIGdka19nY19jb3B5CQkgIChHZGtHQwkgICAg ICpkc3RfZ2MsCgkJCQkgICBHZGtHQwkgICAgICpzcmNfZ2MpOwoKCiAKCkdka1BpeG1hcCogZ2Rr X3BpeG1hcF9uZXcJCShHZGtXaW5kb3cgICp3aW5kb3csCgkJCQkJIGdpbnQJICAgICB3aWR0aCwK CQkJCQkgZ2ludAkgICAgIGhlaWdodCwKCQkJCQkgZ2ludAkgICAgIGRlcHRoKTsKR2RrQml0bWFw KiBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEJKEdka1dpbmRvdyAgICp3aW5kb3csCgkJCQkJ IGNvbnN0IGdjaGFyICpkYXRhLAoJCQkJCSBnaW50CSAgICAgIHdpZHRoLAoJCQkJCSBnaW50CSAg ICAgIGhlaWdodCk7Ckdka1BpeG1hcCogZ2RrX3BpeG1hcF9jcmVhdGVfZnJvbV9kYXRhCShHZGtX aW5kb3cgICAqd2luZG93LAoJCQkJCSBjb25zdCBnY2hhciAqZGF0YSwKCQkJCQkgZ2ludAkgICAg ICB3aWR0aCwKCQkJCQkgZ2ludAkgICAgICBoZWlnaHQsCgkJCQkJIGdpbnQJICAgICAgZGVwdGgs CgkJCQkJIEdka0NvbG9yICAgICpmZywKCQkJCQkgR2RrQ29sb3IgICAgKmJnKTsKR2RrUGl4bWFw KiBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbQkoR2RrV2luZG93ICAqd2luZG93LAoJCQkJCSBH ZGtCaXRtYXAgKiptYXNrLAoJCQkJCSBHZGtDb2xvciAgICp0cmFuc3BhcmVudF9jb2xvciwKCQkJ CQkgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKTsKR2RrUGl4bWFwKiBnZGtfcGl4bWFwX2NvbG9ybWFw X2NyZWF0ZV9mcm9tX3hwbSAoCgkJCQkJIEdka1dpbmRvdyAgICp3aW5kb3csCgkJCQkJIEdka0Nv bG9ybWFwICpjb2xvcm1hcCwKCQkJCQkgR2RrQml0bWFwICAqKm1hc2ssCgkJCQkJIEdka0NvbG9y ICAgICp0cmFuc3BhcmVudF9jb2xvciwKCQkJCQkgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKTsKR2Rr UGl4bWFwKiBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kIChHZGtXaW5kb3cgICp3aW5kb3cs CgkJCQkJIEdka0JpdG1hcCAqKm1hc2ssCgkJCQkJIEdka0NvbG9yICAgKnRyYW5zcGFyZW50X2Nv bG9yLAoJCQkJCSBnY2hhcgkgICAqKmRhdGEpOwpHZGtQaXhtYXAqIGdka19waXhtYXBfY29sb3Jt YXBfY3JlYXRlX2Zyb21feHBtX2QgKAoJCQkJCSBHZGtXaW5kb3cgICAqd2luZG93LAoJCQkJCSBH ZGtDb2xvcm1hcCAqY29sb3JtYXAsCgkJCQkJIEdka0JpdG1hcCAgKiptYXNrLAoJCQkJCSBHZGtD b2xvciAgICAqdHJhbnNwYXJlbnRfY29sb3IsCgkJCQkJIGdjaGFyICAgICAqKmRhdGEpOwpHZGtQ aXhtYXAgKmdka19waXhtYXBfcmVmCQkoR2RrUGl4bWFwICAqcGl4bWFwKTsKdm9pZAkgICBnZGtf cGl4bWFwX3VucmVmCQkoR2RrUGl4bWFwICAqcGl4bWFwKTsKCkdka0JpdG1hcCAqZ2RrX2JpdG1h cF9yZWYJCShHZGtCaXRtYXAgICpwaXhtYXApOwp2b2lkCSAgIGdka19iaXRtYXBfdW5yZWYJCShH ZGtCaXRtYXAgICpwaXhtYXApOwoKCiAKCkdka0ltYWdlKiBnZGtfaW1hZ2VfbmV3X2JpdG1hcChH ZGtWaXN1YWwgICAgICp2aXN1YWwsCgkJCQlncG9pbnRlciAgICAgIGRhdGEsCgkJCQlnaW50ICAg ICAgICAgIHdpZHRoLAoJCQkJZ2ludCAgICAgICAgICBoZWlnaHQpOwpHZGtJbWFnZSogIGdka19p bWFnZV9uZXcgICAgICAgKEdka0ltYWdlVHlwZSAgdHlwZSwKCQkJCUdka1Zpc3VhbCAgICAqdmlz dWFsLAoJCQkJZ2ludAkgICAgICB3aWR0aCwKCQkJCWdpbnQJICAgICAgaGVpZ2h0KTsKR2RrSW1h Z2UqICBnZGtfaW1hZ2VfZ2V0ICAgICAgIChHZGtXaW5kb3cgICAgKndpbmRvdywKCQkJCWdpbnQJ ICAgICAgeCwKCQkJCWdpbnQJICAgICAgeSwKCQkJCWdpbnQJICAgICAgd2lkdGgsCgkJCQlnaW50 CSAgICAgIGhlaWdodCk7CnZvaWQJICAgZ2RrX2ltYWdlX3B1dF9waXhlbCAoR2RrSW1hZ2UgICAg ICppbWFnZSwKCQkJCWdpbnQJICAgICAgeCwKCQkJCWdpbnQJICAgICAgeSwKCQkJCWd1aW50MzIJ ICAgICAgcGl4ZWwpOwpndWludDMyCSAgIGdka19pbWFnZV9nZXRfcGl4ZWwgKEdka0ltYWdlICAg ICAqaW1hZ2UsCgkJCQlnaW50CSAgICAgIHgsCgkJCQlnaW50CSAgICAgIHkpOwp2b2lkCSAgIGdk a19pbWFnZV9kZXN0cm95ICAgKEdka0ltYWdlICAgICAqaW1hZ2UpOwoKCiAKCkdka0NvbG9ybWFw KiBnZGtfY29sb3JtYXBfbmV3CSAgICAgICAgICAoR2RrVmlzdWFsICAgICAgKnZpc3VhbCwKCQkJ CQkgICBnYm9vbGVhbiAgICAgICAgYWxsb2NhdGUpOwpHZGtDb2xvcm1hcCogZ2RrX2NvbG9ybWFw X3JlZgkgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjbWFwKTsKdm9pZAkgICAgIGdka19jb2xv cm1hcF91bnJlZgkgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjbWFwKTsKCkdka0NvbG9ybWFw KiBnZGtfY29sb3JtYXBfZ2V0X3N5c3RlbQkgICh2b2lkKTsKZ2ludAkgICAgIGdka19jb2xvcm1h cF9nZXRfc3lzdGVtX3NpemUgKHZvaWQpOwoKdm9pZCAgICAgICAgIGdka19jb2xvcm1hcF9jaGFu Z2UgICAgICAgICAgKEdka0NvbG9ybWFwICAgICpjb2xvcm1hcCwKCQkJCQkgICBnaW50CQkgICBu Y29sb3JzKTsKCnZvaWQgICAgICAgICBnZGtfY29sb3JtYXBfc3luYyAgICAgICAgICAgIChHZGtD b2xvcm1hcCAgICAqY29sb3JtYXAsCgkJCQkJICAgZ2Jvb2xlYW4gICAgICAgIGZvcmNlKTsKZ2lu dCAgICAgICAgIGdka19jb2xvcm1hcF9hbGxvY19jb2xvcnMgICAgKEdka0NvbG9ybWFwICAgICpj b2xvcm1hcCwKCQkJCQkgICBHZGtDb2xvciAgICAgICAqY29sb3JzLAoJCQkJCSAgIGdpbnQgICAg ICAgICAgICBuY29sb3JzLAoJCQkJCSAgIGdib29sZWFuICAgICAgICB3cml0ZWFibGUsCgkJCQkJ ICAgZ2Jvb2xlYW4gICAgICAgIGJlc3RfbWF0Y2gsCgkJCQkJICAgZ2Jvb2xlYW4gICAgICAgKnN1 Y2Nlc3MpOwpnYm9vbGVhbiAgICAgZ2RrX2NvbG9ybWFwX2FsbG9jX2NvbG9yICAgICAoR2RrQ29s b3JtYXAgICAgKmNvbG9ybWFwLAoJCQkJCSAgIEdka0NvbG9yICAgICAgICpjb2xvciwKCQkJCQkg ICBnYm9vbGVhbiAgICAgICAgd3JpdGVhYmxlLAoJCQkJCSAgIGdib29sZWFuICAgICAgICBiZXN0 X21hdGNoKTsKdm9pZCAgICAgICAgIGdka19jb2xvcm1hcF9mcmVlX2NvbG9ycyAgICAgKEdka0Nv bG9ybWFwICAgICpjb2xvcm1hcCwKCQkJCQkgICBHZGtDb2xvciAgICAgICAqY29sb3JzLAoJCQkJ CSAgIGdpbnQgICAgICAgICAgICBuY29sb3JzKTsKCkdka1Zpc3VhbCogICBnZGtfY29sb3JtYXBf Z2V0X3Zpc3VhbCAgICAgIChHZGtDb2xvcm1hcCAgICAqY29sb3JtYXApOwoKR2RrQ29sb3IqICAg IGdka19jb2xvcl9jb3B5ICAgICAgICAgICAgICAgKGNvbnN0IEdka0NvbG9yICpjb2xvcik7CnZv aWQgICAgICAgICBnZGtfY29sb3JfZnJlZSAgICAgICAgICAgICAgIChHZGtDb2xvciAgICAgICAq Y29sb3IpOwoKZ2Jvb2xlYW4gICAgIGdka19jb2xvcl9wYXJzZQkgICAgICAgICAgKGNvbnN0IGdj aGFyICAgICpzcGVjLAoJCQkJCSAgIEdka0NvbG9yICAgICAgICpjb2xvcik7Cmd1aW50ICAgICAg ICBnZGtfY29sb3JfaGFzaCAgICAgICAgICAgICAgIChjb25zdCBHZGtDb2xvciAqY29sb3JhLAoJ CQkJCSAgIGNvbnN0IEdka0NvbG9yICpjb2xvcmIpOwpnYm9vbGVhbiAgICAgZ2RrX2NvbG9yX2Vx dWFsCSAgICAgICAgICAoY29uc3QgR2RrQ29sb3IgKmNvbG9yYSwKCQkJCQkgICBjb25zdCBHZGtD b2xvciAqY29sb3JiKTsKCgogCnZvaWQgICAgIGdka19jb2xvcnNfc3RvcmUgKEdka0NvbG9ybWFw CSpjb2xvcm1hcCwKCQkJICAgR2RrQ29sb3IJKmNvbG9ycywKCQkJICAgZ2ludAkJIG5jb2xvcnMp OwpnYm9vbGVhbiBnZGtfY29sb3JzX2FsbG9jIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAg IGdib29sZWFuICAgICAgY29udGlndW91cywKCQkJICAgZ3Vsb25nCSpwbGFuZXMsCgkJCSAgIGdp bnQJCSBucGxhbmVzLAoJCQkgICBndWxvbmcJKnBpeGVscywKCQkJICAgZ2ludAkJIG5waXhlbHMp Owp2b2lkICAgICBnZGtfY29sb3JzX2ZyZWUgIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAg IGd1bG9uZwkqcGl4ZWxzLAoJCQkgICBnaW50CQkgbnBpeGVscywKCQkJICAgZ3Vsb25nCSBwbGFu ZXMpOwpnYm9vbGVhbiBnZGtfY29sb3Jfd2hpdGUgIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJ CSAgIEdka0NvbG9yCSpjb2xvcik7Cmdib29sZWFuIGdka19jb2xvcl9ibGFjayAgKEdka0NvbG9y bWFwCSpjb2xvcm1hcCwKCQkJICAgR2RrQ29sb3IJKmNvbG9yKTsKZ2Jvb2xlYW4gZ2RrX2NvbG9y X2FsbG9jICAoR2RrQ29sb3JtYXAJKmNvbG9ybWFwLAoJCQkgICBHZGtDb2xvcgkqY29sb3IpOwpn Ym9vbGVhbiBnZGtfY29sb3JfY2hhbmdlIChHZGtDb2xvcm1hcAkqY29sb3JtYXAsCgkJCSAgIEdk a0NvbG9yCSpjb2xvcik7CgoKIAoKR2RrRm9udCogZ2RrX2ZvbnRfbG9hZAkgICAgKGNvbnN0IGdj aGFyICAgICpmb250X25hbWUpOwpHZGtGb250KiBnZGtfZm9udHNldF9sb2FkICAgKGNvbnN0IGdj aGFyICAgICpmb250c2V0X25hbWUpOwpHZGtGb250KiBnZGtfZm9udF9yZWYJICAgIChHZGtGb250 ICAgICAgICAqZm9udCk7CnZvaWQJIGdka19mb250X3VucmVmCSAgICAoR2RrRm9udCAgICAgICAg KmZvbnQpOwpnaW50CSBnZGtfZm9udF9pZAkgICAgKGNvbnN0IEdka0ZvbnQgICpmb250KTsKZ2Jv b2xlYW4gZ2RrX2ZvbnRfZXF1YWwJICAgIChjb25zdCBHZGtGb250ICAqZm9udGEsCgkJCSAgICAg Y29uc3QgR2RrRm9udCAgKmZvbnRiKTsKZ2ludAkgZ2RrX3N0cmluZ193aWR0aCAgIChHZGtGb250 ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAgICAqc3RyaW5nKTsKZ2ludAkgZ2Rr X3RleHRfd2lkdGgJICAgIChHZGtGb250ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hh ciAgICAqdGV4dCwKCQkJICAgICBnaW50ICAgICAgICAgICAgdGV4dF9sZW5ndGgpOwpnaW50CSBn ZGtfdGV4dF93aWR0aF93YyAgKEdka0ZvbnQgICAgICAgICpmb250LAoJCQkgICAgIGNvbnN0IEdk a1dDaGFyICp0ZXh0LAoJCQkgICAgIGdpbnQgICAgICAgICAgICB0ZXh0X2xlbmd0aCk7CmdpbnQJ IGdka19jaGFyX3dpZHRoCSAgICAoR2RrRm9udCAgICAgICAgKmZvbnQsCgkJCSAgICAgZ2NoYXIg ICAgICAgICAgIGNoYXJhY3Rlcik7CmdpbnQJIGdka19jaGFyX3dpZHRoX3djICAoR2RrRm9udCAg ICAgICAgKmZvbnQsCgkJCSAgICAgR2RrV0NoYXIgICAgICAgIGNoYXJhY3Rlcik7CmdpbnQJIGdk a19zdHJpbmdfbWVhc3VyZSAoR2RrRm9udCAgICAgICAgKmZvbnQsCgkJCSAgICAgY29uc3QgZ2No YXIgICAgKnN0cmluZyk7CmdpbnQJIGdka190ZXh0X21lYXN1cmUgICAoR2RrRm9udCAgICAgICAg KmZvbnQsCgkJCSAgICAgY29uc3QgZ2NoYXIgICAgKnRleHQsCgkJCSAgICAgZ2ludCAgICAgICAg ICAgIHRleHRfbGVuZ3RoKTsKZ2ludAkgZ2RrX2NoYXJfbWVhc3VyZSAgIChHZGtGb250ICAgICAg ICAqZm9udCwKCQkJICAgICBnY2hhciAgICAgICAgICAgY2hhcmFjdGVyKTsKZ2ludAkgZ2RrX3N0 cmluZ19oZWlnaHQgIChHZGtGb250ICAgICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAg ICAqc3RyaW5nKTsKZ2ludAkgZ2RrX3RleHRfaGVpZ2h0ICAgIChHZGtGb250ICAgICAgICAqZm9u dCwKCQkJICAgICBjb25zdCBnY2hhciAgICAqdGV4dCwKCQkJICAgICBnaW50ICAgICAgICAgICAg dGV4dF9sZW5ndGgpOwpnaW50CSBnZGtfY2hhcl9oZWlnaHQgICAgKEdka0ZvbnQgICAgICAgICpm b250LAoJCQkgICAgIGdjaGFyICAgICAgICAgICBjaGFyYWN0ZXIpOwoKdm9pZCAgICAgZ2RrX3Rl eHRfZXh0ZW50cyAgIChHZGtGb250ICAgICAqZm9udCwKCQkJICAgICBjb25zdCBnY2hhciAqdGV4 dCwKCQkJICAgICBnaW50ICAgICAgICAgdGV4dF9sZW5ndGgsCgkJCSAgICAgZ2ludCAgICAgICAg KmxiZWFyaW5nLAoJCQkgICAgIGdpbnQgICAgICAgICpyYmVhcmluZywKCQkJICAgICBnaW50ICAg ICAgICAqd2lkdGgsCgkJCSAgICAgZ2ludCAgICAgICAgKmFzY2VudCwKCQkJICAgICBnaW50ICAg ICAgICAqZGVzY2VudCk7CnZvaWQgICAgZ2RrX3RleHRfZXh0ZW50c193YyAoR2RrRm9udCAgICAg ICAgKmZvbnQsCgkJCSAgICAgY29uc3QgR2RrV0NoYXIgKnRleHQsCgkJCSAgICAgZ2ludCAgICAg ICAgICAgIHRleHRfbGVuZ3RoLAoJCQkgICAgIGdpbnQgICAgICAgICAgICpsYmVhcmluZywKCQkJ ICAgICBnaW50ICAgICAgICAgICAqcmJlYXJpbmcsCgkJCSAgICAgZ2ludCAgICAgICAgICAgKndp ZHRoLAoJCQkgICAgIGdpbnQgICAgICAgICAgICphc2NlbnQsCgkJCSAgICAgZ2ludCAgICAgICAg ICAgKmRlc2NlbnQpOwp2b2lkICAgICBnZGtfc3RyaW5nX2V4dGVudHMgKEdka0ZvbnQgICAgICpm b250LAoJCQkgICAgIGNvbnN0IGdjaGFyICpzdHJpbmcsCgkJCSAgICAgZ2ludCAgICAgICAgKmxi ZWFyaW5nLAoJCQkgICAgIGdpbnQgICAgICAgICpyYmVhcmluZywKCQkJICAgICBnaW50ICAgICAg ICAqd2lkdGgsCgkJCSAgICAgZ2ludCAgICAgICAgKmFzY2VudCwKCQkJICAgICBnaW50ICAgICAg ICAqZGVzY2VudCk7CgogCgp2b2lkIGdka19kcmF3X3BvaW50CSAoR2RrRHJhd2FibGUgICpkcmF3 YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJeSk7 CnZvaWQgZ2RrX2RyYXdfbGluZQkgKEdka0RyYXdhYmxlICAqZHJhd2FibGUsCgkJCSAgR2RrR0MJ ICAgICAgICpnYywKCQkJICBnaW50CQl4MSwKCQkJICBnaW50CQl5MSwKCQkJICBnaW50CQl4MiwK CQkJICBnaW50CQl5Mik7CnZvaWQgZ2RrX2RyYXdfcmVjdGFuZ2xlCSAoR2RrRHJhd2FibGUgICpk cmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIGdpbnQJCWZpbGxlZCwKCQkJICBn aW50CQl4LAoJCQkgIGdpbnQJCXksCgkJCSAgZ2ludAkJd2lkdGgsCgkJCSAgZ2ludAkJaGVpZ2h0 KTsKdm9pZCBnZGtfZHJhd19hcmMJIChHZGtEcmF3YWJsZSAgKmRyYXdhYmxlLAoJCQkgIEdka0dD CSAgICAgICAqZ2MsCgkJCSAgZ2ludAkJZmlsbGVkLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJ eSwKCQkJICBnaW50CQl3aWR0aCwKCQkJICBnaW50CQloZWlnaHQsCgkJCSAgZ2ludAkJYW5nbGUx LAoJCQkgIGdpbnQJCWFuZ2xlMik7CnZvaWQgZ2RrX2RyYXdfcG9seWdvbgkgKEdka0RyYXdhYmxl ICAqZHJhd2FibGUsCgkJCSAgR2RrR0MJICAgICAgICpnYywKCQkJICBnaW50CQlmaWxsZWQsCgkJ CSAgR2RrUG9pbnQgICAgICpwb2ludHMsCgkJCSAgZ2ludAkJbnBvaW50cyk7CnZvaWQgZ2RrX2Ry YXdfc3RyaW5nCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtGb250ICAgICAgKmZv bnQsCgkJCSAgR2RrR0MJICAgICAgICpnYywKCQkJICBnaW50CQl4LAoJCQkgIGdpbnQJCXksCgkJ CSAgY29uc3QgZ2NoYXIgICpzdHJpbmcpOwp2b2lkIGdka19kcmF3X3RleHQJIChHZGtEcmF3YWJs ZSAgKmRyYXdhYmxlLAoJCQkgIEdka0ZvbnQgICAgICAqZm9udCwKCQkJICBHZGtHQwkgICAgICAg KmdjLAoJCQkgIGdpbnQJCXgsCgkJCSAgZ2ludAkJeSwKCQkJICBjb25zdCBnY2hhciAgKnRleHQs CgkJCSAgZ2ludAkJdGV4dF9sZW5ndGgpOwp2b2lkIGdka19kcmF3X3RleHRfd2MJIChHZGtEcmF3 YWJsZQkgKmRyYXdhYmxlLAoJCQkgIEdka0ZvbnQJICpmb250LAoJCQkgIEdka0dDCQkgKmdjLAoJ CQkgIGdpbnQJCSAgeCwKCQkJICBnaW50CQkgIHksCgkJCSAgY29uc3QgR2RrV0NoYXIgKnRleHQs CgkJCSAgZ2ludAkJICB0ZXh0X2xlbmd0aCk7CnZvaWQgZ2RrX2RyYXdfcGl4bWFwCSAoR2RrRHJh d2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIEdka0RyYXdhYmxl ICAqc3JjLAoJCQkgIGdpbnQJCXhzcmMsCgkJCSAgZ2ludAkJeXNyYywKCQkJICBnaW50CQl4ZGVz dCwKCQkJICBnaW50CQl5ZGVzdCwKCQkJICBnaW50CQl3aWR0aCwKCQkJICBnaW50CQloZWlnaHQp Owp2b2lkIGdka19kcmF3X2ltYWdlCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtH QwkgICAgICAgKmdjLAoJCQkgIEdka0ltYWdlICAgICAqaW1hZ2UsCgkJCSAgZ2ludAkJeHNyYywK CQkJICBnaW50CQl5c3JjLAoJCQkgIGdpbnQJCXhkZXN0LAoJCQkgIGdpbnQJCXlkZXN0LAoJCQkg IGdpbnQJCXdpZHRoLAoJCQkgIGdpbnQJCWhlaWdodCk7CnZvaWQgZ2RrX2RyYXdfcG9pbnRzCSAo R2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkgIEdka1Bv aW50ICAgICAqcG9pbnRzLAoJCQkgIGdpbnQJCW5wb2ludHMpOwp2b2lkIGdka19kcmF3X3NlZ21l bnRzCSAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKCQkJICBHZGtHQwkgICAgICAgKmdjLAoJCQkg IEdka1NlZ21lbnQgICAqc2VncywKCQkJICBnaW50CQluc2Vncyk7CnZvaWQgZ2RrX2RyYXdfbGlu ZXMgICAgICAoR2RrRHJhd2FibGUgICpkcmF3YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBHZGtHQyAgICAgICAgKmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdka1BvaW50ICAg ICAqcG9pbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgbnBvaW50 cyk7CiAKCgoKIAoKZ2Jvb2xlYW4gICBnZGtfc2VsZWN0aW9uX293bmVyX3NldCAoR2RrV2luZG93 CSAqb3duZXIsCgkJCQkgICAgR2RrQXRvbQkgIHNlbGVjdGlvbiwKCQkJCSAgICBndWludDMyCSAg dGltZSwKCQkJCSAgICBnaW50CSAgc2VuZF9ldmVudCk7Ckdka1dpbmRvdyogZ2RrX3NlbGVjdGlv bl9vd25lcl9nZXQgKEdka0F0b20JICBzZWxlY3Rpb24pOwp2b2lkCSAgIGdka19zZWxlY3Rpb25f Y29udmVydCAgIChHZGtXaW5kb3cJICpyZXF1ZXN0b3IsCgkJCQkgICAgR2RrQXRvbQkgIHNlbGVj dGlvbiwKCQkJCSAgICBHZGtBdG9tCSAgdGFyZ2V0LAoJCQkJICAgIGd1aW50MzIJICB0aW1lKTsK Z2Jvb2xlYW4gICBnZGtfc2VsZWN0aW9uX3Byb3BlcnR5X2dldCAoR2RrV2luZG93ICAqcmVxdWVz dG9yLAoJCQkJICAgICAgIGd1Y2hhcgkgKipkYXRhLAoJCQkJICAgICAgIEdka0F0b20JICAqcHJv cF90eXBlLAoJCQkJICAgICAgIGdpbnQJICAqcHJvcF9mb3JtYXQpOwp2b2lkCSAgIGdka19zZWxl Y3Rpb25fc2VuZF9ub3RpZnkgKGd1aW50MzIJICAgIHJlcXVlc3RvciwKCQkJCSAgICAgIEdka0F0 b20JICAgIHNlbGVjdGlvbiwKCQkJCSAgICAgIEdka0F0b20JICAgIHRhcmdldCwKCQkJCSAgICAg IEdka0F0b20JICAgIHByb3BlcnR5LAoJCQkJICAgICAgZ3VpbnQzMgkgICAgdGltZSk7CgpnaW50 ICAgICAgIGdka190ZXh0X3Byb3BlcnR5X3RvX3RleHRfbGlzdCAoR2RrQXRvbSBlbmNvZGluZywg Z2ludCBmb3JtYXQsCgkJCQkJICAgZ3VjaGFyICp0ZXh0LCBnaW50IGxlbmd0aCwKCQkJCQkgICBn Y2hhciAqKipsaXN0KTsKdm9pZAkgICBnZGtfZnJlZV90ZXh0X2xpc3QJCSAgKGdjaGFyICoqbGlz dCk7CmdpbnQgICAgICAgZ2RrX3N0cmluZ190b19jb21wb3VuZF90ZXh0CSAgKGNvbnN0IGdjaGFy ICpzdHIsCgkJCQkJICAgR2RrQXRvbSAqZW5jb2RpbmcsIGdpbnQgKmZvcm1hdCwKCQkJCQkgICBn dWNoYXIgKipjdGV4dCwgZ2ludCAqbGVuZ3RoKTsKdm9pZAkgICBnZGtfZnJlZV9jb21wb3VuZF90 ZXh0CSAgKGd1Y2hhciAqY3RleHQpOwoKIAoKR2RrQXRvbSAgZ2RrX2F0b21faW50ZXJuICAgICAo Y29uc3QgZ2NoYXIgICphdG9tX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp bnQgICAgICAgICAgb25seV9pZl9leGlzdHMpOwpnY2hhciogICBnZGtfYXRvbV9uYW1lICAgICAg IChHZGtBdG9tICAgICAgIGF0b20pOwpnYm9vbGVhbiBnZGtfcHJvcGVydHlfZ2V0ICAgIChHZGtX aW5kb3cgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAg ICAgICBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAgICAg ICB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgIG9mZnNl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICBsZW5ndGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgcGRlbGV0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAgICAgICphY3R1YWxfcHJvcGVydHlfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICphY3R1YWxfZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgKmFjdHVhbF9s ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1Y2hhciAgICAgICoqZGF0YSk7 CnZvaWQgICAgIGdka19wcm9wZXJ0eV9jaGFuZ2UgKEdka1dpbmRvdyAgICAqd2luZG93LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtBdG9tICAgICAgIHByb3BlcnR5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHZGtBdG9tICAgICAgIHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHZGtQcm9wTW9kZSAgIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGd1Y2hhciAgICAgICAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu dCAgICAgICAgICBuZWxlbWVudHMpOwp2b2lkICAgICBnZGtfcHJvcGVydHlfZGVsZXRlIChHZGtX aW5kb3cgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrQXRvbSAg ICAgICBwcm9wZXJ0eSk7CgoKCiAKCmdib29sZWFuIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0IChH ZGtSZWN0YW5nbGUgKnNyYzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtS ZWN0YW5nbGUgKnNyYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0 YW5nbGUgKmRlc3QpOwp2b2lkICAgICBnZGtfcmVjdGFuZ2xlX3VuaW9uICAgICAoR2RrUmVjdGFu Z2xlICpzcmMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xl ICpzcmMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlICpk ZXN0KTsKCiAKCnZvaWQgICAgICAgICAgZ2RrX2lucHV0X2luaXQgICAgICAgICAgICAgICAgICh2 b2lkKTsKdm9pZCAgICAgICAgICBnZGtfaW5wdXRfZXhpdCAgICAgICAgICAgICAgICAgKHZvaWQp OwpHTGlzdCAqICAgICAgIGdka19pbnB1dF9saXN0X2RldmljZXMgICAgICAgICAodm9pZCk7CnZv aWQgICAgICAgICAgZ2RrX2lucHV0X3NldF9leHRlbnNpb25fZXZlbnRzIChHZGtXaW5kb3cgICAg ICAgICp3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnaW50ICAgICAgICAgICAgICBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR2RrRXh0ZW5zaW9uTW9kZSAgbW9kZSk7CnZvaWQgICAgICAgICAgZ2Rr X2lucHV0X3NldF9zb3VyY2UgICAgICAgICAgIChndWludDMyICAgICAgICAgICBkZXZpY2VpZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0lucHV0U291 cmNlICAgIHNvdXJjZSk7Cmdib29sZWFuICAgICAgZ2RrX2lucHV0X3NldF9tb2RlICAgICAgICAg ICAgIChndWludDMyICAgICAgICAgICBkZXZpY2VpZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdka0lucHV0TW9kZSAgICAgIG1vZGUpOwp2b2lkICAgICAg ICAgIGdka19pbnB1dF9zZXRfYXhlcyAgICAgICAgICAgICAoZ3VpbnQzMiAgICAgICAgICAgZGV2 aWNlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtB eGlzVXNlICAgICAgICpheGVzKTsKdm9pZCAgICAgICAgICBnZGtfaW5wdXRfc2V0X2tleSAgICAg ICAgICAgICAgKGd1aW50MzIgICAgICAgICAgIGRldmljZWlkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAg ICBrZXl2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH ZGtNb2RpZmllclR5cGUgICBtb2RpZmllcnMpOwp2b2lkICAgICAgICAgIGdka19pbnB1dF93aW5k b3dfZ2V0X3BvaW50ZXIgICAoR2RrV2luZG93ICAgICAgICAqd2luZG93LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgZGV2aWNl aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91Ymxl ICAgICAgICAgICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2RvdWJsZSAgICAgICAgICAqeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdkb3VibGUgICAgICAgICAgKnByZXNzdXJlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAqeHRpbHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAg ICAgICp5dGlsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdka01vZGlmaWVyVHlwZSAgKm1hc2spOwpHZGtUaW1lQ29vcmQgKmdka19pbnB1dF9tb3Rpb25f ZXZlbnRzICAgICAgICAoR2RrV2luZG93ICAgICAgICAqd2luZG93LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgZGV2aWNlaWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAg ICAgICAgICBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGd1aW50MzIgICAgICAgICAgIHN0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICpuZXZlbnRzX3JldHVybik7CgogCgoK Z2Jvb2xlYW4gICAgIGdka19pbV9yZWFkeQkgICAodm9pZCk7Cgp2b2lkICAgICAgICAgZ2RrX2lt X2JlZ2luCSAgIChHZGtJQyAgICAgICAgICAgICAgICppYywgCgkJCQkgICAgR2RrV2luZG93ICAg ICAgICAgICAqd2luZG93KTsKdm9pZCAgICAgICAgIGdka19pbV9lbmQJCSAgICh2b2lkKTsKR2Rr SU1TdHlsZSAgIGdka19pbV9kZWNpZGVfc3R5bGUgICAoR2RrSU1TdHlsZSAgICAgICAgICAgc3Vw cG9ydGVkX3N0eWxlKTsKR2RrSU1TdHlsZSAgIGdka19pbV9zZXRfYmVzdF9zdHlsZSAoR2RrSU1T dHlsZSAgICAgICAgICAgYmVzdF9hbGxvd2VkX3N0eWxlKTsKCkdka0lDKiAgICAgICBnZGtfaWNf bmV3CQkgICAoR2RrSUNBdHRyIAkJKmF0dHIsCgkJCQkgICAgR2RrSUNBdHRyaWJ1dGVzVHlwZSBt YXNrKTsKdm9pZCAgICAgICAgIGdka19pY19kZXN0cm95CSAgIChHZGtJQyAgICAgICAgICAgICAg ICppYyk7Ckdka0lNU3R5bGUgICBnZGtfaWNfZ2V0X3N0eWxlCSAgIChHZGtJQyAgICAgICAgICAg ICAgICppYyk7Ckdka0V2ZW50TWFzayBnZGtfaWNfZ2V0X2V2ZW50cyAgICAgKEdka0lDICAgICAg ICAgICAgICAgKmljKTsKCkdka0lDQXR0ciogICBnZGtfaWNfYXR0cl9uZXcgICAgICAgKHZvaWQp Owp2b2lkICAgICAgICAgZ2RrX2ljX2F0dHJfZGVzdHJveSAgIChHZGtJQ0F0dHIgKmF0dHIpOwoK R2RrSUNBdHRyaWJ1dGVzVHlwZSAgZ2RrX2ljX3NldF9hdHRyIChHZGtJQyAgICAgICAgICAgICAg KmljLCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrSUNBdHRyICAg ICAgICAgICphdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0lD QXR0cmlidXRlc1R5cGUgbWFzayk7Ckdka0lDQXR0cmlidXRlc1R5cGUgIGdka19pY19nZXRfYXR0 ciAoR2RrSUMgICAgICAgICAgICAgICppYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2RrSUNBdHRyICAgICAgICAgICphdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdka0lDQXR0cmlidXRlc1R5cGUgbWFzayk7CgogCgpnY2hhciAgICAg Kmdka193Y3N0b21icyAgICAgICAgICAoY29uc3QgR2RrV0NoYXIgICAqc3JjKTsKZ2ludCAgICAg ICBnZGtfbWJzdG93Y3MgICAgICAgICAgKEdka1dDaGFyICAgICAgICAgKmRlc3QsCgkJCQkgIGNv bnN0IGdjaGFyICAgICAgKnNyYywKCQkJCSAgZ2ludCAgICAgICAgICAgICAgZGVzdF9tYXgpOwoK CiAKCkdka0NvbG9yQ29udGV4dCAqZ2RrX2NvbG9yX2NvbnRleHRfbmV3CQkJICAoR2RrVmlzdWFs ICAgKnZpc3VhbCwKCQkJCQkJCSAgIEdka0NvbG9ybWFwICpjb2xvcm1hcCk7CgpHZGtDb2xvckNv bnRleHQgKmdka19jb2xvcl9jb250ZXh0X25ld19tb25vCQkgIChHZGtWaXN1YWwgICAqdmlzdWFs LAoJCQkJCQkJICAgR2RrQ29sb3JtYXAgKmNvbG9ybWFwKTsKCnZvaWQJCSBnZGtfY29sb3JfY29u dGV4dF9mcmVlCQkJICAoR2RrQ29sb3JDb250ZXh0ICpjYyk7CgpndWxvbmcJCSBnZGtfY29sb3Jf Y29udGV4dF9nZXRfcGl4ZWwJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBndXNo b3J0CSAgICByZWQsCgkJCQkJCQkgICBndXNob3J0CSAgICBncmVlbiwKCQkJCQkJCSAgIGd1c2hv cnQJICAgIGJsdWUsCgkJCQkJCQkgICBnaW50CQkgICAqZmFpbGVkKTsKdm9pZAkJIGdka19jb2xv cl9jb250ZXh0X2dldF9waXhlbHMJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBn dXNob3J0CSAgICpyZWRzLAoJCQkJCQkJICAgZ3VzaG9ydAkgICAqZ3JlZW5zLAoJCQkJCQkJICAg Z3VzaG9ydAkgICAqYmx1ZXMsCgkJCQkJCQkgICBnaW50CQkgICAgbmNvbG9ycywKCQkJCQkJCSAg IGd1bG9uZwkgICAqY29sb3JzLAoJCQkJCQkJICAgZ2ludAkJICAgKm5hbGxvY2F0ZWQpOwp2b2lk CQkgZ2RrX2NvbG9yX2NvbnRleHRfZ2V0X3BpeGVsc19pbmNyZW1lbnRhbCAoR2RrQ29sb3JDb250 ZXh0ICpjYywKCQkJCQkJCSAgIGd1c2hvcnQJICAgKnJlZHMsCgkJCQkJCQkgICBndXNob3J0CSAg ICpncmVlbnMsCgkJCQkJCQkgICBndXNob3J0CSAgICpibHVlcywKCQkJCQkJCSAgIGdpbnQJCSAg ICBuY29sb3JzLAoJCQkJCQkJICAgZ2ludAkJICAgKnVzZWQsCgkJCQkJCQkgICBndWxvbmcJICAg KmNvbG9ycywKCQkJCQkJCSAgIGdpbnQJCSAgICpuYWxsb2NhdGVkKTsKCmdpbnQJCSBnZGtfY29s b3JfY29udGV4dF9xdWVyeV9jb2xvcgkJICAoR2RrQ29sb3JDb250ZXh0ICpjYywKCQkJCQkJCSAg IEdka0NvbG9yCSAgICpjb2xvcik7CmdpbnQJCSBnZGtfY29sb3JfY29udGV4dF9xdWVyeV9jb2xv cnMJCSAgKEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBHZGtDb2xvcgkgICAqY29sb3Jz LAoJCQkJCQkJICAgZ2ludAkJICAgIG51bV9jb2xvcnMpOwoKZ2ludAkJIGdka19jb2xvcl9jb250 ZXh0X2FkZF9wYWxldHRlCQkgIChHZGtDb2xvckNvbnRleHQgKmNjLAoJCQkJCQkJICAgR2RrQ29s b3IJICAgKnBhbGV0dGUsCgkJCQkJCQkgICBnaW50CQkgICAgbnVtX3BhbGV0dGUpOwoKdm9pZAkJ IGdka19jb2xvcl9jb250ZXh0X2luaXRfZGl0aGVyCQkgIChHZGtDb2xvckNvbnRleHQgKmNjKTsK dm9pZAkJIGdka19jb2xvcl9jb250ZXh0X2ZyZWVfZGl0aGVyCQkgIChHZGtDb2xvckNvbnRleHQg KmNjKTsKCmd1bG9uZwkJIGdka19jb2xvcl9jb250ZXh0X2dldF9waXhlbF9mcm9tX3BhbGV0dGUg KEdka0NvbG9yQ29udGV4dCAqY2MsCgkJCQkJCQkgICBndXNob3J0CSAgICpyZWQsCgkJCQkJCQkg ICBndXNob3J0CSAgICpncmVlbiwKCQkJCQkJCSAgIGd1c2hvcnQJICAgKmJsdWUsCgkJCQkJCQkg ICBnaW50CQkgICAqZmFpbGVkKTsKZ3VjaGFyCQkgZ2RrX2NvbG9yX2NvbnRleHRfZ2V0X2luZGV4 X2Zyb21fcGFsZXR0ZSAoR2RrQ29sb3JDb250ZXh0ICpjYywKCQkJCQkJCSAgIGdpbnQJCSAgICpy ZWQsCgkJCQkJCQkgICBnaW50CQkgICAqZ3JlZW4sCgkJCQkJCQkgICBnaW50CQkgICAqYmx1ZSwK CQkJCQkJCSAgIGdpbnQJCSAgICpmYWlsZWQpOwogCgoKR2RrUmVnaW9uKiAgICAgZ2RrX3JlZ2lv bl9uZXcJICAgICh2b2lkKTsKdm9pZAkgICAgICAgZ2RrX3JlZ2lvbl9kZXN0cm95ICAgKEdka1Jl Z2lvbgkgICAqcmVnaW9uKTsKCnZvaWQJICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goR2Rr UmVnaW9uICAgICpyZWdpb24sCgkJCQkgICAgICBHZGtSZWN0YW5nbGUgKnJlY3RhbmdsZSk7Cgpn Ym9vbGVhbiAgICAgICBnZGtfcmVnaW9uX2VtcHR5CSAgICAoR2RrUmVnaW9uCSAgICpyZWdpb24p OwpnYm9vbGVhbiAgICAgICBnZGtfcmVnaW9uX2VxdWFsCSAgICAoR2RrUmVnaW9uCSAgICpyZWdp b24xLAoJCQkJICAgICBHZGtSZWdpb24JICAgKnJlZ2lvbjIpOwpnYm9vbGVhbiAgICAgICBnZGtf cmVnaW9uX3BvaW50X2luICAoR2RrUmVnaW9uCSAgICpyZWdpb24sCgkJCQkgICAgIGludAkJICAg eCwKCQkJCSAgICAgaW50CQkgICB5KTsKR2RrT3ZlcmxhcFR5cGUgZ2RrX3JlZ2lvbl9yZWN0X2lu ICAgKEdka1JlZ2lvbgkgICAqcmVnaW9uLAoJCQkJICAgICBHZGtSZWN0YW5nbGUgICpyZWN0KTsK Ckdka1JlZ2lvbiogICAgIGdka19yZWdpb25fcG9seWdvbiAgIChHZGtQb2ludCAgICAgICpwb2lu dHMsCgkJCQkgICAgIGdpbnQgICAgICAgICAgIG5wb2ludHMsCgkJCQkgICAgIEdka0ZpbGxSdWxl ICAgIGZpbGxfcnVsZSk7Cgp2b2lkCSAgICAgICBnZGtfcmVnaW9uX29mZnNldCAgIChHZGtSZWdp b24JICAgKnJlZ2lvbiwKCQkJCSAgICBnaW50CSAgIGR4LAoJCQkJICAgIGdpbnQJICAgZHkpOwp2 b2lkCSAgICAgICBnZGtfcmVnaW9uX3NocmluayAgIChHZGtSZWdpb24JICAgKnJlZ2lvbiwKCQkJ CSAgICBnaW50CSAgIGR4LAoJCQkJICAgIGdpbnQJICAgZHkpOwoKR2RrUmVnaW9uKiAgICBnZGtf cmVnaW9uX3VuaW9uX3dpdGhfcmVjdCAgKEdka1JlZ2lvbgkgICpyZWdpb24sCgkJCQkJICAgR2Rr UmVjdGFuZ2xlCSAgKnJlY3QpOwpHZGtSZWdpb24qICAgIGdka19yZWdpb25zX2ludGVyc2VjdAkg IChHZGtSZWdpb24JICAqc291cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291cmNlMik7Ckdk a1JlZ2lvbiogICAgZ2RrX3JlZ2lvbnNfdW5pb24JCSAgKEdka1JlZ2lvbgkgICpzb3VyY2UxLAoJ CQkJCSAgIEdka1JlZ2lvbgkgICpzb3VyY2UyKTsKR2RrUmVnaW9uKiAgICBnZGtfcmVnaW9uc19z dWJ0cmFjdAkgIChHZGtSZWdpb24JICAqc291cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291 cmNlMik7Ckdka1JlZ2lvbiogICAgZ2RrX3JlZ2lvbnNfeG9yCQkgIChHZGtSZWdpb24JICAqc291 cmNlMSwKCQkJCQkgICBHZGtSZWdpb24JICAqc291cmNlMik7CgogCnZvaWQgICAgIGdka19ldmVu dF9zZW5kX2NsaWVudG1lc3NhZ2VfdG9hbGwgKEdka0V2ZW50ICAgICpldmVudCk7Cmdib29sZWFu IGdka19ldmVudF9zZW5kX2NsaWVudF9tZXNzYWdlIChHZGtFdmVudCAgICAqZXZlbnQsCgkJCQkJ Z3VpbnQzMiAgICAgIHhpZCk7CgogCgpnY2hhciogICBnZGtfa2V5dmFsX25hbWUJCSAgKGd1aW50 CWtleXZhbCk7Cmd1aW50ICAgIGdka19rZXl2YWxfZnJvbV9uYW1lCQkgIChjb25zdCBnY2hhciAq a2V5dmFsX25hbWUpOwpndWludCAgICBnZGtfa2V5dmFsX3RvX3VwcGVyCQkgIChndWludAlrZXl2 YWwpOwpndWludCAgICBnZGtfa2V5dmFsX3RvX2xvd2VyCQkgIChndWludAlrZXl2YWwpOwpnYm9v bGVhbiBnZGtfa2V5dmFsX2lzX3VwcGVyCQkgIChndWludAlrZXl2YWwpOwpnYm9vbGVhbiBnZGtf a2V5dmFsX2lzX2xvd2VyCQkgIChndWludAlrZXl2YWwpOwoKIAoKCmV4dGVybiBHTXV0ZXggKmdk a190aHJlYWRzX211dGV4OwoKdm9pZCAgICAgZ2RrX3RocmVhZHNfZW50ZXIgICAgICAgICAgICAg ICAgKHZvaWQpOwp2b2lkICAgICBnZGtfdGhyZWFkc19sZWF2ZSAgICAgICAgICAgICAgICAodm9p ZCk7CgoKCgoKCgoKCgoKCgoKCgp9CgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2Rr L2dka3JnYi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7 CgoKdHlwZWRlZiBzdHJ1Y3QgX0dka1JnYkNtYXAgR2RrUmdiQ21hcDsKCnN0cnVjdCBfR2RrUmdi Q21hcCB7CiAgZ3VpbnQzMiBjb2xvcnNbMjU2XTsKICBndWNoYXIgbHV0WzI1Nl07ICAKfTsKCnZv aWQKZ2RrX3JnYl9pbml0ICh2b2lkKTsKCmd1bG9uZwpnZGtfcmdiX3hwaXhlbF9mcm9tX3JnYiAo Z3VpbnQzMiByZ2IpOwoKdm9pZApnZGtfcmdiX2djX3NldF9mb3JlZ3JvdW5kIChHZGtHQyAqZ2Ms IGd1aW50MzIgcmdiKTsKCnZvaWQKZ2RrX3JnYl9nY19zZXRfYmFja2dyb3VuZCAoR2RrR0MgKmdj LCBndWludDMyIHJnYik7Cgp0eXBlZGVmIGVudW0KewogIEdES19SR0JfRElUSEVSX05PTkUsCiAg R0RLX1JHQl9ESVRIRVJfTk9STUFMLAogIEdES19SR0JfRElUSEVSX01BWAp9IEdka1JnYkRpdGhl cjsKCnZvaWQKZ2RrX2RyYXdfcmdiX2ltYWdlIChHZGtEcmF3YWJsZSAqZHJhd2FibGUsCgkJICAg IEdka0dDICpnYywKCQkgICAgZ2ludCB4LAoJCSAgICBnaW50IHksCgkJICAgIGdpbnQgd2lkdGgs CgkJICAgIGdpbnQgaGVpZ2h0LAoJCSAgICBHZGtSZ2JEaXRoZXIgZGl0aCwKCQkgICAgZ3VjaGFy ICpyZ2JfYnVmLAoJCSAgICBnaW50IHJvd3N0cmlkZSk7Cgp2b2lkCmdka19kcmF3X3JnYl9pbWFn ZV9kaXRoYWxpZ24gKEdka0RyYXdhYmxlICpkcmF3YWJsZSwKCQkJICAgICAgR2RrR0MgKmdjLAoJ CQkgICAgICBnaW50IHgsCgkJCSAgICAgIGdpbnQgeSwKCQkJICAgICAgZ2ludCB3aWR0aCwKCQkJ ICAgICAgZ2ludCBoZWlnaHQsCgkJCSAgICAgIEdka1JnYkRpdGhlciBkaXRoLAoJCQkgICAgICBn dWNoYXIgKnJnYl9idWYsCgkJCSAgICAgIGdpbnQgcm93c3RyaWRlLAoJCQkgICAgICBnaW50IHhk aXRoLAoJCQkgICAgICBnaW50IHlkaXRoKTsKCnZvaWQKZ2RrX2RyYXdfcmdiXzMyX2ltYWdlIChH ZGtEcmF3YWJsZSAqZHJhd2FibGUsCgkJICAgICAgIEdka0dDICpnYywKCQkgICAgICAgZ2ludCB4 LAoJCSAgICAgICBnaW50IHksCgkJICAgICAgIGdpbnQgd2lkdGgsCgkJICAgICAgIGdpbnQgaGVp Z2h0LAoJCSAgICAgICBHZGtSZ2JEaXRoZXIgZGl0aCwKCQkgICAgICAgZ3VjaGFyICpidWYsCgkJ ICAgICAgIGdpbnQgcm93c3RyaWRlKTsKCnZvaWQKZ2RrX2RyYXdfZ3JheV9pbWFnZSAoR2RrRHJh d2FibGUgKmRyYXdhYmxlLAoJCSAgICAgR2RrR0MgKmdjLAoJCSAgICAgZ2ludCB4LAoJCSAgICAg Z2ludCB5LAoJCSAgICAgZ2ludCB3aWR0aCwKCQkgICAgIGdpbnQgaGVpZ2h0LAoJCSAgICAgR2Rr UmdiRGl0aGVyIGRpdGgsCgkJICAgICBndWNoYXIgKmJ1ZiwKCQkgICAgIGdpbnQgcm93c3RyaWRl KTsKCkdka1JnYkNtYXAgKgpnZGtfcmdiX2NtYXBfbmV3IChndWludDMyICpjb2xvcnMsIGdpbnQg bl9jb2xvcnMpOwoKdm9pZApnZGtfcmdiX2NtYXBfZnJlZSAoR2RrUmdiQ21hcCAqY21hcCk7Cgp2 b2lkCmdka19kcmF3X2luZGV4ZWRfaW1hZ2UgKEdka0RyYXdhYmxlICpkcmF3YWJsZSwKCQkJR2Rr R0MgKmdjLAoJCQlnaW50IHgsCgkJCWdpbnQgeSwKCQkJZ2ludCB3aWR0aCwKCQkJZ2ludCBoZWln aHQsCgkJCUdka1JnYkRpdGhlciBkaXRoLAoJCQlndWNoYXIgKmJ1ZiwKCQkJZ2ludCByb3dzdHJp ZGUsCgkJCUdka1JnYkNtYXAgKmNtYXApOwoKCiAKCmdib29sZWFuCmdka19yZ2JfZGl0aGVyYWJs ZSAodm9pZCk7Cgp2b2lkCmdka19yZ2Jfc2V0X3ZlcmJvc2UgKGdib29sZWFuIHZlcmJvc2UpOwoK IAp2b2lkCmdka19yZ2Jfc2V0X2luc3RhbGwgKGdib29sZWFuIGluc3RhbGwpOwoKdm9pZApnZGtf cmdiX3NldF9taW5fY29sb3JzIChnaW50IG1pbl9jb2xvcnMpOwoKR2RrQ29sb3JtYXAgKgpnZGtf cmdiX2dldF9jbWFwICh2b2lkKTsKCkdka1Zpc3VhbCAqCmdka19yZ2JfZ2V0X3Zpc3VhbCAodm9p ZCk7CgoKfQoKCgoKIyAxMDA3ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ2RrL2dkay5oIiAy CgoKCiMgMjcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNs dWRlL2dkay0tL3R5cGVzLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29w dC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ2RrLS1jb25maWcuaCIgMQogCgoKCiAKIyAxNiAiL29w dC9ndGsvbGliL2d0a21tL2luY2x1ZGUvZ2RrLS1jb25maWcuaCIKCgoKCiAKCgogCiAKCgoKCgoK CgogCiAKCgoKCgoKCiMgMjcgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vdHlwZXMuaCIgMgoKCgoK IAoKCiAKCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtmZWF0dXJlcy5o IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoKCgoK CgogCgoKCiAKCgoKCgogIAogCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCgogCgoK CiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKfQoKCgoKIyAzOCAiL29wdC9n dGsvaW5jbHVkZS9nZGstLS90eXBlcy5oIiAyCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgog CmNsYXNzIEdka19EcmF3YWJsZTsKY2xhc3MgR2RrX0JpdG1hcDsKY2xhc3MgR2RrX0NvbG9ybWFw OwpjbGFzcyBHZGtfSW1hZ2U7CmNsYXNzIEdka19QaXhtYXA7CmNsYXNzIEdka19XaW5kb3c7CmNs YXNzIEdka19Gb250OwpjbGFzcyBHZGtfR0M7CmNsYXNzIEdka19WaXN1YWw7IApjbGFzcyBHZGtf Q3Vyc29yOwoKCiAKdHlwZWRlZiBHZGtBdG9tIAkJR2RrX0F0b207Cgp0eXBlZGVmIEdka1dDaGFy IAkJR2RrX1dDaGFyOwoKCgogCmNsYXNzIEdka19Db2xvcjsKY2xhc3MgR2RrX0NvbG9yQ29udGV4 dERpdGhlcjsKY2xhc3MgR2RrX0NvbG9yQ29udGV4dDsKY2xhc3MgR2RrX0dDVmFsdWVzOwoKY2xh c3MgR2RrX0dlb21ldHJ5OwpjbGFzcyBHZGtfSUNBdHRyOwoKY2xhc3MgR2RrX0ltYWdlOyAKY2xh c3MgR2RrX1BvaW50OwpjbGFzcyBHZGtfUG9pbnRzOwpjbGFzcyBHZGtfUmVjdGFuZ2xlOwpjbGFz cyBHZGtfU2VnbWVudDsKY2xhc3MgR2RrX1NlZ21lbnRzOwpjbGFzcyBHZGtfV2luZG93QXR0cjsK CmNsYXNzIEdka19EZXZpY2VLZXk7CmNsYXNzIEdka19EZXZpY2VJbmZvOwpjbGFzcyBHZGtfVGlt ZUNvb3JkOwpjbGFzcyBHZGtfUmVnaW9uOwoKIAp0eXBlZGVmIEdka19Db2xvckNvbnRleHREaXRo ZXIgCUdka19Db2xvcl9Db250ZXh0X0RpdGhlcjsKdHlwZWRlZiBHZGtfQ29sb3JDb250ZXh0IAlH ZGtfQ29sb3JfQ29udGV4dDsKdHlwZWRlZiBHZGtfVGltZUNvb3JkIAkJR2RrX1RpbWVfQ29vcmQ7 CnR5cGVkZWYgR2RrX1dpbmRvd0F0dHIgCQlHZGtfV2luZG93X0F0dHI7CnR5cGVkZWYgR2RrX0Rl dmljZUtleSAJCUdka19EZXZpY2VfS2V5Owp0eXBlZGVmIEdka19HQ1ZhbHVlcyAJCUdka19HQ19W YWx1ZXM7CnR5cGVkZWYgR2RrX0RldmljZUluZm8gCQlHZGtfRGV2aWNlX0luZm87Cgp0eXBlZGVm IEdka1dDaGFyIAkJR2RrX1dfQ2hhcjsKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKIAogCiAKIApjbGFzcyBHZGtfRHJhZ0NvbnRleHQ7 CiAKdHlwZWRlZiBHZGtfRHJhZ0NvbnRleHQgICAgICAgICBHZGtfRHJhZ19Db250ZXh0OwoKCgog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKCiAKCiAKIAogCiAKIAogCnRlbXBsYXRl IDxjbGFzcyBHZGtPYmo+CiAgY2xhc3MgR2RrX09iagogICAgewogICAgIHB1YmxpYzoKICAgICAg IHR5cGVkZWYgR2RrT2JqIEJhc2VPYmplY3RUeXBlOwogICAgIHByb3RlY3RlZDoKICAgICAgIGJv b2wgbnVsbF87CiAgICAgICBHZGtPYmogb2JqXzsKCiAgICAgICAgCiAgICAgICBHZGtfT2JqKCk6 bnVsbF8oMCkKICAgICAgICAgewogICAgICAgICB9CgogICAgIHB1YmxpYzoKICAgICAgIEdka19P YmooR2RrT2JqICpvYmopOm51bGxfKG9iaj09IF9fbnVsbCApCiAgICAgICAgIHsKICAgICAgICAg IGlmIChudWxsXykgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICgmb2JqXyE9b2Jq KQogICAgICAgICAgICBtZW1jcHkoJm9ial8sb2JqLHNpemVvZihHZGtPYmopKTsKICAgICAgICAg fQoKICAgICAgIEdka19PYmooY29uc3QgR2RrX09iaiYgb2JqKTpudWxsXygwKQogICAgICAgICB7 CiAgICAgICAgICBpZiAodGhpcyE9Jm9iaikKICAgICAgICAgICAgbWVtY3B5KCZvYmpfLCZvYmou b2JqXyxzaXplb2YoR2RrT2JqKSk7CiAgICAgICAgIH0KCiAgICAgICB+R2RrX09iaigpIHt9OwoK ICAgICAgIG9wZXJhdG9yIEdka09iaiogKCkKICAgICAgICAgewogICAgICAgICAgaWYgKG51bGxf KSAKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICByZXR1cm4gJm9ial87CiAgICAgICAg IH0KCiAgICAgICBvcGVyYXRvciBHZGtPYmoqICgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg IGlmIChudWxsXykgCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgcmV0dXJuICZvYmpf OwogICAgICAgICB9CgogICAgICAgR2RrT2JqKiBnZGtvYmooKQogICAgICAgICB7cmV0dXJuICZv YmpfO30KICAgICAgIGNvbnN0IEdka09iaiogZ2Rrb2JqKCkgY29uc3QKICAgICAgICAge3JldHVy biAmb2JqXzt9CgogICAgICAgR2RrT2JqKiBvcGVyYXRvciAtPiAoKQogICAgICAgICB7cmV0dXJu ICZvYmpfO30KICAgICAgIGNvbnN0IEdka09iaiogb3BlcmF0b3IgLT4gKCkgY29uc3QKICAgICAg ICAge3JldHVybiAmb2JqXzt9CiAgICAKICAgIH07IAoKdGVtcGxhdGUgPGNsYXNzIEdka09iaj4K ICBjbGFzcyBHZGtfSGFuZGxlCiAgICB7CiAgICAgcHVibGljOgogICAgICAgdHlwZWRlZiBHZGtP YmogQmFzZU9iamVjdFR5cGU7CiAgICAgcHJpdmF0ZToKICAgICAgIHZvaWQgKm9wZXJhdG9yIG5l dyhzaXplX3QpOwogICAgIHByb3RlY3RlZDoKICAgICAgIEdka09iaiogb2JqXzsKCiAgICAgICAg CiAgICAgICBHZGtfSGFuZGxlKCk6b2JqXygwKSB7fQoKICAgICAgICAKICAgICAgIEdka19IYW5k bGUoR2RrT2JqKiBvYmopOm9ial8ob2JqKSB7fQoKICAgICAgICAKICAgICAgIEdka19IYW5kbGUo Y29uc3QgR2RrX0hhbmRsZSAmb2JqKTpvYmpfKG9iai5vYmpfKSB7fQoKICAgICBwdWJsaWM6CiAg ICAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHMsdm9pZCogdikge3JldHVybiA6Om9wZXJh dG9yIG5ldyhzLHYpO30KCiAgICAgICB+R2RrX0hhbmRsZSgpIHt9CiAgICAgICAKICAgICAgIEdk a09iaiogZ2Rrb2JqKCkgY29uc3QKICAgICAgICAge3JldHVybiBvYmpfO30KCiAgICAgICAgCiAg ICAgICBvcGVyYXRvciBHZGtPYmoqICgpIGNvbnN0CiAgICAgICAgIHtyZXR1cm4gb2JqXzt9Cgog ICAgICAgIAogICAgICAgYm9vbCBjb25uZWN0ZWQoKSBjb25zdAogICAgICAgICB7cmV0dXJuIChv YmpfIT0wKTt9CgogICAgICAgIAogICAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgR2RrX0hh bmRsZSAmb2JqKSBjb25zdAogICAgICAgICB7cmV0dXJuIChvYmpfPT1vYmoub2JqXyk7fQoKICAg ICAgICAKICAgICAgIGJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IEdka19IYW5kbGUgJm9iaikgY29u c3QKICAgICAgICAge3JldHVybiAob2JqXyE9b2JqLm9ial8pO30KCiMgMzMwICIvb3B0L2d0ay9p bmNsdWRlL2dkay0tL3R5cGVzLmgiCgogICAgfTsKCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBHZGtP Ymo+CiAgaW5saW5lIHR5cGVuYW1lIEdka09iajo6QmFzZU9iamVjdFR5cGUqIGdka19jb25zdF9j YXN0KGNvbnN0IEdka09iaiYgb2JqKSAKICAgIHtyZXR1cm4gY29uc3RfY2FzdDx0eXBlbmFtZSBH ZGtPYmo6OkJhc2VPYmplY3RUeXBlKj4ob2JqLmdka29iaigpKTt9CgogCgpjbGFzcyBHZGtfQ29s b3JDb250ZXh0RGl0aGVyCTpwdWJsaWMgR2RrX09iajxHZGtDb2xvckNvbnRleHREaXRoZXI+IHt9 OwpjbGFzcyBHZGtfQ29sb3JDb250ZXh0CQk6cHVibGljIEdka19PYmo8R2RrQ29sb3JDb250ZXh0 PiB7fTsKY2xhc3MgR2RrX0dDVmFsdWVzCQk6cHVibGljIEdka19PYmo8R2RrR0NWYWx1ZXM+IHt9 OwoKY2xhc3MgR2RrX0dlb21ldHJ5CQk6cHVibGljIEdka19PYmo8R2RrR2VvbWV0cnk+IHt9Owpj bGFzcyBHZGtfSUNBdHRyCQk6cHVibGljIEdka19PYmo8R2RrSUNBdHRyPiB7fTsKY2xhc3MgR2Rr X0RyYWdDb250ZXh0CQk6cHVibGljIEdka19PYmo8R2RrRHJhZ0NvbnRleHQ+IAp7CnB1YmxpYzoK ICBHZGtfRHJhZ0NvbnRleHQgKCkge307CiAgR2RrX0RyYWdDb250ZXh0ICggR2RrX0RyYWdDb250 ZXh0ICZ4ICkgOiAKICAgIEdka19PYmo8R2RrRHJhZ0NvbnRleHQ+ICggeCApIHt9CiAgR2RrX0Ry YWdDb250ZXh0ICggR2RrRHJhZ0NvbnRleHQgKnggKToKICAgIEdka19PYmo8R2RrRHJhZ0NvbnRl eHQ+ICggeCApIHt9Cn07CgpjbGFzcyBHZGtfV2luZG93QXR0cgkJOnB1YmxpYyBHZGtfT2JqPEdk a1dpbmRvd0F0dHI+IHt9OwpjbGFzcyBHZGtfRGV2aWNlS2V5CQk6cHVibGljIEdka19PYmo8R2Rr RGV2aWNlS2V5PiB7fTsKY2xhc3MgR2RrX0RldmljZUluZm8JCTpwdWJsaWMgR2RrX09iajxHZGtE ZXZpY2VJbmZvPiB7fTsKY2xhc3MgR2RrX1RpbWVDb29yZAkJOnB1YmxpYyBHZGtfT2JqPEdka1Rp bWVDb29yZD4ge307CmNsYXNzIEdka19SZWdpb24JCTpwdWJsaWMgR2RrX09iajxHZGtSZWdpb24+ IHt9OwoKIAojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vY29sb3IuaCIgMQogCiAKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS90eXBl cy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDkzICIvb3B0L2d0ay9pbmNsdWRlL2dk ay0tL3R5cGVzLmgiCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9jb2xvci5oIiAyCgoK Cm5hbWVzcGFjZSBHdGsKewogIHVzaW5nIHN0ZDo6c3RyaW5nIDsgIAp9CgogCiAKIAogCmNsYXNz IEdka19Db2xvcjogcHVibGljIEdka0NvbG9yCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBH ZGtDb2xvciBCYXNlT2JqZWN0VHlwZTsKCiAgIHByaXZhdGU6CiAgICAgR2RrQ29sb3IqIG9wZXJh dG9yIC0+ICgpOwogICAgIGNvbnN0IEdka0NvbG9yKiBvcGVyYXRvciAtPiAoKSBjb25zdDsgIAoK ICAgcHVibGljOgogICAgIEdka19Db2xvcigpOwogICAgIEdka19Db2xvcihjb25zdCBHdGs6OnN0 cmluZyAmc3RyKTsKICAgICBHZGtfQ29sb3IoY29uc3QgR2RrQ29sb3ImIGMpOwogICAgIGV4cGxp Y2l0IEdka19Db2xvcihjb25zdCBHZGtDb2xvciogYyk7CiAgICAgR2RrX0NvbG9yKGNvbnN0IEdk a19Db2xvciYgYyk7CiAgICAgfkdka19Db2xvcigpOwoKICAgICBHZGtDb2xvciogZ2Rrb2JqKCkg e3JldHVybiB0aGlzO30KICAgICBjb25zdCBHZGtDb2xvciogZ2Rrb2JqKCkgY29uc3Qge3JldHVy biB0aGlzO30KCiAgICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgR2RrX0NvbG9yICZjb2xvcikK ICAgICAgIHsKICAgICAgICByZXR1cm4gZXF1YWwoY29sb3IpP3RydWU6ZmFsc2U7CiAgICAgICB9 CgogICAgIGdpbnQgZXF1YWwoY29uc3QgR2RrX0NvbG9yJiBjb2xvcikgY29uc3Q7CgogICAgIHZv aWQgc2V0X2dyZXkoZ3VzaG9ydCBnKSAKICAgICAgIHsKICAgICAgICByZWQgPSBncmVlbiA9IGJs dWUgPSBnOwogICAgICAgfQoKICAgICB2b2lkIHNldF9ncmV5X3AoZ2RvdWJsZSBnKSAKICAgICAg IHsKICAgICAgICByZWQgPSBncmVlbiA9IGJsdWUgPSAoZ3VzaG9ydCkoZyo2NTUzNSk7CiAgICAg ICB9CgogICAgIHZvaWQgc2V0X3JnYihndXNob3J0IHJlZF8sIGd1c2hvcnQgZ3JlZW5fLCBndXNo b3J0IGJsdWVfKSAKICAgICAgIHsKICAgICAgICByZWQgPSByZWRfOwogICAgICAgIGdyZWVuID0g Z3JlZW5fOwogICAgICAgIGJsdWUgPSBibHVlXzsKICAgICAgIH0KCiAgICAgdm9pZCBzZXRfcmdi X3AoZ2RvdWJsZSByZWRfLCBnZG91YmxlIGdyZWVuXywgZ2RvdWJsZSBibHVlXykgCiAgICAgICB7 CiAgICAgICAgcmVkID0gKGd1c2hvcnQpKHJlZF8qNjU1MzUpOwogICAgICAgIGdyZWVuID0gKGd1 c2hvcnQpKGdyZWVuXyo2NTUzNSk7CiAgICAgICAgYmx1ZSA9IChndXNob3J0KShibHVlXyo2NTUz NSk7CiAgICAgICB9CgogICAgIHZvaWQgc2V0X2hzdihnZG91YmxlIGgsIGdkb3VibGUgcywgZ2Rv dWJsZSB2KTsKICAgICB2b2lkIHNldF9oc2woZ2RvdWJsZSBoLCBnZG91YmxlIHMsIGdkb3VibGUg bCk7CgogICAgIGdpbnQgc2V0KGNvbnN0IEd0azo6c3RyaW5nICZzdHIpIDsKICAgICBnaW50IHBh cnNlKGNvbnN0IEd0azo6c3RyaW5nJiBzcGVjKQogICAgICAge3JldHVybiBzZXQoc3BlYyk7fQoK ICAgICBndXNob3J0IGdldF9yZWQoKSBjb25zdCAgICAgeyByZXR1cm4gcmVkOyAgIH0KICAgICBn dXNob3J0IGdldF9ncmVlbigpIGNvbnN0ICAgeyByZXR1cm4gZ3JlZW47IH0KICAgICBndXNob3J0 IGdldF9ibHVlKCkgY29uc3QgICAgeyByZXR1cm4gYmx1ZTsgIH0KCiAgICAgdm9pZCBzZXRfcmVk KGd1c2hvcnQgcikgICAgIHsgIHJlZCA9IHI7ICAgfQogICAgIHZvaWQgc2V0X2dyZWVuKGd1c2hv cnQgZykgICB7ICBncmVlbiA9IGc7IH0KICAgICB2b2lkIHNldF9ibHVlKGd1c2hvcnQgYikgICAg eyAgYmx1ZSA9IGI7ICB9CgogICAgIGd1aW50IGdldF9waXhlbCgpIGNvbnN0ICAgICB7IHJldHVy biBwaXhlbDsgfQoKICAgICBnZG91YmxlIHJlZF9wKCkgY29uc3QgICB7IHJldHVybiByZWQgLyA2 NTUzNS47ICAgfQogICAgIGdkb3VibGUgZ3JlZW5fcCgpIGNvbnN0IHsgcmV0dXJuIGdyZWVuIC8g NjU1MzUuOyB9CiAgICAgZ2RvdWJsZSBibHVlX3AoKSBjb25zdCAgeyByZXR1cm4gYmx1ZSAvIDY1 NTM1LjsgIH0KCiAgICAgIAogICAgIHZvaWQgc2V0X3JhbmRvbSgpOyAgCiAgICAgZ2RvdWJsZSBk aXN0YW5jZV9yZ2JfZXVjbGlkZWFuKGNvbnN0IEdka19Db2xvciYgb2JqKSBjb25zdDsKICAgICBn ZG91YmxlIGRpc3RhbmNlX3JnYl90YXhpY2FiKGNvbnN0IEdka19Db2xvciYgb2JqKSBjb25zdDsK CiAgfTsKCgoKIAojIDM2NSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS90eXBlcy5oIiAyCgoKY2xh c3MgR2RrX1BvaW50OiBwdWJsaWMgR2RrX09iajxHZGtQb2ludD4KICB7CiAgIHB1YmxpYzoKICAg ICAgICAKICAgICAgIG9wZXJhdG9yIEdka1BvaW50ICgpIGNvbnN0IHsKCSAgIHJldHVybiBvYmpf OwogICAgICAgfQoKICAgICBHZGtfUG9pbnQoKQogICAgICAgOkdka19PYmo8R2RrUG9pbnQ+KCkg e30KICAgICBHZGtfUG9pbnQoR2RrUG9pbnQgKnB0KQogICAgICAgOkdka19PYmo8R2RrUG9pbnQ+ KHB0KSB7fQogICAgIEdka19Qb2ludChjb25zdCBHZGtfUG9pbnQmIHB0KQogICAgICAgOkdka19P Ymo8R2RrUG9pbnQ+KHB0KSB7fQogICAgIEdka19Qb2ludChnaW50IHgsZ2ludCB5KQogICAgICAg e29ial8ueD14OwogICAgICAgIG9ial8ueT15OwogICAgICAgfQogICAgIH5HZGtfUG9pbnQoKTsK ICB9OwoKY2xhc3MgR2RrX1BvaW50cyAKICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIEdka1BvaW50 ICpwb2ludHNfOwogICAgICBpbnQgICAgICAgc2l6ZV87CiAgICAgIGJvb2wgICAgICBvd25lZF87 CgogICAgICAgCiAgICAgIEdka19Qb2ludHMmIG9wZXJhdG9yPSAoY29uc3QgR2RrX1BvaW50cyYp OwoKICAgICAgdm9pZCBhX2FsbG9jKHNpemVfdCBzaXplKTsKICAgICAgdGVtcGxhdGUgPGNsYXNz IEl0ZXJhdG9yPgogICAgICB2b2lkIGFfZHVwKEl0ZXJhdG9yIGIsIEl0ZXJhdG9yIGUpIDsKCiAg ICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIEdka1BvaW50ICooKSBjb25zdCB7IHJldHVybiBwb2lu dHNfOyB9CiAgICAgIGludCBzaXplKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBzaXplXzsg fQoKICAgICAgR2RrX1BvaW50cyhHZGtQb2ludCAqIHBvaW50cywgaW50IHNpemUpOwogICAgICBH ZGtfUG9pbnRzKEdka19Qb2ludCAqIHBvaW50cywgaW50IHNpemUpOwogICAgICB+R2RrX1BvaW50 cygpOwoKCiAgICAgIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CiAgICAgIEdka19Qb2ludHMo Y29uc3QgQ29udGFpbmVyICYgYykgCiAgICAgICAgewogICAgICAgICAgYV9kdXAoYy5iZWdpbigp LCBjLmVuZCgpKTsKICAgICAgICB9CgoKCgoKCiAgICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv cj4KICAgICAgR2RrX1BvaW50cyhJdGVyYXRvciBiLEl0ZXJhdG9yIGUpIHsgYV9kdXAoYiwgZSk7 IH0KICB9OwoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgp2b2lkIEdka19Qb2ludHM6OmFfZHVw KEl0ZXJhdG9yIGIsSXRlcmF0b3IgZSkKICB7CiAgICBJdGVyYXRvciBpdGVyOwoKICAgIGZvcihp dGVyID0gYiwgc2l6ZV8gPSAwOyBpdGVyICE9IGU7ICsraXRlciwgKytzaXplXyk7CgogICAgYV9h bGxvYyhzaXplXyk7CgogICAgdW5zaWduZWQgaW50IGk7CiAgICBmb3IoaXRlciA9IGIsIGkgPSAw OyBpdGVyICE9IGU7ICsraXRlciwgKytpKQogICAgICAgIHBvaW50c19baV0gPSAqaXRlcjsKICB9 CgoKY2xhc3MgR2RrX1JlY3RhbmdsZTpwdWJsaWMgR2RrX09iajxHZGtSZWN0YW5nbGU+CiAgewog ICBwdWJsaWM6CiAgICAgR2RrX1JlY3RhbmdsZSgpCiAgICAgICA6R2RrX09iajxHZGtSZWN0YW5n bGU+KCkge30KICAgICBHZGtfUmVjdGFuZ2xlKEdka1JlY3RhbmdsZSogcmVjdCkKICAgICAgIDpH ZGtfT2JqPEdka1JlY3RhbmdsZT4ocmVjdCkge30KICAgICBHZGtfUmVjdGFuZ2xlKGNvbnN0IEdk a19SZWN0YW5nbGUmIHJlY3QpCiAgICAgICA6R2RrX09iajxHZGtSZWN0YW5nbGU+KHJlY3QpIHt9 CiAgICAgR2RrX1JlY3RhbmdsZShnaW50IHgsIGdpbnQgeSwgZ2ludCB3LCBnaW50IGgpCiAgICAg ICA6R2RrX09iajxHZGtSZWN0YW5nbGU+KCkKICAgICAgIHtvYmpfLng9eDsKICAgICAgICBvYmpf Lnk9eTsKICAgICAgICBvYmpfLndpZHRoPXc7CiAgICAgICAgb2JqXy5oZWlnaHQ9aDsKICAgICAg IH0KICAgICB+R2RrX1JlY3RhbmdsZSgpOwoKCiAgICAgR2RrUmVjdGFuZ2xlIGpvaW4oR2RrX1Jl Y3RhbmdsZSAmc3JjMikKICAgICAgIHtHZGtSZWN0YW5nbGUgcmVjOwogICAgICAgIGdka19yZWN0 YW5nbGVfdW5pb24oJm9ial8sJihzcmMyLm9ial8pLCZyZWMpOwogICAgICAgIHJldHVybiByZWM7 CiAgICAgICB9CgogIH07CgoKaW5saW5lIEdka1JlY3RhbmdsZSBqb2luKEdka19SZWN0YW5nbGUg JnNyYzEsR2RrX1JlY3RhbmdsZSAmc3JjMikKICAge3JldHVybiBzcmMxLmpvaW4oc3JjMik7CiAg IH0KCgpjbGFzcyBHZGtfU2VnbWVudDogcHVibGljIEdka19PYmo8R2RrU2VnbWVudD4KICB7CiAg IHB1YmxpYzoKICAgICBHZGtfU2VnbWVudCgpCiAgICAgICA6R2RrX09iajxHZGtTZWdtZW50Pigp IHt9CiAgICAgR2RrX1NlZ21lbnQoR2RrU2VnbWVudCogc2VnKQogICAgICAgOkdka19PYmo8R2Rr U2VnbWVudD4oc2VnKSB7fQogICAgIEdka19TZWdtZW50KGNvbnN0IEdka19TZWdtZW50JiBzZWcp CiAgICAgICA6R2RrX09iajxHZGtTZWdtZW50PihzZWcpIHt9CiAgICAgR2RrX1NlZ21lbnQoZ2lu dCB4MSwgZ2ludCB5MSwgZ2ludCB4MiwgZ2ludCB5MikKICAgICAgIDpHZGtfT2JqPEdka1NlZ21l bnQ+KCkKICAgICAgIHtvYmpfLngxPXgxOwogICAgICAgIG9ial8ueTE9eTE7CiAgICAgICAgb2Jq Xy54Mj14MjsKICAgICAgICBvYmpfLnkyPXkyOwogICAgICAgfQogICAgIH5HZGtfU2VnbWVudCgp OwogIH07ICAgCgoKCiMgMjggIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoKCiMgMSAiL29w dC9ndGsvaW5jbHVkZS9nZGstLS9tYWluLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vY29sb3JtYXAuaCIgMQogCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKY2xhc3MgR2RrX0NvbG9ybWFwIDogcHVibGljIEdka19IYW5kbGU8 R2RrQ29sb3JtYXA+CiAgewogICBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgIAogICAgIHZvaWQgcmVm KCk7CiAgICAgdm9pZCB1bnJlZigpOwoKIAoKCgogICBwdWJsaWM6CgogICAgICAKICAgICBHZGtf Q29sb3JtYXAoKTsKCiAgIHB1YmxpYzoKICAgICAgCiAgICAgR2RrX0NvbG9ybWFwKEdka0NvbG9y bWFwICpjb2xvcm1hcCk7CgogICAgICAKICAgICBHZGtfQ29sb3JtYXAoY29uc3QgR2RrX0NvbG9y bWFwJiBjb2xvcm1hcCk7CgogICAgICAKICAgICB+R2RrX0NvbG9ybWFwKCk7CgogICAgICAKICAg ICB2b2lkIGNyZWF0ZSgpIDsKCiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAgR2RrX0NvbG9ybWFw JiBvcGVyYXRvciA9IChjb25zdCBHZGtfQ29sb3JtYXAmKTsKCiAgICAgIAoKICAgICAgCiAgICAg R2RrX0NvbG9yIHdoaXRlKCk7CgogICAgICAKICAgICBHZGtfQ29sb3IgYmxhY2soKTsKCiAgICAg Z2ludCBhbGxvYyhHZGtfQ29sb3IgJmNvbG9yKTsKCiAgICAgZ2ludCBjaGFuZ2UoR2RrX0NvbG9y ICZjb2xvcik7CgogICAgICAKICAgICB2b2lkIGNoYW5nZShnaW50IG5jb2xvcnMpOwoKIAoKICAg ICAgCiAgICAgIAogICAgIHN0YXRpYyBHZGtfQ29sb3JtYXAgZ2V0X3N5c3RlbSgpOwoKICAgICBz dGF0aWMgZ2ludCBnZXRfc3lzdGVtX3NpemUoKTsKICB9OwoKCiMgMjggIi9vcHQvZ3RrL2luY2x1 ZGUvZ2RrLS0vbWFpbi5oIiAyCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpzdHJpbmcg OyAgCn0KCiAKY2xhc3MgR2RrIAogIHsKICAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXQo aW50ICZhcmdjLGNoYXIqKiAmYXJndik7CiAgICAgc3RhdGljIHZvaWQgZXhpdChpbnQgZXJyb3Jf Y29kZSk7CiAgICAgc3RhdGljIEd0azo6c3RyaW5nIHNldF9sb2NhbGUoKTsKICAgICBzdGF0aWMg Z2ludCBldmVudHNfcGVuZGluZygpOwogICAgIHN0YXRpYyBHZGtFdmVudCogZXZlbnRfZ2V0KHZv aWQpOwogICAgIHN0YXRpYyB2b2lkIGV2ZW50X3B1dChHZGtFdmVudCAmZXZlbnQpOwogICAgIHN0 YXRpYyBHZGtFdmVudCogZXZlbnRfY29weShHZGtFdmVudCogZXZlbnQpOwogICAgIHN0YXRpYyB2 b2lkIGV2ZW50X2ZyZWUoR2RrRXZlbnQqIGV2ZW50KTsKCgogICAgICAKICAgICBzdGF0aWMgdm9p ZCBldmVudF9nZXRfdGltZShHZGtFdmVudCogZXZlbnQpOwoKICAgICAgCiAgICAgc3RhdGljIHZv aWQgc2V0X3NtX2NsaWVudF9pZChjb25zdCBHdGs6OnN0cmluZyAmc21fY2xpZW50X2lkKTsKCgog IH07CgoKIyAzMCAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS5oIiAyCgojIDEgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ2RrLS0vdmlzdWFsLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CiAKIAogCiAKY2xhc3MgR2RrX1Zpc3VhbCA6IHB1YmxpYyBHZGtfSGFuZGxlPEdka1Zpc3VhbD4K ICB7CiAgIHByb3RlY3RlZDoKICAgICAgCiAgICAgdm9pZCByZWYoKTsKCiAgICAgIAogICAgIHZv aWQgdW5yZWYoKTsKCiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX1Zpc3VhbCgpOwoK ICAgcHVibGljOgogICAgICAKICAgICBHZGtfVmlzdWFsKEdka1Zpc3VhbCogdmlzdWFsKTsKCiAg ICAgIAogICAgIEdka19WaXN1YWwoY29uc3QgR2RrX1Zpc3VhbCYgdmlzdWFsKTsKICAKICAgICAg CiAgICAgfkdka19WaXN1YWwoKTsKCiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAgR2RrX1Zpc3Vh bCYgb3BlcmF0b3IgPSAoY29uc3QgR2RrX1Zpc3VhbCYpOwoKICAgcHJpdmF0ZToKICAgICAgICAK ICAgICAgICAKICAgICAgICAKICAgICAgIHZvaWQgY3JlYXRlKCk7CgogICBwdWJsaWM6CiAgICAg IAogICAgIHN0YXRpYyBnaW50IGdldF9iZXN0X2RlcHRoICh2b2lkKTsKIAogICAgICAKICAgICBz dGF0aWMgR2RrVmlzdWFsVHlwZSBnZXRfYmVzdF90eXBlICh2b2lkKTsKIAogICAgIEdka19WaXN1 YWwmICBnZXRfc3lzdGVtICh2b2lkKTsKIAogICAgIEdka19WaXN1YWwmICBnZXRfYmVzdCAodm9p ZCk7CiAKICAgICBHZGtfVmlzdWFsJiAgZ2V0X2Jlc3QgKGdpbnQgZGVwdGgpOwogCiAgICAgR2Rr X1Zpc3VhbCYgIGdldF9iZXN0IChHZGtWaXN1YWxUeXBlICB2aXN1YWxfdHlwZSk7CgogICAgIEdk a19WaXN1YWwmICBnZXRfYmVzdCAoZ2ludCBkZXB0aCwgR2RrVmlzdWFsVHlwZSAgdmlzdWFsX3R5 cGUpOwogCiAgfTsKCgojIDMxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMgMSAiL29w dC9ndGsvaW5jbHVkZS9nZGstLS9nYy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vZm9udC5oIiAxCiAKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpzdHJpbmcgOyAgCn0K CmNsYXNzIEdka19Gb250OiBwdWJsaWMgR2RrX0hhbmRsZTxHZGtGb250PgogIHsKICAgcHJvdGVj dGVkOgoKICAgICAgCiAgICAgdm9pZCByZWYoKTsKCiAgICAgIAogICAgIHZvaWQgdW5yZWYoKTsK CiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX0ZvbnQoKTsKCiAgIHB1YmxpYzoKICAg ICAgCiAgICAgR2RrX0ZvbnQoR2RrRm9udCAqZm9udCk7CiAgCiAgICAgR2RrX0ZvbnQoY29uc3Qg R2RrX0ZvbnQmIGZvbnQpOwoKICAgICAgCiAgICAgR2RrX0ZvbnQoY29uc3QgR3RrOjpzdHJpbmcg JmZvbnRfbmFtZSk7CgogICAgICAKICAgICB+R2RrX0ZvbnQoKTsKCiAgICAgdm9pZCBjcmVhdGUo Y29uc3QgR3RrOjpzdHJpbmcgJmZvbnRfbmFtZSk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwogICAg IEdka19Gb250JiBvcGVyYXRvciA9IChjb25zdCBHZGtfRm9udCYpOwoKICAgICAgCiAgICAgCiAg ICAgR2RrX0ZvbnQmIGxvYWQoY29uc3QgR3RrOjpzdHJpbmcgJmZvbnRfbmFtZSk7CgogICAgIEdk a19Gb250JiBzZXRfbG9hZChjb25zdCBHdGs6OnN0cmluZyAmZm9udHNldF9uYW1lKTsKCiAgICAg Z2ludCBmb250X2lkKCkgY29uc3Q7CgogICAgIGdpbnQgZXF1YWwoY29uc3QgR2RrX0ZvbnQgICZm b250KSBjb25zdDsKCiAgICAgZ2ludCBhc2NlbnQoKSBjb25zdDsKICAgICBnaW50IGRlc2NlbnQo KSBjb25zdDsKICAgICBnaW50IGhlaWdodCgpIGNvbnN0OwoKICAgICBnaW50IHN0cmluZ193aWR0 aChjb25zdCBHdGs6OnN0cmluZyAmc3RyKSBjb25zdCA7CgogICAgIGdpbnQgdGV4dF93aWR0aChj b25zdCBjaGFyKiB0ZXh0LGludCBsZW5ndGgpIGNvbnN0OwoKICAgICBnaW50IGNoYXJfd2lkdGgo Z2NoYXIgICAgIGNoYXJhY3RlcikgY29uc3Q7CgogICAgIGdpbnQgc3RyaW5nX21lYXN1cmUoY29u c3QgR3RrOjpzdHJpbmcgJnN0cikgY29uc3Q7CgogICAgIGdpbnQgdGV4dF9tZWFzdXJlKGNvbnN0 IGNoYXIqIHRleHQsaW50IGxlbmd0aCkgY29uc3Q7CgogICAgIGdpbnQgY2hhcl9tZWFzdXJlKGdj aGFyICAgICBjaGFyYWN0ZXIpIGNvbnN0OwoKICAgICBnaW50IHN0cmluZ19oZWlnaHQoY29uc3Qg R3RrOjpzdHJpbmcgJnN0cikgY29uc3Q7CgogICAgIGdpbnQgdGV4dF9oZWlnaHQoY29uc3QgY2hh ciogdGV4dCxpbnQgbGVuZ3RoKSBjb25zdDsKCiAgICAgZ2ludCBjaGFyX2hlaWdodChnY2hhciBj aGFyYWN0ZXIpIGNvbnN0OwoKICAgICB2b2lkIHN0cmluZ19leHRlbnRzIChjb25zdCBHdGs6OnN0 cmluZyAmc3RyLAoJCQkgIGdpbnQgICAgICAgICZsYmVhcmluZywKCQkJICBnaW50ICAgICAgICAm cmJlYXJpbmcsCgkJCSAgZ2ludCAgICAgICAgJndpZHRoLAoJCQkgIGdpbnQgICAgICAgICZhc2Nl bnQsCgkJCSAgZ2ludCAgICAgICAgJmRlc2NlbnQpIGNvbnN0OwoKICAgICB2b2lkIHRleHRfZXh0 ZW50cyhjb25zdCBjaGFyICp0ZXh0LCAKICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbmd0 aCwKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZsYmVhcmluZywKICAgICAgICAgICAgICAg ICAgICAgICBnaW50ICZyYmVhcmluZywKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZ3aWR0 aCwKICAgICAgICAgICAgICAgICAgICAgICBnaW50ICZhc2NlbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgZ2ludCAmZGVzY2VudCkgY29uc3Q7CgogICAgICAKICAgICBnaW50IHRleHRfd2lkdGhf d2MoY29uc3QgR2RrV0NoYXIqIHRleHQsZ2ludCB0ZXh0X2xlbmd0aCkgY29uc3Q7CgogICAgIGdp bnQgY2hhcl93aWR0aF93YyhHZGtXQ2hhciBjaGFyYWN0ZXIpIGNvbnN0OwoKICAgICB2b2lkIHRl eHRfZXh0ZW50c193YyggY29uc3QgR2RrV0NoYXIgKnRleHQsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICB0ZXh0 X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmxiZWFy aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAmcmJlYXJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICZ3aWR0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmFzY2VudCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgJmRlc2NlbnQpIGNvbnN0OwoKCiAgfTsKCgoj IDMzICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2djLmgiIDIKCgogCiAKIAogCiAKIAogCiAKIApj bGFzcyBHZGtfR0MgOnB1YmxpYyBHZGtfSGFuZGxlPEdka0dDPgogIHsKICAgcHJvdGVjdGVkOgog CiAgICAgIAogICAgIHZvaWQgcmVmKCk7CgogICAgICAKICAgICB2b2lkIHVucmVmKCk7CgogCgoK CiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdka19HQygpOwoKICAgcHVibGljOgogICAgICAKICAg ICBHZGtfR0MoR2RrR0MqIGdjKTsKCiAgICAgIAogICAgICAKICAgICBHZGtfR0MoY29uc3QgR2Rr X0dDJiBnYyk7CiAgCiAgICAgIAogICAgICAKICAgICBHZGtfR0MoR2RrX0RyYXdhYmxlICZkcmF3 YWJsZSk7CgogICAgICAKICAgICB+R2RrX0dDKCk7CgogICAgICAKICAgICAgCiAgICAgIAogICAg ICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBjcmVhdGUoR2RrX0RyYXdh YmxlIGNvbnN0ICZkcmF3YWJsZSk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwogICAgIEdka19HQyYg b3BlcmF0b3IgPSAoY29uc3QgR2RrX0dDJik7CgogICBwcml2YXRlOgogICAKICAgICAgCiAgICAg IAogICAgICAKICAgICB2b2lkIGRlc3Ryb3koKTsKCiAgIHB1YmxpYzoKICAgIAoKICAgICAgCiAg ICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBjb3B5KEdk a19HQyAmc3JjKTsKCiAgICAgIAogICAgICAKICAgICB2b2lkIGdldF92YWx1ZXMoR2RrR0NWYWx1 ZXMgJnZhbHVlcyk7CgogICAgICAKICAgICB2b2lkIHNldF9mb3JlZ3JvdW5kKGNvbnN0IEdka19D b2xvciYgYyk7CiAKICAgICAgCiAgICAgdm9pZCBzZXRfYmFja2dyb3VuZChjb25zdCBHZGtfQ29s b3ImIGMpOwoKICAgICAgCiAgICAgdm9pZCBzZXRfZm9udChjb25zdCBHZGtfRm9udCYgZm9udCk7 CgkKICAgICAgCiAgICAgIAogICAgIEdka19Gb250IGdldF9mb250KCk7CiAKICAgICAgCiAgICAg IAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgc2V0X2Z1bmN0aW9uKEdka0Z1bmN0aW9u IGZ1bmMpOwoKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAg CiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZv aWQgc2V0X2ZpbGwoR2RrRmlsbCBmaWxsKTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9p ZCBzZXRfdGlsZShHZGtfUGl4bWFwICZ0aWxlKTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAg IAogICAgIHZvaWQgc2V0X3N0aXBwbGUoR2RrX1BpeG1hcCAmc3RpcCk7CgogICAgICAKICAgICAg CiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfdHNfb3JpZ2luKGdpbnQgeCwgZ2lu dCB5KTsKCiAgICAgIAogICAgIHZvaWQgc2V0X2NsaXBfb3JpZ2luKGdpbnQgeCwgZ2ludCB5KTsK CiAgICAgIAogICAgICAKICAgICB2b2lkIHNldF9jbGlwX21hc2soR2RrX0JpdG1hcCAmbWFzayk7 CgogICAgICAKICAgICB2b2lkIHNldF9jbGlwX21hc2soKSA7CgogICAgICAKICAgICB2b2lkIHNl dF9ub2NsaXAoKSA7CgogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgICBzZXRfY2xpcF9y ZWN0YW5nbGUgIChjb25zdCBHZGtfUmVjdGFuZ2xlICZyZWN0KTsKCiAgICAgIAogICAgICAKICAg ICAgCiAgICAgdm9pZCBzZXRfY2xpcF9yZWN0YW5nbGUoZ2ludCB4LCBnaW50IHksIGdpbnQgdywg Z2ludCBoKTsKCiAgICAgIAogICAgIHZvaWQgc2V0X2NsaXBfcmVnaW9uKEdka19SZWdpb24gJnJl Z2lvbik7CiAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfc3Vid2luZG93 KEdka1N1YndpbmRvd01vZGUgbW9kZSk7CgogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAg ICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgdm9pZCBzZXRfZXhwb3N1cmVzKGJvb2wgZXhw KTsKCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgIHZvaWQgc2V0X2xpbmVfYXR0cmli dXRlcyhnaW50IGxpbmVfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0xp bmVTdHlsZSBsaW5lX3N0eWxlPUdES19MSU5FX1NPTElELAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHZGtDYXBTdHlsZSBjYXBfc3R5bGU9R0RLX0NBUF9CVVRULAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHZGtKb2luU3R5bGUgam9pbl9zdHlsZT1HREtfSk9JTl9NSVRFUik7 CgoKICAgICAKICAgICAKICAgICAKCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAg ICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAg ICB2b2lkIHNldF9saW5lX3dpZHRoKGdpbnQgbGluZV93aWR0aCk7CiAKICAgICAgIAogICAgICAg CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAK ICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAog ICAgICAgCiAgICAgIHZvaWQgc2V0X2xpbmVfc3R5bGUoR2RrTGluZVN0eWxlIGxpbmVfc3R5bGUp OwoKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAg IAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAg CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICB2b2lkIHNldF9j YXBfc3R5bGUoR2RrQ2FwU3R5bGUgY2FwX3N0eWxlKTsKCiAgICAgICAKICAgICAgIAogICAgICAg CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAK ICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAog ICAgICAgCiAgICAgIHZvaWQgc2V0X2pvaW5fc3R5bGUoR2RrSm9pblN0eWxlIGpvaW5fc3R5bGUp OwoKCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0X2Rhc2hlcyhnaW50IHNp emUpOwogICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0 X2Rhc2hlcyhnaW50IG9uLCBnaW50IG9mZik7CiAgICAgICAgIAogCiAgICAgICAKICAgICAgIAog ICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAg ICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAKICAg ICAgIAogICAgICAgCiAgICAgIHZvaWQgc2V0X2Rhc2hlcyhnaW50IGRhc2hfb2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgZ2ludDggZGFzaF9saXN0W10sIAogICAgICAgICAgICAgICAgICAg ICAgZ2ludCBkYXNoX2xpc3RfbGVuZ3RoKTsKCgogIH07CgoKIyAzMiAiL29wdC9ndGsvaW5jbHVk ZS9nZGstLS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0vZHJhd2FibGUuaCIgMQog CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgR3RrCnsKICB1c2luZyBzdGQ6 OnN0cmluZyA7ICAKfQoKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBHZGtfRHJhd2FibGU6IHB1 YmxpYyBHZGtfSGFuZGxlPEdka0RyYXdhYmxlPgogIHtwcm90ZWN0ZWQ6CgogICAgIHZpcnR1YWwg dm9pZCByZWYoKT0wOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZigpPTA7CgogICAgIEdka19EcmF3 YWJsZSAoKTsKCiAgIHB1YmxpYzoKICAgICBHZGtfRHJhd2FibGUgKEdka0RyYXdhYmxlICpkcmF3 YWJsZSk7CiAgICAgR2RrX0RyYXdhYmxlIChjb25zdCBHZGtfRHJhd2FibGUgJmRyYXdhYmxlKTsK CiAgICAgIAogICAgIHZpcnR1YWwgfkdka19EcmF3YWJsZSAoKTsKCiAgICAgdm9pZCByZWxlYXNl KCk7CiAgICAgR2RrX0RyYXdhYmxlJiBvcGVyYXRvciA9IChjb25zdCBHZGtfRHJhd2FibGUmKTsK CiAgICAgIAogICAgIAogICAgICAKICAgICB2b2lkIGRyYXdfcG9pbnQgICAgIChjb25zdCBHZGtf R0MgJmdjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHgxLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeTEpOwoKICAgICAgCiAgICAgdm9p ZCBkcmF3X2xpbmUgICAgICAoY29uc3QgR2RrX0dDICZnYywgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2ludCAgICAgICAgICB4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg ICAgICAgIHkxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeDIsIAog ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeTIpOwoKICAgICAgCiAgICAg IAogICAgIHZvaWQgZHJhd19yZWN0YW5nbGUgKGNvbnN0IEdka19HQyAmZ2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBmaWxsZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAg ICAgICAgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHdpZHRoLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgaGVpZ2h0KTsKICAKICAgICAg CiAgICAgdm9pZCBkcmF3X2FyYyAgICAgICAoY29uc3QgR2RrX0dDICZnYywKICAgICAgICAgICAg ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGZpbGxlZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBnaW50ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg ICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgd2lkdGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBhbmdsZTEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2ludCAgICAgICAgICBhbmdsZTIpOwoKICAgICAgCiAgICAgdm9pZCBkcmF3X3BvbHln b24gICAoY29uc3QgR2RrX0dDICZnYywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg ICAgICAgIGZpbGxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfUG9pbnRz ICAgJnBvaW50cyk7CiAgICAKCiAgICAgIAogICAgIHZvaWQgZHJhd19wb2x5Z29uICAgIChjb25z dCBHZGtfR0MgJmdjLAoJCQkgICBnaW50ICAgICAgICBmaWxsZWQsCgkJCSAgIEdka1BvaW50ICAg ICpwb2ludHMsCgkJCSAgIGdpbnQgICAgICAgICAgbnBvaW50cyk7CiAgICAKCiAgICAgIAogICAg ICAKICAgICB2b2lkIGRyYXdfc3RyaW5nICAgIChjb25zdCBHZGtfRm9udCAmZm9udCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfR0MgICAmZ2MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg ICAgICAgICAgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHdGs6OnN0cmluZyAm c3RyKTsKIAogICAgICAKICAgICAgCiAgICAgdm9pZCBkcmF3X3RleHQgICAgICAoY29uc3QgR2Rr X0ZvbnQgJmZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2RrX0dDICAgJmdj LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogICB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg ICAgdGV4dF9sZW5ndGgpOwoKICAgICAgCiAgICAgdm9pZCBkcmF3X3BpeG1hcCAgICAgKGNvbnN0 IEdka19HQyAgICAgICAmZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka19E cmF3YWJsZSAmc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHhz cmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeXNyYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4ZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2ludCAgICAgICAgICB5ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2ludCAgICAgICAgICB3aWR0aCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBn aW50ICAgICAgICAgIGhlaWdodCA9IC0xKTsKCiAgICAgIAogICAgIHZvaWQgZHJhd19iaXRtYXAg ICAgKGNvbnN0IEdka19HQyAgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEdka19CaXRtYXAgJnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAg IHhzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB5c3JjLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeGRlc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2ludCAgICAgICAgICB5ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBnaW50ICAgICAgICAgIHdpZHRoID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu dCAgICAgICAgICBoZWlnaHQgPSAtMSk7CgogICAgICAKICAgICB2b2lkIGRyYXdfaW1hZ2UgICAg IChjb25zdCBHZGtfR0MgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdk a19JbWFnZSAmaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4 c3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeXNyYywKICAgICAg ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHhkZXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIGdpbnQgICAgICAgICAgeWRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Z2ludCAgICAgICAgICB3aWR0aCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg ICAgICAgICAgaGVpZ2h0ID0gLTEpOwoKCiAgICAgIAogICAgICAKICAgICB2b2lkIGRyYXdfcG9p bnRzICAgIChjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBHZGtfUG9pbnRzICAgJnBvaW50cyk7CgogICAgICAKICAgICAgCiAgICAgdm9pZCBk cmF3X3BvaW50cyAgICAoY29uc3QgR2RrX0dDICAgICAgICAmZ2MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgR2RrUG9pbnQgICAgKnBvaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICBn aW50ICAgICAgICAgIG5wb2ludHMpOwoKICAgICB2b2lkIGRyYXdfc2VnbWVudHMgIChjb25zdCBH ZGtfR0MgICAgICAgJmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka19TZWdt ZW50cyAmc2VncywKICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIG5zZWdz KTsKCiAgICAgdm9pZCBkcmF3X3NlZ21lbnRzICAoY29uc3QgR2RrX0dDICAgICAgICZnYywKICAg ICAgICAgICAgICAgICAgICAgICAgICBHZGtTZWdtZW50ICAqc2VncywKICAgICAgICAgICAgICAg ICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgbnNlZ3MpOwoKICAgICAgCiAgICAgIAogICAg IHZvaWQgZHJhd19saW5lcyAgICAgKGNvbnN0IEdka19HQyAgICAgICAgJmdjLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEdka19Qb2ludHMgICAmcG9pbnRzKTsKCiAgICAgIAogICAg ICAKICAgICB2b2lkIGRyYXdfbGluZXMgICAgIChjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAg ICAgICAgICAgICAgICAgICAgICAgICBHZGtQb2ludCAgICAgKnBvaW50cywKICAgICAgICAgICAg ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIG5wb2ludHMpOwoKCiAgICAgdm9pZCBkcmF3X3Rl eHRfd2MgICAoY29uc3QgR2RrX0ZvbnQgICAgICAmZm9udCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBHZGtfR0MgICAgICAgICZnYywKICAgICAgICAgICAgICAgICAgICAgICAgICBn aW50ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB5 LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1dDaGFyICp0ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgdGV4dF9sZW5ndGgpOwoKIAogICAgIHZv aWQgY29weV9hcmVhKGNvbnN0IEdka19HQyAmZ2MsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAg IHgsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIHksCiAgICAgICAgICAgICAgICAgICAgY29u c3QgR2RrX0RyYXdhYmxlJiBzcmMsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIHNyY194LAog ICAgICAgICAgICAgICAgICAgIGdpbnQgICBzcmNfeSwKICAgICAgICAgICAgICAgICAgICBnaW50 ICAgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgZ2ludCAgIGhlaWdodCk7CgogICAgICAKICAg ICB2b2lkIHNldF91c2VyX2RhdGEoZ3BvaW50ZXIgZGF0YSk7CiAgICAgZ3BvaW50ZXIgZ2V0X3Vz ZXJfZGF0YSgpOwoKCgoKCgogICAgIHZvaWQgZ2V0X3NpemUoZ2ludCAmd2lkdGgsZ2ludCAmaGVp Z2h0KTsKICAgICB2b2lkIGdldF9wb3NpdGlvbihnaW50ICZ4LGdpbnQgJnkpOwogICAgIEdka19W aXN1YWwgZ2V0X3Zpc3VhbCgpOwogICAgIEdka1dpbmRvd1R5cGUgZ2V0X3R5cGUoKTsKCiAKICAg ICBnaW50IHdpZHRoKCk7CiAgICAgZ2ludCBoZWlnaHQoKTsKICAgICBnaW50IHgoKTsKICAgICBn aW50IHkoKTsKCiAgfTsKCgojIDMzICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMgMSAi L29wdC9ndGsvaW5jbHVkZS9nZGstLS93aW5kb3cuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAogCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2xpc3QuaCIgMQoKCgojIDE1 MCAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9saXN0LmgiCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1 ZGUvZ2RrLS0vd2luZG93LmgiIDIKCgpuYW1lc3BhY2UgR3RrCnsKICB1c2luZyBzdGQ6OnN0cmlu ZyA7ICAKfQoKIAogCiAKY2xhc3MgR2RrX1dpbmRvdzpwdWJsaWMgR2RrX0RyYXdhYmxlCiAgewog ICBwdWJsaWM6CgoKCgogICBwcm90ZWN0ZWQ6CiAgICAgIAogICAgIHZvaWQgZGVzdHJveSgpOwoK ICAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwoKICAgICAgCiAgICAgIAogICAgICAKICAg ICB2aXJ0dWFsIHZvaWQgIHVucmVmKCk7CgogCgoKCiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdk a19XaW5kb3coKTsKICAgcHVibGljOgoKICAgICAgCiAgICAgR2RrX1dpbmRvdyhHZGtXaW5kb3cg Kndpbik7CgogICAgICAKICAgICBHZGtfV2luZG93KGNvbnN0IEdka19XaW5kb3cmIHdpbik7Cgog ICAgICAKICAgICBHZGtfV2luZG93KGNvbnN0IEdka19XaW5kb3cgICAgICZwYXJlbnQsCiAgICAg ICAgICAgICAgICBjb25zdCBHZGtfV2luZG93QXR0ciAgJmF0dHJpYnV0ZXMsCiAgICAgICAgICAg ICAgICBnaW50ICAgICAgICAgICAgYXR0cmlidXRlc19tYXNrKTsKCiAgICAgIAogICAgIEdka19X aW5kb3coY29uc3QgR2RrX1dpbmRvd0F0dHIgICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAg Z2ludCAgICAgICAgICAgIGF0dHJpYnV0ZXNfbWFzayk7CgogICAgICAKICAgICB2aXJ0dWFsIH5H ZGtfV2luZG93KCk7CgogICAgICAKCiAgICAgIAogICAgIHZvaWQgY3JlYXRlKGNvbnN0IEdka19X aW5kb3cgICAgICZwYXJlbnQsCiAgICAgICAgICAgICAgICBjb25zdCBHZGtfV2luZG93QXR0ciAg JmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgYXR0cmlidXRlc19t YXNrKTsKCiAgICAgR2RrX1dpbmRvdyYgb3BlcmF0b3IgPSAoY29uc3QgR2RrX1dpbmRvdyYpOwoK ICAgICAgCgogICAgIHZvaWQgc2hvdygpOwogICAgIHZvaWQgaGlkZSgpOwogICAgIHZvaWQgd2l0 aGRyYXcoKTsKICAgICB2b2lkIG1vdmUoZ2ludCB4LCBnaW50IHkpOwogICAgIHZvaWQgcmVzaXpl KGdpbnQgd2lkdGgsZ2ludCBoZWlnaHQpOwogICAgIHZvaWQgbW92ZV9yZXNpemUgICAgIChnaW50 ICAgICAgICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgeSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB3aWR0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQpOwogICAgIHZvaWQgcmVwYXJl bnQgICAgICAgIChHZGtfV2luZG93ICAgJm5ld19wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg ICAgICAgICB5KTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBjbGVhcl9hcmVhICAgICAg KGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAg ICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHdpZHRoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGhlaWdodCk7CiAgICAgdm9pZCBj bGVhcl9hcmVhX2UgICAgKGdpbnQgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2ludCAgICAgICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg ICAgIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgIGhlaWdo dCk7CgogICAgICAKICAgICB2b2lkIGNvcHlfYXJlYSAgICAgICAoR2RrX0dDICAgICAgICZnYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICB4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBnaW50ICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg IEdka19XaW5kb3cgICAmc291cmNlX3dpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2ludCAgICAgICAgICBzb3VyY2VfeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg ICAgICAgICBzb3VyY2VfeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAg ICB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICBoZWlnaHQp OwoKICAgICB2b2lkIHJhaXNlKCk7CiAgICAgdm9pZCBsb3dlcigpOwoKICAgICAgCiAgICAgdm9p ZCBzZXRfdXNlcl9kYXRhICAgKGdwb2ludGVyICAgICAgICAgdXNlcl9kYXRhKTsKCiAgICAgdm9p ZCBzZXRfb3ZlcnJpZGVfcmVkaXJlY3QoYm9vbCBvdmVycmlkZV9yZWRpcmVjdCk7CgogICAgICAK ICAgICB2b2lkIGFkZF9maWx0ZXIgICAgICAoR2RrRmlsdGVyRnVuYyAgZnVuY3Rpb24sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIGRhdGEpOwogICAgIHZvaWQgcmVt b3ZlX2ZpbHRlciAgIChHZGtGaWx0ZXJGdW5jICBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3BvaW50ZXIgICAgICAgZGF0YSk7CiAgICAgdm9pZCBzZXRfaGludHMgICAgICAg KGdpbnQgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg ICAgICAgICB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIG1p bl93aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICBtaW5f aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIG1heF93 aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICBtYXhfaGVp Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIGZsYWdzKTsK ICAgICB2b2lkIHNldF90aXRsZSAgICAgICAoY29uc3QgR3RrOjpzdHJpbmcgJnRpdGxlKTsKICAg ICB2b2lkIHNldF9iYWNrZ3JvdW5kICAoY29uc3QgR2RrX0NvbG9yICAgICAgICZjb2xvcik7CiAg ICAgdm9pZCBzZXRfYmFja19waXhtYXAgKEdka19QaXhtYXAgICAgICAmcGl4bWFwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgIHBhcmVudF9yZWxhdGl2ZSk7Cgog ICAgIHZvaWQgc2V0X2N1cnNvciAgICAgIChjb25zdCBHZGtfQ3Vyc29yICAgJmN1cnNvcik7CiAg ICAgdm9pZCBzZXRfY29sb3JtYXAgICAgKGNvbnN0IEdka19Db2xvcm1hcCAmY29sb3JtYXApOwoK ICAgICAgCiAgICAgdm9pZCBnZXRfdXNlcl9kYXRhICAgKGdwb2ludGVyICAgICAgICAqZGF0YSk7 CgogICAgIHZvaWQgZ2V0X2dlb21ldHJ5ICAgIChnaW50ICAgICAgICAgICAgJngsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAmeSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2ludCAgICAgICAgICAgICZ3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2ludCAgICAgICAgICAgICZoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp bnQgICAgICAgICAgICAmZGVwdGgpOwogICAgIGdpbnQgZ2V0X2RlcHRoICAgICAgICgpOwoKICAg ICAgCiAgICAgdm9pZCBnZXRfcG9zaXRpb24gICAgKGdpbnQgICAgICAgICAgICAmeCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZ5KTsKIAogICAgICAKICAgICB2 b2lkIGdldF9zaXplICAgICAgICAoZ2ludCAgICAgICAgICAgICZ3aWR0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZoZWlnaHQpOwoKICAgICAgCiAgICAgR2Rr X1Zpc3VhbCAgICBnZXRfdmlzdWFsKCk7CgogICAgIEdka19Db2xvcm1hcCAgZ2V0X2NvbG9ybWFw KCk7CgogICAgICAKICAgICBHZGtXaW5kb3dUeXBlIGdldF90eXBlKCk7CgogICAgIGdpbnQgZ2V0 X29yaWdpbiAgICAgIChnaW50ICAgICAgICAgICAgJngsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdpbnQgICAgICAgICAgICAmeSk7CgogICAgICAKICAgICBnaW50IGdldF9kZXNrcmVsYXRp dmVfb3JpZ2luICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGdpbnQgICAgICAgICAg ICAmeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICZ5KTsKCiAg ICAgIAogICAgIHZvaWQgZ2V0X3Jvb3Rfb3JpZ2luIChnaW50ICAgICAgICAgICAgJngsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAmeSk7CgogICAgIEdka19XaW5k b3cgZ2V0X3BvaW50ZXIoZ2ludCAgICAgICAgICAgICZ4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBnaW50ICAgICAgICAgICAgJnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka01v ZGlmaWVyVHlwZSAmbWFzayk7CiAgICAgR2RrX1dpbmRvdyBnZXRfcGFyZW50KCk7CiAgICAgR2Rr X1dpbmRvdyBnZXRfdG9wbGV2ZWwoKTsKCgoKCgoKICAgICBHZGtFdmVudE1hc2sgIGdldF9ldmVu dHMoKTsKICAgICB2b2lkIHNldF9ldmVudHMgICAgICAoR2RrRXZlbnRNYXNrICAgICBldmVudF9t YXNrKTsKICAgICB2b2lkIHNldF9pY29uICAgICAgICAoR2RrX1dpbmRvdyAgICAgICAmaWNvbl93 aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka19QaXhtYXAgICAgICAgJnBpeG1h cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrX0JpdG1hcCAgICAgICAmbWFzayk7CiAg ICAgdm9pZCBzZXRfaWNvbl9uYW1lICAgKGNvbnN0IEd0azo6c3RyaW5nICAgICAmbmFtZSk7CiAg ICAgdm9pZCBzZXRfZ3JvdXAgICAgICAgKEdka19XaW5kb3cgICAgICAmbGVhZGVyKTsKICAgICB2 b2lkIHNldF9kZWNvcmF0aW9ucyAoR2RrV01EZWNvcmF0aW9uICBkZWNvcmF0aW9ucyk7CiAgICAg dm9pZCBzZXRfZnVuY3Rpb25zICAgKEdka1dNRnVuY3Rpb24gICAgZnVuY3Rpb25zKTsKCiAgICAg IAoKCgoKCiAgICAgIAogICAgIHZvaWQgc2V0X2dlb21ldHJ5X2hpbnRzKEdka19HZW9tZXRyeSAm Z2VvbWV0cnksR2RrV2luZG93SGludHMgZmxhZ3MpOwoKICAgICAgCiAgICAgdm9pZCBzZXRfcm9s ZShjb25zdCBHdGs6OnN0cmluZyYgcm9sZSk7CgogICAgICAKICAgICB2b2lkIHNldF90cmFuc2ll bnRfZm9yKEdka19XaW5kb3cgJmxlYWRlcik7CgoKICB9OwoKCiMgMzQgIi9vcHQvZ3RrL2luY2x1 ZGUvZ2RrLS0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL3BpeG1hcC5oIiAxCiAK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIEd0awp7CiAgdXNpbmcgc3RkOjpz dHJpbmcgOyAgCn0KCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX1BpeG1hcDpwdWJsaWMg R2RrX0RyYXdhYmxlCnsKICAgCiAgdmlydHVhbCB2b2lkIHJlZigpOwogIHZpcnR1YWwgdm9pZCB1 bnJlZigpOwoKCgoKcHVibGljOgoKICAgCiAgR2RrX1BpeG1hcCgpOwoKcHVibGljOgoKICAgICAg CiAgR2RrX1BpeG1hcChHZGtQaXhtYXAgKnBpeG1hcCk7CgogICAKICBHZGtfUGl4bWFwKEdka19Q aXhtYXAgY29uc3QgJnBpeG1hcCk7CgogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJs ZSAgJmRyYXdhYmxlLAoJICAgICBnaW50ICAgICAgICB3aWR0aCwgCgkgICAgIGdpbnQgICAgICAg IGhlaWdodCwKCSAgICAgZ2ludCAgICAgICAgZGVwdGg9LTEpOwoKICAgCiAgR2RrX1BpeG1hcChn aW50ICAgICAgICB3aWR0aCwgCgkgICAgIGdpbnQgICAgICAgIGhlaWdodCwKCSAgICAgZ2ludCAg ICAgICAgZGVwdGg9LTEpOwoKICAgCiAgR2RrX1BpeG1hcChjb25zdCBHZGtfRHJhd2FibGUgICZk cmF3YWJsZSwKCSAgICAgY29uc3QgZ2NoYXIgICAgICAqZGF0YSwKCSAgICAgZ2ludCAgICAgICAg d2lkdGgsCgkgICAgIGdpbnQgICAgICAgIGhlaWdodCwKCSAgICAgZ2ludCAgICAgICAgZGVwdGgs CgkgICAgIGNvbnN0IEdka19Db2xvciAgJmZnLAoJICAgICBjb25zdCBHZGtfQ29sb3IgICZiZyk7 CgogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJsZSAgJmRyYXdhYmxlLAoJICAgICBj b25zdCBHZGtfQ29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkgICAgIGNvbnN0IEd0azo6c3Ry aW5nICAgICAgJmZpbGVuYW1lKTsKIAogICAKICBHZGtfUGl4bWFwKGNvbnN0IEdka19EcmF3YWJs ZSAgJmRyYXdhYmxlLAoJICAgICBHZGtfQml0bWFwICAmYml0bWFwLAoJICAgICBjb25zdCBHZGtf Q29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkgICAgIGNvbnN0IEd0azo6c3RyaW5nICAgICAg JmZpbGVuYW1lKTsKICAgICAKICAgCiAgR2RrX1BpeG1hcChjb25zdCBHZGtfRHJhd2FibGUgICAm ZHJhd2FibGUsCgkgICAgIEdka19Db2xvcm1hcCAmY29sb3JtYXAsCgkgICAgIEdka19CaXRtYXAg ICAmYml0bWFwLAoJICAgICBjb25zdCBHZGtfQ29sb3IgICAgJnRyYW5zcGFyZW50X2NvbG9yLAoJ ICAgICBjb25zdCBHdGs6OnN0cmluZyAmZmlsZW5hbWUpOwoKICAgCiAgdmlydHVhbCB+R2RrX1Bp eG1hcCgpOwoKICBHZGtfUGl4bWFwJiBvcGVyYXRvciA9IChjb25zdCBHZGtfUGl4bWFwJik7CgoK ICAgCiAgIAogICAKICB2b2lkIGNyZWF0ZShjb25zdCBHZGtfRHJhd2FibGUgICZkcmF3YWJsZSwK CSAgICAgIGdpbnQgICAgICAgIHdpZHRoLAoJICAgICAgZ2ludCAgICAgICAgaGVpZ2h0LAoJICAg ICAgZ2ludCAgICAgICAgZGVwdGg9LTEpOwogICAgCiAgIAogICAKICB2b2lkIGNyZWF0ZShnaW50 ICAgICAgIHdpZHRoLAoJICAgICAgZ2ludCAgICAgICBoZWlnaHQsCgkgICAgICBnaW50ICAgICAg IGRlcHRoPS0xKTsKCiAgIAogIHZvaWQgY3JlYXRlX2Zyb21fZGF0YSgKCQkJY29uc3QgR2RrX0Ry YXdhYmxlICAmZHJhd2FibGUsCgkJCWNvbnN0IGdjaGFyICpkYXRhLAoJCQlnaW50ICAgICAgICB3 aWR0aCwKCQkJZ2ludCAgICAgICAgaGVpZ2h0LAoJCQlnaW50ICAgICAgICBkZXB0aCwKCQkJY29u c3QgR2RrX0NvbG9yICAgJmZnLAoJCQljb25zdCBHZGtfQ29sb3IgICAmYmcpOwoKICAgCiAgdm9p ZCBjcmVhdGVfZnJvbV94cG0oCgkJICAgICAgIGNvbnN0IEdka19EcmF3YWJsZSAgJmRyYXdhYmxl LAoJCSAgICAgICBjb25zdCBHZGtfQ29sb3IgICAmdHJhbnNwYXJlbnRfY29sb3IsCgkJICAgICAg IGNvbnN0IEd0azo6c3RyaW5nICAgICAgJmZpbGVuYW1lKTsKCiAgIAogIHZvaWQgY3JlYXRlX2Zy b21feHBtKAoJCSAgICAgICBjb25zdCBHZGtfRHJhd2FibGUgICZkcmF3YWJsZSwKCQkgICAgICAg R2RrX0JpdG1hcCAgJm1hc2ssCgkJICAgICAgIGNvbnN0IEdka19Db2xvciAgICZ0cmFuc3BhcmVu dF9jb2xvciwKCQkgICAgICAgY29uc3QgR3RrOjpzdHJpbmcgICAgICAmZmlsZW5hbWUpOwogICAg CiAgIAogIHZvaWQgY3JlYXRlX2NvbG9ybWFwX2Zyb21feHBtKAoJCQkJY29uc3QgR2RrX0RyYXdh YmxlICAgJmRyYXdhYmxlLAoJCQkJR2RrX0NvbG9ybWFwICZjb2xvcm1hcCwKCQkJCUdka19CaXRt YXAgICAmYml0bWFwLAoJCQkJY29uc3QgR2RrX0NvbG9yICAgICZ0cmFuc3BhcmVudF9jb2xvciwK CQkJCWNvbnN0IEd0azo6c3RyaW5nICZmaWxlbmFtZSk7CiAgICAgCiAgdm9pZCBjcmVhdGVfZnJv bV94cG1fZChjb25zdCBHZGtfRHJhd2FibGUgJmRyYXdhYmxlLCAKCQkJIEdka19CaXRtYXAgICAg ICAgJmJpdG1hcCwKCQkJIGNvbnN0IEdka19Db2xvciAgJnRyYW5zcGFyZW50X2NvbG9yLAoJCQkg Y29uc3QgZ2NoYXIgKiBjb25zdCAqZGF0YSk7CiAgICAgCiAgdm9pZCBjcmVhdGVfY29sb3JtYXBf ZnJvbV94cG1fZCAoY29uc3QgR2RrX0RyYXdhYmxlICAgJmRyYXdhYmxlLAoJCQkJICAgR2RrX0Nv bG9ybWFwICZjb2xvcm1hcCwKCQkJCSAgIEdka19CaXRtYXAgICZtYXNrLAoJCQkJICAgY29uc3Qg R2RrX0NvbG9yICAgICZ0cmFuc3BhcmVudF9jb2xvciwKCQkJCSAgIGNvbnN0IGdjaGFyICogY29u c3QgKmRhdGEpOwoKICBzdGF0aWMgdm9pZCB3YXJuX2Fib3V0X3hwbV9maWxlX3Byb2JsZW0oY29u c3QgR3RrOjpzdHJpbmcgJmZpbGVuYW1lKTsKCiAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0KiBk ZWZhdWx0UGl4bWFwOwogIAp9OwoKCiMgMzUgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIgMgoK IyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2JpdG1hcC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAogCmNsYXNzIEdka19CaXRtYXA6cHVibGljIEdka19EcmF3YWJsZQogIHsK ICAgcHJvdGVjdGVkOgogICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVh bCB2b2lkIHVucmVmKCk7CgogCgoKCiAgIHB1YmxpYzoKCiAgICAgIAogICAgIEdka19CaXRtYXAo KTsKCiAgIHB1YmxpYzoKICAgICAgCiAgICAgR2RrX0JpdG1hcChHZGtCaXRtYXAgKmJpdG1hcCk7 CgogICAgICAKICAgICBHZGtfQml0bWFwKGNvbnN0IEdka19CaXRtYXAmIGJpdG1hcCk7CiAgICAK ICAgICAgCiAgICAgR2RrX0JpdG1hcChHZGtfV2luZG93ICAmd2luZG93LAogICAgICAgICAgICAg ICAgZ2NoYXIgICAgICAqZGF0YSwKICAgICAgICAgICAgICAgIGdpbnQgICAgICAgIHdpZHRoLAog ICAgICAgICAgICAgICAgZ2ludCAgICAgICAgaGVpZ2h0KTsKICAgICAgCiAgICAgR2RrX0JpdG1h cChjb25zdCBHZGtfRHJhd2FibGUgICZ3aW5kb3csCiAgICAgICAgICAgICAgICBnY2hhciAgICAg ICpkYXRhLAogICAgICAgICAgICAgICAgZ2ludCAgICAgICAgd2lkdGgsCiAgICAgICAgICAgICAg ICBnaW50ICAgICAgICBoZWlnaHQpOwoKICAgICAgCiAgICAgfkdka19CaXRtYXAoKTsKCiAgICAg IAogICAgIHZvaWQgY3JlYXRlKEdka19XaW5kb3cgICZ3aW5kb3csCiAgICAgICAgICAgICAgICBj b25zdCBnY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgIGdpbnQgICAgICAgIHdpZHRoLAogICAg ICAgICAgICAgICAgZ2ludCAgICAgICAgaGVpZ2h0KTsKCiAgICAgIAogICAgIHZvaWQgY3JlYXRl KGNvbnN0IEdka19EcmF3YWJsZSAgJndpbmRvdywKICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy ICpkYXRhLAogICAgICAgICAgICAgICAgZ2ludCAgICAgICAgd2lkdGgsCiAgICAgICAgICAgICAg ICBnaW50ICAgICAgICBoZWlnaHQpOwoKICAgICBHZGtfQml0bWFwJiBvcGVyYXRvciA9IChjb25z dCBHZGtfQml0bWFwJik7CgogIH07CgoKCiMgMzYgIi9vcHQvZ3RrL2luY2x1ZGUvZ2RrLS0uaCIg MgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tL2ltYWdlLmgiIDEKIAoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX0ltYWdlIDog cHVibGljIEdka19IYW5kbGU8R2RrSW1hZ2U+CiAgewogICBwcml2YXRlOgogICAgIHZvaWQgZGVz dHJveSgpOwogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCB1bnJlZigpOwoKICAgICBHZGtfSW1h Z2UmIG9wZXJhdG9yID0gKGNvbnN0IEdka19JbWFnZSYgaW1hZ2UpOwoKICAgcHVibGljOiAKICAg ICAgCiAgICAgR2RrX0ltYWdlKCk7CgogICAgICAKICAgICBHZGtfSW1hZ2UoR2RrSW1hZ2UqIGlt YWdlKTsKCiAgICAgIAogICAgICAKIAogICAgICAKICAgICBHZGtfSW1hZ2UoR2RrSW1hZ2VUeXBl IHR5cGUsCiAgICAgICAgICAgICAgIEdka19WaXN1YWwgICAgICZ2aXN1YWwsCiAgICAgICAgICAg ICAgIGdpbnQgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICBnaW50ICAgICAgICAgICBo ZWlnaHQpOwoKICAgICAgCiAgICAgfkdka19JbWFnZSgpOwoKICAgICAgCiAgICAgR2RrSW1hZ2Uq IG9wZXJhdG9yIC0+ICgpOwoKICAgICAgCiAgICAgY29uc3QgR2RrSW1hZ2UqIG9wZXJhdG9yIC0+ ICgpIGNvbnN0OwoKICAgICAgCiAgICAgdm9pZCBjcmVhdGUoR2RrSW1hZ2VUeXBlIHR5cGUsCiAg ICAgICAgICAgICAgICAgR2RrX1Zpc3VhbCYgICAgdmlzdWFsLAogICAgICAgICAgICAgICAgIGdp bnQgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIGhlaWdo dCk7CgogICAgIHZvaWQgcmVsZWFzZSgpOwoKICAgICAgCiAgICAgdm9pZCBnZXQoR2RrX0RyYXdh YmxlICZkcmF3YWJsZSwKICAgICAgICAgICAgICBnaW50IHgsZ2ludCB5LGdpbnQgd2lkdGgsZ2lu dCBoZWlnaHQpOwogICAgIAogICAgICAKICAgICB2b2lkIHB1dF9waXhlbChnaW50IHgsZ2ludCB5 LGd1aW50MzIgcGl4ZWwpOwoKICAgICAgCiAgICAgZ3VpbnQzMiBnZXRfcGl4ZWwoZ2ludCB4LGdp bnQgeSkgY29uc3Q7CgogICAgICAKICAgICB2b2lkIGFzc2lnbihHZGtJbWFnZSogJmltZyk7CiAg ICAgCiAgfTsKCgoKCgoKCgoKCgojIDM3ICIvb3B0L2d0ay9pbmNsdWRlL2dkay0tLmgiIDIKCiMg MSAiL29wdC9ndGsvaW5jbHVkZS9nZGstLS9jdXJzb3IuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgR2RrX0N1cnNvcjogcHVibGljIEdk a19IYW5kbGU8R2RrQ3Vyc29yPgogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgR2RrQ3Vyc29y VHlwZSBUeXBlOwoKICAgcHJvdGVjdGVkOgoKICAgICAgCiAgICAgdm9pZCByZWYoKSB7fTsKCiAg ICAgIAogICAgIHZvaWQgdW5yZWYoKSB7fTsKCiAKCgoKICAgcHVibGljOgoKICAgICAgCiAgICAg R2RrX0N1cnNvcigpOwoKICAgcHVibGljOgogICAgICAKICAgICBHZGtfQ3Vyc29yKEdka0N1cnNv ciAqY3Vyc29yKTsKICAKICAgICBHZGtfQ3Vyc29yKGNvbnN0IEdka19DdXJzb3ImIGZvbnQpOwoK ICAgICAgCiAgICAgR2RrX0N1cnNvcihUeXBlIGN1cnNvcl90eXBlKTsKCiAgICAgIAogICAgIEdk a19DdXJzb3IgKGNvbnN0IEdka19QaXhtYXAgJnNvdXJjZSwgCgkJIGNvbnN0IEdka19QaXhtYXAg Jm1hc2ssIAoJCSBjb25zdCBHZGtfQ29sb3IgICZmZywKCQkgY29uc3QgR2RrX0NvbG9yICAmYmcs CiAJIAkgZ2ludCAgICAgICAgICAgICB4LAoJCSBnaW50ICAgICAgICAgICAgIHkKCQkpOwoKICAg ICB+R2RrX0N1cnNvcigpOwoKICAgICB2b2lkIGNyZWF0ZShUeXBlIGN1cnNvcl90eXBlKTsKICAg ICB2b2lkIGNyZWF0ZShjb25zdCBHZGtfUGl4bWFwICZzb3VyY2UsIAoJCSBjb25zdCBHZGtfUGl4 bWFwICZtYXNrLCAKCQkgY29uc3QgR2RrX0NvbG9yICAmZmcsCgkJIGNvbnN0IEdka19Db2xvciAg JmJnLAogCSAJIGdpbnQgICAgICAgICAgICAgeCwKCQkgZ2ludCAgICAgICAgICAgICB5CgkJKTsK CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CgogICAgIEdka19DdXJz b3ImIG9wZXJhdG9yID0gKGNvbnN0IEdka19DdXJzb3ImKTsKICB9OwoKCiMgMzggIi9vcHQvZ3Rr L2luY2x1ZGUvZ2RrLS0uaCIgMgoKCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9iYXNl LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9wcm94eS5oIiAxCiAKIAoKCgojIDEg Ii9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3NpZ25hbF9zeXN0ZW0uaCIgMQogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDEKIAog CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9saWIvc2lnYysrL2luY2x1ZGUv c2lnYysrY29uZmlnLmgiIDEKIAogCgoKCiMgMTggIi9vcHQvZ3RrL2xpYi9zaWdjKysvaW5jbHVk ZS9zaWdjKytjb25maWcuaCIKCgoKCgoKIAojIDM4ICIvb3B0L2d0ay9saWIvc2lnYysrL2luY2x1 ZGUvc2lnYysrY29uZmlnLmgiCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgojIDc3ICIv b3B0L2d0ay9saWIvc2lnYysrL2luY2x1ZGUvc2lnYysrY29uZmlnLmgiCgoKCgoKCgoKCgoKIyA5 NiAiL29wdC9ndGsvbGliL3NpZ2MrKy9pbmNsdWRlL3NpZ2MrK2NvbmZpZy5oIgoKCgoKCgojIDI1 ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVk ZS9zaWdjKysvdHlwZS5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIFNp Z0MKewoKCiAKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IFRyYWl0CiAgewogICB0eXBl ZGVmIGNvbnN0IFQmIHJlZjsKICAgdHlwZWRlZiBUICAgICAgICB0eXBlOwogIH07Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IFRyYWl0PFQmPgogIHsKICAgdHlwZWRlZiBUJiByZWY7CiAg IHR5cGVkZWYgVCYgdHlwZTsKICB9OwoKCgoKCgoKCgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgVHJhaXQ8 dm9pZD46cHVibGljIFRyYWl0PGludD4KICB7fTsKCgoKfQoKCgojIDI2ICIvb3B0L2d0ay9pbmNs dWRlL3NpZ2MrKy9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0 LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysr L3Njb3BlLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCm5hbWVzcGFjZSBTaWdDCnsKCgoK c3RydWN0ICAgU2NvcGVOb2RlIAogIHsKICAgbXV0YWJsZSBTY29wZU5vZGUgKnByZXZfOwogICBt dXRhYmxlIFNjb3BlTm9kZSAqbmV4dF87CgogICAgCiAgIHZvaWQgcmVtb3ZlX3NlbGYoKTsKCiAg ICAKICAgdmlydHVhbCB2b2lkIGVyYXNlKCk7CgogICAgCiAgIHZpcnR1YWwgdm9pZCBkaXNjb25u ZWN0KGJvb2wgZGVzdHJveT0wKTsKCiAgIFNjb3BlTm9kZSgpCgoKCiAgIDpwcmV2Xyh0aGlzKSxu ZXh0Xyh0aGlzKSB7fQoKCiAgIHZpcnR1YWwgflNjb3BlTm9kZSgpOwoKICAgcHJpdmF0ZToKICAg ICBTY29wZU5vZGUmIG9wZXJhdG9yPShjb25zdCBTY29wZU5vZGUmKTsKICAgICBTY29wZU5vZGUo Y29uc3QgU2NvcGVOb2RlJik7CiAgfTsKCnN0cnVjdCAgIERhdGFOb2RlOiBwdWJsaWMgU2NvcGVO b2RlCiAgewogICB2aXJ0dWFsIHZvaWQgZXJhc2UoKTsKICAgdmlydHVhbCB+RGF0YU5vZGUoKTsK ICB9OwoKIAoKCmNsYXNzIE9iamVjdFNjb3BlZDsKY2xhc3MgT2JqZWN0UmVmZXJlbmNlZDsKY2xh c3MgT2JqZWN0OwpjbGFzcyBTY29wZTsKCmNsYXNzICAgUmVmZXJlbmNlCiAgewogICBwcm90ZWN0 ZWQ6CiAgICAgbXV0YWJsZSBPYmplY3RSZWZlcmVuY2VkKiBvYmpfOwogICAgIG11dGFibGUgdm9p ZCogY2FjaGVfOwoKICAgcHVibGljOgogICAgIHZvaWQgc2V0X3NpbmsoKTsKCiAgICAgdm9pZCBp bml0KE9iamVjdFJlZmVyZW5jZWQqIG9iaik7CiAgICAgdm9pZCBzZXQoT2JqZWN0UmVmZXJlbmNl ZCogb2JqLHZvaWQqIGNhY2hlPTAsYm9vbCBwdHI9ZmFsc2UpOwoKICAgICBSZWZlcmVuY2UmIG9w ZXJhdG9yPShPYmplY3RSZWZlcmVuY2VkICpvYmopIHsgc2V0KG9iaik7IHJldHVybiAqdGhpczsg fQogICAgIFJlZmVyZW5jZSYgb3BlcmF0b3I9KE9iamVjdFJlZmVyZW5jZWQgJm9iaikgeyBzZXQo Jm9iaik7IHJldHVybiAqdGhpczsgfQogICAgIFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IFJl ZmVyZW5jZSYgcmVmKSAgeyBzZXQocmVmLm9ial8pOyByZXR1cm4gKnRoaXM7IH07CgogICAgIE9i amVjdFJlZmVyZW5jZWQqIG9iamVjdCgpIGNvbnN0IHtyZXR1cm4gb2JqXzt9CiAgICAgdm9pZCog Y2FjaGUoKSBjb25zdCB7cmV0dXJuIGNhY2hlXzt9CgogICAgIFJlZmVyZW5jZSgpOm9ial8oMCkg e30KICAgICBSZWZlcmVuY2UoT2JqZWN0UmVmZXJlbmNlZCAmb2JqKQogICAgICAge2luaXQoJm9i aik7fQogICAgIFJlZmVyZW5jZShjb25zdCBSZWZlcmVuY2UmIHJlZikKICAgICAgIHtpbml0KHJl Zi5vYmpfKTt9CiAgICAgflJlZmVyZW5jZSgpOwogIH07CiAgICAgCmNsYXNzICAgU2NvcGU6cHVi bGljIFNjb3BlTm9kZQogIHsKICAgZnJpZW5kIGNsYXNzIE9iamVjdFNjb3BlZDsKCiAgICAgU2Nv cGUmIG9wZXJhdG9yPShjb25zdCBTY29wZSYgc2NvcGUpOwogICAgIFNjb3BlKGNvbnN0IFNjb3Bl JiBzY29wZSk7CgogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXQoT2JqZWN0U2NvcGVkKiBvYmos dm9pZCogY2FjaGUsYm9vbCBwdHIpOwogICAgIG11dGFibGUgT2JqZWN0U2NvcGVkKiBvYmpfOwog ICAgIG11dGFibGUgdm9pZCogY2FjaGVfOwoKICAgICB2aXJ0dWFsIHZvaWQgb25fY29ubmVjdCgp PTA7CiAgICAgdmlydHVhbCB2b2lkIGVyYXNlKCk7CgogICAgIHZvaWQgcmVnaXN0ZXJfc2NvcGUo T2JqZWN0U2NvcGVkICopOwogICAgIHZvaWQgcmVnaXN0ZXJfc2NvcGUoY29uc3QgU2NvcGUgKnBh cmVudD0wKTsKICAgICB2b2lkIHVucmVnaXN0ZXJfc2NvcGUoKTsKCiAgIHB1YmxpYzoKCiAgICAg dm9pZCByZWZlcmVuY2UoKTsKICAgICB2b2lkIHVucmVmZXJlbmNlKCk7CiAgICAgdm9pZCBzZXRf c2luaygpOwoKICAgICBPYmplY3RTY29wZWQqIG9iamVjdCgpIGNvbnN0IHtyZXR1cm4gKE9iamVj dFNjb3BlZCopKG9ial8pO30KICAgICB2b2lkKiBjYWNoZSgpIGNvbnN0IHtyZXR1cm4gY2FjaGVf O30KCiAgICAgIAogICAgIHZvaWQgaW52YWxpZCgpOwoKICAgICBTY29wZSgpOm9ial8oMCksY2Fj aGVfKDApIHt9CiAgICAgdmlydHVhbCB+U2NvcGUoKTsKICB9OwoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKc3RydWN0IFNjb3Blcwp7CgpjbGFzcyAgIFVuY291bnRlZDpwdWJsaWMgU2NvcGUKICB7CiAg ICAgVW5jb3VudGVkJiBvcGVyYXRvcj0oY29uc3QgVW5jb3VudGVkJik7CiAgICAgVW5jb3VudGVk KGNvbnN0IFVuY291bnRlZCYpOwogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5l Y3QoYm9vbCBsZXZlbD0wKTsKICAgICBVbmNvdW50ZWQoKTpTY29wZSgpIHt9CiAgICAgdmlydHVh bCB+VW5jb3VudGVkKCk7CiAgfTsKCmNsYXNzICAgRXh0ZW5kOnB1YmxpYyBTY29wZQogIHsKICAg ICBFeHRlbmQmIG9wZXJhdG9yPShjb25zdCBFeHRlbmQmKTsKICAgICBFeHRlbmQoY29uc3QgRXh0 ZW5kJik7CiAgIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb25fY29ubmVjdCgpOwogICAg IHZpcnR1YWwgdm9pZCBlcmFzZSgpOwogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nv bm5lY3QoYm9vbCBsZXZlbD0wKTsKICAgICB2b2lkIHNldChPYmplY3RTY29wZWQqIG9iaix2b2lk KiBjYWNoZSxib29sIHB0cik7CiAgICAgRXh0ZW5kKCk6U2NvcGUoKSB7fQogICAgIHZpcnR1YWwg fkV4dGVuZCgpOwogIH07CgpjbGFzcyAgIExpbWl0OnB1YmxpYyBTY29wZQogIHsKICAgICBMaW1p dCYgb3BlcmF0b3I9KGNvbnN0IExpbWl0Jik7CiAgICAgTGltaXQoY29uc3QgTGltaXQmKTsKICAg cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvbl9jb25uZWN0KCk7CiAgICAgdmlydHVhbCB2 b2lkIGVyYXNlKCk7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdChib29s IGxldmVsPTApOwogICAgIHZvaWQgc2V0KE9iamVjdFNjb3BlZCogb2JqLHZvaWQqIGNhY2hlLGJv b2wgcHRyKTsKICAgICBMaW1pdCgpOlNjb3BlKCkge30KICAgICB2aXJ0dWFsIH5MaW1pdCgpOwog IH07Cgp0eXBlZGVmIEV4dGVuZCBSZWZDb3VudDsKdHlwZWRlZiBSZWZlcmVuY2UgTG9jazsKfTsK CiAKCgogCgoKIApzdHJ1Y3QgICBTY29wZUl0ZXJhdG9yXwogIHsKICAgdHlwZWRlZiBTY29wZU5v ZGUgTm9kZVR5cGU7CiAgIHByaXZhdGU6CiAgICAgTm9kZVR5cGUgKm5vZGVfOwogICBwdWJsaWM6 CgogICBpbmxpbmUgTm9kZVR5cGUqIG5vZGUoKSAgICAgICAgICAgICB7cmV0dXJuIG5vZGVfO30K ICAgaW5saW5lIGNvbnN0IE5vZGVUeXBlKiBub2RlKCkgY29uc3Qge3JldHVybiBub2RlXzt9Cgog ICBpbmxpbmUgTm9kZVR5cGUmIG9wZXJhdG9yKigpCiAgICAge3JldHVybiAqbm9kZV87CiAgICAg fQogICBpbmxpbmUgY29uc3QgTm9kZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0CiAgICAge3JldHVy biAqbm9kZV87CiAgICAgfQogICAKICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY29w ZUl0ZXJhdG9yXyYgaSkgY29uc3QgCiAgICAge3JldHVybiBub2RlXz09aS5ub2RlXzsKICAgICB9 CiAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2NvcGVJdGVyYXRvcl8mIGkpIGNvbnN0 CiAgICAge3JldHVybiBub2RlXyE9aS5ub2RlXzsKICAgICB9CgogICBpbmxpbmUgU2NvcGVJdGVy YXRvcl8mIG9wZXJhdG9yKysoKQogICAgIHsKICAgICAgaWYgKG5vZGVfKSAKICAgICAgICBub2Rl Xz0oTm9kZVR5cGUqKW5vZGVfLT5uZXh0XzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAg IFNjb3BlSXRlcmF0b3JfIG9wZXJhdG9yKysoaW50KQogICAgIHsKICAgICAgU2NvcGVJdGVyYXRv cl8gdG1wPSp0aGlzOwogICAgICArKyp0aGlzOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KCiAg IFNjb3BlSXRlcmF0b3JfJiBvcGVyYXRvcj0gKGNvbnN0IFNjb3BlSXRlcmF0b3JfJiBpKQogICAg IHsKICAgICAgbm9kZV89aS5ub2RlXzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAgIFNj b3BlSXRlcmF0b3JfKGNvbnN0IFNjb3BlSXRlcmF0b3JfICZuKTpub2RlXyhuLm5vZGVfKSB7fQog ICBTY29wZUl0ZXJhdG9yXyhOb2RlVHlwZSAqbik6bm9kZV8obikge30KICAgU2NvcGVJdGVyYXRv cl8oKTpub2RlXygwKSB7fQogIH07CgpjbGFzcyAgIFNjb3BlTGlzdAogIHsKICAgcHVibGljOgog ICB0eXBlZGVmIFNjb3BlTm9kZSBOb2RlVHlwZTsgCiAgIHR5cGVkZWYgU2NvcGVJdGVyYXRvcl8g SXRlcmF0b3I7CgogICBTY29wZU5vZGUgbm9kZV87ICAgCgogICBpbmxpbmUgSXRlcmF0b3IgYmVn aW4oKSAgICAgICAgICAgICB7cmV0dXJuIEl0ZXJhdG9yKG5vZGVfLm5leHRfKTt9CiAgIGlubGlu ZSBJdGVyYXRvciBlbmQoKSAgICAgICAgICAgICAgIHtyZXR1cm4gSXRlcmF0b3IoJm5vZGVfKTt9 CgogICAgCiAgIEl0ZXJhdG9yIGluc2VydF9kaXJlY3QoSXRlcmF0b3IgcG9zLE5vZGVUeXBlICpu KTsKCiAgIEl0ZXJhdG9yIGVyYXNlKEl0ZXJhdG9yIHBvcyk7CiAgIHZvaWQgZXJhc2UoSXRlcmF0 b3Igc3RhcnQsSXRlcmF0b3Igc3RvcCkKICAgICB7IHdoaWxlIChzdGFydCE9c3RvcCkgc3RhcnQ9 ZXJhc2Uoc3RhcnQpOyB9CiAgIHZvaWQgc3dhcF9lbGVtZW50cyhJdGVyYXRvciBwMSxJdGVyYXRv ciBwMik7CgogICB2b2lkIGNsZWFyKCkKICAgICB7IGVyYXNlKGJlZ2luKCksZW5kKCkpOyB9Cgog ICBib29sIGVtcHR5KCkgY29uc3Qge3JldHVybiBub2RlXy5uZXh0Xz09Jm5vZGVfO30gCiAgIAog ICBTY29wZUxpc3QoKTpub2RlXygpIHt9CiAgIH5TY29wZUxpc3QoKSB7IGNsZWFyKCk7IH0KCiAg IHByaXZhdGU6CiAgICAgU2NvcGVMaXN0KGNvbnN0IFNjb3BlTGlzdCYpOwogIH07CgoKCgp9ICAK CgoKIyAyMiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0LmgiIDIKCgoKCm5hbWVzcGFj ZSBTaWdDCnsKCgpleHRlcm4gaW50IHNpZ2NfbWljcm9fdmVyc2lvbjsKZXh0ZXJuIGludCBzaWdj X21pbm9yX3ZlcnNpb247CmV4dGVybiBpbnQgc2lnY19tYWpvcl92ZXJzaW9uOwoKY2xhc3MgSW52 YWxpZF87CmNsYXNzICAgT2JqZWN0UmVmZXJlbmNlZAogIHsKICAgZnJpZW5kIGNsYXNzIFJlZmVy ZW5jZTsKICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICBmcmllbmQgY2xhc3MgSW52YWxpZF87CgoK ICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgZnJpZW5kIFQqIG1hbmFnZShUKik7CgoKICAgcHJv dGVjdGVkOgogICAgICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX2NvdW50XyAgICA6MjQ7CgogICAg ICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX2R5bmFtaWNfICA6MTsKCiAgICAgIAogICAgIHVuc2ln bmVkIGludCBvYmpfb3duZWRfICAgIDoxOwoKICAgICAgCiAgICAgdW5zaWduZWQgaW50IG9ial9m bG9hdGluZ18gOjE7CgogICAgICAKICAgICB1bnNpZ25lZCBpbnQgb2JqX3RyYW5zZmVyXyA6MTsK CiAgICAgIAogICAgIHVuc2lnbmVkIGludCBvYmpfaW52YWxpZF8gIDoxOwoKICAgICAgCiAgICAg dW5zaWduZWQgaW50IG9ial9kZXN0cm95ZWRfIDoxOwoKICAgICAgCiAgICAgdW5zaWduZWQgaW50 IG9ial93ZWFrXyA6MTsKCgogICAgCgogICBwcm90ZWN0ZWQ6CgoKCiAgICAgIAogICAgIHZpcnR1 YWwgdm9pZCBzZXRfZHluYW1pYygpOyAKICAgICBpbmxpbmUgdm9pZCBzZXRfc2luaygpIHtvYmpf ZmxvYXRpbmdfPTA7fQoKICAgcHJvdGVjdGVkOgoKICAgICBpbmxpbmUgdm9pZCByZWdpc3Rlcl9y ZWYoUmVmZXJlbmNlICopCiAgICAgICB7ICAKICAgICAgICBpZiAob2JqX3RyYW5zZmVyXykgCiAg ICAgICAgIHsKICAgICAgICAgIG9ial90cmFuc2Zlcl89MDsKICAgICAgICAgIG9ial9vd25lZF89 MDsKICAgICAgICAgfQogICAgICAgfQogIAogICBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl ZmVyZW5jZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZmVyZW5jZSgpOwoKICAgICBpbmxpbmUg Ym9vbCBpc19keW5hbWljKCkgIHtyZXR1cm4gb2JqX2R5bmFtaWNfO30KICAgICBpbmxpbmUgYm9v bCBpc19mbG9hdGluZygpIHtyZXR1cm4gb2JqX2Zsb2F0aW5nXzt9CgogICAgIE9iamVjdFJlZmVy ZW5jZWQoKTsKICAgICB2aXJ0dWFsIH5PYmplY3RSZWZlcmVuY2VkKCk7CiAgfTsKCgpjbGFzcyAg IE9iamVjdFNjb3BlZCA6cHVibGljIE9iamVjdFJlZmVyZW5jZWQKICB7CiAgIGZyaWVuZCBjbGFz cyBTY29wZTsKICAgdHlwZWRlZiBTY29wZUxpc3QgTGlzdF87CgogICBwcml2YXRlOgogICAgIG11 dGFibGUgTGlzdF8gbGlzdF87CgogICAgCiAgICAgdm9pZCByZWdpc3Rlcl9zY29wZShTY29wZSAq c2NvcGUsY29uc3QgU2NvcGUgKnBhcmVudD0wKTsKICAgICB2b2lkIHVucmVnaXN0ZXJfc2NvcGUo U2NvcGUgKnNjb3BlKTsKCiAgIHByb3RlY3RlZDoKICAgICAgCiAgICAgdm9pZCBzZXRfd2Vhaygp OwoKICAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJfZGF0YShTY29wZU5vZGUqIGRhdGEpOwoK ICAgICAgCiAgICAgdm9pZCBpbnZhbGlkKGJvb2wgZGVzdHJveT0wKTsKCiAgICAgT2JqZWN0U2Nv cGVkKCk7CiAgICAgdmlydHVhbCB+T2JqZWN0U2NvcGVkKCk7CiAgfTsKCgogCmNsYXNzICAgT2Jq ZWN0OiBwdWJsaWMgdmlydHVhbCBPYmplY3RTY29wZWQgCiAgewogICBwdWJsaWM6CiAgICAgT2Jq ZWN0KCkge30KICAgICB2aXJ0dWFsIH5PYmplY3QoKTsKICB9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3Mg VD4KaW5saW5lIFQqIG1hbmFnZShUKiB0KQogIHsgCiAgIGlmICh0KSB0LT5zZXRfZHluYW1pYygp OwogICByZXR1cm4gdDsKICB9CgoKCn0gIAoKCgojIDI3ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2Mr Ky9zbG90LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvaGFuZGxlLmgiIDEKCgoK CgpuYW1lc3BhY2UgU2lnQwp7CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgT2JqLGNsYXNzIFNjb3BlXz4K ICBjbGFzcyBIYW5kbGUKICB7CiAgIHByb3RlY3RlZDoKICAgICBTY29wZV8gc2NvcGVfOwogICBw dWJsaWM6CiAgICAgIAogICAgIE9iaiogb2JqKCkKICAgICAgIHsKICAgICAgICByZXR1cm4gc3Rh dGljX2Nhc3Q8T2JqKj4oc2NvcGVfLmNhY2hlKCkpOwogICAgICAgfQogICAgIE9iaiogb2JqKCkg Y29uc3QKICAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqKj4oc2NvcGVfLmNh Y2hlKCkpOwogICAgICAgfQoKICAgICBib29sIGNvbm5lY3RlZCgpIGNvbnN0CiAgICAgICB7cmV0 dXJuICAoc2NvcGVfLm9iamVjdCgpIT0wKTt9CiAgICAgb3BlcmF0b3IgT2JqKigpIAogICAgICAg e3JldHVybiAgKG9iaigpKTt9CiAgICAgb3BlcmF0b3IgT2JqKigpIGNvbnN0CiAgICAgICB7cmV0 dXJuICAob2JqKCkpO30KCiAgICAgT2JqJiBvcGVyYXRvciooKSBjb25zdAogICAgICAge3JldHVy biAqKG9iaigpKTt9CiAgICAgT2JqKiBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgIHtyZXR1cm4g IChvYmooKSk7fQoKICAgICBTY29wZV8mIHNjb3BlKCkKICAgICAgIHtyZXR1cm4gc2NvcGVfO30K ICAgICBjb25zdCBTY29wZV8mIHNjb3BlKCkgY29uc3QKICAgICAgIHtyZXR1cm4gc2NvcGVfO30K CiAgICAgdm9pZCBkaXNjb25uZWN0KCkKICAgICAgIHtzY29wZV8uZGlzY29ubmVjdCgwKTt9Cgog ICAgICAKICAgICBIYW5kbGUmIG9wZXJhdG9yID0oT2JqKiBvYmopCiAgICAgICB7c2NvcGVfLnNl dChvYmosb2JqLHRydWUpOyByZXR1cm4gKnRoaXM7fQogICAgIEhhbmRsZSYgb3BlcmF0b3IgPShP YmomIG9iaikKICAgICAgIHtzY29wZV8uc2V0KCZvYmosJm9iaixmYWxzZSk7IHJldHVybiAqdGhp czt9CgogICAgIEhhbmRsZSYgb3BlcmF0b3IgPShjb25zdCBIYW5kbGUmIGhhbmRsZSkKICAgICAg IHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwogICAgICAgIHNjb3BlXy5zZXQobyxvLGZh bHNlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICB9CgogICAgIHRlbXBsYXRlIDxjbGFz cyBPYmoyLGNsYXNzIFNjb3BlMj4KICAgICAgIEhhbmRsZSYgb3BlcmF0b3IgPSAoY29uc3QgSGFu ZGxlPE9iajIsU2NvcGUyPiYgaGFuZGxlKQogICAgICAgewogICAgICAgIE9iaiAqbz1oYW5kbGUu b2JqKCk7CiAgICAgICAgc2NvcGVfLnNldChvLG8sZmFsc2UpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgIH0KCiAgICAgIAogICAgIEhhbmRsZSgpOnNjb3BlXygpICAgICAgICAgICB7fQog ICAgIEhhbmRsZShPYmogKm9iaik6c2NvcGVfKCkgICB7c2NvcGVfLnNldChvYmosb2JqLHRydWUp O30KICAgICBIYW5kbGUoT2JqICZvYmopOnNjb3BlXygpICAge3Njb3BlXy5zZXQoJm9iaiwmb2Jq LGZhbHNlKTt9CgogICAgIEhhbmRsZShjb25zdCBIYW5kbGUmIGhhbmRsZSkKICAgICAgIDpzY29w ZV8oKSAKICAgICAgIHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwogICAgICAgIHNjb3Bl Xy5zZXQobyxvLGZhbHNlKTsKICAgICAgIH0KCiAgICAgdGVtcGxhdGUgPGNsYXNzIE9iajIsY2xh c3MgU2NvcGUyPgogICAgIEhhbmRsZShjb25zdCBIYW5kbGU8T2JqMixTY29wZTI+JiBoYW5kbGUp CiAgICAgICA6c2NvcGVfKCkKICAgICAgIHsKICAgICAgICBPYmogKm89aGFuZGxlLm9iaigpOwog ICAgICAgIHNjb3BlXy5zZXQobyxvLGZhbHNlKTsKICAgICAgIH0KICB9OwoKCiMgMTAyICIvb3B0 L2d0ay9pbmNsdWRlL3NpZ2MrKy9oYW5kbGUuaCIKCiAKIAogCiAKIAoKCn0gIAoKCgojIDI4ICIv b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiIDIKCgoKbmFtZXNwYWNlIFNpZ0MKewoKCiAK IApzdHJ1Y3QgICBTbG90Tm9kZQogIHsKICAgdm9pZCAqbmV4dF87CiAgIFNsb3ROb2RlKCk7CiAg IHZpcnR1YWwgflNsb3ROb2RlKCk9MDsKICB9OwoKc3RydWN0ICAgU2xvdEl0ZXJhdG9yXwogIHsK CXR5cGVkZWYgU2xvdE5vZGUgTm9kZVR5cGU7CiAgIHR5cGVkZWYgU2xvdEl0ZXJhdG9yXyBJdGVy YXRvcjsKICAgTm9kZVR5cGUgKm5vZGVfOwoKICAgTm9kZVR5cGUqIG5vZGUoKSAgICAgICAgICAg ICB7cmV0dXJuIG5vZGVfO30KICAgY29uc3QgTm9kZVR5cGUqIG5vZGUoKSBjb25zdCB7cmV0dXJu IG5vZGVfO30KCiAgIE5vZGVUeXBlJiBvcGVyYXRvciooKQogICAgIHtyZXR1cm4gKm5vZGVfOwog ICAgIH0KICAgY29uc3QgTm9kZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0CiAgICAge3JldHVybiAq bm9kZV87CiAgICAgfQoKICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBpKSBjb25z dAogICAgIHtyZXR1cm4gbm9kZV89PWkubm9kZV87CiAgICAgfQogICBib29sIG9wZXJhdG9yIT0o Y29uc3QgSXRlcmF0b3ImIGkpIGNvbnN0CiAgICAge3JldHVybiBub2RlXyE9aS5ub2RlXzsKICAg ICB9CgogICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCiAgICAgewogICAgICBpZiAobm9kZV8pCiAg ICAgICAgbm9kZV89KE5vZGVUeXBlKilub2RlXy0+bmV4dF87CiAgICAgIHJldHVybiAqdGhpczsK ICAgICB9CgogICBJdGVyYXRvciBvcGVyYXRvcisrKGludCkKICAgICB7SXRlcmF0b3IgdG1wPSp0 aGlzOwogICAgICArKyp0aGlzOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KCiAgIEl0ZXJhdG9y JiBvcGVyYXRvcj0gKGNvbnN0IEl0ZXJhdG9yJiBpKQogICAgIHsKICAgICAgbm9kZV89aS5ub2Rl XzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KCiAgIFNsb3RJdGVyYXRvcl8oKTpub2RlXygw KSB7fQogICBTbG90SXRlcmF0b3JfKE5vZGVUeXBlICpub2RlKTpub2RlXyhub2RlKSB7fQogIH07 CgogCnN0cnVjdCAgIFNsb3RMaXN0XwogIHsKICAgdHlwZWRlZiBTbG90Tm9kZSBOb2RlVHlwZTsK ICAgdHlwZWRlZiBTbG90SXRlcmF0b3JfIEl0ZXJhdG9yOwogICBOb2RlVHlwZSogaGVhZF87Cgog ICBJdGVyYXRvciBiZWdpbigpICAgICAgICAgICAgIHtyZXR1cm4gKChOb2RlVHlwZSopaGVhZF8p O30KICAgSXRlcmF0b3IgZW5kKCkgICAgICAgICAgICAgICB7cmV0dXJuIEl0ZXJhdG9yKCk7fQog ICBjb25zdCBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHtyZXR1cm4gKChOb2RlVHlwZSopaGVhZF8p O30KICAgY29uc3QgSXRlcmF0b3IgZW5kKCkgICBjb25zdCB7cmV0dXJuIEl0ZXJhdG9yKCk7fQoK ICAgIAogICBJdGVyYXRvciBpbnNlcnRfZGlyZWN0KEl0ZXJhdG9yIHBvcyxOb2RlVHlwZSAqbik7 CgogICB2b2lkIGNsZWFyKCk7CiAgIGJvb2wgZW1wdHkoKSBjb25zdCB7cmV0dXJuIGhlYWRfPT0w O30KCiAgIFNsb3RMaXN0XygpOmhlYWRfKDApCiAgICAge30KICAgflNsb3RMaXN0XygpCiAgICAg e2NsZWFyKCk7fQoKICAgcHJpdmF0ZToKICAgICBTbG90TGlzdF8oY29uc3QgU2xvdExpc3RfJik7 CiAgfTsKCgpzdHJ1Y3QgU2xvdERhdGE7CgogCiAKc3RydWN0ICAgU2xvdERlcGVuZGVudDpwdWJs aWMgU2NvcGVOb2RlCiAgewogICBzdHJ1Y3QgICBEZXA6IHB1YmxpYyBTY29wZU5vZGUKICAgICB7 CiAgICAgIFNsb3REYXRhICpwYXJlbnQ7CiAgICAgIHZpcnR1YWwgdm9pZCBlcmFzZSgpOwogICAg ICBEZXAoKSB7fQogICAgICB2aXJ0dWFsIH5EZXAoKTsKICAgICB9IGRlcDsKCiAgIFNjb3BlTm9k ZSogcmVjZWl2ZXIoKSB7cmV0dXJuICZkZXA7fQogICBTY29wZU5vZGUqIHNlbmRlcigpICAge3Jl dHVybiB0aGlzO30KICAgU2xvdERhdGEqICBwYXJlbnQoKSAgIHtyZXR1cm4gZGVwLnBhcmVudDt9 CgogICBib29sIGNvbm5lY3RlZCgpCiAgICAge3JldHVybiAobmV4dF8hPXRoaXMpO30KCiAgIHZp cnR1YWwgdm9pZCBlcmFzZSgpOwoKICAgdm9pZCBzZXRfcGFyZW50KFNsb3REYXRhICpzKQogICAg IHtkZXAucGFyZW50PXM7fQoKICAgU2xvdERlcGVuZGVudChTbG90RGF0YSAmcykKICAgICB7ZGVw LnBhcmVudD0mczt9CgogICBTbG90RGVwZW5kZW50KCkKICAgICB7fQoKICAgdmlydHVhbCB+U2xv dERlcGVuZGVudCgpOwogIH07CgogCnN0cnVjdCBDYWxsYmFja18KICB7CiAgICAKICAgdm9pZCog KCpmdW5jXykodm9pZCopOwoKICAgc3RydWN0IE87CiAgIHN0cnVjdCBDMQogICAgIHsKICAgICAg dm9pZCogKCpmMSkodm9pZCopOwogICAgIH07CiAgIHN0cnVjdCBDMgogICAgIHsKICAgICAgTyog bzsKICAgICAgdm9pZCAoTzo6KnYpKHZvaWQpOwogICAgIH07CgogICAgCiAgIHVuaW9uIHtDMSBh MTsgQzIgYTI7fTsKICB9OwoKIApzdHJ1Y3QgICBTbG90RGF0YTpwdWJsaWMgT2JqZWN0U2NvcGVk CiAgewogICB0eXBlZGVmIFNsb3RMaXN0XyBMaXN0OwoKICAgU2xvdERlcGVuZGVudCBkZXBfOwoK ICAgU2NvcGVOb2RlKiByZWNlaXZlcigpIHtyZXR1cm4gZGVwXy5yZWNlaXZlcigpO30KICAgU2Nv cGVOb2RlKiBzZW5kZXIoKSAgIHtyZXR1cm4gZGVwXy5zZW5kZXIoKTt9CgogICAgCiAgICAKICAg dm9pZCBjb25uZWN0KCk7CgogICBMaXN0IGxpc3RfOwogICBDYWxsYmFja18gZGF0YV87CgogICBD YWxsYmFja18mIGNhbGxiYWNrKCkge3JldHVybiBkYXRhXzt9CgogICBTbG90RGF0YSgpCiAgICAg e2RlcF8uc2V0X3BhcmVudCh0aGlzKTt9CiAgIHZpcnR1YWwgflNsb3REYXRhKCk7CiAgfTsKCgp0 eXBlZGVmIFNjb3Blczo6RXh0ZW5kIFNsb3RFeHRlbmQ7CgoKCgpjbGFzcyAgIENvbm5lY3Rpb246 cHJvdGVjdGVkIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPgogIHsKICAgdHlwZWRlZiBIYW5k bGU8U2xvdERhdGEsU2xvdEV4dGVuZD4gQmFzZTsKICAgcHVibGljOgogICAgICAKICAgICB2b2lk IGRpc2Nvbm5lY3QoKSB7aWYgKG9iaigpKSBvYmooKS0+aW52YWxpZCgpO30KICAgICBib29sIGNv bm5lY3RlZCgpIHtyZXR1cm4gQmFzZTo6Y29ubmVjdGVkICgpO30KCiAgICAgQ29ubmVjdGlvbigp OkJhc2UoKSB7fQogICAgIENvbm5lY3Rpb24oU2xvdERhdGEgKnMpOkJhc2Uocykge30KICAgICBD b25uZWN0aW9uKGNvbnN0IENvbm5lY3Rpb24mIHMpOkJhc2Uocykge30KICB9OwoKIAp0ZW1wbGF0 ZSA8Y2xhc3MgQyxjbGFzcyBGPgpzdHJ1Y3QgQ2FsbERhdGFGdW5jCiAgewogICBDIGNhbGxiYWNr OwogICBGIGZ1bmM7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDLGNsYXNzIE8+CnN0cnVjdCBDYWxs RGF0YU9iajIKICB7CiAgIEMgY2FsbGJhY2s7CiAgIE8gKm9iajsKICB9OwoKdGVtcGxhdGUgPGNs YXNzIEMsY2xhc3MgTyxjbGFzcyBGPgpzdHJ1Y3QgQ2FsbERhdGFPYmozCiAgeyAKICAgQyAgIGNh bGxiYWNrOwogICBPKiAgb2JqOwogICBGICAgZnVuYzsKICB9OwoKIAogCiAKCgoKIAoKCgp0ZW1w bGF0ZSA8Y2xhc3MgUj4Kc3RydWN0IENhbGxiYWNrMDpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAg dHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCopOwogICBp bmxpbmUgUlR5cGUgY2FsbCgpCiAgICAge3JldHVybiAoKEZ1bmMpKGZ1bmNfKSkoKHZvaWQqKXRo aXMpO30KICAgaW5saW5lIFJUeXBlIG9wZXJhdG9yKCkoKQogICAgIHtyZXR1cm4gKChGdW5jKShm dW5jXykpKCh2b2lkKil0aGlzKTt9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSPgpjbGFzcyBTbG90 MAogICA6cHVibGljIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPgogIHsKICAgcHVibGljOgog ICAgIHR5cGVkZWYgSGFuZGxlPFNsb3REYXRhLFNsb3RFeHRlbmQ+IEJhc2U7CiAgICAgdHlwZWRl ZiBDYWxsYmFjazA8Uj4gQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWxsYmFjazo6 UlR5cGUgUlR5cGU7CiAgICAgdHlwZWRlZiBSVHlwZSAoKkZ1bmMpKHZvaWQqKTsKCiAgICAgU2xv dERhdGEqIGRhdGEoKSAgICAgY29uc3Qge3JldHVybiAoU2xvdERhdGEqKShzY29wZV8ub2JqZWN0 KCkpO30KCiAgICAgU2xvdDAoKSB7fQogICAgIFNsb3QwKFNsb3REYXRhICpzKTpCYXNlKHMpICAg IHt9CiAgICAgU2xvdDAoY29uc3QgU2xvdDAmIHMpOkJhc2Uocy5vYmooKSkge30KCiAgICAgaW5s aW5lIFJUeXBlIGNhbGwoKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAg ICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKCk7 CiAgICAgICAgIHJldHVybiBSVHlwZSgpOwogICAgICAgIH0KICAgICBpbmxpbmUgUlR5cGUgb3Bl cmF0b3IoKSgpIAogICAgICAgIHsKICAgICAgICAgaWYgKGNvbm5lY3RlZCgpKSAKICAgICAgICAg ICByZXR1cm4gKChDYWxsYmFjayYpKGRhdGEoKS0+Y2FsbGJhY2soKSkpLmNhbGwoKTsKICAgICAg ICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyAzNDEgIi9vcHQvZ3RrL2luY2x1 ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMT4Kc3Ry dWN0IENhbGxiYWNrMTpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoK CgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEpOwogICBpbmxpbmUgUlR5cGUgY2Fs bCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18p KSgodm9pZCopdGhpcyxwMSk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBU cmFpdDxQMT46OnJlZiBwMSkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp cyxwMSk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMT4KY2xhc3MgU2xvdDEKICAg OnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0 eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2Fs bGJhY2sxPFIsUDE+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJU eXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSk7CgogICAgIFNs b3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVj dCgpKTt9CgogICAgIFNsb3QxKCkge30KICAgICBTbG90MShTbG90RGF0YSAqcyk6QmFzZShzKSAg ICB7fQogICAgIFNsb3QxKGNvbnN0IFNsb3QxJiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlu bGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxKSAKICAgICAgICB7CiAg ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAg ICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6 cmVmIHAxKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAg cmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxKTsKICAgICAg ICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyA0MzkgIi9vcHQvZ3RrL2luY2x1 ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFz cyBQMj4Kc3RydWN0IENhbGxiYWNrMjpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBS IFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIpOwogICBpbmxp bmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ Mj46OnJlZiBwMikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxw Mik7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBw MSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18p KSgodm9pZCopdGhpcyxwMSxwMik7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj bGFzcyBQMj4KY2xhc3MgU2xvdDIKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVu ZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5k PiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2syPFIsUDEsUDI+IENhbGxiYWNrOwogICAgIHR5 cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUg KCpGdW5jKSh2b2lkKixQMSxQMik7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHty ZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3QyKCkge30KICAg ICBTbG90MihTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3QyKGNvbnN0IFNsb3Qy JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRy YWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKSAKICAgICAgICB7CiAg ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7 CiAgICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAx Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKSAKICAgICAgICB7CiAgICAgICAg IGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCkt PmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAg ICAgfQogIH07CgoKIyA1MzcgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMz4Kc3RydWN0IENh bGxiYWNrMzpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0 eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMpOwogICBpbmxpbmUgUlR5cGUgY2Fs bCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0 eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgo dm9pZCopdGhpcyxwMSxwMixwMyk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFt ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU cmFpdDxQMz46OnJlZiBwMykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp cyxwMSxwMixwMyk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj bGFzcyBQMz4KY2xhc3MgU2xvdDMKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVu ZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5k PiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2szPFIsUDEsUDIsUDM+IENhbGxiYWNrOwogICAg IHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5 cGUgKCpGdW5jKSh2b2lkKixQMSxQMixQMyk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNv bnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3QzKCkg e30KICAgICBTbG90MyhTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3QzKGNvbnN0 IFNsb3QzJiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVu YW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1l IFRyYWl0PFAzPjo6cmVmIHAzKSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkg CiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxs KHAxLHAyLHAzKTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogICAgIGlubGlu ZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRy YWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzKSAKICAgICAgICB7CiAg ICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShk YXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzKTsKICAgICAgICAgcmV0dXJuIFJUeXBl KCk7CiAgICAgICAgfQogIH07CgoKIyA2MzUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3Qu aCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxj bGFzcyBQND4Kc3RydWN0IENhbGxiYWNrNDpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRl ZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMsUDQp OwogICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFt ZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBU cmFpdDxQND46OnJlZiBwNCkKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp cyxwMSxwMixwMyxwNCk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFp dDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQ Mz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICAgICB7cmV0dXJuICgoRnVu YykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xh c3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQND4KY2xhc3MgU2xvdDQKICAg OnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0 eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2Fs bGJhY2s0PFIsUDEsUDIsUDMsUDQ+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2Fs bGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSxQ MixQMyxQNCk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3RE YXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q0KCkge30KICAgICBTbG90NChTbG90 RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q0KGNvbnN0IFNsb3Q0JiBzKTpCYXNlKHMu b2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVm IHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAz LHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25u ZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNr KCkpKS5jYWxsKHAxLHAyLHAzLHA0KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAg fQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAx LHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5 cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0 ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkp KS5jYWxsKHAxLHAyLHAzLHA0KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQog IH07CgoKIyA3MzMgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIKCgoKIAoKCgp0ZW1w bGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ NT4Kc3RydWN0IENhbGxiYWNrNTpwdWJsaWMgQ2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJU eXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVuYykodm9pZCosUDEsUDIsUDMsUDQsUDUpOwog ICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBU cmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFp dDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICB7cmV0dXJuICgo RnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSk7fQogICBpbmxpbmUgUlR5 cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ Mj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46 OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICB7cmV0dXJuICgoRnVuYyko ZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xh c3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNT4KY2xhc3Mg U2xvdDUKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1Ymxp YzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5 cGVkZWYgQ2FsbGJhY2s1PFIsUDEsUDIsUDMsUDQsUDU+IENhbGxiYWNrOwogICAgIHR5cGVkZWYg dHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5j KSh2b2lkKixQMSxQMixQMyxQNCxQNSk7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0 IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q1KCkge30K ICAgICBTbG90NShTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q1KGNvbnN0IFNs b3Q1JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1l IFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRy YWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0 PFA1Pjo6cmVmIHA1KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAg ICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAy LHAzLHA0LHA1KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogICAgIGlubGlu ZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRy YWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0 PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KSAKICAgICAgICB7CiAgICAg ICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRh KCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1KTsKICAgICAgICAgcmV0dXJuIFJU eXBlKCk7CiAgICAgICAgfQogIH07CgoKIyA4MzEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Ns b3QuaCIKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQ MyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4Kc3RydWN0IENhbGxiYWNrNjpwdWJsaWMgQ2Fs bGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgqRnVu Yykodm9pZCosUDEsUDIsUDMsUDQsUDUsUDYpOwogICBpbmxpbmUgUlR5cGUgY2FsbCh0eXBlbmFt ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU cmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFp dDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNikKICAgICB7cmV0dXJuICgo RnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixwMyxwNCxwNSxwNik7fQogICBpbmxpbmUg UlR5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFp dDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQ ND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46 OnJlZiBwNikKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxwMSxwMixw MyxwNCxwNSxwNik7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj bGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4KY2xhc3MgU2xvdDYKICAgOnB1Ymxp YyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVm IEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAgIHR5cGVkZWYgQ2FsbGJhY2s2 PFIsUDEsUDIsUDMsUDQsUDUsUDY+IENhbGxiYWNrOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ2Fs bGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSh2b2lkKixQMSxQ MixQMyxQNCxQNSxQNik7CgogICAgIFNsb3REYXRhKiBkYXRhKCkgICAgIGNvbnN0IHtyZXR1cm4g KFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9CgogICAgIFNsb3Q2KCkge30KICAgICBTbG90 NihTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAgIFNsb3Q2KGNvbnN0IFNsb3Q2JiBzKTpC YXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlwZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAx Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6 cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2KSAKICAgICAgICB7CiAgICAgICAgIGlmIChj b25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxi YWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7 CiAgICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAx Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6 cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2KSAKICAgICAgICB7CiAgICAgICAgIGlmIChj b25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxi YWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7 CiAgICAgICAgfQogIH07CgoKIyA5MjkgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3Nsb3QuaCIK CgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz cyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNz4Kc3RydWN0IENhbGxiYWNrNzpwdWJsaWMg Q2FsbGJhY2tfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFJUeXBlICgq RnVuYykodm9pZCosUDEsUDIsUDMsUDQsUDUsUDYsUDcpOwogICBpbmxpbmUgUlR5cGUgY2FsbCh0 eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBl bmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFt ZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBU cmFpdDxQNz46OnJlZiBwNykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhp cyxwMSxwMixwMyxwNCxwNSxwNixwNyk7fQogICBpbmxpbmUgUlR5cGUgb3BlcmF0b3IoKSh0eXBl bmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFt ZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBU cmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFp dDxQNz46OnJlZiBwNykKICAgICB7cmV0dXJuICgoRnVuYykoZnVuY18pKSgodm9pZCopdGhpcyxw MSxwMixwMyxwNCxwNSxwNixwNyk7fQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj bGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNz4KY2xh c3MgU2xvdDcKICAgOnB1YmxpYyBIYW5kbGU8U2xvdERhdGEsU2xvdEV4dGVuZD4KICB7CiAgIHB1 YmxpYzoKICAgICB0eXBlZGVmIEhhbmRsZTxTbG90RGF0YSxTbG90RXh0ZW5kPiBCYXNlOwogICAg IHR5cGVkZWYgQ2FsbGJhY2s3PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IENhbGxiYWNrOwogICAg IHR5cGVkZWYgdHlwZW5hbWUgQ2FsbGJhY2s6OlJUeXBlIFJUeXBlOwogICAgIHR5cGVkZWYgUlR5 cGUgKCpGdW5jKSh2b2lkKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CgogICAgIFNsb3REYXRhKiBk YXRhKCkgICAgIGNvbnN0IHtyZXR1cm4gKFNsb3REYXRhKikoc2NvcGVfLm9iamVjdCgpKTt9Cgog ICAgIFNsb3Q3KCkge30KICAgICBTbG90NyhTbG90RGF0YSAqcyk6QmFzZShzKSAgICB7fQogICAg IFNsb3Q3KGNvbnN0IFNsb3Q3JiBzKTpCYXNlKHMub2JqKCkpIHt9CgogICAgIGlubGluZSBSVHlw ZSBjYWxsKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0 LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5 cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KSAKICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0 ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgoQ2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkp KS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2LHA3KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAg ICAgICAgfQogICAgIGlubGluZSBSVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6 cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVm IHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1 LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KSAK ICAgICAgICB7CiAgICAgICAgIGlmIChjb25uZWN0ZWQoKSkgCiAgICAgICAgICAgcmV0dXJuICgo Q2FsbGJhY2smKShkYXRhKCktPmNhbGxiYWNrKCkpKS5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2LHA3 KTsKICAgICAgICAgcmV0dXJuIFJUeXBlKCk7CiAgICAgICAgfQogIH07CgoKIyAxMDI3ICIvb3B0 L2d0ay9pbmNsdWRlL3NpZ2MrKy9zbG90LmgiCgoKCgoKfSAgCgoKCiMgMjggIi9vcHQvZ3RrL2lu Y2x1ZGUvc2lnYysrL3NpZ25hbF9zeXN0ZW0uaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL3Np Z2MrKy9vYmplY3Rfc2xvdC5oIiAxCiAKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCm5h bWVzcGFjZSBTaWdDCnsKCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBPYmo+CnN0cnVj dCBPYmplY3RTbG90MF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAg ICAgKE9iajo6KkluRnVuYykoKTsKICAgdHlwZWRlZiBSVHlwZSAoT2JqOjoqRnVuYykoKTsKICAg dHlwZWRlZiBTbG90MDxSPiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlwZW5h bWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNh bGxiYWNrKHZvaWQqIGQpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7 CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKCk7CiAgICAgfQoKICAg c3RhdGljIFNsb3REYXRhKiBjcmVhdGUoT2JqKiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAg ICBpZiAoIW9iaikgcmV0dXJuIDA7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90 RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+ KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5v Ymo9b2JqOwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9k YXRhKHRtcC0+cmVjZWl2ZXIoKSk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMg MTA2ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxj bGFzcyBSLGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyogJm9iaixS IChPMjo6KmZ1bmMpKCkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QwXzxSLE8yPgogICAgICAg ICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIE8s Y2xhc3MgTzI+CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1 bmMpKCkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QwXzxSLE8yPgogICAgICAgICAgICAgOjpj cmVhdGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIE8sY2xhc3MgTzI+ CmlubGluZSBTbG90MDxSPgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoKSkKICB7CiAgICBy ZXR1cm4gT2JqZWN0U2xvdDBfPFIsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgmb2JqLGZ1bmMp OwogIH0KCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE9iaj4Kc3RydWN0 IE9iamVjdFNsb3QxXwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAg ICAoT2JqOjoqSW5GdW5jKShQMSk7CiAgIHR5cGVkZWYgUlR5cGUgKE9iajo6KkZ1bmMpKFAxKTsK ICAgdHlwZWRlZiBTbG90MTxSLFAxPiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8 dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJU eXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0o Q2FsbERhdGEqKWQ7CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAx KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1bmMgZnVu YykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEqIHRtcD1t YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr OwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBv YmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRtcDsKICAg ICB9CiAgfTsKCgoKIyAyMDMgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9zbG90Lmgi CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNs b3QxPFIsUDE+CiAgc2xvdChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEpKQogIHsKICAgIHJldHVy biBPYmplY3RTbG90MV88UixQMSxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUg U2xvdDE8UixQMT4KICBzbG90KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQMSkpCiAgewog ICAgcmV0dXJuIE9iamVjdFNsb3QxXzxSLFAxLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2Jq LGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE8sY2xhc3MgTzI+ CmlubGluZSBTbG90MTxSLFAxPgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEpKQogIHsK ICAgIHJldHVybiBPYmplY3RTbG90MV88UixQMSxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZv YmosZnVuYyk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIs Y2xhc3MgT2JqPgpzdHJ1Y3QgT2JqZWN0U2xvdDJfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoK CgogICB0eXBlZGVmIFIgICAgIChPYmo6OipJbkZ1bmMpKFAxLFAyKTsKICAgdHlwZWRlZiBSVHlw ZSAoT2JqOjoqRnVuYykoUDEsUDIpOwogICB0eXBlZGVmIFNsb3QyPFIsUDEsUDI+IFNsb3RUeXBl OwogICB0eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxPYmosRnVu Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBw MikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgcmV0dXJu ICgoZGF0YS0+b2JqKS0+KihkYXRhLT5mdW5jKSkocDEscDIpOwogICAgIH0KCiAgIHN0YXRpYyBT bG90RGF0YSogY3JlYXRlKE9iaiogb2JqLEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgaWYgKCFv YmopIHJldHVybiAwOwogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7 CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRh dGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW9iajsK ICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIG9iai0+cmVnaXN0ZXJfZGF0YSh0bXAt PnJlY2VpdmVyKCkpOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCgojIDMwMCAiL29w dC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0X3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBQMSxjbGFzcyBQMixjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDI8UixQMSxQMj4K ICBzbG90KE8qICZvYmosUiAoTzI6OipmdW5jKShQMSxQMikpCiAgewogICAgcmV0dXJuIE9iamVj dFNsb3QyXzxSLFAxLFAyLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0K CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIE8sY2xhc3MgTzI+Cmlu bGluZSBTbG90MjxSLFAxLFAyPgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1bmMpKFAx LFAyKSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDJfPFIsUDEsUDIsTzI+CiAgICAgICAgICAg ICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xh c3MgUDIsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3QyPFIsUDEsUDI+CiAgc2xvdChPICZv YmosUiAoTzI6OipmdW5jKShQMSxQMikpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3QyXzxSLFAx LFAyLE8yPgogICAgICAgICAgICAgOjpjcmVhdGUoJm9iaixmdW5jKTsKICB9CgoKCiAKCgp0ZW1w bGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBPYmo+CnN0cnVj dCBPYmplY3RTbG90M18KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAg ICAgKE9iajo6KkluRnVuYykoUDEsUDIsUDMpOwogICB0eXBlZGVmIFJUeXBlIChPYmo6OipGdW5j KShQMSxQMixQMyk7CiAgIHR5cGVkZWYgU2xvdDM8UixQMSxQMixQMz4gU2xvdFR5cGU7CiAgIHR5 cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE9iaixGdW5jPiBDYWxs RGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAzIHAz KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICByZXR1cm4g KChkYXRhLT5vYmopLT4qKGRhdGEtPmZ1bmMpKShwMSxwMixwMyk7CiAgICAgfQoKICAgc3RhdGlj IFNsb3REYXRhKiBjcmVhdGUoT2JqKiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBpZiAo IW9iaikgcmV0dXJuIDA7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgp KTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9b2Jq OwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKHRt cC0+cmVjZWl2ZXIoKSk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgMzk3ICIv b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90 MzxSLFAxLFAyLFAzPgogIHNsb3QoTyogJm9iaixSIChPMjo6KmZ1bmMpKFAxLFAyLFAzKSkKICB7 CiAgICByZXR1cm4gT2JqZWN0U2xvdDNfPFIsUDEsUDIsUDMsTzI+CiAgICAgICAgICAgICA6OmNy ZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIs Y2xhc3MgUDMsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3QzPFIsUDEsUDIsUDM+CiAgc2xv dChPKiBjb25zdCAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMpKQogIHsKICAgIHJldHVybiBP YmplY3RTbG90M188UixQMSxQMixQMyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5j KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz cyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDM8UixQMSxQMixQMz4KICBzbG90KE8gJm9iaixSIChP Mjo6KmZ1bmMpKFAxLFAyLFAzKSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDNfPFIsUDEsUDIs UDMsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgmb2JqLGZ1bmMpOwogIH0KCgoKIAoKCnRlbXBs YXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIE9i aj4Kc3RydWN0IE9iamVjdFNsb3Q0XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlw ZWRlZiBSICAgICAoT2JqOjoqSW5GdW5jKShQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgUlR5cGUg KE9iajo6KkZ1bmMpKFAxLFAyLFAzLFA0KTsKICAgdHlwZWRlZiBTbG90NDxSLFAxLFAyLFAzLFA0 PiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1 bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQs UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2Fs bERhdGEqKWQ7CiAgICAgIHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAxLHAy LHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1 bmMgZnVuYykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEq IHRtcD1tYW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVy cHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNh bGxiYWNrOwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog ICAgICBvYmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRt cDsKICAgICB9CiAgfTsKCgoKIyA0OTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9z bG90LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xh c3MgUDQsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+CiAgc2xv dChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQpKQogIHsKICAgIHJldHVybiBPYmpl Y3RTbG90NF88UixQMSxQMixQMyxQNCxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5j KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz cyBQNCxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDQ8UixQMSxQMixQMyxQND4KICBzbG90 KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQMSxQMixQMyxQNCkpCiAgewogICAgcmV0dXJu IE9iamVjdFNsb3Q0XzxSLFAxLFAyLFAzLFA0LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2Jq LGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz LGNsYXNzIFA0LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NDxSLFAxLFAyLFAzLFA0Pgog IHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQpKQogIHsKICAgIHJldHVybiBP YmplY3RTbG90NF88UixQMSxQMixQMyxQNCxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZvYmos ZnVuYyk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xh c3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgT2JqPgpzdHJ1Y3QgT2JqZWN0U2xvdDVfCiAg ewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFIgICAgIChPYmo6OipJbkZ1bmMp KFAxLFAyLFAzLFA0LFA1KTsKICAgdHlwZWRlZiBSVHlwZSAoT2JqOjoqRnVuYykoUDEsUDIsUDMs UDQsUDUpOwogICB0eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwogICB0 eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxPYmosRnVuYz4gQ2Fs bERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBw MyxQNCBwNCxQNSBwNSkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK ICAgICAgcmV0dXJuICgoZGF0YS0+b2JqKS0+KihkYXRhLT5mdW5jKSkocDEscDIscDMscDQscDUp OwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKE9iaiogb2JqLEluRnVuYyBmdW5j KQogICAgIHsKICAgICAgaWYgKCFvYmopIHJldHVybiAwOwogICAgICBTbG90RGF0YSogdG1wPW1h bmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nh c3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7 CiAgICAgIGRhdGEub2JqPW9iajsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIG9i ai0+cmVnaXN0ZXJfZGF0YSh0bXAtPnJlY2VpdmVyKCkpOwogICAgICByZXR1cm4gdG1wOwogICAg IH0KICB9OwoKCgojIDU5MSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvb2JqZWN0X3Nsb3QuaCIK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxj bGFzcyBQNSxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDU8UixQMSxQMixQMyxQNCxQNT4K ICBzbG90KE8qICZvYmosUiAoTzI6OipmdW5jKShQMSxQMixQMyxQNCxQNSkpCiAgewogICAgcmV0 dXJuIE9iamVjdFNsb3Q1XzxSLFAxLFAyLFAzLFA0LFA1LE8yPgogICAgICAgICAgICAgOjpjcmVh dGUob2JqLGZ1bmMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NTxS LFAxLFAyLFAzLFA0LFA1PgogIHNsb3QoTyogY29uc3QgJm9iaixSIChPMjo6KmZ1bmMpKFAxLFAy LFAzLFA0LFA1KSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDVfPFIsUDEsUDIsUDMsUDQsUDUs TzI+CiAgICAgICAgICAgICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgTyxj bGFzcyBPMj4KaW5saW5lIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+CiAgc2xvdChPICZvYmosUiAo TzI6OipmdW5jKShQMSxQMixQMyxQNCxQNSkpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3Q1XzxS LFAxLFAyLFAzLFA0LFA1LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUoJm9iaixmdW5jKTsKICB9 CgoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz cyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBPYmo+CnN0cnVjdCBPYmplY3RTbG90Nl8KICB7 CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAgICAgKE9iajo6KkluRnVuYyko UDEsUDIsUDMsUDQsUDUsUDYpOwogICB0eXBlZGVmIFJUeXBlIChPYmo6OipGdW5jKShQMSxQMixQ MyxQNCxQNSxQNik7CiAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4gU2xvdFR5 cGU7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE9iaixG dW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAy IHAyLFAzIHAzLFA0IHA0LFA1IHA1LFA2IHA2KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9 KENhbGxEYXRhKilkOwogICAgICByZXR1cm4gKChkYXRhLT5vYmopLT4qKGRhdGEtPmZ1bmMpKShw MSxwMixwMyxwNCxwNSxwNik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoT2Jq KiBvYmosSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBpZiAoIW9iaikgcmV0dXJuIDA7CiAgICAg IFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRh dGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNh bGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9b2JqOwogICAgICBkYXRhLmZ1bmM9KEZ1 bmMpZnVuYzsKICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKHRtcC0+cmVjZWl2ZXIoKSk7CiAgICAg IHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgNjg4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2Mr Ky9vYmplY3Rfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIE8sY2xhc3MgTzI+CmlubGlu ZSBTbG90NjxSLFAxLFAyLFAzLFA0LFA1LFA2PgogIHNsb3QoTyogJm9iaixSIChPMjo6KmZ1bmMp KFAxLFAyLFAzLFA0LFA1LFA2KSkKICB7CiAgICByZXR1cm4gT2JqZWN0U2xvdDZfPFIsUDEsUDIs UDMsUDQsUDUsUDYsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZShvYmosZnVuYyk7CiAgfQoKdGVt cGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3Mg UDUsY2xhc3MgUDYsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q2PFIsUDEsUDIsUDMsUDQs UDUsUDY+CiAgc2xvdChPKiBjb25zdCAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIsUDMsUDQsUDUs UDYpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90Nl88UixQMSxQMixQMyxQNCxQNSxQNixPMj4K ICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFz cyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4KICBzbG90KE8g Jm9iaixSIChPMjo6KmZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KSkKICB7CiAgICByZXR1cm4gT2Jq ZWN0U2xvdDZfPFIsUDEsUDIsUDMsUDQsUDUsUDYsTzI+CiAgICAgICAgICAgICA6OmNyZWF0ZSgm b2JqLGZ1bmMpOwogIH0KCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAy LGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE9iaj4K c3RydWN0IE9iamVjdFNsb3Q3XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRl ZiBSICAgICAoT2JqOjoqSW5GdW5jKShQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYg UlR5cGUgKE9iajo6KkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2LFA3KTsKICAgdHlwZWRlZiBTbG90 NzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBTbG90VHlwZTsKICAgdHlwZWRlZiBDYWxsRGF0YU9i ajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsT2JqLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGlj IFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg cDYsUDcgcDcpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAg IHJldHVybiAoKGRhdGEtPm9iaiktPiooZGF0YS0+ZnVuYykpKHAxLHAyLHAzLHA0LHA1LHA2LHA3 KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShPYmoqIG9iaixJbkZ1bmMgZnVu YykKICAgICB7CiAgICAgIGlmICghb2JqKSByZXR1cm4gMDsKICAgICAgU2xvdERhdGEqIHRtcD1t YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr OwogICAgICBkYXRhLm9iaj1vYmo7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBv YmotPnJlZ2lzdGVyX2RhdGEodG1wLT5yZWNlaXZlcigpKTsKICAgICAgcmV0dXJuIHRtcDsKICAg ICB9CiAgfTsKCgoKIyA3ODUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL29iamVjdF9zbG90Lmgi CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQs Y2xhc3MgUDUsY2xhc3MgUDYsY2xhc3MgUDcsY2xhc3MgTyxjbGFzcyBPMj4KaW5saW5lIFNsb3Q3 PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+CiAgc2xvdChPKiAmb2JqLFIgKE8yOjoqZnVuYykoUDEs UDIsUDMsUDQsUDUsUDYsUDcpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90N188UixQMSxQMixQ MyxQNCxQNSxQNixQNyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKG9iaixmdW5jKTsKICB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFz cyBQNSxjbGFzcyBQNixjbGFzcyBQNyxjbGFzcyBPLGNsYXNzIE8yPgppbmxpbmUgU2xvdDc8UixQ MSxQMixQMyxQNCxQNSxQNixQNz4KICBzbG90KE8qIGNvbnN0ICZvYmosUiAoTzI6OipmdW5jKShQ MSxQMixQMyxQNCxQNSxQNixQNykpCiAgewogICAgcmV0dXJuIE9iamVjdFNsb3Q3XzxSLFAxLFAy LFAzLFA0LFA1LFA2LFA3LE8yPgogICAgICAgICAgICAgOjpjcmVhdGUob2JqLGZ1bmMpOwogIH0K CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNs YXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE8sY2xhc3MgTzI+CmlubGluZSBTbG90NzxS LFAxLFAyLFAzLFA0LFA1LFA2LFA3PgogIHNsb3QoTyAmb2JqLFIgKE8yOjoqZnVuYykoUDEsUDIs UDMsUDQsUDUsUDYsUDcpKQogIHsKICAgIHJldHVybiBPYmplY3RTbG90N188UixQMSxQMixQMyxQ NCxQNSxQNixQNyxPMj4KICAgICAgICAgICAgIDo6Y3JlYXRlKCZvYmosZnVuYyk7CiAgfQoKCgoK Cn0gIAoKCgojIDI5ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVtLmgiIDIK CiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiIDEKIAogCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgU2lnQwp7CgoKIAogCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xh c3MgUj4Kc3RydWN0IEZ1bmNTbG90MF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5 cGVkZWYgUiAgICAgKCpJbkZ1bmMpKCk7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKSgpOwogICB0 eXBlZGVmIFNsb3QwPFI+IFNsb3RUeXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5h bWUgU2xvdFR5cGU6OkZ1bmMsRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJh Y2sodm9pZCogZGF0YSkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSktPmZ1 bmMpKCk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1bmMpCiAg ICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENh bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog ICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgOTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2ln YysrL2Z1bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSPgppbmxpbmUgU2xvdDA8Uj4KICBz bG90KFIgKCpmdW5jKSgpKQogIHsKICAgcmV0dXJuIEZ1bmNTbG90MF88Uj46OmNyZWF0ZShmdW5j KTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxPgpzdHJ1Y3QgRnVuY1Nsb3Qx XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAgICAoKkluRnVuYyko UDEpOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykoUDEpOwogICB0eXBlZGVmIFNsb3QxPFIsUDE+ IFNsb3RUeXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1 bmMsRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQ MSBwMSkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSktPmZ1bmMpKHAxKTsK ICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJbkZ1bmMgZnVuYykKICAgICB7CiAg ICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEg JmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRh LmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIHJl dHVybiB0bXA7CiAgICAgfQogIH07CgoKIyAxNjUgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2Z1 bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxPgppbmxpbmUgU2xvdDE8UixQ MT4KICBzbG90KFIgKCpmdW5jKShQMSkpCiAgewogICByZXR1cm4gRnVuY1Nsb3QxXzxSLFAxPjo6 Y3JlYXRlKGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3Mg UDI+CnN0cnVjdCBGdW5jU2xvdDJfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBl ZGVmIFIgICAgICgqSW5GdW5jKShQMSxQMik7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKShQMSxQ Mik7CiAgIHR5cGVkZWYgU2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CgogICB0eXBlZGVmIENhbGxE YXRhRnVuYzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxGdW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRp YyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkYXRhLFAxIHAxLFAyIHAyKQogICAgIHsKICAgICAgcmV0 dXJuICgoKENhbGxEYXRhKilkYXRhKS0+ZnVuYykocDEscDIpOwogICAgIH0KCiAgIHN0YXRpYyBT bG90RGF0YSogY3JlYXRlKEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD1t YW5hZ2UobmV3IFNsb3REYXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9j YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNr OwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAg fTsKCgojIDIzNiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiCgoKdGVtcGxh dGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDI+CmlubGluZSBTbG90MjxSLFAxLFAyPgogIHNs b3QoUiAoKmZ1bmMpKFAxLFAyKSkKICB7CiAgIHJldHVybiBGdW5jU2xvdDJfPFIsUDEsUDI+Ojpj cmVhdGUoZnVuYyk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQ MixjbGFzcyBQMz4Kc3RydWN0IEZ1bmNTbG90M18KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoK CiAgIHR5cGVkZWYgUiAgICAgKCpJbkZ1bmMpKFAxLFAyLFAzKTsKICAgdHlwZWRlZiBSVHlwZSAo KkZ1bmMpKFAxLFAyLFAzKTsKICAgdHlwZWRlZiBTbG90MzxSLFAxLFAyLFAzPiBTbG90VHlwZTsK CiAgIHR5cGVkZWYgQ2FsbERhdGFGdW5jPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLEZ1bmM+IENh bGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGRhdGEsUDEgcDEsUDIgcDIs UDMgcDMpCiAgICAgewogICAgICByZXR1cm4gKCgoQ2FsbERhdGEqKWRhdGEpLT5mdW5jKShwMSxw MixwMyk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1bmMpCiAg ICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAgICAgIENh bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog ICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgMzA3ICIvb3B0L2d0ay9pbmNsdWRlL3Np Z2MrKy9mdW5jX3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixj bGFzcyBQMz4KaW5saW5lIFNsb3QzPFIsUDEsUDIsUDM+CiAgc2xvdChSICgqZnVuYykoUDEsUDIs UDMpKQogIHsKICAgcmV0dXJuIEZ1bmNTbG90M188UixQMSxQMixQMz46OmNyZWF0ZShmdW5jKTsK ICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNs YXNzIFA0PgpzdHJ1Y3QgRnVuY1Nsb3Q0XwogIHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAg dHlwZWRlZiBSICAgICAoKkluRnVuYykoUDEsUDIsUDMsUDQpOwogICB0eXBlZGVmIFJUeXBlICgq RnVuYykoUDEsUDIsUDMsUDQpOwogICB0eXBlZGVmIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RU eXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsRnVu Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQMSBwMSxQ MiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIHJldHVybiAoKChDYWxsRGF0YSopZGF0YSkt PmZ1bmMpKHAxLHAyLHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJ bkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0 YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRt cC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5j PShGdW5jKWZ1bmM7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKIyAzNzggIi9vcHQv Z3RrL2luY2x1ZGUvc2lnYysrL2Z1bmNfc2xvdC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0PgppbmxpbmUgU2xvdDQ8UixQMSxQMixQMyxQ ND4KICBzbG90KFIgKCpmdW5jKShQMSxQMixQMyxQNCkpCiAgewogICByZXR1cm4gRnVuY1Nsb3Q0 XzxSLFAxLFAyLFAzLFA0Pjo6Y3JlYXRlKGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDU+CnN0cnVjdCBG dW5jU2xvdDVfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFIgICAgICgq SW5GdW5jKShQMSxQMixQMyxQNCxQNSk7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5jKShQMSxQMixQ MyxQNCxQNSk7CiAgIHR5cGVkZWYgU2xvdDU8UixQMSxQMixQMyxQNCxQNT4gU2xvdFR5cGU7Cgog ICB0eXBlZGVmIENhbGxEYXRhRnVuYzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxGdW5jPiBDYWxs RGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkYXRhLFAxIHAxLFAyIHAyLFAz IHAzLFA0IHA0LFA1IHA1KQogICAgIHsKICAgICAgcmV0dXJuICgoKENhbGxEYXRhKilkYXRhKS0+ ZnVuYykocDEscDIscDMscDQscDUpOwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRl KEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNsb3RE YXRhKCkpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4o dG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLmZ1 bmM9KEZ1bmMpZnVuYzsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgojIDQ0OSAiL29w dC9ndGsvaW5jbHVkZS9zaWdjKysvZnVuY19zbG90LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh c3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDU+CmlubGluZSBTbG90NTxS LFAxLFAyLFAzLFA0LFA1PgogIHNsb3QoUiAoKmZ1bmMpKFAxLFAyLFAzLFA0LFA1KSkKICB7CiAg IHJldHVybiBGdW5jU2xvdDVfPFIsUDEsUDIsUDMsUDQsUDU+OjpjcmVhdGUoZnVuYyk7CiAgfQoK CiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQ NCxjbGFzcyBQNSxjbGFzcyBQNj4Kc3RydWN0IEZ1bmNTbG90Nl8KICB7CgogICB0eXBlZGVmIFIg UlR5cGU7CgoKCiAgIHR5cGVkZWYgUiAgICAgKCpJbkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KTsK ICAgdHlwZWRlZiBSVHlwZSAoKkZ1bmMpKFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBT bG90NjxSLFAxLFAyLFAzLFA0LFA1LFA2PiBTbG90VHlwZTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFG dW5jPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJU eXBlIGNhbGxiYWNrKHZvaWQqIGRhdGEsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg cDYpCiAgICAgewogICAgICByZXR1cm4gKCgoQ2FsbERhdGEqKWRhdGEpLT5mdW5jKShwMSxwMixw MyxwNCxwNSxwNik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoSW5GdW5jIGZ1 bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPW1hbmFnZShuZXcgU2xvdERhdGEoKSk7CiAg ICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFf KTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylm dW5jOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCiMgNTIwICIvb3B0L2d0ay9pbmNs dWRlL3NpZ2MrKy9mdW5jX3Nsb3QuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFz cyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNj4KaW5saW5lIFNsb3Q2PFIs UDEsUDIsUDMsUDQsUDUsUDY+CiAgc2xvdChSICgqZnVuYykoUDEsUDIsUDMsUDQsUDUsUDYpKQog IHsKICAgcmV0dXJuIEZ1bmNTbG90Nl88UixQMSxQMixQMyxQNCxQNSxQNj46OmNyZWF0ZShmdW5j KTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz LGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3PgpzdHJ1Y3QgRnVuY1Nsb3Q3Xwog IHsKCiAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKICAgdHlwZWRlZiBSICAgICAoKkluRnVuYykoUDEs UDIsUDMsUDQsUDUsUDYsUDcpOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykoUDEsUDIsUDMsUDQs UDUsUDYsUDcpOwogICB0eXBlZGVmIFNsb3Q3PFIsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IFNsb3RU eXBlOwoKICAgdHlwZWRlZiBDYWxsRGF0YUZ1bmM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsRnVu Yz4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZGF0YSxQMSBwMSxQ MiBwMixQMyBwMyxQNCBwNCxQNSBwNSxQNiBwNixQNyBwNykKICAgICB7CiAgICAgIHJldHVybiAo KChDYWxsRGF0YSopZGF0YSktPmZ1bmMpKHAxLHAyLHAzLHA0LHA1LHA2LHA3KTsKICAgICB9Cgog ICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShJbkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3RE YXRhKiB0bXA9bWFuYWdlKG5ldyBTbG90RGF0YSgpKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVp bnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNr PSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIHJldHVybiB0bXA7 CiAgICAgfQogIH07CgoKIyA1OTEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2Z1bmNfc2xvdC5o IgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0 LGNsYXNzIFA1LGNsYXNzIFA2LGNsYXNzIFA3PgppbmxpbmUgU2xvdDc8UixQMSxQMixQMyxQNCxQ NSxQNixQNz4KICBzbG90KFIgKCpmdW5jKShQMSxQMixQMyxQNCxQNSxQNixQNykpCiAgewogICBy ZXR1cm4gRnVuY1Nsb3Q3XzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3Pjo6Y3JlYXRlKGZ1bmMpOwog IH0KCgoKCn0gIAoKCgojIDMwICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVt LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmFzaWNfc2lnbmFsLmgiIDEKIAog CgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvbWFyc2hhbC5oIiAxCgoKCgoKCgoKCgoK CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL3RocmVhZC5oIiAxCiAKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAogCiAKCiAKIAog CgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZS5oCTEuMzYJOTgvMDMvMjcgU01JIgkK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoK CgoKI3ByYWdtYSBpZGVudAkiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBTTUkiCgoKCgogCgoK IyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbWFjaHR5cGVzLmgJMS43CTk2LzA1LzIzIFNNSSIKCgoK CmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCAgX3BoeXNhZHJfdCB7IGlu dCByWzFdOyB9ICpwaHlzYWRyX3Q7Cgp0eXBlZGVmCXN0cnVjdAlfbGFiZWxfdCB7IGludAl2YWxb Nl07IH0gbGFiZWxfdDsKCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCWxvY2tfdDsJCSAKCgp9CgoK CiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVu dAkiQCgjKWludF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hh cgkJCWludDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50MTZfdDsKdHlwZWRlZiBpbnQJCQlp bnQzMl90OwoKCgoKdHlwZWRlZglsb25nIGxvbmcJCWludDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWdu ZWQgY2hhcgkJdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJdWludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgaW50CQl1aW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n CXVpbnQ2NF90OwoKCgogCgoKCgp0eXBlZGVmIGludDY0X3QJCQlpbnRtYXhfdDsKdHlwZWRlZiB1 aW50NjRfdAkJdWludG1heF90OwoKCgoKCiAKCgoKCgoKCgp0eXBlZGVmCWludAkJCWludHB0cl90 Owp0eXBlZGVmCXVuc2lnbmVkIGludAkJdWludHB0cl90OwoKCiAKCgoKCnR5cGVkZWYgY2hhcgkJ CWludF9sZWFzdDhfdDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50X2xlYXN0MTZfdDsKdHlwZWRl ZiBpbnQJCQlpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRlZiBsb25nIGxvbmcJCWludF9sZWFzdDY0 X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydAkJdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50X2xl YXN0MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCXVpbnRfbGVhc3Q2NF90OwoK CgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgoKCgoKZXh0 ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYJbG9uZyBsb25nCQlsb25nbG9uZ190Owp0eXBlZGVm CXVuc2lnbmVkIGxvbmcgbG9uZwl1X2xvbmdsb25nX3Q7CiMgNjUgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMyA0CgoKIAoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJdF9zY2FsYXJfdDsJIAp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcJdF91c2NhbGFyX3Q7CgoKIAoKCnR5cGVkZWYJdW5zaWduZWQgY2hh cgl1Y2hhcl90Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydF90Owp0eXBlZGVmCXVuc2ln bmVkIGludAl1aW50X3Q7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1bG9uZ190OwoKdHlwZWRlZglj aGFyCQkqY2FkZHJfdDsJIAp0eXBlZGVmCWxvbmcJCWRhZGRyX3Q7CSAKdHlwZWRlZglzaG9ydAkJ Y250X3Q7CQkgCgoKdHlwZWRlZgl1bG9uZ190CQlwYWRkcl90OwkgCgoKCgoKCgoKCgoKIAoKCnR5 cGVkZWYJdWxvbmdfdAkJcGZuX3Q7CQkgCnR5cGVkZWYJdWxvbmdfdAkJcGdjbnRfdDsJIAp0eXBl ZGVmCWxvbmcJCXNwZ2NudF90OwkgCgp0eXBlZGVmCXVjaGFyX3QJCXVzZV90OwkJIAp0eXBlZGVm CXNob3J0CQlzeXNpZF90Owp0eXBlZGVmCXNob3J0CQlpbmRleF90Owp0eXBlZGVmIHZvaWQJCSp0 aW1lb3V0X2lkX3Q7CSAKdHlwZWRlZiB2b2lkCQkqYnVmY2FsbF9pZF90OwkgCgogCgoKCgoKCgoj IDE0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgoKdHlwZWRlZiB1bG9uZ190CQlp bm9fdDsJCSAKdHlwZWRlZiBsb25nCQlibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJCWZzYmxr Y250X3Q7CSAKdHlwZWRlZiB1bG9uZ190CQlmc2ZpbGNudF90OwkgCgoKCgoKCgoKCgoKCgoKdHlw ZWRlZiB1X2xvbmdsb25nX3QJaW5vNjRfdDsJIAp0eXBlZGVmIGxvbmdsb25nX3QJYmxrY250NjRf dDsJIAp0eXBlZGVmIHVfbG9uZ2xvbmdfdAlmc2Jsa2NudDY0X3Q7CSAKdHlwZWRlZiB1X2xvbmds b25nX3QJZnNmaWxjbnQ2NF90OwkgCgoKCgoKCnR5cGVkZWYJbG9uZwkJYmxrc2l6ZV90OwkgCgoK CgoKdHlwZWRlZiBlbnVtIHsgQl9GQUxTRSwgQl9UUlVFIH0gYm9vbGVhbl90OwoKCiAKCgoKCgoK CnR5cGVkZWYgaW50NjRfdAkJcGFkNjRfdDsKdHlwZWRlZgl1aW50NjRfdAl1cGFkNjRfdDsKIyAy MDIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKdHlwZWRlZglsb25nbG9uZ190CW9m ZnNldF90Owp0eXBlZGVmCXVfbG9uZ2xvbmdfdAl1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xv bmdfdAlsZW5fdDsKdHlwZWRlZglsb25nbG9uZ190CWRpc2thZGRyX3Q7CgogCgoKCgoKdHlwZWRl ZiB1bmlvbiB7CglvZmZzZXRfdAlfZjsJIAoJc3RydWN0IHsKCQlpbnQzMl90CV9sOwkgCgkJaW50 MzJfdAlfdTsJIAoJfSBfcDsKfSBsbG9mZl90OwoKCiMgMjMyICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAoKCgp0eXBlZGVmIHVuaW9uIHsKCWRpc2thZGRyX3QJX2Y7CSAKCXN0cnVjdCB7 CgkJaW50MzJfdAlfbDsJIAoJCWludDMyX3QJX3U7CSAKCX0gX3A7Cn0gbGxkYWRkcl90OwoKCiMg MjUyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCnR5cGVkZWYgdWludF90IGtfZmx0 c2V0X3Q7CSAKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwkJaWRfdDsJCSAKCgogCgoKCnR5 cGVkZWYgdWludF90CQl1c2Vjb25kc190OwkgCgoKCnR5cGVkZWYgbG9uZwlzdXNlY29uZHNfdDsJ IAoKCiAKCgoKCgoKdHlwZWRlZiB1bG9uZ190CW1ham9yX3Q7CSAKdHlwZWRlZiB1bG9uZ190CW1p bm9yX3Q7CSAKCgogCgoKdHlwZWRlZiBzaG9ydAlwcmlfdDsKCiAKCgoKCgoKCgoKCnR5cGVkZWYJ dXNob3J0X3Qgb19tb2RlX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19kZXZfdDsJCSAKdHlwZWRlZgl1 c2hvcnRfdCBvX3VpZF90OwkJIAp0eXBlZGVmCW9fdWlkX3QJb19naWRfdDsJCSAKdHlwZWRlZglz aG9ydAlvX25saW5rX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19waWRfdDsJCSAKdHlwZWRlZiB1c2hv cnRfdCBvX2lub190OwkJIAoKCiAKCgp0eXBlZGVmCWludAlrZXlfdDsJCQkgCgoKCnR5cGVkZWYJ dWxvbmdfdAltb2RlX3Q7CQkJIAoKCgoKCgoKCgoKCnR5cGVkZWYJdWlkX3QJZ2lkX3Q7CQkJIAoK IAoKCgoKdHlwZWRlZgl1bnNpZ25lZCBpbnQJcHRocmVhZF90OwkgCnR5cGVkZWYJdW5zaWduZWQg aW50CXB0aHJlYWRfa2V5X3Q7CSAKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX211dGV4IHsJCSAK CXN0cnVjdCB7CgkJdWludDhfdAkJX19wdGhyZWFkX211dGV4X2ZsYWdbNF07CgkJdWludDMyX3Qg CV9fcHRocmVhZF9tdXRleF90eXBlOwoJfSBfX3B0aHJlYWRfbXV0ZXhfZmxhZ3M7Cgl1bmlvbiB7 CgkJc3RydWN0IHsKCQkJdWludDhfdAlfX3B0aHJlYWRfbXV0ZXhfcGFkWzhdOwoJCX0gX19wdGhy ZWFkX211dGV4X2xvY2s2NDsKCQl1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfb3duZXI2NDsKCX0g X19wdGhyZWFkX211dGV4X2xvY2s7Cgl1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsKfSBw dGhyZWFkX211dGV4X3Q7Cgp0eXBlZGVmCXN0cnVjdAlfcHRocmVhZF9jb25kIHsJCSAKCXN0cnVj dCB7CgkJdWludDhfdAkJX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsKCQl1aW50MzJfdCAJX19wdGhy ZWFkX2NvbmRfdHlwZTsKCX0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7Cgl1cGFkNjRfdCBfX3B0aHJl YWRfY29uZF9kYXRhOwp9IHB0aHJlYWRfY29uZF90OwoKIAoKCnR5cGVkZWYJc3RydWN0IF9wdGhy ZWFkX3J3bG9jayB7CSAKCWludDMyX3QJCV9fcHRocmVhZF9yd2xvY2tfcmVhZGVyczsKCXVpbnQx Nl90CV9fcHRocmVhZF9yd2xvY2tfdHlwZTsKCXVpbnQxNl90CV9fcHRocmVhZF9yd2xvY2tfbWFn aWM7Cgl1cGFkNjRfdAlfX3B0aHJlYWRfcndsb2NrX3BhZDFbM107Cgl1cGFkNjRfdAlfX3B0aHJl YWRfcndsb2NrX3BhZDJbMl07Cgl1cGFkNjRfdAlfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0g cHRocmVhZF9yd2xvY2tfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9hdHRyIHsKCXZv aWQJKl9fcHRocmVhZF9hdHRycDsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfbXV0ZXhhdHRyIHsKCXZvaWQJKl9fcHRocmVhZF9tdXRleGF0dHJwOwp9IHB0 aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKIAoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2NvbmRhdHRy IHsKCXZvaWQJKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKIAoK CnR5cGVkZWYJc3RydWN0CV9vbmNlIHsKCXVwYWQ2NF90CV9fcHRocmVhZF9vbmNlX3BhZFs0XTsK fSBwdGhyZWFkX29uY2VfdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrYXR0 ciB7Cgl2b2lkCSpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7 Cgp0eXBlZGVmIHVsb25nX3QJZGV2X3Q7CQkJIAoKCgoKCnR5cGVkZWYJdWxvbmdfdAlubGlua190 OwkJIAp0eXBlZGVmCWxvbmcJcGlkX3Q7CQkJIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl Zglsb25nCQl0aW1lX3Q7CSAKCgoKCgoKCgoKdHlwZWRlZglpbnQJY2xvY2tpZF90OwkgCgoKCgp0 eXBlZGVmCWludAl0aW1lcl90OwkgCgoKCgoKIAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdW5jaGFy Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWlu dDsKdHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nOwogCgojIDUwMSAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAp0eXBlZGVmIHVuc2ln bmVkIGNoYXIJdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXVfc2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50CXVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJdV9sb25nOwp0eXBlZGVm IHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90OwkgCnR5cGVkZWYgcXVhZF90CQlx dWFkOwkJCSAKIAoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiAK IAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXNlbGVjdC5oCTEuMTYJOTgvMDQvMjcg U01JIgkKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiAKIAoKIAogCiAK CiAKCgoKCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZS5oCTIuNjIJOTgvMDIvMDQg U01JIgkKCgoKIAoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHRpbWV2 YWwgewoJdGltZV90CQl0dl9zZWM7CQkgCglzdXNlY29uZHNfdAl0dl91c2VjOwkgCn07CgojIDc0 ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CgoKCgoKCgoKc3RydWN0IHRpbWV6b25lIHsK CWludAl0el9taW51dGVzd2VzdDsJIAoJaW50CXR6X2RzdHRpbWU7CSAKfTsKCgoKCgp9CgoKIAoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK CgojIDU1OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCiMgMTAwICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoJCQkJIAoJCQkJIAoKCQkJCSAKCQkJCSAKCgpzdHJ1 Y3QJaXRpbWVydmFsIHsKCXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkgCglzdHJ1Y3QJdGlt ZXZhbCBpdF92YWx1ZTsJIAp9OwoKIyAxODEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK CgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKdHlwZWRlZglsb25nbG9uZ190CWhydGltZV90OwoKIyAz MTAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKCgoKCgppbnQgYWRqdGltZShzdHJ1Y3Qg dGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgoKCgoKCmludCBnZXRpdGltZXIoaW50 LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3Ry dWN0IHRpbWV2YWwgKik7CgoKCmludCBzZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICos IHN0cnVjdCBpdGltZXJ2YWwgKik7CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCmlu dCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCmhydGltZV90CWdldGhy dGltZSh2b2lkKTsKaHJ0aW1lX3QJZ2V0aHJ2dGltZSh2b2lkKTsKCgoKCgoKCgoKCgoKCgoKCmlu dCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCgoKCgoKCiAKCgoKCgoK CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoj IDMzNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CgojIDQwNSAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lLmgiIDIgMyA0CgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAxIDMgNAogCiAKIAoKIAogCiAKCiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz IDQKCiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCgoKfQoKCgojIDE3 ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgoKZXh0ZXJuICJDIiB7CgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNrOwoKdHlwZWRlZglsb25nCWZk c19tYXNrOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYJc3RydWN0IGZkX3NldCB7 CgoKCglsb25nCWZkc19iaXRzWygoKCAxMDI0ICApKygoICAoc2l6ZW9mIChmZHNfbWFzaykgKiA4 ICkgICktMSkpLyggIChzaXplb2YgKGZkc19tYXNrKSAqIDggKSAgKSkgXTsKfSBmZF9zZXQ7CgoK CgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0KGludCwgZmRfc2V0ICosIGZkX3NldCAq LCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7CgoKCgoKCn0KCgoKIyA1MzkgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCiAKCgoKCgoKCgogCgoKCn0KCgoKIyAxOSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0CXRtIHsJIAoJaW50CXRtX3NlYzsKCWludAl0 bV9taW47CglpbnQJdG1faG91cjsKCWludAl0bV9tZGF5OwoJaW50CXRtX21vbjsKCWludAl0bV95 ZWFyOwoJaW50CXRtX3dkYXk7CglpbnQJdG1feWRheTsKCWludAl0bV9pc2RzdDsKfTsKCgoKZXh0 ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0 aW1lX3QpOwpleHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3Qg dGltZSh0aW1lX3QgKik7CmV4dGVybiBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsK ZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210 aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRp bWVfdCAqKTsKZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hh ciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CgoKCgoKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiAKCgoKCiAKCgoKCgoKCgojcHJhZ21hIGlk ZW50CSJAKCMpdGltZV9pbXBsLmgJMS4zCTk4LzAyLzEzIFNNSSIKCgoKCmV4dGVybiAiQyIgewoK CgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVjIHsJCSAKCXRpbWVfdAkJdHZf c2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7CgojIDU4ICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKCgp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3Ry dWNfdDsJIAoKCgogCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IGl0aW1lcnNwZWMgewkJ IAoJc3RydWN0IHRpbWVzcGVjCWl0X2ludGVydmFsOwkgCglzdHJ1Y3QgdGltZXNwZWMJaXRfdmFs dWU7CSAKfSBpdGltZXJzcGVjX3Q7CgojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwu aCIgMyA0CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMTAzICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKCgoKdW5pb24gc2lndmFsIHsKCWludAlz aXZhbF9pbnQ7CSAKCXZvaWQJKnNpdmFsX3B0cjsJIAp9OwoKCgoKc3RydWN0IHNpZ2V2ZW50IHsK CWludAkJc2lnZXZfbm90aWZ5OwkgCglpbnQJCXNpZ2V2X3NpZ25vOwkgCgl1bmlvbiBzaWd2YWwJ c2lnZXZfdmFsdWU7CSAKCXZvaWQJCSgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2 YWwpOwoJcHRocmVhZF9hdHRyX3QJKnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwoJaW50CQlfX3Np Z2V2X3BhZDI7Cn07CgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3Qg dGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0 aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVj dCBzaWdldmVudCAqLCB0aW1lcl90ICopOwpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90 KTsKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVy X2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJf c2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICosCgkJc3RydWN0 IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lkKTsKCmV4 dGVybiBjaGFyICp0em5hbWVbMl07CgoKCgoKCgoKCmV4dGVybiBsb25nIHRpbWV6b25lOwpleHRl cm4gaW50IGRheWxpZ2h0OwoKCgoKCmV4dGVybiBpbnQgY2Z0aW1lKGNoYXIgKiwgY2hhciAqLCBj b25zdCB0aW1lX3QgKik7CmV4dGVybiBpbnQgYXNjZnRpbWUoY2hhciAqLCBjb25zdCBjaGFyICos IGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGxvbmcgYWx0em9uZTsKCgoKCmV4dGVybiBzdHJ1 Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRkYXRlX2Vy cjsKCgoKIyAyMjIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCiAKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgoKfQoK CgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy90aHJlYWQuaCIgMgoKCgoKbmFtZXNwYWNl IFNpZ0MKewpuYW1lc3BhY2UgVGhyZWFkcwp7CgoKCgojIDU0ICIvb3B0L2d0ay9pbmNsdWRlL3Np Z2MrKy90aHJlYWQuaCIKCmNsYXNzIENvbmRBdHRyIHt1bnNpZ25lZCBjaGFyIGR1bW15WzQgXTt9 OwpjbGFzcyBDb25kSW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVsxNiBdO307CmNsYXNzIE11dGV4 QXR0ciB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKY2xhc3MgTXV0ZXhJbXBsIHt1bnNpZ25l ZCBjaGFyIGR1bW15WzI0IF07fTsKY2xhc3MgVGhyZWFkQXR0ciB7dW5zaWduZWQgY2hhciBkdW1t eVs0IF07fTsKY2xhc3MgVGhyZWFkSW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKY2xh c3MgS2V5SW1wbCB7dW5zaWduZWQgY2hhciBkdW1teVs0IF07fTsKCgogCmNsYXNzIE11dGV4CiAg ewogICB0eXBlZGVmIE11dGV4SW1wbCBJbXBsOwogICBwcml2YXRlOgogICAgIEltcGwgbXV0ZXhf OwogICAgIGludCBkZXN0cm95KCk7CgogICBwdWJsaWM6CiAgICAgc3RhdGljIE11dGV4QXR0ciBE ZWZhdWx0OwoKCgoKICAgICBNdXRleChjb25zdCBNdXRleEF0dHIgYXR0cj1EZWZhdWx0KTsgCgog ICAgICAKICAgICB+TXV0ZXgoKTsKCiAgICAgaW50IGxvY2soKTsKICAgICBpbnQgdHJ5bG9jaygp OwogICAgIGludCB1bmxvY2soKTsKICB9OwoKIApzdHJ1Y3QgTUxvY2sKICB7CiAgIE11dGV4ICZt dXRleF87CiAgIE1Mb2NrKE11dGV4JiBtdXRleCk6bXV0ZXhfKG11dGV4KSB7bXV0ZXhfLmxvY2so KTt9CiAgIH5NTG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICB7bXV0ZXhfLnVubG9jaygp O30KICB9OwoKIApzdHJ1Y3QgQ29uZGl0aW9uCiAgewogICB0eXBlZGVmIENvbmRJbXBsIEltcGw7 CiAgIHByaXZhdGU6CiAgICAgSW1wbCBjb25kXzsKCiAgICAgaW50IGRlc3Ryb3koKTsKICAgcHVi bGljOgogICAgIHN0YXRpYyBDb25kQXR0ciBEZWZhdWx0OwoKCgoKICAgICBDb25kaXRpb24oY29u c3QgQ29uZEF0dHIgJmF0dHI9RGVmYXVsdCk7CiAgICAgfkNvbmRpdGlvbigpOwoKICAgICAgCiAg ICAgaW50IHNpZ25hbCgpOwoKICAgICAgCiAgICAgaW50IGJyb2FkY2FzdCgpOwoKICAgICAgCiAg ICAgaW50IHdhaXQoTXV0ZXggJm0pOwoKICAgICAgCiAgICAgIAogICAgIGludCB3YWl0KE11dGV4 ICZtLHN0cnVjdCB0aW1lc3BlYyogc3BlYyk7CgogIH07CgogCnN0cnVjdCBTZW1hcGhvcmUKICB7 CiAgIGludCB2YWx1ZV87CiAgIENvbmRpdGlvbiBzaWdfOwogICBNdXRleCBhY2Nlc3NfOwoKICAg dm9pZCB1cCgpOwogICB2b2lkIGRvd24oKTsKICAgCiAgIFNlbWFwaG9yZShpbnQgdmFsdWU9MSk7 CiAgIH5TZW1hcGhvcmUoKTsKICB9OwoKc3RydWN0IFByaXZhdGVfCiAgewogICAgS2V5SW1wbCBr ZXlfOwogICAgdm9pZCogZ2V0KCk7CiAgICB2b2lkIHNldCh2b2lkICp2YWx1ZSk7CiAgICB2b2lk IGNyZWF0ZSh2b2lkICgqZHRvcikodm9pZCopKTsKICAgIHZvaWQgZGVzdHJveSgpOwogIH07Cgog CnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBQcml2YXRlIDogcHJpdmF0ZSBQcml2YXRlXwogIHsK ICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkIGR0b3Iodm9pZCogdikKICAgICAgICB7CiAg ICAgICAgICBUKiBvYmo9KFQqKXY7CiAgICAgICAgICBkZWxldGUgb2JqOwogICAgICAgIH0KCiAg ICBwdWJsaWM6CgogICAgICBUJiBvcGVyYXRvciA9KGNvbnN0IFQmIHQpCiAgICAgICAge3JldHVy biAoKChUJikqdGhpcyk9dCk7fQoKICAgICAgb3BlcmF0b3IgVCYgKCkKICAgICAgICB7CiAgICAg ICAgICBUICp2YWx1ZT0oVCopZ2V0KCk7CiAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg ICBzZXQoKHZvaWQqKSh2YWx1ZT1uZXcgVCgpKSk7ICAKICAgICAgICAgIHJldHVybiAqKHZhbHVl KTsKICAgICAgICB9CgogICAgICBQcml2YXRlKCkgIHsgY3JlYXRlKCZkdG9yKTsgfQogICAgICB+ UHJpdmF0ZSgpIHsgZGVzdHJveSgpOyB9CiAgfTsKCiAKdGVtcGxhdGUgPD4KY2xhc3MgUHJpdmF0 ZTxpbnQ+IDogcHJpdmF0ZSBQcml2YXRlXwogIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2 b2lkIGR0b3Iodm9pZCogdikKICAgICAgICB7CiAgICAgICAgICBpbnQqIG9iaj0oaW50Kil2Owog ICAgICAgICAgZGVsZXRlIG9iajsKICAgICAgICB9CgogICAgICBwdWJsaWM6CiAgICAgICAgaW50 JiBvcGVyYXRvciA9KGNvbnN0IGludCYgdCkKICAgICAgICAgIHtyZXR1cm4gKCgoaW50JikqdGhp cyk9dCk7fQoKICAgICAgICBvcGVyYXRvciBpbnQmICgpCiAgICAgICAgICB7CiAgICAgICAgICAg aW50ICp2YWx1ZT0oaW50KilnZXQoKTsKICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg ICAgc2V0KCh2b2lkKikodmFsdWU9bmV3IGludCgwKSkpOyAgCiAgICAgICAgICAgcmV0dXJuICoo dmFsdWUpOyAKICAgICAgICAgIH0KCiAgICAgICAgUHJpdmF0ZSgpIHsgY3JlYXRlKCZkdG9yKTsg fQogICAgICAgIH5Qcml2YXRlKCkgeyBkZXN0cm95KCk7IH0KICB9OwoKc3RydWN0IFRocmVhZAog IHsKICAgcHJvdGVjdGVkOgogICAgIHR5cGVkZWYgVGhyZWFkSW1wbCBJbXBsOwogICAgIEltcGwg dGhyZWFkXzsKICAgICB2b2lkKiAgICAgYXJnXzsKICAgICBUaHJlYWRBdHRyIGF0dHJfOwoKICAg ICBzdGF0aWMgdm9pZCogY2FsbF9tYWluXyh2b2lkKiBvYmopOwoKICAgcHVibGljOgoKCgoKICAg ICB2aXJ0dWFsIHZvaWQqIG1haW4odm9pZCopPTA7CiAgICAgaW50IGRldGFjaCgpOwoKICAgICBz dGF0aWMgVGhyZWFkQXR0ciBEZWZhdWx0OwoKICAgICAgCiAgICAgIAogICAgICAKICAgICBpbnQg c3RhcnQodm9pZCogYXJnPTApOwogICAgIAogICAgIFRocmVhZChjb25zdCBUaHJlYWRBdHRyICZh dHRyPURlZmF1bHQpOwogICAgIHZpcnR1YWwgflRocmVhZCgpOwogIH07CgoKCn0gIAp9ICAKCgoK CiMgMTQgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL21hcnNoYWwuaCIgMgoKCgoKbmFtZXNwYWNl IFNpZ0MKewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCiAKY2xhc3MgICBSZXRD b2RlCiAgewogICBwdWJsaWM6CiAgICAgc3RhdGljIGludCBjaGVja19pZ25vcmUoKTsKICAgICBz dGF0aWMgdm9pZCBpZ25vcmUoKTsKICB9OwoKIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KY2xhc3Mg TWFyc2hhbAogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgUiBPdXRUeXBlOwoKICAgICB0eXBl ZGVmIFIgSW5UeXBlOwogICBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBPdXRUeXBlIE91dFR5cGVf OwoKCgoKCiAgICAgT3V0VHlwZV8gdmFsdWVfOwogICBwdWJsaWM6CiAgICAgT3V0VHlwZV8mIHZh bHVlKCkge3JldHVybiB2YWx1ZV87fQoKICAgICBzdGF0aWMgT3V0VHlwZV8gZGVmYXVsdF92YWx1 ZSgpIAoKICAgICAgIHtyZXR1cm4gT3V0VHlwZV8oKTt9CgoKCgogICAgICAKICAgICBib29sIG1h cnNoYWwoY29uc3QgSW5UeXBlJiBuZXd2YWwpCiAgICAgICB7CiAgICAgICAgaWYgKCFSZXRDb2Rl OjpjaGVja19pZ25vcmUoKSkgdmFsdWVfPW5ld3ZhbDsKICAgICAgICByZXR1cm4gMDsgICAKICAg ICAgIH07CiAgICAgTWFyc2hhbCgpCgogICAgICAgOnZhbHVlXygpCiAgICAgICB7UmV0Q29kZTo6 Y2hlY2tfaWdub3JlKCk7fQoKCgoKCgogIH07CgoKIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KY2xh c3MgTWFyc2hhbDxSJj4KICB7CiAgICBwdWJsaWM6CiAgICAgdHlwZWRlZiBSJiBPdXRUeXBlOwog ICAgIHR5cGVkZWYgUiYgSW5UeXBlOwogICAgIFIqIHZhbHVlXzsKICAgICBPdXRUeXBlIHZhbHVl KCkge3JldHVybiB2YWx1ZV87fQogICAgIHN0YXRpYyBPdXRUeXBlIGRlZmF1bHRfdmFsdWUoKSB7 cmV0dXJuIERlZmF1bHQ7fQogICAgIHN0YXRpYyBSIERlZmF1bHQ7CgogICAgICAKICAgICBib29s IG1hcnNoYWwoSW5UeXBlIG5ld3ZhbCkKICAgICAgIHsKICAgICAgICBpZiAoIVJldENvZGU6OmNo ZWNrX2lnbm9yZSgpKSB2YWx1ZV89Jm5ld3ZhbDsKICAgICAgICByZXR1cm4gMDsgICAKICAgICAg IH07CiAgICAgTWFyc2hhbCgpCiAgICAgICA6dmFsdWVfKCZEZWZhdWx0KQogICAgICAge1JldENv ZGU6OmNoZWNrX2lnbm9yZSgpO30KICAgICB+TWFyc2hhbCgpCiAgICAgICB7fQogIH07Cgp0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gVCBNYXJzaGFsPFQmPjo6RGVmYXVsdDsKCgoKIAp0ZW1wbGF0ZSA8 PgpjbGFzcyBNYXJzaGFsPHZvaWQ+CiAgewogICBwdWJsaWM6CiAgIE1hcnNoYWwoKSAKICAgICB7 fQogICB+TWFyc2hhbCgpCiAgICAge30KICB9OwoKCgogCnRlbXBsYXRlIDxjbGFzcyBSLFIgaW5p dGlhbD4KY2xhc3MgRml4ZWRNYXJzaGFsCiAgewogICAgcHVibGljOgogICAgIHR5cGVkZWYgUiBP dXRUeXBlOwogICAgIHR5cGVkZWYgUiBJblR5cGU7CiAgICAgUiB2YWx1ZV87CiAgICAgT3V0VHlw ZSYgdmFsdWUoKSB7cmV0dXJuIHZhbHVlXzt9CiAgICAgc3RhdGljIE91dFR5cGUgZGVmYXVsdF92 YWx1ZSgpIHsgcmV0dXJuIGluaXRpYWw7IH0KCiAgICAgYm9vbCBtYXJzaGFsKGNvbnN0IEluVHlw ZSYgbmV3dmFsKQogICAgICAgewogICAgICAgIGlmICghUmV0Q29kZTo6Y2hlY2tfaWdub3JlKCkp IHZhbHVlXz1uZXd2YWw7CiAgICAgICAgcmV0dXJuIDA7ICAgCiAgICAgICB9OwoKICAgICBGaXhl ZE1hcnNoYWwoKQogICAgICAgOnZhbHVlXyhpbml0aWFsKSAKICAgICAgIHtSZXRDb2RlOjpjaGVj a19pZ25vcmUoKTt9CiAgICAgfkZpeGVkTWFyc2hhbCgpCiAgICAgICB7fQogIH07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgUj4Kc3RydWN0IEZhc3RNYXJzaGFsCiAgewogICAgIHR5cGVkZWYgUiBPdXRUeXBl OwogICAgIHR5cGVkZWYgUiBJblR5cGU7CgogICAgIFIgdmFsdWVfOwogICAgIE91dFR5cGUmIHZh bHVlKCkge3JldHVybiB2YWx1ZV87fQogICAgIHN0YXRpYyBPdXRUeXBlIGRlZmF1bHRfdmFsdWUo KSAKCiAgICAgICB7cmV0dXJuIFIoKTt9CgoKCgogICAgIGJvb2wgbWFyc2hhbChjb25zdCBJblR5 cGUmIG5ld3ZhbCkKICAgICAgIHsKICAgICAgICB2YWx1ZV89bmV3dmFsOwogICAgICAgIHJldHVy biAwOyAgIAogICAgICAgfTsKCiAgICAgRmFzdE1hcnNoYWwoKQoKICAgICAgIDp2YWx1ZV8oKQog ICAgICAge30KCgoKICAgICB+RmFzdE1hcnNoYWwoKQogICAgICAge30KICB9OwoKCgoKfSAgCgoK CiMgNiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmFzaWNfc2lnbmFsLmgiIDIKCgoKIAoKCgoK CgoKCgoKCgpuYW1lc3BhY2UgU2lnQwp7CgoKIAoKCgogCmNsYXNzICAgU2lnbmFsXwogIHsKICAg IHByaXZhdGU6CiAgICAgIFNpZ25hbF8oY29uc3QgU2lnbmFsXyYpOwoKICAgIHByb3RlY3RlZDoK ICAgICAgdHlwZWRlZiBTY29wZUxpc3QgTGlzdDsKICAgCiAgICAgIHN0cnVjdCAgIEltcGwgCiAg ICAgICAgeyAKICAgICAgICAgIHR5cGVkZWYgU2NvcGVMaXN0IExpc3Q7CiAgICAgICAgICBMaXN0 IGluY29taW5nXzsKICAgICAgICAgIExpc3Qgb3V0Z29pbmdfOwogICAgICAgICAgSW1wbCgpOwog ICAgICAgICAgfkltcGwoKTsKICAgICAgICB9OwoKICAgICAgSW1wbCAqaW1wbDsKCiAgICAgIFNs b3REYXRhKiBpbl9jb25uZWN0KCk7CiAgICAgIFNsb3REYXRhKiBvdXRfY29ubmVjdChTbG90RGF0 YSAqcyk7CgogICAgICBTaWduYWxfKCk7CiAgICAgIH5TaWduYWxfKCk7CgogICAgcHVibGljOgog ICAgICBib29sIGVtcHR5KCkgY29uc3Q7CiAgICAgIHZvaWQgY2xlYXIoKTsKICB9OwoKCiAKCgoK dGVtcGxhdGUgPGNsYXNzIFIsdHlwZW5hbWUgTWFyc2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2ln bmFsMDpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDA8Uj4g ICAgICAgICAgICAgICAgICAgICAgIEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90MDx0eXBl bmFtZSBNYXJzaDo6T3V0VHlwZT4gT3V0U2xvdFR5cGU7CgogICBwcml2YXRlOgoKICAgICB0eXBl ZGVmIHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlIFNUeXBlOwogICAgIHR5cGVkZWYgUiBSVHlwZTsK CgoKCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsK ICAgICB0eXBlZGVmIFNpZ25hbDA8UixNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRh T2JqMjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3Rh dGljIFNUeXBlIGNhbGxiYWNrKHZvaWQqIGQpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEqIGRh dGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRhLT5vYmotPmVtaXQoKTsKICAgICAg IH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAgICBT bG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVy cHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFjaz0o dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhp czsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3Qo Y29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qo cy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0KCk7CiAgICAgU1R5cGUgb3BlcmF0 b3IoKSgpCiAgICAgICB7cmV0dXJuIGVtaXQoKTt9CgogICAgIFNpZ25hbDAoKSB7fQogICAgIFNp Z25hbDAoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwwKCkg e30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWdu YWwwPFIsTWFyc2g+OjpTVHlwZSBTaWduYWwwPFIsTWFyc2g+OjoKICBlbWl0KCkKICB7CiAgIGlm ICghaW1wbHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92 YWx1ZSgpOwogICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNs b3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAo aSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUo KSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShk YXRhLT5jYWxsYmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKCkpKSByZXR1cm4g cmMudmFsdWUoKTsKICAgICB9IAogICByZXR1cm4gcmMudmFsdWUoKTsKICB9CgoKdGVtcGxhdGUg PGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWwwPHZvaWQsTWFyc2g+CiAgOnB1YmxpYyBTaWduYWxf CiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90MDx2b2lkPiBJblNsb3RUeXBlOwogICAg IHR5cGVkZWYgU2xvdDA8dm9pZD4gT3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6CiAgICAgdHlwZWRl ZiBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDA8dm9p ZCxNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjxPdXRTbG90VHlwZTo6RnVu YyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCogZCkKICAg ICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgICAgZGF0YS0+ b2JqLT5lbWl0KCk7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgp CiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2Fs bERhdGEmIGRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAg ICAgIGRhdGEuY2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAg ICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5T bG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkp OwogICAgICAgfQoKICAgICB2b2lkIGVtaXQoKTsKICAgICB2b2lkIG9wZXJhdG9yKCkoKQogICAg ICAge2VtaXQoKTt9CgogICAgIFNpZ25hbDAoKSB7fQogICAgIFNpZ25hbDAoY29uc3QgSW5TbG90 VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwwKCkge30KICB9OwoKCiAKdGVtcGxh dGUgPGNsYXNzIE1hcnNoPgp2b2lkIFNpZ25hbDA8dm9pZCxNYXJzaD46OgogIGVtaXQoKQogIHsK ICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZv dXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9y IGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRh PSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAg IENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwo KTsKICAgICB9CiAgfQoKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSx0eXBlbmFt ZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWwxOnB1YmxpYyBTaWduYWxfCiAgewog ICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90MTxSLFAxPiAgICAgICAgICAgICAgICAgICAgICAg SW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3QxPHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlLFAx PiBPdXRTbG90VHlwZTsKCiAgIHByaXZhdGU6CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6 Ok91dFR5cGUgU1R5cGU7CiAgICAgdHlwZWRlZiBSIFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5 cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFs MTxSLFAxLE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91 dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJh Y2sodm9pZCogZCxQMSBwMSkKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERh dGEqKWQ7CiAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSk7CiAgICAgICB9CgogICBw dWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEq IHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2Fz dDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5cGVuYW1l IE91dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAg ICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IElu U2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMuZGF0YSgp KTsKICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSk7 CiAgICAgU1R5cGUgb3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSkKICAgICAg IHtyZXR1cm4gZW1pdChwMSk7fQoKICAgICBTaWduYWwxKCkge30KICAgICBTaWduYWwxKGNvbnN0 IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsMSgpIHt9CiAgfTsKCgog CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFs MTxSLFAxLE1hcnNoPjo6U1R5cGUgU2lnbmFsMTxSLFAxLE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFt ZSBUcmFpdDxQMT46OnJlZiBwMSkKICB7CiAgIGlmICghaW1wbHx8aW1wbC0+b3V0Z29pbmdfLmVt cHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgpOwogICBMaXN0ICZvdXQ9aW1wbC0+ b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVy YXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAg ZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwog ICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5jYWxsYmFjaygpKTsKICAgICAgaWYg KHJjLm1hcnNoYWwocy5jYWxsKHAxKSkpIHJldHVybiByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJl dHVybiByYy52YWx1ZSgpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgTWFyc2g+CmNs YXNzIFNpZ25hbDE8dm9pZCxQMSxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1Ymxp YzoKICAgICB0eXBlZGVmIFNsb3QxPHZvaWQsUDE+IEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBT bG90MTx2b2lkLFAxPiBPdXRTbG90VHlwZTsKICAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHR5cGVu YW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsMTx2 b2lkLFAxLE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91 dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFj ayh2b2lkKiBkLFAxIHAxKQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0 YSopZDsKICAgICAgICBkYXRhLT5vYmotPmVtaXQocDEpOwogICAgICAgfQoKICAgcHVibGljOgog ICAgIE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5f Y29ubmVjdCgpOwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERh dGEmPih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAgICAg IGRhdGEub2JqPXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVj dGlvbiBjb25uZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJu IG91dF9jb25uZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVuYW1l IFRyYWl0PFAxPjo6cmVmIHAxKTsKICAgICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8 UDE+OjpyZWYgcDEpCiAgICAgICB7ZW1pdChwMSk7fQoKICAgICBTaWduYWwxKCkge30KICAgICBT aWduYWwxKGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsMSgp IHt9CiAgfTsKCgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWwx PHZvaWQsUDEsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxKQogIHsK ICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZv dXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9y IGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRh PSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAg IENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwo cDEpOwogICAgIH0KICB9CgoKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNz IFAyLHR5cGVuYW1lIE1hcnNoPU1hcnNoYWw8Uj4gPgogIGNsYXNzIFNpZ25hbDI6cHVibGljIFNp Z25hbF8KICB7CiAgIHB1YmxpYzoKICAgICB0eXBlZGVmIFNsb3QyPFIsUDEsUDI+ICAgICAgICAg ICAgICAgICAgICAgICBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDI8dHlwZW5hbWUgTWFy c2g6Ok91dFR5cGUsUDEsUDI+IE91dFNsb3RUeXBlOwoKICAgcHJpdmF0ZToKCiAgICAgdHlwZWRl ZiB0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSBTVHlwZTsKICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAg ICAgdHlwZWRlZiBTaWduYWwyPFIsUDEsUDIsTWFyc2g+IFNlbGY7CiAgICAgdHlwZWRlZiBDYWxs RGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2VsZj4gQ2FsbERhdGE7CgogICAg IHN0YXRpYyBTVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyKQogICAgICAgewogICAg ICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgICByZXR1cm4gZGF0YS0+b2Jq LT5lbWl0KHAxLHAyKTsKICAgICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90 KCkKICAgICAgIHsKICAgICAgICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBD YWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAg ICAgICAgZGF0YS5jYWxsYmFjaz0odHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7 CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAg ICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAg ICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0 KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKTsK ICAgICBTVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1l IFRyYWl0PFAyPjo6cmVmIHAyKQogICAgICAge3JldHVybiBlbWl0KHAxLHAyKTt9CgogICAgIFNp Z25hbDIoKSB7fQogICAgIFNpZ25hbDIoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7 fQogICAgIH5TaWduYWwyKCkge30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEs Y2xhc3MgUDIsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWduYWwyPFIsUDEsUDIsTWFyc2g+OjpT VHlwZSBTaWduYWwyPFIsUDEsUDIsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6 cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyKQogIHsKICAgaWYgKCFpbXBsfHxpbXBs LT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuIE1hcnNoOjpkZWZhdWx0X3ZhbHVlKCk7CiAgIExp c3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBNYXJzaCByYzsKICAgU2xvdERhdGEgKmRhdGE7 CiAgIExpc3Q6Okl0ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkp CiAgICAgewogICAgICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgp OwogICAgICArK2k7CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNr KCkpOwogICAgICBpZiAocmMubWFyc2hhbChzLmNhbGwocDEscDIpKSkgcmV0dXJuIHJjLnZhbHVl KCk7CiAgICAgfSAKICAgcmV0dXJuIHJjLnZhbHVlKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBQ MSxjbGFzcyBQMixjbGFzcyBNYXJzaD4KY2xhc3MgU2lnbmFsMjx2b2lkLFAxLFAyLE1hcnNoPgog IDpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDI8dm9pZCxQ MSxQMj4gSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3QyPHZvaWQsUDEsUDI+IE91dFNsb3RU eXBlOwogICBwcml2YXRlOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJh Y2sgQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiBTaWduYWwyPHZvaWQsUDEsUDIsTWFyc2g+IFNlbGY7 CiAgICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2Vs Zj4gQ2FsbERhdGE7CgogICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIg cDIpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAg IGRhdGEtPm9iai0+ZW1pdChwMSxwMik7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xv dFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7 CiAgICAgICAgQ2FsbERhdGEmIGRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9 dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5l Y3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5l Y3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICB2b2lkIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+ OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIpOwogICAgIHZvaWQgb3BlcmF0b3Io KSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMikK ICAgICAgIHtlbWl0KHAxLHAyKTt9CgogICAgIFNpZ25hbDIoKSB7fQogICAgIFNpZ25hbDIoY29u c3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWwyKCkge30KICB9OwoK CiAKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIE1hcnNoPgp2b2lkIFNpZ25hbDI8 dm9pZCxQMSxQMixNYXJzaD46OgogIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlw ZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5n Xy5lbXB0eSgpKSByZXR1cm47CiAgIExpc3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBTbG90 RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkh PW91dC5lbmQoKSkKICAgICB7CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkp KS0+cGFyZW50KCk7CiAgICAgICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0 YS0+Y2FsbGJhY2soKSk7CiAgICAgIHMuY2FsbChwMSxwMik7CiAgICAgfQogIH0KCgoKCiAKCgoK dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsdHlwZW5hbWUgTWFy c2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2lnbmFsMzpwdWJsaWMgU2lnbmFsXwogIHsKICAgcHVi bGljOgogICAgIHR5cGVkZWYgU2xvdDM8UixQMSxQMixQMz4gICAgICAgICAgICAgICAgICAgICAg IEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90Mzx0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSxQ MSxQMixQMz4gT3V0U2xvdFR5cGU7CgogICBwcml2YXRlOgoKICAgICB0eXBlZGVmIHR5cGVuYW1l IE1hcnNoOjpPdXRUeXBlIFNUeXBlOwogICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgdHlw ZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVm IFNpZ25hbDM8UixQMSxQMixQMyxNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2Jq Mjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGlj IFNUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICB7CiAgICAg ICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRhLT5vYmot PmVtaXQocDEscDIscDMpOwogICAgICAgfQoKICAgcHVibGljOgogICAgIE91dFNsb3RUeXBlIHNs b3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29ubmVjdCgpOwogICAgICAg IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsK ICAgICAgICBkYXRhLmNhbGxiYWNrPSh0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyljYWxsYmFj azsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7CiAgICAgICB9Cgog ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQogICAgICAgewogICAg ICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9CgogICAgIFNUeXBlIGVt aXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIs dHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMpOwogICAgIFNUeXBlIG9wZXJhdG9yKCkodHlwZW5h bWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUg VHJhaXQ8UDM+OjpyZWYgcDMpCiAgICAgICB7cmV0dXJuIGVtaXQocDEscDIscDMpO30KCiAgICAg U2lnbmFsMygpIHt9CiAgICAgU2lnbmFsMyhjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVjdChz KTt9CiAgICAgflNpZ25hbDMoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQ MSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBNYXJzaD4KdHlwZW5hbWUgIFNpZ25hbDM8UixQMSxQ MixQMyxNYXJzaD46OlNUeXBlIFNpZ25hbDM8UixQMSxQMixQMyxNYXJzaD46OgogIGVtaXQodHlw ZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5h bWUgVHJhaXQ8UDM+OjpyZWYgcDMpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5l bXB0eSgpKSByZXR1cm4gTWFyc2g6OmRlZmF1bHRfdmFsdWUoKTsKICAgTGlzdCAmb3V0PWltcGwt Pm91dGdvaW5nXzsgCiAgIE1hcnNoIHJjOwogICBTbG90RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRl cmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkhPW91dC5lbmQoKSkKICAgICB7CiAgICAg IGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkpKS0+cGFyZW50KCk7CiAgICAgICsraTsK ICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0YS0+Y2FsbGJhY2soKSk7CiAgICAgIGlm IChyYy5tYXJzaGFsKHMuY2FsbChwMSxwMixwMykpKSByZXR1cm4gcmMudmFsdWUoKTsKICAgICB9 IAogICByZXR1cm4gcmMudmFsdWUoKTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAy LGNsYXNzIFAzLGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWwzPHZvaWQsUDEsUDIsUDMsTWFyc2g+ CiAgOnB1YmxpYyBTaWduYWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90Mzx2b2lk LFAxLFAyLFAzPiBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDM8dm9pZCxQMSxQMixQMz4g T3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBl OjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDM8dm9pZCxQMSxQMixQMyxN YXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBPdXRTbG90VHlw ZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCog ZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2Fs bERhdGEqKWQ7CiAgICAgICAgZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzKTsKICAgICAgIH0KCiAg IHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAgICBTbG90RGF0 YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSYgZGF0YT1yZWludGVycHJldF9j YXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFjaz1jYWxsYmFj azsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7CiAgICAgICB9Cgog ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQogICAgICAgewogICAg ICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9CgogICAgIHZvaWQgZW1p dCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0 eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyk7CiAgICAgdm9pZCBvcGVyYXRvcigpKHR5cGVuYW1l IFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRy YWl0PFAzPjo6cmVmIHAzKQogICAgICAge2VtaXQocDEscDIscDMpO30KCiAgICAgU2lnbmFsMygp IHt9CiAgICAgU2lnbmFsMyhjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVjdChzKTt9CiAgICAg flNpZ25hbDMoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3Mg UDMsY2xhc3MgTWFyc2g+CnZvaWQgU2lnbmFsMzx2b2lkLFAxLFAyLFAzLE1hcnNoPjo6CiAgZW1p dCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0 eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMykKICB7CiAgIGlmICghaW1wbHx8aW1wbC0+b3V0Z29p bmdfLmVtcHR5KCkpIHJldHVybjsKICAgTGlzdCAmb3V0PWltcGwtPm91dGdvaW5nXzsgCiAgIFNs b3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAo aSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUo KSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShk YXRhLT5jYWxsYmFjaygpKTsKICAgICAgcy5jYWxsKHAxLHAyLHAzKTsKICAgICB9CiAgfQoKCgoK IAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQ NCx0eXBlbmFtZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWw0OnB1YmxpYyBTaWdu YWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90NDxSLFAxLFAyLFAzLFA0PiAgICAg ICAgICAgICAgICAgICAgICAgSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q0PHR5cGVuYW1l IE1hcnNoOjpPdXRUeXBlLFAxLFAyLFAzLFA0PiBPdXRTbG90VHlwZTsKCiAgIHByaXZhdGU6Cgog ICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6Ok91dFR5cGUgU1R5cGU7CiAgICAgdHlwZWRlZiBS IFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENh bGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPiBTZWxmOwog ICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jLFNlbGY+ IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBw MixQMyBwMyxQNCBwNCkKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq KWQ7CiAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCk7CiAgICAgICB9 CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xv dERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnBy ZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5 cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7 CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNv bnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMu ZGF0YSgpKTsKICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJl ZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBw Myx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCk7CiAgICAgU1R5cGUgb3BlcmF0b3IoKSh0eXBl bmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFt ZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICAgICAgIHty ZXR1cm4gZW1pdChwMSxwMixwMyxwNCk7fQoKICAgICBTaWduYWw0KCkge30KICAgICBTaWduYWw0 KGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNCgpIHt9CiAg fTsKCgogCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNz IFA0LGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPjo6 U1R5cGUgU2lnbmFsNDxSLFAxLFAyLFAzLFA0LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFtZSBUcmFp dDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQ Mz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCkKICB7CiAgIGlmICghaW1wbHx8 aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgpOwog ICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRhICpk YXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0LmVu ZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5wYXJl bnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5jYWxs YmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKHAxLHAyLHAzLHA0KSkpIHJldHVy biByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJldHVybiByYy52YWx1ZSgpOwogIH0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgTWFyc2g+CmNsYXNz IFNpZ25hbDQ8dm9pZCxQMSxQMixQMyxQNCxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAg IHB1YmxpYzoKICAgICB0eXBlZGVmIFNsb3Q0PHZvaWQsUDEsUDIsUDMsUDQ+IEluU2xvdFR5cGU7 CiAgICAgdHlwZWRlZiBTbG90NDx2b2lkLFAxLFAyLFAzLFA0PiBPdXRTbG90VHlwZTsKICAgcHJp dmF0ZToKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxiYWNr OwogICAgIHR5cGVkZWYgU2lnbmFsNDx2b2lkLFAxLFAyLFAzLFA0LE1hcnNoPiBTZWxmOwogICAg IHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENh bGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAz IHAzLFA0IHA0KQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK ICAgICAgICBkYXRhLT5vYmotPmVtaXQocDEscDIscDMscDQpOwogICAgICAgfQoKICAgcHVibGlj OgogICAgIE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9 aW5fY29ubmVjdCgpOwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2Fs bERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAg ICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29u bmVjdGlvbiBjb25uZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0 dXJuIG91dF9jb25uZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVu YW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1l IFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0KTsKICAgICB2b2lk IG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+ OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+Ojpy ZWYgcDQpCiAgICAgICB7ZW1pdChwMSxwMixwMyxwNCk7fQoKICAgICBTaWduYWw0KCkge30KICAg ICBTaWduYWw0KGNvbnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFs NCgpIHt9CiAgfTsKCgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFz cyBQNCxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWw0PHZvaWQsUDEsUDIsUDMsUDQsTWFyc2g+OjoK ICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0 KQogIHsKICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBM aXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0 ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAg ICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7 CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBz LmNhbGwocDEscDIscDMscDQpOwogICAgIH0KICB9CgoKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LHR5cGVuYW1lIE1h cnNoPU1hcnNoYWw8Uj4gPgogIGNsYXNzIFNpZ25hbDU6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1 YmxpYzoKICAgICB0eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+ICAgICAgICAgICAgICAg ICAgICAgICBJblNsb3RUeXBlOwogICAgIHR5cGVkZWYgU2xvdDU8dHlwZW5hbWUgTWFyc2g6Ok91 dFR5cGUsUDEsUDIsUDMsUDQsUDU+IE91dFNsb3RUeXBlOwoKICAgcHJpdmF0ZToKCiAgICAgdHlw ZWRlZiB0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSBTVHlwZTsKICAgICB0eXBlZGVmIFIgUlR5cGU7 CgoKCgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7 CiAgICAgdHlwZWRlZiBTaWduYWw1PFIsUDEsUDIsUDMsUDQsUDUsTWFyc2g+IFNlbGY7CiAgICAg dHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMsU2VsZj4gQ2Fs bERhdGE7CgogICAgIHN0YXRpYyBTVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyLFAz IHAzLFA0IHA0LFA1IHA1KQogICAgICAgewogICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0 YSopZDsKICAgICAgICByZXR1cm4gZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzLHA0LHA1KTsKICAg ICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAgICAg ICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSAmZGF0YT1yZWlu dGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxsYmFj az0odHlwZW5hbWUgT3V0U2xvdFR5cGU6OkZ1bmMpY2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9 dGhpczsKICAgICAgICByZXR1cm4gdG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5l Y3QoY29uc3QgSW5TbG90VHlwZSAmcykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5l Y3Qocy5kYXRhKCkpOwogICAgICAgfQoKICAgICBTVHlwZSBlbWl0KHR5cGVuYW1lIFRyYWl0PFAx Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6 cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm IHA1KTsKICAgICBTVHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5 cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVu YW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KQogICAgICAg e3JldHVybiBlbWl0KHAxLHAyLHAzLHA0LHA1KTt9CgogICAgIFNpZ25hbDUoKSB7fQogICAgIFNp Z25hbDUoY29uc3QgSW5TbG90VHlwZSAmcykge2Nvbm5lY3Qocyk7fQogICAgIH5TaWduYWw1KCkg e30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMs Y2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgTWFyc2g+CnR5cGVuYW1lICBTaWduYWw1PFIsUDEsUDIs UDMsUDQsUDUsTWFyc2g+OjpTVHlwZSBTaWduYWw1PFIsUDEsUDIsUDMsUDQsUDUsTWFyc2g+OjoK ICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVm IHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0 LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1KQogIHsKICAgaWYgKCFpbXBsfHxpbXBsLT5vdXRn b2luZ18uZW1wdHkoKSkgcmV0dXJuIE1hcnNoOjpkZWZhdWx0X3ZhbHVlKCk7CiAgIExpc3QgJm91 dD1pbXBsLT5vdXRnb2luZ187IAogICBNYXJzaCByYzsKICAgU2xvdERhdGEgKmRhdGE7CiAgIExp c3Q6Okl0ZXJhdG9yIGk9b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAg ewogICAgICBkYXRhPSgoU2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAg ICArK2k7CiAgICAgIENhbGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwog ICAgICBpZiAocmMubWFyc2hhbChzLmNhbGwocDEscDIscDMscDQscDUpKSkgcmV0dXJuIHJjLnZh bHVlKCk7CiAgICAgfSAKICAgcmV0dXJuIHJjLnZhbHVlKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFz cyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBNYXJzaD4KY2xh c3MgU2lnbmFsNTx2b2lkLFAxLFAyLFAzLFA0LFA1LE1hcnNoPgogIDpwdWJsaWMgU2lnbmFsXwog IHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDU8dm9pZCxQMSxQMixQMyxQNCxQNT4gSW5T bG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q1PHZvaWQsUDEsUDIsUDMsUDQsUDU+IE91dFNsb3RU eXBlOwogICBwcml2YXRlOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJh Y2sgQ2FsbGJhY2s7CiAgICAgdHlwZWRlZiBTaWduYWw1PHZvaWQsUDEsUDIsUDMsUDQsUDUsTWFy c2g+IFNlbGY7CiAgICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgT3V0U2xvdFR5cGU6 OkZ1bmMsU2VsZj4gQ2FsbERhdGE7CgogICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQqIGQs UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUpCiAgICAgICB7CiAgICAgICAgQ2FsbERhdGEq IGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxw NSk7CiAgICAgICB9CgogICBwdWJsaWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7 CiAgICAgICAgU2xvdERhdGEqIHRtcD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEmIGRh dGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEu Y2FsbGJhY2s9Y2FsbGJhY2s7CiAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICByZXR1cm4g dG1wOwogICAgICAgfQoKICAgICBDb25uZWN0aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAm cykKICAgICAgIHsKICAgICAgICByZXR1cm4gb3V0X2Nvbm5lY3Qocy5kYXRhKCkpOwogICAgICAg fQoKICAgICB2b2lkIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJh aXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8 UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUpOwogICAgIHZvaWQgb3BlcmF0 b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBw Mix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0 eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSkKICAgICAgIHtlbWl0KHAxLHAyLHAzLHA0LHA1KTt9 CgogICAgIFNpZ25hbDUoKSB7fQogICAgIFNpZ25hbDUoY29uc3QgSW5TbG90VHlwZSAmcykge2Nv bm5lY3Qocyk7fQogICAgIH5TaWduYWw1KCkge30KICB9OwoKCiAKdGVtcGxhdGUgPGNsYXNzIFAx LGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIE1hcnNoPgp2b2lkIFNp Z25hbDU8dm9pZCxQMSxQMixQMyxQNCxQNSxNYXJzaD46OgogIGVtaXQodHlwZW5hbWUgVHJhaXQ8 UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+ OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+Ojpy ZWYgcDUpCiAgewogICBpZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5lbXB0eSgpKSByZXR1cm47 CiAgIExpc3QgJm91dD1pbXBsLT5vdXRnb2luZ187IAogICBTbG90RGF0YSAqZGF0YTsKICAgTGlz dDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUgKGkhPW91dC5lbmQoKSkKICAgICB7 CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2RlKCkpKS0+cGFyZW50KCk7CiAgICAg ICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJikoZGF0YS0+Y2FsbGJhY2soKSk7CiAg ICAgIHMuY2FsbChwMSxwMixwMyxwNCxwNSk7CiAgICAgfQogIH0KCgoKCiAKCgoKdGVtcGxhdGUg PGNsYXNzIFIsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xh c3MgUDYsdHlwZW5hbWUgTWFyc2g9TWFyc2hhbDxSPiA+CiAgY2xhc3MgU2lnbmFsNjpwdWJsaWMg U2lnbmFsXwogIHsKICAgcHVibGljOgogICAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxQ NSxQNj4gICAgICAgICAgICAgICAgICAgICAgIEluU2xvdFR5cGU7CiAgICAgdHlwZWRlZiBTbG90 Njx0eXBlbmFtZSBNYXJzaDo6T3V0VHlwZSxQMSxQMixQMyxQNCxQNSxQNj4gT3V0U2xvdFR5cGU7 CgogICBwcml2YXRlOgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcnNoOjpPdXRUeXBlIFNUeXBl OwogICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RU eXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgICB0eXBlZGVmIFNpZ25hbDY8UixQMSxQMixQMyxQ NCxQNSxQNixNYXJzaD4gU2VsZjsKICAgICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBP dXRTbG90VHlwZTo6RnVuYyxTZWxmPiBDYWxsRGF0YTsKCiAgICAgc3RhdGljIFNUeXBlIGNhbGxi YWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYpCiAgICAgICB7 CiAgICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICAgIHJldHVybiBkYXRh LT5vYmotPmVtaXQocDEscDIscDMscDQscDUscDYpOwogICAgICAgfQoKICAgcHVibGljOgogICAg IE91dFNsb3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29u bmVjdCgpOwogICAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm Pih0bXAtPmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPSh0eXBlbmFtZSBPdXRTbG90VHlw ZTo6RnVuYyljYWxsYmFjazsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0 bXA7CiAgICAgICB9CgogICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZz KQogICAgICAgewogICAgICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9 CgogICAgIFNUeXBlIGVtaXQodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJh aXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8 UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJhaXQ8UDY+ OjpyZWYgcDYpOwogICAgIFNUeXBlIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYg cDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMs dHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlw ZW5hbWUgVHJhaXQ8UDY+OjpyZWYgcDYpCiAgICAgICB7cmV0dXJuIGVtaXQocDEscDIscDMscDQs cDUscDYpO30KCiAgICAgU2lnbmFsNigpIHt9CiAgICAgU2lnbmFsNihjb25zdCBJblNsb3RUeXBl ICZzKSB7Y29ubmVjdChzKTt9CiAgICAgflNpZ25hbDYoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8 Y2xhc3MgUixjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFz cyBQNixjbGFzcyBNYXJzaD4KdHlwZW5hbWUgIFNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixN YXJzaD46OlNUeXBlIFNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixNYXJzaD46OgogIGVtaXQo dHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5hbWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlw ZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUgVHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5h bWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJhaXQ8UDY+OjpyZWYgcDYpCiAgewogICBp ZiAoIWltcGx8fGltcGwtPm91dGdvaW5nXy5lbXB0eSgpKSByZXR1cm4gTWFyc2g6OmRlZmF1bHRf dmFsdWUoKTsKICAgTGlzdCAmb3V0PWltcGwtPm91dGdvaW5nXzsgCiAgIE1hcnNoIHJjOwogICBT bG90RGF0YSAqZGF0YTsKICAgTGlzdDo6SXRlcmF0b3IgaT1vdXQuYmVnaW4oKTsKICAgd2hpbGUg KGkhPW91dC5lbmQoKSkKICAgICB7CiAgICAgIGRhdGE9KChTbG90RGVwZW5kZW50KikoaS5ub2Rl KCkpKS0+cGFyZW50KCk7CiAgICAgICsraTsKICAgICAgQ2FsbGJhY2smIHM9KENhbGxiYWNrJiko ZGF0YS0+Y2FsbGJhY2soKSk7CiAgICAgIGlmIChyYy5tYXJzaGFsKHMuY2FsbChwMSxwMixwMyxw NCxwNSxwNikpKSByZXR1cm4gcmMudmFsdWUoKTsKICAgICB9IAogICByZXR1cm4gcmMudmFsdWUo KTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNs YXNzIFA1LGNsYXNzIFA2LGNsYXNzIE1hcnNoPgpjbGFzcyBTaWduYWw2PHZvaWQsUDEsUDIsUDMs UDQsUDUsUDYsTWFyc2g+CiAgOnB1YmxpYyBTaWduYWxfCiAgewogICBwdWJsaWM6CiAgICAgdHlw ZWRlZiBTbG90Njx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2PiBJblNsb3RUeXBlOwogICAgIHR5cGVk ZWYgU2xvdDY8dm9pZCxQMSxQMixQMyxQNCxQNSxQNj4gT3V0U2xvdFR5cGU7CiAgIHByaXZhdGU6 CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAg ICB0eXBlZGVmIFNpZ25hbDY8dm9pZCxQMSxQMixQMyxQNCxQNSxQNixNYXJzaD4gU2VsZjsKICAg ICB0eXBlZGVmIENhbGxEYXRhT2JqMjx0eXBlbmFtZSBPdXRTbG90VHlwZTo6RnVuYyxTZWxmPiBD YWxsRGF0YTsKCiAgICAgc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQ MyBwMyxQNCBwNCxQNSBwNSxQNiBwNikKICAgICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0o Q2FsbERhdGEqKWQ7CiAgICAgICAgZGF0YS0+b2JqLT5lbWl0KHAxLHAyLHAzLHA0LHA1LHA2KTsK ICAgICAgIH0KCiAgIHB1YmxpYzoKICAgICBPdXRTbG90VHlwZSBzbG90KCkKICAgICAgIHsKICAg ICAgICBTbG90RGF0YSogdG1wPWluX2Nvbm5lY3QoKTsKICAgICAgICBDYWxsRGF0YSYgZGF0YT1y ZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgZGF0YS5jYWxs YmFjaz1jYWxsYmFjazsKICAgICAgICBkYXRhLm9iaj10aGlzOwogICAgICAgIHJldHVybiB0bXA7 CiAgICAgICB9CgogICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBJblNsb3RUeXBlICZzKQog ICAgICAgewogICAgICAgIHJldHVybiBvdXRfY29ubmVjdChzLmRhdGEoKSk7CiAgICAgICB9Cgog ICAgIHZvaWQgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQ Mj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46 OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJl ZiBwNik7CiAgICAgdm9pZCBvcGVyYXRvcigpKHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAxLHR5 cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5cGVu YW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVuYW1l IFRyYWl0PFA2Pjo6cmVmIHA2KQogICAgICAge2VtaXQocDEscDIscDMscDQscDUscDYpO30KCiAg ICAgU2lnbmFsNigpIHt9CiAgICAgU2lnbmFsNihjb25zdCBJblNsb3RUeXBlICZzKSB7Y29ubmVj dChzKTt9CiAgICAgflNpZ25hbDYoKSB7fQogIH07CgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xh c3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgUDYsY2xhc3MgTWFyc2g+CnZv aWQgU2lnbmFsNjx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFt ZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBU cmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFp dDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBwNikKICB7CiAgIGlmICghaW1w bHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybjsKICAgTGlzdCAmb3V0PWltcGwtPm91 dGdvaW5nXzsgCiAgIFNsb3REYXRhICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdp bigpOwogICB3aGlsZSAoaSE9b3V0LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBl bmRlbnQqKShpLm5vZGUoKSkpLT5wYXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYg cz0oQ2FsbGJhY2smKShkYXRhLT5jYWxsYmFjaygpKTsKICAgICAgcy5jYWxsKHAxLHAyLHAzLHA0 LHA1LHA2KTsKICAgICB9CiAgfQoKCgoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBQMSxj bGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNyx0eXBl bmFtZSBNYXJzaD1NYXJzaGFsPFI+ID4KICBjbGFzcyBTaWduYWw3OnB1YmxpYyBTaWduYWxfCiAg ewogICBwdWJsaWM6CiAgICAgdHlwZWRlZiBTbG90NzxSLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiAg ICAgICAgICAgICAgICAgICAgICAgSW5TbG90VHlwZTsKICAgICB0eXBlZGVmIFNsb3Q3PHR5cGVu YW1lIE1hcnNoOjpPdXRUeXBlLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBPdXRTbG90VHlwZTsKCiAg IHByaXZhdGU6CgogICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFyc2g6Ok91dFR5cGUgU1R5cGU7CiAg ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6 OkNhbGxiYWNrIENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNzxSLFAxLFAyLFAzLFA0LFA1 LFA2LFA3LE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91 dFNsb3RUeXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgU1R5cGUgY2FsbGJh Y2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSxQNiBwNixQNyBwNykKICAg ICAgIHsKICAgICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgICAgcmV0dXJu IGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxwNSxwNixwNyk7CiAgICAgICB9CgogICBwdWJs aWM6CiAgICAgT3V0U2xvdFR5cGUgc2xvdCgpCiAgICAgICB7CiAgICAgICAgU2xvdERhdGEqIHRt cD1pbl9jb25uZWN0KCk7CiAgICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxD YWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICAgIGRhdGEuY2FsbGJhY2s9KHR5cGVuYW1lIE91 dFNsb3RUeXBlOjpGdW5jKWNhbGxiYWNrOwogICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAg cmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IEluU2xv dFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25uZWN0KHMuZGF0YSgpKTsK ICAgICAgIH0KCiAgICAgU1R5cGUgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBl bmFtZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFt ZSBUcmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBU cmFpdDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNyk7CiAgICAgU1R5cGUg b3BlcmF0b3IoKSh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFtZSBUcmFpdDxQMj46 OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBUcmFpdDxQND46OnJl ZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFpdDxQNj46OnJlZiBw Nix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNykKICAgICAgIHtyZXR1cm4gZW1pdChwMSxwMixw MyxwNCxwNSxwNixwNyk7fQoKICAgICBTaWduYWw3KCkge30KICAgICBTaWduYWw3KGNvbnN0IElu U2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNygpIHt9CiAgfTsKCgogCnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNz IFA1LGNsYXNzIFA2LGNsYXNzIFA3LGNsYXNzIE1hcnNoPgp0eXBlbmFtZSAgU2lnbmFsNzxSLFAx LFAyLFAzLFA0LFA1LFA2LFA3LE1hcnNoPjo6U1R5cGUgU2lnbmFsNzxSLFAxLFAyLFAzLFA0LFA1 LFA2LFA3LE1hcnNoPjo6CiAgZW1pdCh0eXBlbmFtZSBUcmFpdDxQMT46OnJlZiBwMSx0eXBlbmFt ZSBUcmFpdDxQMj46OnJlZiBwMix0eXBlbmFtZSBUcmFpdDxQMz46OnJlZiBwMyx0eXBlbmFtZSBU cmFpdDxQND46OnJlZiBwNCx0eXBlbmFtZSBUcmFpdDxQNT46OnJlZiBwNSx0eXBlbmFtZSBUcmFp dDxQNj46OnJlZiBwNix0eXBlbmFtZSBUcmFpdDxQNz46OnJlZiBwNykKICB7CiAgIGlmICghaW1w bHx8aW1wbC0+b3V0Z29pbmdfLmVtcHR5KCkpIHJldHVybiBNYXJzaDo6ZGVmYXVsdF92YWx1ZSgp OwogICBMaXN0ICZvdXQ9aW1wbC0+b3V0Z29pbmdfOyAKICAgTWFyc2ggcmM7CiAgIFNsb3REYXRh ICpkYXRhOwogICBMaXN0OjpJdGVyYXRvciBpPW91dC5iZWdpbigpOwogICB3aGlsZSAoaSE9b3V0 LmVuZCgpKQogICAgIHsKICAgICAgZGF0YT0oKFNsb3REZXBlbmRlbnQqKShpLm5vZGUoKSkpLT5w YXJlbnQoKTsKICAgICAgKytpOwogICAgICBDYWxsYmFjayYgcz0oQ2FsbGJhY2smKShkYXRhLT5j YWxsYmFjaygpKTsKICAgICAgaWYgKHJjLm1hcnNoYWwocy5jYWxsKHAxLHAyLHAzLHA0LHA1LHA2 LHA3KSkpIHJldHVybiByYy52YWx1ZSgpOwogICAgIH0gCiAgIHJldHVybiByYy52YWx1ZSgpOwog IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3Mg UDUsY2xhc3MgUDYsY2xhc3MgUDcsY2xhc3MgTWFyc2g+CmNsYXNzIFNpZ25hbDc8dm9pZCxQMSxQ MixQMyxQNCxQNSxQNixQNyxNYXJzaD4KICA6cHVibGljIFNpZ25hbF8KICB7CiAgIHB1YmxpYzoK ICAgICB0eXBlZGVmIFNsb3Q3PHZvaWQsUDEsUDIsUDMsUDQsUDUsUDYsUDc+IEluU2xvdFR5cGU7 CiAgICAgdHlwZWRlZiBTbG90Nzx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LFA3PiBPdXRTbG90VHlw ZTsKICAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr IENhbGxiYWNrOwogICAgIHR5cGVkZWYgU2lnbmFsNzx2b2lkLFAxLFAyLFAzLFA0LFA1LFA2LFA3 LE1hcnNoPiBTZWxmOwogICAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIE91dFNsb3RU eXBlOjpGdW5jLFNlbGY+IENhbGxEYXRhOwoKICAgICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lk KiBkLFAxIHAxLFAyIHAyLFAzIHAzLFA0IHA0LFA1IHA1LFA2IHA2LFA3IHA3KQogICAgICAgewog ICAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgICBkYXRhLT5vYmotPmVt aXQocDEscDIscDMscDQscDUscDYscDcpOwogICAgICAgfQoKICAgcHVibGljOgogICAgIE91dFNs b3RUeXBlIHNsb3QoKQogICAgICAgewogICAgICAgIFNsb3REYXRhKiB0bXA9aW5fY29ubmVjdCgp OwogICAgICAgIENhbGxEYXRhJiBkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAt PmRhdGFfKTsKICAgICAgICBkYXRhLmNhbGxiYWNrPWNhbGxiYWNrOwogICAgICAgIGRhdGEub2Jq PXRoaXM7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgIH0KCiAgICAgQ29ubmVjdGlvbiBjb25u ZWN0KGNvbnN0IEluU2xvdFR5cGUgJnMpCiAgICAgICB7CiAgICAgICAgcmV0dXJuIG91dF9jb25u ZWN0KHMuZGF0YSgpKTsKICAgICAgIH0KCiAgICAgdm9pZCBlbWl0KHR5cGVuYW1lIFRyYWl0PFAx Pjo6cmVmIHAxLHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6 cmVmIHAzLHR5cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVm IHA1LHR5cGVuYW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3 KTsKICAgICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgVHJhaXQ8UDE+OjpyZWYgcDEsdHlwZW5h bWUgVHJhaXQ8UDI+OjpyZWYgcDIsdHlwZW5hbWUgVHJhaXQ8UDM+OjpyZWYgcDMsdHlwZW5hbWUg VHJhaXQ8UDQ+OjpyZWYgcDQsdHlwZW5hbWUgVHJhaXQ8UDU+OjpyZWYgcDUsdHlwZW5hbWUgVHJh aXQ8UDY+OjpyZWYgcDYsdHlwZW5hbWUgVHJhaXQ8UDc+OjpyZWYgcDcpCiAgICAgICB7ZW1pdChw MSxwMixwMyxwNCxwNSxwNixwNyk7fQoKICAgICBTaWduYWw3KCkge30KICAgICBTaWduYWw3KGNv bnN0IEluU2xvdFR5cGUgJnMpIHtjb25uZWN0KHMpO30KICAgICB+U2lnbmFsNygpIHt9CiAgfTsK CgogCnRlbXBsYXRlIDxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ NSxjbGFzcyBQNixjbGFzcyBQNyxjbGFzcyBNYXJzaD4Kdm9pZCBTaWduYWw3PHZvaWQsUDEsUDIs UDMsUDQsUDUsUDYsUDcsTWFyc2g+OjoKICBlbWl0KHR5cGVuYW1lIFRyYWl0PFAxPjo6cmVmIHAx LHR5cGVuYW1lIFRyYWl0PFAyPjo6cmVmIHAyLHR5cGVuYW1lIFRyYWl0PFAzPjo6cmVmIHAzLHR5 cGVuYW1lIFRyYWl0PFA0Pjo6cmVmIHA0LHR5cGVuYW1lIFRyYWl0PFA1Pjo6cmVmIHA1LHR5cGVu YW1lIFRyYWl0PFA2Pjo6cmVmIHA2LHR5cGVuYW1lIFRyYWl0PFA3Pjo6cmVmIHA3KQogIHsKICAg aWYgKCFpbXBsfHxpbXBsLT5vdXRnb2luZ18uZW1wdHkoKSkgcmV0dXJuOwogICBMaXN0ICZvdXQ9 aW1wbC0+b3V0Z29pbmdfOyAKICAgU2xvdERhdGEgKmRhdGE7CiAgIExpc3Q6Okl0ZXJhdG9yIGk9 b3V0LmJlZ2luKCk7CiAgIHdoaWxlIChpIT1vdXQuZW5kKCkpCiAgICAgewogICAgICBkYXRhPSgo U2xvdERlcGVuZGVudCopKGkubm9kZSgpKSktPnBhcmVudCgpOwogICAgICArK2k7CiAgICAgIENh bGxiYWNrJiBzPShDYWxsYmFjayYpKGRhdGEtPmNhbGxiYWNrKCkpOwogICAgICBzLmNhbGwocDEs cDIscDMscDQscDUscDYscDcpOwogICAgIH0KICB9CgoKCgoKCn0gIAoKCgoKCgoKCgojIDMxICIv b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9zaWduYWxfc3lzdGVtLmgiIDIKCgoKCiAKCiMgNiAiL29w dC9ndGsvaW5jbHVkZS9ndGstLS9wcm94eS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2ln YysrL2JpbmQuaCIgMQogCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2FkYXB0b3IuaCIgMQogCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKbmFtZXNwYWNlIFNpZ0MKewoKCnN0cnVjdCAgIEFkYXB0b3JOb2RlIDog cHVibGljIFNsb3ROb2RlCiAgewogICBDYWxsYmFja18gZGF0YV87CiAgfTsKCnN0cnVjdCAgIEFk YXB0b3JTbG90XwogIHsKICAgc3RhdGljIHZvaWQgY29weV9jYWxsYmFjayhTbG90RGF0YSogc2Rh dGEsQWRhcHRvck5vZGUqIG5vZGUpOwogIH07CgoKfSAgCgoKCgojIDQ2ICIvb3B0L2d0ay9pbmNs dWRlL3NpZ2MrKy9iaW5kLmgiIDIKCgoKCm5hbWVzcGFjZSBTaWdDCnsKCgoKCgoKCgoKCgoKCiAK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgQzE+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Qw XzE6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5 cGVkZWYgU2xvdDA8Uj4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDE8UixDMT4gSW5TbG90VHlw ZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsKICAgICAgQzEgYzFf OwoKICAgICAgTm9kZShDMSBjMSkKCTogYzFfKGMxKQogCXsgfQogICAgIH07CgogICB0eXBlZGVm IENhbGxEYXRhT2JqMjx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxOb2RlPiBDYWxsRGF0YTsKCiAg IHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkKQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRh dGE9KENhbGxEYXRhKilkOwogICAgICBOb2RlKiBub2RlPWRhdGEtPm9iajsKICAgICAgcmV0dXJu ICgodHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2smKShub2RlLT5kYXRhXykpKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+YzFfKTsKICAgICB9CiAgIHN0YXRp YyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEMxIGMxKQogICAgIHsKICAgICAgTm9kZSAq bm9kZT1uZXcgTm9kZShjMSk7CiAgICAgIGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2Fs bERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAg ZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVy biBzOwogICAgIH0KICB9OwoKCiMgMTUyICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgi CgoKdGVtcGxhdGUgPGNsYXNzIEExLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIEMxPgppbmxpbmUK U2xvdDA8Uj4KICBiaW5kKGNvbnN0IFNsb3QxPFIsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3Jl dHVybiBBZGFwdG9yQmluZFNsb3QwXzE8UiwKICAgICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEo KSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEsCiAgIGNsYXNz IEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MV8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoK ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QxPFIsUDE+IFNsb3RUeXBlOwog ICB0eXBlZGVmIFNsb3QyPFIsUDEsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJs aWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6 IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUg U2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so dm9pZCogZCxQMSBwMSkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsK ICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xv dFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNy ZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUo YzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJl aW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9 JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAg fTsKCgojIDI1NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxj bGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSwKICAgIGNsYXNzIEMxPgppbmxpbmUK U2xvdDE8UixQMT4KICBiaW5kKGNvbnN0IFNsb3QyPFIsUDEsQzE+ICZzLAogICAgICAgQTEgYTEp CiAge3JldHVybiBBZGFwdG9yQmluZFNsb3QxXzE8UiwKICAgICAgICAgICBQMSwKICAgICAgICAg ICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwK ICAgY2xhc3MgUDEsY2xhc3MgUDIsCiAgIGNsYXNzIEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90 Ml8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0 eXBlZGVmIFNsb3QyPFIsUDEsUDI+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QzPFIsUDEsUDIs QzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7 CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9 OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4g Q2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMikK ICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9k ZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr Jikobm9kZS0+ZGF0YV8pKShwMSxwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0 YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBj b3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nh c3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwog ICAgICBkYXRhLm9iaj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDM1OCAi L29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAg IGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFzcyBQMiwKICAgIGNsYXNzIEMxPgppbmxpbmUKU2xv dDI8UixQMSxQMj4KICBiaW5kKGNvbnN0IFNsb3QzPFIsUDEsUDIsQzE+ICZzLAogICAgICAgQTEg YTEpCiAge3JldHVybiBBZGFwdG9yQmluZFNsb3QyXzE8UiwKICAgICAgICAgICBQMSxQMiwKICAg ICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xh c3MgUiwKICAgY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsCiAgIGNsYXNzIEMxPgpzdHJ1Y3Qg QWRhcHRvckJpbmRTbG90M18xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBS IFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QzPFIsUDEsUDIsUDM+IFNsb3RUeXBlOwogICB0eXBl ZGVmIFNsb3Q0PFIsUDEsUDIsUDMsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJs aWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6 IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUg U2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so dm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShD YWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5 cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBz dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5v ZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAg IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAg ICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICBy ZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDQ2MiAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmlu ZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFz cyBQMixjbGFzcyBQMywKICAgIGNsYXNzIEMxPgppbmxpbmUKU2xvdDM8UixQMSxQMixQMz4KICBi aW5kKGNvbnN0IFNsb3Q0PFIsUDEsUDIsUDMsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVy biBBZGFwdG9yQmluZFNsb3QzXzE8UiwKICAgICAgICAgICBQMSxQMixQMywKICAgICAgICAgICBD MT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAg Y2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsCiAgIGNsYXNzIEMxPgpzdHJ1Y3Qg QWRhcHRvckJpbmRTbG90NF8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBS IFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RUeXBlOwogICB0 eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9k ZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEg YzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIENhbGxE YXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAg IHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShw MSxwMixwMyxwNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMx Xyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkK ICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNr KHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm PihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9i aj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDU2NiAiL29wdC9ndGsvaW5j bHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAg ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgIGNsYXNzIEMxPgppbmxp bmUKU2xvdDQ8UixQMSxQMixQMyxQND4KICBiaW5kKGNvbnN0IFNsb3Q1PFIsUDEsUDIsUDMsUDQs QzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmluZFNsb3Q0XzE8UiwKICAg ICAgICAgICBQMSxQMixQMyxQNCwKICAgICAgICAgICBDMT46OmNyZWF0ZShzLmRhdGEoKSxhMSk7 CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3Mg UDMsY2xhc3MgUDQsY2xhc3MgUDUsCiAgIGNsYXNzIEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90 NV8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0 eXBlZGVmIFNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q2 PFIsUDEsUDIsUDMsUDQsUDUsQzE+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMg QWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMx XyhjMSkKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xv dFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9p ZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkKICAgICB7CiAgICAgIENhbGxEYXRh KiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJl dHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxw MixwMyxwNCxwNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMx Xyk7CiAgICAgfQogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkK ICAgICB7CiAgICAgIE5vZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNr KHMsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm PihzLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9i aj1ub2RlOwogICAgICByZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDY3MCAiL29wdC9ndGsvaW5j bHVkZS9zaWdjKysvYmluZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAg ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSwKICAgIGNsYXNz IEMxPgppbmxpbmUKU2xvdDU8UixQMSxQMixQMyxQNCxQNT4KICBiaW5kKGNvbnN0IFNsb3Q2PFIs UDEsUDIsUDMsUDQsUDUsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmlu ZFNsb3Q1XzE8UiwKICAgICAgICAgICBQMSxQMixQMyxQNCxQNSwKICAgICAgICAgICBDMT46OmNy ZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3Mg UDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsY2xhc3MgUDYsCiAgIGNsYXNz IEMxPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90Nl8xOiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoK ICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Q2PFIsUDEsUDIsUDMsUDQsUDUs UDY+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q3PFIsUDEsUDIsUDMsUDQsUDUsUDYsQzE+IElu U2xvdFR5cGU7CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAg IEMxIGMxXzsKCiAgICAgIE5vZGUoQzEgYzEpCgk6IGMxXyhjMSkKIAl7IH0KICAgICB9OwoKICAg dHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERh dGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ NCBwNCxQNSBwNSxQNiBwNikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSop ZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIElu U2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCxwNSxwNiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyk7CiAgICAgfQogICBz dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxDMSBjMSkKICAgICB7CiAgICAgIE5v ZGUgKm5vZGU9bmV3IE5vZGUoYzEpOwogICAgICBjb3B5X2NhbGxiYWNrKHMsbm9kZSk7CiAgICAg IENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPihzLT5kYXRhXyk7CiAg ICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLm9iaj1ub2RlOwogICAgICBy ZXR1cm4gczsKICAgICB9CiAgfTsKCgojIDc3NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvYmlu ZC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBBMSwKICAgIGNsYXNzIFIsCiAgICBjbGFzcyBQMSxjbGFz cyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNiwKICAgIGNsYXNzIEMxPgpp bmxpbmUKU2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4KICBiaW5kKGNvbnN0IFNsb3Q3PFIsUDEs UDIsUDMsUDQsUDUsUDYsQzE+ICZzLAogICAgICAgQTEgYTEpCiAge3JldHVybiBBZGFwdG9yQmlu ZFNsb3Q2XzE8UiwKICAgICAgICAgICBQMSxQMixQMyxQNCxQNSxQNiwKICAgICAgICAgICBDMT46 OmNyZWF0ZShzLmRhdGEoKSxhMSk7CiAgfQoKCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIsCiAgIGNs YXNzIEMxLGNsYXNzIEMyPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MF8yOiBwdWJsaWMgQWRhcHRv clNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QwPFI+IFNs b3RUeXBlOwogICB0eXBlZGVmIFNsb3QyPFIsQzEsQzI+IEluU2xvdFR5cGU7CgogICBzdHJ1Y3Qg Tm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsKICAgICAgQzIgYzJf OwoKICAgICAgTm9kZShDMSBjMSxDMiBjMikKCTogYzFfKGMxKSxjMl8oYzIpCiAJeyB9CiAgICAg fTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLE5vZGU+ IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQpCiAgICAgewogICAg ICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIE5vZGUqIG5vZGU9ZGF0YS0+b2Jq OwogICAgICByZXR1cm4gKCh0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayYpKG5vZGUtPmRh dGFfKSkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jMV8sbm9k ZS0+YzJfKTsKICAgICB9CiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEMx IGMxLEMyIGMyKQogICAgIHsKICAgICAgTm9kZSAqbm9kZT1uZXcgTm9kZShjMSxjMik7CiAgICAg IGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRf Y2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7 CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVybiBzOwogICAgIH0KICB9OwoKCiMgODgw ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNs YXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIEMxLGNsYXNzIEMyPgppbmxpbmUKU2xvdDA8 Uj4KICBiaW5kKGNvbnN0IFNsb3QyPFIsQzEsQzI+ICZzLAogICAgICAgQTEgYTEsQTIgYTIpCiAg e3JldHVybiBBZGFwdG9yQmluZFNsb3QwXzI8UiwKICAgICAgICAgICBDMSxDMj46OmNyZWF0ZShz LmRhdGEoKSxhMSxhMik7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwKICAgY2xhc3MgUDEs CiAgIGNsYXNzIEMxLGNsYXNzIEMyPgpzdHJ1Y3QgQWRhcHRvckJpbmRTbG90MV8yOiBwdWJsaWMg QWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3Qx PFIsUDE+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QzPFIsUDEsQzEsQzI+IEluU2xvdFR5cGU7 CgogICBzdHJ1Y3QgTm9kZTpwdWJsaWMgQWRhcHRvck5vZGUKICAgICB7CiAgICAgIEMxIGMxXzsK ICAgICAgQzIgYzJfOwoKICAgICAgTm9kZShDMSBjMSxDMiBjMikKCTogYzFfKGMxKSxjMl8oYzIp CiAJeyB9CiAgICAgfTsKCiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBl OjpGdW5jLE5vZGU+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQs UDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIE5v ZGUqIG5vZGU9ZGF0YS0+b2JqOwogICAgICByZXR1cm4gKCh0eXBlbmFtZSBJblNsb3RUeXBlOjpD YWxsYmFjayYpKG5vZGUtPmRhdGFfKSkocDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBub2RlLT5jMV8sbm9kZS0+YzJfKTsKICAgICB9CiAgIHN0YXRpYyBTbG90RGF0YSog Y3JlYXRlKFNsb3REYXRhICpzLEMxIGMxLEMyIGMyKQogICAgIHsKICAgICAgTm9kZSAqbm9kZT1u ZXcgTm9kZShjMSxjMik7CiAgICAgIGNvcHlfY2FsbGJhY2socyxub2RlKTsKICAgICAgQ2FsbERh dGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHMtPmRhdGFfKTsKICAgICAgZGF0 YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEub2JqPW5vZGU7CiAgICAgIHJldHVybiBz OwogICAgIH0KICB9OwoKCiMgOTg0ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoK dGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLAog ICAgY2xhc3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90MTxSLFAxPgogIGJpbmQoY29uc3QgU2xv dDM8UixQMSxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFkYXB0b3JC aW5kU2xvdDFfMjxSLAogICAgICAgICAgIFAxLAogICAgICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMu ZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAogICBjbGFzcyBQMSxj bGFzcyBQMiwKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3QyXzI6 IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVk ZWYgU2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDQ8UixQMSxQMixDMSxD Mj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsK ICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBj MV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShD YWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5 cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwogICAg IH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIpCiAg ICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxsYmFj ayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRh Jj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5v Ymo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMDkwICIvb3B0L2d0ay9p bmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAg Y2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLAogICAgY2xhc3MgQzEsY2xhc3MgQzI+Cmlu bGluZQpTbG90MjxSLFAxLFAyPgogIGJpbmQoY29uc3QgU2xvdDQ8UixQMSxQMixDMSxDMj4gJnMs CiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFkYXB0b3JCaW5kU2xvdDJfMjxSLAogICAg ICAgICAgIFAxLFAyLAogICAgICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsK ICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAogICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQ MywKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3QzXzI6IHB1Ymxp YyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xv dDM8UixQMSxQMixQMz4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDU8UixQMSxQMixQMyxDMSxD Mj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsK ICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBj MV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlw ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2Fs bGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENhbGxEYXRhKiBk YXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVy biAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixw MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5j Ml8pOwogICAgIH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEs QzIgYzIpCiAgICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29w eV9jYWxsYmFjayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0 PENhbGxEYXRhJj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAg ICAgZGF0YS5vYmo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMTk2ICIv b3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNz IEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgY2xh c3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90MzxSLFAxLFAyLFAzPgogIGJpbmQoY29uc3QgU2xv dDU8UixQMSxQMixQMyxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJuIEFk YXB0b3JCaW5kU2xvdDNfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLAogICAgICAgICAgIEMxLEMy Pjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSLAog ICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgY2xhc3MgQzEsY2xhc3Mg QzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Q0XzI6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7Cgog ICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xvdDQ8UixQMSxQMixQMyxQND4gU2xv dFR5cGU7CiAgIHR5cGVkZWYgU2xvdDY8UixQMSxQMixQMyxQNCxDMSxDMj4gSW5TbG90VHlwZTsK CiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9yTm9kZQogICAgIHsKICAgICAgQzEgYzFfOwog ICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMxLEMyIGMyKQoJOiBjMV8oYzEpLGMyXyhjMikK IAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxsRGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6 OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQ MSBwMSxQMiBwMixQMyBwMyxQNCBwNCkKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxs RGF0YSopZDsKICAgICAgTm9kZSogbm9kZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVu YW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrJikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwog ICAgIH0KICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIp CiAgICAgewogICAgICBOb2RlICpub2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxs YmFjayhzLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxE YXRhJj4ocy0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0 YS5vYmo9bm9kZTsKICAgICAgcmV0dXJuIHM7CiAgICAgfQogIH07CgoKIyAxMzAyICIvb3B0L2d0 ay9pbmNsdWRlL3NpZ2MrKy9iaW5kLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAog ICAgY2xhc3MgUiwKICAgIGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAg Y2xhc3MgQzEsY2xhc3MgQzI+CmlubGluZQpTbG90NDxSLFAxLFAyLFAzLFA0PgogIGJpbmQoY29u c3QgU2xvdDY8UixQMSxQMixQMyxQNCxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7 cmV0dXJuIEFkYXB0b3JCaW5kU2xvdDRfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLFA0LAogICAg ICAgICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKIAoKCnRlbXBsYXRl IDxjbGFzcyBSLAogICBjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQ NSwKICAgY2xhc3MgQzEsY2xhc3MgQzI+CnN0cnVjdCBBZGFwdG9yQmluZFNsb3Q1XzI6IHB1Ymxp YyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xv dDU8UixQMSxQMixQMyxQNCxQNT4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDc8UixQMSxQMixQ MyxQNCxQNSxDMSxDMj4gSW5TbG90VHlwZTsKCiAgIHN0cnVjdCBOb2RlOnB1YmxpYyBBZGFwdG9y Tm9kZQogICAgIHsKICAgICAgQzEgYzFfOwogICAgICBDMiBjMl87CgogICAgICBOb2RlKEMxIGMx LEMyIGMyKQoJOiBjMV8oYzEpLGMyXyhjMikKIAl7IH0KICAgICB9OwoKICAgdHlwZWRlZiBDYWxs RGF0YU9iajI8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsTm9kZT4gQ2FsbERhdGE7CgogICBzdGF0 aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkK ICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgTm9kZSogbm9k ZT1kYXRhLT5vYmo7CiAgICAgIHJldHVybiAoKHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr Jikobm9kZS0+ZGF0YV8pKShwMSxwMixwMyxwNCxwNSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5vZGUtPmMxXyxub2RlLT5jMl8pOwogICAgIH0KICAgc3RhdGljIFNsb3RE YXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsQzEgYzEsQzIgYzIpCiAgICAgewogICAgICBOb2RlICpu b2RlPW5ldyBOb2RlKGMxLGMyKTsKICAgICAgY29weV9jYWxsYmFjayhzLG5vZGUpOwogICAgICBD YWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4ocy0+ZGF0YV8pOwogICAg ICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5vYmo9bm9kZTsKICAgICAgcmV0 dXJuIHM7CiAgICAgfQogIH07CgoKIyAxNDA4ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9iaW5k LmgiCgoKdGVtcGxhdGUgPGNsYXNzIEExLGNsYXNzIEEyLAogICAgY2xhc3MgUiwKICAgIGNsYXNz IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgY2xhc3MgQzEsY2xh c3MgQzI+CmlubGluZQpTbG90NTxSLFAxLFAyLFAzLFA0LFA1PgogIGJpbmQoY29uc3QgU2xvdDc8 UixQMSxQMixQMyxQNCxQNSxDMSxDMj4gJnMsCiAgICAgICBBMSBhMSxBMiBhMikKICB7cmV0dXJu IEFkYXB0b3JCaW5kU2xvdDVfMjxSLAogICAgICAgICAgIFAxLFAyLFAzLFA0LFA1LAogICAgICAg ICAgIEMxLEMyPjo6Y3JlYXRlKHMuZGF0YSgpLGExLGEyKTsKICB9CgoKCgp9ICAKCgoKIyA3ICIv b3B0L2d0ay9pbmNsdWRlL2d0ay0tL3Byb3h5LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9z aWdjKysvY29udmVydC5oIiAxCiAKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKbmFtZXNw YWNlIFNpZ0MKewoKCgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSwKICAgICAgICAg IGNsYXNzIFIyLGNsYXNzIFExPgpzdHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90MV8xOiBwdWJsaWMg QWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRlZiBTbG90 MTxSMSxQMT4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xvdDE8UjIsUTE+IEluU2xvdFR5cGU7CiAg IHR5cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVk ZWYgUlR5cGUgKCpGdW5jKSAgKENhbGxiYWNrKixQMSk7CiAgIHR5cGVkZWYgUjEgICAgKCpJbkZ1 bmMpKENhbGxiYWNrKixQMSk7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmozPHR5cGVuYW1lIFNsb3RU eXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoKICAgc3RhdGljIFJUeXBlIGNhbGxi YWNrKHZvaWQqIGQsUDEgcDEpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq KWQ7CiAgICAgIHJldHVybiAoZGF0YS0+ZnVuYykoZGF0YS0+b2JqLHAxKTsKICAgICB9CgogICBz dGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1bmMgZnVuYykKICAgICB7CiAg ICAgIFNsb3REYXRhKiB0bXA9KFNsb3REYXRhKilzOwogICAgICBBZGFwdG9yTm9kZSAqbm9kZT1u ZXcgQWRhcHRvck5vZGUoKTsKICAgICAgY29weV9jYWxsYmFjayh0bXAsbm9kZSk7CiAgICAgIENh bGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAg ICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwog ICAgICBkYXRhLm9iaj0oQ2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8pOwogICAgICByZXR1cm4gdG1w OwogICAgIH0KICB9OwoKCgojIDExNCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvY29udmVydC5o IgoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSwKICAgICAgICAgIGNsYXNzIFIyLGNsYXNz IFExPgpTbG90MTxSMSxQMT4KICBjb252ZXJ0KGNvbnN0IFNsb3QxPFIyLFExPiAmcywKICAgICAg ICAgIFIxICgqZnVuYykoQ2FsbGJhY2sxPFIyLFExPiosUDEpKQogIHtyZXR1cm4gQWRhcHRvckNv bnZlcnRTbG90MV8xPFIxLFAxLAogICAgICAgICAgIFIyLFExPjo6Y3JlYXRlKHMub2JqKCksZnVu Yyk7CiAgfQoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIsCiAgICAg ICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMj4Kc3RydWN0IEFkYXB0b3JDb252ZXJ0U2xv dDJfMjogcHVibGljIEFkYXB0b3JTbG90XwogIHsKCiAgIHR5cGVkZWYgUjEgUlR5cGU7CgoKCiAg IHR5cGVkZWYgU2xvdDI8UjEsUDEsUDI+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3QyPFIyLFEx LFEyPiBJblNsb3RUeXBlOwogICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNr IENhbGxiYWNrOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykgIChDYWxsYmFjayosUDEsUDIpOwog ICB0eXBlZGVmIFIxICAgICgqSW5GdW5jKShDYWxsYmFjayosUDEsUDIpOwogICB0eXBlZGVmIENh bGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxDYWxsYmFjayxGdW5jPiBDYWxsRGF0 YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAyIHAyKQogICAgIHsK ICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxEYXRhKilkOwogICAgICByZXR1cm4gKGRhdGEtPmZ1 bmMpKGRhdGEtPm9iaixwMSxwMik7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUo U2xvdERhdGEgKnMsSW5GdW5jIGZ1bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPShTbG90 RGF0YSopczsKICAgICAgQWRhcHRvck5vZGUgKm5vZGU9bmV3IEFkYXB0b3JOb2RlKCk7CiAgICAg IGNvcHlfY2FsbGJhY2sodG1wLG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJl dF9jYXN0PENhbGxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxi YWNrOwogICAgICBkYXRhLmZ1bmM9KEZ1bmMpZnVuYzsKICAgICAgZGF0YS5vYmo9KENhbGxiYWNr KikmKG5vZGUtPmRhdGFfKTsKICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgoKIyAyMDQg Ii9vcHQvZ3RrL2luY2x1ZGUvc2lnYysrL2NvbnZlcnQuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEs Y2xhc3MgUDEsY2xhc3MgUDIsCiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMj4K U2xvdDI8UjEsUDEsUDI+CiAgY29udmVydChjb25zdCBTbG90MjxSMixRMSxRMj4gJnMsCiAgICAg ICAgICBSMSAoKmZ1bmMpKENhbGxiYWNrMjxSMixRMSxRMj4qLFAxLFAyKSkKICB7cmV0dXJuIEFk YXB0b3JDb252ZXJ0U2xvdDJfMjxSMSxQMSxQMiwKICAgICAgICAgICBSMixRMSxRMj46OmNyZWF0 ZShzLm9iaigpLGZ1bmMpOwogIH0KCgogCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNs YXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3MgUTIsY2xh c3MgUTM+CnN0cnVjdCBBZGFwdG9yQ29udmVydFNsb3QzXzM6IHB1YmxpYyBBZGFwdG9yU2xvdF8K ICB7CgogICB0eXBlZGVmIFIxIFJUeXBlOwoKCgogICB0eXBlZGVmIFNsb3QzPFIxLFAxLFAyLFAz PiBTbG90VHlwZTsKICAgdHlwZWRlZiBTbG90MzxSMixRMSxRMixRMz4gSW5TbG90VHlwZTsKICAg dHlwZWRlZiB0eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgdHlwZWRl ZiBSVHlwZSAoKkZ1bmMpICAoQ2FsbGJhY2sqLFAxLFAyLFAzKTsKICAgdHlwZWRlZiBSMSAgICAo KkluRnVuYykoQ2FsbGJhY2sqLFAxLFAyLFAzKTsKICAgdHlwZWRlZiBDYWxsRGF0YU9iajM8dHlw ZW5hbWUgU2xvdFR5cGU6OkZ1bmMsQ2FsbGJhY2ssRnVuYz4gQ2FsbERhdGE7CgogICBzdGF0aWMg UlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMykKICAgICB7CiAgICAgIENh bGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAgICAgcmV0dXJuIChkYXRhLT5mdW5jKShkYXRh LT5vYmoscDEscDIscDMpOwogICAgIH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3RE YXRhICpzLEluRnVuYyBmdW5jKQogICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD0oU2xvdERhdGEq KXM7CiAgICAgIEFkYXB0b3JOb2RlICpub2RlPW5ldyBBZGFwdG9yTm9kZSgpOwogICAgICBjb3B5 X2NhbGxiYWNrKHRtcCxub2RlKTsKICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2Fz dDxDYWxsRGF0YSY+KHRtcC0+ZGF0YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsK ICAgICAgZGF0YS5mdW5jPShGdW5jKWZ1bmM7CiAgICAgIGRhdGEub2JqPShDYWxsYmFjayopJihu b2RlLT5kYXRhXyk7CiAgICAgIHJldHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgMjk0ICIvb3B0 L2d0ay9pbmNsdWRlL3NpZ2MrKy9jb252ZXJ0LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNz IFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3Mg UTIsY2xhc3MgUTM+ClNsb3QzPFIxLFAxLFAyLFAzPgogIGNvbnZlcnQoY29uc3QgU2xvdDM8UjIs UTEsUTIsUTM+ICZzLAogICAgICAgICAgUjEgKCpmdW5jKShDYWxsYmFjazM8UjIsUTEsUTIsUTM+ KixQMSxQMixQMykpCiAge3JldHVybiBBZGFwdG9yQ29udmVydFNsb3QzXzM8UjEsUDEsUDIsUDMs CiAgICAgICAgICAgUjIsUTEsUTIsUTM+OjpjcmVhdGUocy5vYmooKSxmdW5jKTsKICB9CgoKIAoK CnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwK ICAgICAgICAgIGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0Pgpz dHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90NF80OiBwdWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAg dHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRlZiBTbG90NDxSMSxQMSxQMixQMyxQND4gU2xv dFR5cGU7CiAgIHR5cGVkZWYgU2xvdDQ8UjIsUTEsUTIsUTMsUTQ+IEluU2xvdFR5cGU7CiAgIHR5 cGVkZWYgdHlwZW5hbWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVkZWYg UlR5cGUgKCpGdW5jKSAgKENhbGxiYWNrKixQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgUjEgICAg KCpJbkZ1bmMpKENhbGxiYWNrKixQMSxQMixQMyxQNCk7CiAgIHR5cGVkZWYgQ2FsbERhdGFPYmoz PHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoKICAgc3Rh dGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAg ewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEqKWQ7CiAgICAgIHJldHVybiAoZGF0YS0+ ZnVuYykoZGF0YS0+b2JqLHAxLHAyLHAzLHA0KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEq IGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0 bXA9KFNsb3REYXRhKilzOwogICAgICBBZGFwdG9yTm9kZSAqbm9kZT1uZXcgQWRhcHRvck5vZGUo KTsKICAgICAgY29weV9jYWxsYmFjayh0bXAsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJl aW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFj az0mY2FsbGJhY2s7CiAgICAgIGRhdGEuZnVuYz0oRnVuYylmdW5jOwogICAgICBkYXRhLm9iaj0o Q2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8pOwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoK CgojIDM4NCAiL29wdC9ndGsvaW5jbHVkZS9zaWdjKysvY29udmVydC5oIgoKCnRlbXBsYXRlIDxj bGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCwKICAgICAgICAgIGNs YXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0PgpTbG90NDxSMSxQMSxQ MixQMyxQND4KICBjb252ZXJ0KGNvbnN0IFNsb3Q0PFIyLFExLFEyLFEzLFE0PiAmcywKICAgICAg ICAgIFIxICgqZnVuYykoQ2FsbGJhY2s0PFIyLFExLFEyLFEzLFE0PiosUDEsUDIsUDMsUDQpKQog IHtyZXR1cm4gQWRhcHRvckNvbnZlcnRTbG90NF80PFIxLFAxLFAyLFAzLFA0LAogICAgICAgICAg IFIyLFExLFEyLFEzLFE0Pjo6Y3JlYXRlKHMub2JqKCksZnVuYyk7CiAgfQoKCiAKCgp0ZW1wbGF0 ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIsY2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUs CiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxjbGFzcyBRMixjbGFzcyBRMyxjbGFzcyBRNCxj bGFzcyBRNT4Kc3RydWN0IEFkYXB0b3JDb252ZXJ0U2xvdDVfNTogcHVibGljIEFkYXB0b3JTbG90 XwogIHsKCiAgIHR5cGVkZWYgUjEgUlR5cGU7CgoKCiAgIHR5cGVkZWYgU2xvdDU8UjEsUDEsUDIs UDMsUDQsUDU+IFNsb3RUeXBlOwogICB0eXBlZGVmIFNsb3Q1PFIyLFExLFEyLFEzLFE0LFE1PiBJ blNsb3RUeXBlOwogICB0eXBlZGVmIHR5cGVuYW1lIEluU2xvdFR5cGU6OkNhbGxiYWNrIENhbGxi YWNrOwogICB0eXBlZGVmIFJUeXBlICgqRnVuYykgIChDYWxsYmFjayosUDEsUDIsUDMsUDQsUDUp OwogICB0eXBlZGVmIFIxICAgICgqSW5GdW5jKShDYWxsYmFjayosUDEsUDIsUDMsUDQsUDUpOwog ICB0eXBlZGVmIENhbGxEYXRhT2JqMzx0eXBlbmFtZSBTbG90VHlwZTo6RnVuYyxDYWxsYmFjayxG dW5jPiBDYWxsRGF0YTsKCiAgIHN0YXRpYyBSVHlwZSBjYWxsYmFjayh2b2lkKiBkLFAxIHAxLFAy IHAyLFAzIHAzLFA0IHA0LFA1IHA1KQogICAgIHsKICAgICAgQ2FsbERhdGEqIGRhdGE9KENhbGxE YXRhKilkOwogICAgICByZXR1cm4gKGRhdGEtPmZ1bmMpKGRhdGEtPm9iaixwMSxwMixwMyxwNCxw NSk7CiAgICAgfQoKICAgc3RhdGljIFNsb3REYXRhKiBjcmVhdGUoU2xvdERhdGEgKnMsSW5GdW5j IGZ1bmMpCiAgICAgewogICAgICBTbG90RGF0YSogdG1wPShTbG90RGF0YSopczsKICAgICAgQWRh cHRvck5vZGUgKm5vZGU9bmV3IEFkYXB0b3JOb2RlKCk7CiAgICAgIGNvcHlfY2FsbGJhY2sodG1w LG5vZGUpOwogICAgICBDYWxsRGF0YSAmZGF0YT1yZWludGVycHJldF9jYXN0PENhbGxEYXRhJj4o dG1wLT5kYXRhXyk7CiAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICBkYXRhLmZ1 bmM9KEZ1bmMpZnVuYzsKICAgICAgZGF0YS5vYmo9KENhbGxiYWNrKikmKG5vZGUtPmRhdGFfKTsK ICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgfTsKCgoKIyA0NzQgIi9vcHQvZ3RrL2luY2x1ZGUv c2lnYysrL2NvbnZlcnQuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgUjEsY2xhc3MgUDEsY2xhc3MgUDIs Y2xhc3MgUDMsY2xhc3MgUDQsY2xhc3MgUDUsCiAgICAgICAgICBjbGFzcyBSMixjbGFzcyBRMSxj bGFzcyBRMixjbGFzcyBRMyxjbGFzcyBRNCxjbGFzcyBRNT4KU2xvdDU8UjEsUDEsUDIsUDMsUDQs UDU+CiAgY29udmVydChjb25zdCBTbG90NTxSMixRMSxRMixRMyxRNCxRNT4gJnMsCiAgICAgICAg ICBSMSAoKmZ1bmMpKENhbGxiYWNrNTxSMixRMSxRMixRMyxRNCxRNT4qLFAxLFAyLFAzLFA0LFA1 KSkKICB7cmV0dXJuIEFkYXB0b3JDb252ZXJ0U2xvdDVfNTxSMSxQMSxQMixQMyxQNCxQNSwKICAg ICAgICAgICBSMixRMSxRMixRMyxRNCxRNT46OmNyZWF0ZShzLm9iaigpLGZ1bmMpOwogIH0KCgog CgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0 LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEsY2xhc3MgUTIs Y2xhc3MgUTMsY2xhc3MgUTQsY2xhc3MgUTUsY2xhc3MgUTY+CnN0cnVjdCBBZGFwdG9yQ29udmVy dFNsb3Q2XzY6IHB1YmxpYyBBZGFwdG9yU2xvdF8KICB7CgogICB0eXBlZGVmIFIxIFJUeXBlOwoK CgogICB0eXBlZGVmIFNsb3Q2PFIxLFAxLFAyLFAzLFA0LFA1LFA2PiBTbG90VHlwZTsKICAgdHlw ZWRlZiBTbG90NjxSMixRMSxRMixRMyxRNCxRNSxRNj4gSW5TbG90VHlwZTsKICAgdHlwZWRlZiB0 eXBlbmFtZSBJblNsb3RUeXBlOjpDYWxsYmFjayBDYWxsYmFjazsKICAgdHlwZWRlZiBSVHlwZSAo KkZ1bmMpICAoQ2FsbGJhY2sqLFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBSMSAgICAo KkluRnVuYykoQ2FsbGJhY2sqLFAxLFAyLFAzLFA0LFA1LFA2KTsKICAgdHlwZWRlZiBDYWxsRGF0 YU9iajM8dHlwZW5hbWUgU2xvdFR5cGU6OkZ1bmMsQ2FsbGJhY2ssRnVuYz4gQ2FsbERhdGE7Cgog ICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQ NSBwNSxQNiBwNikKICAgICB7CiAgICAgIENhbGxEYXRhKiBkYXRhPShDYWxsRGF0YSopZDsKICAg ICAgcmV0dXJuIChkYXRhLT5mdW5jKShkYXRhLT5vYmoscDEscDIscDMscDQscDUscDYpOwogICAg IH0KCiAgIHN0YXRpYyBTbG90RGF0YSogY3JlYXRlKFNsb3REYXRhICpzLEluRnVuYyBmdW5jKQog ICAgIHsKICAgICAgU2xvdERhdGEqIHRtcD0oU2xvdERhdGEqKXM7CiAgICAgIEFkYXB0b3JOb2Rl ICpub2RlPW5ldyBBZGFwdG9yTm9kZSgpOwogICAgICBjb3B5X2NhbGxiYWNrKHRtcCxub2RlKTsK ICAgICAgQ2FsbERhdGEgJmRhdGE9cmVpbnRlcnByZXRfY2FzdDxDYWxsRGF0YSY+KHRtcC0+ZGF0 YV8pOwogICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFjazsKICAgICAgZGF0YS5mdW5jPShGdW5j KWZ1bmM7CiAgICAgIGRhdGEub2JqPShDYWxsYmFjayopJihub2RlLT5kYXRhXyk7CiAgICAgIHJl dHVybiB0bXA7CiAgICAgfQogIH07CgoKCiMgNTY0ICIvb3B0L2d0ay9pbmNsdWRlL3NpZ2MrKy9j b252ZXJ0LmgiCgoKdGVtcGxhdGUgPGNsYXNzIFIxLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAz LGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgUjIsY2xhc3MgUTEs Y2xhc3MgUTIsY2xhc3MgUTMsY2xhc3MgUTQsY2xhc3MgUTUsY2xhc3MgUTY+ClNsb3Q2PFIxLFAx LFAyLFAzLFA0LFA1LFA2PgogIGNvbnZlcnQoY29uc3QgU2xvdDY8UjIsUTEsUTIsUTMsUTQsUTUs UTY+ICZzLAogICAgICAgICAgUjEgKCpmdW5jKShDYWxsYmFjazY8UjIsUTEsUTIsUTMsUTQsUTUs UTY+KixQMSxQMixQMyxQNCxQNSxQNikpCiAge3JldHVybiBBZGFwdG9yQ29udmVydFNsb3Q2XzY8 UjEsUDEsUDIsUDMsUDQsUDUsUDYsCiAgICAgICAgICAgUjIsUTEsUTIsUTMsUTQsUTUsUTY+Ojpj cmVhdGUocy5vYmooKSxmdW5jKTsKICB9CgoKIAoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQ MSxjbGFzcyBQMixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNywK ICAgICAgICAgIGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0LGNs YXNzIFE1LGNsYXNzIFE2LGNsYXNzIFE3PgpzdHJ1Y3QgQWRhcHRvckNvbnZlcnRTbG90N183OiBw dWJsaWMgQWRhcHRvclNsb3RfCiAgewoKICAgdHlwZWRlZiBSMSBSVHlwZTsKCgoKICAgdHlwZWRl ZiBTbG90NzxSMSxQMSxQMixQMyxQNCxQNSxQNixQNz4gU2xvdFR5cGU7CiAgIHR5cGVkZWYgU2xv dDc8UjIsUTEsUTIsUTMsUTQsUTUsUTYsUTc+IEluU2xvdFR5cGU7CiAgIHR5cGVkZWYgdHlwZW5h bWUgSW5TbG90VHlwZTo6Q2FsbGJhY2sgQ2FsbGJhY2s7CiAgIHR5cGVkZWYgUlR5cGUgKCpGdW5j KSAgKENhbGxiYWNrKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYgUjEgICAgKCpJ bkZ1bmMpKENhbGxiYWNrKixQMSxQMixQMyxQNCxQNSxQNixQNyk7CiAgIHR5cGVkZWYgQ2FsbERh dGFPYmozPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLENhbGxiYWNrLEZ1bmM+IENhbGxEYXRhOwoK ICAgc3RhdGljIFJUeXBlIGNhbGxiYWNrKHZvaWQqIGQsUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQs UDUgcDUsUDYgcDYsUDcgcDcpCiAgICAgewogICAgICBDYWxsRGF0YSogZGF0YT0oQ2FsbERhdGEq KWQ7CiAgICAgIHJldHVybiAoZGF0YS0+ZnVuYykoZGF0YS0+b2JqLHAxLHAyLHAzLHA0LHA1LHA2 LHA3KTsKICAgICB9CgogICBzdGF0aWMgU2xvdERhdGEqIGNyZWF0ZShTbG90RGF0YSAqcyxJbkZ1 bmMgZnVuYykKICAgICB7CiAgICAgIFNsb3REYXRhKiB0bXA9KFNsb3REYXRhKilzOwogICAgICBB ZGFwdG9yTm9kZSAqbm9kZT1uZXcgQWRhcHRvck5vZGUoKTsKICAgICAgY29weV9jYWxsYmFjayh0 bXAsbm9kZSk7CiAgICAgIENhbGxEYXRhICZkYXRhPXJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbERhdGEm Pih0bXAtPmRhdGFfKTsKICAgICAgZGF0YS5jYWxsYmFjaz0mY2FsbGJhY2s7CiAgICAgIGRhdGEu ZnVuYz0oRnVuYylmdW5jOwogICAgICBkYXRhLm9iaj0oQ2FsbGJhY2sqKSYobm9kZS0+ZGF0YV8p OwogICAgICByZXR1cm4gdG1wOwogICAgIH0KICB9OwoKCgojIDY1NCAiL29wdC9ndGsvaW5jbHVk ZS9zaWdjKysvY29udmVydC5oIgoKCnRlbXBsYXRlIDxjbGFzcyBSMSxjbGFzcyBQMSxjbGFzcyBQ MixjbGFzcyBQMyxjbGFzcyBQNCxjbGFzcyBQNSxjbGFzcyBQNixjbGFzcyBQNywKICAgICAgICAg IGNsYXNzIFIyLGNsYXNzIFExLGNsYXNzIFEyLGNsYXNzIFEzLGNsYXNzIFE0LGNsYXNzIFE1LGNs YXNzIFE2LGNsYXNzIFE3PgpTbG90NzxSMSxQMSxQMixQMyxQNCxQNSxQNixQNz4KICBjb252ZXJ0 KGNvbnN0IFNsb3Q3PFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3PiAmcywKICAgICAgICAgIFIxICgq ZnVuYykoQ2FsbGJhY2s3PFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3PiosUDEsUDIsUDMsUDQsUDUs UDYsUDcpKQogIHtyZXR1cm4gQWRhcHRvckNvbnZlcnRTbG90N183PFIxLFAxLFAyLFAzLFA0LFA1 LFA2LFA3LAogICAgICAgICAgIFIyLFExLFEyLFEzLFE0LFE1LFE2LFE3Pjo6Y3JlYXRlKHMub2Jq KCksZnVuYyk7CiAgfQoKCgoKfSAgCgoKCiMgOCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9wcm94 eS5oIiAyCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a29iamVjdC5oIiAx CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0xLjIvZ3RrL2d0a2FyZy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAx ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3R5cGV1dGlscy5oIiAxCiAKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgp0eXBlZGVmIGVu dW0KewogIEdUS19UWVBFX0lOVkFMSUQsCiAgR1RLX1RZUEVfTk9ORSwKICAKICAgCiAgR1RLX1RZ UEVfQ0hBUiwKICBHVEtfVFlQRV9VQ0hBUiwKICBHVEtfVFlQRV9CT09MLAogIEdUS19UWVBFX0lO VCwKICBHVEtfVFlQRV9VSU5ULAogIEdUS19UWVBFX0xPTkcsCiAgR1RLX1RZUEVfVUxPTkcsCiAg R1RLX1RZUEVfRkxPQVQsCiAgR1RLX1RZUEVfRE9VQkxFLAogIEdUS19UWVBFX1NUUklORywKICBH VEtfVFlQRV9FTlVNLAogIEdUS19UWVBFX0ZMQUdTLAogIEdUS19UWVBFX0JPWEVELAogIEdUS19U WVBFX1BPSU5URVIsCiAgCiAgIAogIEdUS19UWVBFX1NJR05BTCwKICBHVEtfVFlQRV9BUkdTLAog IEdUS19UWVBFX0NBTExCQUNLLAogIEdUS19UWVBFX0NfQ0FMTEJBQ0ssCiAgR1RLX1RZUEVfRk9S RUlHTiwKICAKICAgCiAgR1RLX1RZUEVfT0JKRUNUCn0gR3RrRnVuZGFtZW50YWxUeXBlOwoKIAoK CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCnR5cGVk ZWYgZ3VpbnQgR3RrVHlwZTsKCnR5cGVkZWYgc3RydWN0IF9HdGtUeXBlT2JqZWN0CUd0a1R5cGVP YmplY3Q7CnR5cGVkZWYgc3RydWN0IF9HdGtUeXBlQ2xhc3MJR3RrVHlwZUNsYXNzOwoKCgp9CgoK IAoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3R5cGVidWlsdGlucy5oIiAx CiAKCmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FDQ0VMX0ZMQUdTOwpleHRlcm4gR3RrVHlwZSBH VEtfVFlQRV9DQUxFTkRBUl9ESVNQTEFZX09QVElPTlM7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF X0NFTExfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ0xJU1RfRFJBR19QT1M7CmV4dGVy biBHdGtUeXBlIEdUS19UWVBFX0JVVFRPTl9BQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF X0NUUkVFX1BPUzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RSRUVfTElORV9TVFlMRTsKZXh0 ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RSRUVfRVhQQU5ERVJfU1RZTEU7CmV4dGVybiBHdGtUeXBl IEdUS19UWVBFX0NUUkVFX0VYUEFOU0lPTl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9E RUJVR19GTEFHOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9ERVNUX0RFRkFVTFRTOwpleHRlcm4g R3RrVHlwZSBHVEtfVFlQRV9UQVJHRVRfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FS Uk9XX1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FUVEFDSF9PUFRJT05TOwpleHRlcm4g R3RrVHlwZSBHVEtfVFlQRV9CVVRUT05fQk9YX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ RV9DVVJWRV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9ESVJFQ1RJT05fVFlQRTsKZXh0 ZXJuIEd0a1R5cGUgR1RLX1RZUEVfSlVTVElGSUNBVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZ UEVfTUFUQ0hfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfTUVOVV9ESVJFQ1RJT05fVFlQ RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfTUVOVV9GQUNUT1JZX1RZUEU7CmV4dGVybiBHdGtU eXBlIEdUS19UWVBFX01FVFJJQ19UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9PUklFTlRB VElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ09STkVSX1RZUEU7CmV4dGVybiBHdGtUeXBl IEdUS19UWVBFX1BBQ0tfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUEFUSF9QUklPUklU WV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QQVRIX1RZUEU7CmV4dGVybiBHdGtUeXBl IEdUS19UWVBFX1BPTElDWV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QT1NJVElPTl9U WVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9QUkVWSUVXX1RZUEU7CmV4dGVybiBHdGtUeXBl IEdUS19UWVBFX1JFTElFRl9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUkVTSVpFX01P REU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NJR05BTF9SVU5fVFlQRTsKZXh0ZXJuIEd0a1R5 cGUgR1RLX1RZUEVfU0NST0xMX1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NFTEVDVElP Tl9NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9TSEFET1dfVFlQRTsKZXh0ZXJuIEd0a1R5 cGUgR1RLX1RZUEVfU1RBVEVfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1VCTUVOVV9E SVJFQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NVQk1FTlVfUExBQ0VNRU5UOwpleHRl cm4gR3RrVHlwZSBHVEtfVFlQRV9UT09MQkFSX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ RV9UUk9VR0hfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfVVBEQVRFX1RZUEU7CmV4dGVy biBHdGtUeXBlIEdUS19UWVBFX1ZJU0lCSUxJVFk7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1dJ TkRPV19QT1NJVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfV0lORE9XX1RZUEU7CmV4dGVy biBHdGtUeXBlIEdUS19UWVBFX1NPUlRfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfRk9O VF9NRVRSSUNfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfRk9OVF9UWVBFOwpleHRlcm4g R3RrVHlwZSBHVEtfVFlQRV9GT05UX0ZJTFRFUl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ RV9PQkpFQ1RfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0FSR19GTEFHUzsKZXh0ZXJu IEd0a1R5cGUgR1RLX1RZUEVfUEFDS0VSX09QVElPTlM7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBF X1NJREVfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQU5DSE9SX1RZUEU7CmV4dGVybiBH dGtUeXBlIEdUS19UWVBFX1BSSVZBVEVfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1BS T0dSRVNTX0JBUl9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfUFJPR1JFU1NfQkFSX09S SUVOVEFUSU9OOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9SQ19GTEFHUzsKZXh0ZXJuIEd0a1R5 cGUgR1RLX1RZUEVfUkNfVE9LRU5fVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1BJTl9C VVRUT05fVVBEQVRFX1BPTElDWTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfU1BJTl9UWVBFOwpl eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9UT09MQkFSX0NISUxEX1RZUEU7CmV4dGVybiBHdGtUeXBl IEdUS19UWVBFX1RPT0xCQVJfU1BBQ0VfU1RZTEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1RS RUVfVklFV19NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9GVU5EQU1FTlRBTF9UWVBFOwpl eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9XSURHRVRfRkxBR1M7CmV4dGVybiBHdGtUeXBlIEdUS19U WVBFX0dES19XSU5ET1dfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPV19D TEFTUzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0lNQUdFX1RZUEU7CmV4dGVybiBHdGtU eXBlIEdUS19UWVBFX0dES19WSVNVQUxfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RL X0ZPTlRfVFlQRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPV19BVFRSSUJVVEVT X1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19XSU5ET1dfSElOVFM7CmV4dGVybiBH dGtUeXBlIEdUS19UWVBFX0dES19GVU5DVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RL X0ZJTEw7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19GSUxMX1JVTEU7CmV4dGVybiBHdGtU eXBlIEdUS19UWVBFX0dES19MSU5FX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtf Q0FQX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfSk9JTl9TVFlMRTsKZXh0ZXJu IEd0a1R5cGUgR1RLX1RZUEVfR0RLX0NVUlNPUl9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ RV9HREtfRklMVEVSX1JFVFVSTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1ZJU0lCSUxJ VFlfU1RBVEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19FVkVOVF9UWVBFOwpleHRlcm4g R3RrVHlwZSBHVEtfVFlQRV9HREtfRVZFTlRfTUFTSzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVf R0RLX05PVElGWV9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfQ1JPU1NJTkdfTU9E RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX01PRElGSUVSX1RZUEU7CmV4dGVybiBHdGtU eXBlIEdUS19UWVBFX0dES19TVUJXSU5ET1dfTU9ERTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVf R0RLX0lOUFVUX0NPTkRJVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1NUQVRVUzsK ZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0JZVEVfT1JERVI7CmV4dGVybiBHdGtUeXBlIEdU S19UWVBFX0dES19HQ19WQUxVRVNfTUFTSzsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1NF TEVDVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1BST1BFUlRZX1NUQVRFOwpleHRl cm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfUFJPUF9NT0RFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQ RV9HREtfSU5QVVRfU09VUkNFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfSU5QVVRfTU9E RTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0FYSVNfVVNFOwpleHRlcm4gR3RrVHlwZSBH VEtfVFlQRV9HREtfVEFSR0VUOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfU0VMRUNUSU9O X1RZUEU7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19FWFRFTlNJT05fTU9ERTsKZXh0ZXJu IEd0a1R5cGUgR1RLX1RZUEVfR0RLX0lNX1NUWUxFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9H REtfSUNfQVRUUklCVVRFU19UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfV01fREVD T1JBVElPTjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dNX0ZVTkNUSU9OOwpleHRlcm4g R3RrVHlwZSBHVEtfVFlQRV9HREtfQ09MT1JfQ09OVEVYVF9NT0RFOwpleHRlcm4gR3RrVHlwZSBH VEtfVFlQRV9HREtfT1ZFUkxBUF9UWVBFOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfRFJB R19BQ1RJT047CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX0dES19EUkFHX1BST1RPQ09MOwpleHRl cm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfUkdCX0RJVEhFUjsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZ UEVfQUNDRUxfR1JPVVA7CmV4dGVybiBHdGtUeXBlIEdUS19UWVBFX1NFTEVDVElPTl9EQVRBOwpl eHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9TVFlMRTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfQ1RS RUVfTk9ERTsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0NPTE9STUFQOwpleHRlcm4gR3Rr VHlwZSBHVEtfVFlQRV9HREtfVklTVUFMOwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfRk9O VDsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX1dJTkRPVzsKZXh0ZXJuIEd0a1R5cGUgR1RL X1RZUEVfR0RLX0RSQUdfQ09OVEVYVDsKZXh0ZXJuIEd0a1R5cGUgR1RLX1RZUEVfR0RLX0VWRU5U OwpleHRlcm4gR3RrVHlwZSBHVEtfVFlQRV9HREtfQ09MT1I7CgoKIyAxMzUgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrdHlwZXV0aWxzLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCkd0 a1R5cGUJCWd0a19pZGVudGlmaWVyX2dldF90eXBlCQkodm9pZCk7CgogCgoKCgoKdHlwZWRlZiBz dHJ1Y3QgX0d0a0FyZwkgICAgICAgR3RrQXJnOwp0eXBlZGVmIHN0cnVjdCBfR3RrT2JqZWN0ICAg ICAgR3RrT2JqZWN0OyAgICAKdHlwZWRlZiBzdHJ1Y3QgX0d0a1R5cGVJbmZvICAgIEd0a1R5cGVJ bmZvOwp0eXBlZGVmIHN0cnVjdCBfR3RrVHlwZVF1ZXJ5ICAgR3RrVHlwZVF1ZXJ5Owp0eXBlZGVm IHN0cnVjdCBfR3RrRW51bVZhbHVlICAgR3RrRW51bVZhbHVlOwp0eXBlZGVmIHN0cnVjdCBfR3Rr RW51bVZhbHVlICAgR3RrRmxhZ1ZhbHVlOwoKCgoKdHlwZWRlZiB2b2lkICgqR3RrQ2xhc3NJbml0 RnVuYykgICAoZ3BvaW50ZXIgICBrbGFzcyk7CnR5cGVkZWYgdm9pZCAoKkd0a09iamVjdEluaXRG dW5jKSAgKGdwb2ludGVyICAgb2JqZWN0LAoJCQkJICAgIGdwb2ludGVyICAga2xhc3MpOwp0eXBl ZGVmIHZvaWQgKCpHdGtTaWduYWxGdW5jKSAgICAgICgpOwp0eXBlZGVmIGdpbnQgKCpHdGtGdW5j dGlvbikJICAgKGdwb2ludGVyICAgZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkd0a0Rlc3Ryb3lOb3Rp ZnkpICAgKGdwb2ludGVyICAgZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkd0a0NhbGxiYWNrTWFyc2hh bCkgKEd0a09iamVjdCAqb2JqZWN0LAoJCQkJICAgIGdwb2ludGVyICAgZGF0YSwKCQkJCSAgICBn dWludCAgICAgIG5fYXJncywKCQkJCSAgICBHdGtBcmcgICAgKmFyZ3MpOwp0eXBlZGVmIHZvaWQg KCpHdGtTaWduYWxNYXJzaGFsbGVyKSAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCwKCQkJCSAgICAg R3RrU2lnbmFsRnVuYyAgIGZ1bmMsCgkJCQkgICAgIGdwb2ludGVyICAgICAgICBmdW5jX2RhdGEs CgkJCQkgICAgIEd0a0FyZyAgICAgICAgICphcmdzKTsKCiAKdHlwZWRlZiB2b2lkICgqR3RrQXJn R2V0RnVuYykJICAgKEd0a09iamVjdCosIEd0a0FyZyosIGd1aW50KTsKdHlwZWRlZiB2b2lkICgq R3RrQXJnU2V0RnVuYykJICAgKEd0a09iamVjdCosIEd0a0FyZyosIGd1aW50KTsKCgogCgoKCgpz dHJ1Y3QgX0d0a1R5cGVPYmplY3QKewogICAKCgoKICBHdGtUeXBlQ2xhc3MJKmtsYXNzOwp9OwoK CiAKCgoKCnN0cnVjdCBfR3RrVHlwZUNsYXNzCnsKICAgCgoKICBHdGtUeXBlIHR5cGU7Cn07CgoK c3RydWN0IF9HdGtBcmcKewogIEd0a1R5cGUgdHlwZTsKICBnY2hhciAqbmFtZTsKICAKICAgCgoK CgoKICB1bmlvbiB7CiAgICAgCiAgICBnY2hhciBjaGFyX2RhdGE7CiAgICBndWNoYXIgdWNoYXJf ZGF0YTsKICAgIGdib29sZWFuIGJvb2xfZGF0YTsKICAgIGdpbnQgaW50X2RhdGE7CiAgICBndWlu dCB1aW50X2RhdGE7CiAgICBnbG9uZyBsb25nX2RhdGE7CiAgICBndWxvbmcgdWxvbmdfZGF0YTsK ICAgIGdmbG9hdCBmbG9hdF9kYXRhOwogICAgZ2RvdWJsZSBkb3VibGVfZGF0YTsKICAgIGdjaGFy ICpzdHJpbmdfZGF0YTsKICAgIGdwb2ludGVyIHBvaW50ZXJfZGF0YTsKICAgIEd0a09iamVjdCAq b2JqZWN0X2RhdGE7CiAgICAKICAgICAKICAgIHN0cnVjdCB7CiAgICAgIEd0a1NpZ25hbEZ1bmMg ZjsKICAgICAgZ3BvaW50ZXIgZDsKICAgIH0gc2lnbmFsX2RhdGE7CiAgICBzdHJ1Y3QgewogICAg ICBnaW50IG5fYXJnczsKICAgICAgR3RrQXJnICphcmdzOwogICAgfSBhcmdzX2RhdGE7CiAgICBz dHJ1Y3QgewogICAgICBHdGtDYWxsYmFja01hcnNoYWwgbWFyc2hhbDsKICAgICAgZ3BvaW50ZXIg ZGF0YTsKICAgICAgR3RrRGVzdHJveU5vdGlmeSBub3RpZnk7CiAgICB9IGNhbGxiYWNrX2RhdGE7 CiAgICBzdHJ1Y3QgewogICAgICBHdGtGdW5jdGlvbiBmdW5jOwogICAgICBncG9pbnRlciBmdW5j X2RhdGE7CiAgICB9IGNfY2FsbGJhY2tfZGF0YTsKICAgIHN0cnVjdCB7CiAgICAgIGdwb2ludGVy IGRhdGE7CiAgICAgIEd0a0Rlc3Ryb3lOb3RpZnkgbm90aWZ5OwogICAgfSBmb3JlaWduX2RhdGE7 CiAgfSBkOwp9OwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgoK CgoKCgoKCgoKCgpzdHJ1Y3QgX0d0a1R5cGVJbmZvCnsKICBnY2hhcgkJCSp0eXBlX25hbWU7CiAg Z3VpbnQJCQkgb2JqZWN0X3NpemU7CiAgZ3VpbnQJCQkgY2xhc3Nfc2l6ZTsKICBHdGtDbGFzc0lu aXRGdW5jCSBjbGFzc19pbml0X2Z1bmM7CiAgR3RrT2JqZWN0SW5pdEZ1bmMJIG9iamVjdF9pbml0 X2Z1bmM7CiAgZ3BvaW50ZXIJCSByZXNlcnZlZF8xOwogIGdwb2ludGVyCQkgcmVzZXJ2ZWRfMjsK ICBHdGtDbGFzc0luaXRGdW5jCSBiYXNlX2NsYXNzX2luaXRfZnVuYzsKfTsKCnN0cnVjdCBfR3Rr VHlwZVF1ZXJ5CnsKICBHdGtUeXBlCQkgdHlwZTsKICBjb25zdCBnY2hhcgkJKnR5cGVfbmFtZTsK ICBndWludAkJCSBvYmplY3Rfc2l6ZTsKICBndWludAkJCSBjbGFzc19zaXplOwp9OwoKc3RydWN0 IF9HdGtFbnVtVmFsdWUKewogIGd1aW50CSB2YWx1ZTsKICBnY2hhcgkqdmFsdWVfbmFtZTsKICBn Y2hhciAqdmFsdWVfbmljazsKfTsKCgp2b2lkCQlndGtfdHlwZV9pbml0CQkJKHZvaWQpOwpHdGtU eXBlCQlndGtfdHlwZV91bmlxdWUJCQkoR3RrVHlwZQkgICBwYXJlbnRfdHlwZSwKCQkJCQkJIGNv bnN0IEd0a1R5cGVJbmZvICp0eXBlX2luZm8pOwp2b2lkCQlndGtfdHlwZV9zZXRfY2h1bmtfYWxs b2MJKEd0a1R5cGUJIHR5cGUsCgkJCQkJCSBndWludAkJIG5fY2h1bmtzKTsKZ2NoYXIqCQlndGtf dHlwZV9uYW1lCQkJKGd1aW50CQkgdHlwZSk7Ckd0a1R5cGUJCWd0a190eXBlX2Zyb21fbmFtZQkJ KGNvbnN0IGdjaGFyCSpuYW1lKTsKR3RrVHlwZQkJZ3RrX3R5cGVfcGFyZW50CQkJKEd0a1R5cGUJ IHR5cGUpOwpncG9pbnRlcglndGtfdHlwZV9jbGFzcwkJCShHdGtUeXBlCSB0eXBlKTsKZ3BvaW50 ZXIJZ3RrX3R5cGVfcGFyZW50X2NsYXNzCQkoR3RrVHlwZQkgdHlwZSk7CkdMaXN0KgkJZ3RrX3R5 cGVfY2hpbGRyZW5fdHlwZXMJCShHdGtUeXBlCSB0eXBlKTsKZ3BvaW50ZXIJZ3RrX3R5cGVfbmV3 CQkJKEd0a1R5cGUJIHR5cGUpOwp2b2lkCQlndGtfdHlwZV9mcmVlCQkJKEd0a1R5cGUJIHR5cGUs CgkJCQkJCSBncG9pbnRlcgkgbWVtKTsKdm9pZAkJZ3RrX3R5cGVfZGVzY3JpYmVfaGVyaXRhZ2UJ KEd0a1R5cGUJIHR5cGUpOwp2b2lkCQlndGtfdHlwZV9kZXNjcmliZV90cmVlCQkoR3RrVHlwZQkg dHlwZSwKCQkJCQkJIGdib29sZWFuCSBzaG93X3NpemUpOwpnYm9vbGVhbglndGtfdHlwZV9pc19h CQkJKEd0a1R5cGUJIHR5cGUsCgkJCQkJCSBHdGtUeXBlCSBpc19hX3R5cGUpOwpHdGtUeXBlT2Jq ZWN0KglndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdAkoR3RrVHlwZU9iamVjdAkqdHlwZV9vYmpl Y3QsCgkJCQkJCSBHdGtUeXBlICAgICAgICAgY2FzdF90eXBlKTsKR3RrVHlwZUNsYXNzKglndGtf dHlwZV9jaGVja19jbGFzc19jYXN0CShHdGtUeXBlQ2xhc3MJKmtsYXNzLAoJCQkJCQkgR3RrVHlw ZSAgICAgICAgIGNhc3RfdHlwZSk7Ckd0a1R5cGUJCWd0a190eXBlX3JlZ2lzdGVyX2VudW0JCShj b25zdCBnY2hhcgkqdHlwZV9uYW1lLAoJCQkJCQkgR3RrRW51bVZhbHVlCSp2YWx1ZXMpOwpHdGtU eXBlCQlndGtfdHlwZV9yZWdpc3Rlcl9mbGFncwkJKGNvbnN0IGdjaGFyCSp0eXBlX25hbWUsCgkJ CQkJCSBHdGtGbGFnVmFsdWUJKnZhbHVlcyk7Ckd0a0VudW1WYWx1ZSoJZ3RrX3R5cGVfZW51bV9n ZXRfdmFsdWVzCShHdGtUeXBlCSBlbnVtX3R5cGUpOwpHdGtGbGFnVmFsdWUqCWd0a190eXBlX2Zs YWdzX2dldF92YWx1ZXMJKEd0a1R5cGUJIGZsYWdzX3R5cGUpOwpHdGtFbnVtVmFsdWUqCWd0a190 eXBlX2VudW1fZmluZF92YWx1ZQkoR3RrVHlwZQkgZW51bV90eXBlLAoJCQkJCQkgY29uc3QgZ2No YXIJKnZhbHVlX25hbWUpOwpHdGtGbGFnVmFsdWUqCWd0a190eXBlX2ZsYWdzX2ZpbmRfdmFsdWUJ KEd0a1R5cGUJIGZsYWdfdHlwZSwKCQkJCQkJIGNvbnN0IGdjaGFyCSp2YWx1ZV9uYW1lKTsKIAp2 b2lkCQlndGtfdHlwZV9zZXRfdmFyYXJnc190eXBlCShHdGtUeXBlCWZvcmVpZ25fdHlwZSwKCQkJ CQkJIEd0a1R5cGUJdmFyYXJnc190eXBlKTsKR3RrVHlwZQkJZ3RrX3R5cGVfZ2V0X3ZhcmFyZ3Nf dHlwZQkoR3RrVHlwZQlmb3JlaWduX3R5cGUpOwogCgoKCkd0a1R5cGVRdWVyeSoJZ3RrX3R5cGVf cXVlcnkJCQkoR3RrVHlwZQl0eXBlKTsKCgoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUv Z3RrLTEuMi9ndGsvZ3RrYXJnLmgiIDIKCgoKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3Ry dWN0IF9HdGtBcmdJbmZvCSBHdGtBcmdJbmZvOwoKc3RydWN0IF9HdGtBcmdJbmZvCnsKICAgCiAg R3RrVHlwZSBjbGFzc190eXBlOwogIGdjaGFyICpuYW1lOwogIAogIEd0a1R5cGUgdHlwZTsKICBn dWludCBhcmdfZmxhZ3M7CiAgZ2NoYXIgKmZ1bGxfbmFtZTsKICAKICAgCiAgZ3VpbnQgYXJnX2lk OwogIGd1aW50IHNlcV9pZDsKfTsKCgogCgpHdGtBcmcqCQlndGtfYXJnX25ldwkJIChHdGtUeXBl CWFyZ190eXBlKTsKR3RrQXJnKgkJZ3RrX2FyZ19jb3B5CQkgKEd0a0FyZyAgICAgICAqc3JjX2Fy ZywKCQkJCQkgIEd0a0FyZyAgICAgICAqZGVzdF9hcmcpOwp2b2lkCQlndGtfYXJnX2ZyZWUJCSAo R3RrQXJnICAgICAgICphcmcsCgkJCQkJICBnYm9vbGVhbglmcmVlX2NvbnRlbnRzKTsKdm9pZAkJ Z3RrX2FyZ19yZXNldAkJIChHdGtBcmcgICAgICAgKmFyZyk7Cmdib29sZWFuCWd0a19hcmdfdmFs dWVzX2VxdWFsCSAoY29uc3QgR3RrQXJnICphcmcxLAoJCQkJCSAgY29uc3QgR3RrQXJnICphcmcy KTsKZ2NoYXIqCQlndGtfYXJnc19jb2xsZWN0CSAoR3RrVHlwZQlvYmplY3RfdHlwZSwKCQkJCQkg IEdIYXNoVGFibGUgICAgKmFyZ19pbmZvX2hhc2hfdGFibGUsCgkJCQkJICBHU0xpc3QgICAgICAq KmFyZ19saXN0X3AsCgkJCQkJICBHU0xpc3QgICAgICAqKmluZm9fbGlzdF9wLAoJCQkJCSAgY29u c3QgZ2NoYXIgICAqZmlyc3RfYXJnX25hbWUsCgkJCQkJICB2YV9saXN0CXZhcl9hcmdzKTsKdm9p ZAkJZ3RrX2FyZ3NfY29sbGVjdF9jbGVhbnVwIChHU0xpc3QgICAgICAgKmFyZ19saXN0LAoJCQkJ CSAgR1NMaXN0ICAgICAgICppbmZvX2xpc3QpOwpnY2hhcioJCWd0a19hcmdfZ2V0X2luZm8JIChH dGtUeXBlCW9iamVjdF90eXBlLAoJCQkJCSAgR0hhc2hUYWJsZSAgICAqYXJnX2luZm9faGFzaF90 YWJsZSwKCQkJCQkgIGNvbnN0IGdjaGFyICAgKmFyZ19uYW1lLAoJCQkJCSAgR3RrQXJnSW5mbyAg ICoqaW5mb19wKTsKR3RrQXJnSW5mbyoJZ3RrX2FyZ190eXBlX25ld19zdGF0aWMJIChHdGtUeXBl CWJhc2VfY2xhc3NfdHlwZSwKCQkJCQkgIGNvbnN0IGdjaGFyICAgKmFyZ19uYW1lLAoJCQkJCSAg Z3VpbnQJCWNsYXNzX25fYXJnc19vZmZzZXQsCgkJCQkJICBHSGFzaFRhYmxlICAgICphcmdfaW5m b19oYXNoX3RhYmxlLAoJCQkJCSAgR3RrVHlwZQlhcmdfdHlwZSwKCQkJCQkgIGd1aW50CQlhcmdf ZmxhZ3MsCgkJCQkJICBndWludAkJYXJnX2lkKTsKR3RrQXJnKgkJZ3RrX2FyZ3NfcXVlcnkJCSAo R3RrVHlwZQljbGFzc190eXBlLAoJCQkJCSAgR0hhc2hUYWJsZSAgICAqYXJnX2luZm9faGFzaF90 YWJsZSwKCQkJCQkgIGd1aW50MzIgICAgICAqKmFyZ19mbGFncywKCQkJCQkgIGd1aW50CSAgICAg ICAqbl9hcmdzX3ApOwpnY2hhcioJCWd0a19hcmdfbmFtZV9zdHJpcF90eXBlCSAoY29uc3QgZ2No YXIgICAqYXJnX25hbWUpOwpnaW50CQlndGtfYXJnX2luZm9fZXF1YWwJIChnY29uc3Rwb2ludGVy CSBhcmdfaW5mb18xLAoJCQkJCSAgZ2NvbnN0cG9pbnRlcgkgYXJnX2luZm9fMik7Cmd1aW50CQln dGtfYXJnX2luZm9faGFzaAkgKGdjb25zdHBvaW50ZXIJIGFyZ19pbmZvKTsKdm9pZAkJZ3RrX2Fy Z190b192YWx1ZWxvYwkgKEd0a0FyZwkqYXJnLAoJCQkJCSAgZ3BvaW50ZXIJIHZhbHVlX3BvaW50 ZXIpOwogICAgICAgCgoKCgp9CgoKCgojIDMxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3Rr L2d0a29iamVjdC5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrZW51 bXMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAK dHlwZWRlZiBlbnVtCnsKICBHVEtfQVJST1dfVVAsCiAgR1RLX0FSUk9XX0RPV04sCiAgR1RLX0FS Uk9XX0xFRlQsCiAgR1RLX0FSUk9XX1JJR0hUCn0gR3RrQXJyb3dUeXBlOwoKIAp0eXBlZGVmIGVu dW0KewogIEdUS19FWFBBTkQgPSAxIDw8IDAsCiAgR1RLX1NIUklOSyA9IDEgPDwgMSwKICBHVEtf RklMTCAgID0gMSA8PCAyCn0gR3RrQXR0YWNoT3B0aW9uczsKCiAKdHlwZWRlZiBlbnVtIAp7CiAg R1RLX0JVVFRPTkJPWF9ERUZBVUxUX1NUWUxFLAogIEdUS19CVVRUT05CT1hfU1BSRUFELAogIEdU S19CVVRUT05CT1hfRURHRSwKICBHVEtfQlVUVE9OQk9YX1NUQVJULAogIEdUS19CVVRUT05CT1hf RU5ECn0gR3RrQnV0dG9uQm94U3R5bGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NVUlZFX1RZ UEVfTElORUFSLCAgICAgICAgCiAgR1RLX0NVUlZFX1RZUEVfU1BMSU5FLCAgICAgICAgCiAgR1RL X0NVUlZFX1RZUEVfRlJFRSAgICAgICAgICAgCn0gR3RrQ3VydmVUeXBlOwogCiAKdHlwZWRlZiBl bnVtCnsKICBHVEtfRElSX1RBQl9GT1JXQVJELAogIEdUS19ESVJfVEFCX0JBQ0tXQVJELAogIEdU S19ESVJfVVAsCiAgR1RLX0RJUl9ET1dOLAogIEdUS19ESVJfTEVGVCwKICBHVEtfRElSX1JJR0hU Cn0gR3RrRGlyZWN0aW9uVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfSlVTVElGWV9MRUZU LAogIEdUS19KVVNUSUZZX1JJR0hULAogIEdUS19KVVNUSUZZX0NFTlRFUiwKICBHVEtfSlVTVElG WV9GSUxMCn0gR3RrSnVzdGlmaWNhdGlvbjsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfTUFUQ0hf QUxMLCAgICAgICAgCiAgR1RLX01BVENIX0FMTF9UQUlMLCAgIAogIEdUS19NQVRDSF9IRUFELCAg ICAgICAKICBHVEtfTUFUQ0hfVEFJTCwgICAgICAgCiAgR1RLX01BVENIX0VYQUNULCAgICAgIAog IEdUS19NQVRDSF9MQVNUCn0gR3RrTWF0Y2hUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19N RU5VX0RJUl9QQVJFTlQsCiAgR1RLX01FTlVfRElSX0NISUxELAogIEdUS19NRU5VX0RJUl9ORVhU LAogIEdUS19NRU5VX0RJUl9QUkVWCn0gR3RrTWVudURpcmVjdGlvblR5cGU7Cgp0eXBlZGVmIGVu dW0KewogIEdUS19NRU5VX0ZBQ1RPUllfTUVOVSwKICBHVEtfTUVOVV9GQUNUT1JZX01FTlVfQkFS LAogIEdUS19NRU5VX0ZBQ1RPUllfT1BUSU9OX01FTlUKfSBHdGtNZW51RmFjdG9yeVR5cGU7Cgp0 eXBlZGVmIGVudW0KewogIEdUS19QSVhFTFMsCiAgR1RLX0lOQ0hFUywKICBHVEtfQ0VOVElNRVRF UlMKfSBHdGtNZXRyaWNUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19PUklFTlRBVElPTl9I T1JJWk9OVEFMLAogIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTAp9IEd0a09yaWVudGF0aW9uOwoK IAp0eXBlZGVmIGVudW0KewogIEdUS19DT1JORVJfVE9QX0xFRlQsCiAgR1RLX0NPUk5FUl9CT1RU T01fTEVGVCwKICBHVEtfQ09STkVSX1RPUF9SSUdIVCwKICBHVEtfQ09STkVSX0JPVFRPTV9SSUdI VAp9IEd0a0Nvcm5lclR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BBQ0tfU1RBUlQsCiAg R1RLX1BBQ0tfRU5ECn0gR3RrUGFja1R5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BBVEhf UFJJT19MT1dFU1QgICAgICA9IDAsCiAgR1RLX1BBVEhfUFJJT19HVEsJICAgID0gNCwKICBHVEtf UEFUSF9QUklPX0FQUExJQ0FUSU9OID0gOCwKICBHVEtfUEFUSF9QUklPX1JDICAgICAgICAgID0g MTIsCiAgR1RLX1BBVEhfUFJJT19ISUdIRVNUICAgICA9IDE1LAogIEdUS19QQVRIX1BSSU9fTUFT SyAgICAgICAgPSAweDBmCn0gR3RrUGF0aFByaW9yaXR5VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsK ICBHVEtfUEFUSF9XSURHRVQsCiAgR1RLX1BBVEhfV0lER0VUX0NMQVNTLAogIEdUS19QQVRIX0NM QVNTCn0gR3RrUGF0aFR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1BPTElDWV9BTFdBWVMs CiAgR1RLX1BPTElDWV9BVVRPTUFUSUMsCiAgR1RLX1BPTElDWV9ORVZFUgp9IEd0a1BvbGljeVR5 cGU7Cgp0eXBlZGVmIGVudW0KewogIEdUS19QT1NfTEVGVCwKICBHVEtfUE9TX1JJR0hULAogIEdU S19QT1NfVE9QLAogIEdUS19QT1NfQk9UVE9NCn0gR3RrUG9zaXRpb25UeXBlOwoKdHlwZWRlZiBl bnVtCnsKICBHVEtfUFJFVklFV19DT0xPUiwKICBHVEtfUFJFVklFV19HUkFZU0NBTEUKfSBHdGtQ cmV2aWV3VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfUkVMSUVGX05PUk1BTCwKICBHVEtf UkVMSUVGX0hBTEYsCiAgR1RLX1JFTElFRl9OT05FCn0gR3RrUmVsaWVmU3R5bGU7CgogCnR5cGVk ZWYgZW51bQp7CiAgR1RLX1JFU0laRV9QQVJFTlQsCQkgCiAgR1RLX1JFU0laRV9RVUVVRSwJCSAK ICBHVEtfUkVTSVpFX0lNTUVESUFURQkJIAp9IEd0a1Jlc2l6ZU1vZGU7CgogCnR5cGVkZWYgZW51 bQkJCSAKewogIEdUS19SVU5fRklSU1QgICAgICA9IDEgPDwgMCwKICBHVEtfUlVOX0xBU1QgICAg ICAgPSAxIDw8IDEsCiAgR1RLX1JVTl9CT1RIICAgICAgID0gKEdUS19SVU5fRklSU1QgfCBHVEtf UlVOX0xBU1QpLAogIEdUS19SVU5fTk9fUkVDVVJTRSA9IDEgPDwgMiwKICBHVEtfUlVOX0FDVElP TiAgICAgPSAxIDw8IDMsCiAgR1RLX1JVTl9OT19IT09LUyAgID0gMSA8PCA0Cn0gR3RrU2lnbmFs UnVuVHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfU0NST0xMX05PTkUsCiAgR1RLX1NDUk9M TF9TVEVQX0JBQ0tXQVJELAogIEdUS19TQ1JPTExfU1RFUF9GT1JXQVJELAogIEdUS19TQ1JPTExf UEFHRV9CQUNLV0FSRCwKICBHVEtfU0NST0xMX1BBR0VfRk9SV0FSRCwKICBHVEtfU0NST0xMX0pV TVAKfSBHdGtTY3JvbGxUeXBlOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19TRUxFQ1RJT05fU0lO R0xFLAogIEdUS19TRUxFQ1RJT05fQlJPV1NFLAogIEdUS19TRUxFQ1RJT05fTVVMVElQTEUsCiAg R1RLX1NFTEVDVElPTl9FWFRFTkRFRAp9IEd0a1NlbGVjdGlvbk1vZGU7CgogCnR5cGVkZWYgZW51 bQp7CiAgR1RLX1NIQURPV19OT05FLAogIEdUS19TSEFET1dfSU4sCiAgR1RLX1NIQURPV19PVVQs CiAgR1RLX1NIQURPV19FVENIRURfSU4sCiAgR1RLX1NIQURPV19FVENIRURfT1VUCn0gR3RrU2hh ZG93VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfU1RBVEVfTk9STUFMLAogIEdUS19TVEFU RV9BQ1RJVkUsCiAgR1RLX1NUQVRFX1BSRUxJR0hULAogIEdUS19TVEFURV9TRUxFQ1RFRCwKICBH VEtfU1RBVEVfSU5TRU5TSVRJVkUKfSBHdGtTdGF0ZVR5cGU7CgogCnR5cGVkZWYgZW51bQp7CiAg R1RLX0RJUkVDVElPTl9MRUZULAogIEdUS19ESVJFQ1RJT05fUklHSFQKfSBHdGtTdWJtZW51RGly ZWN0aW9uOwoKIAp0eXBlZGVmIGVudW0KewogIEdUS19UT1BfQk9UVE9NLAogIEdUS19MRUZUX1JJ R0hUCn0gR3RrU3VibWVudVBsYWNlbWVudDsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfVE9PTEJB Ul9JQ09OUywKICBHVEtfVE9PTEJBUl9URVhULAogIEdUS19UT09MQkFSX0JPVEgKfSBHdGtUb29s YmFyU3R5bGU7CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1RST1VHSF9OT05FLAogIEdUS19UUk9V R0hfU1RBUlQsCiAgR1RLX1RST1VHSF9FTkQsCiAgR1RLX1RST1VHSF9KVU1QCn0gR3RrVHJvdWdo VHlwZTsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfVVBEQVRFX0NPTlRJTlVPVVMsCiAgR1RLX1VQ REFURV9ESVNDT05USU5VT1VTLAogIEdUS19VUERBVEVfREVMQVlFRAp9IEd0a1VwZGF0ZVR5cGU7 CgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX1ZJU0lCSUxJVFlfTk9ORSwKICBHVEtfVklTSUJJTElU WV9QQVJUSUFMLAogIEdUS19WSVNJQklMSVRZX0ZVTEwKfSBHdGtWaXNpYmlsaXR5OwoKIAp0eXBl ZGVmIGVudW0KewogIEdUS19XSU5fUE9TX05PTkUsCiAgR1RLX1dJTl9QT1NfQ0VOVEVSLAogIEdU S19XSU5fUE9TX01PVVNFLAogIEdUS19XSU5fUE9TX0NFTlRFUl9BTFdBWVMKfSBHdGtXaW5kb3dQ b3NpdGlvbjsKCiAKdHlwZWRlZiBlbnVtCnsKICBHVEtfV0lORE9XX1RPUExFVkVMLAogIEdUS19X SU5ET1dfRElBTE9HLAogIEdUS19XSU5ET1dfUE9QVVAKfSBHdGtXaW5kb3dUeXBlOwoKIAp0eXBl ZGVmIGVudW0KewogIEdUS19TT1JUX0FTQ0VORElORywKICBHVEtfU09SVF9ERVNDRU5ESU5HCn0g R3RrU29ydFR5cGU7CgoKfQoKCgoKIyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9n dGtvYmplY3QuaCIgMgoKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkZWJ1 Zy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKdHlw ZWRlZiBlbnVtIHsKICBHVEtfREVCVUdfT0JKRUNUUyAgICA9IDEgPDwgMCwKICBHVEtfREVCVUdf TUlTQyAgICAgICA9IDEgPDwgMSwKICBHVEtfREVCVUdfU0lHTkFMUyAgICA9IDEgPDwgMiwKICBH VEtfREVCVUdfRE5EICAgICAgICA9IDEgPDwgMywKICBHVEtfREVCVUdfUExVR1NPQ0tFVCA9IDEg PDwgNAp9IEd0a0RlYnVnRmxhZzsKCgoKCgoKCgoKCiAgICAgIAoKCmV4dGVybiBndWludCBndGtf ZGVidWdfZmxhZ3M7CgoKfQoKCgoKIyAzNCAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9n dGtvYmplY3QuaCIgMgoKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKIAoKCgoKCiAKCgoKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0RFU1RST1lFRAkJPSAxIDw8 IDAsCiAgR1RLX0ZMT0FUSU5HCQk9IDEgPDwgMSwKICBHVEtfQ09OTkVDVEVECQk9IDEgPDwgMiwK ICBHVEtfQ09OU1RSVUNURUQJPSAxIDw8IDMKfSBHdGtPYmplY3RGbGFnczsKCiAKCgoKCgoKCiAK CgoKCiAKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0FSR19SRUFEQUJMRQkgPSAxIDw8IDAsCiAgR1RL X0FSR19XUklUQUJMRQkgPSAxIDw8IDEsCiAgR1RLX0FSR19DT05TVFJVQ1QJID0gMSA8PCAyLAog IEdUS19BUkdfQ09OU1RSVUNUX09OTFkgPSAxIDw8IDMsCiAgR1RLX0FSR19DSElMRF9BUkcJID0g MSA8PCA0LAogIEdUS19BUkdfTUFTSwkJID0gMHgxZiwKICAKICAgCgogIEdUS19BUkdfUkVBRFdS SVRFCSA9IEdUS19BUkdfUkVBREFCTEUgfCBHVEtfQVJHX1dSSVRBQkxFCn0gR3RrQXJnRmxhZ3M7 Cgp0eXBlZGVmIHN0cnVjdCBfR3RrT2JqZWN0Q2xhc3MJR3RrT2JqZWN0Q2xhc3M7CgoKIAoKCgoK c3RydWN0IF9HdGtPYmplY3QKewogICAKICBHdGtPYmplY3RDbGFzcyAqa2xhc3M7CiAgCiAgCiAg IAoKCgoKICBndWludDMyIGZsYWdzOwogIAogICAKCgogIGd1aW50IHJlZl9jb3VudDsKICAKICAg CgoKICBHRGF0YSAqb2JqZWN0X2RhdGE7Cn07CgogCgoKCgoKCnN0cnVjdCBfR3RrT2JqZWN0Q2xh c3MKewogICAKICBHdGtUeXBlIHR5cGU7CiAgCiAgCiAgIAoKCiAgZ3VpbnQgKnNpZ25hbHM7CiAg CiAgIAoKICBndWludCBuc2lnbmFsczsKICAKICAgCgogIGd1aW50IG5fYXJnczsKICBHU0xpc3Qg KmNvbnN0cnVjdF9hcmdzOwogIAogICAKICB2b2lkICgqc2V0X2FyZykgKEd0a09iamVjdCAqb2Jq ZWN0LAoJCSAgIEd0a0FyZyAgICAqYXJnLAoJCSAgIGd1aW50ICAgICAgYXJnX2lkKTsKICB2b2lk ICgqZ2V0X2FyZykgKEd0a09iamVjdCAqb2JqZWN0LAoJCSAgIEd0a0FyZyAgICAqYXJnLAoJCSAg IGd1aW50ICAgICAgYXJnX2lkKTsKICAKICAgCgoKCgoKCgogIHZvaWQgKCogc2h1dGRvd24pIChH dGtPYmplY3QgKm9iamVjdCk7CiAgdm9pZCAoKiBkZXN0cm95KSAgKEd0a09iamVjdCAqb2JqZWN0 KTsKICAKICB2b2lkICgqIGZpbmFsaXplKSAoR3RrT2JqZWN0ICpvYmplY3QpOwp9OwoKCgogCgpH dGtUeXBlCWd0a19vYmplY3RfZ2V0X3R5cGUJCSh2b2lkKTsKCiAKZ3VpbnQJZ3RrX29iamVjdF9j bGFzc191c2VyX3NpZ25hbF9uZXcgIChHdGtPYmplY3RDbGFzcyAgICAgKmtsYXNzLAoJCQkJCSAg IGNvbnN0IGdjaGFyCSAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1NpZ25hbFJ1blR5cGUgICAgc2ln bmFsX2ZsYWdzLAoJCQkJCSAgIEd0a1NpZ25hbE1hcnNoYWxsZXIgbWFyc2hhbGxlciwKCQkJCQkg ICBHdGtUeXBlCSAgICAgICByZXR1cm5fdmFsLAoJCQkJCSAgIGd1aW50CSAgICAgICBucGFyYW1z LAoJCQkJCSAgIC4uLik7Cmd1aW50CWd0a19vYmplY3RfY2xhc3NfdXNlcl9zaWduYWxfbmV3diAo R3RrT2JqZWN0Q2xhc3MgICAgICprbGFzcywKCQkJCQkgICBjb25zdCBnY2hhcgkgICAgICAqbmFt ZSwKCQkJCQkgICBHdGtTaWduYWxSdW5UeXBlICAgIHNpZ25hbF9mbGFncywKCQkJCQkgICBHdGtT aWduYWxNYXJzaGFsbGVyIG1hcnNoYWxsZXIsCgkJCQkJICAgR3RrVHlwZQkgICAgICAgcmV0dXJu X3ZhbCwKCQkJCQkgICBndWludAkgICAgICAgbnBhcmFtcywKCQkJCQkgICBHdGtUeXBlCSAgICAg ICpwYXJhbXMpOwpHdGtPYmplY3QqCWd0a19vYmplY3RfbmV3CQkgIChHdGtUeXBlCSAgICAgICB0 eXBlLAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAu Li4pOwpHdGtPYmplY3QqCWd0a19vYmplY3RfbmV3dgkJICAoR3RrVHlwZQkgICAgICAgb2JqZWN0 X3R5cGUsCgkJCQkJICAgZ3VpbnQJICAgICAgIG5fYXJncywKCQkJCQkgICBHdGtBcmcJICAgICAg KmFyZ3MpOwp2b2lkIGd0a19vYmplY3RfZGVmYXVsdF9jb25zdHJ1Y3QgICAgICAgICAoR3RrT2Jq ZWN0CSAgICAgICpvYmplY3QpOwp2b2lkIGd0a19vYmplY3RfY29uc3RydWN0ZWQJCSAgKEd0a09i amVjdAkgICAgICAqb2JqZWN0KTsKdm9pZCBndGtfb2JqZWN0X3NpbmsJICAoR3RrT2JqZWN0CSAg ICAqb2JqZWN0KTsKdm9pZCBndGtfb2JqZWN0X3JlZgkgIChHdGtPYmplY3QJICAgICpvYmplY3Qp Owp2b2lkIGd0a19vYmplY3RfdW5yZWYJICAoR3RrT2JqZWN0CSAgICAqb2JqZWN0KTsKdm9pZCBn dGtfb2JqZWN0X3dlYWtyZWYJICAoR3RrT2JqZWN0CSAgICAqb2JqZWN0LAoJCQkgICBHdGtEZXN0 cm95Tm90aWZ5ICBub3RpZnksCgkJCSAgIGdwb2ludGVyCSAgICAgZGF0YSk7CnZvaWQgZ3RrX29i amVjdF93ZWFrdW5yZWYgKEd0a09iamVjdAkgICAgKm9iamVjdCwKCQkJICAgR3RrRGVzdHJveU5v dGlmeSAgbm90aWZ5LAoJCQkgICBncG9pbnRlcgkgICAgIGRhdGEpOwp2b2lkIGd0a19vYmplY3Rf ZGVzdHJveQkgIChHdGtPYmplY3QgKm9iamVjdCk7CgogCgoKCgp2b2lkCWd0a19vYmplY3RfZ2V0 dgkJKEd0a09iamVjdAkqb2JqZWN0LAoJCQkJIGd1aW50CQluX2FyZ3MsCgkJCQkgR3RrQXJnCQkq YXJncyk7CiAKCgoKCnZvaWQJZ3RrX29iamVjdF9nZXQJCShHdGtPYmplY3QJKm9iamVjdCwKCQkJ CSBjb25zdCBnY2hhcgkqZmlyc3RfYXJnX25hbWUsCgkJCQkgLi4uKTsKCiAKCgoKCnZvaWQJZ3Rr X29iamVjdF9zZXQJCShHdGtPYmplY3QJKm9iamVjdCwKCQkJCSBjb25zdCBnY2hhcgkqZmlyc3Rf YXJnX25hbWUsCgkJCQkgLi4uKTsKdm9pZAlndGtfb2JqZWN0X3NldHYJCShHdGtPYmplY3QJKm9i amVjdCwKCQkJCSBndWludAkJbl9hcmdzLAoJCQkJIEd0a0FyZwkJKmFyZ3MpOwoKIAoKCgoKCgoK R3RrQXJnKiBndGtfb2JqZWN0X3F1ZXJ5X2FyZ3MJKEd0a1R5cGUJICBjbGFzc190eXBlLAoJCQkJ IGd1aW50MzIJKiphcmdfZmxhZ3MsCgkJCQkgZ3VpbnQJCSAqbl9hcmdzKTsKCiAKCgoKCgoKCgoK Cgp2b2lkCSBndGtfb2JqZWN0X3NldF9kYXRhCSAgICAgKEd0a09iamVjdAkgICAgICpvYmplY3Qs CgkJCQkgICAgICBjb25zdCBnY2hhciAgICAqa2V5LAoJCQkJICAgICAgZ3BvaW50ZXIJICAgICAg ZGF0YSk7CnZvaWQJIGd0a19vYmplY3Rfc2V0X2RhdGFfZnVsbCAgICAoR3RrT2JqZWN0CSAgICAg Km9iamVjdCwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICAgICprZXksCgkJCQkgICAgICBncG9pbnRl cgkgICAgICBkYXRhLAoJCQkJICAgICAgR3RrRGVzdHJveU5vdGlmeSBkZXN0cm95KTsKdm9pZAkg Z3RrX29iamVjdF9yZW1vdmVfZGF0YQkgICAgIChHdGtPYmplY3QJICAgICAqb2JqZWN0LAoJCQkJ ICAgICAgY29uc3QgZ2NoYXIgICAgKmtleSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0X2RhdGEJ ICAgICAoR3RrT2JqZWN0CSAgICAgKm9iamVjdCwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICAgICpr ZXkpOwp2b2lkCSBndGtfb2JqZWN0X3JlbW92ZV9ub19ub3RpZnkgKEd0a09iamVjdAkgICAgICpv YmplY3QsCgkJCQkgICAgICBjb25zdCBnY2hhciAgICAqa2V5KTsKCiAKCgoKCnZvaWQJIGd0a19v YmplY3Rfc2V0X3VzZXJfZGF0YSAoR3RrT2JqZWN0CSpvYmplY3QsCgkJCQkgICBncG9pbnRlcgkg ZGF0YSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0X3VzZXJfZGF0YSAoR3RrT2JqZWN0CSpvYmpl Y3QpOwoKCiAKCiAKdm9pZAlndGtfb2JqZWN0X2NsYXNzX2FkZF9zaWduYWxzCShHdGtPYmplY3RD bGFzcwkqa2xhc3MsCgkJCQkJIGd1aW50CQkqc2lnbmFscywKCQkJCQkgZ3VpbnQJCSBuc2lnbmFs cyk7CiAKdm9pZAlndGtfb2JqZWN0X2FkZF9hcmdfdHlwZQkJKGNvbnN0IGdjaGFyCSphcmdfbmFt ZSwKCQkJCQkgR3RrVHlwZQkgYXJnX3R5cGUsCgkJCQkJIGd1aW50CQkgYXJnX2ZsYWdzLAoJCQkJ CSBndWludAkJIGFyZ19pZCk7CgogCnZvaWQgZ3RrX29iamVjdF9zZXRfZGF0YV9ieV9pZAkJKEd0 a09iamVjdAkgKm9iamVjdCwKCQkJCQkgR1F1YXJrCQkgIGRhdGFfaWQsCgkJCQkJIGdwb2ludGVy CSAgZGF0YSk7CnZvaWQgZ3RrX29iamVjdF9zZXRfZGF0YV9ieV9pZF9mdWxsCShHdGtPYmplY3QJ ICpvYmplY3QsCgkJCQkJIEdRdWFyawkJICBkYXRhX2lkLAoJCQkJCSBncG9pbnRlcgkgIGRhdGEs CgkJCQkJIEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSk7Cmdwb2ludGVyIGd0a19vYmplY3RfZ2V0 X2RhdGFfYnlfaWQJKEd0a09iamVjdAkgKm9iamVjdCwKCQkJCQkgR1F1YXJrCQkgIGRhdGFfaWQp Owp2b2lkICBndGtfb2JqZWN0X3JlbW92ZV9kYXRhX2J5X2lkCShHdGtPYmplY3QJICpvYmplY3Qs CgkJCQkJIEdRdWFyawkJICBkYXRhX2lkKTsKdm9pZCAgZ3RrX29iamVjdF9yZW1vdmVfbm9fbm90 aWZ5X2J5X2lkCShHdGtPYmplY3QJICpvYmplY3QsCgkJCQkJIEdRdWFyawkJICBrZXlfaWQpOwoK CgoKIAoKdm9pZAlndGtfb2JqZWN0X2FyZ19zZXQJKEd0a09iamVjdCAgICpvYmplY3QsCgkJCQkg R3RrQXJnCSAgICAgKmFyZywKCQkJCSBHdGtBcmdJbmZvICAqaW5mbyk7CnZvaWQJZ3RrX29iamVj dF9hcmdfZ2V0CShHdGtPYmplY3QgICAqb2JqZWN0LAoJCQkJIEd0a0FyZwkgICAgICphcmcsCgkJ CQkgR3RrQXJnSW5mbyAgKmluZm8pOwpnY2hhcioJZ3RrX29iamVjdF9hcmdzX2NvbGxlY3QgKEd0 a1R5cGUgICAgICBvYmplY3RfdHlwZSwKCQkJCSBHU0xpc3QJICAgICoqYXJnX2xpc3RfcCwKCQkJ CSBHU0xpc3QJICAgICoqaW5mb19saXN0X3AsCgkJCQkgY29uc3QgZ2NoYXIgKmZpcnN0X2FyZ19u YW1lLAoJCQkJIHZhX2xpc3QgICAgICB2YXJfYXJncyk7CmdjaGFyKglndGtfb2JqZWN0X2FyZ19n ZXRfaW5mbyAoR3RrVHlwZSAgICAgIG9iamVjdF90eXBlLAoJCQkJIGNvbnN0IGdjaGFyICphcmdf bmFtZSwKCQkJCSBHdGtBcmdJbmZvICoqaW5mb19wKTsKdm9pZAlndGtfdHJhY2VfcmVmZXJlbmNp bmcJKEd0a09iamVjdCAgICpvYmplY3QsCgkJCQkgY29uc3QgZ2NoYXIgKmZ1bmMsCgkJCQkgZ3Vp bnQJICAgICAgZHVtbXksCgkJCQkgZ3VpbnQJICAgICAgbGluZSwKCQkJCSBnYm9vbGVhbiAgICAg ZG9fcmVmKTsKCgoKCgoKCgoKCgoKCn0KCgoKCiMgMTAgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0v cHJveHkuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3NpZ25hbC5o IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNs dWRlL2d0ay0xLjIvZ3RrL2d0a21hcnNoYWwuaCIgMQoKCgoKCgoKZXh0ZXJuICJDIgp7CgoKCgog IHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fTk9ORSAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkgICAg ICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtB cmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSIChHdGtPYmplY3Qg KiBvYmplY3QsCgkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIgZnVuY19k YXRhLCBHdGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSX1BP SU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCQkgIEd0a1NpZ25hbEZ1bmMg ZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCSAgR3RrQXJnICogYXJncyk7 CgogIHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fUE9JTlRFUl9JTlRfSU5UIChHdGtPYmplY3QgKiBv YmplY3QsCgkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJICBncG9pbnRlciBmdW5jX2Rh dGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfQk9PTF9fUE9JTlRFUl9J TlRfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCSAgICAgIEd0a1NpZ25hbEZ1bmMg ZnVuYywKCQkJCQkgICAgICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJICAgICAgR3RrQXJnICog YXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9CT09MX19QT0lOVEVSX1BPSU5URVJfUE9JTlRF Ul9QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVu YywKCQkJCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLAoJCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsK CgoKICB2b2lkIGd0a19tYXJzaGFsX0lOVF9fSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCSAg ICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJn ICogYXJncyk7CgogIHZvaWQgZ3RrX21hcnNoYWxfSU5UX19QT0lOVEVSIChHdGtPYmplY3QgKiBv YmplY3QsCgkJCQkgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJIGdwb2ludGVyIGZ1bmNfZGF0YSwg R3RrQXJnICogYXJncyk7CgogIHZvaWQgZ3RrX21hcnNoYWxfSU5UX19QT0lOVEVSX0NIQVJfQ0hB UiAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkg ICBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19tYXJzaGFs X05PTkVfX0JPT0wgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJICAgICAgIEd0a1NpZ25hbEZ1bmMg ZnVuYywKCQkJICAgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJnICogYXJncyk7CgoKCiAg dm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkg IEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcgKiBh cmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19DX0NBTExCQUNLIChHdGtPYmplY3QgKiBv YmplY3QsCgkJCQkgICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgICAgZ3BvaW50ZXIgZnVu Y19kYXRhLCBHdGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19DX0NBTExC QUNLX0NfQ0FMTEJBQ0sgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCQkJR3RrU2lnbmFsRnVuYyBm dW5jLAoJCQkJCQlncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCUd0a0FyZyAqIGFyZ3MpOwoKCgog IHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9fSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCSAgICAg IEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcg KiBhcmdzKTsKCgoKICB2b2lkIGd0a19tYXJzaGFsX05PTkVfX0lOVF9GTE9BVCAoR3RrT2JqZWN0 ICogb2JqZWN0LAoJCQkJICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCSAgICBncG9pbnRlciBm dW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9fSU5U X0ZMT0FUX0JPT0wgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCQkgR3RrU2lnbmFsRnVuYyBmdW5j LAoJCQkJCSBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19t YXJzaGFsX05PTkVfX0lOVF9JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCSAgR3RrU2lnbmFs RnVuYyBmdW5jLAoJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKICB2 b2lkIGd0a19tYXJzaGFsX05PTkVfX0lOVF9JTlRfUE9JTlRFUiAoR3RrT2JqZWN0ICogb2JqZWN0 LAoJCQkJCSAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLCBH dGtBcmcgKiBhcmdzKTsKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19OT05FIChHdGtPYmplY3Qg KiBvYmplY3QsCgkJCSAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCSAgICAgICBncG9pbnRl ciBmdW5jX2RhdGEsIEd0a0FyZyAqIGFyZ3MpOwoKCgogIHZvaWQgZ3RrX21hcnNoYWxfTk9ORV9f UE9JTlRFUl9JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKCQkJCSAgICAgIEd0a1NpZ25hbEZ1bmMg ZnVuYywKCQkJCSAgICAgIGdwb2ludGVyIGZ1bmNfZGF0YSwgR3RrQXJnICogYXJncyk7CgogIHZv aWQgZ3RrX21hcnNoYWxfTk9ORV9fUE9JTlRFUl9QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3Qs CgkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsIEd0 a0FyZyAqIGFyZ3MpOwoKICB2b2lkIGd0a19tYXJzaGFsX05PTkVfX1BPSU5URVJfUE9JTlRFUl9Q T0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCSAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJ CQkJCQkgIGdwb2ludGVyIGZ1bmNfZGF0YSwKCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsKCgoKCgoK CiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9JTlQgKEd0a09iamVjdCAqIG9i amVjdCwKCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkgIGdwb2ludGVyIGZ1bmNfZGF0 YSwgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX1BP SU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJCQkgIEd0a1NpZ25hbEZ1bmMg ZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJCSAgR3RrQXJnICogYXJncyk7 CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9JTlRfUE9JTlRFUl9JTlRf SU5UIChHdGtPYmplY3QgKiBvYmplY3QsCgkJCQkJCQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJ CQkJCSAgZ3BvaW50ZXIgZnVuY19kYXRhLAoJCQkJCQkJICBHdGtBcmcgKiBhcmdzKTsKCgoKCgoK CiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19QT0lOVEVSX0lOVF9QT0lOVEVSIChHdGtPYmplY3Qg KiBvYmplY3QsCgkJCQkJICAgICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJCSAgICAgIGdwb2lu dGVyIGZ1bmNfZGF0YSwKCQkJCQkgICAgICBHdGtBcmcgKiBhcmdzKTsKCgoKCgogIHZvaWQgZ3Rr X21hcnNoYWxfTk9ORV9fSU5UX1BPSU5URVJfSU5UX0lOVF9JTlRfUE9JTlRFUiAoR3RrT2JqZWN0 ICogb2JqZWN0LAoJCQkJCQkJICBHdGtTaWduYWxGdW5jIGZ1bmMsCgkJCQkJCQkgIGdwb2ludGVy IGZ1bmNfZGF0YSwKCQkJCQkJCSAgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hh bF9OT05FX19JTlRfUE9JTlRFUl9JTlRfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJ CQkgIEd0a1NpZ25hbEZ1bmMgZnVuYywKCQkJCQkJICBncG9pbnRlciBmdW5jX2RhdGEsCgkJCQkJ CSAgR3RrQXJnICogYXJncyk7CgoKCiAgdm9pZCBndGtfbWFyc2hhbF9OT05FX19JTlRfUE9JTlRF UiAoR3RrT2JqZWN0ICogb2JqZWN0LAoJCQkJICAgICAgR3RrU2lnbmFsRnVuYyBmdW5jLAoJCQkJ ICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLCBHdGtBcmcgKiBhcmdzKTsKCgoKfQoKCgojIDM0ICIv b3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3NpZ25hbC5oIiAyCgoKCmV4dGVybiAiQyIg ewoKCiAgCgogIAogIAp0eXBlZGVmIHZvaWQgICAgKCpHdGtTaWduYWxNYXJzaGFsKSAoR3RrT2Jq ZWN0CSAgICAqb2JqZWN0LAoJCQkJICAgICBncG9pbnRlcgkgICAgIGRhdGEsCgkJCQkgICAgIGd1 aW50CSAgICAgbnBhcmFtcywKCQkJCSAgICAgR3RrQXJnCSAgICAqYXJncywKCQkJCSAgICAgR3Rr VHlwZQkgICAgKmFyZ190eXBlcywKCQkJCSAgICAgR3RrVHlwZQkgICAgIHJldHVybl90eXBlKTsK dHlwZWRlZiB2b2lkICAgICgqR3RrU2lnbmFsRGVzdHJveSkgKGdwb2ludGVyCSAgICAgZGF0YSk7 CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHdGtFbWlzc2lvbkhvb2spIChHdGtPYmplY3QJICAgICpvYmpl Y3QsCgkJCQkgICAgIGd1aW50ICAgICAgICAgICBzaWduYWxfaWQsCgkJCQkgICAgIGd1aW50CSAg ICAgbl9wYXJhbXMsCgkJCQkgICAgIEd0a0FyZwkgICAgKnBhcmFtcywKCQkJCSAgICAgZ3BvaW50 ZXIgICAgICAgIGRhdGEpOwoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1NpZ25hbFF1ZXJ5CQlHdGtTaWdu YWxRdWVyeTsKCnN0cnVjdAlfR3RrU2lnbmFsUXVlcnkKewogIEd0a1R5cGUJICAgb2JqZWN0X3R5 cGU7CiAgZ3VpbnQJCSAgIHNpZ25hbF9pZDsKICBjb25zdCBnY2hhcgkgICpzaWduYWxfbmFtZTsK ICBndWludAkJICAgaXNfdXNlcl9zaWduYWwgOiAxOwogIEd0a1NpZ25hbFJ1blR5cGUgc2lnbmFs X2ZsYWdzOwogIEd0a1R5cGUJICAgcmV0dXJuX3ZhbDsKICBndWludAkJICAgbnBhcmFtczsKICBj b25zdCBHdGtUeXBlCSAgKnBhcmFtczsKfTsKCgogCmd1aW50ICBndGtfc2lnbmFsX2xvb2t1cAkJ ICAoY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1R5cGUJCW9iamVjdF90eXBl KTsKZ2NoYXIqIGd0a19zaWduYWxfbmFtZQkJCSAgKGd1aW50CQlzaWduYWxfaWQpOwpndWludCAg Z3RrX3NpZ25hbF9uX2VtaXNzaW9ucwkJICAoR3RrT2JqZWN0ICAgCSAgICAgICAqb2JqZWN0LAoJ CQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIHNpZ25hbF9pZCk7Cmd1aW50ICBndGtfc2lnbmFs X25fZW1pc3Npb25zX2J5X25hbWUJICAoR3RrT2JqZWN0ICAgCSAgICAgICAqb2JqZWN0LAoJCQkJ CSAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0X3N0 b3AJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBndWludAkJc2lnbmFsX2lk KTsKdm9pZCAgIGd0a19zaWduYWxfZW1pdF9zdG9wX2J5X25hbWUJICAoR3RrT2JqZWN0CSAgICAg ICAqb2JqZWN0LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSk7Cmd1aW50ICBndGtf c2lnbmFsX2Nvbm5lY3QJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBjb25z dCBnY2hhcgkgICAgICAgKm5hbWUsCgkJCQkJICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAg IGdwb2ludGVyCQlmdW5jX2RhdGEpOwpndWludCAgZ3RrX3NpZ25hbF9jb25uZWN0X2FmdGVyCQkg IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpu YW1lLAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMJZnVuYywKCQkJCQkgICBncG9pbnRlcgkJZnVuY19k YXRhKTsKZ3VpbnQgIGd0a19zaWduYWxfY29ubmVjdF9vYmplY3QJICAoR3RrT2JqZWN0CSAgICAg ICAqb2JqZWN0LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSwKCQkJCQkgICBHdGtT aWduYWxGdW5jCWZ1bmMsCgkJCQkJICAgR3RrT2JqZWN0CSAgICAgICAqc2xvdF9vYmplY3QpOwpn dWludCAgZ3RrX3NpZ25hbF9jb25uZWN0X29iamVjdF9hZnRlcgkgIChHdGtPYmplY3QJICAgICAg ICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1Np Z25hbEZ1bmMJZnVuYywKCQkJCQkgICBHdGtPYmplY3QJICAgICAgICpzbG90X29iamVjdCk7Cmd1 aW50ICBndGtfc2lnbmFsX2Nvbm5lY3RfZnVsbAkJICAoR3RrT2JqZWN0CSAgICAgICAqb2JqZWN0 LAoJCQkJCSAgIGNvbnN0IGdjaGFyCSAgICAgICAqbmFtZSwKCQkJCQkgICBHdGtTaWduYWxGdW5j CWZ1bmMsCgkJCQkJICAgR3RrQ2FsbGJhY2tNYXJzaGFsCW1hcnNoYWwsCgkJCQkJICAgZ3BvaW50 ZXIJCWRhdGEsCgkJCQkJICAgR3RrRGVzdHJveU5vdGlmeQlkZXN0cm95X2Z1bmMsCgkJCQkJICAg Z2ludAkJCW9iamVjdF9zaWduYWwsCgkJCQkJICAgZ2ludAkJCWFmdGVyKTsKCnZvaWQgICBndGtf c2lnbmFsX2Nvbm5lY3Rfb2JqZWN0X3doaWxlX2FsaXZlIChHdGtPYmplY3QJICAgICAgICpvYmpl Y3QsCgkJCQkJICAgICAgY29uc3QgZ2NoYXIgICAgICAqc2lnbmFsLAoJCQkJCSAgICAgIEd0a1Np Z25hbEZ1bmMJZnVuYywKCQkJCQkgICAgICBHdGtPYmplY3QJICAgICAgICphbGl2ZV9vYmplY3Qp Owp2b2lkICAgZ3RrX3NpZ25hbF9jb25uZWN0X3doaWxlX2FsaXZlCSAgICAgKEd0a09iamVjdAkg ICAgICAgKm9iamVjdCwKCQkJCQkgICAgICBjb25zdCBnY2hhciAgICAgICpzaWduYWwsCgkJCQkJ ICAgICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAgICAgIGdwb2ludGVyCQlmdW5jX2RhdGEs CgkJCQkJICAgICAgR3RrT2JqZWN0CSAgICAgICAqYWxpdmVfb2JqZWN0KTsKCnZvaWQgICBndGtf c2lnbmFsX2Rpc2Nvbm5lY3QJCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBn dWludAkJaGFuZGxlcl9pZCk7CnZvaWQgICBndGtfc2lnbmFsX2Rpc2Nvbm5lY3RfYnlfZnVuYwkg IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgR3RrU2lnbmFsRnVuYwlmdW5jLAoJ CQkJCSAgIGdwb2ludGVyCQlkYXRhKTsKdm9pZCAgIGd0a19zaWduYWxfZGlzY29ubmVjdF9ieV9k YXRhCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJCQkgICBncG9pbnRlcgkJZGF0YSk7 CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfYmxvY2sJCSAgKEd0a09iamVjdAkgICAgICAgKm9i amVjdCwKCQkJCQkgICBndWludAkJaGFuZGxlcl9pZCk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRs ZXJfYmxvY2tfYnlfZnVuYwkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgR3Rr U2lnbmFsRnVuYwlmdW5jLAoJCQkJCSAgIGdwb2ludGVyCQlkYXRhKTsKdm9pZCAgIGd0a19zaWdu YWxfaGFuZGxlcl9ibG9ja19ieV9kYXRhCSAgKEd0a09iamVjdAkgICAgICAgKm9iamVjdCwKCQkJ CQkgICBncG9pbnRlcgkJZGF0YSk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfdW5ibG9jawkg IChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgZ3VpbnQJCWhhbmRsZXJfaWQpOwp2 b2lkICAgZ3RrX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2tfYnlfZnVuYyAoR3RrT2JqZWN0CSAgICAg ICAqb2JqZWN0LAoJCQkJCSAgIEd0a1NpZ25hbEZ1bmMJZnVuYywKCQkJCQkgICBncG9pbnRlcgkJ ZGF0YSk7CnZvaWQgICBndGtfc2lnbmFsX2hhbmRsZXJfdW5ibG9ja19ieV9kYXRhIChHdGtPYmpl Y3QJICAgICAgICpvYmplY3QsCgkJCQkJICAgZ3BvaW50ZXIJCWRhdGEpOwpndWludCAgZ3RrX3Np Z25hbF9oYW5kbGVyX3BlbmRpbmcJICAoR3RrT2JqZWN0CSAgICAgICAqb2JqZWN0LAoJCQkJCSAg IGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgZ2Jvb2xlYW4JCW1heV9iZV9ibG9ja2VkKTsKZ3Vp bnQgIGd0a19zaWduYWxfaGFuZGxlcl9wZW5kaW5nX2J5X2Z1bmMgKEd0a09iamVjdAkgICAgICAg Km9iamVjdCwKCQkJCQkgICBndWludAkJc2lnbmFsX2lkLAoJCQkJCSAgIGdib29sZWFuCQltYXlf YmVfYmxvY2tlZCwKCQkJCQkgICBHdGtTaWduYWxGdW5jCWZ1bmMsCgkJCQkJICAgZ3BvaW50ZXIJ CWRhdGEpOwpnaW50ICAgZ3RrX3NpZ25hbF9oYW5kbGVyX3BlbmRpbmdfYnlfaWQgICAoR3RrT2Jq ZWN0CSAgICAgICAqb2JqZWN0LAoJCQkJCSAgIGd1aW50CQloYW5kbGVyX2lkLAoJCQkJCSAgIGdi b29sZWFuCQltYXlfYmVfYmxvY2tlZCk7Cmd1aW50ICBndGtfc2lnbmFsX2FkZF9lbWlzc2lvbl9o b29rCSAgKGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgR3RrRW1pc3Npb25Ib29rCWhvb2tfZnVu YywKCQkJCQkgICBncG9pbnRlciAgICAgICAJZGF0YSk7Cmd1aW50ICBndGtfc2lnbmFsX2FkZF9l bWlzc2lvbl9ob29rX2Z1bGwgIChndWludAkJc2lnbmFsX2lkLAoJCQkJCSAgIEd0a0VtaXNzaW9u SG9vawlob29rX2Z1bmMsCgkJCQkJICAgZ3BvaW50ZXIgICAgICAgCWRhdGEsCgkJCQkJICAgR0Rl c3Ryb3lOb3RpZnkJZGVzdHJveSk7CnZvaWQgICBndGtfc2lnbmFsX3JlbW92ZV9lbWlzc2lvbl9o b29rCSAgKGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgZ3VpbnQJCWhvb2tfaWQpOwoKIAoKCgpH dGtTaWduYWxRdWVyeSogZ3RrX3NpZ25hbF9xdWVyeQkgIChndWludAkJc2lnbmFsX2lkKTsKCgog CnZvaWQgICBndGtfc2lnbmFsX2luaXQJCQkgICh2b2lkKTsKZ3VpbnQgIGd0a19zaWduYWxfbmV3 CQkJICAoY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0a1NpZ25hbFJ1blR5cGUJ c2lnbmFsX2ZsYWdzLAoJCQkJCSAgIEd0a1R5cGUJCW9iamVjdF90eXBlLAoJCQkJCSAgIGd1aW50 CQlmdW5jdGlvbl9vZmZzZXQsCgkJCQkJICAgR3RrU2lnbmFsTWFyc2hhbGxlcgltYXJzaGFsbGVy LAoJCQkJCSAgIEd0a1R5cGUJCXJldHVybl92YWwsCgkJCQkJICAgZ3VpbnQJCW5wYXJhbXMsCgkJ CQkJICAgLi4uKTsKZ3VpbnQgIGd0a19zaWduYWxfbmV3dgkJCSAgKGNvbnN0IGdjaGFyCSAgICAg ICAqbmFtZSwKCQkJCQkgICBHdGtTaWduYWxSdW5UeXBlCXNpZ25hbF9mbGFncywKCQkJCQkgICBH dGtUeXBlCQlvYmplY3RfdHlwZSwKCQkJCQkgICBndWludAkJZnVuY3Rpb25fb2Zmc2V0LAoJCQkJ CSAgIEd0a1NpZ25hbE1hcnNoYWxsZXIJbWFyc2hhbGxlciwKCQkJCQkgICBHdGtUeXBlCQlyZXR1 cm5fdmFsLAoJCQkJCSAgIGd1aW50CQlucGFyYW1zLAoJCQkJCSAgIEd0a1R5cGUJICAgICAgICpw YXJhbXMpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0CQkJICAoR3RrT2JqZWN0CSAgICAgICAqb2Jq ZWN0LAoJCQkJCSAgIGd1aW50CQlzaWduYWxfaWQsCgkJCQkJICAgLi4uKTsKdm9pZCAgIGd0a19z aWduYWxfZW1pdF9ieV9uYW1lCQkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QsCgkJCQkJICAg Y29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIC4uLik7CnZvaWQgICBndGtfc2lnbmFs X2VtaXR2CQkJICAoR3RrT2JqZWN0ICAgICAgICAgICAqb2JqZWN0LAoJCQkJCSAgIGd1aW50ICAg ICAgICAgICAgICAgIHNpZ25hbF9pZCwKCQkJCQkgICBHdGtBcmcgICAgICAgICAgICAgICpwYXJh bXMpOwp2b2lkICAgZ3RrX3NpZ25hbF9lbWl0dl9ieV9uYW1lCQkgIChHdGtPYmplY3QgICAgICAg ICAgICpvYmplY3QsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAgICAgICpuYW1lLAoJCQkJCSAgIEd0 a0FyZyAgICAgICAgICAgICAgKnBhcmFtcyk7CiAKdm9pZCAgIGd0a19zaWduYWxfaGFuZGxlcnNf ZGVzdHJveQkgIChHdGtPYmplY3QJICAgICAgICpvYmplY3QpOwp2b2lkICAgZ3RrX3NpZ25hbF9z ZXRfZnVuY3MJCSAgKEd0a1NpZ25hbE1hcnNoYWwJbWFyc2hhbF9mdW5jLAoJCQkJCSAgIEd0a1Np Z25hbERlc3Ryb3kJZGVzdHJveV9mdW5jKTsKICAgICAgIAoKCgp9CgoKCgojIDExICIvb3B0L2d0 ay9pbmNsdWRlL2d0ay0tL3Byb3h5LmgiIDIKCgpuYW1lc3BhY2UgR3RrCnsKCnVzaW5nIFNpZ0M6 OkNvbm5lY3Rpb247CnVzaW5nIFNpZ0M6Om1hbmFnZTsKCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAoKIApjbGFzcyBPYmplY3Q7CgpzdHJ1Y3QgUHJveHlOb2RlIDogcHVibGljIFNp Z0M6OlNsb3ROb2RlCiAgewogICBzdGF0aWMgdm9pZCBjb25uZWN0KE9iamVjdCosCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciosCiAgICAgICAgICAgICAgICAgICAgICAgR3RrU2ln bmFsRnVuYywKICAgICAgICAgICAgICAgICAgICAgICBTaWdDOjpTbG90RGF0YSosCiAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCk7CiAgIHN0YXRpYyB2b2lkIG5vdGlmeShncG9pbnRlcik7Cgog ICBHdGtPYmplY3QgKm9ial87CiAgIFNpZ0M6OlNsb3REYXRhKiBzbG90XzsKICAgdm9pZCogY2Fs bGJhY2tfOwogICBpbnQgY29ubmlkXzsKCiAgIFByb3h5Tm9kZSgpIHt9CiAgIHZpcnR1YWwgflBy b3h5Tm9kZSgpOwogIH07CgoKCiAKCgoKdGVtcGxhdGUgPGNsYXNzIFIsCiAgICAgICAgICBjbGFz cyBPYmosY2xhc3MgZ09iaixpbnQgaW5kZXg+CmNsYXNzIFByb3h5U2lnbmFsMAogIHsKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBTaWdDOjpDYWxsYmFjazA8Uj4gQ2FsbGJhY2s7CiAgICAgIHR5 cGVkZWYgU2lnQzo6U2xvdDA8Uj4gU2xvdFR5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgT2Jq ICpvYmo7CgoKCgoKCiAgICAgIHR5cGVkZWYgUiBSVHlwZTsKCgoKCiAgICAgIHN0YXRpYyBSVHlw ZSBndGtfY2FsbGJhY2soR3RrT2JqZWN0Kix2b2lkICpkKQogICAgICAgIHsKICAgICAgICAgIFBy b3h5Tm9kZSAqbm9kZT0oUHJveHlOb2RlKilkOwogICAgICAgICAgQ2FsbGJhY2sqIGRhdGE9KENh bGxiYWNrKikobm9kZS0+Y2FsbGJhY2tfKTsKICAgICAgICAgIHJldHVybiBkYXRhLT5jYWxsKCk7 CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBT bG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgp OwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3Rr X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsK ICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2Fm dGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEq IGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2ln bmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJl dHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLAogICAgICAgICAgY2xh c3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09i aiopPgpjbGFzcyBFbWl0UHJveHlTaWduYWwwCiAgOiBwdWJsaWMgUHJveHlTaWduYWwwIAogICAg PFIsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94 eVNpZ25hbDA8UixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYg U2lnQzo6U2xvdDA8Uj4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoy PHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAg ICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCog ZCkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0 dXJuIGRhdGEtPm9iai0+ZW1pdCgpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIFNsb3RU eXBlIHNsb3QoKQogICAgICAgIHsKICAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiB0bXA9bWFuYWdl KG5ldyBTaWdDOjpTbG90RGF0YSgpKTsKICAgICAgICAgIERhdGEmIGRhdGE9cmVpbnRlcnByZXRf Y2FzdDxEYXRhJj4odG1wLT5kYXRhXyk7CiAgICAgICAgICBkYXRhLmNhbGxiYWNrPSZjYWxsYmFj azsKICAgICAgICAgIGRhdGEub2JqPXRoaXM7CiAgICAgICAgICBTaWdDOjpTY29wZU5vZGUqIG5v ZGU9dG1wLT5yZWNlaXZlcigpOwogICAgICAgICAgb2JqLT5yZWdpc3Rlcl9kYXRhKG5vZGUpOwog ICAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgICB9CgogICAgICBSVHlwZSBlbWl0KCkKICAgICAg ICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSVHlwZSAoKikoZ09iaiopPgog ICAgICAgICAgICAoZW1pdF9mdW5jKSAob2JqLT5ndGtvYmooKSk7CiAgICAgICAgfQoKICAgICAg UlR5cGUgb3BlcmF0b3IoKSgpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8UlR5cGUgKCopKGdPYmoqKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rr b2JqKCkpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAx LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNp Z25hbDEKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2sxPFIsUDE+ IENhbGxiYWNrOwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3QxPFIsUDE+IFNsb3RUeXBlOwoKCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7 CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsdm9p ZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsK ICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAg ICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAg ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAg ICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5l Y3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5k ZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAg fQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAg ICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5 Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25h bF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAg ICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmos aW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEpPgpjbGFzcyBFbWl0 UHJveHlTaWduYWwxCiAgOiBwdWJsaWMgUHJveHlTaWduYWwxIAogICAgPFIsUDEsT2JqLGdPYmos aW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDE8UixQ MSxPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xv dDE8UixQMT4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVu YW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBl ZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBw MSkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0 dXJuIGRhdGEtPm9iai0+ZW1pdChwMSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xv dFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5h Z2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJl dF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxi YWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSog bm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7 CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEp CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdP YmoqLFAxKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEpOwogICAg ICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9yKCkoUDEgcDEpCiAgICAgICAgewogICAgICAgICAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxKT4KICAgICAgICAgICAg KGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLAogICAgICAgICAgY2xhc3MgT2JqLGNs YXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDIKICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2syPFIsUDEsUDI+IENhbGxiYWNrOwogICAgICB0eXBl ZGVmIFNpZ0M6OlNsb3QyPFIsUDEsUDI+IFNsb3RUeXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAg IE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMg UlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIsdm9pZCAqZCkKICAgICAg ICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENh bGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1 cm4gZGF0YS0+Y2FsbChwMSxwMik7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5l Y3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6 OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkg ICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAg Q29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAg ICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29u bmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tp bmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkg ICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxj bGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmos aW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIpPgpjbGFzcyBF bWl0UHJveHlTaWduYWwyCiAgOiBwdWJsaWMgUHJveHlTaWduYWwyIAogICAgPFIsUDEsUDIsT2Jq LGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25h bDI8UixQMSxQMixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYg U2lnQzo6U2xvdDI8UixQMSxQMj4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERh dGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToK CgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2so dm9pZCogZCxQMSBwMSxQMiBwMikKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRh KilkOwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMik7CiAgICAgICAgfQoK ICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2ln Qzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAg RGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAg IGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAg ICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmot PnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAg ICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJl aW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyKT4KICAgICAgICAgICAgKGVtaXRf ZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJh dG9yKCkoUDEgcDEsUDIgcDIpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9i ai0+Z3Rrb2JqKCkscDEscDIpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFz cyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz IGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDMKICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2szPFIsUDEsUDIsUDM+IENhbGxiYWNrOwogICAgICB0eXBl ZGVmIFNpZ0M6OlNsb3QzPFIsUDEsUDIsUDM+IFNsb3RUeXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0 aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIsUDMgcDMsdm9pZCAq ZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAg ICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAg ICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxwMixwMyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoK CiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAg ICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNv bm5lY3Qob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNb aW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAg ICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQog ICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFBy b3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNp Z25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJ CSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsK CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLAogICAgICAgICAg Y2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYyko Z09iaiosUDEsUDIsUDMpPgpjbGFzcyBFbWl0UHJveHlTaWduYWwzCiAgOiBwdWJsaWMgUHJveHlT aWduYWwzIAogICAgPFIsUDEsUDIsUDMsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDM8UixQMSxQMixQMyxPYmosZ09iaixpbmRleCxl bWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDM8UixQMSxQMixQMz4gU2xv dFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBl OjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7 CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBw MykKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAgcmV0 dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAg ICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRt cD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWlu dGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9 JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3Bl Tm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEo bm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQo UDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzKT4KICAgICAgICAgICAgKGVtaXRfZnVuYykg KG9iai0+Z3Rrb2JqKCkscDEscDIscDMpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9y KCkoUDEgcDEsUDIgcDIsUDMgcDMpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw cmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzKT4KICAgICAgICAgICAgKGVtaXRfZnVu YykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMpOwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBs YXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAgICAg ICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDQKICB7 CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s0PFIsUDEsUDIsUDMsUDQ+ IENhbGxiYWNrOwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3Q0PFIsUDEsUDIsUDMsUDQ+IFNsb3RU eXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVm IFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCos UDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsdm9pZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94 eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxs YmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxw MixwMyxwNCk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVj dChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBk PXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25h bEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAg IGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBj b25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6 U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAg ICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAg ICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz IFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz IGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIsUDMs UDQpPgpjbGFzcyBFbWl0UHJveHlTaWduYWw0CiAgOiBwdWJsaWMgUHJveHlTaWduYWw0IAogICAg PFIsUDEsUDIsUDMsUDQsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBl ZGVmIEVtaXRQcm94eVNpZ25hbDQ8UixQMSxQMixQMyxQNCxPYmosZ09iaixpbmRleCxlbWl0X2Z1 bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDQ8UixQMSxQMixQMyxQND4gU2xvdFR5 cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpG dW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK CgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ NCBwNCkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilkOwogICAgICAgICAg cmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCk7CiAgICAgICAgfQoKICAgIHB1Ymxp YzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAgICAgICAgU2lnQzo6U2xvdERh dGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0 YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2Fs bGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6 OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVy X2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBl IGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu IHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0KT4KICAgICAgICAg ICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQpOwogICAgICAgIH0KCiAg ICAgIFJUeXBlIG9wZXJhdG9yKCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQpCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAz LFA0KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQp OwogICAgICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNz IFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNz IGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDUKICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s1PFIsUDEsUDIsUDMsUDQsUDU+IENhbGxiYWNrOwogICAg ICB0eXBlZGVmIFNpZ0M6OlNsb3Q1PFIsUDEsUDIsUDMsUDQsUDU+IFNsb3RUeXBlOwoKCiAgICBw cm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK CgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEgcDEsUDIgcDIs UDMgcDMsUDQgcDQsUDUgcDUsdm9pZCAqZCkKICAgICAgICB7CiAgICAgICAgICBQcm94eU5vZGUg Km5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBkYXRhPShDYWxsYmFjayop KG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+Y2FsbChwMSxwMixwMyxw NCxwNSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENvbm5lY3Rpb24gY29ubmVjdChj b25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNpZ0M6OlNsb3REYXRhKiBkPXMu ZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJCQkgICAgKEd0a1NpZ25hbEZ1 bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwKCQkJICAgIGZh bHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAgICAgQ29ubmVjdGlvbiBjb25u ZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsKICAgICAgICAgU2lnQzo6U2xv dERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6Y29ubmVjdChvYmosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1lc1tpbmRleF0sCgkJCSAgICAo R3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJCQkgICAgdHJ1ZSk7CiAgICAg ICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAx LGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LAogICAgICAgICAgY2xhc3MgT2Jq LGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAgICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEs UDIsUDMsUDQsUDUpPgpjbGFzcyBFbWl0UHJveHlTaWduYWw1CiAgOiBwdWJsaWMgUHJveHlTaWdu YWw1IAogICAgPFIsUDEsUDIsUDMsUDQsUDUsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGlj OgogICAgICB0eXBlZGVmIEVtaXRQcm94eVNpZ25hbDU8UixQMSxQMixQMyxQNCxQNSxPYmosZ09i aixpbmRleCxlbWl0X2Z1bmM+IFNlbGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDU8UixQMSxQ MixQMyxQNCxQNT4gU2xvdFR5cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5 cGVuYW1lIFNsb3RUeXBlOjpGdW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0 eXBlZGVmIFIgUlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQ MSBwMSxQMiBwMixQMyBwMyxQNCBwNCxQNSBwNSkKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBk YXRhPShEYXRhKilkOwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxw NCxwNSk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAg ICAgewogICAgICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3RE YXRhKCkpOwogICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAt PmRhdGFfKTsKICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0 YS5vYmo9dGhpczsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVy KCk7CiAgICAgICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4g dG1wOwogICAgICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQs UDUgcDUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUg KCopKGdPYmoqLFAxLFAyLFAzLFA0LFA1KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+ Z3Rrb2JqKCkscDEscDIscDMscDQscDUpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJhdG9y KCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUpCiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0LFA1KT4KICAg ICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMscDQscDUpOwogICAg ICAgIH0KCiAgfTsKCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNs YXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNsYXNzIFA2LAogICAgICAgICAgY2xhc3MgT2JqLGNs YXNzIGdPYmosaW50IGluZGV4PgpjbGFzcyBQcm94eVNpZ25hbDYKICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgU2lnQzo6Q2FsbGJhY2s2PFIsUDEsUDIsUDMsUDQsUDUsUDY+IENhbGxiYWNr OwogICAgICB0eXBlZGVmIFNpZ0M6OlNsb3Q2PFIsUDEsUDIsUDMsUDQsUDUsUDY+IFNsb3RUeXBl OwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIE9iaiAqb2JqOwoKCgoKCgogICAgICB0eXBlZGVmIFIg UlR5cGU7CgoKCgogICAgICBzdGF0aWMgUlR5cGUgZ3RrX2NhbGxiYWNrKEd0a09iamVjdCosUDEg cDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYsdm9pZCAqZCkKICAgICAgICB7CiAgICAg ICAgICBQcm94eU5vZGUgKm5vZGU9KFByb3h5Tm9kZSopZDsKICAgICAgICAgIENhbGxiYWNrKiBk YXRhPShDYWxsYmFjayopKG5vZGUtPmNhbGxiYWNrXyk7CiAgICAgICAgICByZXR1cm4gZGF0YS0+ Y2FsbChwMSxwMixwMyxwNCxwNSxwNik7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKCiAgICAgIENv bm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmcykKICAgICAgICB7CiAgICAgICAgIFNp Z0M6OlNsb3REYXRhKiBkPXMuZGF0YSgpOwogICAgICAgICBQcm94eU5vZGU6OmNvbm5lY3Qob2Jq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5zaWduYWxfbmFtZXNbaW5kZXhdLAoJ CQkgICAgKEd0a1NpZ25hbEZ1bmMpZ3RrX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgZCwKCQkJICAgIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfQoKICAg ICAgQ29ubmVjdGlvbiBjb25uZWN0X2FmdGVyKGNvbnN0IFNsb3RUeXBlICZzKQogICAgICAgIHsK ICAgICAgICAgU2lnQzo6U2xvdERhdGEqIGQ9cy5kYXRhKCk7CiAgICAgICAgIFByb3h5Tm9kZTo6 Y29ubmVjdChvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnNpZ25hbF9uYW1l c1tpbmRleF0sCgkJCSAgICAoR3RrU2lnbmFsRnVuYylndGtfY2FsbGJhY2ssCgkJCSAgICBkLAoJ CQkgICAgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAgfTsKCnRlbXBsYXRl IDxjbGFzcyBSLGNsYXNzIFAxLGNsYXNzIFAyLGNsYXNzIFAzLGNsYXNzIFA0LGNsYXNzIFA1LGNs YXNzIFA2LAogICAgICAgICAgY2xhc3MgT2JqLGNsYXNzIGdPYmosaW50IGluZGV4LAogICAgICAg ICAgUiAoKmVtaXRfZnVuYykoZ09iaiosUDEsUDIsUDMsUDQsUDUsUDYpPgpjbGFzcyBFbWl0UHJv eHlTaWduYWw2CiAgOiBwdWJsaWMgUHJveHlTaWduYWw2IAogICAgPFIsUDEsUDIsUDMsUDQsUDUs UDYsT2JqLGdPYmosaW5kZXg+CiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIEVtaXRQcm94 eVNpZ25hbDY8UixQMSxQMixQMyxQNCxQNSxQNixPYmosZ09iaixpbmRleCxlbWl0X2Z1bmM+IFNl bGY7CiAgICAgIHR5cGVkZWYgU2lnQzo6U2xvdDY8UixQMSxQMixQMyxQNCxQNSxQNj4gU2xvdFR5 cGU7CiAgICAgIHR5cGVkZWYgU2lnQzo6Q2FsbERhdGFPYmoyPHR5cGVuYW1lIFNsb3RUeXBlOjpG dW5jLFNlbGY+IERhdGE7CgogICAgcHJpdmF0ZToKCgogICAgICB0eXBlZGVmIFIgUlR5cGU7CgoK CgogICAgICBzdGF0aWMgUlR5cGUgY2FsbGJhY2sodm9pZCogZCxQMSBwMSxQMiBwMixQMyBwMyxQ NCBwNCxQNSBwNSxQNiBwNikKICAgICAgICB7CiAgICAgICAgICBEYXRhKiBkYXRhPShEYXRhKilk OwogICAgICAgICAgcmV0dXJuIGRhdGEtPm9iai0+ZW1pdChwMSxwMixwMyxwNCxwNSxwNik7CiAg ICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgU2xvdFR5cGUgc2xvdCgpCiAgICAgICAgewogICAg ICAgICAgU2lnQzo6U2xvdERhdGEqIHRtcD1tYW5hZ2UobmV3IFNpZ0M6OlNsb3REYXRhKCkpOwog ICAgICAgICAgRGF0YSYgZGF0YT1yZWludGVycHJldF9jYXN0PERhdGEmPih0bXAtPmRhdGFfKTsK ICAgICAgICAgIGRhdGEuY2FsbGJhY2s9JmNhbGxiYWNrOwogICAgICAgICAgZGF0YS5vYmo9dGhp czsKICAgICAgICAgIFNpZ0M6OlNjb3BlTm9kZSogbm9kZT10bXAtPnJlY2VpdmVyKCk7CiAgICAg ICAgICBvYmotPnJlZ2lzdGVyX2RhdGEobm9kZSk7CiAgICAgICAgICByZXR1cm4gdG1wOwogICAg ICAgIH0KCiAgICAgIFJUeXBlIGVtaXQoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYg cDYpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCop KGdPYmoqLFAxLFAyLFAzLFA0LFA1LFA2KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+ Z3Rrb2JqKCkscDEscDIscDMscDQscDUscDYpOwogICAgICAgIH0KCiAgICAgIFJUeXBlIG9wZXJh dG9yKCkoUDEgcDEsUDIgcDIsUDMgcDMsUDQgcDQsUDUgcDUsUDYgcDYpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UlR5cGUgKCopKGdPYmoqLFAxLFAyLFAzLFA0 LFA1LFA2KT4KICAgICAgICAgICAgKGVtaXRfZnVuYykgKG9iai0+Z3Rrb2JqKCkscDEscDIscDMs cDQscDUscDYpOwogICAgICAgIH0KCiAgfTsKCgoKCn0KCgoKCiMgMzQgIi9vcHQvZ3RrL2luY2x1 ZGUvZ3RrLS0vYmFzZS5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vbWFyc2hhbC5o IiAxCgoKCiAKCgoKZ3VpbnQgZ3RrbW1fc2lnbmFsX3NldF9tYXJzaGFsKGd1aW50LEd0a1NpZ25h bE1hcnNoYWxsZXIpOwpib29sIGd0a21tX2NsZWFyX2lnbm9yZSgpOwp2b2lkIGd0a21tX3NldF9p Z25vcmUoKTsKCiAKCgoKCgoKCgoKCgogICAgCnZvaWQgZ3RrbW1fbWFyc2hhbF9CT09MX19OT05F IChHdGtPYmplY3QgKiBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtT aWduYWxGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBm dW5jX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsK CnZvaWQgZ3RrbW1fbWFyc2hhbF9CT09MX19QT0lOVEVSIChHdGtPYmplY3QgKiBvYmplY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBmdW5jX2RhdGEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsKCnZvaWQgZ3RrbW1fbWFy c2hhbF9CT09MX19QT0lOVEVSX1BPSU5URVJfSU5UX0lOVCAoR3RrT2JqZWN0ICogb2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25h bEZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncG9pbnRlciBmdW5jX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lkIGd0a21tX21hcnNoYWxfQk9P TF9fUE9JTlRFUl9JTlRfSU5UIChHdGtPYmplY3QgKiBvYmplY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25hbEZ1bmMgZnVuYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtBcmcgKiBhcmdzKTsKdm9pZCBn dGttbV9tYXJzaGFsX0JPT0xfX1BPSU5URVJfSU5UX0lOVF9JTlQgKEd0a09iamVjdCAqIG9iamVj dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1NpZ25h bEZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdwb2ludGVyIGZ1bmNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEd0a0FyZyAqIGFyZ3MpOwp2b2lkIGd0a21tX21hcnNoYWxfQk9PTF9fUE9JTlRF Ul9QT0lOVEVSX1BPSU5URVJfUE9JTlRFUiAoR3RrT2JqZWN0ICogb2JqZWN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrU2lnbmFs RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lkIGd0 a21tX21hcnNoYWxfSU5UX19JTlQgKEd0a09iamVjdCAqIG9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHdGtTaWduYWxGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3BvaW50ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0 a0FyZyAqIGFyZ3MpOwoKdm9pZCBndGttbV9tYXJzaGFsX0lOVF9fUE9JTlRFUiAoR3RrT2JqZWN0 ICogb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtTaWduYWxGdW5j IGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGZ1bmNfZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrQXJnICogYXJncyk7Cgp2b2lk IGd0a21tX21hcnNoYWxfSU5UX19QT0lOVEVSX0NIQVJfQ0hBUiAoR3RrT2JqZWN0ICogb2JqZWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrU2lnbmFsRnVu YyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50 ZXIgZnVuY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R3RrQXJnICogYXJncyk7CgoKIyAzNSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9iYXNlLmgiIDIK CgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoK CgpuYW1lc3BhY2UgR3RrCnsKdXNpbmcgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA7 ICAKdXNpbmcgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyA7CnVzaW5nIHN0ZDo6aW5wdXRfaXRl cmF0b3JfdGFnIDsgCnVzaW5nIHN0ZDo6c3RyaW5nIDsgCn0KCgoKIAoKc3RydWN0IF9HdGtPYmpl Y3Q7CgpuYW1lc3BhY2UgR3RrCnsKCgogCmV4dGVybiBHUXVhcmsgcXVhcmtfOwoKIAoKIAoKCgoK CgpjbGFzcyBPYmplY3Q7CmNsYXNzIE9iamVjdENsYXNzOwp0eXBlZGVmIE9iamVjdCogKCpXcmFw X0Z1bmMpKF9HdGtPYmplY3QqKTsKCiAKT2JqZWN0KiB3cmFwX2F1dG8oX0d0a09iamVjdCopOwoK IAp2b2lkIHdyYXBfcmVnaXN0ZXIoY29uc3Qgc3RyaW5nJixXcmFwX0Z1bmMpOwoKIAp0ZW1wbGF0 ZSA8Y2xhc3MgQ3BwPgpDcHAqIHdyYXBfbmV3KHR5cGVuYW1lIENwcDo6QmFzZU9iamVjdFR5cGUq IG8pCiAgewogICByZXR1cm4gKHR5cGVuYW1lIENwcDo6Q3BwQ2xhc3NUeXBlOjp3cmFwX25ldyhv KSk7CiAgfQoKIAogCgoKCgoKCgogCgogCnN0cnVjdCBHdGtCYXNlIHsgfTsKc3RydWN0IEd0a0Jh c2VDbGFzcyB7IH07CgpjbGFzcyBCYXNlOwpzdHJ1Y3QgQmFzZV9DbGFzcwogIHsgCiAgICB0eXBl ZGVmIEJhc2UgQ3BwT2JqZWN0VHlwZTsKICAgIHN0YXRpYyB2b2lkIGNsYXNzX2luaXRfZnVuY3Rp b24oIEd0a0Jhc2VDbGFzcyAqYikKICAgICAgeyh2b2lkKWI7fQogIH07CgogCgoKCgoKCgpjbGFz cyBCYXNlIDogcHVibGljIHZpcnR1YWwgU2lnQzo6T2JqZWN0CgogIHsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBCYXNlICAgICAgICAgIENwcE9iamVjdFR5cGU7CiAgICAgIHR5cGVkZWYgQmFz ZV9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CgogICAgICB+QmFzZSgpOwoKICAgIHByb3RlY3RlZDoK ICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdF9DbGFzczsKICAgICAgc3RhdGljIGludCBnZXRfdHlw ZSgpIHtyZXR1cm4gMDt9CiAgfTsKCiAKCiAKIAogCiAKY2xhc3MgbnN0cmluZyA6IHB1YmxpYyBz dHJpbmcgewogIGJvb2wgbnVsbF87CnB1YmxpYzoKICBleHBsaWNpdCBuc3RyaW5nKCk7CiAgbnN0 cmluZyhzdHJpbmcgc3RyKTsKICAgCiAgbnN0cmluZyhjb25zdCBjaGFyICpzKTsKICB+bnN0cmlu ZygpOwoKICAgCiAgIAogIGNvbnN0IGNoYXIgKiBnY19zdHIoKSBjb25zdDsKCiAgIAogIGludCBu dWxsKCkgIGNvbnN0CiAgICB7cmV0dXJuIG51bGxfO30KfTsKCiAKfSAgCgp0ZW1wbGF0ZSA8Y2xh c3MgVD4gc3RydWN0IEdfTGlzdF9JdGVyYXRvcjsKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBH X0xpc3RfQ29uc3RJdGVyYXRvcjsKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBHX0xpc3RfUmV2 ZXJzZUl0ZXJhdG9yOwoKIAogCgogCmNsYXNzIEdfTGlzdEltcGwKewogIEdMaXN0ICpsaXN0XzsK ICBHX0xpc3RJbXBsKGNvbnN0IEdfTGlzdEltcGwmKTsKcHVibGljOgogIEdfTGlzdEltcGwoKTog bGlzdF8oMCkge30KICB+R19MaXN0SW1wbCgpICAgICAgICAge2dfbGlzdF9mcmVlKGxpc3RfKTt9 CgogIEdMaXN0KiBjb25zdCAmICBsaXN0KCkgY29uc3Qge3JldHVybiBsaXN0Xzt9CiAgR0xpc3Qq JiBsaXN0KCkge3JldHVybiBsaXN0Xzt9ICAKCiAgaW50IGluZGV4X29mKGdwb2ludGVyIGRhdGEp CiAgICB7cmV0dXJuIGdfbGlzdF9pbmRleChsaXN0XyxkYXRhKTt9CiAgaW50IHBvc2l0aW9uKEdM aXN0ICpwb3MpCiAgICB7cmV0dXJuIGdfbGlzdF9wb3NpdGlvbihsaXN0Xyxwb3MpO30KICBHTGlz dCogZmlyc3QoKSBjb25zdAogICAge3JldHVybiBnX2xpc3RfZmlyc3QobGlzdF8pO30KICBHTGlz dCogbGFzdCgpIGNvbnN0CiAgICB7cmV0dXJuIGdfbGlzdF9sYXN0KGxpc3RfKTt9CgogIHNpemVf dCBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIGdfbGlzdF9sZW5ndGgobGlzdF8pOyB9CiAgYm9v bCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplKCk9PTA7IH0KCiAgdm9pZCByZXZlcnNl KCkKICAgIHtsaXN0Xz1nX2xpc3RfcmV2ZXJzZShsaXN0Xyk7fQoKICBHTGlzdCogaW5zZXJ0KEdM aXN0KiBwb3MsZ3BvaW50ZXIgZGF0YSk7CgogIHZvaWQgcmVtb3ZlKGdwb2ludGVyIGRhdGEpCiAg ICB7bGlzdF89Z19saXN0X3JlbW92ZShsaXN0XyxkYXRhKTt9CgogIEdMaXN0KiBlcmFzZShHTGlz dCogcG9zKTsKCiAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgIGdfbGlzdF9mcmVlKGxpc3RfKTsK ICAgICAgbGlzdF89MDsKICAgIH0KfTsKCiAKY2xhc3MgR19MaXN0V3JhcAp7CiAgR0xpc3QqJiBs aXN0XzsKcHVibGljOgogIEdfTGlzdFdyYXAoR0xpc3QqJiBsKSAgICAgICAgICAgOiBsaXN0Xyhs KSAgICAgICB7fQogIEdfTGlzdFdyYXAoY29uc3QgR19MaXN0V3JhcCYgbCkgOiBsaXN0XyhsLmxp c3RfKSB7fQoKICBHTGlzdComIGxpc3QoKSB7cmV0dXJuIGxpc3RfO30KICBHTGlzdCogY29uc3Qm IGxpc3QoKSBjb25zdCB7cmV0dXJuIGxpc3RfO30KCiAgaW50IGluZGV4X29mKGdwb2ludGVyIGRh dGEpCiAgICB7cmV0dXJuIGdfbGlzdF9pbmRleChsaXN0XyxkYXRhKTt9CiAgaW50IHBvc2l0aW9u KEdMaXN0ICpwb3MpCiAgICB7cmV0dXJuIGdfbGlzdF9wb3NpdGlvbihsaXN0Xyxwb3MpO30KICBH TGlzdCogZmlyc3QoKQogICAge3JldHVybiBnX2xpc3RfZmlyc3QobGlzdF8pO30KICBHTGlzdCog bGFzdCgpCiAgICB7cmV0dXJuIGdfbGlzdF9sYXN0KGxpc3RfKTt9CgogIHNpemVfdCBzaXplKCkg Y29uc3QKICAgIHsgcmV0dXJuIGdfbGlzdF9sZW5ndGgobGlzdF8pOyB9CiAgYm9vbCBlbXB0eSgp IGNvbnN0CiAgICB7IHJldHVybiBzaXplKCk9PTA7IH0KCiAgdm9pZCByZXZlcnNlKCkKICAgIHts aXN0Xz1nX2xpc3RfcmV2ZXJzZShsaXN0Xyk7fQoKICBHTGlzdCogaW5zZXJ0KEdMaXN0KiBwb3Ms Z3BvaW50ZXIgZGF0YSk7CgogIHZvaWQgcmVtb3ZlKGdwb2ludGVyIGRhdGEpCiAgICB7bGlzdF89 Z19saXN0X3JlbW92ZShsaXN0XyxkYXRhKTt9CgogIEdMaXN0KiBlcmFzZShHTGlzdCogcG9zKTsK CiAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgIGdfbGlzdF9mcmVlKGxpc3RfKTsKICAgICAgbGlz dF89MDsKICAgIH0KfTsKCiAKIAogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBJbXBsPUdf TGlzdEltcGw+CmNsYXNzIEdfTGlzdAp7CnB1YmxpYzoKICB0eXBlZGVmIEdfTGlzdDxULEltcGw+ ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGY7CiAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8 VD4gICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0 ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgR19MaXN0 X1JldmVyc2VJdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl ZGVmIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IHJldmVyc2VfY29uc3Rf aXRlcmF0b3I7CiAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3R5cGU7Cgpwcml2YXRlOgogIEltcGwgaW1wbDsKICBHX0xpc3QoY29uc3QgU2VsZiYg eCk7CgogIGdwb2ludGVyIHRvX3BvaW50ZXIoY29uc3QgVCYgZCkKICAgIHsgcmV0dXJuIGNvbnN0 X2Nhc3Q8Z3BvaW50ZXImPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqIGNvbnN0Jj4oZCkp OyB9CgpwdWJsaWM6CiAgR19MaXN0KCkgICAgICAgICAgICAgIDogaW1wbCgpICB7fQogIEdfTGlz dChjb25zdCBJbXBsJiBpKSA6IGltcGwoaSkge30KICB+R19MaXN0KCkgICAgICAgICAgICAgICAg ICAgICAgIHt9CgogIEdMaXN0KiAmIGdsaXN0KCkgY29uc3QgeyByZXR1cm4gaW1wbC5saXN0KCk7 IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSAgICAgICAgICAgICB7IHJldHVybiBpdGVyYXRvcihpbXBs Lmxpc3QoKSxpbXBsLmZpcnN0KCkpOyB9CiAgaXRlcmF0b3IgZW5kKCkgICAgICAgICAgICAgICB7 IHJldHVybiBpdGVyYXRvcihpbXBsLmxpc3QoKSwoR0xpc3QqKTApOyB9CiAgY29uc3RfaXRlcmF0 b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcihpbXBsLmxpc3QoKSxpbXBs LmZpcnN0KCkpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgICBjb25zdCB7IHJldHVybiBjb25z dF9pdGVyYXRvcihpbXBsLmxpc3QoKSwoR0xpc3QqKTApOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy YmVnaW4oKSAgICB7IHJldHVybiByZXZlcnNlX2NvbnN0X2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJl dmVyc2VfaXRlcmF0b3IgcmVuZCgpICAgICAgeyByZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRv cihiZWdpbigpKTsgfQogIHJldmVyc2VfY29uc3RfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRvcihlbmQoKSk7fQogIHJldmVyc2VfY29uc3RfaXRl cmF0b3IgcmVuZCgpICAgY29uc3QgeyByZXR1cm4gcmV2ZXJzZV9jb25zdF9pdGVyYXRvcihiZWdp bigpKTt9CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3MsY29uc3QgVCYgZGF0YSkKICAg IHsgcmV0dXJuIGl0ZXJhdG9yKGltcGwubGlzdCgpLGltcGwuaW5zZXJ0KHBvcy5ub2RlLHRvX3Bv aW50ZXIoZGF0YSkpKTsgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBwb3MpCiAgICB7IHJl dHVybiBpdGVyYXRvcihpbXBsLmVyYXNlKHBvcykpO30KICB2b2lkIHJlbW92ZShjb25zdCBUJiBk YXRhKQogICAgeyBpbXBsLnJlbW92ZSh0b19wb2ludGVyKGRhdGEpKTsgfQogIHZvaWQgY2xlYXIo KSB7aW1wbC5jbGVhcigpO30KCiAgdm9pZCBwdXNoX2Zyb250KGNvbnN0IFQmIGRhdGEpIHsgaW5z ZXJ0KGJlZ2luKCksIGRhdGEpOyB9CiAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgZGF0YSkgIHsg aW5zZXJ0KGVuZCgpLCBkYXRhKTsgfQogIHZvaWQgcG9wX2Zyb250KCkgICAgICAgICAgICAgICB7 IGVyYXNlKGJlZ2luKCkpOyB9CiAgdm9pZCBwb3BfYmFjaygpICAgICAgICAgICAgICAgIHsgZXJh c2UoaW1wbC5sYXN0KCkpO30KCiAgdm9pZCByZXZlcnNlKCkgICAgICAgICAgICAgICAgIHsgaW1w bC5yZXZlcnNlKCk7fQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0ICAgICAgICAgeyByZXR1cm4g aW1wbC5zaXplKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4g aW1wbC5lbXB0eSgpOyB9Cgp9OwoKCiAKCgpleHRlcm4gZ3BvaW50ZXIgZ3RrbW1fbnVsbF9wb2lu dGVyOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBHX0xpc3RfSXRlcmF0b3IKewogIHR5cGVk ZWYgR3RrOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwoKICB0eXBlZGVmIFQgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBUKiBwb2ludGVyOwogIHR5 cGVkZWYgVCYgcmVmZXJlbmNlOwoKICBHTGlzdCAqIGNvbnN0ICpoZWFkOwogIEdMaXN0ICogbm9k ZTsKCiAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8VD4gU2VsZjsKCiAgR19MaXN0X0l0ZXJhdG9y KEdMaXN0KiBjb25zdCYgaCxHTGlzdCAqbikgOiBoZWFkKCZoKSAgICAsbm9kZShuKSAgICAgIHt9 CiAgR19MaXN0X0l0ZXJhdG9yKCkgICAgICAgICAgICAgICAgICAgOiBoZWFkKDApICAgICAsbm9k ZSgwKSAgICAgIHt9CiAgR19MaXN0X0l0ZXJhdG9yKGNvbnN0IFNlbGYmIHgpICAgICAgOiBoZWFk KHguaGVhZCksbm9kZSh4Lm5vZGUpIHt9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxmJiB4 KSBjb25zdCB7IHJldHVybiBub2RlID09IHgubm9kZTsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25z dCBTZWxmJiB4KSBjb25zdCB7IHJldHVybiBub2RlICE9IHgubm9kZTsgfQoKICBTZWxmJiAgb3Bl cmF0b3IrKygpCiAgewogICAgaWYgKCFub2RlKQogICAgICBub2RlPWdfbGlzdF9maXJzdCgqaGVh ZCk7CiAgICBlbHNlCiAgICAgIG5vZGU9KEdMaXN0KikoKCBub2RlICkgPyAoKChHTGlzdCAqKSgg bm9kZSApKS0+bmV4dCkgOiBfX251bGwgKSA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBTZWxm IG9wZXJhdG9yKysoaW50KQogIHsKICAgIFNlbGYgdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwog ICAgcmV0dXJuIHRtcDsKICB9CgogIFNlbGYmICBvcGVyYXRvci0tKCkKICB7CiAgICBpZiAoIW5v ZGUpCiAgICAgIG5vZGU9Z19saXN0X2xhc3QoKmhlYWQpOwogICAgZWxzZQogICAgICBub2RlPShH TGlzdCopKCggbm9kZSApID8gKCgoR0xpc3QgKikoIG5vZGUgKSktPnByZXYpIDogX19udWxsICkg OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgU2VsZiBvcGVyYXRvci0tKGludCkKICB7CiAgICBT ZWxmIHRtcCA9ICp0aGlzOwogICAgLS0qdGhpczsKICAgIHJldHVybiB0bXA7CiAgfQoKICByZWZl cmVuY2Ugb3BlcmF0b3IqKCkgIGNvbnN0IAogIHsgCiAgICByZXR1cm4gKFQmKSgobm9kZSk/KCpu b2RlKS5kYXRhOmd0a21tX251bGxfcG9pbnRlcik7IAogIH0KICAKICBwb2ludGVyIG9wZXJhdG9y IC0+ICgpIGNvbnN0IHsgcmV0dXJuICZvcGVyYXRvciooKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IFQ+CnN0cnVjdCBHX1NMaXN0X0l0ZXJhdG9yCnsKICB0eXBlZGVmIEd0azo6Zm9yd2FyZF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiBUICB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgVCogcG9pbnRlcjsKICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCiAgR1NM aXN0ICpub2RlOwogIHR5cGVkZWYgR19TTGlzdF9JdGVyYXRvcjxUPiBTZWxmOwoKICBHX1NMaXN0 X0l0ZXJhdG9yKEdTTGlzdCAqbikgICAgIDogbm9kZShuKSAgICAgIHt9CiAgR19TTGlzdF9JdGVy YXRvcigpICAgICAgICAgICAgICA6IG5vZGUoMCkgICAgICB7fQogIEdfU0xpc3RfSXRlcmF0b3Io Y29uc3QgU2VsZiYgeCkgOiBub2RlKHgubm9kZSkge30KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0geC5ub2RlOyB9CiAgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0geC5ub2RlOyB9CgogIFNl bGYmICBvcGVyYXRvcisrKCkKICB7CiAgICBub2RlID0gKCggbm9kZSApID8gKCgoR1NMaXN0ICop KCBub2RlICkpLT5uZXh0KSA6IF9fbnVsbCApIDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIFNl bGYgb3BlcmF0b3IrKyhpbnQpCiAgewogICAgU2VsZiB0bXAgPSAqdGhpczsKICAgICsrKnRoaXM7 CiAgICByZXR1cm4gdG1wOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpICBjb25zdCB7IHJl dHVybiByZWludGVycHJldF9jYXN0PFQmPigobm9kZSk/KCpub2RlKS5kYXRhOmd0a21tX251bGxf cG9pbnRlcik7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuICZvcGVy YXRvciooKTsgfQp9OwoKIAogCiAKdGVtcGxhdGU8Y2xhc3MgaW1wbCwgY2xhc3MgaW50ZXJmPgpz dHJ1Y3QgR19MaXN0X0NwcF9JdGVyYXRvciB7CiAgdHlwZWRlZiBHdGs6OmlucHV0X2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIGludGVyZiogIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBpbnRlcmYqKiBwb2ludGVyOwogIHR5cGVkZWYgaW50ZXJmKiYgcmVm ZXJlbmNlOwoKICB0eXBlZGVmIEdfTGlzdF9DcHBfSXRlcmF0b3I8aW1wbCxpbnRlcmY+IFNlbGY7 CgogIEdMaXN0ICoqaGVhZDsKICBHTGlzdCAqbm9kZTsKCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0geC5ub2RlOyB9CiAgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0geC5ub2RlOyB9CgogIEdf TGlzdF9DcHBfSXRlcmF0b3IoR0xpc3QqJiBoLEdMaXN0ICpuKSA6IGhlYWQoJmgpICAgICxub2Rl KG4pICAgICAge30KICBHX0xpc3RfQ3BwX0l0ZXJhdG9yKCkgICAgICAgICAgICAgICAgICAgOiBo ZWFkKDApICAgICAsbm9kZSgwKSAgICAgIHt9CiAgR19MaXN0X0NwcF9JdGVyYXRvcihjb25zdCBT ZWxmJiB4KSAgICAgIDogaGVhZCh4LmhlYWQpLG5vZGUoeC5ub2RlKSB7fQoKICB2YWx1ZV90eXBl IG9wZXJhdG9yKigpIGNvbnN0CiAgewogICAgaWYgKG5vZGUgJiYgbm9kZS0+ZGF0YSkKICAgICAg cmV0dXJuIEd0azo6d3JhcChzdGF0aWNfY2FzdDxpbXBsKj4oKCpub2RlKS5kYXRhKSk7CiAgICBy ZXR1cm4gMDsKICB9CgogIFNlbGYmICBvcGVyYXRvcisrKCkKICB7CiAgICBpZiAoIW5vZGUpCiAg ICAgIG5vZGU9Z19saXN0X2ZpcnN0KCpoZWFkKTsKICAgIGVsc2UKICAgICAgbm9kZSA9IChHTGlz dCAqKSgoIG5vZGUgKSA/ICgoKEdMaXN0ICopKCBub2RlICkpLT5uZXh0KSA6IF9fbnVsbCApIDsK ICAgIHJldHVybiAqdGhpczsKICB9CgogIFNlbGYgb3BlcmF0b3IrKyhpbnQpCiAgewogICAgU2Vs ZiB0bXAgPSAqdGhpczsKICAgICsrKnRoaXM7CiAgICByZXR1cm4gdG1wOwogIH0KCiAgU2VsZiYg IG9wZXJhdG9yLS0oKQogIHsKICAgIGlmICghbm9kZSkKICAgICAgbm9kZT1nX2xpc3RfbGFzdCgq aGVhZCk7CiAgICBlbHNlCiAgICAgIG5vZGUgPSAoR0xpc3QgKikoKCBub2RlICkgPyAoKChHTGlz dCAqKSggbm9kZSApKS0+cHJldikgOiBfX251bGwgKSA7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoK ICBTZWxmIG9wZXJhdG9yLS0oaW50KQogIHsKICAgIFNlbGYgdG1wID0gKnRoaXM7CiAgICAtLSp0 aGlzOwogICAgcmV0dXJuIHRtcDsKICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIEI+CnN0cnVjdCBH X0xpc3RfUmV2ZXJzZUl0ZXJhdG9yOiBwcml2YXRlIEIKewogIHR5cGVkZWYgdHlwZW5hbWUgQjo6 aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBC OjpzaXplX3R5cGUgICAgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpkaWZm ZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgQjo6dmFs dWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIEI6OnBvaW50ZXIg ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpyZWZlcmVuY2UgICAgICAg ICByZWZlcmVuY2U7CgogIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVyYXRvcjxCPiAgICBTZWxm OwoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZiYgeCkgY29uc3QgeyByZXR1cm4gQjo6b3Bl cmF0b3I9PSh4KTsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZWxmJiB4KSBjb25zdCB7IHJl dHVybiBCOjpvcGVyYXRvciE9KHgpOyB9CgogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3IoR0xpc3Qq IGNvbnN0JiBoLEdMaXN0ICpuKSA6IEIoaCxuKSB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io KSAgICAgICAgICAgICAgICAgICA6IEIoKSAgICB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io Y29uc3QgU2VsZiYgeCkgICAgICA6IEIoeCkgICB7fQogIEdfTGlzdF9SZXZlcnNlSXRlcmF0b3Io Y29uc3QgQiYgeCkgICAgICAgICA6IEIoeCkgICB7ICsrKCp0aGlzKTsgfQoKICBTZWxmJiBvcGVy YXRvcisrKCkgICB7Qjo6b3BlcmF0b3ItLSgpOyByZXR1cm4gKnRoaXM7fQogIFNlbGYmIG9wZXJh dG9yLS0oKSAgIHtCOjpvcGVyYXRvcisrKCk7IHJldHVybiAqdGhpczt9CiAgU2VsZiBvcGVyYXRv cisrKGludCkge1NlbGYgcz0qdGhpczsgQjo6b3BlcmF0b3ItLSgpOyByZXR1cm4gczt9CiAgU2Vs ZiBvcGVyYXRvci0tKGludCkge1NlbGYgcz0qdGhpczsgQjo6b3BlcmF0b3IrKygpOyByZXR1cm4g czt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSAgY29uc3QgeyByZXR1cm4gQjo6b3BlcmF0b3Iq KCk7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIEI6Om9wZXJhdG9y LT4oKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEI+CnN0cnVjdCBHX0xpc3RfQ29uc3RJdGVyYXRv cjogcHVibGljIEIKewogIHR5cGVkZWYgdHlwZW5hbWUgQjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpzaXplX3R5cGUgICAgICAgICBz aXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBCOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJl bmNlX3R5cGU7CgogIHR5cGVkZWYgY29uc3QgdHlwZW5hbWUgQjo6dmFsdWVfdHlwZSAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIEI6OnBvaW50ZXIgICAgIHBvaW50ZXI7CiAg dHlwZWRlZiBjb25zdCB0eXBlbmFtZSBCOjpyZWZlcmVuY2UgICByZWZlcmVuY2U7CgogIHR5cGVk ZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8Qj4gICAgU2VsZjsKCiAgYm9vbCBvcGVyYXRvcj09KGNv bnN0IFNlbGYmIHgpIGNvbnN0IHsgcmV0dXJuIEI6Om9wZXJhdG9yPT0oeCk7IH0KICBib29sIG9w ZXJhdG9yIT0oY29uc3QgU2VsZiYgeCkgY29uc3QgeyByZXR1cm4gQjo6b3BlcmF0b3IhPSh4KTsg fQoKICBHX0xpc3RfQ29uc3RJdGVyYXRvcihHTGlzdCogY29uc3QmIGgsR0xpc3QgKm4pIDogQiho LG4pIHt9CiAgR19MaXN0X0NvbnN0SXRlcmF0b3IoKSAgICAgICAgICAgICAgICAgICA6IEIoKSAg ICB7fQogIEdfTGlzdF9Db25zdEl0ZXJhdG9yKGNvbnN0IFNlbGYmIHgpICAgICAgOiBCKHgpICAg e30KICBHX0xpc3RfQ29uc3RJdGVyYXRvcihjb25zdCBCJiB4KSAgICAgICAgIDogQih4KSAgIHt9 CgogIFNlbGYmIG9wZXJhdG9yKysoKSAgIHtCOjpvcGVyYXRvcisrKCk7IHJldHVybiAqdGhpczt9 CiAgU2VsZiYgb3BlcmF0b3ItLSgpICAge0I6Om9wZXJhdG9yLS0oKTsgcmV0dXJuICp0aGlzO30K ICBTZWxmIG9wZXJhdG9yKysoaW50KSB7U2VsZiBzPSp0aGlzOyBCOjpvcGVyYXRvcisrKCk7IHJl dHVybiBzO30KICBTZWxmIG9wZXJhdG9yLS0oaW50KSB7U2VsZiBzPSp0aGlzOyBCOjpvcGVyYXRv ci0tKCk7IHJldHVybiBzO30KCiAgdmFsdWVfdHlwZSBvcGVyYXRvciooKSAgY29uc3QgeyByZXR1 cm4gQjo6b3BlcmF0b3IqKCk7IH0KICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0 dXJuIEI6Om9wZXJhdG9yLT4oKTsgfQp9OwoKIAp0eXBlZGVmIEdfTGlzdDxpbnQ+IEdfSW50TGlz dDsKdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8aW50PiBHX0ludExpc3RfSXRlcmF0b3I7CgogCgoK bmFtZXNwYWNlIEd0awp7CgogCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgY29uc3QgY2hhciog Z3RrbW1fdG9fY3N0cmluZyAoY29uc3QgVCYgdCkKICB7IHJldHVybiB0OyB9Cgp0ZW1wbGF0ZSA8 PgppbmxpbmUgY29uc3QgY2hhciogZ3RrbW1fdG9fY3N0cmluZzxzdHJpbmc+KGNvbnN0IHN0cmlu ZyYgdCkKICB7IHJldHVybiB0LmNfc3RyKCk7IH0KCnRlbXBsYXRlIDw+CmlubGluZSBjb25zdCBj aGFyKiBndGttbV90b19jc3RyaW5nPG5zdHJpbmc+KGNvbnN0IG5zdHJpbmcmIHQpCiAgeyByZXR1 cm4gdC5nY19zdHIoKTsgfQoKCm5hbWVzcGFjZSBTQXJyYXlfSGVscGVycwp7Cgp0eXBlZGVmIGNv bnN0IGNoYXIqIGNzdHJpbmc7CgogCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4Kc2l6ZV90IGNv dW50X3N0cmluZ3MoSXRlcmF0b3IgaXRlcikKewogIHNpemVfdCBzID0gMDsKICBmb3IgKDsgKml0 ZXIgIT0gMDsgKytpdGVyLCArK3MpOwogIHJldHVybiBzOwp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xh c3MgSXRlcmF0b3I+CmNvbnN0IGNoYXIqIGNvbnN0KiBjcmVhdGVfYXJyYXkoSXRlcmF0b3IgaXRl ciwgc2l6ZV90IHNpemUpCnsKICBjc3RyaW5nKiBkYXRhID0gbmV3IGNzdHJpbmdbc2l6ZSArIDFd OwogIGRhdGFbc2l6ZV0gPSAwOwogIAogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp dGVyLCArK2kpCiAgICBkYXRhW2ldID0gZ3RrbW1fdG9fY3N0cmluZygqaXRlcik7CgogIHJldHVy biBkYXRhOwp9CgoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBUcmFpdHMKewogIHN0 YXRpYyBib29sIGdldF9vd25lZCgpIHsgcmV0dXJuIHRydWU7IH0KICBzdGF0aWMgY29uc3QgY2hh ciogY29uc3QqIGdldF9kYXRhKGNvbnN0IFQmIHQpCiAgICB7IHJldHVybiBjcmVhdGVfYXJyYXko dC5iZWdpbigpLCB0LnNpemUoKSk7IH0KIHN0YXRpYyBzaXplX3QgZ2V0X3NpemUoY29uc3QgVCYg dCkgeyByZXR1cm4gdC5zaXplKCk7IH0KfTsKCiAKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBU cmFpdHM8VCo+CnsKICBzdGF0aWMgYm9vbCBnZXRfb3duZWQoKSB7IHJldHVybiBmYWxzZTsgfQog IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCogZ2V0X2RhdGEoY29uc3QgVCogdCkKICAgIHsgcmV0 dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPih0KTsgfQogIHN0YXRpYyBzaXplX3Qg Z2V0X3NpemUoY29uc3QgVCogdCkgeyByZXR1cm4gY291bnRfc3RyaW5ncyh0KTsgfQp9OwogCiAK IAogCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3QgTj4Kc3RydWN0IFRyYWl0czxUW05dPiA6IFRy YWl0czxUKj4KewogIHN0YXRpYyBzaXplX3QgZ2V0X3NpemUoY29uc3QgVCopIHsgcmV0dXJuIE4g LSAxOyB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgU0FycmF5CnsKICBTQXJyYXkmIG9w ZXJhdG9yPShjb25zdCBTQXJyYXkmIGMpOyAgCgogIGNvbnN0IGJvb2wgb3duZWRfOwogIGNvbnN0 IHNpemVfdCBzaXplXzsKICBjb25zdCBjc3RyaW5nKiBjb25zdCBkYXRhXzsKCnB1YmxpYzoKICAg CiAgdHlwZWRlZiBjb25zdCBjaGFyKiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgY29uc3QgY2hhciog Y29uc3QqIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3QqIGNvbnN0X2l0ZXJh dG9yOwogIHR5cGVkZWYgY29uc3QgY2hhciogY29uc3QqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z dCBjaGFyKiBjb25zdCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgCiAgU0FycmF5KGNvbnN0 IFNBcnJheSYgYykKICAgIDogb3duZWRfKGZhbHNlKSwgc2l6ZV8oYy5zaXplXyksIGRhdGFfKGMu ZGF0YV8pIHsgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBUPgogIFNBcnJheShjb25zdCBUJiB0 KQogICAgOiBvd25lZF8oVHJhaXRzPFQ+OjpnZXRfb3duZWQoKSksIHNpemVfKFRyYWl0czxUPjo6 Z2V0X3NpemUodCkpLAogICAgIGRhdGFfKFRyYWl0czxUPjo6Z2V0X2RhdGEodCkpCiAgICB7IH0K IyA3MjkgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYmFzZS5oIgoKCiAgIAogIHRlbXBsYXRlIDxj bGFzcyBJdGVyYXRvcj4KICBTQXJyYXkoSXRlcmF0b3IgYixJdGVyYXRvciBlKQogICAgOiBvd25l ZF8odHJ1ZSksIHNpemVfKHN0ZDo6ZGlzdGFuY2UoYiwgZSkpLCBkYXRhXyhjcmVhdGVfYXJyYXko Yiwgc2l6ZV8pKQogICAgeyB9CgogIH5TQXJyYXkoKQogICAgeyBpZiAob3duZWRfKSBkZWxldGUg W10gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KGRhdGFfKTsgfQoKICBvcGVyYXRvciBjb25zdCBj aGFyKiogKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPihkYXRh Xyk7IH0KCiAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQoKICBjb25zdCBj aGFyKiBjb25zdCogYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gZGF0YV87IH0KICBjb25zdCBj aGFyKiBjb25zdCogZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGRhdGFfICsgc2l6ZV87IH0KICBj b25zdCBjaGFyKiBvcGVyYXRvcltdKHNpemVfdCBuKSBjb25zdAogICAgeyByZXR1cm4gZGF0YV9b bl07IH0KfTsKICAKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTQXJyYXkmIHgsIGNvbnN0 IFNBcnJheSYgeSkKewogIHJldHVybiB4LmJlZ2luKCkgPT0geS5iZWdpbigpOwp9CiAgCn0gIAoK dXNpbmcgU0FycmF5X0hlbHBlcnM6OlNBcnJheTsKCiMgODM0ICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0tL2Jhc2UuaCIKCgogCgoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIGl0ZXJhdG9yPgpHTGlzdCog Z3RrbW1fYnVpbGRfZ2xpc3QoaXRlcmF0b3Igc3RhcnQsaXRlcmF0b3Igc3RvcCkKICB7CiAgICBH TGlzdCAqaXRlbXM9MDsKICAgIHdoaWxlIChzdGFydCE9c3RvcCkKICAgICAgewogICAgICAgIGlm ICgqc3RhcnQpCiAgICAgICAgICB7CiAgICAgICAgICAgaWYgKCFpdGVtcykKICAgICAgICAgICAg IGl0ZW1zPWdfbGlzdF9hcHBlbmQoaXRlbXMsKCpzdGFydCktPmd0a29iaigpKTsKICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGdfbGlzdF9hcHBlbmQoaXRlbXMs KCpzdGFydCktPmd0a29iaigpKTsKICAgICAgICAgICAgICAgaXRlbXM9aXRlbXMtPm5leHQ7CiAg ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgKytzdGFydDsKICAgICAgfQogICAgaWYg KGl0ZW1zKSByZXR1cm4gZ19saXN0X2ZpcnN0KGl0ZW1zKTsKICAgIHJldHVybiAwOwogIH0KCn0g IAoKCgojIDMwICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL29iamVjdC5oIiAyCgoKCnZvaWQgZ3Rr bW1fb2JqZWN0X2Rlc3Ryb3koR3RrT2JqZWN0KiBvKTsKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBP YmplY3Q7CmNsYXNzIE9iamVjdF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpPYmplY3Qg KndyYXAgKEd0a09iamVjdCAqbyk7IH0KbmFtZXNwYWNlIEd0awp7CgpjbGFzcyBBcmdCYXNlOwoK Y2xhc3MgV2lkZ2V0OwoKIApjbGFzcyBPYmplY3QgOiBwdWJsaWMgQmFzZQp7CgpwdWJsaWM6CiAg dHlwZWRlZiBPYmplY3QgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVmIE9iamVjdF9D bGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBHdGtPYmplY3QgICAgICAgICAgIEJhc2VP YmplY3RUeXBlOwogIHR5cGVkZWYgR3RrT2JqZWN0Q2xhc3MgICAgICBCYXNlQ2xhc3NUeXBlOwoK cHJpdmF0ZToKICBmcmllbmQgY2xhc3MgT2JqZWN0X0NsYXNzOwogIHN0YXRpYyBDcHBDbGFzc1R5 cGUgb2JqZWN0X2NsYXNzOwoKICBPYmplY3QoY29uc3QgT2JqZWN0Jik7CiAgT2JqZWN0JiBvcGVy YXRvcj0oY29uc3QgT2JqZWN0Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9j bGFzcygpOwogIGV4cGxpY2l0IE9iamVjdChHdGtPYmplY3QgKmNhc3RpdGVtKTsKCnB1YmxpYzoK ICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a09iamVjdCogZ3Rrb2JqKCkgICAgICAg ICAgICAgeyByZXR1cm4gKEd0a09iamVjdCopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtPYmpl Y3QqIGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtPYmplY3QqKShndGtvYmplY3QpOyB9CiAg c3RhdGljIGJvb2wgaXNBKE9iamVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBj aGFyKiBjb25zdCBzaWduYWxfbmFtZXNbXTsKCiAgdmlydHVhbCB+T2JqZWN0KCk7Cgpwcml2YXRl OgoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgR3RrOjpXaWRnZXQ7CiAgIAoKcHVibGljOgoKICBn dWludCogc2lnbmFscygpIHsgcmV0dXJuICgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwg ICYmICggKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVs bCAgJiYgKChHdGtGdW5kYW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3Rr T2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09 IEdUS19UWVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChH dGtPYmplY3QqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAo ICBndGtvYmooKSAgKSwgR1RLX1RZUEVfT0JKRUNUKSApIC0+a2xhc3MtPnNpZ25hbHMpIDsgfQog IGdpbnQgbnNpZ25hbHMoKSB7IHJldHVybiAoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251 bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0 a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9 PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmtsYXNzLT5uc2lnbmFscykgOyB9 CgogIGd1aW50IHR5cGUoKSB7IHJldHVybiAoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251 bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0 a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9 PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmtsYXNzLT50eXBlKSA7IH0KCiAg IAogICAKICAgCiAgIAogICAKCiAgdm9pZCBkZXN0cm95XygpOwoKCiAgdm9pZCBzZXRfdXNlcl9k YXRhKGdwb2ludGVyIGRhdGEpOwoKICBncG9pbnRlciBnZXRfdXNlcl9kYXRhKCkgY29uc3Q7CgoK CiAgdm9pZCBzZXRfZGF0YShjb25zdCBzdHJpbmcmIGtleSxncG9pbnRlciBkYXRhKTsKCiAgZ3Bv aW50ZXIgZ2V0X2RhdGEoY29uc3Qgc3RyaW5nJiBrZXkpIGNvbnN0OwoKICBncG9pbnRlciBnZXRf ZGF0YV9ieV9pZChHUXVhcmsgZGF0YV9pZCkgY29uc3Q7CgogICAKICAgCiAgIAoKICAgCiAgIAog ICAKICAgCgoKCgoKICB2b2lkIHNldF9kYXRhX2Z1bGwoY29uc3Qgc3RyaW5nJiBrZXksZ3BvaW50 ZXIgZGF0YSxHdGtEZXN0cm95Tm90aWZ5IGRlc3Ryb3kpOwoKCgogIHZvaWQgc2V0X2RhdGFfYnlf aWQoR1F1YXJrIGRhdGFfaWQsZ3BvaW50ZXIgZGF0YSk7CgoKCgoKICB2b2lkIHNldF9kYXRhX2J5 X2lkX2Z1bGwoR1F1YXJrIGRhdGFfaWQsZ3BvaW50ZXIgZGF0YSxHdGtEZXN0cm95Tm90aWZ5IGRl c3Ryb3kpOwoKCiAgdm9pZCByZW1vdmVfZGF0YShjb25zdCBzdHJpbmcmIGtleSk7CgogIHZvaWQg cmVtb3ZlX25vX25vdGlmeShjb25zdCBzdHJpbmcmIGtleSk7CgogIHZvaWQgcmVtb3ZlX2RhdGFf YnlfaWQoR1F1YXJrIGRhdGFfaWQpOwoKICB2b2lkIHJlbW92ZV9ub19ub3RpZnlfYnlfaWQoR1F1 YXJrIGRhdGFfaWQpOwoKCiAgIAoKICAgCiAgdmlydHVhbCB2b2lkIHNldF9keW5hbWljKCk7Cgpw cm90ZWN0ZWQ6CiAgR3RrT2JqZWN0ICpndGtvYmplY3Q7CgogICAKICB2aXJ0dWFsIHZvaWQgcmVm ZXJlbmNlKCk7CiAgdmlydHVhbCB2b2lkIHVucmVmZXJlbmNlKCk7CgogICAKICBib29sIHJlZmVy ZW5jZWRfOwogIGJvb2wgZGVzdHJveWVkXzsKCiAgIAoKICBzdGF0aWMgdm9pZCBkZXN0cm95X25v dGlmeV8oZ3BvaW50ZXIgcyk7CgoKCgoKICB2b2lkIHdlYWtyZWYoR3RrRGVzdHJveU5vdGlmeSBu b3RpZnksZ3BvaW50ZXIgZGF0YSk7CgoKCgogIHZvaWQgd2Vha3VucmVmKEd0a0Rlc3Ryb3lOb3Rp Znkgbm90aWZ5LGdwb2ludGVyIGRhdGEpOwoKICBzdGF0aWMgdm9pZCBndGttbV9zaWdzZWd2KGNv bnN0IGNoYXIgKm5hbWUpOwoKcHJvdGVjdGVkOgogIHZvaWQgc2V0X3R5cGUoR3RrVHlwZSB0eXBl KTsKCnB1YmxpYzoKCiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIG9iamVjdF9z ZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VP YmplY3RUeXBlLDAsJmd0a21tX29iamVjdF9kZXN0cm95PiBkZXN0cm95OwogICAgfTsKCnByb3Rl Y3RlZDoKICAgCgp9OwoKIAppbmxpbmUgR3RrT2JqZWN0KiB1bndyYXAoR3RrOjpPYmplY3Qqbykg eyByZXR1cm4gbz9vLT5ndGtvYmooKTowOyB9CgoKfQoKCiAKIAogCiAKIAogCiAKIAogCiAKCiAK IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCgojIDMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0t L3dpZGdldC5oIiAyCgogCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkbmQu aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1 ZGUvZ3RrLTEuMi9ndGsvZ3Rrd2lkZ2V0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYWNjZWxncm91cC5oIiAx CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoK CnR5cGVkZWYgc3RydWN0IF9HdGtBY2NlbEdyb3VwCUd0a0FjY2VsR3JvdXA7CnR5cGVkZWYgc3Ry dWN0IF9HdGtBY2NlbEVudHJ5CUd0a0FjY2VsRW50cnk7Cgp0eXBlZGVmIGVudW0KewogICAKCgog IEdUS19BQ0NFTF9WSVNJQkxFICAgICAgICA9IDEgPDwgMCwKICAgCgoKICBHVEtfQUNDRUxfU0lH TkFMX1ZJU0lCTEUgPSAxIDw8IDEsCiAgIAoKCiAgR1RLX0FDQ0VMX0xPQ0tFRCAgICAgICAgID0g MSA8PCAyLAogIEdUS19BQ0NFTF9NQVNLICAgICAgICAgICA9IDB4MDcKfSBHdGtBY2NlbEZsYWdz OwoKc3RydWN0IF9HdGtBY2NlbEdyb3VwCnsKICBndWludAkgICAgICAgICAgcmVmX2NvdW50Owog IGd1aW50CSAgICAgICAgICBsb2NrX2NvdW50OwogIEdka01vZGlmaWVyVHlwZSBtb2RpZmllcl9t YXNrOwogIEdTTGlzdCAgICAgICAgICphdHRhY2hfb2JqZWN0czsKfTsKCnN0cnVjdCBfR3RrQWNj ZWxFbnRyeQp7CiAgIAoKICBHdGtBY2NlbEdyb3VwCQkqYWNjZWxfZ3JvdXA7CiAgZ3VpbnQJCQkg YWNjZWxlcmF0b3Jfa2V5OwogIEdka01vZGlmaWVyVHlwZQkgYWNjZWxlcmF0b3JfbW9kczsKICAK ICBHdGtBY2NlbEZsYWdzCQkgYWNjZWxfZmxhZ3M7CiAgR3RrT2JqZWN0CQkqb2JqZWN0OwogIGd1 aW50CQkJIHNpZ25hbF9pZDsKfTsKCgogCgpnYm9vbGVhbiBndGtfYWNjZWxlcmF0b3JfdmFsaWQJ CSAgICAgIChndWludAkgICAgICAgIGtleXZhbCwKCQkJCQkgICAgICAgR2RrTW9kaWZpZXJUeXBl ICBtb2RpZmllcnMpOwp2b2lkCSBndGtfYWNjZWxlcmF0b3JfcGFyc2UJCSAgICAgIChjb25zdCBn Y2hhciAgICAgKmFjY2VsZXJhdG9yLAoJCQkJCSAgICAgICBndWludAkgICAgICAgKmFjY2VsZXJh dG9yX2tleSwKCQkJCQkgICAgICAgR2RrTW9kaWZpZXJUeXBlICphY2NlbGVyYXRvcl9tb2RzKTsK Z2NoYXIqCSBndGtfYWNjZWxlcmF0b3JfbmFtZQkJICAgICAgKGd1aW50CSAgICAgICAgYWNjZWxl cmF0b3Jfa2V5LAoJCQkJCSAgICAgICBHZGtNb2RpZmllclR5cGUgIGFjY2VsZXJhdG9yX21vZHMp Owp2b2lkCSBndGtfYWNjZWxlcmF0b3Jfc2V0X2RlZmF1bHRfbW9kX21hc2sgKEdka01vZGlmaWVy VHlwZSAgZGVmYXVsdF9tb2RfbWFzayk7Cmd1aW50CSBndGtfYWNjZWxlcmF0b3JfZ2V0X2RlZmF1 bHRfbW9kX21hc2sgKHZvaWQpOwoKCiAKCkd0a0FjY2VsR3JvdXAqICBndGtfYWNjZWxfZ3JvdXBf bmV3CSAgICAgIAkodm9pZCk7Ckd0a0FjY2VsR3JvdXAqICBndGtfYWNjZWxfZ3JvdXBfZ2V0X2Rl ZmF1bHQgICAgCSh2b2lkKTsKR3RrQWNjZWxHcm91cCogIGd0a19hY2NlbF9ncm91cF9yZWYJICAg ICAJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwKTsKdm9pZAkgICAgICAgIGd0a19hY2NlbF9n cm91cF91bnJlZgkgICAgICAJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwKTsKdm9pZAkJZ3Rr X2FjY2VsX2dyb3VwX2xvY2sJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCk7CnZvaWQJCWd0 a19hY2NlbF9ncm91cF91bmxvY2sJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCk7Cmdib29s ZWFuICAgICAgICBndGtfYWNjZWxfZ3JvdXBzX2FjdGl2YXRlICAgICAgCShHdGtPYmplY3QJKm9i amVjdCwKCQkJCQkJIGd1aW50CQkgYWNjZWxfa2V5LAoJCQkJCQkgR2RrTW9kaWZpZXJUeXBlIGFj Y2VsX21vZHMpOwoKIAoKZ2Jvb2xlYW4gICAgICAgIGd0a19hY2NlbF9ncm91cF9hY3RpdmF0ZQko R3RrQWNjZWxHcm91cAkqYWNjZWxfZ3JvdXAsCgkJCQkJCSBndWludAkJIGFjY2VsX2tleSwKCQkJ CQkJIEdka01vZGlmaWVyVHlwZSBhY2NlbF9tb2RzKTsKdm9pZAkJZ3RrX2FjY2VsX2dyb3VwX2F0 dGFjaAkJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgR3RrT2JqZWN0CSpvYmpl Y3QpOwp2b2lkCQlndGtfYWNjZWxfZ3JvdXBfZGV0YWNoCQkoR3RrQWNjZWxHcm91cAkqYWNjZWxf Z3JvdXAsCgkJCQkJCSBHdGtPYmplY3QJKm9iamVjdCk7CgogCgpHdGtBY2NlbEVudHJ5KiAJZ3Rr X2FjY2VsX2dyb3VwX2dldF9lbnRyeSAgICAgIAkoR3RrQWNjZWxHcm91cCAgKmFjY2VsX2dyb3Vw LAoJCQkJCQkgZ3VpbnQgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkJIEdka01vZGlmaWVyVHlw ZSBhY2NlbF9tb2RzKTsKdm9pZAkJZ3RrX2FjY2VsX2dyb3VwX2xvY2tfZW50cnkJKEd0a0FjY2Vs R3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJCSBHZGtN b2RpZmllclR5cGUgYWNjZWxfbW9kcyk7CnZvaWQJCWd0a19hY2NlbF9ncm91cF91bmxvY2tfZW50 cnkJKEd0a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXks CgkJCQkJCSBHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcyk7CnZvaWQJCWd0a19hY2NlbF9ncm91 cF9hZGQJCShHdGtBY2NlbEdyb3VwCSphY2NlbF9ncm91cCwKCQkJCQkJIGd1aW50CQkgYWNjZWxf a2V5LAoJCQkJCQkgR2RrTW9kaWZpZXJUeXBlIGFjY2VsX21vZHMsCgkJCQkJCSBHdGtBY2NlbEZs YWdzCSBhY2NlbF9mbGFncywKCQkJCQkJIEd0a09iamVjdAkqb2JqZWN0LAoJCQkJCQkgY29uc3Qg Z2NoYXIJKmFjY2VsX3NpZ25hbCk7CnZvaWQJCWd0a19hY2NlbF9ncm91cF9yZW1vdmUJCShHdGtB Y2NlbEdyb3VwCSphY2NlbF9ncm91cCwKCQkJCQkJIGd1aW50CQkgYWNjZWxfa2V5LAoJCQkJCQkg R2RrTW9kaWZpZXJUeXBlIGFjY2VsX21vZHMsCgkJCQkJCSBHdGtPYmplY3QJKm9iamVjdCk7Cgog Cgp2b2lkCQlndGtfYWNjZWxfZ3JvdXBfaGFuZGxlX2FkZAkoR3RrT2JqZWN0CSpvYmplY3QsCgkJ CQkJCSBndWludAkJIGFjY2VsX3NpZ25hbF9pZCwKCQkJCQkJIEd0a0FjY2VsR3JvdXAJKmFjY2Vs X2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJCSBHZGtNb2RpZmllclR5cGUg YWNjZWxfbW9kcywKCQkJCQkJIEd0a0FjY2VsRmxhZ3MgICBhY2NlbF9mbGFncyk7CnZvaWQJCWd0 a19hY2NlbF9ncm91cF9oYW5kbGVfcmVtb3ZlCShHdGtPYmplY3QJKm9iamVjdCwKCQkJCQkJIEd0 a0FjY2VsR3JvdXAJKmFjY2VsX2dyb3VwLAoJCQkJCQkgZ3VpbnQJCSBhY2NlbF9rZXksCgkJCQkJ CSBHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcyk7Cmd1aW50CQlndGtfYWNjZWxfZ3JvdXBfY3Jl YXRlX2FkZAkoR3RrVHlwZQkgY2xhc3NfdHlwZSwKCQkJCQkJIEd0a1NpZ25hbFJ1blR5cGUgc2ln bmFsX2ZsYWdzLAoJCQkJCQkgZ3VpbnQJCSBoYW5kbGVyX29mZnNldCk7Cmd1aW50CQlndGtfYWNj ZWxfZ3JvdXBfY3JlYXRlX3JlbW92ZQkoR3RrVHlwZQkgY2xhc3NfdHlwZSwKCQkJCQkJIEd0a1Np Z25hbFJ1blR5cGUgc2lnbmFsX2ZsYWdzLAoJCQkJCQkgZ3VpbnQJCSBoYW5kbGVyX29mZnNldCk7 CgogCgpHU0xpc3QqCWd0a19hY2NlbF9ncm91cHNfZnJvbV9vYmplY3QJCShHdGtPYmplY3QJKm9i amVjdCk7CkdTTGlzdCoJZ3RrX2FjY2VsX2dyb3VwX2VudHJpZXNfZnJvbV9vYmplY3QJKEd0a09i amVjdAkqb2JqZWN0KTsKCgoKCn0KCgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9n dGsvZ3Rrd2lkZ2V0LmgiIDIKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rr YWRqdXN0bWVudC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL29w dC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkYXRhLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0 IF9HdGtEYXRhICAgICAgIEd0a0RhdGE7CnR5cGVkZWYgc3RydWN0IF9HdGtEYXRhQ2xhc3MgIEd0 a0RhdGFDbGFzczsKCnN0cnVjdCBfR3RrRGF0YQp7CiAgR3RrT2JqZWN0IG9iamVjdDsKfTsKCnN0 cnVjdCBfR3RrRGF0YUNsYXNzCnsKICBHdGtPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CgogIHZv aWQgKCogZGlzY29ubmVjdCkgKEd0a0RhdGEgKmRhdGEpOwp9OwoKCkd0a1R5cGUgZ3RrX2RhdGFf Z2V0X3R5cGUgKHZvaWQpOwoKCgp9CgoKCgojIDMyICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIv Z3RrL2d0a2FkanVzdG1lbnQuaCIgMgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVm IHN0cnVjdCBfR3RrQWRqdXN0bWVudAkgICAgR3RrQWRqdXN0bWVudDsKdHlwZWRlZiBzdHJ1Y3Qg X0d0a0FkanVzdG1lbnRDbGFzcyAgR3RrQWRqdXN0bWVudENsYXNzOwoKc3RydWN0IF9HdGtBZGp1 c3RtZW50CnsKICBHdGtEYXRhIGRhdGE7CiAgCiAgZ2Zsb2F0IGxvd2VyOwogIGdmbG9hdCB1cHBl cjsKICBnZmxvYXQgdmFsdWU7CiAgZ2Zsb2F0IHN0ZXBfaW5jcmVtZW50OwogIGdmbG9hdCBwYWdl X2luY3JlbWVudDsKICBnZmxvYXQgcGFnZV9zaXplOwp9OwoKc3RydWN0IF9HdGtBZGp1c3RtZW50 Q2xhc3MKewogIEd0a0RhdGFDbGFzcyBwYXJlbnRfY2xhc3M7CiAgCiAgdm9pZCAoKiBjaGFuZ2Vk KQkgKEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwogIHZvaWQgKCogdmFsdWVfY2hhbmdlZCkg KEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwp9OwoKCkd0a1R5cGUJICAgZ3RrX2FkanVzdG1l bnRfZ2V0X3R5cGUJCSh2b2lkKTsKR3RrT2JqZWN0KiBndGtfYWRqdXN0bWVudF9uZXcJCQkoZ2Zs b2F0CQkgIHZhbHVlLAoJCQkJCQkgZ2Zsb2F0CQkgIGxvd2VyLAoJCQkJCQkgZ2Zsb2F0CQkgIHVw cGVyLAoJCQkJCQkgZ2Zsb2F0CQkgIHN0ZXBfaW5jcmVtZW50LAoJCQkJCQkgZ2Zsb2F0CQkgIHBh Z2VfaW5jcmVtZW50LAoJCQkJCQkgZ2Zsb2F0CQkgIHBhZ2Vfc2l6ZSk7CnZvaWQJICAgZ3RrX2Fk anVzdG1lbnRfY2hhbmdlZAkJKEd0a0FkanVzdG1lbnQJICphZGp1c3RtZW50KTsKdm9pZAkgICBn dGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkCQkoR3RrQWRqdXN0bWVudAkgKmFkanVzdG1lbnQp Owp2b2lkCSAgIGd0a19hZGp1c3RtZW50X2NsYW1wX3BhZ2UJCShHdGtBZGp1c3RtZW50CSAqYWRq dXN0bWVudCwKCQkJCQkJIGdmbG9hdAkJICBsb3dlciwKCQkJCQkJIGdmbG9hdAkJICB1cHBlcik7 CnZvaWQJICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlCQkoR3RrQWRqdXN0bWVudAkgKmFkanVz dG1lbnQsCgkJCQkJCSBnZmxvYXQJCSAgdmFsdWUpOwoKCn0KCgoKCiMgMzMgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rrd2lkZ2V0LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9n dGstMS4yL2d0ay9ndGtzdHlsZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc3RydWN0IF9HdGtTdHlsZSAgICAgICBHdGtTdHls ZTsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1N0eWxlQ2xhc3MgIEd0a1N0eWxlQ2xhc3M7CgogCgoKdHlw ZWRlZiBzdHJ1Y3QgX0d0a1RoZW1lRW5naW5lIEd0a1RoZW1lRW5naW5lOwp0eXBlZGVmIHN0cnVj dCBfR3RrUmNTdHlsZSAgICAgR3RrUmNTdHlsZTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1dp ZGdldCAgICAgIEd0a1dpZGdldDsKCiAKCgoKCgoKc3RydWN0IF9HdGtTdHlsZQp7CiAgR3RrU3R5 bGVDbGFzcyAqa2xhc3M7CgogIEdka0NvbG9yIGZnWzVdOwogIEdka0NvbG9yIGJnWzVdOwogIEdk a0NvbG9yIGxpZ2h0WzVdOwogIEdka0NvbG9yIGRhcmtbNV07CiAgR2RrQ29sb3IgbWlkWzVdOwog IEdka0NvbG9yIHRleHRbNV07CiAgR2RrQ29sb3IgYmFzZVs1XTsKICAKICBHZGtDb2xvciBibGFj azsKICBHZGtDb2xvciB3aGl0ZTsKICBHZGtGb250ICpmb250OwogIAogIEdka0dDICpmZ19nY1s1 XTsKICBHZGtHQyAqYmdfZ2NbNV07CiAgR2RrR0MgKmxpZ2h0X2djWzVdOwogIEdka0dDICpkYXJr X2djWzVdOwogIEdka0dDICptaWRfZ2NbNV07CiAgR2RrR0MgKnRleHRfZ2NbNV07CiAgR2RrR0Mg KmJhc2VfZ2NbNV07CiAgR2RrR0MgKmJsYWNrX2djOwogIEdka0dDICp3aGl0ZV9nYzsKICAKICBH ZGtQaXhtYXAgKmJnX3BpeG1hcFs1XTsKICAKICAgCiAgCiAgZ2ludCByZWZfY291bnQ7CiAgZ2lu dCBhdHRhY2hfY291bnQ7CiAgCiAgZ2ludCBkZXB0aDsKICBHZGtDb2xvcm1hcCAqY29sb3JtYXA7 CiAgCiAgR3RrVGhlbWVFbmdpbmUgKmVuZ2luZTsKICAKICBncG9pbnRlcgkgIGVuZ2luZV9kYXRh OwogIAogIEd0a1JjU3R5bGUJICpyY19zdHlsZTsJIAoKCiAgR1NMaXN0CSAqc3R5bGVzOwp9OwoK c3RydWN0IF9HdGtTdHlsZUNsYXNzCnsKICBnaW50IHh0aGlja25lc3M7CiAgZ2ludCB5dGhpY2tu ZXNzOwogIAogIHZvaWQgKCpkcmF3X2hsaW5lKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2Rr V2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR2Rr UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeDEsCgkJCQkgZ2ludAkJCSB4MiwKCQkJCSBnaW50CQkJIHkp OwogIHZvaWQgKCpkcmF3X3ZsaW5lKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93 CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR2RrUmVjdGFu Z2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWls LAoJCQkJIGdpbnQJCQkgeTEsCgkJCQkgZ2ludAkJCSB5MiwKCQkJCSBnaW50CQkJIHgpOwogIHZv aWQgKCpkcmF3X3NoYWRvdykJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJKndp bmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5cGUJ CSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJ KndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJ CQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lkICgq ZHJhd19wb2x5Z29uKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93 LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNo YWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lk Z2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBHZGtQb2ludAkJKnBvaW50LAoJCQkJIGdp bnQJCQkgbnBvaW50cywKCQkJCSBnYm9vbGVhbgkJIGZpbGwpOwogIHZvaWQgKCpkcmF3X2Fycm93 KQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0 YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJ CQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdj aGFyCQkJKmRldGFpbCwKCQkJCSBHdGtBcnJvd1R5cGUJCSBhcnJvd190eXBlLAoJCQkJIGdib29s ZWFuCQkgZmlsbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkg d2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2RpYW1vbmQpCQkoR3Rr U3R5bGUJCSpzdHlsZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBl CQkgc3RhdGVfdHlwZSwKCQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2Rr UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0 aCwKCQkJCSBnaW50CQkJIGhlaWdodCk7CiAgdm9pZCAoKmRyYXdfb3ZhbCkJCShHdGtTdHlsZQkJ KnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJKndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0 ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5n bGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWws CgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJ IGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lkICgqZHJhd19zdHJpbmcpCQkoR3RrU3R5bGUJCSpzdHls ZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBlCQkgc3RhdGVfdHlw ZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdldAkJKndpZGdldCwKCQkJ CSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdpbnQJCQkgeSwKCQkJCSBj b25zdCBnY2hhcgkJKnN0cmluZyk7CiAgdm9pZCAoKmRyYXdfYm94KQkJKEd0a1N0eWxlCQkqc3R5 bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5 cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJ KmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJ CSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2lu dAkJCSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2ZsYXRfYm94KQkJKEd0a1N0eWxlCQkqc3R5bGUs CgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUs CgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFy ZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBn aW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJ CSBoZWlnaHQpOwogIHZvaWQgKCpkcmF3X2NoZWNrKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkg R2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkg R3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJ CQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJ IHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWln aHQpOwogIHZvaWQgKCpkcmF3X29wdGlvbikJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dp bmRvdwkJKndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1No YWRvd1R5cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0 a1dpZGdldAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJ CQkJIGdpbnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsK ICB2b2lkICgqZHJhd19jcm9zcykJCShHdGtTdHlsZQkJKnN0eWxlLAoJCQkJIEdka1dpbmRvdwkJ KndpbmRvdywKCQkJCSBHdGtTdGF0ZVR5cGUJCSBzdGF0ZV90eXBlLAoJCQkJIEd0a1NoYWRvd1R5 cGUJCSBzaGFkb3dfdHlwZSwKCQkJCSBHZGtSZWN0YW5nbGUJCSphcmVhLAoJCQkJIEd0a1dpZGdl dAkJKndpZGdldCwKCQkJCSBnY2hhcgkJCSpkZXRhaWwsCgkJCQkgZ2ludAkJCSB4LAoJCQkJIGdp bnQJCQkgeSwKCQkJCSBnaW50CQkJIHdpZHRoLAoJCQkJIGdpbnQJCQkgaGVpZ2h0KTsKICB2b2lk ICgqZHJhd19yYW1wKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93 LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNo YWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lk Z2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBHdGtBcnJvd1R5cGUJCSBhcnJvd190eXBl LAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJ CSBnaW50CQkJIGhlaWdodCk7CiAgdm9pZCAoKmRyYXdfdGFiKQkJKEd0a1N0eWxlCQkqc3R5bGUs CgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUs CgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFy ZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBn aW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJ CSBoZWlnaHQpOyAKICB2b2lkICgqZHJhd19zaGFkb3dfZ2FwKQkoR3RrU3R5bGUJCSpzdHlsZSwK CQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBlCQkgc3RhdGVfdHlwZSwK CQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2RrUmVjdGFuZ2xlCQkqYXJl YSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWlsLAoJCQkJIGdp bnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJCSBnaW50CQkJ IGhlaWdodCwKCQkJCSBHdGtQb3NpdGlvblR5cGUJIGdhcF9zaWRlLAoJCQkJIGdpbnQJCQkgZ2Fw X3gsCgkJCQkgZ2ludAkJCSBnYXBfd2lkdGgpOwogIHZvaWQgKCpkcmF3X2JveF9nYXApCQkoR3Rr U3R5bGUJCSpzdHlsZSwKCQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR3RrU3RhdGVUeXBl CQkgc3RhdGVfdHlwZSwKCQkJCSBHdGtTaGFkb3dUeXBlCQkgc2hhZG93X3R5cGUsCgkJCQkgR2Rr UmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBHdGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkq ZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwKCQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0 aCwKCQkJCSBnaW50CQkJIGhlaWdodCwKCQkJCSBHdGtQb3NpdGlvblR5cGUJIGdhcF9zaWRlLAoJ CQkJIGdpbnQJCQkgZ2FwX3gsCgkJCQkgZ2ludAkJCSBnYXBfd2lkdGgpOwogIHZvaWQgKCpkcmF3 X2V4dGVuc2lvbikJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJ CQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRv d190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0 LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJ CQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkgR3RrUG9zaXRpb25U eXBlCSBnYXBfc2lkZSk7CiAgdm9pZCAoKmRyYXdfZm9jdXMpCQkoR3RrU3R5bGUJCSpzdHlsZSwK CQkJCSBHZGtXaW5kb3cJCSp3aW5kb3csCgkJCQkgR2RrUmVjdGFuZ2xlCQkqYXJlYSwKCQkJCSBH dGtXaWRnZXQJCSp3aWRnZXQsCgkJCQkgZ2NoYXIJCQkqZGV0YWlsLAoJCQkJIGdpbnQJCQkgeCwK CQkJCSBnaW50CQkJIHksCgkJCQkgZ2ludAkJCSB3aWR0aCwKCQkJCSBnaW50CQkJIGhlaWdodCk7 CiAgdm9pZCAoKmRyYXdfc2xpZGVyKQkJKEd0a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93 CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlwZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93 VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdka1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lk Z2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJKmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkg Z2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lkdGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkg R3RrT3JpZW50YXRpb24JCSBvcmllbnRhdGlvbik7CiAgdm9pZCAoKmRyYXdfaGFuZGxlKQkJKEd0 a1N0eWxlCQkqc3R5bGUsCgkJCQkgR2RrV2luZG93CQkqd2luZG93LAoJCQkJIEd0a1N0YXRlVHlw ZQkJIHN0YXRlX3R5cGUsCgkJCQkgR3RrU2hhZG93VHlwZQkJIHNoYWRvd190eXBlLAoJCQkJIEdk a1JlY3RhbmdsZQkJKmFyZWEsCgkJCQkgR3RrV2lkZ2V0CQkqd2lkZ2V0LAoJCQkJIGdjaGFyCQkJ KmRldGFpbCwKCQkJCSBnaW50CQkJIHgsCgkJCQkgZ2ludAkJCSB5LAoJCQkJIGdpbnQJCQkgd2lk dGgsCgkJCQkgZ2ludAkJCSBoZWlnaHQsCgkJCQkgR3RrT3JpZW50YXRpb24JCSBvcmllbnRhdGlv bik7Cn07CgpHdGtTdHlsZSogZ3RrX3N0eWxlX25ldwkJCSAgICAgKHZvaWQpOwpHdGtTdHlsZSog Z3RrX3N0eWxlX2NvcHkJCSAgICAgKEd0a1N0eWxlCSAgICAqc3R5bGUpOwpHdGtTdHlsZSogZ3Rr X3N0eWxlX2F0dGFjaAkJICAgICAoR3RrU3R5bGUJICAgICpzdHlsZSwKCQkJCQkgICAgICBHZGtX aW5kb3cJICAgICp3aW5kb3cpOwp2b2lkCSAgZ3RrX3N0eWxlX2RldGFjaAkJICAgICAoR3RrU3R5 bGUJICAgKnN0eWxlKTsKR3RrU3R5bGUqIGd0a19zdHlsZV9yZWYJCQkgICAgIChHdGtTdHlsZQkg ICAqc3R5bGUpOwp2b2lkCSAgZ3RrX3N0eWxlX3VucmVmCQkgICAgIChHdGtTdHlsZQkgICAqc3R5 bGUpOwp2b2lkCSAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kCSAgICAgKEd0a1N0eWxlCSAgICpz dHlsZSwKCQkJCQkgICAgICBHZGtXaW5kb3cJICAgKndpbmRvdywKCQkJCQkgICAgICBHdGtTdGF0 ZVR5cGUgIHN0YXRlX3R5cGUpOwp2b2lkCSAgZ3RrX3N0eWxlX2FwcGx5X2RlZmF1bHRfYmFja2dy b3VuZCAoR3RrU3R5bGUJICAgKnN0eWxlLAoJCQkJCSAgICAgIEdka1dpbmRvdwkgICAqd2luZG93 LAoJCQkJCSAgICAgIGdib29sZWFuCSAgICBzZXRfYmcsCgkJCQkJICAgICAgR3RrU3RhdGVUeXBl ICBzdGF0ZV90eXBlLCAKCQkJCQkgICAgICBHZGtSZWN0YW5nbGUgKmFyZWEsIAoJCQkJCSAgICAg IGdpbnQJICAgIHgsIAoJCQkJCSAgICAgIGdpbnQJICAgIHksIAoJCQkJCSAgICAgIGdpbnQJICAg IHdpZHRoLCAKCQkJCQkgICAgICBnaW50CSAgICBoZWlnaHQpOwoKdm9pZCBndGtfZHJhd19obGlu ZSAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93 LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBnaW50CSAgICAg IHgxLAoJCSAgICAgICBnaW50CSAgICAgIHgyLAoJCSAgICAgICBnaW50CSAgICAgIHkpOwp2b2lk IGd0a19kcmF3X3ZsaW5lICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5k b3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAg ICAgIGdpbnQJICAgICAgeTEsCgkJICAgICAgIGdpbnQJICAgICAgeTIsCgkJICAgICAgIGdpbnQJ ICAgICAgeCk7CnZvaWQgZ3RrX2RyYXdfc2hhZG93ICAoR3RrU3R5bGUJICAgICAqc3R5bGUsCgkJ ICAgICAgIEdka1dpbmRvdyAgICAgKndpbmRvdywKCQkgICAgICAgR3RrU3RhdGVUeXBlICAgc3Rh dGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJICAgICAgIGdp bnQJICAgICAgeCwKCQkgICAgICAgZ2ludAkgICAgICB5LAoJCSAgICAgICBnaW50CSAgICAgIHdp ZHRoLAoJCSAgICAgICBnaW50CSAgICAgIGhlaWdodCk7CnZvaWQgZ3RrX2RyYXdfcG9seWdvbiAo R3RrU3R5bGUJICAgICAqc3R5bGUsCgkJICAgICAgIEdka1dpbmRvdyAgICAgKndpbmRvdywKCQkg ICAgICAgR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAg c2hhZG93X3R5cGUsCgkJICAgICAgIEdka1BvaW50CSAgICAgKnBvaW50cywKCQkgICAgICAgZ2lu dAkgICAgICBucG9pbnRzLAoJCSAgICAgICBnYm9vbGVhbgkgICAgICBmaWxsKTsKdm9pZCBndGtf ZHJhd19hcnJvdyAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAg ICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBH dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgR3RrQXJyb3dUeXBlICAgYXJyb3df dHlwZSwKCQkgICAgICAgZ2Jvb2xlYW4JICAgICAgZmlsbCwKCQkgICAgICAgZ2ludAkgICAgICB4 LAoJCSAgICAgICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAg ICAgIGdpbnQJICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfZHJhd19kaWFtb25kIChHdGtTdHlsZQkg ICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtT dGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlw ZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAgIHksCgkJICAgICAg IGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJICAgICAgaGVpZ2h0KTsKdm9pZCBndGtf ZHJhd19vdmFsICAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAg ICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBH dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAg ICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJ ICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfZHJhd19zdHJpbmcgIChHdGtTdHlsZQkgICAgICpzdHls ZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUg ICBzdGF0ZV90eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAg eSwKCQkgICAgICAgY29uc3QgZ2NoYXIgICAqc3RyaW5nKTsKdm9pZCBndGtfZHJhd19ib3ggICAg IChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93LAoJ CSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAgICBHdGtTaGFkb3dUeXBl ICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAg IHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdpbnQJICAgICAgaGVpZ2h0 KTsKdm9pZCBndGtfZHJhd19mbGF0X2JveCAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdka1dp bmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hh ZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCWdpbnQJICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHks CgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAgICBoZWlnaHQpOwp2b2lkIGd0a19k cmF3X2NoZWNrICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAg ICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0 a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAg IGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkg ICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X29wdGlvbiAgKEd0a1N0eWxlCSAgICAgKnN0eWxl LAoJCSAgICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAg IHN0YXRlX3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAg ICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAg ICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X2Nyb3Nz ICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3cs CgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5 cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAg ICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWln aHQpOwp2b2lkIGd0a19kcmF3X3JhbXAgICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAg ICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5 cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBHdGtBcnJv d1R5cGUgICBhcnJvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJ ICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBo ZWlnaHQpOwp2b2lkIGd0a19kcmF3X3RhYiAgICAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAg ICAgICBHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRl X3R5cGUsCgkJICAgICAgIEd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50 CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0 aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19kcmF3X3NoYWRvd19nYXAg KEd0a1N0eWxlCSAqc3R5bGUsCgkJCSAgR2RrV2luZG93CSAqd2luZG93LAoJCQkgIEd0a1N0YXRl VHlwZQkgIHN0YXRlX3R5cGUsCgkJCSAgR3RrU2hhZG93VHlwZQkgIHNoYWRvd190eXBlLAoJCQkg IGdpbnQJCSAgeCwKCQkJICBnaW50CQkgIHksCgkJCSAgZ2ludAkJICB3aWR0aCwKCQkJICBnaW50 CQkgIGhlaWdodCwKCQkJICBHdGtQb3NpdGlvblR5cGUgZ2FwX3NpZGUsCgkJCSAgZ2ludAkJICBn YXBfeCwKCQkJICBnaW50CQkgIGdhcF93aWR0aCk7CnZvaWQgZ3RrX2RyYXdfYm94X2dhcCAoR3Rr U3R5bGUJICAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAgICAqd2luZG93LAoJCSAg ICAgICBHdGtTdGF0ZVR5cGUgICAgc3RhdGVfdHlwZSwKCQkgICAgICAgR3RrU2hhZG93VHlwZSAg IHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgICB4LAoJCSAgICAgICBnaW50CSAgICAg ICB5LAoJCSAgICAgICBnaW50CSAgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICAgaGVp Z2h0LAoJCSAgICAgICBHdGtQb3NpdGlvblR5cGUgZ2FwX3NpZGUsCgkJICAgICAgIGdpbnQJICAg ICAgIGdhcF94LAoJCSAgICAgICBnaW50CSAgICAgICBnYXBfd2lkdGgpOwp2b2lkIGd0a19kcmF3 X2V4dGVuc2lvbiAoR3RrU3R5bGUJKnN0eWxlLAoJCQkgR2RrV2luZG93CSp3aW5kb3csCgkJCSBH dGtTdGF0ZVR5cGUJIHN0YXRlX3R5cGUsCgkJCSBHdGtTaGFkb3dUeXBlCSBzaGFkb3dfdHlwZSwK CQkJIGdpbnQJCSB4LAoJCQkgZ2ludAkJIHksCgkJCSBnaW50CQkgd2lkdGgsCgkJCSBnaW50CQkg aGVpZ2h0LAoJCQkgR3RrUG9zaXRpb25UeXBlIGdhcF9zaWRlKTsKdm9pZCBndGtfZHJhd19mb2N1 cyAgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93ICAgICAqd2luZG93 LAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAgIGdpbnQJICAgICAgeSwKCQkgICAgICAg Z2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkgICAgICBoZWlnaHQpOwp2b2lkIGd0a19k cmF3X3NsaWRlciAgKEd0a1N0eWxlCSAgICAgKnN0eWxlLAoJCSAgICAgICBHZGtXaW5kb3cgICAg ICp3aW5kb3csCgkJICAgICAgIEd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJICAgICAgIEd0 a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCSAgICAgICBnaW50CSAgICAgIHgsCgkJICAgICAg IGdpbnQJICAgICAgeSwKCQkgICAgICAgZ2ludAkgICAgICB3aWR0aCwKCQkgICAgICAgZ2ludAkg ICAgICBoZWlnaHQsCgkJICAgICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKdm9pZCBn dGtfZHJhd19oYW5kbGUgIChHdGtTdHlsZQkgICAgICpzdHlsZSwKCQkgICAgICAgR2RrV2luZG93 ICAgICAqd2luZG93LAoJCSAgICAgICBHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCSAgICAg ICBHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkgICAgICAgZ2ludAkgICAgICB4LAoJCSAg ICAgICBnaW50CSAgICAgIHksCgkJICAgICAgIGdpbnQJICAgICAgd2lkdGgsCgkJICAgICAgIGdp bnQJICAgICAgaGVpZ2h0LAoJCSAgICAgICBHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbik7Cgp2 b2lkIGd0a19wYWludF9obGluZSAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93 ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCQlHZGtSZWN0YW5n bGUgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRh aWwsCgkJCWdpbnQJICAgICAgIHgxLAoJCQlnaW50CSAgICAgICB4MiwKCQkJZ2ludAkgICAgICAg eSk7CnZvaWQgZ3RrX3BhaW50X3ZsaW5lICAgKEd0a1N0eWxlICAgICAgKnN0eWxlLAoJCQlHZGtX aW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJCUdka1Jl Y3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAg KmRldGFpbCwKCQkJZ2ludAkgICAgICAgeTEsCgkJCWdpbnQJICAgICAgIHkyLAoJCQlnaW50CSAg ICAgICB4KTsKdm9pZCBndGtfcGFpbnRfc2hhZG93ICAoR3RrU3R5bGUgICAgICpzdHlsZSwKCQkJ R2RrV2luZG93ICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgc3RhdGVfdHlwZSwKCQkJR3Rr U2hhZG93VHlwZSBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3RrV2lk Z2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAgICB4 LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkgICAgICAg aGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfcG9seWdvbiAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJ CUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJ R3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0 a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJR2RrUG9pbnQg ICAgICAqcG9pbnRzLAoJCQlnaW50CSAgICAgICBucG9pbnRzLAoJCQlnYm9vbGVhbiAgICAgICBm aWxsKTsKdm9pZCBndGtfcGFpbnRfYXJyb3cgICAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdk a1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3Rr U2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dp ZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJR3RrQXJyb3dUeXBl ICAgYXJyb3dfdHlwZSwKCQkJZ2Jvb2xlYW4gICAgICAgZmlsbCwKCQkJZ2ludAkgICAgICAgeCwK CQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAgICAgIGhl aWdodCk7CnZvaWQgZ3RrX3BhaW50X2RpYW1vbmQgKEd0a1N0eWxlICAgICAgKnN0eWxlLAoJCQlH ZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUsCgkJCUd0 a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICphcmVhLAoJCQlHdGtX aWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJCWdpbnQJICAgICAg IHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAg ICBoZWlnaHQpOwp2b2lkIGd0a19wYWludF9vdmFsICAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwK CQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJ CQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJ R3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAg ICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkg ICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfc3RyaW5nICAoR3RrU3R5bGUgICAgICAqc3R5 bGUsCgkJCUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlw ZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQln Y2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJ CQljb25zdCBnY2hhciAgICpzdHJpbmcpOwp2b2lkIGd0a19wYWludF9ib3ggICAgIChHdGtTdHls ZSAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUg ICBzdGF0ZV90eXBlLAoJCQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFu Z2xlICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0 YWlsLAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3 aWR0aCwKCQkJZ2ludAkgICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfZmxhdF9ib3ggKEd0 a1N0eWxlICAgICAgKnN0eWxlLAoJCQkgR2RrV2luZG93ICAgICAqd2luZG93LAoJCQkgR3RrU3Rh dGVUeXBlCXN0YXRlX3R5cGUsCgkJCSBHdGtTaGFkb3dUeXBlCXNoYWRvd190eXBlLAoJCQkgR2Rr UmVjdGFuZ2xlICAqYXJlYSwKCQkJIEd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJIGdjaGFyCSAg ICAgICAqZGV0YWlsLAoJCQkgZ2ludAkJeCwKCQkJIGdpbnQJCXksCgkJCSBnaW50CQl3aWR0aCwK CQkJIGdpbnQJCWhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X2NoZWNrICAgKEd0a1N0eWxlICAgICAg KnN0eWxlLAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRl X3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICph cmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJ CWdpbnQJICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJ CQlnaW50CSAgICAgICBoZWlnaHQpOwp2b2lkIGd0a19wYWludF9vcHRpb24gIChHdGtTdHlsZSAg ICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBz dGF0ZV90eXBlLAoJCQlHdGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xl ICAqYXJlYSwKCQkJR3RrV2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWls LAoJCQlnaW50CSAgICAgICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0 aCwKCQkJZ2ludAkgICAgICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfY3Jvc3MgICAoR3RrU3R5 bGUgICAgICAqc3R5bGUsCgkJCUdka1dpbmRvdyAgICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBl ICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hhZG93VHlwZSAgc2hhZG93X3R5cGUsCgkJCUdka1JlY3Rh bmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRl dGFpbCwKCQkJZ2ludAkgICAgICAgeCwKCQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAg d2lkdGgsCgkJCWdpbnQJICAgICAgIGhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X3JhbXAgICAgKEd0 a1N0eWxlICAgICAgKnN0eWxlLAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRl VHlwZSAgIHN0YXRlX3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtS ZWN0YW5nbGUgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAg ICpkZXRhaWwsCgkJCUd0a0Fycm93VHlwZSAgIGFycm93X3R5cGUsCgkJCWdpbnQJICAgICAgIHgs CgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50CSAgICAgICBo ZWlnaHQpOwp2b2lkIGd0a19wYWludF90YWIgICAgIChHdGtTdHlsZSAgICAgICpzdHlsZSwKCQkJ R2RrV2luZG93ICAgICAqd2luZG93LAoJCQlHdGtTdGF0ZVR5cGUgICBzdGF0ZV90eXBlLAoJCQlH dGtTaGFkb3dUeXBlICBzaGFkb3dfdHlwZSwKCQkJR2RrUmVjdGFuZ2xlICAqYXJlYSwKCQkJR3Rr V2lkZ2V0ICAgICAqd2lkZ2V0LAoJCQlnY2hhcgkgICAgICAqZGV0YWlsLAoJCQlnaW50CSAgICAg ICB4LAoJCQlnaW50CSAgICAgICB5LAoJCQlnaW50CSAgICAgICB3aWR0aCwKCQkJZ2ludAkgICAg ICAgaGVpZ2h0KTsKdm9pZCBndGtfcGFpbnRfc2hhZG93X2dhcCAoR3RrU3R5bGUJICAqc3R5bGUs CgkJCSAgIEdka1dpbmRvdwkgICp3aW5kb3csCgkJCSAgIEd0a1N0YXRlVHlwZQkgICBzdGF0ZV90 eXBlLAoJCQkgICBHdGtTaGFkb3dUeXBlICAgc2hhZG93X3R5cGUsCgkJCSAgIEdka1JlY3Rhbmds ZQkgICphcmVhLAoJCQkgICBHdGtXaWRnZXQJICAqd2lkZ2V0LAoJCQkgICBnY2hhcgkgICpkZXRh aWwsCgkJCSAgIGdpbnQJCSAgIHgsCgkJCSAgIGdpbnQJCSAgIHksCgkJCSAgIGdpbnQJCSAgIHdp ZHRoLAoJCQkgICBnaW50CQkgICBoZWlnaHQsCgkJCSAgIEd0a1Bvc2l0aW9uVHlwZSBnYXBfc2lk ZSwKCQkJICAgZ2ludAkJICAgZ2FwX3gsCgkJCSAgIGdpbnQJCSAgIGdhcF93aWR0aCk7CnZvaWQg Z3RrX3BhaW50X2JveF9nYXAgKEd0a1N0eWxlICAgICAgICpzdHlsZSwKCQkJR2RrV2luZG93ICAg ICAgKndpbmRvdywKCQkJR3RrU3RhdGVUeXBlCXN0YXRlX3R5cGUsCgkJCUd0a1NoYWRvd1R5cGUJ c2hhZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgICphcmVhLAoJCQlHdGtXaWRnZXQgICAgICAq d2lkZ2V0LAoJCQlnY2hhcgkgICAgICAgKmRldGFpbCwKCQkJZ2ludAkJeCwKCQkJZ2ludAkJeSwK CQkJZ2ludAkJd2lkdGgsCgkJCWdpbnQJCWhlaWdodCwKCQkJR3RrUG9zaXRpb25UeXBlIGdhcF9z aWRlLAoJCQlnaW50CQlnYXBfeCwKCQkJZ2ludAkJZ2FwX3dpZHRoKTsKdm9pZCBndGtfcGFpbnRf ZXh0ZW5zaW9uIChHdGtTdHlsZQkgKnN0eWxlLAoJCQkgIEdka1dpbmRvdwkgKndpbmRvdywKCQkJ ICBHdGtTdGF0ZVR5cGUJICBzdGF0ZV90eXBlLAoJCQkgIEd0a1NoYWRvd1R5cGUJICBzaGFkb3df dHlwZSwKCQkJICBHZGtSZWN0YW5nbGUJICphcmVhLAoJCQkgIEd0a1dpZGdldAkgKndpZGdldCwK CQkJICBnY2hhcgkJICpkZXRhaWwsCgkJCSAgZ2ludAkJICB4LAoJCQkgIGdpbnQJCSAgeSwKCQkJ ICBnaW50CQkgIHdpZHRoLAoJCQkgIGdpbnQJCSAgaGVpZ2h0LAoJCQkgIEd0a1Bvc2l0aW9uVHlw ZSBnYXBfc2lkZSk7CnZvaWQgZ3RrX3BhaW50X2ZvY3VzICAgKEd0a1N0eWxlICAgICAgKnN0eWxl LAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0 a1dpZGdldCAgICAgKndpZGdldCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJZ2ludAkgICAg ICAgeCwKCQkJZ2ludAkgICAgICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAg ICAgIGhlaWdodCk7CnZvaWQgZ3RrX3BhaW50X3NsaWRlciAgKEd0a1N0eWxlICAgICAgKnN0eWxl LAoJCQlHZGtXaW5kb3cgICAgICp3aW5kb3csCgkJCUd0a1N0YXRlVHlwZSAgIHN0YXRlX3R5cGUs CgkJCUd0a1NoYWRvd1R5cGUgIHNoYWRvd190eXBlLAoJCQlHZGtSZWN0YW5nbGUgICphcmVhLAoJ CQlHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCWdjaGFyCSAgICAgICpkZXRhaWwsCgkJCWdpbnQJ ICAgICAgIHgsCgkJCWdpbnQJICAgICAgIHksCgkJCWdpbnQJICAgICAgIHdpZHRoLAoJCQlnaW50 CSAgICAgICBoZWlnaHQsCgkJCUd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKdm9pZCBndGtf cGFpbnRfaGFuZGxlICAoR3RrU3R5bGUgICAgICAqc3R5bGUsCgkJCUdka1dpbmRvdyAgICAgKndp bmRvdywKCQkJR3RrU3RhdGVUeXBlICAgc3RhdGVfdHlwZSwKCQkJR3RrU2hhZG93VHlwZSAgc2hh ZG93X3R5cGUsCgkJCUdka1JlY3RhbmdsZSAgKmFyZWEsCgkJCUd0a1dpZGdldCAgICAgKndpZGdl dCwKCQkJZ2NoYXIJICAgICAgKmRldGFpbCwKCQkJZ2ludAkgICAgICAgeCwKCQkJZ2ludAkgICAg ICAgeSwKCQkJZ2ludAkgICAgICAgd2lkdGgsCgkJCWdpbnQJICAgICAgIGhlaWdodCwKCQkJR3Rr T3JpZW50YXRpb24gb3JpZW50YXRpb24pOwoKCiAKCgp2b2lkIGd0a19zdHlsZV9zZXRfcHJvcF9l eHBlcmltZW50YWwgKEd0a1N0eWxlICAgICpzdHlsZSwKCQkJCSAgICAgIGNvbnN0IGdjaGFyICpu YW1lLAoJCQkJICAgICAgZ2ludCAgICAgICAgIHZhbHVlKTsKZ2ludCBndGtfc3R5bGVfZ2V0X3By b3BfZXhwZXJpbWVudGFsIChHdGtTdHlsZSAgICAqc3R5bGUsCgkJCQkgICAgICBjb25zdCBnY2hh ciAqbmFtZSwKCQkJCSAgICAgIGdpbnQgICAgICAgICBkZWZhdWx0X3ZhbHVlKTsKCgp9CgoKCgoj IDM0ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3dpZGdldC5oIiAyCgoKCgpleHRl cm4gIkMiIHsKCgoKIAoKCnR5cGVkZWYgZW51bQp7CiAgR1RLX1RPUExFVkVMICAgICAgICAgPSAx IDw8IDQsCiAgR1RLX05PX1dJTkRPVyAgICAgICAgPSAxIDw8IDUsCiAgR1RLX1JFQUxJWkVEICAg ICAgICAgPSAxIDw8IDYsCiAgR1RLX01BUFBFRCAgICAgICAgICAgPSAxIDw8IDcsCiAgR1RLX1ZJ U0lCTEUgICAgICAgICAgPSAxIDw8IDgsCiAgR1RLX1NFTlNJVElWRSAgICAgICAgPSAxIDw8IDks CiAgR1RLX1BBUkVOVF9TRU5TSVRJVkUgPSAxIDw8IDEwLAogIEdUS19DQU5fRk9DVVMgICAgICAg ID0gMSA8PCAxMSwKICBHVEtfSEFTX0ZPQ1VTICAgICAgICA9IDEgPDwgMTIsCiAKICAgCgogIEdU S19DQU5fREVGQVVMVCAgICAgID0gMSA8PCAxMywKCiAgIAoKICBHVEtfSEFTX0RFRkFVTFQgICAg ICA9IDEgPDwgMTQsCgogIEdUS19IQVNfR1JBQgkgICAgICAgPSAxIDw8IDE1LAogIEdUS19SQ19T VFlMRQkgICAgICAgPSAxIDw8IDE2LAogIEdUS19DT01QT1NJVEVfQ0hJTEQgID0gMSA8PCAxNywK ICBHVEtfTk9fUkVQQVJFTlQgICAgICA9IDEgPDwgMTgsCiAgR1RLX0FQUF9QQUlOVEFCTEUgICAg PSAxIDw8IDE5LAogCiAgIAoKICBHVEtfUkVDRUlWRVNfREVGQVVMVCA9IDEgPDwgMjAKfSBHdGtX aWRnZXRGbGFnczsKCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogIAog CgoKCiAgCiAgCiAgCnR5cGVkZWYgc3RydWN0IF9HdGtSZXF1aXNpdGlvbgkgIEd0a1JlcXVpc2l0 aW9uOwp0eXBlZGVmIHN0cnVjdCBfR3RrQWxsb2NhdGlvbgkgIEd0a0FsbG9jYXRpb247CnR5cGVk ZWYgc3RydWN0IF9HdGtTZWxlY3Rpb25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7CnR5cGVkZWYgc3Ry dWN0IF9HdGtXaWRnZXRDbGFzcwkgIEd0a1dpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfR3Rr V2lkZ2V0QXV4SW5mbyAgR3RrV2lkZ2V0QXV4SW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdl dFNoYXBlSW5mbyBHdGtXaWRnZXRTaGFwZUluZm87Cgp0eXBlZGVmIHZvaWQgKCpHdGtDYWxsYmFj aykgKEd0a1dpZGdldCAqd2lkZ2V0LAoJCQkgICAgIGdwb2ludGVyCWRhdGEpOwoKIAoKCnN0cnVj dCBfR3RrUmVxdWlzaXRpb24KewogIGdpbnQxNiB3aWR0aDsKICBnaW50MTYgaGVpZ2h0Owp9OwoK IAoKCgpzdHJ1Y3QgX0d0a0FsbG9jYXRpb24KewogIGdpbnQxNiB4OwogIGdpbnQxNiB5OwogIGd1 aW50MTYgd2lkdGg7CiAgZ3VpbnQxNiBoZWlnaHQ7Cn07CgogCgoKCgoKCgoKc3RydWN0IF9HdGtT ZWxlY3Rpb25EYXRhCnsKICBHZGtBdG9tIHNlbGVjdGlvbjsKICBHZGtBdG9tIHRhcmdldDsKICBH ZGtBdG9tIHR5cGU7CiAgZ2ludAkgIGZvcm1hdDsKICBndWNoYXIgKmRhdGE7CiAgZ2ludAkgIGxl bmd0aDsKfTsKCiAKCgoKCnN0cnVjdCBfR3RrV2lkZ2V0CnsKICAgCgoKCgoKICBHdGtPYmplY3Qg b2JqZWN0OwogIAogICAKCgoKCiAgZ3VpbnQxNiBwcml2YXRlX2ZsYWdzOwogIAogICAKCgogIGd1 aW50OCBzdGF0ZTsKICAKICAgCgoKCgoKICBndWludDggc2F2ZWRfc3RhdGU7CiAgCiAgIAoKCgoK CiAgZ2NoYXIgKm5hbWU7CiAgCiAgIAoKCgoKICBHdGtTdHlsZSAqc3R5bGU7CiAgCiAgIAoKICBH dGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKICAKICAgCgogIEd0a0FsbG9jYXRpb24gYWxsb2Nh dGlvbjsKICAKICAgCgoKCiAgR2RrV2luZG93ICp3aW5kb3c7CiAgCiAgIAoKICBHdGtXaWRnZXQg KnBhcmVudDsKfTsKCnN0cnVjdCBfR3RrV2lkZ2V0Q2xhc3MKewogICAKCgoKCgogIEd0a09iamVj dENsYXNzIHBhcmVudF9jbGFzczsKICAKICAgCgoKCiAgZ3VpbnQgYWN0aXZhdGVfc2lnbmFsOwoK ICAgCgoKCgogIGd1aW50IHNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsOwogIAogICAKICB2 b2lkICgqIHNob3cpCQkgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCog c2hvd19hbGwpICAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCog aGlkZSkJCSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBoaWRlX2Fs bCkgICAgICAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBtYXApCQkg ICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogdW5tYXApCSAgICAgICAo R3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiByZWFsaXplKQkgICAgICAgKEd0a1dp ZGdldCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogdW5yZWFsaXplKQkgICAgICAgKEd0a1dpZGdl dCAgICAgICp3aWRnZXQpOwogIHZvaWQgKCogZHJhdykJCSAgICAgICAoR3RrV2lkZ2V0ICAgICAg KndpZGdldCwKCQkJCUdka1JlY3RhbmdsZSAgICphcmVhKTsKICB2b2lkICgqIGRyYXdfZm9jdXMp CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBkcmF3X2RlZmF1bHQp CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CiAgdm9pZCAoKiBzaXplX3JlcXVlc3Qp CSAgICAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCUd0a1JlcXVpc2l0aW9uICpyZXF1 aXNpdGlvbik7CiAgdm9pZCAoKiBzaXplX2FsbG9jYXRlKSAgICAgICAoR3RrV2lkZ2V0ICAgICAg KndpZGdldCwKCQkJCUd0a0FsbG9jYXRpb24gICphbGxvY2F0aW9uKTsKICB2b2lkICgqIHN0YXRl X2NoYW5nZWQpICAgICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0LAoJCQkJR3RrU3RhdGVUeXBl CXByZXZpb3VzX3N0YXRlKTsKICB2b2lkICgqIHBhcmVudF9zZXQpCSAgICAgICAoR3RrV2lkZ2V0 ICAgICAgKndpZGdldCwKCQkJCUd0a1dpZGdldCAgICAgICpwcmV2aW91c19wYXJlbnQpOwogIHZv aWQgKCogc3R5bGVfc2V0KQkgICAgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQsCgkJCQlHdGtT dHlsZSAgICAgICAqcHJldmlvdXNfc3R5bGUpOwogIAogICAKICBnaW50ICgqIGFkZF9hY2NlbGVy YXRvcikgICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0LAoJCQkJZ3VpbnQgICAgICAgICAgIGFj Y2VsX3NpZ25hbF9pZCwKCQkJCUd0a0FjY2VsR3JvdXAgICphY2NlbF9ncm91cCwKCQkJCWd1aW50 ICAgICAgICAgICBhY2NlbF9rZXksCgkJCQlHZGtNb2RpZmllclR5cGUgYWNjZWxfbW9kcywKCQkJ CUd0a0FjY2VsRmxhZ3MgICBhY2NlbF9mbGFncyk7CiAgdm9pZCAoKiByZW1vdmVfYWNjZWxlcmF0 b3IpICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCUd0a0FjY2VsR3JvdXAgICphY2NlbF9n cm91cCwKCQkJCWd1aW50ICAgICAgICAgICBhY2NlbF9rZXksCgkJCQlHZGtNb2RpZmllclR5cGUg YWNjZWxfbW9kcyk7CgogICAKICB2b2lkICgqIGdyYWJfZm9jdXMpICAgICAgICAgIChHdGtXaWRn ZXQgICAgICAqd2lkZ2V0KTsKICAKICAgCiAgZ2ludCAoKiBldmVudCkJCSAgIChHdGtXaWRnZXQJ ICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnQJICAgICAgICpldmVudCk7CiAgZ2ludCAo KiBidXR0b25fcHJlc3NfZXZlbnQpCSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkg ICAgR2RrRXZlbnRCdXR0b24gICAgICpldmVudCk7CiAgZ2ludCAoKiBidXR0b25fcmVsZWFzZV9l dmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEJ1dHRv biAgICAgKmV2ZW50KTsKICBnaW50ICgqIG1vdGlvbl9ub3RpZnlfZXZlbnQpCSAgIChHdGtXaWRn ZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRNb3Rpb24gICAgICpldmVudCk7CiAg Z2ludCAoKiBkZWxldGVfZXZlbnQpCQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJ ICAgIEdka0V2ZW50QW55CSAgICAgICAqZXZlbnQpOwogIGdpbnQgKCogZGVzdHJveV9ldmVudCkJ ICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEFueQkgICAgICAg KmV2ZW50KTsKICBnaW50ICgqIGV4cG9zZV9ldmVudCkJCSAgIChHdGtXaWRnZXQJICAgICAgICp3 aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRFeHBvc2UgICAgICpldmVudCk7CiAgZ2ludCAoKiBrZXlf cHJlc3NfZXZlbnQpCSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZl bnRLZXkJICAgICAgICpldmVudCk7CiAgZ2ludCAoKiBrZXlfcmVsZWFzZV9ldmVudCkJICAgKEd0 a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEtleQkgICAgICAgKmV2ZW50 KTsKICBnaW50ICgqIGVudGVyX25vdGlmeV9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndp ZGdldCwKCQkJCSAgICBHZGtFdmVudENyb3NzaW5nICAgKmV2ZW50KTsKICBnaW50ICgqIGxlYXZl X25vdGlmeV9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtF dmVudENyb3NzaW5nICAgKmV2ZW50KTsKICBnaW50ICgqIGNvbmZpZ3VyZV9ldmVudCkJICAgKEd0 a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudENvbmZpZ3VyZSAgKmV2ZW50 KTsKICBnaW50ICgqIGZvY3VzX2luX2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0 LAoJCQkJICAgIEdka0V2ZW50Rm9jdXMgICAgICAqZXZlbnQpOwogIGdpbnQgKCogZm9jdXNfb3V0 X2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50Rm9j dXMgICAgICAqZXZlbnQpOwogIGdpbnQgKCogbWFwX2V2ZW50KQkJICAgKEd0a1dpZGdldAkgICAg ICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudEFueQkgICAgICAgKmV2ZW50KTsKICBnaW50ICgq IHVubWFwX2V2ZW50KQkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBHZGtF dmVudEFueQkgICAgICAgKmV2ZW50KTsKICBnaW50ICgqIHByb3BlcnR5X25vdGlmeV9ldmVudCkg ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50UHJvcGVydHkgICAq ZXZlbnQpOwogIGdpbnQgKCogc2VsZWN0aW9uX2NsZWFyX2V2ZW50KSAgIChHdGtXaWRnZXQJICAg ICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRXZlbnRTZWxlY3Rpb24gICpldmVudCk7CiAgZ2ludCAo KiBzZWxlY3Rpb25fcmVxdWVzdF9ldmVudCkgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJ CSAgICBHZGtFdmVudFNlbGVjdGlvbiAgKmV2ZW50KTsKICBnaW50ICgqIHNlbGVjdGlvbl9ub3Rp ZnlfZXZlbnQpICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50U2Vs ZWN0aW9uICAqZXZlbnQpOwogIGdpbnQgKCogcHJveGltaXR5X2luX2V2ZW50KQkgICAoR3RrV2lk Z2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50UHJveGltaXR5ICAqZXZlbnQpOwog IGdpbnQgKCogcHJveGltaXR5X291dF9ldmVudCkJICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdl dCwKCQkJCSAgICBHZGtFdmVudFByb3hpbWl0eSAgKmV2ZW50KTsKICBnaW50ICgqIHZpc2liaWxp dHlfbm90aWZ5X2V2ZW50KSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICAgR2Rr RXZlbnRWaXNpYmlsaXR5ICpldmVudCk7CiAgZ2ludCAoKiBjbGllbnRfZXZlbnQpCQkgICAoR3Rr V2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2ZW50Q2xpZW50ICAgICAqZXZlbnQp OwogIGdpbnQgKCogbm9fZXhwb3NlX2V2ZW50KQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0 LAoJCQkJICAgIEdka0V2ZW50QW55CSAgICAgICAqZXZlbnQpOwoKICAgCiAgdm9pZCAoKiBzZWxl Y3Rpb25fZ2V0KSAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJCQkJICAg IEd0a1NlbGVjdGlvbkRhdGEgICAqc2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQgICAgICAg ICAgICAgICBpbmZvLAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgdm9pZCAo KiBzZWxlY3Rpb25fcmVjZWl2ZWQpICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJ CQkJICAgIEd0a1NlbGVjdGlvbkRhdGEgICAqc2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQg ICAgICAgICAgICAgICB0aW1lKTsKCiAgIAogIHZvaWQgKCogZHJhZ19iZWdpbikJICAgICAgICAg ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAq Y29udGV4dCk7CiAgdm9pZCAoKiBkcmFnX2VuZCkJICAgICAgICAgICAoR3RrV2lkZ2V0CSAgICAg ICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCk7CiAgdm9pZCAo KiBkcmFnX2RhdGFfZ2V0KSAgICAgICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJ CQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJCSAgICBHdGtTZWxlY3Rpb25E YXRhICAgKnNlbGVjdGlvbl9kYXRhLAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgaW5mbywK CQkJCSAgICBndWludCAgICAgICAgICAgICAgIHRpbWUpOwogIHZvaWQgKCogZHJhZ19kYXRhX2Rl bGV0ZSkgICAgICAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAgR2RrRHJhZ0Nv bnRleHQgICAgICpjb250ZXh0KTsKCiAgIAogIHZvaWQgKCogZHJhZ19sZWF2ZSkJICAgICAgICAg ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAq Y29udGV4dCwKCQkJCSAgICBndWludCAgICAgICAgICAgICAgIHRpbWUpOwogIGdib29sZWFuICgq IGRyYWdfbW90aW9uKSAgICAgICAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkgICAg R2RrRHJhZ0NvbnRleHQgICAgICpjb250ZXh0LAoJCQkJICAgIGdpbnQgICAgICAgICAgICAgICAg eCwKCQkJCSAgICBnaW50ICAgICAgICAgICAgICAgIHksCgkJCQkgICAgZ3VpbnQgICAgICAgICAg ICAgICB0aW1lKTsKICBnYm9vbGVhbiAoKiBkcmFnX2Ryb3ApICAgICAgICAgICAoR3RrV2lkZ2V0 CSAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0RyYWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJ CSAgICBnaW50ICAgICAgICAgICAgICAgIHgsCgkJCQkgICAgZ2ludCAgICAgICAgICAgICAgICB5 LAoJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgdm9pZCAoKiBkcmFnX2RhdGFf cmVjZWl2ZWQpICAgICAgKEd0a1dpZGdldCAgICAgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0Ry YWdDb250ZXh0ICAgICAqY29udGV4dCwKCQkJCSAgICBnaW50ICAgICAgICAgICAgICAgIHgsCgkJ CQkgICAgZ2ludCAgICAgICAgICAgICAgICB5LAoJCQkJICAgIEd0a1NlbGVjdGlvbkRhdGEgICAq c2VsZWN0aW9uX2RhdGEsCgkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICBpbmZvLAoJCQkJICAg IGd1aW50ICAgICAgICAgICAgICAgdGltZSk7CiAgCiAgIAogIHZvaWQgKCogZGVidWdfbXNnKQkJ ICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCSAgICBjb25zdCBnY2hhcgkgICAgICAg KnN0cmluZyk7CgogICAKICBHdGtGdW5jdGlvbiBwYWQxOwogIEd0a0Z1bmN0aW9uIHBhZDI7CiAg R3RrRnVuY3Rpb24gcGFkMzsKICBHdGtGdW5jdGlvbiBwYWQ0Owp9OwoKc3RydWN0IF9HdGtXaWRn ZXRBdXhJbmZvCnsKICBnaW50MTYgIHg7CiAgZ2ludDE2ICB5OwogIGdpbnQxNiB3aWR0aDsKICBn aW50MTYgaGVpZ2h0Owp9OwoKc3RydWN0IF9HdGtXaWRnZXRTaGFwZUluZm8KewogIGdpbnQxNiAg ICAgb2Zmc2V0X3g7CiAgZ2ludDE2ICAgICBvZmZzZXRfeTsKICBHZGtCaXRtYXAgKnNoYXBlX21h c2s7Cn07CgoKR3RrVHlwZQkgICBndGtfd2lkZ2V0X2dldF90eXBlCQkgICh2b2lkKTsKR3RrV2lk Z2V0KiBndGtfd2lkZ2V0X25ldwkJICAoR3RrVHlwZQkJdHlwZSwKCQkJCQkgICBjb25zdCBnY2hh cgkgICAgICAgKmZpcnN0X2FyZ19uYW1lLAoJCQkJCSAgIC4uLik7Ckd0a1dpZGdldCogZ3RrX3dp ZGdldF9uZXd2CQkgIChHdGtUeXBlCQl0eXBlLAoJCQkJCSAgIGd1aW50CQluYXJncywKCQkJCQkg ICBHdGtBcmcJICAgICAgICphcmdzKTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlZgkJICAoR3RrV2lk Z2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3VucmVmCQkgIChHdGtXaWRn ZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfZGVzdHJveQkJICAoR3RrV2lk Z2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Rlc3Ryb3llZAkJICAoR3Rr V2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a1dpZGdldAkgICAgICAqKndpZGdldF9w b2ludGVyKTsKdm9pZAkgICBndGtfd2lkZ2V0X2dldAkJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lk Z2V0LAoJCQkJCSAgIEd0a0FyZwkgICAgICAgKmFyZyk7CnZvaWQJICAgZ3RrX3dpZGdldF9nZXR2 CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ3VpbnQJCW5hcmdzLAoJCQkJ CSAgIEd0a0FyZwkgICAgICAgKmFyZ3MpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0CQkgIChHdGtX aWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIgICAgICAgICAqZmlyc3Rf YXJnX25hbWUsCgkJCQkJICAgLi4uKTsKdm9pZAkgICBndGtfd2lkZ2V0X3NldHYJCSAgKEd0a1dp ZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBndWludAkJbmFyZ3MsCgkJCQkJICAgR3RrQXJn CSAgICAgICAqYXJncyk7CnZvaWQJICAgZ3RrX3dpZGdldF91bnBhcmVudAkJICAoR3RrV2lkZ2V0 CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3Nob3cJCSAgKEd0a1dpZGdldAkg ICAgICAgKndpZGdldCk7CnZvaWQgICAgICAgZ3RrX3dpZGdldF9zaG93X25vdyAgICAgICAgICAg IChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfaGlkZQkJ ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3Nob3dfYWxs CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfaGlkZV9h bGwJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF9tYXAJ CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF91bm1hcAkJ ICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlYWxpemUJ CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF91bnJlYWxp emUJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CgogCnZvaWQJICAgZ3RrX3dpZGdldF9x dWV1ZV9kcmF3CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdl dF9xdWV1ZV9kcmF3X2FyZWEJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdp bnQgICAgICAgICAgICAgICAgIHgsCgkJCQkJICAgZ2ludCAgICAgICAgICAgICAgICAgeSwKCQkJ CQkgICBnaW50ICAgICAgICAgICAgICAgICB3aWR0aCwKCQkJCQkgICBnaW50ICAgICAgICAgICAg ICAgICBoZWlnaHQpOwp2b2lkCSAgIGd0a193aWRnZXRfcXVldWVfY2xlYXIJICAoR3RrV2lkZ2V0 CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X3F1ZXVlX2NsZWFyX2FyZWEJICAo R3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdpbnQgICAgICAgICAgICAgICAgIHgs CgkJCQkJICAgZ2ludCAgICAgICAgICAgICAgICAgeSwKCQkJCQkgICBnaW50ICAgICAgICAgICAg ICAgICB3aWR0aCwKCQkJCQkgICBnaW50ICAgICAgICAgICAgICAgICBoZWlnaHQpOwoKCnZvaWQJ ICAgZ3RrX3dpZGdldF9xdWV1ZV9yZXNpemUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsK dm9pZAkgICBndGtfd2lkZ2V0X2RyYXcJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJ CQkgICBHZGtSZWN0YW5nbGUJICAgICAgICphcmVhKTsKdm9pZAkgICBndGtfd2lkZ2V0X2RyYXdf Zm9jdXMJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Ry YXdfZGVmYXVsdAkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2b2lkCSAgIGd0a193aWRn ZXRfc2l6ZV9yZXF1ZXN0CSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtS ZXF1aXNpdGlvbiAgICAgICpyZXF1aXNpdGlvbik7CnZvaWQJICAgZ3RrX3dpZGdldF9zaXplX2Fs bG9jYXRlCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtBbGxvY2F0aW9u ICAgICAgICphbGxvY2F0aW9uKTsKdm9pZCAgICAgICBndGtfd2lkZ2V0X2dldF9jaGlsZF9yZXF1 aXNpdGlvbiAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgICAgR3RrUmVxdWlzaXRp b24gICAgKnJlcXVpc2l0aW9uKTsKdm9pZAkgICBndGtfd2lkZ2V0X2FkZF9hY2NlbGVyYXRvcgkg IChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIgICAgICAg ICAqYWNjZWxfc2lnbmFsLAoJCQkJCSAgIEd0a0FjY2VsR3JvdXAgICAgICAgKmFjY2VsX2dyb3Vw LAoJCQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkgICBndWludCAg ICAgICAgICAgICAgICBhY2NlbF9tb2RzLAoJCQkJCSAgIEd0a0FjY2VsRmxhZ3MgICAgICAgIGFj Y2VsX2ZsYWdzKTsKdm9pZAkgICBndGtfd2lkZ2V0X3JlbW92ZV9hY2NlbGVyYXRvciAgKEd0a1dp ZGdldCAgICAgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtBY2NlbEdyb3VwICAgICAgICphY2Nl bF9ncm91cCwKCQkJCQkgICBndWludCAgICAgICAgICAgICAgICBhY2NlbF9rZXksCgkJCQkJICAg Z3VpbnQgICAgICAgICAgICAgICAgYWNjZWxfbW9kcyk7CnZvaWQJICAgZ3RrX3dpZGdldF9yZW1v dmVfYWNjZWxlcmF0b3JzIChHdGtXaWRnZXQgICAgICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29u c3QgZ2NoYXIJICAgICAgICphY2NlbF9zaWduYWwsCgkJCQkJICAgZ2Jvb2xlYW4JCXZpc2libGVf b25seSk7Cmd1aW50CSAgIGd0a193aWRnZXRfYWNjZWxlcmF0b3Jfc2lnbmFsICAoR3RrV2lkZ2V0 ICAgICAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a0FjY2VsR3JvdXAgICAgICAgKmFjY2VsX2dy b3VwLAoJCQkJCSAgIGd1aW50ICAgICAgICAgICAgICAgIGFjY2VsX2tleSwKCQkJCQkgICBndWlu dCAgICAgICAgICAgICAgICBhY2NlbF9tb2RzKTsKdm9pZAkgICBndGtfd2lkZ2V0X2xvY2tfYWNj ZWxlcmF0b3JzICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdl dF91bmxvY2tfYWNjZWxlcmF0b3JzIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwpnYm9vbGVh biAgIGd0a193aWRnZXRfYWNjZWxlcmF0b3JzX2xvY2tlZCAoR3RrV2lkZ2V0CSAgICAgICAqd2lk Z2V0KTsKZ2ludAkgICBndGtfd2lkZ2V0X2V2ZW50CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRn ZXQsCgkJCQkJICAgR2RrRXZlbnQJICAgICAgICpldmVudCk7CgpnYm9vbGVhbiAgIGd0a193aWRn ZXRfYWN0aXZhdGUJCSAgICAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCk7Cmdib29sZWFuICAg Z3RrX3dpZGdldF9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzIChHdGtXaWRnZXQgICAgICAgICp3aWRn ZXQsCgkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAgICAqaGFkanVzdG1lbnQsCgkJCQkJICAgICAg R3RrQWRqdXN0bWVudCAgICAqdmFkanVzdG1lbnQpOwogICAgIAp2b2lkCSAgIGd0a193aWRnZXRf cmVwYXJlbnQJCSAgKEd0a1dpZGdldAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtXaWRnZXQJ ICAgICAgICpuZXdfcGFyZW50KTsKdm9pZAkgICBndGtfd2lkZ2V0X3BvcHVwCQkgIChHdGtXaWRn ZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJCXgsCgkJCQkJICAgZ2ludAkJCXkpOwpn aW50CSAgIGd0a193aWRnZXRfaW50ZXJzZWN0CQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQs CgkJCQkJICAgR2RrUmVjdGFuZ2xlCSAgICAgICAqYXJlYSwKCQkJCQkgICBHZGtSZWN0YW5nbGUJ ICAgICAgICppbnRlcnNlY3Rpb24pOwoKdm9pZAkgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMJICAo R3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVs dAkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwoKdm9pZAkgICBndGtfd2lkZ2V0X3NldF9u YW1lCQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgY29uc3QgZ2NoYXIJICAg ICAgICpuYW1lKTsKZ2NoYXIqCSAgIGd0a193aWRnZXRfZ2V0X25hbWUJCSAgKEd0a1dpZGdldAkg ICAgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX3dpZGdldF9zZXRfc3RhdGUJCSAgKEd0a1dpZGdl dAkgICAgICAgKndpZGdldCwKCQkJCQkgICBHdGtTdGF0ZVR5cGUJCXN0YXRlKTsKdm9pZAkgICBn dGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJ CSAgIGdib29sZWFuCQlzZW5zaXRpdmUpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0X2FwcF9wYWlu dGFibGUJICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0LAoJCQkJCSAgIGdib29sZWFuCQlhcHBf cGFpbnRhYmxlKTsKdm9pZAkgICBndGtfd2lkZ2V0X3NldF9wYXJlbnQJICAoR3RrV2lkZ2V0CSAg ICAgICAqd2lkZ2V0LAoJCQkJCSAgIEd0a1dpZGdldAkgICAgICAgKnBhcmVudCk7CnZvaWQJICAg Z3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQs CgkJCQkJICAgR2RrV2luZG93CSAgICAgICAqcGFyZW50X3dpbmRvdyk7Ckdka1dpbmRvdyAqZ3Rr X3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwp2 b2lkCSAgIGd0a193aWRnZXRfc2V0X3Vwb3NpdGlvbgkgIChHdGtXaWRnZXQJICAgICAgICp3aWRn ZXQsCgkJCQkJICAgZ2ludAkJCXgsCgkJCQkJICAgZ2ludAkJCXkpOwp2b2lkCSAgIGd0a193aWRn ZXRfc2V0X3VzaXplCQkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJ CXdpZHRoLAoJCQkJCSAgIGdpbnQJCQloZWlnaHQpOwp2b2lkCSAgIGd0a193aWRnZXRfc2V0X2V2 ZW50cwkgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkJCWV2ZW50cyk7 CnZvaWQgICAgICAgZ3RrX3dpZGdldF9hZGRfZXZlbnRzICAgICAgICAgIChHdGtXaWRnZXQgICAg ICAgICAgICp3aWRnZXQsCgkJCQkJICAgZ2ludAkgICAgICAgICAgICAgICAgZXZlbnRzKTsKdm9p ZAkgICBndGtfd2lkZ2V0X3NldF9leHRlbnNpb25fZXZlbnRzIChHdGtXaWRnZXQJCSp3aWRnZXQs CgkJCQkJICAgIEdka0V4dGVuc2lvbk1vZGUJbW9kZSk7CgpHZGtFeHRlbnNpb25Nb2RlIGd0a193 aWRnZXRfZ2V0X2V4dGVuc2lvbl9ldmVudHMgKEd0a1dpZGdldAkqd2lkZ2V0KTsKR3RrV2lkZ2V0 KiAgIGd0a193aWRnZXRfZ2V0X3RvcGxldmVsCShHdGtXaWRnZXQJKndpZGdldCk7Ckd0a1dpZGdl dCogICBndGtfd2lkZ2V0X2dldF9hbmNlc3RvcgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0 a1R5cGUJd2lkZ2V0X3R5cGUpOwpHZGtDb2xvcm1hcCogZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAJ KEd0a1dpZGdldAkqd2lkZ2V0KTsKR2RrVmlzdWFsKiAgIGd0a193aWRnZXRfZ2V0X3Zpc3VhbAko R3RrV2lkZ2V0CSp3aWRnZXQpOwoKIAoKCgoKCnZvaWQgICAgICAgICBndGtfd2lkZ2V0X3NldF9j b2xvcm1hcCAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJCQkgR2RrQ29sb3JtYXAgICAg KmNvbG9ybWFwKTsKdm9pZCAgICAgICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbCAgICAgIChHdGtX aWRnZXQgICAgICAqd2lkZ2V0LCAKCQkJCQkgR2RrVmlzdWFsICAgICAgKnZpc3VhbCk7CgoKZ2lu dAkgICAgIGd0a193aWRnZXRfZ2V0X2V2ZW50cwkoR3RrV2lkZ2V0CSp3aWRnZXQpOwp2b2lkCSAg ICAgZ3RrX3dpZGdldF9nZXRfcG9pbnRlcgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIGdpbnQJ CSp4LAoJCQkJCSBnaW50CQkqeSk7CgpnYm9vbGVhbiAgICAgZ3RrX3dpZGdldF9pc19hbmNlc3Rv cgkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0a1dpZGdldAkqYW5jZXN0b3IpOwoKIAoKZ2lu dAkgICBndGtfd2lkZ2V0X2hpZGVfb25fZGVsZXRlCShHdGtXaWRnZXQJKndpZGdldCk7CgogCgp2 b2lkCSAgIGd0a193aWRnZXRfc2V0X3N0eWxlCQkoR3RrV2lkZ2V0CSp3aWRnZXQsCgkJCQkJIEd0 a1N0eWxlCSpzdHlsZSk7CnZvaWQJICAgZ3RrX3dpZGdldF9zZXRfcmNfc3R5bGUJKEd0a1dpZGdl dAkqd2lkZ2V0KTsKdm9pZAkgICBndGtfd2lkZ2V0X2Vuc3VyZV9zdHlsZQkoR3RrV2lkZ2V0CSp3 aWRnZXQpOwpHdGtTdHlsZSogIGd0a193aWRnZXRfZ2V0X3N0eWxlCQkoR3RrV2lkZ2V0CSp3aWRn ZXQpOwp2b2lkCSAgIGd0a193aWRnZXRfcmVzdG9yZV9kZWZhdWx0X3N0eWxlIChHdGtXaWRnZXQJ KndpZGdldCk7Cgp2b2lkICAgICAgIGd0a193aWRnZXRfbW9kaWZ5X3N0eWxlICAgICAgKEd0a1dp ZGdldCAgICAgICp3aWRnZXQsCgkJCQkJIEd0a1JjU3R5bGUgICAgICpzdHlsZSk7CgogCgoKdm9p ZCAgIGd0a193aWRnZXRfc2V0X2NvbXBvc2l0ZV9uYW1lCShHdGtXaWRnZXQJKndpZGdldCwKCQkJ CQkgY29uc3QgZ2NoYXIgICAJKm5hbWUpOwpnY2hhciogZ3RrX3dpZGdldF9nZXRfY29tcG9zaXRl X25hbWUJKEd0a1dpZGdldAkqd2lkZ2V0KTsKICAgICAKIAp2b2lkICAgICAgIGd0a193aWRnZXRf cmVzZXRfcmNfc3R5bGVzICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwoKIAoKCgp2b2lkCSAg ICAgZ3RrX3dpZGdldF9wdXNoX3N0eWxlCSAgICAgKEd0a1N0eWxlCSAqc3R5bGUpOwp2b2lkCSAg ICAgZ3RrX3dpZGdldF9wdXNoX2NvbG9ybWFwCSAgICAgKEdka0NvbG9ybWFwICpjbWFwKTsKdm9p ZAkgICAgIGd0a193aWRnZXRfcHVzaF92aXN1YWwJICAgICAoR2RrVmlzdWFsCSAqdmlzdWFsKTsK dm9pZAkgICAgIGd0a193aWRnZXRfcHVzaF9jb21wb3NpdGVfY2hpbGQgKHZvaWQpOwp2b2lkCSAg ICAgZ3RrX3dpZGdldF9wb3BfY29tcG9zaXRlX2NoaWxkICAodm9pZCk7CnZvaWQJICAgICBndGtf d2lkZ2V0X3BvcF9zdHlsZQkgICAgICh2b2lkKTsKdm9pZAkgICAgIGd0a193aWRnZXRfcG9wX2Nv bG9ybWFwCSAgICAgKHZvaWQpOwp2b2lkCSAgICAgZ3RrX3dpZGdldF9wb3BfdmlzdWFsCSAgICAg KHZvaWQpOwoKIAoKdm9pZAkgICAgIGd0a193aWRnZXRfc2V0X2RlZmF1bHRfc3R5bGUgICAgKEd0 a1N0eWxlCSAgKnN0eWxlKTsKdm9pZAkgICAgIGd0a193aWRnZXRfc2V0X2RlZmF1bHRfY29sb3Jt YXAgKEdka0NvbG9ybWFwICpjb2xvcm1hcCk7CnZvaWQJICAgICBndGtfd2lkZ2V0X3NldF9kZWZh dWx0X3Zpc3VhbCAgIChHZGtWaXN1YWwJICAqdmlzdWFsKTsKR3RrU3R5bGUqICAgIGd0a193aWRn ZXRfZ2V0X2RlZmF1bHRfc3R5bGUgICAgKHZvaWQpOwpHZGtDb2xvcm1hcCogZ3RrX3dpZGdldF9n ZXRfZGVmYXVsdF9jb2xvcm1hcCAodm9pZCk7Ckdka1Zpc3VhbCogICBndGtfd2lkZ2V0X2dldF9k ZWZhdWx0X3Zpc3VhbCAgICh2b2lkKTsKCiAKCnZvaWQJICAgICBndGtfd2lkZ2V0X3NoYXBlX2Nv bWJpbmVfbWFzayAoR3RrV2lkZ2V0ICp3aWRnZXQsCgkJCQkJICAgIEdka0JpdG1hcCAqc2hhcGVf bWFzaywKCQkJCQkgICAgZ2ludCAgICAgICBvZmZzZXRfeCwKCQkJCQkgICAgZ2ludCAgICAgICBv ZmZzZXRfeSk7CgogCnZvaWQJICAgICBndGtfd2lkZ2V0X3Jlc2V0X3NoYXBlcwkgICAoR3RrV2lk Z2V0ICp3aWRnZXQpOwoKIAoKCnZvaWQJICAgICBndGtfd2lkZ2V0X3BhdGgJCSAgIChHdGtXaWRn ZXQgKndpZGdldCwKCQkJCQkgICAgZ3VpbnQgICAgICpwYXRoX2xlbmd0aCwKCQkJCQkgICAgZ2No YXIgICAgKipwYXRoLAoJCQkJCSAgICBnY2hhciAgICAqKnBhdGhfcmV2ZXJzZWQpOwp2b2lkCSAg ICAgZ3RrX3dpZGdldF9jbGFzc19wYXRoCSAgIChHdGtXaWRnZXQgKndpZGdldCwKCQkJCQkgICAg Z3VpbnQgICAgICpwYXRoX2xlbmd0aCwKCQkJCQkgICAgZ2NoYXIgICAgKipwYXRoLAoJCQkJCSAg ICBnY2hhciAgICAqKnBhdGhfcmV2ZXJzZWQpOwoKCgoKCgoKCgp9CgoKCgojIDMyICIvb3B0L2d0 ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2RuZC5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUv Z3RrLTEuMi9ndGsvZ3Rrc2VsZWN0aW9uLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc3RydWN0IF9HdGtTZWxlY3Rpb25EYXRh IEd0a1NlbGVjdGlvRGF0YTsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgICAgR3RrVGFy Z2V0TGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldEVudHJ5ICAgR3RrVGFyZ2V0RW50cnk7 CgpzdHJ1Y3QgX0d0a1RhcmdldEVudHJ5IHsKICBnY2hhciAqdGFyZ2V0OwogIGd1aW50ICBmbGFn czsKICBndWludCAgaW5mbzsKfTsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldFBhaXIg R3RrVGFyZ2V0UGFpcjsKCiAKc3RydWN0IF9HdGtUYXJnZXRMaXN0IHsKICBHTGlzdCAqbGlzdDsK ICBndWludCByZWZfY291bnQ7Cn07CgpzdHJ1Y3QgX0d0a1RhcmdldFBhaXIgewogIEdka0F0b20g ICB0YXJnZXQ7CiAgZ3VpbnQgICAgIGZsYWdzOwogIGd1aW50ICAgICBpbmZvOwp9OwoKR3RrVGFy Z2V0TGlzdCAqZ3RrX3RhcmdldF9saXN0X25ldyAgICAgICAoY29uc3QgR3RrVGFyZ2V0RW50cnkg KnRhcmdldHMsCgkJCQkJICBndWludCAgICAgICAgICAgICAgICAgbnRhcmdldHMpOwp2b2lkICAg ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfcmVmICAgICAgIChHdGtUYXJnZXRMaXN0ICAqbGlzdCk7 CnZvaWQgICAgICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZiAgICAgKEd0a1RhcmdldExpc3Qg ICpsaXN0KTsKdm9pZCAgICAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZCAgICAgICAoR3RrVGFy Z2V0TGlzdCAgKmxpc3QsCgkJCQkgIAkgIEdka0F0b20gICAgICAgICB0YXJnZXQsCgkJCQkJICBn dWludCAgICAgICAgICAgZmxhZ3MsCgkJCQkJICBndWludCAgICAgICAgICAgaW5mbyk7CnZvaWQg ICAgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGFibGUgKEd0a1RhcmdldExpc3QgICAgICAg ICpsaXN0LAoJCQkJCSAgY29uc3QgR3RrVGFyZ2V0RW50cnkgKnRhcmdldHMsCgkJCQkJICBndWlu dCAgICAgICAgICAgICAgICAgbnRhcmdldHMpOwp2b2lkICAgICAgICAgICBndGtfdGFyZ2V0X2xp c3RfcmVtb3ZlICAgIChHdGtUYXJnZXRMaXN0ICAqbGlzdCwKCQkJCQkgIEdka0F0b20gICAgICAg ICB0YXJnZXQpOwpnYm9vbGVhbiAgICAgICBndGtfdGFyZ2V0X2xpc3RfZmluZCAgICAgIChHdGtU YXJnZXRMaXN0ICAqbGlzdCwKCQkJCQkgIEdka0F0b20gICAgICAgICB0YXJnZXQsCgkJCQkJICBn dWludCAgICAgICAgICAqaW5mbyk7CgogCgpnaW50IGd0a19zZWxlY3Rpb25fb3duZXJfc2V0IChH dGtXaWRnZXQgCSAgKndpZGdldCwKCQkJICAgICAgR2RrQXRvbSAgICAJICAgc2VsZWN0aW9uLAoJ CQkgICAgICBndWludDMyICAgIAkgICB0aW1lKTsKdm9pZCBndGtfc2VsZWN0aW9uX2FkZF90YXJn ZXQgKEd0a1dpZGdldCAgICAgICAgICAgKndpZGdldCwgCgkJCSAgICAgICBHZGtBdG9tICAgICAg ICAgICAgICBzZWxlY3Rpb24sCgkJCSAgICAgICBHZGtBdG9tICAgICAgICAgICAgICB0YXJnZXQs CgkJCSAgICAgICBndWludCAgICAgICAgICAgICAgICBpbmZvKTsKdm9pZCBndGtfc2VsZWN0aW9u X2FkZF90YXJnZXRzIChHdGtXaWRnZXQgICAgICAgICAgICAqd2lkZ2V0LCAKCQkJCUdka0F0b20g ICAgICAgICAgICAgICBzZWxlY3Rpb24sCgkJCQljb25zdCBHdGtUYXJnZXRFbnRyeSAqdGFyZ2V0 cywKCQkJCWd1aW50ICAgICAgICAgICAgICAgICBudGFyZ2V0cyk7CmdpbnQgZ3RrX3NlbGVjdGlv bl9jb252ZXJ0ICAgKEd0a1dpZGdldCAJICAqd2lkZ2V0LCAKCQkJICAgICAgR2RrQXRvbSAgICAJ ICAgc2VsZWN0aW9uLCAKCQkJICAgICAgR2RrQXRvbSAgICAJICAgdGFyZ2V0LAoJCQkgICAgICBn dWludDMyICAgIAkgICB0aW1lKTsKCgp2b2lkIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQgKEd0a1Nl bGVjdGlvbkRhdGEgKnNlbGVjdGlvbl9kYXRhLAoJCQkgICAgIEdka0F0b20gICAgICAgICAgIHR5 cGUsCgkJCSAgICAgZ2ludCAgICAgICAgICAgICAgZm9ybWF0LAoJCQkgICAgIGNvbnN0IGd1Y2hh ciAgICAgKmRhdGEsCgkJCSAgICAgZ2ludCAgICAgICAgICAgICAgbGVuZ3RoKTsKCiAKCnZvaWQg Z3RrX3NlbGVjdGlvbl9yZW1vdmVfYWxsICAgICAgKEd0a1dpZGdldCAqd2lkZ2V0KTsKCiAKCmdp bnQgZ3RrX3NlbGVjdGlvbl9jbGVhciAgICAgICAgICAgKEd0a1dpZGdldCAJICAgICAgKndpZGdl dCwKCQkJCSAgICBHZGtFdmVudFNlbGVjdGlvbiAqZXZlbnQpOwpnaW50IGd0a19zZWxlY3Rpb25f cmVxdWVzdCAgICAgICAgIChHdGtXaWRnZXQgIAkgICAgICAqd2lkZ2V0LAoJCQkJICAgIEdka0V2 ZW50U2VsZWN0aW9uICpldmVudCk7CmdpbnQgZ3RrX3NlbGVjdGlvbl9pbmNyX2V2ZW50ICAgICAg KEdka1dpbmRvdyAgICAgICAgICp3aW5kb3csCgkJCQkgICAgR2RrRXZlbnRQcm9wZXJ0eSAgKmV2 ZW50KTsKZ2ludCBndGtfc2VsZWN0aW9uX25vdGlmeSAgICAgICAgICAoR3RrV2lkZ2V0ICAgICAg ICAgKndpZGdldCwKCQkJCSAgICBHZGtFdmVudFNlbGVjdGlvbiAqZXZlbnQpOwpnaW50IGd0a19z ZWxlY3Rpb25fcHJvcGVydHlfbm90aWZ5IChHdGtXaWRnZXQgICAgICAgICAqd2lkZ2V0LAoJCQkJ ICAgIEdka0V2ZW50UHJvcGVydHkgICpldmVudCk7Ckd0a1NlbGVjdGlvRGF0YSAqZ3RrX3NlbGVj dGlvbl9kYXRhX2NvcHkgKEd0a1NlbGVjdGlvbkRhdGEgKmRhdGEpOwp2b2lkCQkgZ3RrX3NlbGVj dGlvbl9kYXRhX2ZyZWUgKEd0a1NlbGVjdGlvbkRhdGEgKmRhdGEpOwoKCgoKfQoKCgoKIyAzMyAi L29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtkbmQuaCIgMgoKCgpleHRlcm4gIkMiIHsK Cgp0eXBlZGVmIGVudW0gewogIEdUS19ERVNUX0RFRkFVTFRfTU9USU9OICAgICA9IDEgPDwgMCwg IAogIEdUS19ERVNUX0RFRkFVTFRfSElHSExJR0hUICA9IDEgPDwgMSwgIAogIEdUS19ERVNUX0RF RkFVTFRfRFJPUCAgICAgICA9IDEgPDwgMiwgIAogIEdUS19ERVNUX0RFRkFVTFRfQUxMICAgICAg ICA9IDB4MDcKfSBHdGtEZXN0RGVmYXVsdHM7CgogCgp0eXBlZGVmIGVudW0gewogIEdUS19UQVJH RVRfU0FNRV9BUFAgPSAxIDw8IDAsICAgICAKICBHVEtfVEFSR0VUX1NBTUVfV0lER0VUID0gMSA8 PCAxICAgCn0gR3RrVGFyZ2V0RmxhZ3M7CgogCgp2b2lkIGd0a19kcmFnX2dldF9kYXRhIChHdGtX aWRnZXQgICAgICAqd2lkZ2V0LAoJCQlHZGtEcmFnQ29udGV4dCAqY29udGV4dCwKCQkJR2RrQXRv bSAgICAgICAgIHRhcmdldCwKCQkJZ3VpbnQzMiAgICAgICAgIHRpbWUpOwp2b2lkIGd0a19kcmFn X2ZpbmlzaCAgIChHZGtEcmFnQ29udGV4dCAqY29udGV4dCwKCQkJZ2Jvb2xlYW4gICAgICAgIHN1 Y2Nlc3MsCgkJCWdib29sZWFuICAgICAgICBkZWwsCgkJCWd1aW50MzIgICAgICAgICB0aW1lKTsK Ckd0a1dpZGdldCAqZ3RrX2RyYWdfZ2V0X3NvdXJjZV93aWRnZXQgKEdka0RyYWdDb250ZXh0ICpj b250ZXh0KTsKCnZvaWQgZ3RrX2RyYWdfaGlnaGxpZ2h0ICAgKEd0a1dpZGdldCAgKndpZGdldCk7 CnZvaWQgZ3RrX2RyYWdfdW5oaWdobGlnaHQgKEd0a1dpZGdldCAgKndpZGdldCk7Cgp2b2lkIGd0 a19kcmFnX2Rlc3Rfc2V0ICAgKEd0a1dpZGdldCAgICAgICAgICAgICp3aWRnZXQsCgkJCSAgR3Rr RGVzdERlZmF1bHRzICAgICAgIGZsYWdzLAogIAkJICAgICAgICAgIGNvbnN0IEd0a1RhcmdldEVu dHJ5ICp0YXJnZXRzLAoJCQkgIGdpbnQgICAgICAgICAgICAgICAgICBuX3RhcmdldHMsCgkJCSAg R2RrRHJhZ0FjdGlvbiAgICAgICAgIGFjdGlvbnMpOwoKdm9pZCBndGtfZHJhZ19kZXN0X3NldF9w cm94eSAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCwKCQkJICAgICAgR2RrV2luZG93ICAgICAgKnBy b3h5X3dpbmRvdywKCQkJICAgICAgR2RrRHJhZ1Byb3RvY29sIHByb3RvY29sLAoJCQkgICAgICBn Ym9vbGVhbiAgICAgICAgdXNlX2Nvb3JkaW5hdGVzKTsKCiAKCgoKdm9pZCBndGtfZHJhZ19kZXN0 X3Vuc2V0IChHdGtXaWRnZXQgICAgICAgICAgKndpZGdldCk7CgogCgp2b2lkIGd0a19kcmFnX3Nv dXJjZV9zZXQgIChHdGtXaWRnZXQgICAgICAgICAgICAqd2lkZ2V0LAoJCQkgICBHZGtNb2RpZmll clR5cGUgICAgICAgc3RhcnRfYnV0dG9uX21hc2ssCgkJCSAgIGNvbnN0IEd0a1RhcmdldEVudHJ5 ICp0YXJnZXRzLAoJCQkgICBnaW50ICAgICAgICAgICAgICAgICAgbl90YXJnZXRzLAoJCQkgICBH ZGtEcmFnQWN0aW9uICAgICAgICAgYWN0aW9ucyk7Cgp2b2lkIGd0a19kcmFnX3NvdXJjZV91bnNl dCAoR3RrV2lkZ2V0ICAgICAgICAqd2lkZ2V0KTsKCnZvaWQgZ3RrX2RyYWdfc291cmNlX3NldF9p Y29uIChHdGtXaWRnZXQgICAgICp3aWRnZXQsCgkJCSAgICAgICBHZGtDb2xvcm1hcCAgICpjb2xv cm1hcCwKCQkJICAgICAgIEdka1BpeG1hcCAgICAgKnBpeG1hcCwKCQkJICAgICAgIEdka0JpdG1h cCAgICAgKm1hc2spOwoKIAoKCgpHZGtEcmFnQ29udGV4dCAqZ3RrX2RyYWdfYmVnaW4gKEd0a1dp ZGdldCAgICAgICAgICp3aWRnZXQsCgkJCQlHdGtUYXJnZXRMaXN0ICAgICAqdGFyZ2V0cywKCQkJ CUdka0RyYWdBY3Rpb24gICAgICBhY3Rpb25zLAoJCQkJZ2ludCAgICAgICAgICAgICAgIGJ1dHRv biwKCQkJCUdka0V2ZW50ICAgICAgICAgICpldmVudCk7CgogCgp2b2lkIGd0a19kcmFnX3NldF9p Y29uX3dpZGdldCAgKEdka0RyYWdDb250ZXh0ICAgICpjb250ZXh0LAoJCQkJR3RrV2lkZ2V0ICAg ICAgICAgKndpZGdldCwKCQkJCWdpbnQgICAgICAgICAgICAgICBob3RfeCwKCQkJCWdpbnQgICAg ICAgICAgICAgICBob3RfeSk7Cgp2b2lkIGd0a19kcmFnX3NldF9pY29uX3BpeG1hcCAgKEdka0Ry YWdDb250ZXh0ICAgICpjb250ZXh0LAoJCQkJR2RrQ29sb3JtYXAgICAgICAgKmNvbG9ybWFwLAoJ CQkJR2RrUGl4bWFwICAgICAgICAgKnBpeG1hcCwKCQkJCUdka0JpdG1hcCAgICAgICAgICptYXNr LAoJCQkJZ2ludCAgICAgICAgICAgICAgIGhvdF94LAoJCQkJZ2ludCAgICAgICAgICAgICAgIGhv dF95KTsKCnZvaWQgZ3RrX2RyYWdfc2V0X2ljb25fZGVmYXVsdCAoR2RrRHJhZ0NvbnRleHQgICAg KmNvbnRleHQpOwoKdm9pZCBndGtfZHJhZ19zZXRfZGVmYXVsdF9pY29uIChHZGtDb2xvcm1hcCAg ICpjb2xvcm1hcCwKCQkJCUdka1BpeG1hcCAgICAgKnBpeG1hcCwKCQkJCUdka0JpdG1hcCAgICAg Km1hc2ssCgkJCSAgICAgICAgZ2ludCAgICAgICAgICAgaG90X3gsCgkJCSAgICAgICAgZ2ludCAg ICAgICAgICAgaG90X3kpOwoKCiAKdm9pZCBndGtfZHJhZ19zb3VyY2VfaGFuZGxlX2V2ZW50IChH dGtXaWRnZXQgKndpZGdldCwKCQkJCSAgIEdka0V2ZW50ICAqZXZlbnQpOwp2b2lkIGd0a19kcmFn X2Rlc3RfaGFuZGxlX2V2ZW50IChHdGtXaWRnZXQgKnRvcGxldmVsLAoJCQkJIEdka0V2ZW50ICAq ZXZlbnQpOwoKCn0KCgoKCgoKIyAzNCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aWRnZXQuaCIg MgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrVGFyZ2V0RW50cnkgR3RrVGFyZ2V0RW50cnk7CnR5cGVk ZWYgc3RydWN0IF9HdGtUYXJnZXRMaXN0IEd0a1RhcmdldExpc3Q7CgpuYW1lc3BhY2UgR3RrIHsK Y2xhc3MgV2lkZ2V0OwpjbGFzcyBXaWRnZXRfQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6 V2lkZ2V0ICp3cmFwIChHdGtXaWRnZXQgKm8pOyB9CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRn ZXRfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRCdXR0b24qIHAwKTsKZXh0 ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9idXR0b25fcmVsZWFzZV9ldmVudChHdGtXaWRnZXQq LEdka0V2ZW50QnV0dG9uKiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfbW90aW9u X25vdGlmeV9ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50TW90aW9uKiBwMCk7CmV4dGVybiAiQyIg Z2ludCBndGttbV93aWRnZXRfZGVsZXRlX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRBbnkqIHAw KTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KixH ZGtFdmVudEV4cG9zZSogcDApOwpleHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X2tleV9wcmVz c19ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50S2V5KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGtt bV93aWRnZXRfa2V5X3JlbGVhc2VfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEtleSogcDApOwpl eHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X2VudGVyX25vdGlmeV9ldmVudChHdGtXaWRnZXQq LEdka0V2ZW50Q3Jvc3NpbmcqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9sZWF2 ZV9ub3RpZnlfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudENyb3NzaW5nKiBwMCk7CmV4dGVybiAi QyIgZ2ludCBndGttbV93aWRnZXRfY29uZmlndXJlX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRD b25maWd1cmUqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF9mb2N1c19pbl9ldmVu dChHdGtXaWRnZXQqLEdka0V2ZW50Rm9jdXMqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dp ZGdldF9mb2N1c19vdXRfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEZvY3VzKiBwMCk7CmV4dGVy biAiQyIgZ2ludCBndGttbV93aWRnZXRfbWFwX2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRBbnkq IHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21tX3dpZGdldF91bm1hcF9ldmVudChHdGtXaWRnZXQq LEdka0V2ZW50QW55KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfcHJvcGVydHlf bm90aWZ5X2V2ZW50KEd0a1dpZGdldCosR2RrRXZlbnRQcm9wZXJ0eSogcDApOwpleHRlcm4gIkMi IGdpbnQgZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9jbGVhcl9ldmVudChHdGtXaWRnZXQqLEdka0V2 ZW50U2VsZWN0aW9uKiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfc2VsZWN0aW9u X3JlcXVlc3RfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudFNlbGVjdGlvbiogcDApOwpleHRlcm4g IkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9ub3RpZnlfZXZlbnQoR3RrV2lkZ2V0KixH ZGtFdmVudFNlbGVjdGlvbiogcDApOwpleHRlcm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3Byb3hp bWl0eV9pbl9ldmVudChHdGtXaWRnZXQqLEdka0V2ZW50UHJveGltaXR5KiBwMCk7CmV4dGVybiAi QyIgZ2ludCBndGttbV93aWRnZXRfcHJveGltaXR5X291dF9ldmVudChHdGtXaWRnZXQqLEdka0V2 ZW50UHJveGltaXR5KiBwMCk7CmV4dGVybiAiQyIgZ2ludCBndGttbV93aWRnZXRfY2xpZW50X2V2 ZW50KEd0a1dpZGdldCosR2RrRXZlbnRDbGllbnQqIHAwKTsKZXh0ZXJuICJDIiBnaW50IGd0a21t X3dpZGdldF9ub19leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KixHZGtFdmVudEFueSogcDApOwpleHRl cm4gIkMiIGdpbnQgZ3RrbW1fd2lkZ2V0X3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50KEd0a1dpZGdl dCosR2RrRXZlbnRWaXNpYmlsaXR5KiBwMCk7Cm5hbWVzcGFjZSBHdGsKewpjbGFzcyBTdHlsZTsK Y2xhc3MgQWNjZWxHcm91cDsKY2xhc3MgQWRqdXN0bWVudDsKY2xhc3MgV2luZG93OwoKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgV2lkZ2V0IDogcHVibGljIE9iamVjdCB7Cgpw dWJsaWM6CiAgdHlwZWRlZiBXaWRnZXQgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVm IFdpZGdldF9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBHdGtXaWRnZXQgICAgICAg ICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrV2lkZ2V0Q2xhc3MgICAgICBCYXNlQ2xh c3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgV2lkZ2V0X0NsYXNzOwogIHN0YXRpYyBD cHBDbGFzc1R5cGUgd2lkZ2V0X2NsYXNzOwoKICBXaWRnZXQoY29uc3QgV2lkZ2V0Jik7CiAgV2lk Z2V0JiBvcGVyYXRvcj0oY29uc3QgV2lkZ2V0Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5p dGlhbGl6ZV9jbGFzcygpOwogIGV4cGxpY2l0IFdpZGdldChHdGtXaWRnZXQgKmNhc3RpdGVtKTsK CnB1YmxpYzoKICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a1dpZGdldCogZ3Rrb2Jq KCkgICAgICAgICAgICAgeyByZXR1cm4gKEd0a1dpZGdldCopKGd0a29iamVjdCk7IH0KICBjb25z dCBHdGtXaWRnZXQqIGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtXaWRnZXQqKShndGtvYmpl Y3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9iamVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRp YyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxfbmFtZXNbXTsKCiAgdmlydHVhbCB+V2lkZ2V0KCk7 Cgpwcml2YXRlOgoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBNYWluOwoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgogIHZvaWQgdW5wYXJlbnQoKTsKCgoKICB2b2lkIHNob3dfbm93 KCk7CgoKIAoKCiAgdm9pZCBxdWV1ZV9kcmF3KCk7CgogIHZvaWQgcXVldWVfZHJhd19hcmVhKGdp bnQgeCxnaW50IHksZ2ludCB3aWR0aCxnaW50IGhlaWdodCk7CgoKCiAgdm9pZCBxdWV1ZV9jbGVh cigpOwoKICB2b2lkIHF1ZXVlX2NsZWFyX2FyZWEoZ2ludCB4LGdpbnQgeSxnaW50IHdpZHRoLGdp bnQgaGVpZ2h0KTsKCgoKICB2b2lkIHF1ZXVlX3Jlc2l6ZSgpOwoKCiAKCiAKIAogCiAKIAogCgoK ICB2b2lkIGxvY2tfYWNjZWxlcmF0b3JzKCk7CgoKICB2b2lkIHVubG9ja19hY2NlbGVyYXRvcnMo KTsKCgogICAKICBib29sIGFjY2VsZXJhdG9yc19sb2NrZWQoKTsKCgogICAKCiAgdm9pZCBhZGRf YWNjZWxlcmF0b3IoY29uc3QgbnN0cmluZyYgYWNjZWxfc2lnbmFsLEd0azo6QWNjZWxHcm91cCYg YWNjZWxfZ3JvdXAsZ3VpbnQgYWNjZWxfa2V5LGd1aW50IGFjY2VsX21vZHMsR3RrQWNjZWxGbGFn cyBhY2NlbF9mbGFncyk7CgogICAKCgoKCiAgdm9pZCByZW1vdmVfYWNjZWxlcmF0b3IoR3RrOjpB Y2NlbEdyb3VwJiBhY2NlbF9ncm91cCxndWludCBhY2NlbF9rZXksZ3VpbnQgYWNjZWxfbW9kcyk7 CgogICAKCgoKICB2b2lkIHJlbW92ZV9hY2NlbGVyYXRvcnMoY29uc3QgbnN0cmluZyYgYWNjZWxf c2lnbmFsLGJvb2wgdmlzaWJsZV9vbmx5KTsKCgoKICBib29sIGFjdGl2YXRlKCk7CgoKICAgCiAg IAogICAKICAgCiAgIAogICAKCgogIHZvaWQgcmVwYXJlbnQoR3RrOjpXaWRnZXQmIG5ld3BhcmVu dCk7CgoKCgogIHZvaWQgcG9wdXAoZ2ludCB4LGdpbnQgeSk7CgoKCgogIGdpbnQgaW50ZXJzZWN0 KGNvbnN0IEdka19SZWN0YW5nbGUmIGFyZWEsY29uc3QgR2RrX1JlY3RhbmdsZSYgaW50ZXJzZWN0 aW9uKSBjb25zdDsKCgoKICB2b2lkIGdyYWJfZGVmYXVsdCgpOwoKCgogIHZvaWQgc2V0X25hbWUo Y29uc3QgbnN0cmluZyYgbmFtZSk7CgogICAKCgogIEd0azo6bnN0cmluZyBnZXRfbmFtZSgpIGNv bnN0OwoKICBHdGtTdGF0ZVR5cGUgZ2V0X3N0YXRlKCkgY29uc3Q7CgoKICB2b2lkIHNldF9zdGF0 ZShHdGtTdGF0ZVR5cGUgc3RhdGUpOwoKCgogIHZvaWQgc2V0X3NlbnNpdGl2ZShib29sIHNlbnNp dGl2ZSk7CgoKCiAgdm9pZCBzZXRfYXBwX3BhaW50YWJsZShib29sIGFwcF9wYWludGFibGUpOwoK ICAgCiAgR3RrOjpXaWRnZXQqIGdldF9wYXJlbnQoKSBjb25zdDsKCgoKICB2b2lkIHNldF9wYXJl bnRfd2luZG93KGNvbnN0IEdka19XaW5kb3cmIHBhcmVudF93aW5kb3cpOwoKICAgCgoKICBHZGtf V2luZG93IGdldF9wYXJlbnRfd2luZG93KCkgY29uc3Q7CgoKCgoKICB2b2lkIHNldF91cG9zaXRp b24oZ2ludCB4LGdpbnQgeSk7CgogICAKCgoKICB2b2lkIHNldF91c2l6ZShnaW50IHgsZ2ludCB5 KTsKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoK CiAgdm9pZCBzZXRfZXZlbnRzKGdpbnQgZXZlbnRzKTsKCgoKICB2b2lkIGFkZF9ldmVudHMoZ2lu dCBldmVudHMpOwoKCgogIHZvaWQgc2V0X2V4dGVuc2lvbl9ldmVudHMoR2RrRXh0ZW5zaW9uTW9k ZSBtb2RlKTsKCgoKICBHZGtFeHRlbnNpb25Nb2RlIGdldF9leHRlbnNpb25fZXZlbnRzKCkgY29u c3Q7CgogICAKICAgCgoKICBHdGs6OldpbmRvdyogZ2V0X3RvcGxldmVsKCk7CgogICAKICAgCgoK ICBHdGs6OldpZGdldCogZ2V0X2FuY2VzdG9yKEd0a1R5cGUgdHlwZSkgY29uc3Q7CgogICAKCgog IEdka19Db2xvcm1hcCBnZXRfY29sb3JtYXAoKSBjb25zdDsKCiAgIAoKCiAgR2RrX1Zpc3VhbCBn ZXRfdmlzdWFsKCkgY29uc3Q7CgogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRf Y29sb3JtYXAoY29uc3QgR2RrX0NvbG9ybWFwJiBjb2xvcm1hcCk7CgogICAKICAgCiAgIAogICAK ICAgCiAgIAoKCiAgdm9pZCBzZXRfdmlzdWFsKGNvbnN0IEdka19WaXN1YWwmIHZpc3VhbCk7Cgog ICAKCgogIGdpbnQgZ2V0X2V2ZW50cygpIGNvbnN0OwoKCgogIHZvaWQgZ2V0X3BvaW50ZXIoZ2lu dCYgeCxnaW50JiB5KSBjb25zdDsKCgoKICBib29sIGlzX2FuY2VzdG9yKEd0azo6V2lkZ2V0JiB3 aWRnZXQpIGNvbnN0OwoKCgogIHZvaWQgc2V0X3N0eWxlKEd0azo6U3R5bGUmIHN0eWxlKTsKCgoK ICB2b2lkIHNldF9yY19zdHlsZSgpOwoKCgogIHZvaWQgZW5zdXJlX3N0eWxlKCk7CgogICAKICAg CgoKICBHdGs6OlN0eWxlKiBnZXRfc3R5bGUoKSBjb25zdDsKCgoKICB2b2lkIHJlc3RvcmVfZGVm YXVsdF9zdHlsZSgpOwoKCgogIHZvaWQgc2V0X2NvbXBvc2l0ZV9uYW1lKGNvbnN0IG5zdHJpbmcm IG5hbWUpOwoKCgogIEd0azo6bnN0cmluZyBnZXRfY29tcG9zaXRlX25hbWUoKTsKCgoKICB2b2lk IHJlc2V0X3JjX3N0eWxlcygpOwoKCgogCgoKICBzdGF0aWMgdm9pZCBwdXNoX3N0eWxlKEd0azo6 U3R5bGUmIHN0eWxlKTsKCgoKICBzdGF0aWMgdm9pZCBwdXNoX2NvbG9ybWFwKGNvbnN0IEdka19D b2xvcm1hcCYgY21hcCk7CgoKCiAgc3RhdGljIHZvaWQgcHVzaF92aXN1YWwoY29uc3QgR2RrX1Zp c3VhbCYgdmlzdWFsKTsKCgoKICBzdGF0aWMgdm9pZCBwdXNoX2NvbXBvc2l0ZV9jaGlsZCgpOwoK CgogIHN0YXRpYyB2b2lkIHBvcF9zdHlsZSgpOwoKCgogIHN0YXRpYyB2b2lkIHBvcF9jb2xvcm1h cCgpOwoKCgogIHN0YXRpYyB2b2lkIHBvcF92aXN1YWwoKTsKCgoKICBzdGF0aWMgdm9pZCBwb3Bf Y29tcG9zaXRlX2NoaWxkKCk7CgoKCiAKCgogIHN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3N0eWxl KEd0azo6U3R5bGUmIHN0eWxlKTsKCgoKICBzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF9jb2xvcm1h cChjb25zdCBHZGtfQ29sb3JtYXAmIGNvbG9ybWFwKTsKCgoKICBzdGF0aWMgdm9pZCBzZXRfZGVm YXVsdF92aXN1YWwoY29uc3QgR2RrX1Zpc3VhbCYgdmlzdWFsKTsKCgoKICBzdGF0aWMgR3RrOjpT dHlsZSogZ2V0X2RlZmF1bHRfc3R5bGUoKTsKCgoKICBzdGF0aWMgR2RrX0NvbG9ybWFwIGdldF9k ZWZhdWx0X2NvbG9ybWFwKCk7CgoKCiAgc3RhdGljIEdka19WaXN1YWwgZ2V0X2RlZmF1bHRfdmlz dWFsKCk7CgoKIAogCiAKCiAKIAogCgogCiAKIAoKCgoKICB2b2lkIHNoYXBlX2NvbWJpbmVfbWFz ayhjb25zdCBHZGtfQml0bWFwJiBzaGFwZV9tYXNrLGdpbnQgb2Zmc2V0X3gsZ2ludCBvZmZzZXRf eSk7CnByaXZhdGU6CiAgIAoKCiAgdm9pZCByZXNldF9zaGFwZXMoKTsKCnB1YmxpYzoKCiAgIAog ICAKICB2b2lkIHBhdGgJCSAgIChzdHJpbmcgICAgJnBhdGgsCgkJCSAgICBzdHJpbmcgICAgJnBh dGhfcmV2ZXJzZWQpOwoKICAgCiAgIAogIHZvaWQgY2xhc3NfcGF0aAkgICAoc3RyaW5nICAgICZw YXRoLAoJCQkgICAgc3RyaW5nICAgICZwYXRoX3JldmVyc2VkKTsKCgoKICAgCiAgR2RrX1dpbmRv dyBnZXRfd2luZG93ICAgICAgICAoKSBjb25zdDsKCgoKIAoKCiAgR2RrRHJhZ0NvbnRleHQqIGd0 a21tX2RyYWdfYmVnaW4oR3RrVGFyZ2V0TGlzdCogcDAsR2RrRHJhZ0FjdGlvbiBwMSxnaW50IHAy LEdka0V2ZW50KiBwMyk7CgogICAKCgoKCiAgdm9pZCBkcmFnX2dldF9kYXRhKEdka19EcmFnX0Nv bnRleHQmIGNvbnRleHQsR2RrX0F0b20gdGFyZ2V0LGd1aW50MzIgdGltZSk7CiAgIAoKCgoKCiAg c3RhdGljIHZvaWQgZHJhZ19maW5pc2goR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxib29sIHN1 Y2Nlc3MsYm9vbCBkZWwsZ3VpbnQzMiB0aW1lKTsKCiAgIAoKCiAgdm9pZCBkcmFnX2hpZ2hsaWdo dCgpOwoKICAgCgoKICB2b2lkIGRyYWdfdW5oaWdobGlnaHQoKTsKCiAgIAoKICB2b2lkIGRyYWdf ZGVzdF9zZXQoR3RrRGVzdERlZmF1bHRzIGZsYWdzLGNvbnN0IEd0a1RhcmdldEVudHJ5KiB0YXJn ZXRzLGdpbnQgbl90YXJnZXRzLEdka0RyYWdBY3Rpb24gYWN0aW9ucyk7CgogICAKCgoKCgogIHZv aWQgZHJhZ19kZXN0X3NldF9wcm94eShHZGtfV2luZG93JiBwcm94eV93aW5kb3csR2RrRHJhZ1By b3RvY29sIHByb3RvY29sLGJvb2wgdXNlX2Nvb3JkaW5hdGVzKTsKCiAgIAoKCiAgdm9pZCBkcmFn X2Rlc3RfdW5zZXQoKTsKCiAgIAoKICB2b2lkIGRyYWdfc291cmNlX3NldChHZGtNb2RpZmllclR5 cGUgc3RhcnRfYnV0dG9uX21hc2ssY29uc3QgR3RrVGFyZ2V0RW50cnkqIHRhcmdldHMsZ2ludCBu X3RhcmdldHMsR2RrRHJhZ0FjdGlvbiBhY3Rpb25zKTsKCiAgIAoKCiAgdm9pZCBkcmFnX3NvdXJj ZV91bnNldCgpOwoKCiAgIAoKCgoKCiAgdm9pZCBkcmFnX3NvdXJjZV9zZXRfaWNvbihHZGtfQ29s b3JtYXAmIGNvbG9ybWFwLEdka19QaXhtYXAmIHBpeG1hcCxHZGtfQml0bWFwJiBtYXNrKTsKCiAg IAoKCgoKCgoKICBzdGF0aWMgR3RrOjpXaWRnZXQqIGRyYWdfZ2V0X3NvdXJjZV93aWRnZXQoR2Rr RHJhZ0NvbnRleHQqIGNvbnRleHQpOwoKCiAgIAoKCgoKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRf aWNvbl93aWRnZXQoR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxHdGs6OldpZGdldCYgd2lkZ2V0 LGdpbnQgaG90X3gsZ2ludCBob3RfeSk7CgogICAKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRfaWNv bl9waXhtYXAoR2RrX0RyYWdfQ29udGV4dCYgY29udGV4dCxHZGtfQ29sb3JtYXAmIGNvbG9ybWFw LEdka19QaXhtYXAmIHBpeG1hcCxHZGtfQml0bWFwJiBtYXNrLGdpbnQgaG90X3gsZ2ludCBob3Rf eSk7CgogICAKICAgCgoKICBzdGF0aWMgdm9pZCBkcmFnX3NldF9pY29uX2RlZmF1bHQoR2RrX0Ry YWdfQ29udGV4dCYgY29udGV4dCk7CgogICAKCiAgc3RhdGljIHZvaWQgZHJhZ19zZXRfZGVmYXVs dF9pY29uKEdka19Db2xvcm1hcCYgY29sb3JtYXAsR2RrX1BpeG1hcCYgcGl4bWFwLEdka19CaXRt YXAmIG1hc2ssZ2ludCBob3RfeCxnaW50IGhvdF95KTsKCgoKIAogICAKICBib29sIGlzX3RvcGxl dmVsKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxs ICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251 bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0 a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9 PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAo R3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0Kikg KCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfVE9QTEVW RUwpP3RydWU6ZmFsc2U7IH0KCiAgIAogIGJvb2wgaGFzX25vX3dpbmRvdygpIGNvbnN0CiAgICB7 IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2Jq ZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRh bWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgZ3Rr b2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RLX1RZUEVfT0JKRUNU ICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDogKEd0a09iamVjdCopIGd0a190 eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0a29iaigpICApLCBH VEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX05PX1dJTkRPVyk/dHJ1ZTpmYWxzZTsg fQoKICAgCiAgYm9vbCBpc19yZWFsaXplZCgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAg Z3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigp ICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChH dGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3Mg KSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVj dCopICggIGd0a29iaigpICApIDogKEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9j YXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkg LT5mbGFncykgICYgR1RLX1JFQUxJWkVEKT90cnVlOmZhbHNlOyB9CgogICAKICBib29sIGlzX21h cHBlZCgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVs bCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19u dWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChH dGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAg PT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDog KEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCop ICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX01BUFBF RCk/dHJ1ZTpmYWxzZTsgfQoKICAgCiAgYm9vbCBpc192aXNpYmxlKCkgY29uc3QKICAgIHsgcmV0 dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3Qq KSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50 YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmoo KSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAg KSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVf Y2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19U WVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfVklTSUJMRSk/dHJ1ZTpmYWxzZTsgfQoKICAg CiAgIAogICAKICBib29sIGlzX2RyYXdhYmxlKCkgY29uc3QKICAgIHsgcmV0dXJuIChpc192aXNp YmxlKCkgJiYgaXNfbWFwcGVkKCkpP3RydWU6ZmFsc2U7IH0KCiAgIAogICAKICBib29sIHNlbnNp dGl2ZSgpIGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVs bCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19u dWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChH dGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAg PT0gR1RLX1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDog KEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCop ICggIGd0a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX1NFTlNJ VElWRSk/dHJ1ZTpmYWxzZTsgfQoKICBib29sIHBhcmVudF9zZW5zaXRpdmUoKSBjb25zdAogICAg eyByZXR1cm4gKCgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwgICYmICggKCAoKEd0a09i amVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVsbCAgJiYgKChHdGtGdW5k YW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3RrT2JqZWN0KikgKCAgIGd0 a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09IEdUS19UWVBFX09CSkVD VCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChHdGtPYmplY3QqKSBndGtf dHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICBndGtvYmooKSAgKSwg R1RLX1RZUEVfT0JKRUNUKSApIC0+ZmxhZ3MpICAmIEdUS19QQVJFTlRfU0VOU0lUSVZFKT90cnVl OmZhbHNlOyB9CiAgYm9vbCBpc19zZW5zaXRpdmUoKSBjb25zdAogICAgeyByZXR1cm4gKCgoKCgo KCAoICggICAgICAoKCggIEd0a1dpZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAo KEd0a1R5cGVPYmplY3QqKSAoICggZ3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlw ZSAoKSkgICkpKSApICAgICAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAg ICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBl T2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICAp KSkgKSAgICAgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBl KSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgICAoKCggIEd0a1dp ZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICgg Z3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkgICkpKSApICAgICAgICkp LT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAo R3RrT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0 X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRf Z2V0X3R5cGUgKCkpICApKSkgKSAgICAgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tf b2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3Rr X3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkg KSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAgICAgICksIEdUS19UWVBFX09C SkVDVCkgKSAtPmZsYWdzKSApICAmIEdUS19TRU5TSVRJVkUpICE9IDApICAmJiAoKCgoKCAoICgg ICAgICAoKCggIEd0a1dpZGdldCAqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5 cGVPYmplY3QqKSAoICggZ3Rrb2JqKCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkg ICkpKSApICAgICAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgICAgKCgo ICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0 KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAg ICAgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAo KEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgICAoKCggIEd0a1dpZGdldCAq KSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICggZ3Rrb2Jq KCkgKSApLCAoICAoZ3RrX3dpZGdldF9nZXRfdHlwZSAoKSkgICkpKSApICAgICAgICkpLT5rbGFz cyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2Jq ZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3Qg KChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAgKGd0a193aWRnZXRfZ2V0X3R5 cGUgKCkpICApKSkgKSAgICAgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0 X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgICAgKCgoICBHdGtXaWRnZXQgKikgZ3RrX3R5cGVf Y2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpICkgKSwgKCAg KGd0a193aWRnZXRfZ2V0X3R5cGUgKCkpICApKSkgKSAgICAgICksIEdUS19UWVBFX09CSkVDVCkg KSAtPmZsYWdzKSApICAmIEdUS19QQVJFTlRfU0VOU0lUSVZFKSAhPSAwKSApICk/dHJ1ZTpmYWxz ZTsgfQogIGJvb2wgY2FuX2ZvY3VzKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtv YmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICAp KS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09i amVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+ dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0Kikg KCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3Qg KChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZs YWdzKSAgJiBHVEtfQ0FOX0ZPQ1VTKT90cnVlOmZhbHNlOyB9CiAgYm9vbCBoYXNfZm9jdXMoKSBj b25zdAogICAgeyByZXR1cm4gKCgoICggKCAgIGd0a29iaigpICAgKSAhPSBfX251bGwgICYmICgg KCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApICE9IF9fbnVsbCAgJiYg KChHdGtGdW5kYW1lbnRhbFR5cGUpICgoICgoR3RrT2JqZWN0Q2xhc3MqKSAoICgoR3RrT2JqZWN0 KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkpLT50eXBlICkgJiAweEZGKSkgID09IEdUS19U WVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3QqKSAoICBndGtvYmooKSAgKSA6IChHdGtPYmpl Y3QqKSBndGtfdHlwZV9jaGVja19vYmplY3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICBndGtv YmooKSAgKSwgR1RLX1RZUEVfT0JKRUNUKSApIC0+ZmxhZ3MpICAmIEdUS19IQVNfRk9DVVMpP3Ry dWU6ZmFsc2U7IH0KICBib29sIGNhbl9kZWZhdWx0KCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAo ICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rr b2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAo KCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5r bGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3Rr T2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2Jq ZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVD VCkgKSAtPmZsYWdzKSAgJiBHVEtfQ0FOX0RFRkFVTFQpP3RydWU6ZmFsc2U7IH0KICBib29sIGhh c19kZWZhdWx0KCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0g X19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAh PSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikg KCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhG RikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkg ICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2Jq ZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtf SEFTX0RFRkFVTFQpP3RydWU6ZmFsc2U7IH0KICBib29sIHJjX3N0eWxlKCkgY29uc3QKICAgIHsg cmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmpl Y3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFt ZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtv YmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1Qg KSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5 cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdU S19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfUkNfU1RZTEUpP3RydWU6ZmFsc2U7IH0K ICBib29sIGhhc19ncmFiKCkgY29uc3QKICAgIHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAg ICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xh c3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENs YXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSAp ICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rr b2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtU eXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAg JiBHVEtfSEFTX0dSQUIpP3RydWU6ZmFsc2U7IH0KICBib29sIGlzX2NvbXBvc2l0ZV9jaGlsZCgp IGNvbnN0CiAgICB7IHJldHVybiAoKCggKCAoICAgZ3Rrb2JqKCkgICApICE9IF9fbnVsbCAgJiYg KCAoICgoR3RrT2JqZWN0KikgKCAgIGd0a29iaigpICAgKSktPmtsYXNzICkgIT0gX19udWxsICAm JiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChHdGtPYmplY3RDbGFzcyopICggKChHdGtPYmpl Y3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSktPnR5cGUgKSAmIDB4RkYpKSAgPT0gR1RL X1RZUEVfT0JKRUNUICkgICkgID8gKEd0a09iamVjdCopICggIGd0a29iaigpICApIDogKEd0a09i amVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9jYXN0ICgoR3RrVHlwZU9iamVjdCopICggIGd0 a29iaigpICApLCBHVEtfVFlQRV9PQkpFQ1QpICkgLT5mbGFncykgICYgR1RLX0NPTVBPU0lURV9D SElMRCk/dHJ1ZTpmYWxzZTsgfQogIGJvb2wgYXBwX3BhaW50YWJsZSgpICAgICAgY29uc3QKICAg IHsgcmV0dXJuICgoKCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtP YmplY3QqKSAoICAgZ3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVu ZGFtZW50YWxUeXBlKSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBn dGtvYmooKSAgICkpLT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpF Q1QgKSAgKSAgPyAoR3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3Rr X3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICks IEdUS19UWVBFX09CSkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfQVBQX1BBSU5UQUJMRSk/dHJ1ZTpm YWxzZTsgfQogIGJvb2wgcmVjaWV2ZXNfZGVmYXVsdCgpICAgY29uc3QKICAgIHsgcmV0dXJuICgo KCAoICggICBndGtvYmooKSAgICkgIT0gX19udWxsICAmJiAoICggKChHdGtPYmplY3QqKSAoICAg Z3Rrb2JqKCkgICApKS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBl KSAoKCAoKEd0a09iamVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICBndGtvYmooKSAgICkp LT5rbGFzcyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAo R3RrT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICkgOiAoR3RrT2JqZWN0KikgZ3RrX3R5cGVfY2hlY2tf b2JqZWN0X2Nhc3QgKChHdGtUeXBlT2JqZWN0KikgKCAgZ3Rrb2JqKCkgICksIEdUS19UWVBFX09C SkVDVCkgKSAtPmZsYWdzKSAgJiBHVEtfUkVDRUlWRVNfREVGQVVMVCk/dHJ1ZTpmYWxzZTsgfQoK ICAgCiAgdm9pZCBzZXRfZmxhZ3MoZ2ludCBmbGFnKSB7IGlmICgxKSB7ICgoKCAoICggICAgZ3Rr b2JqKCkgICAgKSAhPSBfX251bGwgICYmICggKCAoKEd0a09iamVjdCopICggICAgZ3Rrb2JqKCkg ICAgKSktPmtsYXNzICkgIT0gX19udWxsICAmJiAoKEd0a0Z1bmRhbWVudGFsVHlwZSkgKCggKChH dGtPYmplY3RDbGFzcyopICggKChHdGtPYmplY3QqKSAoICAgIGd0a29iaigpICAgICkpLT5rbGFz cyApKS0+dHlwZSApICYgMHhGRikpICA9PSBHVEtfVFlQRV9PQkpFQ1QgKSAgKSAgPyAoR3RrT2Jq ZWN0KikgKCAgIGd0a29iaigpICAgKSA6IChHdGtPYmplY3QqKSBndGtfdHlwZV9jaGVja19vYmpl Y3RfY2FzdCAoKEd0a1R5cGVPYmplY3QqKSAoICAgZ3Rrb2JqKCkgICApLCBHVEtfVFlQRV9PQkpF Q1QpICkgLT5mbGFncykgIHw9ICggIGZsYWcgKSk7IH1lbHNlICh2b2lkKTAgIDsgfQoKICAgCiAg dm9pZCB1bnNldF9mbGFncyhnaW50IGZsYWcpIHsgaWYgKDEpIHsgKCgoICggKCAgICBndGtvYmoo KSAgICApICE9IF9fbnVsbCAgJiYgKCAoICgoR3RrT2JqZWN0KikgKCAgICBndGtvYmooKSAgICAp KS0+a2xhc3MgKSAhPSBfX251bGwgICYmICgoR3RrRnVuZGFtZW50YWxUeXBlKSAoKCAoKEd0a09i amVjdENsYXNzKikgKCAoKEd0a09iamVjdCopICggICAgZ3Rrb2JqKCkgICAgKSktPmtsYXNzICkp LT50eXBlICkgJiAweEZGKSkgID09IEdUS19UWVBFX09CSkVDVCApICApICA/IChHdGtPYmplY3Qq KSAoICAgZ3Rrb2JqKCkgICApIDogKEd0a09iamVjdCopIGd0a190eXBlX2NoZWNrX29iamVjdF9j YXN0ICgoR3RrVHlwZU9iamVjdCopICggICBndGtvYmooKSAgICksIEdUS19UWVBFX09CSkVDVCkg KSAtPmZsYWdzKSAgJj0gfiggIGZsYWcgKSk7IH1lbHNlICh2b2lkKTAgIDsgfQoKCiAKCiAgIAog ICAKICAgCgoKICAgCiAgdm9pZCBzaG93X2FsbCgpOwoKICAgCgoKICAgCiAgdm9pZCBoaWRlX2Fs bCgpOwoKICAgCiAgIAoKCiAgIAoKCiAgIAogICAKICAgCiAgIAogICAKCgogICAKICAgCgoKCiAg IAogICAKICAgCiAgdm9pZCBkcmF3KEdka1JlY3RhbmdsZSogcDApOwoKICAgCgoKICAgCgogCiAK IAogCgogICAKICAgCgoKICAgCiAgIAogICAKCgogICAKICAgCgoKCgogICAKCgogICAKCgogICAK CgogICAKCgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgIAoKCiAgIAoK CiAgIAoKCiAgIAoKCiAgIAoKIAoKICAgCiAgZ2ludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGd0 a29iaigpLT5hbGxvY2F0aW9uLndpZHRoOyB9CgogICAKICBnaW50IGhlaWdodCgpIGNvbnN0IHsg cmV0dXJuIGd0a29iaigpLT5hbGxvY2F0aW9uLmhlaWdodDsgfQoKcHJvdGVjdGVkOgogIHZvaWQg cmVhbGl6ZV9pZl9uZWVkZWQoKTsKICBXaWRnZXQoKTsKCnB1YmxpYzoKCiAgICBjbGFzcyBQcm94 eV9wYXJlbnRfY2hhbmdlZAogICAgICA6IHB1YmxpYyBQcm94eVNpZ25hbDE8dm9pZCxHdGtXaWRn ZXQqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTQ+CiAgICAgIHsKICAgICAgICAgIHR5 cGVkZWYgUHJveHlTaWduYWwxPHZvaWQsR3RrV2lkZ2V0KixDcHBPYmplY3RUeXBlLEJhc2VPYmpl Y3RUeXBlLDE0PiBCYXNlVHlwZTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICBDb25uZWN0aW9u IGNvbm5lY3QoY29uc3QgU2lnQzo6U2xvdDE8dm9pZCxHdGs6OldpZGdldCo+ICZzKTsKICAgICAg fTsKICAgIGNsYXNzIFByb3h5X3N0eWxlX2NoYW5nZWQKICAgICAgOiBwdWJsaWMgUHJveHlTaWdu YWwxPHZvaWQsR3RrU3R5bGUqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+CiAgICAg IHsKICAgICAgICAgIHR5cGVkZWYgUHJveHlTaWduYWwxPHZvaWQsR3RrU3R5bGUqLENwcE9iamVj dFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+IEJhc2VUeXBlOwogICAgICAgIHB1YmxpYzoKICAgICAg ICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTaWdDOjpTbG90MTx2b2lkLEd0azo6U3R5bGUq PiAmcyk7CiAgICAgIH07CiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIHdpZGdl dF9zZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJh c2VPYmplY3RUeXBlLDAsJmd0a193aWRnZXRfc2hvdz4gc2hvdzsKICAgICAgR3RrOjpFbWl0UHJv eHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyLCZndGtfd2lkZ2V0 X2hpZGU+IGhpZGU7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5 cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX3dpZGdldF9tYXA+IG1hcF87CiAgICAgIEd0azo6RW1p dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNSwmZ3RrX3dp ZGdldF91bm1hcD4gdW5tYXBfOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBP YmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDYsJmd0a193aWRnZXRfcmVhbGl6ZT4gcmVhbGl6ZTsK ICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0 VHlwZSw3LCZndGtfd2lkZ2V0X2dyYWJfZm9jdXM+IGdyYWJfZm9jdXM7CiAgICAgIEd0azo6RW1p dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsOSwmZ3RrX3dp ZGdldF9kcmF3X2ZvY3VzPiBkcmF3X2ZvY3VzOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8 dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEwLCZndGtfd2lkZ2V0X2RyYXdfZGVm YXVsdD4gZHJhd19kZWZhdWx0OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8dm9pZCxHdGtS ZXF1aXNpdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMSwmZ3RrX3dpZGdldF9z aXplX3JlcXVlc3Q+IHNpemVfcmVxdWVzdDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPHZv aWQsR3RrQWxsb2NhdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMiwmZ3RrX3dp ZGdldF9zaXplX2FsbG9jYXRlPiBzaXplX2FsbG9jYXRlOwogICAgICBHdGs6OlByb3h5U2lnbmFs MTx2b2lkLEd0a1N0YXRlVHlwZSxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEzPiBzdGF0 ZV9jaGFuZ2VkOwogICAgICBQcm94eV9wYXJlbnRfY2hhbmdlZCBwYXJlbnRfY2hhbmdlZDsKICAg ICAgUHJveHlfc3R5bGVfY2hhbmdlZCBzdHlsZV9jaGFuZ2VkOwogICAgICBHdGs6OkVtaXRQcm94 eVNpZ25hbDE8Z2ludCxHZGtFdmVudCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxNiwm Z3RrX3dpZGdldF9ldmVudD4gZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50 LEdka0V2ZW50QnV0dG9uKixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDE3LCZndGttbV93 aWRnZXRfYnV0dG9uX3ByZXNzX2V2ZW50PiBidXR0b25fcHJlc3NfZXZlbnQ7CiAgICAgIEd0azo6 RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50QnV0dG9uKixDcHBPYmplY3RUeXBlLEJhc2VP YmplY3RUeXBlLDE4LCZndGttbV93aWRnZXRfYnV0dG9uX3JlbGVhc2VfZXZlbnQ+IGJ1dHRvbl9y ZWxlYXNlX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudE1v dGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxOSwmZ3RrbW1fd2lkZ2V0X21vdGlv bl9ub3RpZnlfZXZlbnQ+IG1vdGlvbl9ub3RpZnlfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5 U2lnbmFsMTxnaW50LEdka0V2ZW50QW55KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDIw LCZndGttbV93aWRnZXRfZGVsZXRlX2V2ZW50PiBkZWxldGVfZXZlbnQ7CiAgICAgIEd0azo6RW1p dFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50RXhwb3NlKixDcHBPYmplY3RUeXBlLEJhc2VPYmpl Y3RUeXBlLDIxLCZndGttbV93aWRnZXRfZXhwb3NlX2V2ZW50PiBleHBvc2VfZXZlbnQ7CiAgICAg IEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50S2V5KixDcHBPYmplY3RUeXBlLEJh c2VPYmplY3RUeXBlLDIyLCZndGttbV93aWRnZXRfa2V5X3ByZXNzX2V2ZW50PiBrZXlfcHJlc3Nf ZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50S2V5KixDcHBP YmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDIzLCZndGttbV93aWRnZXRfa2V5X3JlbGVhc2VfZXZl bnQ+IGtleV9yZWxlYXNlX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxH ZGtFdmVudENyb3NzaW5nKixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDI0LCZndGttbV93 aWRnZXRfZW50ZXJfbm90aWZ5X2V2ZW50PiBlbnRlcl9ub3RpZnlfZXZlbnQ7CiAgICAgIEd0azo6 RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50Q3Jvc3NpbmcqLENwcE9iamVjdFR5cGUsQmFz ZU9iamVjdFR5cGUsMjUsJmd0a21tX3dpZGdldF9sZWF2ZV9ub3RpZnlfZXZlbnQ+IGxlYXZlX25v dGlmeV9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRDb25m aWd1cmUqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMjYsJmd0a21tX3dpZGdldF9jb25m aWd1cmVfZXZlbnQ+IGNvbmZpZ3VyZV9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwx PGdpbnQsR2RrRXZlbnRGb2N1cyosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyNywmZ3Rr bW1fd2lkZ2V0X2ZvY3VzX2luX2V2ZW50PiBmb2N1c19pbl9ldmVudDsKICAgICAgR3RrOjpFbWl0 UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRGb2N1cyosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0 VHlwZSwyOCwmZ3RrbW1fd2lkZ2V0X2ZvY3VzX291dF9ldmVudD4gZm9jdXNfb3V0X2V2ZW50Owog ICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudEFueSosQ3BwT2JqZWN0VHlw ZSxCYXNlT2JqZWN0VHlwZSwyOSwmZ3RrbW1fd2lkZ2V0X21hcF9ldmVudD4gbWFwX2V2ZW50Owog ICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudEFueSosQ3BwT2JqZWN0VHlw ZSxCYXNlT2JqZWN0VHlwZSwzMCwmZ3RrbW1fd2lkZ2V0X3VubWFwX2V2ZW50PiB1bm1hcF9ldmVu dDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwxPGdpbnQsR2RrRXZlbnRQcm9wZXJ0eSosQ3Bw T2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzMSwmZ3RrbW1fd2lkZ2V0X3Byb3BlcnR5X25vdGlm eV9ldmVudD4gcHJvcGVydHlfbm90aWZ5X2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25h bDE8Z2ludCxHZGtFdmVudFNlbGVjdGlvbiosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwz MiwmZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9jbGVhcl9ldmVudD4gc2VsZWN0aW9uX2NsZWFyX2V2 ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudFNlbGVjdGlvbios Q3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzMywmZ3RrbW1fd2lkZ2V0X3NlbGVjdGlvbl9y ZXF1ZXN0X2V2ZW50PiBzZWxlY3Rpb25fcmVxdWVzdF9ldmVudDsKICAgICAgR3RrOjpFbWl0UHJv eHlTaWduYWwxPGdpbnQsR2RrRXZlbnRTZWxlY3Rpb24qLENwcE9iamVjdFR5cGUsQmFzZU9iamVj dFR5cGUsMzQsJmd0a21tX3dpZGdldF9zZWxlY3Rpb25fbm90aWZ5X2V2ZW50PiBzZWxlY3Rpb25f bm90aWZ5X2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDE8Z2ludCxHZGtFdmVudFBy b3hpbWl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzNSwmZ3RrbW1fd2lkZ2V0X3By b3hpbWl0eV9pbl9ldmVudD4gcHJveGltaXR5X2luX2V2ZW50OwogICAgICBHdGs6OkVtaXRQcm94 eVNpZ25hbDE8Z2ludCxHZGtFdmVudFByb3hpbWl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0 VHlwZSwzNiwmZ3RrbW1fd2lkZ2V0X3Byb3hpbWl0eV9vdXRfZXZlbnQ+IHByb3hpbWl0eV9vdXRf ZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50Q2xpZW50KixD cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDM3LCZndGttbV93aWRnZXRfY2xpZW50X2V2ZW50 PiBjbGllbnRfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxnaW50LEdka0V2ZW50 QW55KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDM4LCZndGttbV93aWRnZXRfbm9fZXhw b3NlX2V2ZW50PiBub19leHBvc2VfZXZlbnQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMTxn aW50LEdka0V2ZW50VmlzaWJpbGl0eSosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzOSwm Z3RrbW1fd2lkZ2V0X3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50PiB2aXNpYmlsaXR5X25vdGlmeV9l dmVudDsKICAgICAgR3RrOjpQcm94eVNpZ25hbDE8dm9pZCxjb25zdCBnY2hhciosQ3BwT2JqZWN0 VHlwZSxCYXNlT2JqZWN0VHlwZSw0MD4gZGVidWdfbXNnOwogICAgICBHdGs6OlByb3h5U2lnbmFs Mzx2b2lkLEd0a1NlbGVjdGlvbkRhdGEqLGd1aW50LGd1aW50LENwcE9iamVjdFR5cGUsQmFzZU9i amVjdFR5cGUsNDE+IHNlbGVjdGlvbl9nZXQ7CiAgICAgIEd0azo6UHJveHlTaWduYWwyPHZvaWQs R3RrU2VsZWN0aW9uRGF0YSosZ3VpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Mj4g c2VsZWN0aW9uX3JlY2VpdmVkOwogICAgICBHdGs6OlByb3h5U2lnbmFsMTx2b2lkLEdka0RyYWdD b250ZXh0KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQzPiBkcmFnX2JlZ2luOwogICAg ICBHdGs6OlByb3h5U2lnbmFsMTx2b2lkLEdka0RyYWdDb250ZXh0KixDcHBPYmplY3RUeXBlLEJh c2VPYmplY3RUeXBlLDQ0PiBkcmFnX2VuZDsKICAgICAgR3RrOjpQcm94eVNpZ25hbDQ8dm9pZCxH ZGtEcmFnQ29udGV4dCosR3RrU2VsZWN0aW9uRGF0YSosZ3VpbnQsZ3VpbnQsQ3BwT2JqZWN0VHlw ZSxCYXNlT2JqZWN0VHlwZSw0NT4gZHJhZ19kYXRhX2dldDsKICAgICAgR3RrOjpQcm94eVNpZ25h bDE8dm9pZCxHZGtEcmFnQ29udGV4dCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Nj4g ZHJhZ19kYXRhX2RlbGV0ZTsKICAgICAgR3RrOjpQcm94eVNpZ25hbDI8dm9pZCxHZGtEcmFnQ29u dGV4dCosZ3VpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw0Nz4gZHJhZ19sZWF2ZTsK ICAgICAgR3RrOjpQcm94eVNpZ25hbDQ8Z2Jvb2xlYW4sR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2lu dCxndWludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQ4PiBkcmFnX21vdGlvbjsKICAg ICAgR3RrOjpQcm94eVNpZ25hbDQ8Z2Jvb2xlYW4sR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2ludCxn dWludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDQ5PiBkcmFnX2Ryb3A7CiAgICAgIEd0 azo6UHJveHlTaWduYWw2PHZvaWQsR2RrRHJhZ0NvbnRleHQqLGdpbnQsZ2ludCxHdGtTZWxlY3Rp b25EYXRhKixndWludCxndWludDMyLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNTA+IGRy YWdfZGF0YV9yZWNlaXZlZDsKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgIAogICAgdmlydHVhbCB2b2lk IHNob3dfaW1wbCgpOwogICAgdmlydHVhbCB2b2lkIHNob3dfYWxsX2ltcGwoKTsKICAgIHZpcnR1 YWwgdm9pZCBoaWRlX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBoaWRlX2FsbF9pbXBsKCk7CiAg ICB2aXJ0dWFsIHZvaWQgbWFwX19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXBfX2ltcGwo KTsKICAgIHZpcnR1YWwgdm9pZCByZWFsaXplX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBncmFi X2ZvY3VzX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3X2ltcGwoR2RrUmVjdGFuZ2xlKiBw MCk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd19mb2N1c19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQg ZHJhd19kZWZhdWx0X2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCBzaXplX3JlcXVlc3RfaW1wbChH dGtSZXF1aXNpdGlvbiogcDApOwogICAgdmlydHVhbCB2b2lkIHNpemVfYWxsb2NhdGVfaW1wbChH dGtBbGxvY2F0aW9uKiBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgc3RhdGVfY2hhbmdlZF9pbXBsKEd0 a1N0YXRlVHlwZSBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgcGFyZW50X2NoYW5nZWRfaW1wbChHdGs6 OldpZGdldCogcDApOwogICAgdmlydHVhbCB2b2lkIHN0eWxlX2NoYW5nZWRfaW1wbChHdGs6OlN0 eWxlKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZXZlbnRfaW1wbChHZGtFdmVudCogcDApOwogICAg dmlydHVhbCBnaW50IGJ1dHRvbl9wcmVzc19ldmVudF9pbXBsKEdka0V2ZW50QnV0dG9uKiBwMCk7 CiAgICB2aXJ0dWFsIGdpbnQgYnV0dG9uX3JlbGVhc2VfZXZlbnRfaW1wbChHZGtFdmVudEJ1dHRv biogcDApOwogICAgdmlydHVhbCBnaW50IG1vdGlvbl9ub3RpZnlfZXZlbnRfaW1wbChHZGtFdmVu dE1vdGlvbiogcDApOwogICAgdmlydHVhbCBnaW50IGRlbGV0ZV9ldmVudF9pbXBsKEdka0V2ZW50 QW55KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZXhwb3NlX2V2ZW50X2ltcGwoR2RrRXZlbnRFeHBv c2UqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBrZXlfcHJlc3NfZXZlbnRfaW1wbChHZGtFdmVudEtl eSogcDApOwogICAgdmlydHVhbCBnaW50IGtleV9yZWxlYXNlX2V2ZW50X2ltcGwoR2RrRXZlbnRL ZXkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBlbnRlcl9ub3RpZnlfZXZlbnRfaW1wbChHZGtFdmVu dENyb3NzaW5nKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgbGVhdmVfbm90aWZ5X2V2ZW50X2ltcGwo R2RrRXZlbnRDcm9zc2luZyogcDApOwogICAgdmlydHVhbCBnaW50IGNvbmZpZ3VyZV9ldmVudF9p bXBsKEdka0V2ZW50Q29uZmlndXJlKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfaW5fZXZl bnRfaW1wbChHZGtFdmVudEZvY3VzKiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfb3V0X2V2 ZW50X2ltcGwoR2RrRXZlbnRGb2N1cyogcDApOwogICAgdmlydHVhbCBnaW50IG1hcF9ldmVudF9p bXBsKEdka0V2ZW50QW55KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgdW5tYXBfZXZlbnRfaW1wbChH ZGtFdmVudEFueSogcDApOwogICAgdmlydHVhbCBnaW50IHByb3BlcnR5X25vdGlmeV9ldmVudF9p bXBsKEdka0V2ZW50UHJvcGVydHkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCBzZWxlY3Rpb25fY2xl YXJfZXZlbnRfaW1wbChHZGtFdmVudFNlbGVjdGlvbiogcDApOwogICAgdmlydHVhbCBnaW50IHNl bGVjdGlvbl9yZXF1ZXN0X2V2ZW50X2ltcGwoR2RrRXZlbnRTZWxlY3Rpb24qIHAwKTsKICAgIHZp cnR1YWwgZ2ludCBzZWxlY3Rpb25fbm90aWZ5X2V2ZW50X2ltcGwoR2RrRXZlbnRTZWxlY3Rpb24q IHAwKTsKICAgIHZpcnR1YWwgZ2ludCBwcm94aW1pdHlfaW5fZXZlbnRfaW1wbChHZGtFdmVudFBy b3hpbWl0eSogcDApOwogICAgdmlydHVhbCBnaW50IHByb3hpbWl0eV9vdXRfZXZlbnRfaW1wbChH ZGtFdmVudFByb3hpbWl0eSogcDApOwogICAgdmlydHVhbCBnaW50IGNsaWVudF9ldmVudF9pbXBs KEdka0V2ZW50Q2xpZW50KiBwMCk7CiAgICB2aXJ0dWFsIGdpbnQgbm9fZXhwb3NlX2V2ZW50X2lt cGwoR2RrRXZlbnRBbnkqIHAwKTsKICAgIHZpcnR1YWwgZ2ludCB2aXNpYmlsaXR5X25vdGlmeV9l dmVudF9pbXBsKEdka0V2ZW50VmlzaWJpbGl0eSogcDApOwogICAgdmlydHVhbCB2b2lkIGRlYnVn X21zZ19pbXBsKGNvbnN0IGdjaGFyKiBwMCk7CiAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uX2dl dF9pbXBsKEd0a1NlbGVjdGlvbkRhdGEqIHAwLGd1aW50IHAxLGd1aW50IHAyKTsKICAgIHZpcnR1 YWwgdm9pZCBzZWxlY3Rpb25fcmVjZWl2ZWRfaW1wbChHdGtTZWxlY3Rpb25EYXRhKiBwMCxndWlu dCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ19iZWdpbl9pbXBsKEdka0RyYWdDb250ZXh0KiBw MCk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ19lbmRfaW1wbChHZGtEcmFnQ29udGV4dCogcDApOwog ICAgdmlydHVhbCB2b2lkIGRyYWdfZGF0YV9nZXRfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsR3Rr U2VsZWN0aW9uRGF0YSogcDEsZ3VpbnQgcDIsZ3VpbnQgcDMpOwogICAgdmlydHVhbCB2b2lkIGRy YWdfZGF0YV9kZWxldGVfaW1wbChHZGtEcmFnQ29udGV4dCogcDApOwogICAgdmlydHVhbCB2b2lk IGRyYWdfbGVhdmVfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsZ3VpbnQgcDEpOwogICAgdmlydHVh bCBnYm9vbGVhbiBkcmFnX21vdGlvbl9pbXBsKEdka0RyYWdDb250ZXh0KiBwMCxnaW50IHAxLGdp bnQgcDIsZ3VpbnQgcDMpOwogICAgdmlydHVhbCBnYm9vbGVhbiBkcmFnX2Ryb3BfaW1wbChHZGtE cmFnQ29udGV4dCogcDAsZ2ludCBwMSxnaW50IHAyLGd1aW50IHAzKTsKICAgIHZpcnR1YWwgdm9p ZCBkcmFnX2RhdGFfcmVjZWl2ZWRfaW1wbChHZGtEcmFnQ29udGV4dCogcDAsZ2ludCBwMSxnaW50 IHAyLEd0a1NlbGVjdGlvbkRhdGEqIHAzLGd1aW50IHA0LGd1aW50MzIgcDUpOwoKfTsKCn0KCiAK IAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAog CiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKCiAKIAogCiAK IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAK IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAK IAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAK IAogCiAKIAoKIAogCiAKIAogCiAKIAoKCgoKIyAyNyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9j b250YWluZXIuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2NvbnRh aW5lci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAi QyIgewoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrQ29udGFpbmVyCSAgIEd0a0NvbnRh aW5lcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NvbnRhaW5lckNsYXNzICBHdGtDb250YWluZXJDbGFz czsKCnN0cnVjdCBfR3RrQ29udGFpbmVyCnsKICBHdGtXaWRnZXQgd2lkZ2V0OwogIAogIEd0a1dp ZGdldCAqZm9jdXNfY2hpbGQ7CiAgCiAgZ3VpbnQgYm9yZGVyX3dpZHRoIDogMTY7CiAgZ3VpbnQg bmVlZF9yZXNpemUgOiAxOwogIGd1aW50IHJlc2l6ZV9tb2RlIDogMjsKICBndWludCByZWFsbG9j YXRlX3JlZHJhd3MgOiAxOwogIAogICAKCiAgR1NMaXN0ICpyZXNpemVfd2lkZ2V0czsKfTsKCnN0 cnVjdCBfR3RrQ29udGFpbmVyQ2xhc3MKewogIEd0a1dpZGdldENsYXNzIHBhcmVudF9jbGFzczsK ICAKICBndWludCAgIG5fY2hpbGRfYXJnczsKCiAgdm9pZCAoKiBhZGQpCSAgICAgICAJCShHdGtD b250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrV2lkZ2V0CSAqd2lkZ2V0KTsKICB2b2lkICgq IHJlbW92ZSkgICAgICAJCShHdGtDb250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrV2lkZ2V0 CSAqd2lkZ2V0KTsKICB2b2lkICgqIGNoZWNrX3Jlc2l6ZSkJCShHdGtDb250YWluZXIJICpjb250 YWluZXIpOwogIHZvaWQgKCogZm9yYWxsKSAgICAgCQkoR3RrQ29udGFpbmVyCSAqY29udGFpbmVy LAoJCQkJIGdib29sZWFuCSAgaW5jbHVkZV9pbnRlcm5hbHMsCgkJCQkgR3RrQ2FsbGJhY2sJICBj YWxsYmFjaywKCQkJCSBncG9pbnRlcgkgIGNhbGxiYWJja19kYXRhKTsKICBnaW50ICgqIGZvY3Vz KSAgICAgICAJCShHdGtDb250YWluZXIJICpjb250YWluZXIsCgkJCQkgR3RrRGlyZWN0aW9uVHlw ZSAgZGlyZWN0aW9uKTsKICB2b2lkICgqIHNldF9mb2N1c19jaGlsZCkJKEd0a0NvbnRhaW5lcgkg KmNvbnRhaW5lciwKCQkJCSBHdGtXaWRnZXQJICp3aWRnZXQpOwogIEd0a1R5cGUgKCpjaGlsZF90 eXBlKQkJKEd0a0NvbnRhaW5lcgkqY29udGFpbmVyKTsKICB2b2lkICAgICgqc2V0X2NoaWxkX2Fy ZykJKEd0a0NvbnRhaW5lciAJKmNvbnRhaW5lciwKCQkJCSBHdGtXaWRnZXQgICAgCSpjaGlsZCwK CQkJCSBHdGtBcmcgICAgICAgCSphcmcsCgkJCQkgZ3VpbnQgICAgICAgIAkgYXJnX2lkKTsKICB2 b2lkICAgICgqZ2V0X2NoaWxkX2FyZykJKEd0a0NvbnRhaW5lcgkqY29udGFpbmVyLAoJCQkJIEd0 a1dpZGdldCAgICAJKmNoaWxkLAoJCQkJIEd0a0FyZyAgICAgICAJKmFyZywKCQkJCSBndWludCAg ICAgICAgCSBhcmdfaWQpOwogIGdjaGFyKiAgKCpjb21wb3NpdGVfbmFtZSkJKEd0a0NvbnRhaW5l cgkqY29udGFpbmVyLAoJCQkJIEd0a1dpZGdldAkqY2hpbGQpOwoKICAgCiAgR3RrRnVuY3Rpb24g cGFkMTsKICBHdGtGdW5jdGlvbiBwYWQyOwp9OwoKIAoKR3RrVHlwZSBndGtfY29udGFpbmVyX2dl dF90eXBlCQkgKHZvaWQpOwp2b2lkICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aAkg KEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgZ3VpbnQJCSAgICBib3JkZXJfd2lk dGgpOwp2b2lkICAgIGd0a19jb250YWluZXJfYWRkCQkgKEd0a0NvbnRhaW5lcgkgICAqY29udGFp bmVyLAoJCQkJCSAgR3RrV2lkZ2V0CSAgICp3aWRnZXQpOwp2b2lkICAgIGd0a19jb250YWluZXJf cmVtb3ZlCQkgKEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrV2lkZ2V0CSAg ICp3aWRnZXQpOwoKdm9pZCAgICBndGtfY29udGFpbmVyX3NldF9yZXNpemVfbW9kZSAgICAoR3Rr Q29udGFpbmVyICAgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrUmVzaXplTW9kZSAgICAgcmVzaXpl X21vZGUpOwoKdm9pZCAgICBndGtfY29udGFpbmVyX2NoZWNrX3Jlc2l6ZSAgICAgICAoR3RrQ29u dGFpbmVyICAgICAqY29udGFpbmVyKTsKCnZvaWQgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoCQkg KEd0a0NvbnRhaW5lcgkgICAqY29udGFpbmVyLAoJCQkJCSAgR3RrQ2FsbGJhY2sJICAgIGNhbGxi YWNrLAoJCQkJCSAgZ3BvaW50ZXIJICAgIGNhbGxiYWNrX2RhdGEpOwp2b2lkICAgIGd0a19jb250 YWluZXJfZm9yZWFjaF9mdWxsCSAoR3RrQ29udGFpbmVyCSAgICpjb250YWluZXIsCgkJCQkJICBH dGtDYWxsYmFjawkgICAgY2FsbGJhY2ssCgkJCQkJICBHdGtDYWxsYmFja01hcnNoYWwgbWFyc2hh bCwKCQkJCQkgIGdwb2ludGVyCSAgICBjYWxsYmFja19kYXRhLAoJCQkJCSAgR3RrRGVzdHJveU5v dGlmeSAgbm90aWZ5KTsKR0xpc3QqIGd0a19jb250YWluZXJfY2hpbGRyZW4JCSAoR3RrQ29udGFp bmVyCSAgICpjb250YWluZXIpOwpnaW50ICAgZ3RrX2NvbnRhaW5lcl9mb2N1cwkJICAgKEd0a0Nv bnRhaW5lciAgICAgKmNvbnRhaW5lciwKCQkJCQkgICAgR3RrRGlyZWN0aW9uVHlwZSAgZGlyZWN0 aW9uKTsKCiAKCnZvaWQgICBndGtfY29udGFpbmVyX3NldF9yZWFsbG9jYXRlX3JlZHJhd3MgKEd0 a0NvbnRhaW5lciAgICAqY29udGFpbmVyLAoJCQkJCSAgICAgZ2Jvb2xlYW4gICAgICAgICBuZWVk c19yZWRyYXdzKTsKdm9pZCAgIGd0a19jb250YWluZXJfc2V0X2ZvY3VzX2NoaWxkCSAgIChHdGtD b250YWluZXIgICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdldAkgICAgICpjaGlsZCk7 CnZvaWQgICBndGtfY29udGFpbmVyX3NldF9mb2N1c192YWRqdXN0bWVudCAoR3RrQ29udGFpbmVy ICAgICAqY29udGFpbmVyLAoJCQkJCSAgICBHdGtBZGp1c3RtZW50ICAgICphZGp1c3RtZW50KTsK dm9pZCAgIGd0a19jb250YWluZXJfc2V0X2ZvY3VzX2hhZGp1c3RtZW50IChHdGtDb250YWluZXIg ICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a0FkanVzdG1lbnQgICAgKmFkanVzdG1lbnQpOwp2 b2lkICAgIGd0a19jb250YWluZXJfcmVnaXN0ZXJfdG9wbGV2ZWwJICAgKEd0a0NvbnRhaW5lciAg ICAgKmNvbnRhaW5lcik7CnZvaWQgICAgZ3RrX2NvbnRhaW5lcl91bnJlZ2lzdGVyX3RvcGxldmVs ICAoR3RrQ29udGFpbmVyICAgICAqY29udGFpbmVyKTsKR0xpc3QqICBndGtfY29udGFpbmVyX2dl dF90b3BsZXZlbHMgICAgICAgICh2b2lkKTsKCnZvaWQgICAgZ3RrX2NvbnRhaW5lcl9yZXNpemVf Y2hpbGRyZW4gICAgICAoR3RrQ29udGFpbmVyICAgICAqY29udGFpbmVyKTsKCkd0a1R5cGUgZ3Rr X2NvbnRhaW5lcl9jaGlsZF90eXBlCSAgIChHdGtDb250YWluZXIgICAgICpjb250YWluZXIpOwoK IAp2b2lkICAgIGd0a19jb250YWluZXJfYWRkX2NoaWxkX2FyZ190eXBlICAgKGNvbnN0IGdjaGFy ICAgICAgKmFyZ19uYW1lLAoJCQkJCSAgICBHdGtUeXBlICAgICAgICAgICBhcmdfdHlwZSwKCQkJ CQkgICAgZ3VpbnQgICAgICAgICAgICAgYXJnX2ZsYWdzLAoJCQkJCSAgICBndWludCAgICAgICAg ICAgICBhcmdfaWQpOwogICAgIAogCgoKCgoKCgoKR3RrQXJnKiBndGtfY29udGFpbmVyX3F1ZXJ5 X2NoaWxkX2FyZ3MJICAgKEd0a1R5cGUJICAgICAgIGNsYXNzX3R5cGUsCgkJCQkJICAgIGd1aW50 MzIgICAgICAgICAgKiphcmdfZmxhZ3MsCgkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICpuYXJn cyk7CgogCgoKCgp2b2lkICAgIGd0a19jb250YWluZXJfY2hpbGRfZ2V0dgkgICAoR3RrQ29udGFp bmVyICAgICAgKmNvbnRhaW5lciwKCQkJCQkgICAgR3RrV2lkZ2V0CSAgICAgICpjaGlsZCwKCQkJ CQkgICAgZ3VpbnQJICAgICAgIG5fYXJncywKCQkJCQkgICAgR3RrQXJnCSAgICAgICphcmdzKTsK dm9pZCAgICBndGtfY29udGFpbmVyX2NoaWxkX3NldHYgICAJICAgKEd0a0NvbnRhaW5lciAgICAg ICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdldAkgICAgICAqY2hpbGQsCgkJCQkJICAgIGd1 aW50CSAgICAgICBuX2FyZ3MsCgkJCQkJICAgIEd0a0FyZwkgICAgICAqYXJncyk7CgogCgoKCgp2 b2lkICAgIGd0a19jb250YWluZXJfYWRkX3dpdGhfYXJncwkgICAoR3RrQ29udGFpbmVyICAgICAg KmNvbnRhaW5lciwKCQkJCQkgICAgR3RrV2lkZ2V0CSAgICAgICp3aWRnZXQsCgkJCQkJICAgIGNv bnN0IGdjaGFyCSAgICAgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAgLi4uKTsKdm9pZCAgICBn dGtfY29udGFpbmVyX2FkZHYJCSAgIChHdGtDb250YWluZXIgICAgICAqY29udGFpbmVyLAoJCQkJ CSAgICBHdGtXaWRnZXQJICAgICAgKndpZGdldCwKCQkJCQkgICAgZ3VpbnQJICAgICAgIG5fYXJn cywKCQkJCQkgICAgR3RrQXJnCSAgICAgICphcmdzKTsKdm9pZAlndGtfY29udGFpbmVyX2NoaWxk X3NldAkJICAgKEd0a0NvbnRhaW5lciAgICAgICpjb250YWluZXIsCgkJCQkJICAgIEd0a1dpZGdl dCAgICAgICAgICpjaGlsZCwKCQkJCQkgICAgY29uc3QgZ2NoYXIJICAgICAgKmZpcnN0X2FyZ19u YW1lLAoJCQkJCSAgICAuLi4pOwogICAgIAoKIAoKdm9pZAlndGtfY29udGFpbmVyX3F1ZXVlX3Jl c2l6ZQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lcik7CnZvaWQgICAgZ3RrX2NvbnRhaW5l cl9jbGVhcl9yZXNpemVfd2lkZ2V0cyAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lcik7CnZvaWQg ICAgZ3RrX2NvbnRhaW5lcl9hcmdfc2V0CQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lciwK CQkJCQkgICAgICBHdGtXaWRnZXQJICAgKmNoaWxkLAoJCQkJCSAgICAgIEd0a0FyZyAgICAgICAq YXJnLAoJCQkJCSAgICAgIEd0a0FyZ0luZm8gICAqaW5mbyk7CnZvaWQgICAgZ3RrX2NvbnRhaW5l cl9hcmdfZ2V0CQkgICAgIChHdGtDb250YWluZXIgKmNvbnRhaW5lciwKCQkJCQkgICAgICBHdGtX aWRnZXQJICAgKmNoaWxkLAoJCQkJCSAgICAgIEd0a0FyZyAgICAgICAqYXJnLAoJCQkJCSAgICAg IEd0a0FyZ0luZm8gICAqaW5mbyk7CmdjaGFyKglndGtfY29udGFpbmVyX2NoaWxkX2FyZ3NfY29s bGVjdCAgICAgKEd0a1R5cGUgICAgICAgb2JqZWN0X3R5cGUsCgkJCQkJICAgICAgR1NMaXN0ICAg ICAgKiphcmdfbGlzdF9wLAoJCQkJCSAgICAgIEdTTGlzdCAgICAgICoqaW5mb19saXN0X3AsCgkJ CQkJICAgICAgY29uc3QgZ2NoYXIgICpmaXJzdF9hcmdfbmFtZSwKCQkJCQkgICAgICB2YV9saXN0 ICAgICAgIGFyZ3MpOwpnY2hhciogIGd0a19jb250YWluZXJfY2hpbGRfYXJnX2dldF9pbmZvICAg ICAoR3RrVHlwZSAgICAgICBvYmplY3RfdHlwZSwKCQkJCQkgICAgICBjb25zdCBnY2hhciAgKmFy Z19uYW1lLAoJCQkJCSAgICAgIEd0a0FyZ0luZm8gICoqaW5mb19wKTsKdm9pZCAgICBndGtfY29u dGFpbmVyX2ZvcmFsbAkJICAgICAoR3RrQ29udGFpbmVyICpjb250YWluZXIsCgkJCQkJICAgICAg R3RrQ2FsbGJhY2sgICBjYWxsYmFjaywKCQkJCQkgICAgICBncG9pbnRlcgkgICAgY2FsbGJhY2tf ZGF0YSk7CmdjaGFyKglndGtfY29udGFpbmVyX2NoaWxkX2NvbXBvc2l0ZV9uYW1lICAgKEd0a0Nv bnRhaW5lciAqY29udGFpbmVyLAoJCQkJCSAgICAgIEd0a1dpZGdldAkgICAqY2hpbGQpOwp2b2lk ICAgIGd0a19jb250YWluZXJfZGVxdWV1ZV9yZXNpemVfaGFuZGxlciAoR3RrQ29udGFpbmVyICpj b250YWluZXIpOwoKCn0KCgoKCiMgMjggIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vY29udGFpbmVy LmgiIDIKCiAKCgoKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBDb250YWluZXI7CmNsYXNzIENvbnRh aW5lcl9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpDb250YWluZXIgKndyYXAgKEd0a0Nv bnRhaW5lciAqbyk7IH0KbmFtZXNwYWNlIEd0awp7CmNsYXNzIEFkanVzdG1lbnQ7CmNsYXNzIExh YmVsOwoKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBDb250YWluZXI7CmNsYXNzIENvbnRhaW5l ciA6IHB1YmxpYyBXaWRnZXQKewoKcHVibGljOgogIHR5cGVkZWYgQ29udGFpbmVyICAgICAgICAg IENwcE9iamVjdFR5cGU7CiAgdHlwZWRlZiBDb250YWluZXJfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBl OwogIHR5cGVkZWYgR3RrQ29udGFpbmVyICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBl ZGVmIEd0a0NvbnRhaW5lckNsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJp ZW5kIGNsYXNzIENvbnRhaW5lcl9DbGFzczsKICBzdGF0aWMgQ3BwQ2xhc3NUeXBlIGNvbnRhaW5l cl9jbGFzczsKCiAgQ29udGFpbmVyKGNvbnN0IENvbnRhaW5lciYpOwogIENvbnRhaW5lciYgb3Bl cmF0b3I9KGNvbnN0IENvbnRhaW5lciYpOyAgCgpwcm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxp emVfY2xhc3MoKTsKICBleHBsaWNpdCBDb250YWluZXIoR3RrQ29udGFpbmVyICpjYXN0aXRlbSk7 CgpwdWJsaWM6CiAgc3RhdGljIEd0a1R5cGUgZ2V0X3R5cGUoKTsKICBHdGtDb250YWluZXIqIGd0 a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtDb250YWluZXIqKShndGtvYmplY3QpOyB9 CiAgY29uc3QgR3RrQ29udGFpbmVyKiBndGtvYmooKSBjb25zdCB7IHJldHVybiAoR3RrQ29udGFp bmVyKikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7 CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1 YWwgfkNvbnRhaW5lcigpOwoKcHJpdmF0ZToKCnByaXZhdGU6CiAgIAogIHZvaWQgYWRkKFdpZGdl dCopOwoKcHVibGljOgoKIAoKCgogICAKCgogIHZvaWQgc2V0X2JvcmRlcl93aWR0aChndWludCB3 aWR0aCk7CgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog ICAKICAgCiAgIAoKICB2b2lkIGFkZChHdGs6OldpZGdldCYgcDApOwoKCiAgIAogICAKCiAgdm9p ZCByZW1vdmUoR3RrOjpXaWRnZXQmIHAwKTsKCiAgIAoKCiAgdm9pZCBzZXRfcmVzaXplX21vZGUo R3RrUmVzaXplTW9kZSByZXNpemVfbW9kZSk7CgogICAKCgogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgdHlwZWRlZiBTaWdDOjpTbG90MTx2b2lkLCBHdGs6OldpZGdldCY+IEZvcmVh Y2hDYWxsYmFjazsKICB2b2lkIGZvcmVhY2goY29uc3QgRm9yZWFjaENhbGxiYWNrJik7CgogICAK CgogIHZvaWQgZm9yZWFjaF8oR3RrQ2FsbGJhY2sgY2FsbGJhY2ssZ3BvaW50ZXIgZGF0YSk7Cgog ICAKCgoKCiAgdm9pZCBmb3JlYWNoX2Z1bGxfKEd0a0NhbGxiYWNrIGNhbGxiYWNrLEd0a0NhbGxi YWNrTWFyc2hhbCBtYXJzaGFsLGdwb2ludGVyIGRhdGEsR3RrRGVzdHJveU5vdGlmeSBub3RpZnkp OwoKCiAgIAogICAKICAgCgoKCgogCgogICAKICB2b2lkIHNldF9mb2N1c19jaGlsZChHdGs6Oldp ZGdldCogcDApOwogICAKCgogIHZvaWQgc2V0X2ZvY3VzX2NoaWxkKEd0azo6V2lkZ2V0JiBwMCk7 CgoKCiAgdm9pZCBzZXRfZm9jdXNfdmFkanVzdG1lbnQoR3RrOjpBZGp1c3RtZW50JiBhZGp1c3Rt ZW50KTsKCgoKICB2b2lkIHNldF9mb2N1c19oYWRqdXN0bWVudChHdGs6OkFkanVzdG1lbnQmIGFk anVzdG1lbnQpOwoKCgogIHZvaWQgcmVnaXN0ZXJfdG9wbGV2ZWwoKTsKCgoKICB2b2lkIHVucmVn aXN0ZXJfdG9wbGV2ZWwoKTsKCiAgIAoKCgogIHZvaWQgcmVzaXplX2NoaWxkcmVuKCk7CgoKICBH dGtUeXBlIGNoaWxkX3R5cGUoKTsKcHJvdGVjdGVkOgogIENvbnRhaW5lcigpOwoKcHVibGljOgoK ICB1bmlvbgogICAgewogICAgICBDcHBPYmplY3RUeXBlICogY29udGFpbmVyX3NlbGY7CiAgICAg IEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUs MiwmZ3RrX2NvbnRhaW5lcl9jaGVja19yZXNpemU+IGNoZWNrX3Jlc2l6ZTsKICAgICAgR3RrOjpF bWl0UHJveHlTaWduYWwxPGdpbnQsR3RrRGlyZWN0aW9uVHlwZSxDcHBPYmplY3RUeXBlLEJhc2VP YmplY3RUeXBlLDMsJmd0a19jb250YWluZXJfZm9jdXM+IGZvY3VzOwogICAgfTsKCnByb3RlY3Rl ZDoKICAgCiAgICB2aXJ0dWFsIHZvaWQgYWRkX2ltcGwoR3RrOjpXaWRnZXQmIHAwKTsKICAgIHZp cnR1YWwgdm9pZCByZW1vdmVfaW1wbChHdGs6OldpZGdldCYgcDApOwogICAgdmlydHVhbCB2b2lk IGNoZWNrX3Jlc2l6ZV9pbXBsKCk7CiAgICB2aXJ0dWFsIGdpbnQgZm9jdXNfaW1wbChHdGtEaXJl Y3Rpb25UeXBlIHAwKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRfZm9jdXNfY2hpbGRfaW1wbChHdGs6 OldpZGdldCogcDApOwogICAgdmlydHVhbCBHdGtUeXBlIGNoaWxkX3R5cGVfaW1wbCgpOwoKfTsK Cn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAK IAogCiAKCgojIDI3ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2Jpbi5oIiAyCgojIDEgIi9vcHQv Z3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYmluLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0 a0JpbiAgICAgICBHdGtCaW47CnR5cGVkZWYgc3RydWN0IF9HdGtCaW5DbGFzcyAgR3RrQmluQ2xh c3M7CgpzdHJ1Y3QgX0d0a0Jpbgp7CiAgR3RrQ29udGFpbmVyIGNvbnRhaW5lcjsKCiAgR3RrV2lk Z2V0ICpjaGlsZDsKfTsKCnN0cnVjdCBfR3RrQmluQ2xhc3MKewogIEd0a0NvbnRhaW5lckNsYXNz IHBhcmVudF9jbGFzczsKfTsKCgpHdGtUeXBlICBndGtfYmluX2dldF90eXBlICAgKHZvaWQpOwoK Cgp9CgoKCgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2Jpbi5oIiAyCgoKbmFtZXNwYWNl IEd0ayB7CmNsYXNzIEJpbjsKY2xhc3MgQmluX0NsYXNzOwp9Cm5hbWVzcGFjZSBHdGsgeyBHdGs6 OkJpbiAqd3JhcCAoR3RrQmluICpvKTsgfQpuYW1lc3BhY2UgR3RrCnsKIAogCiAKIApjbGFzcyBC aW4gOiBwdWJsaWMgQ29udGFpbmVyIHsKCnB1YmxpYzoKICB0eXBlZGVmIEJpbiAgICAgICAgICBD cHBPYmplY3RUeXBlOwogIHR5cGVkZWYgQmluX0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBl ZGVmIEd0a0JpbiAgICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtCaW5DbGFz cyAgICAgIEJhc2VDbGFzc1R5cGU7Cgpwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBCaW5fQ2xhc3M7 CiAgc3RhdGljIENwcENsYXNzVHlwZSBiaW5fY2xhc3M7CgogIEJpbihjb25zdCBCaW4mKTsKICBC aW4mIG9wZXJhdG9yPShjb25zdCBCaW4mKTsgIAoKcHJvdGVjdGVkOgogIHZvaWQgICBpbml0aWFs aXplX2NsYXNzKCk7CiAgZXhwbGljaXQgQmluKEd0a0JpbiAqY2FzdGl0ZW0pOwoKcHVibGljOgog IHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7CiAgR3RrQmluKiBndGtvYmooKSAgICAgICAgICAg ICB7IHJldHVybiAoR3RrQmluKikoZ3Rrb2JqZWN0KTsgfQogIGNvbnN0IEd0a0JpbiogZ3Rrb2Jq KCkgY29uc3QgeyByZXR1cm4gKEd0a0JpbiopKGd0a29iamVjdCk7IH0KICBzdGF0aWMgYm9vbCBp c0EoT2JqZWN0ICpjaGVja2Nhc3QpOwoKICAgCiAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNp Z25hbF9uYW1lc1tdOwoKICB2aXJ0dWFsIH5CaW4oKTsKCnByaXZhdGU6CgpwdWJsaWM6CgoKCgog ICAKICAgCiAgIAogIEd0azo6V2lkZ2V0KiBnZXRfY2hpbGQoKSBjb25zdDsKCiAgIAogICAKICAg CiAgdm9pZCByZW1vdmUoKTsKCiAgdm9pZCBhZGRfbGFiZWwoY29uc3Qgc3RyaW5nICZsYWJlbCwK ICAgICAgICAgICAgICAgICAgICBnZmxvYXQgeD0wLjAsCiAgICAgICAgICAgICAgICAgICAgZ2Zs b2F0IHk9MC41KTsKCiAgdm9pZCBhZGRfcGl4bWFwKGNvbnN0IEdka19QaXhtYXAgJnBpeG1hcCwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtfQml0bWFwICZiaXRtYXApOwoKICB2b2lkIGFk ZF9waXhsYWJlbChjb25zdCBHZGtfUGl4bWFwICZwaXhtYXAsCiAgICAgICAgICAgICAgICAgICAg Y29uc3QgR2RrX0JpdG1hcCAmYml0bWFwLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlu ZyAmbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgZ2Zsb2F0IHg9MC4wLAogICAgICAgICAgICAg ICAgICAgIGdmbG9hdCB5PTAuNSk7CgogIHZvaWQgYWRkX3BpeGxhYmVsKGNvbnN0IHN0cmluZyAm cGl4ZmlsZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgJmxhYmVsLAogICAgICAg ICAgICAgICAgICAgIGdmbG9hdCB4PTAuMCwKICAgICAgICAgICAgICAgICAgICBnZmxvYXQgeT0w LjUpOwpwcm90ZWN0ZWQ6CiAgQmluKCk7CgpwdWJsaWM6Cgpwcm90ZWN0ZWQ6CiAgIAoKfTsKCn0K CgogCiAKIAogCiAKIAoKIyAyNyAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aW5kb3cuaCIgMgoK IyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3dpbmRvdy5oIiAxCiAKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX0d0a1dpbmRvdyAgICAgICBHdGtXaW5kb3c7CnR5cGVkZWYgc3RydWN0IF9H dGtXaW5kb3dDbGFzcyAgR3RrV2luZG93Q2xhc3M7CgpzdHJ1Y3QgX0d0a1dpbmRvdwp7CiAgR3Rr QmluIGJpbjsKCiAgZ2NoYXIgKnRpdGxlOwogIGdjaGFyICp3bWNsYXNzX25hbWU7CiAgZ2NoYXIg KndtY2xhc3NfY2xhc3M7CiAgR3RrV2luZG93VHlwZSB0eXBlOwoKICBHdGtXaWRnZXQgKmZvY3Vz X3dpZGdldDsKICBHdGtXaWRnZXQgKmRlZmF1bHRfd2lkZ2V0OwogIEd0a1dpbmRvdyAqdHJhbnNp ZW50X3BhcmVudDsKCiAgZ3VzaG9ydCByZXNpemVfY291bnQ7CiAgZ3VpbnQgYWxsb3dfc2hyaW5r IDogMTsKICBndWludCBhbGxvd19ncm93IDogMTsKICBndWludCBhdXRvX3NocmluayA6IDE7CiAg Z3VpbnQgaGFuZGxpbmdfcmVzaXplIDogMTsKICBndWludCBwb3NpdGlvbiA6IDI7CgogICAKCgoK CgogIGd1aW50IHVzZV91cG9zaXRpb24gOiAxOwogIGd1aW50IG1vZGFsIDogMTsKCiAgIAoKICBn dWludCB3aW5kb3dfaGFzX2ZvY3VzIDogMTsKICAKICAgCgoKCiAgZ3VpbnQgd2luZG93X2hhc19w b2ludGVyX2ZvY3VzIDogMTsKfTsKCnN0cnVjdCBfR3RrV2luZG93Q2xhc3MKewogIEd0a0JpbkNs YXNzIHBhcmVudF9jbGFzczsKCiAgdm9pZCAoKiBzZXRfZm9jdXMpICAgKEd0a1dpbmRvdyAqd2lu ZG93LAoJCQlHdGtXaWRnZXQgKmZvY3VzKTsKfTsKCgpHdGtUeXBlICAgIGd0a193aW5kb3dfZ2V0 X3R5cGUgICAgICAgICAgICAgICAgICh2b2lkKTsKR3RrV2lkZ2V0KiBndGtfd2luZG93X25ldyAg ICAgICAgICAgICAgICAgICAgICAoR3RrV2luZG93VHlwZSAgICAgICAgdHlwZSk7CnZvaWQgICAg ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUgICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAg ICAgKndpbmRvdywKCQkJCQkJY29uc3QgZ2NoYXIgICAgICAgICAqdGl0bGUpOwp2b2lkICAgICAg IGd0a193aW5kb3dfc2V0X3dtY2xhc3MgICAgICAgICAgICAgIChHdGtXaW5kb3cgICAgICAgICAg ICp3aW5kb3csCgkJCQkJCWNvbnN0IGdjaGFyICAgICAgICAgKndtY2xhc3NfbmFtZSwKCQkJCQkJ Y29uc3QgZ2NoYXIgICAgICAgICAqd21jbGFzc19jbGFzcyk7CnZvaWQgICAgICAgZ3RrX3dpbmRv d19zZXRfcG9saWN5ICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywK CQkJCQkJZ2ludCAgICAgICAgICAgICAgICAgYWxsb3dfc2hyaW5rLAoJCQkJCQlnaW50ICAgICAg ICAgICAgICAgICBhbGxvd19ncm93LAoJCQkJCQlnaW50ICAgICAgICAgICAgICAgICBhdXRvX3No cmluayk7CnZvaWQgICAgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAgICAgICAgICAgKEd0 a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywKCQkJCQkJR3RrQWNjZWxHcm91cAkgICAgKmFjY2Vs X2dyb3VwKTsKdm9pZCAgICAgICBndGtfd2luZG93X3JlbW92ZV9hY2NlbF9ncm91cCAgICAgICAo R3RrV2luZG93ICAgICAgICAgICAqd2luZG93LAoJCQkJCQlHdGtBY2NlbEdyb3VwCSAgICAqYWNj ZWxfZ3JvdXApOwp2b2lkICAgICAgIGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uICAgICAgICAgICAg IChHdGtXaW5kb3cgICAgICAgICAgICp3aW5kb3csCgkJCQkJCUd0a1dpbmRvd1Bvc2l0aW9uICAg IHBvc2l0aW9uKTsKZ2ludAkgICBndGtfd2luZG93X2FjdGl2YXRlX2ZvY3VzCSAgICAgICAoR3Rr V2luZG93ICAgICAgICAgICAqd2luZG93KTsKZ2ludAkgICBndGtfd2luZG93X2FjdGl2YXRlX2Rl ZmF1bHQJICAgICAgIChHdGtXaW5kb3cgICAgICAgICAgICp3aW5kb3cpOwoKdm9pZCAgICAgICBn dGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yICAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAq d2luZG93LCAKCQkJCQkJR3RrV2luZG93ICAgICAgICAgICAqcGFyZW50KTsKdm9pZCAgICAgICBn dGtfd2luZG93X3NldF9nZW9tZXRyeV9oaW50cyAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAq d2luZG93LAoJCQkJCQlHdGtXaWRnZXQgICAgICAgICAgICpnZW9tZXRyeV93aWRnZXQsCgkJCQkJ CUdka0dlb21ldHJ5ICAgICAgICAgKmdlb21ldHJ5LAoJCQkJCQlHZGtXaW5kb3dIaW50cyAgICAg ICBnZW9tX21hc2spOwogCgoKCnZvaWQgICAgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXpl ICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRvdywKCQkJCQkJZ2ludCAgICAgICAg ICAgICAgICAgd2lkdGgsCgkJCQkJCWdpbnQgICAgICAgICAgICAgICAgIGhlaWdodCk7CgogCnZv aWQgICAgICAgZ3RrX3dpbmRvd19zZXRfbW9kYWwgICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAg ICAgICAgICAgKndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgbW9kYWwpOwoKIAp2b2lkICAgICAgIGd0a193 aW5kb3dfc2V0X2ZvY3VzICAgICAgICAgICAgICAgIChHdGtXaW5kb3cgICAgICAgICAgICp3aW5k b3csCgkJCQkJCUd0a1dpZGdldCAgICAgICAgICAgKmZvY3VzKTsKdm9pZCAgICAgICBndGtfd2lu ZG93X3NldF9kZWZhdWx0ICAgICAgICAgICAgICAoR3RrV2luZG93ICAgICAgICAgICAqd2luZG93 LAoJCQkJCQlHdGtXaWRnZXQgICAgICAgICAgICpkZWZhdWx0dyk7CnZvaWQgICAgICAgZ3RrX3dp bmRvd19yZW1vdmVfZW1iZWRkZWRfeGlkICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAgKndpbmRv dywKCQkJCSAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICB4aWQpOwp2b2lkICAg ICAgIGd0a193aW5kb3dfYWRkX2VtYmVkZGVkX3hpZCAgICAgICAgIChHdGtXaW5kb3cgICAgICAg ICAgICp3aW5kb3csCgkJCQkJCWd1aW50ICAgICAgICAgICAgICAgIHhpZCk7CnZvaWQgICAgICAg Z3RrX3dpbmRvd19yZXBvc2l0aW9uICAgICAgICAgICAgICAgKEd0a1dpbmRvdyAgICAgICAgICAg KndpbmRvdywKCQkJCQkJZ2ludCAgICAgICAgICAgICAgICAgeCwKCQkJCQkJZ2ludCAgICAgICAg ICAgICAgICAgeSk7CgoKfQoKCgoKIyAyOCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS93aW5kb3cu aCIgMgoKCm5hbWVzcGFjZSBHdGsgewpjbGFzcyBXaW5kb3c7CmNsYXNzIFdpbmRvd19DbGFzczsK fQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpXaW5kb3cgKndyYXAgKEd0a1dpbmRvdyAqbyk7IH0KbmFt ZXNwYWNlIEd0awp7CmNsYXNzIEFjY2VsR3JvdXA7CgogCiAKIAogCiAKIAogCmNsYXNzIFdpbmRv dyA6IHB1YmxpYyBCaW4gewoKcHVibGljOgogIHR5cGVkZWYgV2luZG93ICAgICAgICAgIENwcE9i amVjdFR5cGU7CiAgdHlwZWRlZiBXaW5kb3dfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBlOwogIHR5cGVk ZWYgR3RrV2luZG93ICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBlZGVmIEd0a1dpbmRv d0NsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIFdpbmRv d19DbGFzczsKICBzdGF0aWMgQ3BwQ2xhc3NUeXBlIHdpbmRvd19jbGFzczsKCiAgV2luZG93KGNv bnN0IFdpbmRvdyYpOwogIFdpbmRvdyYgb3BlcmF0b3I9KGNvbnN0IFdpbmRvdyYpOyAgCgpwcm90 ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBXaW5kb3coR3Rr V2luZG93ICpjYXN0aXRlbSk7CgpwdWJsaWM6CiAgc3RhdGljIEd0a1R5cGUgZ2V0X3R5cGUoKTsK ICBHdGtXaW5kb3cqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtXaW5kb3cqKShn dGtvYmplY3QpOyB9CiAgY29uc3QgR3RrV2luZG93KiBndGtvYmooKSBjb25zdCB7IHJldHVybiAo R3RrV2luZG93KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNr Y2FzdCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107Cgog IHZpcnR1YWwgfldpbmRvdygpOwoKcHJpdmF0ZToKCnB1YmxpYzoKCiAgIAogICAKICBleHBsaWNp dCBXaW5kb3coR3RrV2luZG93VHlwZSB0eXBlPUdUS19XSU5ET1dfVE9QTEVWRUwpOwoKICBib29s IGlzX3RvcGxldmVsKCkge3JldHVybiBndGtvYmooKS0+dHlwZT09R1RLX1dJTkRPV19UT1BMRVZF TDt9CiAgYm9vbCBpc19kaWFsb2coKSAgIHtyZXR1cm4gZ3Rrb2JqKCktPnR5cGU9PUdUS19XSU5E T1dfRElBTE9HO30KICBib29sIGlzX3BvcHVwKCkgICAge3JldHVybiBndGtvYmooKS0+dHlwZT09 R1RLX1dJTkRPV19QT1BVUDt9CgogIEd0a1dpbmRvd1R5cGUgZ2V0X3dpbmRvd190eXBlKCkgY29u c3Q7CgogICAKCgogIHZvaWQgc2V0X3RpdGxlKGNvbnN0IG5zdHJpbmcmIHRpdGxlKTsKCiAgIAog ICAKCgoKICB2b2lkIHNldF93bWNsYXNzKGNvbnN0IG5zdHJpbmcmIHdtY2xhc3NfbmFtZSxjb25z dCBuc3RyaW5nJiB3bWNsYXNzX2NsYXNzKTsKCiAgIAogICAKCgoKCiAgdm9pZCBzZXRfcG9saWN5 KGdpbnQgYWxsb3dfc2hyaW5rLGdpbnQgYWxsb3dfZ3JvdyxnaW50IGF1dG9fc2hyaW5rKTsKCiAg IAoKCiAgdm9pZCBzZXRfcG9zaXRpb24oR3RrV2luZG93UG9zaXRpb24gcG9zaXRpb24pOwoKCgog IGdpbnQgYWN0aXZhdGVfZm9jdXMoKTsKCgoKICBnaW50IGFjdGl2YXRlX2RlZmF1bHQoKTsKCgoK ICB2b2lkIHNldF90cmFuc2llbnRfZm9yKEd0azo6V2luZG93JiBwYXJlbnQpOwoKCgoKCiAgdm9p ZCBzZXRfZ2VvbWV0cnlfaGludHMoR3RrOjpXaWRnZXQmIGdlb21ldHJ5X3dpZGdldCxHZGtHZW9t ZXRyeSogZ2VvbWV0cnksR2RrV2luZG93SGludHMgZ2VvbV9tYXNrKTsKCgoKCiAgdm9pZCBzZXRf ZGVmYXVsdF9zaXplKGdpbnQgd2lkdGgsZ2ludCBoZWlnaHQpOwoKCgogIHZvaWQgc2V0X21vZGFs KGJvb2wgbW9kYWwpOwoKICAgCgogICAKCgogIHZvaWQgYWRkX2FjY2VsX2dyb3VwKEd0azo6QWNj ZWxHcm91cCYgYWNjZWxfZ3JvdXApOwoKICAgCgoKICB2b2lkIHJlbW92ZV9hY2NlbF9ncm91cChH dGs6OkFjY2VsR3JvdXAmIGFjY2VsX2dyb3VwKTsKCgogCgogICAgCiAgICAKICAgIAogICBBY2Nl bEdyb3VwKiBnZXRfYWNjZWxfZ3JvdXAoKTsKCnByaXZhdGU6CiAgIEFjY2VsR3JvdXAgKmFjY2Vs X2dyb3VwXzsKCnB1YmxpYzoKCnByb3RlY3RlZDoKICAgCgp9OwoKfQoKCiAKIAogCiAKIAogCiAK IAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAog CiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAog CiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK IAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCgogCiAKIAogCiAKIAoKIAogCiAKIAog CiAKIAogCiAKIAoKIAogCiAKIAogCiAKCgogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAog CiAKIAogCiAKCgoKIyAxMiAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr LS0vc2Nyb2xsZWR3aW5kb3cuaCIgMQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAx ICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3Njcm9sbGVkd2luZG93LmgiIDEKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x LjIvZ3RrL2d0a2hzY3JvbGxiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3Rrc2Nyb2xsYmFyLmgiIDEKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x LjIvZ3RrL2d0a3JhbmdlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtSYW5nZSAgICAgICAg R3RrUmFuZ2U7CnR5cGVkZWYgc3RydWN0IF9HdGtSYW5nZUNsYXNzICAgR3RrUmFuZ2VDbGFzczsK CnN0cnVjdCBfR3RrUmFuZ2UKewogIEd0a1dpZGdldCB3aWRnZXQ7CgogIEdka1dpbmRvdyAqdHJv dWdoOwogIEdka1dpbmRvdyAqc2xpZGVyOwogIEdka1dpbmRvdyAqc3RlcF9mb3J3OwogIEdka1dp bmRvdyAqc3RlcF9iYWNrOwoKICBnaW50MTYgeF9jbGlja19wb2ludDsKICBnaW50MTYgeV9jbGlj a19wb2ludDsKCiAgZ3VpbnQ4IGJ1dHRvbjsKICBnaW50OCBkaWdpdHM7CiAgZ3VpbnQgcG9saWN5 IDogMjsKICBndWludCBzY3JvbGxfdHlwZSA6IDM7CiAgZ3VpbnQgaW5fY2hpbGQgOiAzOwogIGd1 aW50IGNsaWNrX2NoaWxkIDogMzsKICBndWludCBuZWVkX3RpbWVyIDogMTsKCiAgZ3VpbnQzMiB0 aW1lcjsKCiAgZ2Zsb2F0IG9sZF92YWx1ZTsKICBnZmxvYXQgb2xkX2xvd2VyOwogIGdmbG9hdCBv bGRfdXBwZXI7CiAgZ2Zsb2F0IG9sZF9wYWdlX3NpemU7CgogIEd0a0FkanVzdG1lbnQgKmFkanVz dG1lbnQ7Cn07CgpzdHJ1Y3QgX0d0a1JhbmdlQ2xhc3MKewogIEd0a1dpZGdldENsYXNzIHBhcmVu dF9jbGFzczsKCiAgZ2ludCBzbGlkZXJfd2lkdGg7CiAgZ2ludCBzdGVwcGVyX3NpemU7CiAgZ2lu dCBzdGVwcGVyX3NsaWRlcl9zcGFjaW5nOwogIGdpbnQgbWluX3NsaWRlcl9zaXplOwoKICBndWlu dDggdHJvdWdoOwogIGd1aW50OCBzbGlkZXI7CiAgZ3VpbnQ4IHN0ZXBfZm9ydzsKICBndWludDgg c3RlcF9iYWNrOwoKICB2b2lkICgqIGRyYXdfYmFja2dyb3VuZCkgIChHdGtSYW5nZSAqcmFuZ2Up OwogIHZvaWQgKCogY2xlYXJfYmFja2dyb3VuZCkgKEd0a1JhbmdlICpyYW5nZSk7CiAgdm9pZCAo KiBkcmF3X3Ryb3VnaCkgICAgIChHdGtSYW5nZSAqcmFuZ2UpOwogIHZvaWQgKCogZHJhd19zbGlk ZXIpICAgICAoR3RrUmFuZ2UgKnJhbmdlKTsKICB2b2lkICgqIGRyYXdfc3RlcF9mb3J3KSAgKEd0 a1JhbmdlICpyYW5nZSk7CiAgdm9pZCAoKiBkcmF3X3N0ZXBfYmFjaykgIChHdGtSYW5nZSAqcmFu Z2UpOwogIHZvaWQgKCogc2xpZGVyX3VwZGF0ZSkgICAoR3RrUmFuZ2UgKnJhbmdlKTsKICBnaW50 ICgqIHRyb3VnaF9jbGljaykgICAgKEd0a1JhbmdlICpyYW5nZSwKCQkJICAgIGdpbnQgICAgICB4 LAoJCQkgICAgZ2ludCAgICAgIHksCgkJCSAgICBnZmxvYXQgICAqanVtcF9wZXJjKTsKICBnaW50 ICgqIHRyb3VnaF9rZXlzKSAgICAgKEd0a1JhbmdlICpyYW5nZSwKCQkJICAgIEdka0V2ZW50S2V5 ICprZXksCgkJCSAgICBHdGtTY3JvbGxUeXBlICpzY3JvbGwsCgkJCSAgICBHdGtUcm91Z2hUeXBl ICp0cm91Z2gpOwogIHZvaWQgKCogbW90aW9uKSAgICAgICAgICAoR3RrUmFuZ2UgKnJhbmdlLAoJ CQkgICAgZ2ludCAgICAgIHhkZWx0YSwKCQkJICAgIGdpbnQgICAgICB5ZGVsdGEpOwogIGdpbnQg KCogdGltZXIpICAgICAgICAgICAoR3RrUmFuZ2UgKnJhbmdlKTsKfTsKCgpHdGtUeXBlICAgICAg ICBndGtfcmFuZ2VfZ2V0X3R5cGUgICAgICAgICAgICAgICAodm9pZCk7Ckd0a0FkanVzdG1lbnQq IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudCAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7 CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9zZXRfdXBkYXRlX3BvbGljeSAgICAgIChHdGtSYW5n ZSAgICAgICpyYW5nZSwKCQkJCQkJIEd0a1VwZGF0ZVR5cGUgIHBvbGljeSk7CnZvaWQgICAgICAg ICAgIGd0a19yYW5nZV9zZXRfYWRqdXN0bWVudCAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5n ZSwKCQkJCQkJIEd0a0FkanVzdG1lbnQgKmFkanVzdG1lbnQpOwoKdm9pZCAgICAgICAgICAgZ3Rr X3JhbmdlX2RyYXdfYmFja2dyb3VuZCAgICAgICAgKEd0a1JhbmdlICAgICAgKnJhbmdlKTsKdm9p ZCAgICAgICAgICAgZ3RrX3JhbmdlX2NsZWFyX2JhY2tncm91bmQgICAgICAgIChHdGtSYW5nZSAg ICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3X3Ryb3VnaCAgICAgICAg ICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3 X3NsaWRlciAgICAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAg IGd0a19yYW5nZV9kcmF3X3N0ZXBfZm9ydyAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7 CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kcmF3X3N0ZXBfYmFjayAgICAgICAgIChHdGtSYW5n ZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9zbGlkZXJfdXBkYXRlICAg ICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CmdpbnQgICAgICAgICAgIGd0a19yYW5nZV90 cm91Z2hfY2xpY2sgICAgICAgICAgIChHdGtSYW5nZSAgICAgICpyYW5nZSwKCQkJCQkJIGdpbnQg ICAgICAgICAgIHgsCgkJCQkJCSBnaW50ICAgICAgICAgICB5LAoJCQkJCQkgZ2Zsb2F0CSAgICAg ICAqanVtcF9wZXJjKTsKCnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9kZWZhdWx0X2hzbGlkZXJf dXBkYXRlIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CnZvaWQgICAgICAgICAgIGd0a19yYW5nZV9k ZWZhdWx0X3ZzbGlkZXJfdXBkYXRlIChHdGtSYW5nZSAgICAgICpyYW5nZSk7CmdpbnQgICAgICAg ICAgIGd0a19yYW5nZV9kZWZhdWx0X2h0cm91Z2hfY2xpY2sgIChHdGtSYW5nZSAgICAgICpyYW5n ZSwKCQkJCQkJIGdpbnQgICAgICAgICAgIHgsCgkJCQkJCSBnaW50ICAgICAgICAgICB5LAoJCQkJ CQkgZ2Zsb2F0CSAgICAgICAqanVtcF9wZXJjKTsKZ2ludCAgICAgICAgICAgZ3RrX3JhbmdlX2Rl ZmF1bHRfdnRyb3VnaF9jbGljayAgKEd0a1JhbmdlICAgICAgKnJhbmdlLAoJCQkJCQkgZ2ludCAg ICAgICAgICAgeCwKCQkJCQkJIGdpbnQgICAgICAgICAgIHksCgkJCQkJCSBnZmxvYXQJICAgICAg ICpqdW1wX3BlcmMpOwp2b2lkICAgICAgICAgICBndGtfcmFuZ2VfZGVmYXVsdF9obW90aW9uICAg ICAgICAoR3RrUmFuZ2UgICAgICAqcmFuZ2UsCgkJCQkJCSBnaW50ICAgICAgICAgICB4ZGVsdGEs CgkJCQkJCSBnaW50ICAgICAgICAgICB5ZGVsdGEpOwp2b2lkICAgICAgICAgICBndGtfcmFuZ2Vf ZGVmYXVsdF92bW90aW9uICAgICAgICAoR3RrUmFuZ2UgICAgICAqcmFuZ2UsCgkJCQkJCSBnaW50 ICAgICAgICAgICB4ZGVsdGEsCgkJCQkJCSBnaW50ICAgICAgICAgICB5ZGVsdGEpOwoKdm9pZCBf Z3RrX3JhbmdlX2dldF9wcm9wcyAoR3RrUmFuZ2UgKnJhbmdlLAoJCQkgICBnaW50ICAgICAqc2xp ZGVyX3dpZHRoLAoJCQkgICBnaW50ICAgICAqdHJvdWdoX2JvcmRlciwKCQkJICAgZ2ludCAgICAg KnN0ZXBwZXJfc2l6ZSwKCQkJICAgZ2ludCAgICAgKnN0ZXBwZXJfc3BhY2luZyk7CgoKfQoKCgoK IyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtzY3JvbGxiYXIuaCIgMgoKCgoK ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrU2Nyb2xsYmFyICAgICAg ICBHdGtTY3JvbGxiYXI7CnR5cGVkZWYgc3RydWN0IF9HdGtTY3JvbGxiYXJDbGFzcyAgIEd0a1Nj cm9sbGJhckNsYXNzOwoKc3RydWN0IF9HdGtTY3JvbGxiYXIKewogIEd0a1JhbmdlIHJhbmdlOwp9 OwoKc3RydWN0IF9HdGtTY3JvbGxiYXJDbGFzcwp7CiAgR3RrUmFuZ2VDbGFzcyBwYXJlbnRfY2xh c3M7Cn07CgoKR3RrVHlwZSBndGtfc2Nyb2xsYmFyX2dldF90eXBlICh2b2lkKTsKCgoKfQoKCgoK IyAzMiAiL29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtoc2Nyb2xsYmFyLmgiIDIKCgoK CmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0hTY3JvbGxiYXIgICAg ICAgR3RrSFNjcm9sbGJhcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0hTY3JvbGxiYXJDbGFzcyAgR3Rr SFNjcm9sbGJhckNsYXNzOwoKc3RydWN0IF9HdGtIU2Nyb2xsYmFyCnsKICBHdGtTY3JvbGxiYXIg c2Nyb2xsYmFyOwp9OwoKc3RydWN0IF9HdGtIU2Nyb2xsYmFyQ2xhc3MKewogIEd0a1Njcm9sbGJh ckNsYXNzIHBhcmVudF9jbGFzczsKfTsKCgpHdGtUeXBlICAgIGd0a19oc2Nyb2xsYmFyX2dldF90 eXBlICh2b2lkKTsKR3RrV2lkZ2V0KiBndGtfaHNjcm9sbGJhcl9uZXcgICAgICAoR3RrQWRqdXN0 bWVudCAqYWRqdXN0bWVudCk7CgoKCn0KCgoKCiMgMzIgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEu Mi9ndGsvZ3Rrc2Nyb2xsZWR3aW5kb3cuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0x LjIvZ3RrL2d0a3ZzY3JvbGxiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZTY3JvbGxiYXIgICAgICAgR3RrVlNjcm9s bGJhcjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZTY3JvbGxiYXJDbGFzcyAgR3RrVlNjcm9sbGJhckNs YXNzOwoKc3RydWN0IF9HdGtWU2Nyb2xsYmFyCnsKICBHdGtTY3JvbGxiYXIgc2Nyb2xsYmFyOwp9 OwoKc3RydWN0IF9HdGtWU2Nyb2xsYmFyQ2xhc3MKewogIEd0a1Njcm9sbGJhckNsYXNzIHBhcmVu dF9jbGFzczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCkd0a1R5cGUgICAgZ3RrX3ZzY3JvbGxiYXJf Z2V0X3R5cGUgKHZvaWQpOwpHdGtXaWRnZXQqIGd0a192c2Nyb2xsYmFyX25ldyAgICAgIChHdGtB ZGp1c3RtZW50ICphZGp1c3RtZW50KTsKCgoKfQoKCgoKIyAzMyAiL29wdC9ndGsvaW5jbHVkZS9n dGstMS4yL2d0ay9ndGtzY3JvbGxlZHdpbmRvdy5oIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUv Z3RrLTEuMi9ndGsvZ3Rrdmlld3BvcnQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a1ZpZXdw b3J0ICAgICAgIEd0a1ZpZXdwb3J0Owp0eXBlZGVmIHN0cnVjdCBfR3RrVmlld3BvcnRDbGFzcyAg R3RrVmlld3BvcnRDbGFzczsKCnN0cnVjdCBfR3RrVmlld3BvcnQKewogIEd0a0JpbiBiaW47Cgog IEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGU7CiAgR2RrV2luZG93ICp2aWV3X3dpbmRvdzsKICBH ZGtXaW5kb3cgKmJpbl93aW5kb3c7CiAgR3RrQWRqdXN0bWVudCAqaGFkanVzdG1lbnQ7CiAgR3Rr QWRqdXN0bWVudCAqdmFkanVzdG1lbnQ7Cn07CgpzdHJ1Y3QgX0d0a1ZpZXdwb3J0Q2xhc3MKewog IEd0a0JpbkNsYXNzIHBhcmVudF9jbGFzczsKCiAgdm9pZAkoKnNldF9zY3JvbGxfYWRqdXN0bWVu dHMpCShHdGtWaWV3cG9ydAkqdmlld3BvcnQsCgkJCQkJIEd0a0FkanVzdG1lbnQJKmhhZGp1c3Rt ZW50LAoJCQkJCSBHdGtBZGp1c3RtZW50CSp2YWRqdXN0bWVudCk7Cn07CgoKR3RrVHlwZSAgICAg ICAgZ3RrX3ZpZXdwb3J0X2dldF90eXBlICAgICAgICAodm9pZCk7Ckd0a1dpZGdldCogICAgIGd0 a192aWV3cG9ydF9uZXcgICAgICAgICAgICAgKEd0a0FkanVzdG1lbnQgKmhhZGp1c3RtZW50LAoJ CQkJCSAgICAgR3RrQWRqdXN0bWVudCAqdmFkanVzdG1lbnQpOwpHdGtBZGp1c3RtZW50KiBndGtf dmlld3BvcnRfZ2V0X2hhZGp1c3RtZW50IChHdGtWaWV3cG9ydCAgICp2aWV3cG9ydCk7Ckd0a0Fk anVzdG1lbnQqIGd0a192aWV3cG9ydF9nZXRfdmFkanVzdG1lbnQgKEd0a1ZpZXdwb3J0ICAgKnZp ZXdwb3J0KTsKdm9pZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF9oYWRqdXN0bWVudCAoR3Rr Vmlld3BvcnQgICAqdmlld3BvcnQsCgkJCQkJICAgICBHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50 KTsKdm9pZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF92YWRqdXN0bWVudCAoR3RrVmlld3Bv cnQgICAqdmlld3BvcnQsCgkJCQkJICAgICBHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50KTsKdm9p ZCAgICAgICAgICAgZ3RrX3ZpZXdwb3J0X3NldF9zaGFkb3dfdHlwZSAoR3RrVmlld3BvcnQgICAq dmlld3BvcnQsCgkJCQkJICAgICBHdGtTaGFkb3dUeXBlICB0eXBlKTsKCgoKfQoKCgoKIyAzNCAi L29wdC9ndGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtzY3JvbGxlZHdpbmRvdy5oIiAyCgoKCgpl eHRlcm4gIkMiIHsKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtTY3JvbGxlZFdpbmRvdyAg ICAgICBHdGtTY3JvbGxlZFdpbmRvdzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a1Njcm9sbGVkV2luZG93 Q2xhc3MgIEd0a1Njcm9sbGVkV2luZG93Q2xhc3M7CgpzdHJ1Y3QgX0d0a1Njcm9sbGVkV2luZG93 CnsKICBHdGtCaW4gY29udGFpbmVyOwoKICBHdGtXaWRnZXQgKmhzY3JvbGxiYXI7CiAgR3RrV2lk Z2V0ICp2c2Nyb2xsYmFyOwoKICBndWludCBoc2Nyb2xsYmFyX3BvbGljeSAgICAgIDogMjsKICBn dWludCB2c2Nyb2xsYmFyX3BvbGljeSAgICAgIDogMjsKICBndWludCBoc2Nyb2xsYmFyX3Zpc2li bGUgICAgIDogMTsKICBndWludCB2c2Nyb2xsYmFyX3Zpc2libGUgICAgIDogMTsKICBndWludCB3 aW5kb3dfcGxhY2VtZW50ICAgICAgIDogMjsKfTsKCnN0cnVjdCBfR3RrU2Nyb2xsZWRXaW5kb3dD bGFzcwp7CiAgR3RrQmluQ2xhc3MgcGFyZW50X2NsYXNzOwogIAogIGdpbnQgc2Nyb2xsYmFyX3Nw YWNpbmc7Cn07CgoKR3RrVHlwZSAgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdHlwZSAg ICAgICAgICAodm9pZCk7Ckd0a1dpZGdldCogICAgIGd0a19zY3JvbGxlZF93aW5kb3dfbmV3ICAg ICAgICAgICAgICAgKEd0a0FkanVzdG1lbnQgICAgICpoYWRqdXN0bWVudCwKCQkJCQkJICAgICAg R3RrQWRqdXN0bWVudCAgICAgKnZhZGp1c3RtZW50KTsKdm9pZCAgICAgICAgICAgZ3RrX3Njcm9s bGVkX3dpbmRvd19zZXRfaGFkanVzdG1lbnQgICAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVk X3dpbmRvdywKCQkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAgICAgKmhhZGp1c3RtZW50KTsKdm9p ZCAgICAgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfdmFkanVzdG1lbnQgICAoR3RrU2Ny b2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdywKCQkJCQkJICAgICAgR3RrQWRqdXN0bWVudCAg ICAgKmhhZGp1c3RtZW50KTsKR3RrQWRqdXN0bWVudCogZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRf aGFkanVzdG1lbnQgICAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdyk7Ckd0a0Fk anVzdG1lbnQqIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50ICAgKEd0a1Njcm9s bGVkV2luZG93ICpzY3JvbGxlZF93aW5kb3cpOwp2b2lkICAgICAgICAgICBndGtfc2Nyb2xsZWRf d2luZG93X3NldF9wb2xpY3kgICAgICAgIChHdGtTY3JvbGxlZFdpbmRvdyAqc2Nyb2xsZWRfd2lu ZG93LAoJCQkJCQkgICAgICBHdGtQb2xpY3lUeXBlICAgICAgaHNjcm9sbGJhcl9wb2xpY3ksCgkJ CQkJCSAgICAgIEd0a1BvbGljeVR5cGUgICAgICB2c2Nyb2xsYmFyX3BvbGljeSk7CnZvaWQgICAg ICAgICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BsYWNlbWVudCAgICAgKEd0a1Njcm9sbGVk V2luZG93ICpzY3JvbGxlZF93aW5kb3csCgkJCQkJCSAgICAgIEd0a0Nvcm5lclR5cGUgICAgICB3 aW5kb3dfcGxhY2VtZW50KTsKdm9pZAkgICAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19hZGRfd2l0 aF92aWV3cG9ydCAoR3RrU2Nyb2xsZWRXaW5kb3cgKnNjcm9sbGVkX3dpbmRvdywKCQkJCQkJICAg ICAgR3RrV2lkZ2V0CQkqY2hpbGQpOwoKCgp9CgoKCgojIDI4ICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0tL3Njcm9sbGVkd2luZG93LmgiIDIKCgpuYW1lc3BhY2UgR3RrIHsKY2xhc3MgU2Nyb2xsZWRX aW5kb3c7CmNsYXNzIFNjcm9sbGVkV2luZG93X0NsYXNzOwp9Cm5hbWVzcGFjZSBHdGsgeyBHdGs6 OlNjcm9sbGVkV2luZG93ICp3cmFwIChHdGtTY3JvbGxlZFdpbmRvdyAqbyk7IH0KbmFtZXNwYWNl IEd0awp7CmNsYXNzIEFkanVzdG1lbnQ7CmNsYXNzIEhTY3JvbGxiYXI7CmNsYXNzIFZTY3JvbGxi YXI7CgpjbGFzcyBTY3JvbGxlZFdpbmRvdyA6IHB1YmxpYyBCaW4gewoKcHVibGljOgogIHR5cGVk ZWYgU2Nyb2xsZWRXaW5kb3cgICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBlZGVmIFNjcm9s bGVkV2luZG93X0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0a1Njcm9sbGVkV2lu ZG93ICAgICAgICAgICBCYXNlT2JqZWN0VHlwZTsKICB0eXBlZGVmIEd0a1Njcm9sbGVkV2luZG93 Q2xhc3MgICAgICBCYXNlQ2xhc3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgU2Nyb2xs ZWRXaW5kb3dfQ2xhc3M7CiAgc3RhdGljIENwcENsYXNzVHlwZSBzY3JvbGxlZF93aW5kb3dfY2xh c3M7CgogIFNjcm9sbGVkV2luZG93KGNvbnN0IFNjcm9sbGVkV2luZG93Jik7CiAgU2Nyb2xsZWRX aW5kb3cmIG9wZXJhdG9yPShjb25zdCBTY3JvbGxlZFdpbmRvdyYpOyAgCgpwcm90ZWN0ZWQ6CiAg dm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBTY3JvbGxlZFdpbmRvdyhHdGtT Y3JvbGxlZFdpbmRvdyAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90 eXBlKCk7CiAgR3RrU2Nyb2xsZWRXaW5kb3cqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJu IChHdGtTY3JvbGxlZFdpbmRvdyopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtTY3JvbGxlZFdp bmRvdyogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0a1Njcm9sbGVkV2luZG93KikoZ3Rrb2Jq ZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7CgogICAKICBzdGF0 aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1YWwgflNjcm9sbGVk V2luZG93KCk7Cgpwcml2YXRlOgoKcHVibGljOgoKICAgCiAgIAogIFNjcm9sbGVkV2luZG93KEFk anVzdG1lbnQgJmhhZGp1c3RtZW50LAoJCSAgICAgQWRqdXN0bWVudCAmdmFkanVzdG1lbnQpOwog IFNjcm9sbGVkV2luZG93KCk7CgoKCgoKICB2b2lkIHNldF9oYWRqdXN0bWVudChHdGs6OkFkanVz dG1lbnQqIGhhZGp1c3RtZW50PTApOwoKCgogIHZvaWQgc2V0X3ZhZGp1c3RtZW50KEd0azo6QWRq dXN0bWVudCogdmFkanVzdG1lbnQ9MCk7CgoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpB ZGp1c3RtZW50JiBoYWRqdXN0bWVudCk7CgoKCiAgdm9pZCBzZXRfdmFkanVzdG1lbnQoR3RrOjpB ZGp1c3RtZW50JiB2YWRqdXN0bWVudCk7CgogICAKCgogIEd0azo6QWRqdXN0bWVudCogZ2V0X2hh ZGp1c3RtZW50KCkgY29uc3Q7CgoKCiAgR3RrOjpBZGp1c3RtZW50KiBnZXRfdmFkanVzdG1lbnQo KSBjb25zdDsKCgogIEd0a1BvbGljeVR5cGUgZ2V0X2hzY3JvbGxiYXJfcG9saWN5KCkgY29uc3Q7 CgogIEd0a1BvbGljeVR5cGUgZ2V0X3ZzY3JvbGxiYXJfcG9saWN5KCkgY29uc3Q7CgogIHZvaWQg c2V0X3BvbGljeShHdGtQb2xpY3lUeXBlIGhzY3JvbGxiYXJfcG9saWN5LEd0a1BvbGljeVR5cGUg dnNjcm9sbGJhcl9wb2xpY3kpOwoKCiAgR3RrQ29ybmVyVHlwZSBnZXRfcGxhY2VtZW50KCkgY29u c3Q7CgogIHZvaWQgc2V0X3BsYWNlbWVudChHdGtDb3JuZXJUeXBlIHdpbmRvd19wbGFjZW1lbnQp OwoKCgogIHZvaWQgYWRkX3dpdGhfdmlld3BvcnQoR3RrOjpXaWRnZXQmIGNoaWxkKTsKCgogIGJv b2wgZ2V0X3ZzY3JvbGxiYXJfdmlzaWJsZSgpIGNvbnN0OwoKICBib29sIGdldF9oc2Nyb2xsYmFy X3Zpc2libGUoKSBjb25zdDsKCiAgR3RrOjpIU2Nyb2xsYmFyKiBnZXRfaHNjcm9sbGJhcigpIGNv bnN0OwoKICBHdGs6OlZTY3JvbGxiYXIqIGdldF92c2Nyb2xsYmFyKCkgY29uc3Q7CgpwdWJsaWM6 Cgpwcm90ZWN0ZWQ6CiAgIAoKfTsKCn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAog CiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCiMgMTMgInRf Z3RrLmNwcCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL2NsaXN0LmgiIDEKIAogCgoK CiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL29wdC9n dGsvaW5jbHVkZS9ndGstMS4yL2d0ay9ndGtjbGlzdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrYWxpZ25t ZW50LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIg ewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0FsaWdubWVudCAgICAgICBHdGtBbGlnbm1l bnQ7CnR5cGVkZWYgc3RydWN0IF9HdGtBbGlnbm1lbnRDbGFzcyAgR3RrQWxpZ25tZW50Q2xhc3M7 CgpzdHJ1Y3QgX0d0a0FsaWdubWVudAp7CiAgR3RrQmluIGJpbjsKCiAgZ2Zsb2F0IHhhbGlnbjsK ICBnZmxvYXQgeWFsaWduOwogIGdmbG9hdCB4c2NhbGU7CiAgZ2Zsb2F0IHlzY2FsZTsKfTsKCnN0 cnVjdCBfR3RrQWxpZ25tZW50Q2xhc3MKewogIEd0a0JpbkNsYXNzIHBhcmVudF9jbGFzczsKfTsK CgpHdGtUeXBlICAgIGd0a19hbGlnbm1lbnRfZ2V0X3R5cGUgICAodm9pZCk7Ckd0a1dpZGdldCog Z3RrX2FsaWdubWVudF9uZXcgICAgICAgIChnZmxvYXQgICAgICAgICAgICAgeGFsaWduLAoJCQkJ ICAgICBnZmxvYXQgICAgICAgICAgICAgeWFsaWduLAoJCQkJICAgICBnZmxvYXQgICAgICAgICAg ICAgeHNjYWxlLAoJCQkJICAgICBnZmxvYXQgICAgICAgICAgICAgeXNjYWxlKTsKdm9pZCAgICAg ICBndGtfYWxpZ25tZW50X3NldCAgICAgICAgKEd0a0FsaWdubWVudCAgICAgICphbGlnbm1lbnQs CgkJCQkgICAgIGdmbG9hdCAgICAgICAgICAgICB4YWxpZ24sCgkJCQkgICAgIGdmbG9hdCAgICAg ICAgICAgICB5YWxpZ24sCgkJCQkgICAgIGdmbG9hdCAgICAgICAgICAgICB4c2NhbGUsCgkJCQkg ICAgIGdmbG9hdCAgICAgICAgICAgICB5c2NhbGUpOwoKCgp9CgoKCgojIDMzICIvb3B0L2d0ay9p bmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2NsaXN0LmgiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9n dGstMS4yL2d0ay9ndGtsYWJlbC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK IyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a21pc2MuaCIgMQogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVm IHN0cnVjdCBfR3RrTWlzYwkgICAgICBHdGtNaXNjOwp0eXBlZGVmIHN0cnVjdCBfR3RrTWlzY0Ns YXNzICBHdGtNaXNjQ2xhc3M7CgpzdHJ1Y3QgX0d0a01pc2MKewogIEd0a1dpZGdldCB3aWRnZXQ7 CiAgCiAgZ2Zsb2F0IHhhbGlnbjsKICBnZmxvYXQgeWFsaWduOwogIAogIGd1aW50MTYgeHBhZDsK ICBndWludDE2IHlwYWQ7Cn07CgpzdHJ1Y3QgX0d0a01pc2NDbGFzcwp7CiAgR3RrV2lkZ2V0Q2xh c3MgcGFyZW50X2NsYXNzOwp9OwoKCkd0a1R5cGUgZ3RrX21pc2NfZ2V0X3R5cGUgICAgICAodm9p ZCk7CnZvaWQJZ3RrX21pc2Nfc2V0X2FsaWdubWVudCAoR3RrTWlzYyAqbWlzYywKCQkJCWdmbG9h dAkgeGFsaWduLAoJCQkJZ2Zsb2F0CSB5YWxpZ24pOwp2b2lkCWd0a19taXNjX3NldF9wYWRkaW5n ICAgKEd0a01pc2MgKm1pc2MsCgkJCQlnaW50CSB4cGFkLAoJCQkJZ2ludAkgeXBhZCk7CgoKCn0K CgoKCiMgMzEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrbGFiZWwuaCIgMgoKCgoK ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrTGFiZWwgICAgICAgR3Rr TGFiZWw7CnR5cGVkZWYgc3RydWN0IF9HdGtMYWJlbENsYXNzICBHdGtMYWJlbENsYXNzOwoKdHlw ZWRlZiBzdHJ1Y3QgX0d0a0xhYmVsV29yZCAgIEd0a0xhYmVsV29yZDsKCnN0cnVjdCBfR3RrTGFi ZWwKewogIEd0a01pc2MgbWlzYzsKCiAgZ2NoYXIgICAgKmxhYmVsOwogIEdka1dDaGFyICpsYWJl bF93YzsKICBnY2hhciAgICAqcGF0dGVybjsKCiAgR3RrTGFiZWxXb3JkICp3b3JkczsKCiAgZ3Vp bnQJICBtYXhfd2lkdGggOiAxNjsKICBndWludCAgIGp0eXBlIDogMjsKICBnYm9vbGVhbiB3cmFw Owp9OwoKc3RydWN0IF9HdGtMYWJlbENsYXNzCnsKICBHdGtNaXNjQ2xhc3MgcGFyZW50X2NsYXNz Owp9OwoKCkd0a1R5cGUgICAgZ3RrX2xhYmVsX2dldF90eXBlICAgICAgKHZvaWQpOwpHdGtXaWRn ZXQqIGd0a19sYWJlbF9uZXcgICAgICAgICAgIChjb25zdCBnY2hhciAgICAgICAqc3RyKTsKdm9p ZCAgICAgICBndGtfbGFiZWxfc2V0X3RleHQgICAgICAoR3RrTGFiZWwgICAgICAgICAgKmxhYmVs LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAq c3RyKTsKdm9pZCAgICAgICBndGtfbGFiZWxfc2V0X2p1c3RpZnkgICAoR3RrTGFiZWwgICAgICAg ICAgKmxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtKdXN0aWZp Y2F0aW9uICAganR5cGUpOwp2b2lkCSAgIGd0a19sYWJlbF9zZXRfcGF0dGVybiAgIChHdGtMYWJl bAkgICAgICAqbGFiZWwsCgkJCQkgICAgY29uc3QgZ2NoYXIJICAgICAgKnBhdHRlcm4pOwp2b2lk CSAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwIChHdGtMYWJlbAkgICAgICAqbGFiZWwsCgkJCQkg ICAgZ2Jvb2xlYW4gICAgICAgICAgIHdyYXApOwp2b2lkICAgICAgIGd0a19sYWJlbF9nZXQgICAg ICAgICAgIChHdGtMYWJlbCAgICAgICAgICAqbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgKipzdHIpOwoKIAoKCgpndWludCAgICAgIGd0 a19sYWJlbF9wYXJzZV91bGluZSAgICAoR3RrTGFiZWwgICAgICAgICAqbGFiZWwsCgkJCQkgICAg IGNvbnN0IGdjaGFyICAgICAgKnN0cmluZyk7CgoKCgoKCn0KCgoKCiMgMzQgIi9vcHQvZ3RrL2lu Y2x1ZGUvZ3RrLTEuMi9ndGsvZ3RrY2xpc3QuaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0 ay0xLjIvZ3RrL2d0a2J1dHRvbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HdGtCdXR0b24gICAg ICAgR3RrQnV0dG9uOwp0eXBlZGVmIHN0cnVjdCBfR3RrQnV0dG9uQ2xhc3MgIEd0a0J1dHRvbkNs YXNzOwoKc3RydWN0IF9HdGtCdXR0b24KewogIEd0a0JpbiBiaW47CgogIEd0a1dpZGdldCAqY2hp bGQgIAoKOwoKICBndWludCBpbl9idXR0b24gOiAxOwogIGd1aW50IGJ1dHRvbl9kb3duIDogMTsK ICBndWludCByZWxpZWYgOiAyOwp9OwoKc3RydWN0IF9HdGtCdXR0b25DbGFzcwp7CiAgR3RrQmlu Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKICAKICB2b2lkICgqIHByZXNzZWQpICAoR3RrQnV0 dG9uICpidXR0b24pOwogIHZvaWQgKCogcmVsZWFzZWQpIChHdGtCdXR0b24gKmJ1dHRvbik7CiAg dm9pZCAoKiBjbGlja2VkKSAgKEd0a0J1dHRvbiAqYnV0dG9uKTsKICB2b2lkICgqIGVudGVyKSAg ICAoR3RrQnV0dG9uICpidXR0b24pOwogIHZvaWQgKCogbGVhdmUpICAgIChHdGtCdXR0b24gKmJ1 dHRvbik7Cn07CgoKR3RrVHlwZSAgICAgICAgZ3RrX2J1dHRvbl9nZXRfdHlwZSAgICAgICAodm9p ZCk7Ckd0a1dpZGdldCogICAgIGd0a19idXR0b25fbmV3ICAgICAgICAgICAgKHZvaWQpOwpHdGtX aWRnZXQqICAgICBndGtfYnV0dG9uX25ld193aXRoX2xhYmVsIChjb25zdCBnY2hhciAqbGFiZWwp Owp2b2lkICAgICAgICAgICBndGtfYnV0dG9uX3ByZXNzZWQgICAgICAgIChHdGtCdXR0b24gKmJ1 dHRvbik7CnZvaWQgICAgICAgICAgIGd0a19idXR0b25fcmVsZWFzZWQgICAgICAgKEd0a0J1dHRv biAqYnV0dG9uKTsKdm9pZCAgICAgICAgICAgZ3RrX2J1dHRvbl9jbGlja2VkICAgICAgICAoR3Rr QnV0dG9uICpidXR0b24pOwp2b2lkICAgICAgICAgICBndGtfYnV0dG9uX2VudGVyICAgICAgICAg IChHdGtCdXR0b24gKmJ1dHRvbik7CnZvaWQgICAgICAgICAgIGd0a19idXR0b25fbGVhdmUgICAg ICAgICAgKEd0a0J1dHRvbiAqYnV0dG9uKTsKdm9pZCAgICAgICAgICAgZ3RrX2J1dHRvbl9zZXRf cmVsaWVmICAgICAoR3RrQnV0dG9uICpidXR0b24sCgkJCQkJICBHdGtSZWxpZWZTdHlsZSBuZXdz dHlsZSk7Ckd0a1JlbGllZlN0eWxlIGd0a19idXR0b25fZ2V0X3JlbGllZiAgICAgIChHdGtCdXR0 b24gKmJ1dHRvbik7CgoKCn0KCgoKCiMgMzUgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLTEuMi9ndGsv Z3RrY2xpc3QuaCIgMgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCmVudW0gewogIEdUS19DTElTVF9J Tl9EUkFHICAgICAgICAgICAgID0gMSA8PCAgMCwKICBHVEtfQ0xJU1RfUk9XX0hFSUdIVF9TRVQg ICAgICA9IDEgPDwgIDEsCiAgR1RLX0NMSVNUX1NIT1dfVElUTEVTICAgICAgICAgPSAxIDw8ICAy LAogIEdUS19DTElTVF9DSElMRF9IQVNfRk9DVVMgICAgID0gMSA8PCAgMywKICBHVEtfQ0xJU1Rf QUREX01PREUgICAgICAgICAgICA9IDEgPDwgIDQsCiAgR1RLX0NMSVNUX0FVVE9fU09SVCAgICAg ICAgICAgPSAxIDw8ICA1LAogIEdUS19DTElTVF9BVVRPX1JFU0laRV9CTE9DS0VEID0gMSA8PCAg NiwKICBHVEtfQ0xJU1RfUkVPUkRFUkFCTEUgICAgICAgICA9IDEgPDwgIDcsCiAgR1RLX0NMSVNU X1VTRV9EUkFHX0lDT05TICAgICAgPSAxIDw8ICA4LAogIEdUS19DTElTVF9EUkFXX0RSQUdfTElO RSAgICAgID0gMSA8PCAgOSwKICBHVEtfQ0xJU1RfRFJBV19EUkFHX1JFQ1QgICAgICA9IDEgPDwg MTAKfTsgCgogCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NFTExfRU1QVFksCiAgR1RLX0NFTExfVEVY VCwKICBHVEtfQ0VMTF9QSVhNQVAsCiAgR1RLX0NFTExfUElYVEVYVCwKICBHVEtfQ0VMTF9XSURH RVQKfSBHdGtDZWxsVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0NMSVNUX0RSQUdfTk9ORSwK ICBHVEtfQ0xJU1RfRFJBR19CRUZPUkUsCiAgR1RLX0NMSVNUX0RSQUdfSU5UTywKICBHVEtfQ0xJ U1RfRFJBR19BRlRFUgp9IEd0a0NMaXN0RHJhZ1BvczsKCnR5cGVkZWYgZW51bQp7CiAgR1RLX0JV VFRPTl9JR05PUkVEID0gMCwKICBHVEtfQlVUVE9OX1NFTEVDVFMgPSAxIDw8IDAsCiAgR1RLX0JV VFRPTl9EUkFHUyAgID0gMSA8PCAxLAogIEdUS19CVVRUT05fRVhQQU5EUyA9IDEgPDwgMgp9IEd0 a0J1dHRvbkFjdGlvbjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfR3RrQ0xpc3QgR3RrQ0xpc3Q7CnR5cGVkZWYgc3RydWN0IF9HdGtDTGlzdENsYXNzIEd0 a0NMaXN0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9HdGtDTGlzdENvbHVtbiBHdGtDTGlzdENvbHVt bjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0Um93IEd0a0NMaXN0Um93OwoKdHlwZWRlZiBzdHJ1 Y3QgX0d0a0NlbGwgR3RrQ2VsbDsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NlbGxUZXh0IEd0a0NlbGxU ZXh0Owp0eXBlZGVmIHN0cnVjdCBfR3RrQ2VsbFBpeG1hcCBHdGtDZWxsUGl4bWFwOwp0eXBlZGVm IHN0cnVjdCBfR3RrQ2VsbFBpeFRleHQgR3RrQ2VsbFBpeFRleHQ7CnR5cGVkZWYgc3RydWN0IF9H dGtDZWxsV2lkZ2V0IEd0a0NlbGxXaWRnZXQ7Cgp0eXBlZGVmIGdpbnQgKCpHdGtDTGlzdENvbXBh cmVGdW5jKSAoR3RrQ0xpc3QgICAgICpjbGlzdCwKCQkJCSAgICAgZ2NvbnN0cG9pbnRlciBwdHIx LAoJCQkJICAgICBnY29uc3Rwb2ludGVyIHB0cjIpOwoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0 Q2VsbEluZm8gR3RrQ0xpc3RDZWxsSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0NMaXN0RGVzdElu Zm8gR3RrQ0xpc3REZXN0SW5mbzsKCnN0cnVjdCBfR3RrQ0xpc3RDZWxsSW5mbwp7CiAgZ2ludCBy b3c7CiAgZ2ludCBjb2x1bW47Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0RGVzdEluZm8KewogIEd0a0NM aXN0Q2VsbEluZm8gY2VsbDsKICBHdGtDTGlzdERyYWdQb3MgIGluc2VydF9wb3M7Cn07CgpzdHJ1 Y3QgX0d0a0NMaXN0CnsKICBHdGtDb250YWluZXIgY29udGFpbmVyOwogIAogIGd1aW50MTYgZmxh Z3M7CiAgCiAgIAogIEdNZW1DaHVuayAqcm93X21lbV9jaHVuazsKICBHTWVtQ2h1bmsgKmNlbGxf bWVtX2NodW5rOwoKICBndWludCBmcmVlemVfY291bnQ7CiAgCiAgIAoKICBHZGtSZWN0YW5nbGUg aW50ZXJuYWxfYWxsb2NhdGlvbjsKICAKICAgCiAgZ2ludCByb3dzOwogIGdpbnQgcm93X2NlbnRl cl9vZmZzZXQ7CiAgZ2ludCByb3dfaGVpZ2h0OwogIEdMaXN0ICpyb3dfbGlzdDsKICBHTGlzdCAq cm93X2xpc3RfZW5kOwogIAogICAKICBnaW50IGNvbHVtbnM7CiAgR2RrUmVjdGFuZ2xlIGNvbHVt bl90aXRsZV9hcmVhOwogIEdka1dpbmRvdyAqdGl0bGVfd2luZG93OwogIAogICAKICBHdGtDTGlz dENvbHVtbiAqY29sdW1uOwogIAogICAKCiAgR2RrV2luZG93ICpjbGlzdF93aW5kb3c7CiAgZ2lu dCBjbGlzdF93aW5kb3dfd2lkdGg7CiAgZ2ludCBjbGlzdF93aW5kb3dfaGVpZ2h0OwogIAogICAK ICBnaW50IGhvZmZzZXQ7CiAgZ2ludCB2b2Zmc2V0OwogIAogICAKICBHdGtTaGFkb3dUeXBlIHNo YWRvd190eXBlOwogIAogICAKICBHdGtTZWxlY3Rpb25Nb2RlIHNlbGVjdGlvbl9tb2RlOwogIAog ICAKICBHTGlzdCAqc2VsZWN0aW9uOwogIEdMaXN0ICpzZWxlY3Rpb25fZW5kOwogIAogIEdMaXN0 ICp1bmRvX3NlbGVjdGlvbjsKICBHTGlzdCAqdW5kb191bnNlbGVjdGlvbjsKICBnaW50IHVuZG9f YW5jaG9yOwogIAogICAKICBndWludDggYnV0dG9uX2FjdGlvbnNbNV07CgogIGd1aW50OCBkcmFn X2J1dHRvbjsKCiAgIAogIEd0a0NMaXN0Q2VsbEluZm8gY2xpY2tfY2VsbDsKCiAgIAogIEd0a0Fk anVzdG1lbnQgKmhhZGp1c3RtZW50OwogIEd0a0FkanVzdG1lbnQgKnZhZGp1c3RtZW50OwogIAog ICAKICBHZGtHQyAqeG9yX2djOwogIAogICAKICBHZGtHQyAqZmdfZ2M7CiAgR2RrR0MgKmJnX2dj OwogIAogICAKICBHZGtDdXJzb3IgKmN1cnNvcl9kcmFnOwogIAogICAKICBnaW50IHhfZHJhZzsK ICAKICAgCiAgZ2ludCBmb2N1c19yb3c7CiAgCiAgIAogIGdpbnQgYW5jaG9yOwogIEd0a1N0YXRl VHlwZSBhbmNob3Jfc3RhdGU7CiAgZ2ludCBkcmFnX3BvczsKICBnaW50IGh0aW1lcjsKICBnaW50 IHZ0aW1lcjsKICAKICBHdGtTb3J0VHlwZSBzb3J0X3R5cGU7CiAgR3RrQ0xpc3RDb21wYXJlRnVu YyBjb21wYXJlOwogIGdpbnQgc29ydF9jb2x1bW47Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0Q2xhc3MK ewogIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVudF9jbGFzczsKICAKICB2b2lkICAoKnNldF9zY3Jv bGxfYWRqdXN0bWVudHMpIChHdGtDTGlzdCAgICAgICAqY2xpc3QsCgkJCQkgICBHdGtBZGp1c3Rt ZW50ICAqaGFkanVzdG1lbnQsCgkJCQkgICBHdGtBZGp1c3RtZW50ICAqdmFkanVzdG1lbnQpOwog IHZvaWQgICAoKnJlZnJlc2gpICAgICAgICAgICAgIChHdGtDTGlzdCAgICAgICAqY2xpc3QpOwog IHZvaWQgICAoKnNlbGVjdF9yb3cpICAgICAgICAgIChHdGtDTGlzdCAgICAgICAqY2xpc3QsCgkJ CQkgZ2ludCAgICAgICAgICAgIHJvdywKCQkJCSBnaW50ICAgICAgICAgICAgY29sdW1uLAoJCQkJ IEdka0V2ZW50ICAgICAgICpldmVudCk7CiAgdm9pZCAgICgqdW5zZWxlY3Rfcm93KSAgICAgICAg KEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAgICAgICAgcm93LAoJCQkJIGdp bnQgICAgICAgICAgICBjb2x1bW4sCgkJCQkgR2RrRXZlbnQgICAgICAgKmV2ZW50KTsKICB2b2lk ICAgKCpyb3dfbW92ZSkgICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdp bnQgICAgICAgICAgICBzb3VyY2Vfcm93LAoJCQkJIGdpbnQgICAgICAgICAgICBkZXN0X3Jvdyk7 CiAgdm9pZCAgICgqY2xpY2tfY29sdW1uKSAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwK CQkJCSBnaW50ICAgICAgICAgICAgY29sdW1uKTsKICB2b2lkICAgKCpyZXNpemVfY29sdW1uKSAg ICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICAgICBjb2x1bW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICB3aWR0aCk7 CiAgdm9pZCAgICgqdG9nZ2xlX2ZvY3VzX3JvdykgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqc2VsZWN0X2FsbCkgICAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqdW5zZWxlY3RfYWxsKSAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqdW5kb19zZWxlY3Rpb24pICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqc3RhcnRfc2VsZWN0aW9uKSAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqZW5kX3NlbGVjdGlvbikgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCk7 CiAgdm9pZCAgICgqZXh0ZW5kX3NlbGVjdGlvbikgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwK CQkJCSBHdGtTY3JvbGxUeXBlICAgc2Nyb2xsX3R5cGUsCgkJCQkgZ2Zsb2F0ICAgICAgICAgIHBv c2l0aW9uLAoJCQkJIGdib29sZWFuICAgICAgICBhdXRvX3N0YXJ0X3NlbGVjdGlvbik7CiAgdm9p ZCAgICgqc2Nyb2xsX2hvcml6b250YWwpICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBH dGtTY3JvbGxUeXBlICAgc2Nyb2xsX3R5cGUsCgkJCQkgZ2Zsb2F0ICAgICAgICAgIHBvc2l0aW9u KTsKICB2b2lkICAgKCpzY3JvbGxfdmVydGljYWwpICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0 LAoJCQkJIEd0a1Njcm9sbFR5cGUgICBzY3JvbGxfdHlwZSwKCQkJCSBnZmxvYXQgICAgICAgICAg cG9zaXRpb24pOwogIHZvaWQgICAoKnRvZ2dsZV9hZGRfbW9kZSkgICAgIChHdGtDTGlzdCAgICAg ICAqY2xpc3QpOwogIHZvaWQgICAoKmFib3J0X2NvbHVtbl9yZXNpemUpIChHdGtDTGlzdCAgICAg ICAqY2xpc3QpOwogIHZvaWQgICAoKnJlc3luY19zZWxlY3Rpb24pICAgIChHdGtDTGlzdCAgICAg ICAqY2xpc3QsCgkJCQkgR2RrRXZlbnQgICAgICAgKmV2ZW50KTsKICBHTGlzdCogKCpzZWxlY3Rp b25fZmluZCkgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICAg ICByb3dfbnVtYmVyLAoJCQkJIEdMaXN0ICAgICAgICAgICpyb3dfbGlzdF9lbGVtZW50KTsKICB2 b2lkICAgKCpkcmF3X3JvdykgICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJ IEdka1JlY3RhbmdsZSAgICphcmVhLAoJCQkJIGdpbnQgICAgICAgICAgICByb3csCgkJCQkgR3Rr Q0xpc3RSb3cgICAgKmNsaXN0X3Jvdyk7CiAgdm9pZCAgICgqZHJhd19kcmFnX2hpZ2hsaWdodCkg KEd0a0NMaXN0ICAgICAgICAqY2xpc3QsCgkJCQkgR3RrQ0xpc3RSb3cgICAgICp0YXJnZXRfcm93 LAoJCQkJIGdpbnQgICAgICAgICAgICAgdGFyZ2V0X3Jvd19udW1iZXIsCgkJCQkgR3RrQ0xpc3RE cmFnUG9zICBkcmFnX3Bvcyk7CiAgdm9pZCAgICgqY2xlYXIpICAgICAgICAgICAgICAgKEd0a0NM aXN0ICAgICAgICpjbGlzdCk7CiAgdm9pZCAgICgqZmFrZV91bnNlbGVjdF9hbGwpICAgKEd0a0NM aXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAgICAgICAgcm93KTsKICB2b2lkICAgKCpz b3J0X2xpc3QpICAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0KTsKICBnaW50ICAgKCpp bnNlcnRfcm93KSAgICAgICAgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAg ICAgICAgICByb3csCgkJCQkgZ2NoYXIgICAgICAgICAgKnRleHRbXSk7CiAgdm9pZCAgICgqcmVt b3ZlX3JvdykgICAgICAgICAgKEd0a0NMaXN0ICAgICAgICpjbGlzdCwKCQkJCSBnaW50ICAgICAg ICAgICAgcm93KTsKICB2b2lkICAgKCpzZXRfY2VsbF9jb250ZW50cykgICAoR3RrQ0xpc3QgICAg ICAgKmNsaXN0LAoJCQkJIEd0a0NMaXN0Um93ICAgICpjbGlzdF9yb3csCgkJCQkgZ2ludCAgICAg ICAgICAgIGNvbHVtbiwKCQkJCSBHdGtDZWxsVHlwZSAgICAgdHlwZSwKCQkJCSBjb25zdCBnY2hh ciAgICAqdGV4dCwKCQkJCSBndWludDggICAgICAgICAgc3BhY2luZywKCQkJCSBHZGtQaXhtYXAg ICAgICAqcGl4bWFwLAoJCQkJIEdka0JpdG1hcCAgICAgICptYXNrKTsKICB2b2lkICAgKCpjZWxs X3NpemVfcmVxdWVzdCkgICAoR3RrQ0xpc3QgICAgICAgKmNsaXN0LAoJCQkJIEd0a0NMaXN0Um93 ICAgICpjbGlzdF9yb3csCgkJCQkgZ2ludCAgICAgICAgICAgIGNvbHVtbiwKCQkJCSBHdGtSZXF1 aXNpdGlvbiAqcmVxdWlzaXRpb24pOwoKfTsKCnN0cnVjdCBfR3RrQ0xpc3RDb2x1bW4KewogIGdj aGFyICp0aXRsZTsKICBHZGtSZWN0YW5nbGUgYXJlYTsKICAKICBHdGtXaWRnZXQgKmJ1dHRvbjsK ICBHZGtXaW5kb3cgKndpbmRvdzsKICAKICBnaW50IHdpZHRoOwogIGdpbnQgbWluX3dpZHRoOwog IGdpbnQgbWF4X3dpZHRoOwogIEd0a0p1c3RpZmljYXRpb24ganVzdGlmaWNhdGlvbjsKICAKICBn dWludCB2aXNpYmxlICAgICAgICA6IDE7ICAKICBndWludCB3aWR0aF9zZXQgICAgICA6IDE7CiAg Z3VpbnQgcmVzaXplYWJsZSAgICAgOiAxOwogIGd1aW50IGF1dG9fcmVzaXplICAgIDogMTsKICBn dWludCBidXR0b25fcGFzc2l2ZSA6IDE7Cn07CgpzdHJ1Y3QgX0d0a0NMaXN0Um93CnsKICBHdGtD ZWxsICpjZWxsOwogIEd0a1N0YXRlVHlwZSBzdGF0ZTsKICAKICBHZGtDb2xvciBmb3JlZ3JvdW5k OwogIEdka0NvbG9yIGJhY2tncm91bmQ7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICBncG9pbnRl ciBkYXRhOwogIEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveTsKICAKICBndWludCBmZ19zZXQgICAg IDogMTsKICBndWludCBiZ19zZXQgICAgIDogMTsKICBndWludCBzZWxlY3RhYmxlIDogMTsKfTsK CiAKc3RydWN0IF9HdGtDZWxsVGV4dAp7CiAgR3RrQ2VsbFR5cGUgdHlwZTsKICAKICBnaW50MTYg dmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICBn Y2hhciAqdGV4dDsKfTsKCnN0cnVjdCBfR3RrQ2VsbFBpeG1hcAp7CiAgR3RrQ2VsbFR5cGUgdHlw ZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5 bGUgKnN0eWxlOwoKICBHZGtQaXhtYXAgKnBpeG1hcDsKICBHZGtCaXRtYXAgKm1hc2s7Cn07Cgpz dHJ1Y3QgX0d0a0NlbGxQaXhUZXh0CnsKICBHdGtDZWxsVHlwZSB0eXBlOwogIAogIGdpbnQxNiB2 ZXJ0aWNhbDsKICBnaW50MTYgaG9yaXpvbnRhbDsKICAKICBHdGtTdHlsZSAqc3R5bGU7CgogIGdj aGFyICp0ZXh0OwogIGd1aW50OCBzcGFjaW5nOwogIEdka1BpeG1hcCAqcGl4bWFwOwogIEdka0Jp dG1hcCAqbWFzazsKfTsKCnN0cnVjdCBfR3RrQ2VsbFdpZGdldAp7CiAgR3RrQ2VsbFR5cGUgdHlw ZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250YWw7CiAgCiAgR3RrU3R5 bGUgKnN0eWxlOwoKICBHdGtXaWRnZXQgKndpZGdldDsKfTsKCnN0cnVjdCBfR3RrQ2VsbAp7CiAg R3RrQ2VsbFR5cGUgdHlwZTsKICAKICBnaW50MTYgdmVydGljYWw7CiAgZ2ludDE2IGhvcml6b250 YWw7CiAgCiAgR3RrU3R5bGUgKnN0eWxlOwoKICB1bmlvbiB7CiAgICBnY2hhciAqdGV4dDsKICAg IAogICAgc3RydWN0IHsKICAgICAgR2RrUGl4bWFwICpwaXhtYXA7CiAgICAgIEdka0JpdG1hcCAq bWFzazsKICAgIH0gcG07CiAgICAKICAgIHN0cnVjdCB7CiAgICAgIGdjaGFyICp0ZXh0OwogICAg ICBndWludDggc3BhY2luZzsKICAgICAgR2RrUGl4bWFwICpwaXhtYXA7CiAgICAgIEdka0JpdG1h cCAqbWFzazsKICAgIH0gcHQ7CiAgICAKICAgIEd0a1dpZGdldCAqd2lkZ2V0OwogIH0gdTsKfTsK Ckd0a1R5cGUgZ3RrX2NsaXN0X2dldF90eXBlICh2b2lkKTsKCiAKdm9pZCBndGtfY2xpc3RfY29u c3RydWN0IChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgZ2ludCAgICAgIGNvbHVtbnMsCgkJCSAgZ2No YXIgICAgKnRpdGxlc1tdKTsKCiAKR3RrV2lkZ2V0KiBndGtfY2xpc3RfbmV3ICAgICAgICAgICAg IChnaW50ICAgY29sdW1ucyk7Ckd0a1dpZGdldCogZ3RrX2NsaXN0X25ld193aXRoX3RpdGxlcyAo Z2ludCAgIGNvbHVtbnMsCgkJCQkgICAgICBnY2hhciAqdGl0bGVzW10pOwoKIAp2b2lkIGd0a19j bGlzdF9zZXRfaGFkanVzdG1lbnQgKEd0a0NMaXN0ICAgICAgKmNsaXN0LAoJCQkJR3RrQWRqdXN0 bWVudCAqYWRqdXN0bWVudCk7CnZvaWQgZ3RrX2NsaXN0X3NldF92YWRqdXN0bWVudCAoR3RrQ0xp c3QgICAgICAqY2xpc3QsCgkJCQlHdGtBZGp1c3RtZW50ICphZGp1c3RtZW50KTsKCiAKR3RrQWRq dXN0bWVudCogZ3RrX2NsaXN0X2dldF9oYWRqdXN0bWVudCAoR3RrQ0xpc3QgKmNsaXN0KTsKR3Rr QWRqdXN0bWVudCogZ3RrX2NsaXN0X2dldF92YWRqdXN0bWVudCAoR3RrQ0xpc3QgKmNsaXN0KTsK CiAKdm9pZCBndGtfY2xpc3Rfc2V0X3NoYWRvd190eXBlIChHdGtDTGlzdCAgICAgICpjbGlzdCwK CQkJCUd0a1NoYWRvd1R5cGUgIHR5cGUpOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfc2VsZWN0aW9u X21vZGUgKEd0a0NMaXN0ICAgICAgICAgKmNsaXN0LAoJCQkJICAgR3RrU2VsZWN0aW9uTW9kZSAg bW9kZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9yZW9yZGVyYWJsZSAoR3RrQ0xpc3QgKmNsaXN0 LAoJCQkJZ2Jvb2xlYW4gIHJlb3JkZXJhYmxlKTsKdm9pZCBndGtfY2xpc3Rfc2V0X3VzZV9kcmFn X2ljb25zIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICBnYm9vbGVhbiAgdXNlX2ljb25zKTsKdm9p ZCBndGtfY2xpc3Rfc2V0X2J1dHRvbl9hY3Rpb25zIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICBn dWludCAgICAgYnV0dG9uLAoJCQkJICAgZ3VpbnQ4ICAgIGJ1dHRvbl9hY3Rpb25zKTsKCiAKCgoK dm9pZCBndGtfY2xpc3RfZnJlZXplIChHdGtDTGlzdCAqY2xpc3QpOwp2b2lkIGd0a19jbGlzdF90 aGF3ICAgKEd0a0NMaXN0ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0X2NvbHVtbl90aXRsZXNf c2hvdyAoR3RrQ0xpc3QgKmNsaXN0KTsKdm9pZCBndGtfY2xpc3RfY29sdW1uX3RpdGxlc19oaWRl IChHdGtDTGlzdCAqY2xpc3QpOwoKIAoKCgp2b2lkIGd0a19jbGlzdF9jb2x1bW5fdGl0bGVfYWN0 aXZlICAgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgICAgIGdpbnQgICAgICBjb2x1bW4pOwp2b2lk IGd0a19jbGlzdF9jb2x1bW5fdGl0bGVfcGFzc2l2ZSAgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAg ICAgIGdpbnQgICAgICBjb2x1bW4pOwp2b2lkIGd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2FjdGl2 ZSAgKEd0a0NMaXN0ICpjbGlzdCk7CnZvaWQgZ3RrX2NsaXN0X2NvbHVtbl90aXRsZXNfcGFzc2l2 ZSAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X2NvbHVtbl90aXRsZSAo R3RrQ0xpc3QgICAgKmNsaXN0LAoJCQkJIGdpbnQgICAgICAgICBjb2x1bW4sCgkJCQkgY29uc3Qg Z2NoYXIgKnRpdGxlKTsKCiAKZ2NoYXIgKiBndGtfY2xpc3RfZ2V0X2NvbHVtbl90aXRsZSAoR3Rr Q0xpc3QgKmNsaXN0LAoJCQkJICAgIGdpbnQgICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlz dF9zZXRfY29sdW1uX3dpZGdldCAoR3RrQ0xpc3QgICpjbGlzdCwKCQkJCSAgZ2ludCAgICAgICBj b2x1bW4sCgkJCQkgIEd0a1dpZGdldCAqd2lkZ2V0KTsKCiAKR3RrV2lkZ2V0ICogZ3RrX2NsaXN0 X2dldF9jb2x1bW5fd2lkZ2V0IChHdGtDTGlzdCAqY2xpc3QsCgkJCQkJIGdpbnQgICAgICBjb2x1 bW4pOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX2p1c3RpZmljYXRpb24gKEd0a0NMaXN0 ICAgICAgICAgKmNsaXN0LAoJCQkJCSBnaW50ICAgICAgICAgICAgICBjb2x1bW4sCgkJCQkJIEd0 a0p1c3RpZmljYXRpb24gIGp1c3RpZmljYXRpb24pOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29s dW1uX3Zpc2liaWxpdHkgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgICAgIGdpbnQgICAgICBjb2x1 bW4sCgkJCQkgICAgICBnYm9vbGVhbiAgdmlzaWJsZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9j b2x1bW5fcmVzaXplYWJsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICAgZ2ludCAgICAgIGNv bHVtbiwKCQkJCSAgICAgIGdib29sZWFuICByZXNpemVhYmxlKTsKCiAKdm9pZCBndGtfY2xpc3Rf c2V0X2NvbHVtbl9hdXRvX3Jlc2l6ZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICAgIGdpbnQg ICAgICBjb2x1bW4sCgkJCQkgICAgICAgZ2Jvb2xlYW4gIGF1dG9fcmVzaXplKTsKCmdpbnQgZ3Rr X2NsaXN0X2NvbHVtbnNfYXV0b3NpemUgKEd0a0NMaXN0ICpjbGlzdCk7CgogCmdpbnQgZ3RrX2Ns aXN0X29wdGltYWxfY29sdW1uX3dpZHRoIChHdGtDTGlzdCAqY2xpc3QsCgkJCQkgICAgIGdpbnQg ICAgICBjb2x1bW4pOwoKIAoKCgp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX3dpZHRoIChHdGtD TGlzdCAqY2xpc3QsCgkJCQkgZ2ludCAgICAgIGNvbHVtbiwKCQkJCSBnaW50ICAgICAgd2lkdGgp OwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfY29sdW1uX21pbl93aWR0aCAoR3RrQ0xpc3QgKmNsaXN0 LAoJCQkJICAgICBnaW50ICAgICAgY29sdW1uLAoJCQkJICAgICBnaW50ICAgICAgbWluX3dpZHRo KTsKdm9pZCBndGtfY2xpc3Rfc2V0X2NvbHVtbl9tYXhfd2lkdGggKEd0a0NMaXN0ICpjbGlzdCwK CQkJCSAgICAgZ2ludCAgICAgIGNvbHVtbiwKCQkJCSAgICAgZ2ludCAgICAgIG1heF93aWR0aCk7 CgogCgoKdm9pZCBndGtfY2xpc3Rfc2V0X3Jvd19oZWlnaHQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJ ICAgICAgIGd1aW50ICAgICBoZWlnaHQpOwoKIAoKCgoKdm9pZCBndGtfY2xpc3RfbW92ZXRvIChH dGtDTGlzdCAqY2xpc3QsCgkJICAgICAgIGdpbnQgICAgICByb3csCgkJICAgICAgIGdpbnQgICAg ICBjb2x1bW4sCgkJICAgICAgIGdmbG9hdCAgICByb3dfYWxpZ24sCgkJICAgICAgIGdmbG9hdCAg ICBjb2xfYWxpZ24pOwoKIApHdGtWaXNpYmlsaXR5IGd0a19jbGlzdF9yb3dfaXNfdmlzaWJsZSAo R3RrQ0xpc3QgKmNsaXN0LAoJCQkJCWdpbnQgICAgICByb3cpOwoKIApHdGtDZWxsVHlwZSBndGtf Y2xpc3RfZ2V0X2NlbGxfdHlwZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgICBnaW50ICAgICAg cm93LAoJCQkJICAgICBnaW50ICAgICAgY29sdW1uKTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X3Rl eHQgKEd0a0NMaXN0ICAgICpjbGlzdCwKCQkJIGdpbnQgICAgICAgICByb3csCgkJCSBnaW50ICAg ICAgICAgY29sdW1uLAoJCQkgY29uc3QgZ2NoYXIgKnRleHQpOwoKIAoKCmdpbnQgZ3RrX2NsaXN0 X2dldF90ZXh0IChHdGtDTGlzdCAgKmNsaXN0LAoJCQkgZ2ludCAgICAgICByb3csCgkJCSBnaW50 ICAgICAgIGNvbHVtbiwKCQkJIGdjaGFyICAgICoqdGV4dCk7CgogCnZvaWQgZ3RrX2NsaXN0X3Nl dF9waXhtYXAgKEd0a0NMaXN0ICAqY2xpc3QsCgkJCSAgIGdpbnQgICAgICAgcm93LAoJCQkgICBn aW50ICAgICAgIGNvbHVtbiwKCQkJICAgR2RrUGl4bWFwICpwaXhtYXAsCgkJCSAgIEdka0JpdG1h cCAqbWFzayk7CgpnaW50IGd0a19jbGlzdF9nZXRfcGl4bWFwIChHdGtDTGlzdCAgICpjbGlzdCwK CQkJICAgZ2ludCAgICAgICAgcm93LAoJCQkgICBnaW50ICAgICAgICBjb2x1bW4sCgkJCSAgIEdk a1BpeG1hcCAqKnBpeG1hcCwKCQkJICAgR2RrQml0bWFwICoqbWFzayk7CgogCnZvaWQgZ3RrX2Ns aXN0X3NldF9waXh0ZXh0IChHdGtDTGlzdCAgICAqY2xpc3QsCgkJCSAgICBnaW50ICAgICAgICAg cm93LAoJCQkgICAgZ2ludCAgICAgICAgIGNvbHVtbiwKCQkJICAgIGNvbnN0IGdjaGFyICp0ZXh0 LAoJCQkgICAgZ3VpbnQ4ICAgICAgIHNwYWNpbmcsCgkJCSAgICBHZGtQaXhtYXAgICAqcGl4bWFw LAoJCQkgICAgR2RrQml0bWFwICAgKm1hc2spOwoKZ2ludCBndGtfY2xpc3RfZ2V0X3BpeHRleHQg KEd0a0NMaXN0ICAgKmNsaXN0LAoJCQkgICAgZ2ludCAgICAgICAgcm93LAoJCQkgICAgZ2ludCAg ICAgICAgY29sdW1uLAoJCQkgICAgZ2NoYXIgICAgICoqdGV4dCwKCQkJICAgIGd1aW50OCAgICAg KnNwYWNpbmcsCgkJCSAgICBHZGtQaXhtYXAgKipwaXhtYXAsCgkJCSAgICBHZGtCaXRtYXAgKipt YXNrKTsKCiAKCgp2b2lkIGd0a19jbGlzdF9zZXRfZm9yZWdyb3VuZCAoR3RrQ0xpc3QgKmNsaXN0 LAoJCQkgICAgICAgZ2ludCAgICAgIHJvdywKCQkJICAgICAgIEdka0NvbG9yICpjb2xvcik7Cgog CgoKdm9pZCBndGtfY2xpc3Rfc2V0X2JhY2tncm91bmQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAg ICAgIGdpbnQgICAgICByb3csCgkJCSAgICAgICBHZGtDb2xvciAqY29sb3IpOwoKIAp2b2lkIGd0 a19jbGlzdF9zZXRfY2VsbF9zdHlsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkgICAgICAgZ2ludCAg ICAgIHJvdywKCQkJICAgICAgIGdpbnQgICAgICBjb2x1bW4sCgkJCSAgICAgICBHdGtTdHlsZSAq c3R5bGUpOwoKR3RrU3R5bGUgKmd0a19jbGlzdF9nZXRfY2VsbF9zdHlsZSAoR3RrQ0xpc3QgKmNs aXN0LAoJCQkJICAgIGdpbnQgICAgICByb3csCgkJCQkgICAgZ2ludCAgICAgIGNvbHVtbik7Cgp2 b2lkIGd0a19jbGlzdF9zZXRfcm93X3N0eWxlIChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgICAgIGdp bnQgICAgICByb3csCgkJCSAgICAgIEd0a1N0eWxlICpzdHlsZSk7CgpHdGtTdHlsZSAqZ3RrX2Ns aXN0X2dldF9yb3dfc3R5bGUgKEd0a0NMaXN0ICpjbGlzdCwKCQkJCSAgIGdpbnQgICAgICByb3cp OwoKIAoKCgp2b2lkIGd0a19jbGlzdF9zZXRfc2hpZnQgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICBn aW50ICAgICAgcm93LAoJCQkgIGdpbnQgICAgICBjb2x1bW4sCgkJCSAgZ2ludCAgICAgIHZlcnRp Y2FsLAoJCQkgIGdpbnQgICAgICBob3Jpem9udGFsKTsKCiAKdm9pZCBndGtfY2xpc3Rfc2V0X3Nl bGVjdGFibGUgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAgICAgIGdpbnQgICAgICByb3csCgkJCSAg ICAgICBnYm9vbGVhbiAgc2VsZWN0YWJsZSk7Cmdib29sZWFuIGd0a19jbGlzdF9nZXRfc2VsZWN0 YWJsZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgZ2ludCAgICAgIHJvdyk7CgogCgoKZ2ludCBn dGtfY2xpc3RfcHJlcGVuZCAoR3RrQ0xpc3QgICAgKmNsaXN0LAoJCSAgICAgICAgZ2NoYXIgICAg ICAgKnRleHRbXSk7CmdpbnQgZ3RrX2NsaXN0X2FwcGVuZCAgKEd0a0NMaXN0ICAgICpjbGlzdCwK CQkJZ2NoYXIgICAgICAgKnRleHRbXSk7CgogCgoKZ2ludCBndGtfY2xpc3RfaW5zZXJ0IChHdGtD TGlzdCAgICAqY2xpc3QsCgkJICAgICAgIGdpbnQgICAgICAgICByb3csCgkJICAgICAgIGdjaGFy ICAgICAgICp0ZXh0W10pOwoKIAp2b2lkIGd0a19jbGlzdF9yZW1vdmUgKEd0a0NMaXN0ICpjbGlz dCwKCQkgICAgICAgZ2ludCAgICAgIHJvdyk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9yb3dfZGF0 YSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkgICAgIGdpbnQgICAgICByb3csCgkJCSAgICAgZ3BvaW50 ZXIgIGRhdGEpOwoKIAp2b2lkIGd0a19jbGlzdF9zZXRfcm93X2RhdGFfZnVsbCAoR3RrQ0xpc3Qg ICAgICAgICAqY2xpc3QsCgkJCSAgICAgICAgICBnaW50ICAgICAgICAgICAgICByb3csCgkJCSAg ICAgICAgICBncG9pbnRlciAgICAgICAgICBkYXRhLAoJCQkJICBHdGtEZXN0cm95Tm90aWZ5ICBk ZXN0cm95KTsKCiAKZ3BvaW50ZXIgZ3RrX2NsaXN0X2dldF9yb3dfZGF0YSAoR3RrQ0xpc3QgKmNs aXN0LAoJCQkJIGdpbnQgICAgICByb3cpOwoKIAoKCmdpbnQgZ3RrX2NsaXN0X2ZpbmRfcm93X2Zy b21fZGF0YSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJICAgZ3BvaW50ZXIgIGRhdGEpOwoKIAp2b2lk IGd0a19jbGlzdF9zZWxlY3Rfcm93IChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgIGdpbnQgICAgICBy b3csCgkJCSAgIGdpbnQgICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlzdF91bnNlbGVjdF9y b3cgKEd0a0NMaXN0ICpjbGlzdCwKCQkJICAgICBnaW50ICAgICAgcm93LAoJCQkgICAgIGdpbnQg ICAgICBjb2x1bW4pOwoKIAp2b2lkIGd0a19jbGlzdF91bmRvX3NlbGVjdGlvbiAoR3RrQ0xpc3Qg KmNsaXN0KTsKCiAKCgp2b2lkIGd0a19jbGlzdF9jbGVhciAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAK CgoKZ2ludCBndGtfY2xpc3RfZ2V0X3NlbGVjdGlvbl9pbmZvIChHdGtDTGlzdCAqY2xpc3QsCgkJ CSAgICAgCSAgIGdpbnQgICAgICB4LAoJCQkgICAgIAkgICBnaW50ICAgICAgeSwKCQkJICAgICAJ ICAgZ2ludCAgICAgKnJvdywKCQkJICAgICAJICAgZ2ludCAgICAgKmNvbHVtbik7CgogCnZvaWQg Z3RrX2NsaXN0X3NlbGVjdF9hbGwgKEd0a0NMaXN0ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0 X3Vuc2VsZWN0X2FsbCAoR3RrQ0xpc3QgKmNsaXN0KTsKCiAKdm9pZCBndGtfY2xpc3Rfc3dhcF9y b3dzIChHdGtDTGlzdCAqY2xpc3QsCgkJCSAgZ2ludCAgICAgIHJvdzEsCgkJCSAgZ2ludCAgICAg IHJvdzIpOwoKIAp2b2lkIGd0a19jbGlzdF9yb3dfbW92ZSAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkg Z2ludCAgICAgIHNvdXJjZV9yb3csCgkJCSBnaW50ICAgICAgZGVzdF9yb3cpOwoKIAp2b2lkIGd0 a19jbGlzdF9zZXRfY29tcGFyZV9mdW5jIChHdGtDTGlzdCAgICAgICAgICAgICpjbGlzdCwKCQkJ CSBHdGtDTGlzdENvbXBhcmVGdW5jICBjbXBfZnVuYyk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9z b3J0X2NvbHVtbiAoR3RrQ0xpc3QgKmNsaXN0LAoJCQkJZ2ludCAgICAgIGNvbHVtbik7CgogCnZv aWQgZ3RrX2NsaXN0X3NldF9zb3J0X3R5cGUgKEd0a0NMaXN0ICAgICpjbGlzdCwKCQkJICAgICAg R3RrU29ydFR5cGUgIHNvcnRfdHlwZSk7CgogCnZvaWQgZ3RrX2NsaXN0X3NvcnQgKEd0a0NMaXN0 ICpjbGlzdCk7CgogCnZvaWQgZ3RrX2NsaXN0X3NldF9hdXRvX3NvcnQgKEd0a0NMaXN0ICpjbGlz dCwKCQkJICAgICAgZ2Jvb2xlYW4gIGF1dG9fc29ydCk7CgoKCn0KCgoKIyA0NyAiL29wdC9ndGsv aW5jbHVkZS9ndGstLS9jbGlzdC5oIiAyCgoKbmFtZXNwYWNlIEd0ayB7CmNsYXNzIENMaXN0Owpj bGFzcyBDTGlzdF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsgR3RrOjpDTGlzdCAqd3JhcCAoR3Rr Q0xpc3QgKm8pOyB9CmV4dGVybiAiQyIgdm9pZCBndGttbV9jbGlzdF9jbGlja19jb2x1bW4oR3Rr Q0xpc3QqLGdpbnQgcDApOwpleHRlcm4gIkMiIHZvaWQgZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRq dXN0bWVudHMoR3RrQ0xpc3QqLEd0a0FkanVzdG1lbnQqIHAxLEd0a0FkanVzdG1lbnQqIHAyKTsK bmFtZXNwYWNlIEd0awp7CgpjbGFzcyBDTGlzdDsKbmFtZXNwYWNlIENMaXN0X0hlbHBlcnMgewoK Y2xhc3MgRnJlZXplCiAgewogICAgQ0xpc3QgKmNsaXN0XzsKICAgIHB1YmxpYzoKICAgICAgRnJl ZXplKENMaXN0JiBjbGlzdCk7CiAgICAgIH5GcmVlemUoKTsKICB9OwoKIApjbGFzcyBSb3c7CmNs YXNzIENlbGxJdGVyYXRvcjsKY2xhc3MgQ2VsbAogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZnJp ZW5kIENMaXN0OwogICAgICBmcmllbmQgUm93OwoKICAgICAgR3RrQ0xpc3QgICAgKnBhcmVudF87 CiAgICAgIEd0a0NMaXN0Um93ICpyb3dfXzsKICAgICAgZ2ludCAgICAgICAgIG51bWJlcl9fOwog ICAgICBnaW50ICAgICAgICAgY29sdW1uXzsKCiAgICAgIEd0a0NlbGwqIGdldF9jZWxsKCk7CiAg ICAgIEd0a0NlbGwqIGdldF9jZWxsKCkgY29uc3Q7CiAgICAgIEd0a0NMaXN0Um93KiBnZXRfcm93 KCk7CiAgICAgIEd0a0NMaXN0Um93KiBnZXRfcm93KCkgY29uc3Q7CiAgICAgIGdpbnQgZ2V0X3Jv d19udW0oKTsKICAgICAgZ2ludCBnZXRfcm93X251bSgpIGNvbnN0OwoKICAgICAgQ2VsbChHdGtD TGlzdCAqLEd0a0NMaXN0Um93ICosZ2ludCk7CiAgICAgIENlbGwoR3RrQ0xpc3QgKixnaW50LGdp bnQpOwogICAgICBDZWxsKCk7CgogICAgICB2b2lkIHJlZHJhdygpOwoKICAgIHB1YmxpYzoKICAg ICAgR3RrQ2VsbFR5cGUgZ2V0X3R5cGUoKSBjb25zdDsKICAgICAgR3RrOjpTdHlsZSogZ2V0X3N0 eWxlKCkgY29uc3Q7CiAgICAgIG5zdHJpbmcgZ2V0X3RleHQoKSBjb25zdDsKICAgICAgZ3VpbnQ4 IGdldF9zcGFjaW5nKCkgY29uc3Q7CiAgICAgIEdka19QaXhtYXAgZ2V0X3BpeG1hcCgpIGNvbnN0 OwogICAgICBHZGtfQml0bWFwIGdldF9tYXNrKCkgY29uc3Q7CgogICAgICAgCiAgICAgIHZvaWQg Y2xlYXIoKTsKCiAgICAgICAKICAgICAgdm9pZCBzZXRfc3R5bGUoR3RrOjpTdHlsZSYpOwoKICAg ICAgIAogICAgICB2b2lkIHNldF9zcGFjaW5nKGd1aW50OCk7CgogICAgICAgCiAgICAgIHZvaWQg c2V0X3RleHQobnN0cmluZyk7CgogICAgICAgCiAgICAgIHZvaWQgc2V0X3BpeG1hcChjb25zdCBH ZGtfUGl4bWFwJiBwaXhtYXAsY29uc3QgR2RrX0JpdG1hcCYgbWFzaz0wKTsKCiAgICAgIHZvaWQg c2V0X3NoaWZ0KGdpbnQgdmVydGljYWwsZ2ludCBob3Jpem9udGFsKTsKCiAgICAgIHZvaWQgc2Vs ZWN0KCk7CiAgICAgIHZvaWQgdW5zZWxlY3QoKTsKICAgICAgdm9pZCBtb3ZldG8oZ2Zsb2F0IHJv d19hbGlnbj0wLjUsZ2Zsb2F0IGNvbF9hbGlnbj0wLjUpOwoKICB9OwoKY2xhc3MgQ2VsbEl0ZXJh dG9yOiBwcml2YXRlIENlbGwKICB7CiAgICBwcml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgUm93 OwogICAgICBDZWxsSXRlcmF0b3IoR3RrQ0xpc3QqIHBhcmVudCwgR3RrQ0xpc3RSb3cqIHJvdywg Z2ludCBjb2x1bW4pCiAgICAgICAgOiBDZWxsKHBhcmVudCxyb3csY29sdW1uKQogICAgICAgIHt9 CgogICAgcHVibGljOgogICAgICBDZWxsSXRlcmF0b3IoKQogICAgICAgIDogQ2VsbCgpCiAgICAg ICAge30KCiAgICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBDZWxsICB2YWx1ZV90eXBl OwogICAgICB0eXBlZGVmIENlbGwqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgQ2VsbCYgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIENlbGxJdGVyYXRvciBTZWxmOwoKICAgICAgU2VsZiYgIG9wZXJh dG9yKysoKTsKICAgICAgU2VsZiYgIG9wZXJhdG9yLS0oKTsKICAgICAgU2VsZiAgIG9wZXJhdG9y KysoaW50KSB7U2VsZiB0PSp0aGlzOyBTZWxmOjpvcGVyYXRvcisrKCk7IHJldHVybiB0O30KICAg ICAgU2VsZiAgIG9wZXJhdG9yLS0oaW50KSB7U2VsZiB0PSp0aGlzOyBTZWxmOjpvcGVyYXRvci0t KCk7IHJldHVybiB0O30KCiAgICAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSAgY29uc3Q7CiAgICAg IHBvaW50ZXIgb3BlcmF0b3IgLT4gKCkgY29uc3Q7CgogICAgICBib29sIG9wZXJhdG9yID09KGNv bnN0IFNlbGYmIGNlbGwpIGNvbnN0IHtyZXR1cm4gY29sdW1uXz09Y2VsbC5jb2x1bW5fO30KICAg ICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBTZWxmJiBjZWxsKSBjb25zdCB7cmV0dXJuIGNvbHVt bl8hPWNlbGwuY29sdW1uXzt9CiAgfTsKCiAKCiAKY2xhc3MgQ29sdW1uVmVjdG9yOwpjbGFzcyBD b2x1bW5JdGVyYXRvcjsKY2xhc3MgQ29sdW1uCiAgewogICAgcHJvdGVjdGVkOgogICAgICBmcmll bmQgY2xhc3MgQ29sdW1uVmVjdG9yOwogICAgICBHdGtDTGlzdCogcGFyZW50XzsKICAgICAgZ2lu dCBjb2x1bW5fOwoKICAgICAgQ29sdW1uKEd0a0NMaXN0KiBwYXJlbnQsZ2ludCBudW1iZXIpOwog ICAgICBDb2x1bW4oKTsKCiAgICBwdWJsaWM6CgogICAgICB2b2lkIHNldF9hY3RpdmUoKTsKICAg ICAgdm9pZCBzZXRfcGFzc2l2ZSgpOwoKICAgICAgdm9pZCBzZXRfdGl0bGUoY29uc3Qgc3RyaW5n JiB0aXRsZSk7CiAgICAgIHN0cmluZyBnZXRfdGl0bGUoKTsKCiAgICAgIHZvaWQgc2V0X3dpZGdl dChHdGs6OldpZGdldCogd2lkZ2V0PTApOwogICAgICB2b2lkIHNldF93aWRnZXQoR3RrOjpXaWRn ZXQmIHdpZGdldCk7CiAgICAgIEd0azo6V2lkZ2V0KiBnZXRfd2lkZ2V0KCk7CiAgICAgIHZvaWQg c2V0X2p1c3RpZmljYXRpb24oR3RrSnVzdGlmaWNhdGlvbik7CiAgICAgIHZvaWQgc2V0X3Zpc2li bGl0eShib29sKTsKICAgICAgdm9pZCBzZXRfcmVzaXphYmxlKGJvb2wpOwogICAgICB2b2lkIHNl dF9hdXRvX3Jlc2l6ZShib29sKTsKICAgICAgZ2ludCBnZXRfb3B0aW1hbF93aWR0aCgpOwoKICAg ICAgdm9pZCBzZXRfd2lkdGgoZ2ludCk7CiAgICAgIHZvaWQgc2V0X21pbl93aWR0aChnaW50KTsK ICAgICAgdm9pZCBzZXRfbWF4X3dpZHRoKGdpbnQpOwogICAgICB2b2lkIG1vdmV0byhnZmxvYXQg cm93X2FsaWduPTAuNSxnZmxvYXQgY29sX2FsaWduPTAuNSk7CiAgfTsKCmNsYXNzIFNlbGVjdGlv bkxpc3Q7CmNsYXNzIFJvd0xpc3Q7CmNsYXNzIFJvd0l0ZXJhdG9yOwpjbGFzcyBSb3cKICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgQ2VsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAg ICAgICAgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAg ICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwoKICAgICAgdHlwZWRlZiBDZWxsSXRlcmF0b3IgICAg ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0 ZXJhdG9yPGl0ZXJhdG9yPiAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0 X1JldmVyc2VJdGVyYXRvcjxpdGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBl ZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3R5cGU7CgogICAgcHJvdGVjdGVkOgogICAgICBmcmllbmQgY2xh c3MgU2VsZWN0aW9uTGlzdDsKICAgICAgZnJpZW5kIGNsYXNzIFJvd0xpc3Q7CgogICAgICBHdGtD TGlzdCogICAgcGFyZW50XzsKICAgICAgR3RrQ0xpc3RSb3cqIHJvd19fOyAgICAgCiAgICAgIGdp bnQgICAgICAgICBudW1iZXJfXzsgIAoKICAgICAgR3RrQ0xpc3RSb3cqIGdldF9yb3coKTsKICAg ICAgR3RrQ0xpc3RSb3cqIGdldF9yb3coKSBjb25zdDsKCiAgICAgIFJvdyhHdGtDTGlzdCosR3Rr Q0xpc3RSb3cqKTsKICAgICAgUm93KEd0a0NMaXN0KixnaW50KTsKICAgICAgUm93KCk7CgogICAg ICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHBhcmVu dF8sZ2V0X3JvdygpLDApOyB9CiAgICAgIGl0ZXJhdG9yIGVuZF8oKSBjb25zdAogICAgICAgIHsg cmV0dXJuIGl0ZXJhdG9yKHBhcmVudF8sZ2V0X3JvdygpLHBhcmVudF8tPmNvbHVtbnMpOyB9Cgog ICAgICBSb3cmIG9wZXJhdG9yID0gKGNvbnN0IFJvdyYgcikKICAgICAgICB7IHBhcmVudF89ci5w YXJlbnRfOyByb3dfXz1yLnJvd19fOyBudW1iZXJfXz1yLm51bWJlcl9fOyByZXR1cm4gKnRoaXM7 IH0KCiAgICBwdWJsaWM6CiAgICAgIFJvdyhjb25zdCBSb3cmIHIpCiAgICAgICAgOiBwYXJlbnRf KHIucGFyZW50XyksIHJvd19fKHIucm93X18pLCBudW1iZXJfXyhyLm51bWJlcl9fKQogICAgICAg IHt9CgogICAgICB+Um93KCkge30KCiAgICAgIGdpbnQgZ2V0X3Jvd19udW0oKTsKICAgICAgZ2lu dCBnZXRfcm93X251bSgpIGNvbnN0OwoKICAgICAgR3RrVmlzaWJpbGl0eSBpc192aXNpYmxlKCk7 CgogICAgICBHdGs6OlN0eWxlKiBnZXRfc3R5bGUoKSBjb25zdDsKICAgICAgZ3BvaW50ZXIgZ2V0 X2RhdGEoKSBjb25zdDsKICAgICAgYm9vbCBnZXRfc2VsZWN0YWJsZSgpIGNvbnN0OwogICAgICB2 b2lkIG1vdmV0byhnZmxvYXQgcm93X2FsaWduPTAuNSxnZmxvYXQgY29sX2FsaWduPTAuNSk7Cgog ICAgICB2b2lkIHNldF9zdHlsZShHdGs6OlN0eWxlJik7CiAgICAgIHZvaWQgc2V0X2RhdGEoZ3Bv aW50ZXIpOwogICAgICB2b2lkIHNldF9kYXRhKGdwb2ludGVyLEd0a0Rlc3Ryb3lOb3RpZnkpOwog ICAgICB2b2lkIHNldF9zZWxlY3RhYmxlKGJvb2wgc2VsZWN0YWJsZSk7CiAgICAgIHZvaWQgc2V0 X2ZvcmVncm91bmQoY29uc3QgR2RrX0NvbG9yJiBjb2xvcik7CiAgICAgIHZvaWQgc2V0X2JhY2tn cm91bmQoY29uc3QgR2RrX0NvbG9yJiBjb2xvcik7CgogICAgICB2b2lkIGZvY3VzKCk7CiAgICAg IHZvaWQgc2VsZWN0KGdpbnQgY29sdW1uPS0xKTsKICAgICAgdm9pZCB1bnNlbGVjdChnaW50IGNv bHVtbj0tMSk7CgogICAgICAgCiAgICAgIFJvdyYgb3BlcmF0b3IgKigpICAgICAgICAgICAgICB7 IHJldHVybiAqdGhpczsgfQogICAgICBjb25zdCBSb3cmIG9wZXJhdG9yICooKSBjb25zdCAgeyBy ZXR1cm4gKnRoaXM7IH0KICAgICAgUm93KiBvcGVyYXRvciAtPigpICAgICAgICAgICAgIHsgcmV0 dXJuIHRoaXM7IH0KICAgICAgY29uc3QgUm93KiBvcGVyYXRvciAtPigpIGNvbnN0IHsgcmV0dXJu IHRoaXM7IH0KCgogICAgICAgCgogICAgICBpdGVyYXRvciBiZWdpbigpCiAgICAgICAge3JldHVy biBiZWdpbl8oKTt9CiAgICAgIGl0ZXJhdG9yIGVuZCgpCiAgICAgICAge3JldHVybiBlbmRfKCk7 fQoKICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNv bnN0X2l0ZXJhdG9yKGJlZ2luXygpKTsgfQogICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z dAogICAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGVuZF8oKSk7IH0KCiAgICAgIHJldmVy c2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVu ZF8oKSk7IH0KICAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgICAgICB7IHJldHVybiBy ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciByYmVnaW4oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io cmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpKTsgfQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y IHJlbmQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IocmV2 ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSkpOyB9CgogICAgICBzaXplX3R5cGUgc2l6ZSh2b2lkKSBj b25zdAogICAgICAgIHsgcmV0dXJuIHNpemVfdHlwZShwYXJlbnRfLT5jb2x1bW5zKTsgfQogICAg ICBzaXplX3R5cGUgbWF4X3NpemUodm9pZCkKICAgICAgICB7IHJldHVybiBzaXplX3R5cGUocGFy ZW50Xy0+Y29sdW1ucyk7IH0KICAgICAgYm9vbCBlbXB0eSh2b2lkKQogICAgICAgIHsgcmV0dXJu IGZhbHNlOyB9CgogICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGwpIGNvbnN0 CiAgICAgICAgeyByZXR1cm4gQ2VsbChwYXJlbnRfLCBnZXRfcm93KCksIGwpOyB9CgogIH07CgoK IApjbGFzcyBDb2x1bW5JdGVyYXRvcjogcHJpdmF0ZSBDb2x1bW4KICB7CiAgICBwcml2YXRlOgog ICAgICBmcmllbmQgY2xhc3MgQ29sdW1uVmVjdG9yOwogICAgICBDb2x1bW5JdGVyYXRvcihHdGtD TGlzdCogcGFyZW50LGdpbnQgbnVtYmVyKQogICAgICAgIDogQ29sdW1uKHBhcmVudCxudW1iZXIp CiAgICAgICAge30KCiAgICBwdWJsaWM6CiAgICAgIENvbHVtbkl0ZXJhdG9yKCkKICAgICAgICA6 IENvbHVtbigpCiAgICAgICAge30KCiAgICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBD b2x1bW4gIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ29sdW1uKiBwb2ludGVyOwogICAgICB0 eXBlZGVmIENvbHVtbiYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIENvbHVtbkl0ZXJhdG9yIFNl bGY7CgogICAgICBTZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgp OwogICAgICBTZWxmICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJh dG9yKysoKTsgcmV0dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9 KnRoaXM7IFNlbGY6Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgcmVmZXJlbmNlIG9w ZXJhdG9yKigpIGNvbnN0OwogICAgICBwb2ludGVyIG9wZXJhdG9yIC0+ICgpIGNvbnN0OwoKICAg ICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBTZWxmJiBjb2wpIGNvbnN0IHtyZXR1cm4gY29sdW1u Xz09Y29sLmNvbHVtbl87fQogICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFNlbGYmIGNvbCkg Y29uc3Qge3JldHVybiBjb2x1bW5fIT1jb2wuY29sdW1uXzt9CgogIH07CgpjbGFzcyBSb3dJdGVy YXRvcjogcHJvdGVjdGVkIFJvdwogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZnJpZW5kIGNsYXNz IFJvd0xpc3Q7CiAgICAgIEdMaXN0KiBub2RlXzsKCiAgICAgIFJvd0l0ZXJhdG9yKEd0a0NMaXN0 KixHTGlzdCopOwogICAgICBSb3dJdGVyYXRvcihHdGtDTGlzdCosZ2ludCk7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgUm93ICB2YWx1ZV90eXBlOwogICAg ICB0eXBlZGVmIFJvdyogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBSb3cmIHJlZmVyZW5jZTsKCiAg ICAgIHR5cGVkZWYgUm93SXRlcmF0b3IgU2VsZjsKCiAgICAgIFJvd0l0ZXJhdG9yKCk7CiAgICAg IFJvd0l0ZXJhdG9yKGNvbnN0IFNlbGYmIHMpCiAgICAgICAgOiBSb3cocyksIG5vZGVfKHMubm9k ZV8pIHt9CgogICAgICBTZWxmJiBvcGVyYXRvcj0gKGNvbnN0IFNlbGYmIHMpCiAgICAgICAgeyBS b3c6Om9wZXJhdG9yPShzKTsgbm9kZV89cy5ub2RlXzsgcmV0dXJuICp0aGlzOyB9CgogICAgICBT ZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgpOwogICAgICBTZWxm ICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJhdG9yKysoKTsgcmV0 dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6 Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yKigpICBj b25zdDsKICAgICAgcG9pbnRlciBvcGVyYXRvciAtPiAoKSBjb25zdDsKCiAgICAgIGJvb2wgb3Bl cmF0b3IgPT0oY29uc3QgU2VsZiYgcm93KSBjb25zdCB7cmV0dXJuIG5vZGVfPT1yb3cubm9kZV87 fQogICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFNlbGYmIHJvdykgY29uc3Qge3JldHVybiBu b2RlXyE9cm93Lm5vZGVfO30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIEdMaXN0KiBnZXRfbm9kZSgp IGNvbnN0OwogICAgICBHdGtDTGlzdFJvdyogZ2V0X3JvdygpIGNvbnN0OwogICAgICBnaW50IGdl dF9yb3dfbnVtKCkgY29uc3Q7CiAgfTsKCmNsYXNzIFNlbGVjdGlvbkl0ZXJhdG9yOiBwcm90ZWN0 ZWQgUm93CiAgewogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdGlvbkxpc3Q7 CiAgICAgIEdMaXN0KiBub2RlXzsKCiAgICAgIFNlbGVjdGlvbkl0ZXJhdG9yKEd0a0NMaXN0KiBw YXJlbnQsR0xpc3QqIG5vZGUpCiAgICAgICAgOiBSb3cocGFyZW50LDApLCBub2RlXyhub2RlKQog ICAgICAgIHt9CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYg Um93ICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIFJvdyogcG9pbnRlcjsKICAgICAgdHlwZWRl ZiBSb3cmIHJlZmVyZW5jZTsKCiAgICAgIHR5cGVkZWYgU2VsZWN0aW9uSXRlcmF0b3IgU2VsZjsK CiAgICAgIFNlbGVjdGlvbkl0ZXJhdG9yKCkKICAgICAgICB7fQoKICAgICAgU2VsZWN0aW9uSXRl cmF0b3IoY29uc3QgU2VsZiYgcykKICAgICAgICA6IFJvdyhzKSwgbm9kZV8ocy5ub2RlXykge30K CiAgICAgIFNlbGYmIG9wZXJhdG9yPSAoY29uc3QgU2VsZiYgcykKICAgICAgICB7IFJvdzo6b3Bl cmF0b3I9KHMpOyBub2RlXz1zLm5vZGVfOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJlZmVyZW5j ZSBvcGVyYXRvciooKSAgY29uc3Q7CiAgICAgIHBvaW50ZXIgb3BlcmF0b3IgLT4gKCkgY29uc3Q7 CgogICAgICBTZWxmJiAgb3BlcmF0b3IrKygpOwogICAgICBTZWxmJiAgb3BlcmF0b3ItLSgpOwog ICAgICBTZWxmICAgb3BlcmF0b3IrKyhpbnQpIHtTZWxmIHQ9KnRoaXM7IFNlbGY6Om9wZXJhdG9y KysoKTsgcmV0dXJuIHQ7fQogICAgICBTZWxmICAgb3BlcmF0b3ItLShpbnQpIHtTZWxmIHQ9KnRo aXM7IFNlbGY6Om9wZXJhdG9yLS0oKTsgcmV0dXJuIHQ7fQoKICAgICAgYm9vbCBvcGVyYXRvciA9 PShjb25zdCBTZWxmJiByb3cpIGNvbnN0IHtyZXR1cm4gbm9kZV89PXJvdy5ub2RlXzt9CiAgICAg IGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgU2VsZiYgcm93KSBjb25zdCB7cmV0dXJuIG5vZGVfIT1y b3cubm9kZV87fQogIH07CgogCgpjbGFzcyBDb2x1bW5WZWN0b3IKICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgQ29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl OwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgY29u c3RfcmVmZXJlbmNlOwoKICAgICAgdHlwZWRlZiBDb2x1bW5JdGVyYXRvciAgICAgICAgICAgICAg ICAgICAgIGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPGl0ZXJh dG9yPiAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVy YXRvcjxpdGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9D b25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJl bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIENMaXN0OwogICAgICBHdGs6 OkNMaXN0ICpwYXJlbnRfOyAgCgogICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAg aXRlcmF0b3IgZW5kXygpIGNvbnN0OwoKICAgIHB1YmxpYzoKCiAgICAgIGl0ZXJhdG9yIGJlZ2lu KCkKICAgICAgICB7cmV0dXJuIGJlZ2luXygpO30KICAgICAgaXRlcmF0b3IgZW5kKCkKICAgICAg ICB7cmV0dXJuIGVuZF8oKTt9CgogICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg ICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoYmVnaW5fKCkpOyB9CiAgICAgIGNvbnN0X2l0 ZXJhdG9yIGVuZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZW5kXygp KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgICAgIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IoZW5kXygpKTsgfQogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQog ICAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW5fKCkpOyB9CgogICAgICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGVuZF8oKSkpOyB9CiAgICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKSk7IH0KCiAgICAgIHZhbHVl X3R5cGUgZnJvbnQoKSBjb25zdCAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgICAgdmFsdWVf dHlwZSBiYWNrKCkgY29uc3QgICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICB2YWx1 ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGwpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlIHNp emUodm9pZCkgY29uc3Q7CiAgICAgIHNpemVfdHlwZSBtYXhfc2l6ZSh2b2lkKSBjb25zdDsKICAg ICAgYm9vbCBlbXB0eSh2b2lkKQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICAgCiAg ICAgICAKCiAgfTsKCmNsYXNzIFNlbGVjdGlvbkxpc3QKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgUm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAg ICB0eXBlZGVmIHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwog ICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUgJiAgICAgICAgICAgICAgICAgY29uc3RfcmVm ZXJlbmNlOwoKICAgICAgdHlwZWRlZiBTZWxlY3Rpb25JdGVyYXRvciAgICAgICAgICAgICAgICAg IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0ZXJhdG9yPGl0ZXJhdG9yPiAg ICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X1JldmVyc2VJdGVyYXRvcjxp dGVyYXRvcj4gICByZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIEdfTGlzdF9Db25zdEl0 ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICAg IHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5 cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIENMaXN0OwogICAgICBHdGs6OkNMaXN0 ICpwYXJlbnRfOyAgCgogICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAgaXRlcmF0 b3IgZW5kXygpIGNvbnN0OwoKICAgICAgR0xpc3QqJiBnbGlzdCgpIGNvbnN0OwoKICAgIHB1Ymxp YzoKICAgICAgaXRlcmF0b3IgYmVnaW4oKQogICAgICAgIHtyZXR1cm4gYmVnaW5fKCk7fQogICAg ICBpdGVyYXRvciBlbmQoKQogICAgICAgIHtyZXR1cm4gZW5kXygpO30KCiAgICAgIGNvbnN0X2l0 ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdp bl8oKSk7IH0KICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVy biBjb25zdF9pdGVyYXRvcihlbmRfKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdp bigpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpOyB9CiAgICAgIHJl dmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbl8oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QK ICAgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3Io ZW5kXygpKSk7IH0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAg ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoYmVn aW5fKCkpKTsgfQoKICAgICAgdmFsdWVfdHlwZSBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiAq YmVnaW4oKTsgfQogICAgICB2YWx1ZV90eXBlIGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuICoo LS1lbmQoKSk7IH0KCiAgICAgICAKICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdHlw ZSBsKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZSBzaXplKHZvaWQpIGNvbnN0OwogICAgICBzaXpl X3R5cGUgbWF4X3NpemUodm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAg ICBib29sIGVtcHR5KHZvaWQpIHsgcmV0dXJuIGdsaXN0KCkgPT0gMDsgfQoKICAgICAgdm9pZCBh bGwoKTsKICAgICAgdm9pZCBjbGVhcigpOwogICAgICB2b2lkIHVuZG8oKTsKCiAgICAgICAKICB9 OwoKY2xhc3MgUm93TGlzdAogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBSb3cgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVf dHlwZSAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29u c3QgdmFsdWVfdHlwZSAmICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CgogICAgICB0 eXBlZGVmIFJvd0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CiAgICAg IHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8aXRlcmF0b3I+ICAgICBjb25zdF9pdGVyYXRv cjsKICAgICAgdHlwZWRlZiBHX0xpc3RfUmV2ZXJzZUl0ZXJhdG9yPGl0ZXJhdG9yPiAgIHJldmVy c2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8cmV2ZXJzZV9p dGVyYXRvcj4gICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBzaXplX3Qg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl ZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKCiAgICBwcml2 YXRlOgogICAgICBmcmllbmQgQ0xpc3Q7CiAgICAgIEd0azo6Q0xpc3QgKiBwYXJlbnRfOyAgCgog ICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAgICAgaXRlcmF0b3IgZW5kXygpIGNvbnN0 OwoKICAgICAgR0xpc3QqJiBnbGlzdCgpIGNvbnN0OwoKICAgIHB1YmxpYzoKICAgICAgaXRlcmF0 b3IgYmVnaW4oKQogICAgICAgIHtyZXR1cm4gYmVnaW5fKCk7fQogICAgICBpdGVyYXRvciBlbmQo KQogICAgICAgIHtyZXR1cm4gZW5kXygpO30KCiAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg Y29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdpbl8oKSk7IH0KICAgICAg Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRv cihlbmRfKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICAgICAgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpOyB9CiAgICAgIHJldmVyc2VfaXRlcmF0b3Ig cmVuZCgpCiAgICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSk7IH0KCiAg ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgICAgICB7IHJldHVy biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoZW5kXygpKSk7IH0KICAg ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgICAgICB7IHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHJldmVyc2VfaXRlcmF0b3IoYmVnaW5fKCkpKTsgfQoKICAg ICAgdmFsdWVfdHlwZSBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQogICAg ICB2YWx1ZV90eXBlIGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAg ICAgICAKICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdHlwZSBsKSBjb25zdDsKCiAg ICAgIHNpemVfdHlwZSBzaXplKHZvaWQpIGNvbnN0OwogICAgICBzaXplX3R5cGUgbWF4X3NpemUo dm9pZCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgICBib29sIGVtcHR5KHZv aWQpIHsgcmV0dXJuIGdsaXN0KCkgPT0gMDsgfQoKICAgICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh dG9yIHBvc2l0aW9uLCBjb25zdCBHdGs6OlNBcnJheSYgZSk7CiAgICAgIGl0ZXJhdG9yIGluc2Vy dChjb25zdF9yZWZlcmVuY2UgcG9zaXRpb24sIGNvbnN0IEd0azo6U0FycmF5JiBlKTsKCiAgICAg IHZvaWQgcHVzaF9mcm9udChjb25zdCBHdGs6OlNBcnJheSYgZSk7CiAgICAgIHZvaWQgcHVzaF9i YWNrKGNvbnN0IEd0azo6U0FycmF5JiBlKTsKICAgICAgdm9pZCBwb3BfZnJvbnQoKSAgICAgICAg ICAgICAgICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KICAgICAgdm9pZCBwb3BfYmFjaygpICAgICAg ICAgICAgICAgICAgIHsgZXJhc2UoLS1lbmQoKSk7IH0KCiAgICAgIHZvaWQgY2xlYXIoKTsKCiAg ICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yKTsKICAgICAgdm9pZCBlcmFzZShpdGVyYXRvciBz dGFydCwgaXRlcmF0b3Igc3RvcCk7CiAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0X3JlZmVyZW5jZSk7 CgogICAgICB2b2lkIHN3YXAoaXRlcmF0b3IsIGl0ZXJhdG9yKTsKICAgICAgdm9pZCBtb3ZlKGl0 ZXJhdG9yLCBpdGVyYXRvcik7CiAgICAgIHZvaWQgc3dhcChjb25zdF9yZWZlcmVuY2UsIGNvbnN0 X3JlZmVyZW5jZSk7CiAgICAgIHZvaWQgbW92ZShjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3JlZmVy ZW5jZSk7CgogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICBpdGVyYXRvciBmaW5kX2RhdGEo Z3BvaW50ZXIpOwogIH07Cn0KCgpjbGFzcyBBZGp1c3RtZW50OwpjbGFzcyBTdHlsZTsKCiAKY2xh c3MgQ0xpc3QgOiBwdWJsaWMgQ29udGFpbmVyCnsKCnB1YmxpYzoKICB0eXBlZGVmIENMaXN0ICAg ICAgICAgIENwcE9iamVjdFR5cGU7CiAgdHlwZWRlZiBDTGlzdF9DbGFzcyAgICBDcHBDbGFzc1R5 cGU7CiAgdHlwZWRlZiBHdGtDTGlzdCAgICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRl ZiBHdGtDTGlzdENsYXNzICAgICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNs YXNzIENMaXN0X0NsYXNzOwogIHN0YXRpYyBDcHBDbGFzc1R5cGUgY2xpc3RfY2xhc3M7CgogIENM aXN0KGNvbnN0IENMaXN0Jik7CiAgQ0xpc3QmIG9wZXJhdG9yPShjb25zdCBDTGlzdCYpOyAgCgpw cm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRpYWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBDTGlzdChH dGtDTGlzdCAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7 CiAgR3RrQ0xpc3QqIGd0a29iaigpICAgICAgICAgICAgIHsgcmV0dXJuIChHdGtDTGlzdCopKGd0 a29iamVjdCk7IH0KICBjb25zdCBHdGtDTGlzdCogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0 a0NMaXN0KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRpYyBib29sIGlzQShPYmplY3QgKmNoZWNrY2Fz dCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZp cnR1YWwgfkNMaXN0KCk7Cgpwcml2YXRlOgoKcHVibGljOgogICAKICB0eXBlZGVmIEd0azo6Q0xp c3RfSGVscGVyczo6RnJlZXplIEZyZWV6ZTsKCiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6 OkNlbGwgQ2VsbDsKICB0eXBlZGVmIEd0azo6Q0xpc3RfSGVscGVyczo6Q2VsbEl0ZXJhdG9yIENl bGxJdGVyYXRvcjsKCiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6OkNvbHVtbiBDb2x1bW47 CiAgdHlwZWRlZiBHdGs6OkNMaXN0X0hlbHBlcnM6OkNvbHVtblZlY3RvciBDb2x1bW5WZWN0b3I7 CgogIHR5cGVkZWYgR3RrOjpDTGlzdF9IZWxwZXJzOjpSb3cgUm93OwogIHR5cGVkZWYgR3RrOjpD TGlzdF9IZWxwZXJzOjpSb3dJdGVyYXRvciBSb3dJdGVyYXRvcjsKICB0eXBlZGVmIEd0azo6Q0xp c3RfSGVscGVyczo6Um93TGlzdCBSb3dMaXN0OwoKICB0eXBlZGVmIEd0azo6Q0xpc3RfSGVscGVy czo6U2VsZWN0aW9uSXRlcmF0b3IgIFNlbGVjdGlvbkl0ZXJhdG9yIDsKICB0eXBlZGVmIEd0azo6 Q0xpc3RfSGVscGVyczo6U2VsZWN0aW9uTGlzdCBTZWxlY3Rpb25MaXN0OwoKCiAgQ0xpc3QoaW50 IGNvbHVtbnMsIGNvbnN0IGdjaGFyICogdGl0bGVzW10gPSAwKTsKICBDTGlzdChjb25zdCBTQXJy YXkgJnRpdGxlcyk7CgoKIAoKCiAgIAoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpBZGp1 c3RtZW50KiBhZGp1c3RtZW50PTApOwoKCiAgdm9pZCBzZXRfdmFkanVzdG1lbnQoR3RrOjpBZGp1 c3RtZW50KiBhZGp1c3RtZW50PTApOwoKCiAgdm9pZCBzZXRfaGFkanVzdG1lbnQoR3RrOjpBZGp1 c3RtZW50JiBhZGp1c3RtZW50KTsKCgogIHZvaWQgc2V0X3ZhZGp1c3RtZW50KEd0azo6QWRqdXN0 bWVudCYgYWRqdXN0bWVudCk7CgogICAKICBHdGs6OkFkanVzdG1lbnQqIGdldF9oYWRqdXN0bWVu dCgpIGNvbnN0OwoKICBHdGs6OkFkanVzdG1lbnQqIGdldF92YWRqdXN0bWVudCgpIGNvbnN0OwoK CgogCgogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfc2hhZG93X3R5cGUoR3Rr U2hhZG93VHlwZSB0eXBlKTsKCiAgIAogICAKICAgCiAgIAogICAKCgogIHZvaWQgc2V0X3NlbGVj dGlvbl9tb2RlKEd0a1NlbGVjdGlvbk1vZGUgbW9kZSk7CgoKICBHdGtTZWxlY3Rpb25Nb2RlIGdl dF9zZWxlY3Rpb25fbW9kZSgpIGNvbnN0OwoKICAgCgoKICB2b2lkIHNldF9yZW9yZGVyYWJsZShi b29sIHJlb3JkZXJhYmxlKTsKCgogIHZvaWQgc2V0X3VzZV9kcmFnX2ljb25zKGJvb2wgdXNlX2lj b25zKTsKCgogIHZvaWQgc2V0X2J1dHRvbl9hY3Rpb25zKGd1aW50IGJ1dHRvbixndWludDggYnV0 dG9uX2FjdGlvbnMpOwoKICAgCiAgIAogICAKICAgCgoKICB2b2lkIGZyZWV6ZSgpOwoKICAgCgoK ICB2b2lkIHRoYXcoKTsKCiAgIAoKCiAgdm9pZCBjb2x1bW5fdGl0bGVzX3Nob3coKTsKCiAgIAoK CiAgdm9pZCBjb2x1bW5fdGl0bGVzX2hpZGUoKTsKCiAgIAogICAKCgogIHZvaWQgY29sdW1uX3Rp dGxlc19hY3RpdmUoKTsKCiAgIAogICAKICAgCgoKICB2b2lkIGNvbHVtbl90aXRsZXNfcGFzc2l2 ZSgpOwoKCgogIGdpbnQgY29sdW1uc19hdXRvc2l6ZSgpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRf cm93X2hlaWdodChndWludCBoZWlnaHQpOwoKCiAgZ2ludCBnZXRfcm93X2hlaWdodCgpIGNvbnN0 OwoKCgogCgogICAKCgogIHZvaWQgc2V0X2NvbXBhcmVfZnVuYyhHdGtDTGlzdENvbXBhcmVGdW5j IGNtcF9mdW5jKTsKCiAgIAoKCiAgdm9pZCBzZXRfc29ydF9jb2x1bW4oZ2ludCBjb2x1bW4pOwoK ICAgCgoKICB2b2lkIHNldF9zb3J0X3R5cGUoR3RrU29ydFR5cGUgc29ydF90eXBlKTsKCiAgIAoK CiAgdm9pZCBzb3J0KCk7CgogICAKCgogIHZvaWQgc2V0X2F1dG9fc29ydChib29sIGF1dG9fc29y dCk7CgoKIAogIFJvd0xpc3QmIHJvd3MoKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRf Y2FzdDxSb3dMaXN0Jj4oY2xpc3Rfc2VsZik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9 CiAgY29uc3QgUm93TGlzdCYgcm93cygpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiByZWludGVy cHJldF9jYXN0PGNvbnN0IFJvd0xpc3QmPihjbGlzdF9zZWxmKTsKICAgICAgIAogICAgICAgCiAg ICAgICAKICAgIH0KICBSb3cgcm93KGludCByKSB7IHJldHVybiByb3dzKClbcl07IH0KICBjb25z dCBSb3cgcm93KGludCByKSBjb25zdCB7IHJldHVybiByb3dzKClbcl07IH0KCiAgU2VsZWN0aW9u TGlzdCYgc2VsZWN0aW9uKCkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vs ZWN0aW9uTGlzdCY+KGNsaXN0X3NlbGYpOwogICAgICAgCiAgICAgICAKICAgICAgIAogICAgfQog IGNvbnN0IFNlbGVjdGlvbkxpc3QmIHNlbGVjdGlvbigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVy biByZWludGVycHJldF9jYXN0PGNvbnN0IFNlbGVjdGlvbkxpc3QmPihjbGlzdF9zZWxmKTsKICAg ICAgIAogICAgICAgCiAgICAgICAKICAgIH0KCiAgQ29sdW1uVmVjdG9yJiBjb2x1bW5zKCkKICAg IHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sdW1uVmVjdG9yJj4oY2xpc3Rfc2Vs Zik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9CiAgY29uc3QgQ29sdW1uVmVjdG9yJiBj b2x1bW5zKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg Q29sdW1uVmVjdG9yJj4oY2xpc3Rfc2VsZik7CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICB9 CiAgQ29sdW1uIGNvbHVtbihpbnQgYykgeyByZXR1cm4gY29sdW1ucygpW2NdOyB9CiAgY29uc3Qg Q29sdW1uIGNvbHVtbihpbnQgYykgY29uc3QgeyByZXR1cm4gY29sdW1ucygpW2NdOyB9CgogIENl bGwgY2VsbChnaW50IHJvdywgZ2ludCBjb2x1bW4pOwogIGNvbnN0IENlbGwgY2VsbChnaW50IHJv dywgZ2ludCBjb2x1bW4pIGNvbnN0OwoKIAoKICAgCiAgIAoKICAKICAKCiAgIAogICAKCgoKICBn aW50IGdldF9zZWxlY3Rpb25faW5mbyhnaW50IHgsZ2ludCB5LGdpbnQqIHJvdyxnaW50KiBjb2x1 bW4pIGNvbnN0OwoKICAgCiAgIAogICAKCgoKICAgCgoKCiAgIAogICAKCgoKIAoKICAgCiAgIAog ICAKCgogIHZvaWQgY29sdW1uX3RpdGxlX2FjdGl2ZShnaW50IGNvbHVtbik7CgogICAKICAgCgoK ICB2b2lkIGNvbHVtbl90aXRsZV9wYXNzaXZlKGdpbnQgY29sdW1uKTsKCiAgIAogICAKCgogIHZv aWQgc2V0X2NvbHVtbl90aXRsZShnaW50IGNvbHVtbixjb25zdCBzdHJpbmcmIHRpdGxlKTsKCiAg IAogICAKCgogIHN0cmluZyBnZXRfY29sdW1uX3RpdGxlKGdpbnQgY29sdW1uKSBjb25zdDsKCiAg IAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl93aWRnZXQoZ2ludCBjb2x1bW4sR3RrOjpXaWRnZXQm IHdpZGdldCk7CgogICAKICAgCgoKICBHdGs6OldpZGdldCogZ2V0X2NvbHVtbl93aWRnZXQoZ2lu dCBjb2x1bW4pIGNvbnN0OwoKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKCiAgdm9pZCBz ZXRfY29sdW1uX2p1c3RpZmljYXRpb24oZ2ludCBjb2x1bW4sR3RrSnVzdGlmaWNhdGlvbiBqdXN0 aWZpY2F0aW9uKTsKCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl92aXNpYmlsaXR5KGdpbnQg Y29sdW1uLGJvb2wgdmlzaWJsZSk7CgogICAKICAgCgoKICB2b2lkIHNldF9jb2x1bW5fcmVzaXpl YWJsZShnaW50IGNvbHVtbixib29sIHJlc2l6ZWFibGUpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRf Y29sdW1uX2F1dG9fcmVzaXplKGdpbnQgY29sdW1uLGJvb2wgYXV0b19yZXNpemUpOwoKICAgCiAg IAoKCiAgZ2ludCBvcHRpbWFsX2NvbHVtbl93aWR0aChnaW50IGNvbHVtbikgY29uc3Q7CgogICAK ICAgCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl93aWR0aChnaW50IGNvbHVtbixnaW50IHdp ZHRoKTsKCiAgIAogICAKICAgCiAgZ2ludCBnZXRfY29sdW1uX3dpZHRoKGdpbnQgY29sdW1uKSBj b25zdDsKCiAgIAogICAKCgogIHZvaWQgc2V0X2NvbHVtbl9taW5fd2lkdGgoZ2ludCBjb2x1bW4s Z2ludCBtaW5fd2lkdGgpOwoKICAgCiAgIAoKCiAgdm9pZCBzZXRfY29sdW1uX21heF93aWR0aChn aW50IGNvbHVtbixnaW50IG1heF93aWR0aCk7CgogICAKCgogCiAgIAogICAKICAgCgoKICBnaW50 IHByZXBlbmRfcm93KGNvbnN0IFNBcnJheSYgdGV4dCk7CgoKICBnaW50IHByZXBlbmQoY29uc3Qg U0FycmF5JiB0ZXh0KTsKCiAgIAogICAKICAgCgoKICBnaW50IGFwcGVuZF9yb3coY29uc3QgU0Fy cmF5JiB0ZXh0KTsKCgogIGdpbnQgYXBwZW5kKGNvbnN0IFNBcnJheSYgdGV4dCk7CgogICAKICAg CiAgIAoKCiAgZ2ludCBpbnNlcnRfcm93KGdpbnQgcm93LGNvbnN0IFNBcnJheSYgdGV4dCk7CgoK ICBnaW50IGluc2VydChnaW50IHJvdyxjb25zdCBTQXJyYXkmIHRleHQpOwoKICAgCiAgIAogICAK CgogIHZvaWQgY2xlYXIoKTsKCiAgIAogICAKICBnaW50IGdldF9yb3dzKCkgY29uc3Q7CgogICAK ICAgCgoKICB2b2lkIHN3YXBfcm93cyhnaW50IHJvdzEsZ2ludCByb3cyKTsKCiAgIAogICAKCgog ICAKICAgCiAgIAoKCiAgZ2ludCBmaW5kX3Jvd19mcm9tX2RhdGEoZ3BvaW50ZXIgZGF0YSkgY29u c3Q7CgoKCiAKICAgCiAgIAoKCiAgR3RrVmlzaWJpbGl0eSByb3dfaXNfdmlzaWJsZShnaW50IHJv dykgY29uc3Q7CgogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfZm9yZWdyb3VuZChnaW50IHJvdyxj b25zdCBHZGtfQ29sb3ImIGNvbG9yKTsKCiAgIAogICAKICAgCgoKICB2b2lkIHNldF9iYWNrZ3Jv dW5kKGdpbnQgcm93LGNvbnN0IEdka19Db2xvciYgY29sb3IpOwoKICAgCgoKICB2b2lkIHNldF9y b3dfc3R5bGUoZ2ludCByb3csR3RrOjpTdHlsZSYgc3R5bGUpOwoKICAgCgoKICBHdGs6OlN0eWxl KiBnZXRfcm93X3N0eWxlKGdpbnQgcm93KSBjb25zdDsKCiAgIAoKCiAgYm9vbCBnZXRfc2VsZWN0 YWJsZShnaW50IHJvdykgY29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF9zZWxlY3RhYmxlKGdp bnQgcm93LGJvb2wgc2VsZWN0YWJsZSk7CgogICAKICAgCiAgIAogICAKCgogIHZvaWQgcmVtb3Zl X3JvdyhnaW50IHJvdyk7CgogICAKICAgCgoKICB2b2lkIHNldF9yb3dfZGF0YShnaW50IHJvdyxn cG9pbnRlciBkYXRhKTsKCiAgIAogICAKCgogIGdwb2ludGVyIGdldF9yb3dfZGF0YShnaW50IHJv dykgY29uc3Q7CgogICAKICAgCgoKCiAgdm9pZCBzZXRfcm93X2RhdGFfZnVsbChnaW50IHJvdyxn cG9pbnRlciBkYXRhLEd0a0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSk7CgoKCiAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCgoKCiAgdm9pZCBtb3ZldG8oZ2ludCByb3csZ2ludCBjb2x1bW4sZ2Zs b2F0IHJvd19hbGlnbj0wLjUsZ2Zsb2F0IGNvbF9hbGlnbj0wLjUpOwoKCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAoKCiAgR3RrQ2VsbFR5cGUgZ2V0X2NlbGxfdHlwZShnaW50IHJvdyxnaW50 IGNvbHVtbikgY29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF90ZXh0KGdpbnQgcm93LGdpbnQg Y29sdW1uLGNvbnN0IHN0cmluZyYgdGV4dCk7CgogICAKICAgCiAgIAogIGJvb2wgICAgICAgICBn ZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4sIG5zdHJpbmcgKnRleHQpIGNvbnN0OwogIGJv b2wgICAgICAgICBnZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4sIHN0cmluZyAmdGV4dCkg Y29uc3Q7CiAgbnN0cmluZyBnZXRfdGV4dChnaW50IHJvdywgZ2ludCBjb2x1bW4pIGNvbnN0OwoK ICAgCiAgIAoKCgogIHZvaWQgc2V0X3BpeG1hcChnaW50IHJvdyxnaW50IGNvbHVtbixjb25zdCBH ZGtfUGl4bWFwJiBwaXhtYXAsY29uc3QgR2RrX0JpdG1hcCYgbWFzayk7CgogICAKICAgCiAgZ2lu dCBnZXRfcGl4bWFwKGdpbnQgcm93LCBnaW50IGNvbHVtbiwKICAgICAgICAgICAgICAgICAgR2Rr X1BpeG1hcCAmcGl4bWFwLCBHZGtfQml0bWFwICZtYXNrKSBjb25zdDsKCiAgIAogICAKCiAgdm9p ZCBzZXRfcGl4dGV4dChnaW50IHJvdyxnaW50IGNvbHVtbixjb25zdCBzdHJpbmcmIHRleHQsZ3Vp bnQ4IHNwYWNpbmcsY29uc3QgR2RrX1BpeG1hcCYgcGl4bWFwLGNvbnN0IEdka19CaXRtYXAmIG1h c2spOwoKICAgCiAgIAogICAKICAgCiAgYm9vbCBnZXRfcGl4dGV4dChnaW50IHJvdywgZ2ludCBj b2x1bW4sIHN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgIGd1aW50OCAmc3BhY2luZywK ICAgICAgICAgICAgICAgICAgIEdka19QaXhtYXAgJnBpeG1hcCwgR2RrX0JpdG1hcCAmbWFzaykg Y29uc3Q7CgogICAKICAgCgoKICB2b2lkIHNldF9jZWxsX3N0eWxlKGdpbnQgcm93LGdpbnQgY29s dW1uLEd0azo6U3R5bGUmIHN0eWxlKTsKCiAgIAogICAKCgogIEd0azo6U3R5bGUqIGdldF9jZWxs X3N0eWxlKGdpbnQgcm93LGdpbnQgY29sdW1uKSBjb25zdDsKCiAgIAogICAKICAgCiAgIAoKCgog IHZvaWQgc2V0X3NoaWZ0KGdpbnQgcm93LGdpbnQgY29sdW1uLGdpbnQgdmVydGljYWwsZ2ludCBo b3Jpem9udGFsKTsKCgoKIAoKIAoKICAgICAgICAgICAgICAgCgoKCgoKcHJpdmF0ZToKICB2aXJ0 dWFsIGJvb2wgY2hlY2tfc2VsaXRlcmF0b3JfdHlwZSgpIGNvbnN0OwoKcHVibGljOgoKICAgIGNs YXNzIFByb3h5X3NlbGVjdF9yb3cKICAgICAgOiBwdWJsaWMgUHJveHlTaWduYWwzPHZvaWQsZ2lu dCxnaW50LEdka0V2ZW50KixDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDA+CiAgICAgIHsK ICAgICAgICAgIHR5cGVkZWYgUHJveHlTaWduYWwzPHZvaWQsZ2ludCxnaW50LEdka0V2ZW50KixD cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDA+IEJhc2VUeXBlOwogICAgICAgIHB1YmxpYzoK ICAgICAgICAgIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTaWdDOjpTbG90Mzx2b2lkLGdpbnQs Z2ludCxHZGtFdmVudCo+ICZzKTsKICAgICAgICAgdm9pZCBvcGVyYXRvciAoKShnaW50IHJvdywg Z2ludCBjb2x1bW49LTEpCiAgICAgICAgICAgICB7ZW1pdChyb3csY29sdW1uKTt9CiAgICAgICAg IHZvaWQgZW1pdChnaW50IHJvdywgZ2ludCBjb2x1bW49LTEpOwoKICAgICAgfTsKICAgIGNsYXNz IFByb3h5X3Vuc2VsZWN0X3JvdwogICAgICA6IHB1YmxpYyBQcm94eVNpZ25hbDM8dm9pZCxnaW50 LGdpbnQsR2RrRXZlbnQqLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMT4KICAgICAgewog ICAgICAgICAgdHlwZWRlZiBQcm94eVNpZ25hbDM8dm9pZCxnaW50LGdpbnQsR2RrRXZlbnQqLENw cE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMT4gQmFzZVR5cGU7CiAgICAgICAgcHVibGljOgog ICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNpZ0M6OlNsb3QzPHZvaWQsZ2ludCxn aW50LEdka0V2ZW50Kj4gJnMpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3IgKCkoZ2ludCByb3cs IGdpbnQgY29sdW1uPS0xKQogICAgICAgICAgICAge2VtaXQocm93LGNvbHVtbik7fQogICAgICAg ICAgIHZvaWQgZW1pdChnaW50IHJvdywgZ2ludCBjb2x1bW49LTEpOwoKICAgICAgfTsKICAgIGNs YXNzIFByb3h5X3NldF9zY3JvbGxfYWRqdXN0bWVudHMKICAgICAgOiBwdWJsaWMgR3RrOjpFbWl0 UHJveHlTaWduYWwyPHZvaWQsR3RrQWRqdXN0bWVudCosR3RrQWRqdXN0bWVudCosQ3BwT2JqZWN0 VHlwZSxCYXNlT2JqZWN0VHlwZSwxNiwmZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRqdXN0bWVudHM+ CiAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgR3RrOjpFbWl0UHJveHlTaWduYWwyPHZvaWQsR3Rr QWRqdXN0bWVudCosR3RrQWRqdXN0bWVudCosQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwx NiwmZ3RrX2NsaXN0X3NldF9zY3JvbGxfYWRqdXN0bWVudHM+IEJhc2VUeXBlOwogICAgICAgIHB1 YmxpYzoKICAgICAgICAgIHZvaWQgb3BlcmF0b3IgKCkoR3RrOjpBZGp1c3RtZW50KixHdGs6OkFk anVzdG1lbnQqKTsKICAgICAgICAgIHZvaWQgZW1pdChHdGs6OkFkanVzdG1lbnQqLEd0azo6QWRq dXN0bWVudCopOwogICAgICAgICAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNpZ0M6OlNsb3Qy PHZvaWQsR3RrOjpBZGp1c3RtZW50KixHdGs6OkFkanVzdG1lbnQqPiAmcyk7CiAgICAgIH07CiAg dW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIGNsaXN0X3NlbGY7CiAgICAgIFByb3h5 X3NlbGVjdF9yb3cgc2VsZWN0X3JvdzsKICAgICAgUHJveHlfdW5zZWxlY3Rfcm93IHVuc2VsZWN0 X3JvdzsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNl T2JqZWN0VHlwZSwyLCZndGtfY2xpc3Rfc2VsZWN0X2FsbD4gc2VsZWN0X2FsbDsKICAgICAgR3Rr OjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwzLCZn dGtfY2xpc3RfdW5zZWxlY3RfYWxsPiB1bnNlbGVjdF9hbGw7CiAgICAgIEd0azo6RW1pdFByb3h5 U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX2NsaXN0X3Vu ZG9fc2VsZWN0aW9uPiB1bmRvX3NlbGVjdGlvbjsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWwx PHZvaWQsZ2ludCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDUsJmd0a21tX2NsaXN0X2Ns aWNrX2NvbHVtbj4gY2xpY2tfY29sdW1uOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDI8dm9p ZCxnaW50LGdpbnQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw2LCZndGtfY2xpc3Rfcm93 X21vdmU+IHJvd19tb3ZlOwogICAgICBHdGs6OlByb3h5U2lnbmFsMjx2b2lkLGdpbnQsZ2ludCxD cHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDc+IHJlc2l6ZV9jb2x1bW47CiAgICAgIEd0azo6 UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSw4PiB0b2dnbGVf Zm9jdXNfcm93OwogICAgICBHdGs6OlByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFz ZU9iamVjdFR5cGUsOT4gdG9nZ2xlX2FkZF9tb2RlOwogICAgICBHdGs6OlByb3h5U2lnbmFsMDx2 b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTA+IHN0YXJ0X3NlbGVjdGlvbjsKICAg ICAgR3RrOjpQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBlLEJhc2VPYmplY3RUeXBlLDEx PiBlbmRfc2VsZWN0aW9uOwogICAgICBHdGs6OlByb3h5U2lnbmFsMzx2b2lkLEd0a1Njcm9sbFR5 cGUsZ2Zsb2F0LGdib29sZWFuLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTI+IGV4dGVu ZF9zZWxlY3Rpb247CiAgICAgIEd0azo6UHJveHlTaWduYWwyPHZvaWQsR3RrU2Nyb2xsVHlwZSxn ZmxvYXQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxMz4gc2Nyb2xsX3ZlcnRpY2FsOwog ICAgICBHdGs6OlByb3h5U2lnbmFsMjx2b2lkLEd0a1Njcm9sbFR5cGUsZ2Zsb2F0LENwcE9iamVj dFR5cGUsQmFzZU9iamVjdFR5cGUsMTQ+IHNjcm9sbF9ob3Jpem9udGFsOwogICAgICBHdGs6OlBy b3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsMTU+IGFib3J0X2Nv bHVtbl9yZXNpemU7CiAgICAgIFByb3h5X3NldF9zY3JvbGxfYWRqdXN0bWVudHMgc2V0X3Njcm9s bF9hZGp1c3RtZW50czsKICAgIH07Cgpwcm90ZWN0ZWQ6CiAgIAogICAgdmlydHVhbCB2b2lkIHNl bGVjdF9yb3dfaW1wbChnaW50IHAwLGdpbnQgcDEsR2RrRXZlbnQqIHAyKTsKICAgIHZpcnR1YWwg dm9pZCB1bnNlbGVjdF9yb3dfaW1wbChnaW50IHAwLGdpbnQgcDEsR2RrRXZlbnQqIHAyKTsKICAg IHZpcnR1YWwgdm9pZCBzZWxlY3RfYWxsX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCB1bnNlbGVj dF9hbGxfaW1wbCgpOwogICAgdmlydHVhbCB2b2lkIHVuZG9fc2VsZWN0aW9uX2ltcGwoKTsKICAg IHZpcnR1YWwgdm9pZCBjbGlja19jb2x1bW5faW1wbChnaW50IHAwKTsKICAgIHZpcnR1YWwgdm9p ZCByb3dfbW92ZV9pbXBsKGdpbnQgcDAsZ2ludCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXpl X2NvbHVtbl9pbXBsKGdpbnQgcDAsZ2ludCBwMSk7CiAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlX2Zv Y3VzX3Jvd19pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlX2FkZF9tb2RlX2ltcGwoKTsK ICAgIHZpcnR1YWwgdm9pZCBzdGFydF9zZWxlY3Rpb25faW1wbCgpOwogICAgdmlydHVhbCB2b2lk IGVuZF9zZWxlY3Rpb25faW1wbCgpOwogICAgdmlydHVhbCB2b2lkIGV4dGVuZF9zZWxlY3Rpb25f aW1wbChHdGtTY3JvbGxUeXBlIHAwLGdmbG9hdCBwMSxnYm9vbGVhbiBwMik7CiAgICB2aXJ0dWFs IHZvaWQgc2Nyb2xsX3ZlcnRpY2FsX2ltcGwoR3RrU2Nyb2xsVHlwZSBwMCxnZmxvYXQgcDEpOwog ICAgdmlydHVhbCB2b2lkIHNjcm9sbF9ob3Jpem9udGFsX2ltcGwoR3RrU2Nyb2xsVHlwZSBwMCxn ZmxvYXQgcDEpOwogICAgdmlydHVhbCB2b2lkIGFib3J0X2NvbHVtbl9yZXNpemVfaW1wbCgpOwog ICAgdmlydHVhbCB2b2lkIHNldF9zY3JvbGxfYWRqdXN0bWVudHNfaW1wbChHdGs6OkFkanVzdG1l bnQqIHAwLEd0azo6QWRqdXN0bWVudCogcDEpOwogICAgdmlydHVhbCBpbnQgaW5zZXJ0X3Jvd19p bXBsKGdpbnQgcm93LGdjaGFyKiogcDEpOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZV9yb3dfaW1w bChnaW50IHJvdyk7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJfaW1wbCgpOwogICAgdmlydHVhbCB2 b2lkIHNvcnRfbGlzdF9pbXBsKCk7Cgp9Owp0eXBlZGVmIENMaXN0IENvbHVtbkxpc3Q7Cgp9CgoK IyAxNCAidF9ndGsuY3BwIiAyCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3RrLS0vYm94LmgiIDEK IAogCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr LTEuMi9ndGsvZ3RrYm94LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CmV4dGVybiAiQyIgewoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0d0a0JveAkgICAgICBHdGtC b3g7CnR5cGVkZWYgc3RydWN0IF9HdGtCb3hDbGFzcyAgIEd0a0JveENsYXNzOwp0eXBlZGVmIHN0 cnVjdCBfR3RrQm94Q2hpbGQgICBHdGtCb3hDaGlsZDsKCnN0cnVjdCBfR3RrQm94CnsKICBHdGtD b250YWluZXIgY29udGFpbmVyOwogIAogIEdMaXN0ICpjaGlsZHJlbjsKICBnaW50MTYgc3BhY2lu ZzsKICBndWludCBob21vZ2VuZW91cyA6IDE7Cn07CgpzdHJ1Y3QgX0d0a0JveENsYXNzCnsKICBH dGtDb250YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7Cn07CgpzdHJ1Y3QgX0d0a0JveENoaWxkCnsK ICBHdGtXaWRnZXQgKndpZGdldDsKICBndWludDE2IHBhZGRpbmc7CiAgZ3VpbnQgZXhwYW5kIDog MTsKICBndWludCBmaWxsIDogMTsKICBndWludCBwYWNrIDogMTsKfTsKCgpHdGtUeXBlCSAgIGd0 a19ib3hfZ2V0X3R5cGUJICAgICAgICh2b2lkKTsKdm9pZAkgICBndGtfYm94X3BhY2tfc3RhcnQJ ICAgICAgIChHdGtCb3gJICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJ Z2Jvb2xlYW4gICAgICBleHBhbmQsCgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50 CSAgICAgIHBhZGRpbmcpOwp2b2lkCSAgIGd0a19ib3hfcGFja19lbmQJICAgICAgIChHdGtCb3gJ ICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJZ2Jvb2xlYW4gICAgICBl eHBhbmQsCgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50CSAgICAgIHBhZGRpbmcp Owp2b2lkCSAgIGd0a19ib3hfcGFja19zdGFydF9kZWZhdWx0cyAoR3RrQm94CSAgICAgKmJveCwK CQkJCQlHdGtXaWRnZXQgICAgKndpZGdldCk7CnZvaWQJICAgZ3RrX2JveF9wYWNrX2VuZF9kZWZh dWx0cyAgIChHdGtCb3gJICAgICAqYm94LAoJCQkJCUd0a1dpZGdldCAgICAqd2lkZ2V0KTsKdm9p ZAkgICBndGtfYm94X3NldF9ob21vZ2VuZW91cyAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJ Z2Jvb2xlYW4gICAgICBob21vZ2VuZW91cyk7CnZvaWQJICAgZ3RrX2JveF9zZXRfc3BhY2luZwkg ICAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJZ2ludAkgICAgICBzcGFjaW5nKTsKdm9pZAkg ICBndGtfYm94X3Jlb3JkZXJfY2hpbGQgICAgICAgKEd0a0JveAkgICAgICpib3gsCgkJCQkJR3Rr V2lkZ2V0ICAgICpjaGlsZCwKCQkJCQlnaW50CSAgICAgIHBvc2l0aW9uKTsKdm9pZAkgICBndGtf Ym94X3F1ZXJ5X2NoaWxkX3BhY2tpbmcgKEd0a0JveAkgICAgICpib3gsCgkJCQkJR3RrV2lkZ2V0 ICAgICpjaGlsZCwKCQkJCQlnYm9vbGVhbiAgICAgKmV4cGFuZCwKCQkJCQlnYm9vbGVhbiAgICAg KmZpbGwsCgkJCQkJZ3VpbnQJICAgICAqcGFkZGluZywKCQkJCQlHdGtQYWNrVHlwZSAgKnBhY2tf dHlwZSk7CnZvaWQJICAgZ3RrX2JveF9zZXRfY2hpbGRfcGFja2luZyAgIChHdGtCb3gJICAgICAq Ym94LAoJCQkJCUd0a1dpZGdldCAgICAqY2hpbGQsCgkJCQkJZ2Jvb2xlYW4gICAgICBleHBhbmQs CgkJCQkJZ2Jvb2xlYW4gICAgICBmaWxsLAoJCQkJCWd1aW50CSAgICAgIHBhZGRpbmcsCgkJCQkJ R3RrUGFja1R5cGUgICBwYWNrX3R5cGUpOwoKCgoKfQoKCgoKIyAyOSAiL29wdC9ndGsvaW5jbHVk ZS9ndGstLS9ib3guaCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a3Zi b3guaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7 CgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrVkJveAkgICAgICBHdGtWQm94Owp0eXBlZGVm IHN0cnVjdCBfR3RrVkJveENsYXNzICBHdGtWQm94Q2xhc3M7CgpzdHJ1Y3QgX0d0a1ZCb3gKewog IEd0a0JveCBib3g7Cn07CgpzdHJ1Y3QgX0d0a1ZCb3hDbGFzcwp7CiAgR3RrQm94Q2xhc3MgcGFy ZW50X2NsYXNzOwp9OwoKCkd0a1R5cGUJICAgZ3RrX3Zib3hfZ2V0X3R5cGUgKHZvaWQpOwpHdGtX aWRnZXQqIGd0a192Ym94X25ldwkgICAgIChnYm9vbGVhbiBob21vZ2VuZW91cywKCQkJICAgICAg Z2ludCBzcGFjaW5nKTsKCgoKfQoKCgoKIyAzMCAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9ib3gu aCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0xLjIvZ3RrL2d0a2hib3guaCIgMQogCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgp0 eXBlZGVmIHN0cnVjdCBfR3RrSEJveAkgICAgICBHdGtIQm94Owp0eXBlZGVmIHN0cnVjdCBfR3Rr SEJveENsYXNzICBHdGtIQm94Q2xhc3M7CgpzdHJ1Y3QgX0d0a0hCb3gKewogIEd0a0JveCBib3g7 Cn07CgpzdHJ1Y3QgX0d0a0hCb3hDbGFzcwp7CiAgR3RrQm94Q2xhc3MgcGFyZW50X2NsYXNzOwp9 OwoKCkd0a1R5cGUJICAgZ3RrX2hib3hfZ2V0X3R5cGUgKHZvaWQpOwpHdGtXaWRnZXQqIGd0a19o Ym94X25ldwkgICAgIChnYm9vbGVhbiBob21vZ2VuZW91cywKCQkJICAgICAgZ2ludCBzcGFjaW5n KTsKCgoKfQoKCgoKIyAzMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9ib3guaCIgMgoKCm5hbWVz cGFjZSBHdGsgewpjbGFzcyBCb3g7CmNsYXNzIEJveF9DbGFzczsKfQpuYW1lc3BhY2UgR3RrIHsg R3RrOjpCb3ggKndyYXAgKEd0a0JveCAqbyk7IH0KbmFtZXNwYWNlIEd0ayB7CmNsYXNzIFZCb3g7 CmNsYXNzIFZCb3hfQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6VkJveCAqd3JhcCAoR3Rr VkJveCAqbyk7IH0KbmFtZXNwYWNlIEd0ayB7CmNsYXNzIEhCb3g7CmNsYXNzIEhCb3hfQ2xhc3M7 Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6SEJveCAqd3JhcCAoR3RrSEJveCAqbyk7IH0KbmFtZXNw YWNlIEd0awp7CgpuYW1lc3BhY2UgQm94X0hlbHBlcnMKewogIGNsYXNzIENoaWxkIDogcHJvdGVj dGVkIF9HdGtCb3hDaGlsZAogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIF9HdGtC b3hDaGlsZCogZ3Rrb2JqKCkge3JldHVybiAodGhpcyk7fQogICAgICAgIGlubGluZSBjb25zdCBf R3RrQm94Q2hpbGQqIGd0a29iaigpIGNvbnN0IHtyZXR1cm4gKHRoaXMpO30KCiAgICAgIHByaXZh dGU6CiAgICAgICAgQ2hpbGQmIG9wZXJhdG9yPShjb25zdCBDaGlsZCYpOwogICAgICAgIENoaWxk KGNvbnN0IENoaWxkJik7CgogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgQ2hpbGQodm9pZCogZG9f bm90X2Rlcml2ZV90aGlzKTsKCiAgICAgICAgaW5saW5lIEd0a0JveCogcGFyZW50KCkKICAgICAg ICAgIHtyZXR1cm4gKCgoICBHdGtCb3ggKikgZ3RrX3R5cGVfY2hlY2tfb2JqZWN0X2Nhc3QgKChH dGtUeXBlT2JqZWN0KikgKCAoIGd0a29iaigpLT53aWRnZXQtPnBhcmVudCApICksICggIChndGtf Ym94X2dldF90eXBlICgpKSAgKSkpICkgO30KICAgICAgICB2b2lkIHJlZHJhdygpOwoKICAgICAg cHVibGljOgogICAgICAgIFdpZGdldCogZ2V0X3dpZGdldCgpIGNvbnN0OwoKICAgICAgICBpbmxp bmUgZ3VpbnQxNiBnZXRfcGFkZGluZygpIGNvbnN0ICAgeyByZXR1cm4gKGd0a29iaigpLT5wYWRk aW5nKTsgfQogICAgICAgIGlubGluZSBib29sIGdldF9leHBhbmQoKSBjb25zdCAgICAgICB7IHJl dHVybiAoZ3Rrb2JqKCktPmV4cGFuZCk7IH0KICAgICAgICBpbmxpbmUgYm9vbCBnZXRfZmlsbCgp IGNvbnN0ICAgICAgICAgeyByZXR1cm4gKGd0a29iaigpLT5maWxsKTsgfQogICAgICAgIGlubGlu ZSBib29sIGdldF9wYWNrKCkgY29uc3QgICAgICAgICB7IHJldHVybiAoZ3Rrb2JqKCktPnBhY2sp OyB9CgogICAgICAgIHZvaWQgc2V0X29wdGlvbnMoYm9vbCBleHBhbmQsYm9vbCBmaWxsLGd1aW50 IHBhZGRpbmcpOwogICAgICAgIHZvaWQgc2V0X3BhY2soR3RrUGFja1R5cGUgcGFjayk7CiAgICB9 OwoKICBzdHJ1Y3QgRWxlbWVudAogICAgewogICAgICBXaWRnZXQqIHdpZGdldF87CiAgICAgIGJv b2wgZXhwYW5kXzsKICAgICAgYm9vbCBmaWxsXzsKICAgICAgZ3VpbnQgcGFkZGluZ187CiAgICAg IEd0a1BhY2tUeXBlIHBhY2tfOwoKICAgICAgRWxlbWVudChXaWRnZXQmIHdpZGdldCwKICAgICAg ICAgICAgICBib29sIGV4cGFuZD10cnVlLAogICAgICAgICAgICAgIGJvb2wgZmlsbD10cnVlLAog ICAgICAgICAgICAgIGd1aW50IHBhZGRpbmc9MCwKICAgICAgICAgICAgICBHdGtQYWNrVHlwZSBw YWNrPUdUS19QQUNLX1NUQVJUKQogICAgICAgICAgOiB3aWRnZXRfKCZ3aWRnZXQpLGV4cGFuZF8o ZXhwYW5kKSxmaWxsXyhmaWxsKSwKICAgICAgICAgICAgcGFkZGluZ18ocGFkZGluZykscGFja18o cGFjaykKICAgICAgICB7fQogICAgfTsKCiAgdHlwZWRlZiBFbGVtZW50IFN0YXJ0RWxlbTsKCiAg c3RydWN0IEVuZEVsZW0gOiBwdWJsaWMgRWxlbWVudAogICAgewogICAgICBFbmRFbGVtKFdpZGdl dCYgd2lkZ2V0LAogICAgICAgICAgICAgIGJvb2wgZXhwYW5kPXRydWUsCiAgICAgICAgICAgICAg Ym9vbCBmaWxsPXRydWUsCiAgICAgICAgICAgICAgZ3VpbnQgcGFkZGluZz0wKQogICAgICAgICAg OiBFbGVtZW50ICh3aWRnZXQsZXhwYW5kLGZpbGwscGFkZGluZyxHVEtfUEFDS19FTkQpCiAgICAg ICAge30KICAgIH07CgogIGNsYXNzIEJveExpc3QKICAgIHsKICAgICAgcHVibGljOgogICAgICAg IHR5cGVkZWYgQ2hpbGQqICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICAg IHR5cGVkZWYgdmFsdWVfdHlwZSAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAg ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlICYgICAgICAgICAgICAgICAgIGNvbnN0X3Jl ZmVyZW5jZTsKCiAgICAgICAgdHlwZWRlZiBHX0xpc3RfSXRlcmF0b3I8dmFsdWVfdHlwZT4gICAg ICAgIGl0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgR19MaXN0X0NvbnN0SXRlcmF0b3I8aXRlcmF0 b3I+ICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIEdfTGlzdF9SZXZlcnNlSXRl cmF0b3I8aXRlcmF0b3I+ICAgcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIEdfTGlz dF9Db25zdEl0ZXJhdG9yPHJldmVyc2VfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv cjsKCiAgICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICAgICAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlOwoKICAgICAgcHJpdmF0ZToKICAgICAgICBmcmllbmQgY2xhc3Mg R3RrOjpCb3g7CiAgICAgICAgR3RrOjpCb3ggKnBhcmVudF87CiAgICAgICAgZXhwbGljaXQgQm94 TGlzdChCb3gqIHBhcmVudCk6IHBhcmVudF8ocGFyZW50KSB7fQoKICAgICAgICBHTGlzdComIGds aXN0KCkgY29uc3Q7ICAgICAgIAoKICAgICAgICBpdGVyYXRvciBiZWdpbl8oKSBjb25zdDsKICAg ICAgICBpdGVyYXRvciBlbmRfKCkgY29uc3Q7CgogICAgICBwdWJsaWM6CiAgICAgICAgfkJveExp c3QoKSB7fQoKICAgICAgICBpbmxpbmUgaXRlcmF0b3IgYmVnaW4oKQogICAgICAgICAge3JldHVy biBiZWdpbl8oKTt9CiAgICAgICAgaW5saW5lIGl0ZXJhdG9yIGVuZCgpCiAgICAgICAgICB7cmV0 dXJuIGVuZF8oKTt9CgogICAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0 CiAgICAgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihiZWdpbl8oKSk7IH0KICAgICAgICBp bmxpbmUgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICAgIHsgcmV0dXJuIGNvbnN0 X2l0ZXJhdG9yKGVuZF8oKSk7IH0KCiAgICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IgcmJl Z2luKCkKICAgICAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kXygpKTsgfQogICAg ICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgICAgICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihiZWdpbl8oKSk7IH0KCiAgICAgICAgaW5saW5lIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgICAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IocmV2ZXJzZV9pdGVyYXRvcihlbmRfKCkpKTsgfQogICAgICAgIGlubGluZSBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgICAgICAgeyByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcihyZXZlcnNlX2l0ZXJhdG9yKGJlZ2luXygpKSk7IH0KCiAgICAgICAg c2l6ZV90eXBlIHNpemUodm9pZCkgY29uc3Q7CiAgICAgICAgaW5saW5lIHNpemVfdHlwZSBtYXhf c2l6ZSh2b2lkKSB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICAgICAgaW5saW5lIGJvb2wg ZW1wdHkodm9pZCkgeyByZXR1cm4gZ2xpc3QoKSA9PSAwOyB9CgogICAgICAgIGl0ZXJhdG9yIGlu c2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgRWxlbWVudCYgZSk7CiAgICAgICAgdGVtcGxh dGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICAgICAgaW5saW5lIHZvaWQgaW5zZXJ0KGl0ZXJh dG9yIHBvc2l0aW9uLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCiAg ICAgICAgICB7IGZvciAoO2ZpcnN0IT1sYXN0OysrZmlyc3QpIHBvc2l0aW9uPWluc2VydChwb3Np dGlvbiwqZmlyc3QpOyB9CgogICAgICAgIGlubGluZSB2b2lkIHB1c2hfZnJvbnQoY29uc3QgRWxl bWVudCYgZSkgeyBpbnNlcnQoYmVnaW4oKSwgZSk7IH0KICAgICAgICBpbmxpbmUgdm9pZCBwdXNo X2JhY2soY29uc3QgRWxlbWVudCYgZSkgIHsgaW5zZXJ0KGVuZCgpLCBlKTsgfQogICAgICAgIGlu bGluZSB2b2lkIHBvcF9mcm9udCgpICAgICAgICAgICAgICAgICAgeyBlcmFzZShiZWdpbigpKTsg fQogICAgICAgIGlubGluZSB2b2lkIHBvcF9iYWNrKCkgICAgICAgICAgICAgICAgICAgeyBlcmFz ZSgtLWVuZCgpKTsgfQoKICAgICAgICB2b2lkIGNsZWFyKCk7CgogICAgICAgIGl0ZXJhdG9yIGVy YXNlKGl0ZXJhdG9yKTsKICAgICAgICB2b2lkIGVyYXNlKGl0ZXJhdG9yIHN0YXJ0LCBpdGVyYXRv ciBzdG9wKTsKICAgICAgICB2b2lkIHJlbW92ZShjb25zdF9yZWZlcmVuY2UpOwoKICAgICAgICBp dGVyYXRvciBmaW5kKGNvbnN0X3JlZmVyZW5jZSBjKTsKICAgICAgICBpdGVyYXRvciBmaW5kKFdp ZGdldCYpOwoKICAgICAgICB2b2lkIHJlbW92ZShXaWRnZXQmIHcpOwoKICAgICAgICAgCiAgICAg ICAgdm9pZCByZW9yZGVyKGl0ZXJhdG9yIGxvYyxpdGVyYXRvciBwb3MpOwogICAgIH07Cn07Cgog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgQm94IDog cHVibGljIENvbnRhaW5lciB7CgpwdWJsaWM6CiAgdHlwZWRlZiBCb3ggICAgICAgICAgQ3BwT2Jq ZWN0VHlwZTsKICB0eXBlZGVmIEJveF9DbGFzcyAgICBDcHBDbGFzc1R5cGU7CiAgdHlwZWRlZiBH dGtCb3ggICAgICAgICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrQm94Q2xhc3MgICAg ICBCYXNlQ2xhc3NUeXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgQm94X0NsYXNzOwogIHN0 YXRpYyBDcHBDbGFzc1R5cGUgYm94X2NsYXNzOwoKICBCb3goY29uc3QgQm94Jik7CiAgQm94JiBv cGVyYXRvcj0oY29uc3QgQm94Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9j bGFzcygpOwogIGV4cGxpY2l0IEJveChHdGtCb3ggKmNhc3RpdGVtKTsKCnB1YmxpYzoKICBzdGF0 aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a0JveCogZ3Rrb2JqKCkgICAgICAgICAgICAgeyBy ZXR1cm4gKEd0a0JveCopKGd0a29iamVjdCk7IH0KICBjb25zdCBHdGtCb3gqIGd0a29iaigpIGNv bnN0IHsgcmV0dXJuIChHdGtCb3gqKShndGtvYmplY3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9i amVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxf bmFtZXNbXTsKCiAgdmlydHVhbCB+Qm94KCk7Cgpwcml2YXRlOgoKcHVibGljOgoKICB0eXBlZGVm IEJveF9IZWxwZXJzOjpCb3hMaXN0IEJveExpc3Q7CgoKCgogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCgoK CgogIHZvaWQgcGFja19zdGFydChHdGs6OldpZGdldCYgY2hpbGQsYm9vbCBleHBhbmQ9dHJ1ZSxi b29sIGZpbGw9dHJ1ZSxndWludCBwYWRkaW5nPTApOwoKICAgCgoKCgoKICB2b2lkIHBhY2tfZW5k KEd0azo6V2lkZ2V0JiBjaGlsZCxib29sIGV4cGFuZD10cnVlLGJvb2wgZmlsbD10cnVlLGd1aW50 IHBhZGRpbmc9MCk7CgogICAKICAgCiAgIAoKCiAgdm9pZCBzZXRfaG9tb2dlbmVvdXMoYm9vbCBo b21vZ2VuZW91cyk7CgogICAKCgogIHZvaWQgc2V0X3NwYWNpbmcoZ2ludCBzcGFjaW5nKTsKCiAg IAoKCiAgdm9pZCByZW9yZGVyX2NoaWxkKEd0azo6V2lkZ2V0JiBjaGlsZCxnaW50IHBvcyk7CgoK IAogCiAKIAogCiAKIAogCiAKIAogCiAgQm94TGlzdCYgY2hpbGRyZW4oKQogICAge3JldHVybiBy ZWludGVycHJldF9jYXN0PEJveExpc3QmPih3aWRnZXRfc2VsZik7IH0KICBjb25zdCBCb3hMaXN0 JiBjaGlsZHJlbigpIGNvbnN0CiAgICB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQm94 TGlzdCY+KHdpZGdldF9zZWxmKTsgfQoKcHJvdGVjdGVkOgogIEJveCgpOwoKcHVibGljOgoKcHJv dGVjdGVkOgogICAKCn07CgoKIAogCiAKIAogCiAKIAogCmNsYXNzIFZCb3ggOiBwdWJsaWMgQm94 CnsKCnB1YmxpYzoKICB0eXBlZGVmIFZCb3ggICAgICAgICAgQ3BwT2JqZWN0VHlwZTsKICB0eXBl ZGVmIFZCb3hfQ2xhc3MgICAgQ3BwQ2xhc3NUeXBlOwogIHR5cGVkZWYgR3RrVkJveCAgICAgICAg ICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtWQm94Q2xhc3MgICAgICBCYXNlQ2xhc3NU eXBlOwoKcHJpdmF0ZToKICBmcmllbmQgY2xhc3MgVkJveF9DbGFzczsKICBzdGF0aWMgQ3BwQ2xh c3NUeXBlIHZib3hfY2xhc3M7CgogIFZCb3goY29uc3QgVkJveCYpOwogIFZCb3gmIG9wZXJhdG9y PShjb25zdCBWQm94Jik7ICAKCnByb3RlY3RlZDoKICB2b2lkICAgaW5pdGlhbGl6ZV9jbGFzcygp OwogIGV4cGxpY2l0IFZCb3goR3RrVkJveCAqY2FzdGl0ZW0pOwoKcHVibGljOgogIHN0YXRpYyBH dGtUeXBlIGdldF90eXBlKCk7CiAgR3RrVkJveCogZ3Rrb2JqKCkgICAgICAgICAgICAgeyByZXR1 cm4gKEd0a1ZCb3gqKShndGtvYmplY3QpOyB9CiAgY29uc3QgR3RrVkJveCogZ3Rrb2JqKCkgY29u c3QgeyByZXR1cm4gKEd0a1ZCb3gqKShndGtvYmplY3QpOyB9CiAgc3RhdGljIGJvb2wgaXNBKE9i amVjdCAqY2hlY2tjYXN0KTsKCiAgIAogIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzaWduYWxf bmFtZXNbXTsKCiAgdmlydHVhbCB+VkJveCgpOwoKcHJpdmF0ZToKCnB1YmxpYzoKCiAgIAogICAK ICBWQm94KGJvb2wgaG9tb2dlbmVvdXM9ZmFsc2UsIGdpbnQgc3BhY2luZz0wKTsKCnB1YmxpYzoK CnByb3RlY3RlZDoKICAgCgp9OwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBIQm94 IDogcHVibGljIEJveAp7CgpwdWJsaWM6CiAgdHlwZWRlZiBIQm94ICAgICAgICAgIENwcE9iamVj dFR5cGU7CiAgdHlwZWRlZiBIQm94X0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0 a0hCb3ggICAgICAgICAgIEJhc2VPYmplY3RUeXBlOwogIHR5cGVkZWYgR3RrSEJveENsYXNzICAg ICAgQmFzZUNsYXNzVHlwZTsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIEhCb3hfQ2xhc3M7CiAg c3RhdGljIENwcENsYXNzVHlwZSBoYm94X2NsYXNzOwoKICBIQm94KGNvbnN0IEhCb3gmKTsKICBI Qm94JiBvcGVyYXRvcj0oY29uc3QgSEJveCYpOyAgCgpwcm90ZWN0ZWQ6CiAgdm9pZCAgIGluaXRp YWxpemVfY2xhc3MoKTsKICBleHBsaWNpdCBIQm94KEd0a0hCb3ggKmNhc3RpdGVtKTsKCnB1Ymxp YzoKICBzdGF0aWMgR3RrVHlwZSBnZXRfdHlwZSgpOwogIEd0a0hCb3gqIGd0a29iaigpICAgICAg ICAgICAgIHsgcmV0dXJuIChHdGtIQm94KikoZ3Rrb2JqZWN0KTsgfQogIGNvbnN0IEd0a0hCb3gq IGd0a29iaigpIGNvbnN0IHsgcmV0dXJuIChHdGtIQm94KikoZ3Rrb2JqZWN0KTsgfQogIHN0YXRp YyBib29sIGlzQShPYmplY3QgKmNoZWNrY2FzdCk7CgogICAKICBzdGF0aWMgY29uc3QgY2hhciog Y29uc3Qgc2lnbmFsX25hbWVzW107CgogIHZpcnR1YWwgfkhCb3goKTsKCnByaXZhdGU6CgpwdWJs aWM6CgogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgSEJveChib29sIGhvbW9nZW5l b3VzPWZhbHNlLCBnaW50IHNwYWNpbmc9MCk7CgogICAKCnB1YmxpYzoKCnByb3RlY3RlZDoKICAg Cgp9OwoKCn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCgojIDE1ICJ0X2d0 ay5jcHAiIDIKCiMgMSAiL29wdC9ndGsvaW5jbHVkZS9ndGstLS9idXR0b24uaCIgMQogCiAKCgoK IAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgR3RrIHsKY2xhc3MgQnV0dG9uOwpj bGFzcyBCdXR0b25fQ2xhc3M7Cn0KbmFtZXNwYWNlIEd0ayB7IEd0azo6QnV0dG9uICp3cmFwIChH dGtCdXR0b24gKm8pOyB9Cm5hbWVzcGFjZSBHdGsKewpjbGFzcyBCdXR0b24gOiBwdWJsaWMgQmlu IHsKCnB1YmxpYzoKICB0eXBlZGVmIEJ1dHRvbiAgICAgICAgICBDcHBPYmplY3RUeXBlOwogIHR5 cGVkZWYgQnV0dG9uX0NsYXNzICAgIENwcENsYXNzVHlwZTsKICB0eXBlZGVmIEd0a0J1dHRvbiAg ICAgICAgICAgQmFzZU9iamVjdFR5cGU7CiAgdHlwZWRlZiBHdGtCdXR0b25DbGFzcyAgICAgIEJh c2VDbGFzc1R5cGU7Cgpwcml2YXRlOgogIGZyaWVuZCBjbGFzcyBCdXR0b25fQ2xhc3M7CiAgc3Rh dGljIENwcENsYXNzVHlwZSBidXR0b25fY2xhc3M7CgogIEJ1dHRvbihjb25zdCBCdXR0b24mKTsK ICBCdXR0b24mIG9wZXJhdG9yPShjb25zdCBCdXR0b24mKTsgIAoKcHJvdGVjdGVkOgogIHZvaWQg ICBpbml0aWFsaXplX2NsYXNzKCk7CiAgZXhwbGljaXQgQnV0dG9uKEd0a0J1dHRvbiAqY2FzdGl0 ZW0pOwoKcHVibGljOgogIHN0YXRpYyBHdGtUeXBlIGdldF90eXBlKCk7CiAgR3RrQnV0dG9uKiBn dGtvYmooKSAgICAgICAgICAgICB7IHJldHVybiAoR3RrQnV0dG9uKikoZ3Rrb2JqZWN0KTsgfQog IGNvbnN0IEd0a0J1dHRvbiogZ3Rrb2JqKCkgY29uc3QgeyByZXR1cm4gKEd0a0J1dHRvbiopKGd0 a29iamVjdCk7IH0KICBzdGF0aWMgYm9vbCBpc0EoT2JqZWN0ICpjaGVja2Nhc3QpOwoKICAgCiAg c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNpZ25hbF9uYW1lc1tdOwoKICB2aXJ0dWFsIH5CdXR0 b24oKTsKCnByaXZhdGU6CgpwdWJsaWM6CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICBCdXR0b24oKTsKCgoKICAgCiAgIAogICAKICAgCiAgZXhwbGljaXQgQnV0dG9uKGNvbnN0IHN0 cmluZyAmbGFiZWwsZ2Zsb2F0IHg9MC41LGdmbG9hdCB5PTAuNSk7CgogICAKCgogIHZvaWQgc2V0 X3JlbGllZihHdGtSZWxpZWZTdHlsZSBuZXdzdHlsZSk7CgogICAKCgogIEd0a1JlbGllZlN0eWxl IGdldF9yZWxpZWYoKSBjb25zdDsKCiAgIAogICAKICAgCgoKICAgCgoKICAgCiAgIAogICAKCgog ICAKCgogICAKCnB1YmxpYzoKCiAgdW5pb24KICAgIHsKICAgICAgQ3BwT2JqZWN0VHlwZSAqIGJ1 dHRvbl9zZWxmOwogICAgICBHdGs6OkVtaXRQcm94eVNpZ25hbDA8dm9pZCxDcHBPYmplY3RUeXBl LEJhc2VPYmplY3RUeXBlLDAsJmd0a19idXR0b25fcHJlc3NlZD4gcHJlc3NlZDsKICAgICAgR3Rr OjpFbWl0UHJveHlTaWduYWwwPHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwxLCZn dGtfYnV0dG9uX3JlbGVhc2VkPiByZWxlYXNlZDsKICAgICAgR3RrOjpFbWl0UHJveHlTaWduYWww PHZvaWQsQ3BwT2JqZWN0VHlwZSxCYXNlT2JqZWN0VHlwZSwyLCZndGtfYnV0dG9uX2NsaWNrZWQ+ IGNsaWNrZWQ7CiAgICAgIEd0azo6RW1pdFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUs QmFzZU9iamVjdFR5cGUsMywmZ3RrX2J1dHRvbl9lbnRlcj4gZW50ZXI7CiAgICAgIEd0azo6RW1p dFByb3h5U2lnbmFsMDx2b2lkLENwcE9iamVjdFR5cGUsQmFzZU9iamVjdFR5cGUsNCwmZ3RrX2J1 dHRvbl9sZWF2ZT4gbGVhdmU7CiAgICB9OwoKcHJvdGVjdGVkOgogICAKICAgIHZpcnR1YWwgdm9p ZCBwcmVzc2VkX2ltcGwoKTsKICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlZF9pbXBsKCk7CiAgICB2 aXJ0dWFsIHZvaWQgY2xpY2tlZF9pbXBsKCk7CiAgICB2aXJ0dWFsIHZvaWQgZW50ZXJfaW1wbCgp OwogICAgdmlydHVhbCB2b2lkIGxlYXZlX2ltcGwoKTsKCn07Cgp9CgoKIAogCiAKIAogCiAKIAoK CiMgMTYgInRfZ3RrLmNwcCIgMgoKIyAxICIvb3B0L2d0ay9pbmNsdWRlL2d0ay0tL21haW4uaCIg MQogCiAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvZ3RrL2luY2x1ZGUvZ3Rr LTEuMi9ndGsvZ3RrbWFpbi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKCnR5cGVkZWYgdm9pZAkoKkd0a01vZHVsZUlu aXRGdW5jKQkoZ2ludAkJKmFyZ2MsCgkJCQkJIGdjaGFyCSAgICAgICoqKmFyZ3YpOwp0eXBlZGVm IGdpbnQJKCpHdGtLZXlTbm9vcEZ1bmMpCShHdGtXaWRnZXQJKmdyYWJfd2lkZ2V0LAoJCQkJCSBH ZGtFdmVudEtleQkqZXZlbnQsCgkJCQkJIGdwb2ludGVyCSBmdW5jX2RhdGEpOwoKIAoKZXh0ZXJu IGNvbnN0IGd1aW50IGd0a19tYWpvcl92ZXJzaW9uOwpleHRlcm4gY29uc3QgZ3VpbnQgZ3RrX21p bm9yX3ZlcnNpb247CmV4dGVybiBjb25zdCBndWludCBndGtfbWljcm9fdmVyc2lvbjsKZXh0ZXJu IGNvbnN0IGd1aW50IGd0a19iaW5hcnlfYWdlOwpleHRlcm4gY29uc3QgZ3VpbnQgZ3RrX2ludGVy ZmFjZV9hZ2U7CmdjaGFyKiBndGtfY2hlY2tfdmVyc2lvbiAoZ3VpbnQJcmVxdWlyZWRfbWFqb3Is CgkJCSAgZ3VpbnQJcmVxdWlyZWRfbWlub3IsCgkJCSAgZ3VpbnQJcmVxdWlyZWRfbWljcm8pOwoK CiAKCnZvaWQJICAgZ3RrX2luaXQJCSAoaW50CSAgICAgICAqYXJnYywKCQkJCSAgY2hhcgkgICAg ICoqKmFyZ3YpOwpnYm9vbGVhbiAgIGd0a19pbml0X2NoZWNrICAgICAgICAoaW50CSAgICAgICAq YXJnYywKCQkJCSAgY2hhcgkgICAgICoqKmFyZ3YpOwp2b2lkCSAgIGd0a19leGl0CQkgKGdpbnQJ CWVycm9yX2NvZGUpOwpnY2hhcioJICAgZ3RrX3NldF9sb2NhbGUJICh2b2lkKTsKZ2ludAkgICBn dGtfZXZlbnRzX3BlbmRpbmcJICh2b2lkKTsKCiAKCgoKdm9pZCAgZ3RrX21haW5fZG9fZXZlbnQg ICAgICAgICAgKEdka0V2ZW50ICAgICAgICAgICAqZXZlbnQpOwoKdm9pZAkgICBndGtfbWFpbgkJ ICh2b2lkKTsKZ3VpbnQJICAgZ3RrX21haW5fbGV2ZWwJICh2b2lkKTsKdm9pZAkgICBndGtfbWFp bl9xdWl0CSAodm9pZCk7CmdpbnQJICAgZ3RrX21haW5faXRlcmF0aW9uCSAodm9pZCk7CiAKZ2lu dAkgICBndGtfbWFpbl9pdGVyYXRpb25fZG8gKGdib29sZWFuIGJsb2NraW5nKTsKCmdpbnQJICAg Z3RrX3RydWUJCSAgICh2b2lkKTsKZ2ludAkgICBndGtfZmFsc2UJCSAgICh2b2lkKTsKCnZvaWQJ ICAgZ3RrX2dyYWJfYWRkCQkgICAoR3RrV2lkZ2V0CSAgICAgICAqd2lkZ2V0KTsKR3RrV2lkZ2V0 KiBndGtfZ3JhYl9nZXRfY3VycmVudAkgICAodm9pZCk7CnZvaWQJICAgZ3RrX2dyYWJfcmVtb3Zl CSAgIChHdGtXaWRnZXQJICAgICAgICp3aWRnZXQpOwoKdm9pZAkgICBndGtfaW5pdF9hZGQJCSAg IChHdGtGdW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRh dGEpOwp2b2lkCSAgIGd0a19xdWl0X2FkZF9kZXN0cm95CSAgIChndWludAkgICAgICAgbWFpbl9s ZXZlbCwKCQkJCSAgICBHdGtPYmplY3QJICAgICAgKm9iamVjdCk7Cmd1aW50CSAgIGd0a19xdWl0 X2FkZAkJICAgKGd1aW50CSAgICAgICBtYWluX2xldmVsLAoJCQkJICAgIEd0a0Z1bmN0aW9uCSAg ICAgICBmdW5jdGlvbiwKCQkJCSAgICBncG9pbnRlcgkgICAgICAgZGF0YSk7Cmd1aW50CSAgIGd0 a19xdWl0X2FkZF9mdWxsCSAgIChndWludAkgICAgICAgbWFpbl9sZXZlbCwKCQkJCSAgICBHdGtG dW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNo YWwsCgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlm eSAgIGRlc3Ryb3kpOwp2b2lkCSAgIGd0a19xdWl0X3JlbW92ZQkgICAoZ3VpbnQJICAgICAgIHF1 aXRfaGFuZGxlcl9pZCk7CnZvaWQJICAgZ3RrX3F1aXRfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVy CSAgICAgICBkYXRhKTsKZ3VpbnQJICAgZ3RrX3RpbWVvdXRfYWRkCSAgIChndWludDMyCSAgICAg ICBpbnRlcnZhbCwKCQkJCSAgICBHdGtGdW5jdGlvbgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAg Z3BvaW50ZXIJICAgICAgIGRhdGEpOwpndWludAkgICBndGtfdGltZW91dF9hZGRfZnVsbAkgICAo Z3VpbnQzMgkgICAgICAgaW50ZXJ2YWwsCgkJCQkgICAgR3RrRnVuY3Rpb24JICAgICAgIGZ1bmN0 aW9uLAoJCQkJICAgIEd0a0NhbGxiYWNrTWFyc2hhbCBtYXJzaGFsLAoJCQkJICAgIGdwb2ludGVy CSAgICAgICBkYXRhLAoJCQkJICAgIEd0a0Rlc3Ryb3lOb3RpZnkgICBkZXN0cm95KTsKdm9pZAkg ICBndGtfdGltZW91dF9yZW1vdmUJICAgKGd1aW50CSAgICAgICB0aW1lb3V0X2hhbmRsZXJfaWQp OwoKZ3VpbnQJICAgZ3RrX2lkbGVfYWRkCQkgICAoR3RrRnVuY3Rpb24JICAgICAgIGZ1bmN0aW9u LAoJCQkJICAgIGdwb2ludGVyCSAgICAgICBkYXRhKTsKZ3VpbnQJICAgZ3RrX2lkbGVfYWRkX3By aW9yaXR5ICAgKGdpbnQJICAgICAgIHByaW9yaXR5LAoJCQkJICAgIEd0a0Z1bmN0aW9uCSAgICAg ICBmdW5jdGlvbiwKCQkJCSAgICBncG9pbnRlcgkgICAgICAgZGF0YSk7Cmd1aW50CSAgIGd0a19p ZGxlX2FkZF9mdWxsCSAgIChnaW50CSAgICAgICBwcmlvcml0eSwKCQkJCSAgICBHdGtGdW5jdGlv bgkgICAgICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNoYWwsCgkJ CQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlmeSAgIGRl c3Ryb3kpOwp2b2lkCSAgIGd0a19pZGxlX3JlbW92ZQkgICAoZ3VpbnQJICAgICAgIGlkbGVfaGFu ZGxlcl9pZCk7CnZvaWQJICAgZ3RrX2lkbGVfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVyCSAgICAg ICBkYXRhKTsKZ3VpbnQJICAgZ3RrX2lucHV0X2FkZF9mdWxsCSAgIChnaW50CSAgICAgICBzb3Vy Y2UsCgkJCQkgICAgR2RrSW5wdXRDb25kaXRpb24gIGNvbmRpdGlvbiwKCQkJCSAgICBHZGtJbnB1 dEZ1bmN0aW9uICAgZnVuY3Rpb24sCgkJCQkgICAgR3RrQ2FsbGJhY2tNYXJzaGFsIG1hcnNoYWws CgkJCQkgICAgZ3BvaW50ZXIJICAgICAgIGRhdGEsCgkJCQkgICAgR3RrRGVzdHJveU5vdGlmeSAg IGRlc3Ryb3kpOwp2b2lkCSAgIGd0a19pbnB1dF9yZW1vdmUJICAgKGd1aW50CSAgICAgICBpbnB1 dF9oYW5kbGVyX2lkKTsKCgpndWludAkgICBndGtfa2V5X3Nub29wZXJfaW5zdGFsbCAoR3RrS2V5 U25vb3BGdW5jIHNub29wZXIsCgkJCQkgICAgZ3BvaW50ZXIJICAgIGZ1bmNfZGF0YSk7CnZvaWQJ ICAgZ3RrX2tleV9zbm9vcGVyX3JlbW92ZSAgKGd1aW50CSAgICBzbm9vcGVyX2hhbmRsZXJfaWQp OwogIApHZGtFdmVudCogIGd0a19nZXRfY3VycmVudF9ldmVudCAgICh2b2lkKTsKR3RrV2lkZ2V0 KiBndGtfZ2V0X2V2ZW50X3dpZGdldAkgICAoR2RrRXZlbnQJICAgKmV2ZW50KTsKCgogCgp2b2lk ICAgICAgIGd0a19wcm9wYWdhdGVfZXZlbnQgICAgIChHdGtXaWRnZXQgICAgICAgICAqd2lkZ2V0 LAoJCQkJICAgIEdka0V2ZW50ICAgICAgICAgICpldmVudCk7CgoKfQoKCgoKIyAyNyAiL29wdC9n dGsvaW5jbHVkZS9ndGstLS9tYWluLmgiIDIKCgoKCm5hbWVzcGFjZSBHdGsKewpjbGFzcyBXaWRn ZXQ7CgogCgogCmNsYXNzIElkbGVTaWcKewpwdWJsaWM6CiAgdHlwZWRlZiBTaWdDOjpDYWxsYmFj azA8Z2ludD4gQ2FsbGJhY2s7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxnaW50PiBTbG90VHlwZTsK CnByb3RlY3RlZDoKICBzdGF0aWMgZ2ludCBndGtfY2FsbGJhY2soZ3BvaW50ZXIgZCk7CgpwdWJs aWM6CiAgQ29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNsb3RUeXBlICZzZCxnaW50IHByaW9yaXR5 ID0gMjAwICApOwp9OwoKIApjbGFzcyBUaW1lb3V0U2lnCnsKcHVibGljOgogIHR5cGVkZWYgU2ln Qzo6Q2FsbGJhY2swPGdpbnQ+IENhbGxiYWNrOwogIHR5cGVkZWYgU2lnQzo6U2xvdDA8Z2ludD4g U2xvdFR5cGU7Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIGdpbnQgZ3RrX2NhbGxiYWNrKGdwb2ludGVy IGQpOwoKcHVibGljOgogIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmc2QsZ3Vp bnQzMiBpbnRlcnZhbCk7Cn07CgogCmNsYXNzIEtleVNub29wZXJTaWcKewpwdWJsaWM6CiAgdHlw ZWRlZiBTaWdDOjpDYWxsYmFjazI8Z2ludCxXaWRnZXQqLEdka0V2ZW50S2V5Kj4gICAgICAgICBD YWxsYmFjazsKICB0eXBlZGVmIFNpZ0M6OlNsb3QyPGdpbnQsV2lkZ2V0KixHZGtFdmVudEtleSo+ ICAgICAgICAgICAgIFNsb3RUeXBlOwoKcHJvdGVjdGVkOgogIHN0YXRpYyBnaW50IGd0a19jYWxs YmFjayhHdGtXaWRnZXQqIHcsR2RrRXZlbnRLZXkqIGssZ3BvaW50ZXIgZCk7CgpwdWJsaWM6CiAg Q29ubmVjdGlvbiBjb25uZWN0KGNvbnN0IFNsb3RUeXBlICZzZCk7Cn07CgogCmNsYXNzIElucHV0 U2lnCnsKcHVibGljOgogCiAKIAogCiAKCiAgdHlwZWRlZiBTaWdDOjpDYWxsYmFjazI8dm9pZCxn aW50LEdka0lucHV0Q29uZGl0aW9uPiAgICAgICAgIENhbGxiYWNrOwogIHR5cGVkZWYgU2lnQzo6 U2xvdDI8dm9pZCxnaW50LEdka0lucHV0Q29uZGl0aW9uPiAgICAgICAgICAgICBTbG90VHlwZTsK CnByb3RlY3RlZDoKICBzdGF0aWMgdm9pZCBndGtfY2FsbGJhY2soZ3BvaW50ZXIgICAgICAgICAg ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgc291cmNl LAogICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtJbnB1dENvbmRpdGlvbiBjb25kaXRpb24p OwoKcHVibGljOgogIENvbm5lY3Rpb24gY29ubmVjdChjb25zdCBTbG90VHlwZSAmc2QsCiAgICAg ICAgICAgICAgICAgICAgIGdpbnQgc291cmNlLAogICAgICAgICAgICAgICAgICAgICBHZGtJbnB1 dENvbmRpdGlvbiBjb25kaXRpb24pOwp9OwoKIApjbGFzcyBRdWl0U2lnCnsKcHVibGljOgogIHR5 cGVkZWYgU2lnQzo6Q2FsbGJhY2swPGdpbnQ+IENhbGxiYWNrOwogIHR5cGVkZWYgdm9pZCBTVHlw ZTsKICB0eXBlZGVmIGdpbnQgUlR5cGU7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxTVHlwZT4gT3V0 U2xvdFR5cGU7CiAgdHlwZWRlZiBTaWdDOjpTbG90MDxSVHlwZT4gSW5TbG90VHlwZTsKICB0eXBl ZGVmIFNpZ0M6OkNhbGxEYXRhT2JqMjxPdXRTbG90VHlwZTo6RnVuYyxnaW50PiBEYXRhOwoKcHJv dGVjdGVkOgogIHN0YXRpYyBnaW50IGd0a19jYWxsYmFjayhncG9pbnRlciAgICAgICAgICBkYXRh KTsKICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkKiBkYXRhKTsKCnB1YmxpYzoKICBDb25uZWN0 aW9uIGNvbm5lY3QoY29uc3QgSW5TbG90VHlwZSAmc2QsZ3VpbnQgbWFpbl9sZXZlbD0wKTsKICBP dXRTbG90VHlwZSBzbG90KCk7CiAgdm9pZCBlbWl0KCkgICAgICAgeyBjYWxsYmFjaygwKTsgfQog IHZvaWQgb3BlcmF0b3IoKSgpIHsgY2FsbGJhY2soMCk7IH0KfTsKCgoKIAoKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCmNsYXNzIE1haW4gOiBwdWJsaWMgU2ln Qzo6T2JqZWN0IHsKICBmcmllbmQgY2xhc3MgUXVpdFNpZzsKcHJvdGVjdGVkOgogIHN0YXRpYyBN YWluICppbnN0YW5jZV87CnB1YmxpYzoKICAgCiAgc3RhdGljIE1haW4gKmluc3RhbmNlKCkgeyBy ZXR1cm4gaW5zdGFuY2VfOyB9CgogIE1haW4oaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGJvb2wg aGF2ZV9sb2NhbGU9ZmFsc2UpOwogIE1haW4oaW50ICZhcmdjLCBjaGFyICoqJmFyZ3YsIGJvb2wg aGF2ZV9sb2NhbGU9ZmFsc2UpOwogIH5NYWluKCk7CgogICAKICAgCiAgIAogICAKICBzdGF0aWMg dm9pZCBydW4oKSAgICAgICAgICAgICB7aW5zdGFuY2VfLT5ydW5faW1wbCgpO30KICBzdGF0aWMg dm9pZCBpdGVyYXRpb24oYm9vbCBibG9ja2luZz0gKCEgKDApICkgKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHtpbnN0YW5jZV8tPml0ZXJhdGlvbl9pbXBsKGJsb2NraW5nKTt9CiAg c3RhdGljIGdpbnQgZXZlbnRzX3BlbmRpbmcoKSAge3JldHVybiBpbnN0YW5jZV8tPmV2ZW50c19w ZW5kaW5nX2ltcGwoKTt9CgogICAKICAgCiAgIAogIHN0YXRpYyB2b2lkIGdyYWJfYWRkKFdpZGdl dCAmd2lkZ2V0KTsKCiAgIAogIHN0YXRpYyB2b2lkIGdyYWJfcmVtb3ZlKFdpZGdldCAmd2lkZ2V0 KTsKCiAgIAogIHN0YXRpYyBXaWRnZXQqIGdyYWJfZ2V0X2N1cnJlbnQoKTsKCiAgc3RhdGljIHZv aWQgZ3RrX3RydWUoKTsKICBzdGF0aWMgdm9pZCBndGtfZmFsc2UoKTsKCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICBz dGF0aWMgSWRsZVNpZyBpZGxlOwoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgc3RhdGljIFRpbWVvdXRTaWcgdGltZW91dDsKCiAgIAogICAKICAg CiAgIAogICAKICAgCiAgIAogICAKICBzdGF0aWMgS2V5U25vb3BlclNpZyBrZXlfc25vb3BlcjsK CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogIHN0YXRpYyBJbnB1dFNpZyBpbnB1dDsK CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogIHN0YXRpYyBRdWl0U2lnIHF1aXQ7Cgpwcm90ZWN0ZWQ6CiAg TWFpbigpOwoKICB2b2lkIGluaXQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsCgkgICAgYm9vbCBo YXZlX2xvY2FsZSk7CgogIHZvaWQgaW5pdF9ndGttbV9pbnRlcm5hbHMoKTsKCiAgdmlydHVhbCB2 b2lkIHJ1bl9pbXBsKCk7CiAgdmlydHVhbCB2b2lkIHF1aXRfaW1wbCgpOwogIHZpcnR1YWwgdm9p ZCBpdGVyYXRpb25faW1wbChib29sIGJsb2NraW5nKTsKICB2aXJ0dWFsIGdpbnQgZXZlbnRzX3Bl bmRpbmdfaW1wbCgpOwp9OwoKdHlwZWRlZiBNYWluIEtpdDsKCn0KCgoKIyAxNyAidF9ndGsuY3Bw IiAyCgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIERhdHVtCnsKcHVibGljOgogICAgRGF0 dW0oY29uc3Qgc3RyaW5nICZzKTsKICAgIHN0cmluZyBhc19zdHJpbmcoKSBjb25zdDsKICAgIG9w ZXJhdG9yIHN0cmluZygpIGNvbnN0OwogICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7 CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBEYXR1bSAmb3RoZXIpIGNvbnN0IHsKCWlmICh0eXBl PT1vdGhlci50eXBlKXsKCSAgICBzd2l0Y2ggKHR5cGUpewoJICAgIGNhc2UgSU5UOiByZXR1cm4g aXZhbCA8IG90aGVyLml2YWw7CgkgICAgY2FzZSBET1VCTEU6IHJldHVybiBkdmFsIDwgb3RoZXIu ZHZhbDsKCSAgICBjYXNlIFNUUklORzogcmV0dXJuIHN2YWwgPCBvdGhlci5zdmFsOwoJICAgIH0K CX0gZWxzZSB7CgkgICAgcmV0dXJuIHR5cGUgPCBvdGhlci50eXBlOwoJfQogICAgfQpwcml2YXRl OgogICAgZW51bSB7IElOVCwgRE9VQkxFLCBTVFJJTkd9IHR5cGU7CiAgICBpbnQgaXZhbDsKICAg IGRvdWJsZSBkdmFsOwogICAgc3RyaW5nIHN2YWw7Cn07CgpEYXR1bTo6RGF0dW0oY29uc3Qgc3Ry aW5nICZzKToKICAgIHN2YWwocykKewogICAgaXN0cmluZ3N0cmVhbSBpbihzKTsKICAgIHN0cmlu ZyByZXN0OwoKICAgIGlmIChpbiA+PiBpdmFsICYmICEgKGluID4+IHJlc3QpKSB7Cgl0eXBlID0g SU5UOwogICAgfSBlbHNlIHsKCWluLmNsZWFyKCk7Cglpbi5zZWVrZygwKTsKCWlmIChpbiA+PiBk dmFsICYmICEgKGluID4+IHJlc3QpKXsKCSAgICB0eXBlID0gRE9VQkxFOwoJfSBlbHNlIHsKCSAg ICB0eXBlID0gU1RSSU5HOwoJfQogICAgfQp9CgpEYXR1bTo6b3BlcmF0b3Igc3RyaW5nICgpIGNv bnN0CnsKICAgIHJldHVybiB0aGlzLT5zdmFsOwp9CgpEYXR1bTo6b3BlcmF0b3IgY29uc3QgY2hh ciAqICgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5zdmFsLmNfc3RyKCk7Cn0KCnR5cGVkZWYg dmVjdG9yPERhdHVtPiBSb3c7CgpjbGFzcyBDb21wYXJhdG9yIDogYmluYXJ5X2Z1bmN0aW9uPFJv dyxSb3csYm9vbD4KewpwdWJsaWM6CiAgICBDb21wYXJhdG9yKGludCBzKTogc2xvdChzKSB7fTsK ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBSb3cgJnIxLCBjb25zdCBSb3cgJnIyKXsKCXJldHVy biByMVtzbG90XSA8IHIyW3Nsb3RdOwogICAgfQpwcml2YXRlOgogICAgaW50IHNsb3Q7Cn07CgoK Y2xhc3MgRGVtbwp7CnB1YmxpYzoKICAgIERlbW8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTogYXJn YyhhcmdjKSwgYXJndihhcmd2KSB7fTsKICAgIGludCBtYWluKCk7CiAgICB2b2lkIGNvbHVtbl9j bGlja2VkKGludCk7CnByaXZhdGU6CiAgICBpbnQgYXJnYzsKICAgIGNoYXIgKiphcmd2Owp9OwoK dm9pZCBEZW1vOjpjb2x1bW5fY2xpY2tlZChpbnQgd2hpY2gpCnsKICAgIGNvdXQgPDwgd2hpY2gg PDwgZW5kbDsKfQoKCmludCBEZW1vOjptYWluKCkKewogICAgaWYgKGFyZ2MgPCAyKXsKCWNlcnIg PDwgIlVzYWdlOiAiIDw8IGFyZ3ZbMF0gPDwgIiBkYXRhZmlsZSIgPDwgZW5kbDsKCXJldHVybiAt MTsKICAgIH0KICAgIEd0azo6TWFpbiBtYWluKGFyZ2MsIGFyZ3YpOwoKICAgIGNoYXIgKmZpbGVu YW1lID0gYXJndlsxXTsKCiAgICBpZnN0cmVhbSBpbnB1dChmaWxlbmFtZSk7CiAgICBpZiAoIWlu cHV0KXsKCXBlcnJvcihmaWxlbmFtZSk7CglleGl0KC0xKTsKICAgIH0KICAgIGNvbnN0IGludCBi dWZzaXplPTIwMDsKICAgIGNoYXIgbGluZWJ1ZltidWZzaXplXTsKICAgIHZlY3RvciA8Um93PiBk YXRhOwogICAgdmVjdG9yIDxzdHJpbmc+IGNvbHVtbkhlYWRlcnM7CiAgICBib29sIGZpcnN0Um93 ID0gdHJ1ZTsKICAgIGludCBuQ29sczsKICAgIAogICAgd2hpbGUgKGlucHV0LmdldGxpbmUobGlu ZWJ1ZiwgYnVmc2l6ZSkpewoJaXN0cmluZ3N0cmVhbSBsaW5lKGxpbmVidWYpOwoJc3RyaW5nIHRv a2VuOwoJUm93IHI7CgkgCgl3aGlsZSAobGluZSA+PiB0b2tlbikgewoJICAgIGlmIChmaXJzdFJv dyl7CgkJY29sdW1uSGVhZGVycy5wdXNoX2JhY2sodG9rZW4pOwoJICAgIH0gZWxzZSB7CgkJRGF0 dW0gZCh0b2tlbik7CgkJci5wdXNoX2JhY2soZCk7CgkgICAgfQoJfQoJaWYgKCFmaXJzdFJvdykK CSAgICBkYXRhLnB1c2hfYmFjayhyKTsKCWZpcnN0Um93ID0gZmFsc2U7CiAgICB9CgogICAgbkNv bHMgPSBjb2x1bW5IZWFkZXJzLnNpemUoKTsKCiAgICBHdGs6OkNMaXN0ICpjbGlzdCA9IG1hbmFn ZShuZXcgR3RrOjpDTGlzdChjb2x1bW5IZWFkZXJzKSk7CiAgICBmb3IgKGludCBpPTA7IGk8bkNv bHM7ICsraSl7CgljbGlzdC0+Y29sdW1uKGkpLnNldF9hY3RpdmUoKTsKICAgIH0KCiAgICAgCiAg ICAgCiAgICBmb3IgKHZlY3RvcjxSb3c+OjppdGVyYXRvciByaSA9IGRhdGEuYmVnaW4oKTsKCSBy aSA8IGRhdGEuZW5kKCk7ICsrcmkpewoJY2xpc3QtPnJvd3MoKS5wdXNoX2JhY2soICpyaSApOwog ICAgfQoKICAgIGNsaXN0LT5jbGlja19jb2x1bW4uY29ubmVjdChTaWdDOjpiaW5kPGludD5TaWdD OjpzbG90KHRoaXMsICZEZW1vOjpjb2x1bW5fY2xpY2tlZCkpOwogICAgR3RrOjpTY3JvbGxlZFdp bmRvdyAqc2Nyb2xsZWRfd2luZG93ID0gbWFuYWdlKG5ldyBHdGs6OlNjcm9sbGVkV2luZG93KCkp OwoKICAgIHNjcm9sbGVkX3dpbmRvdy0+c2V0X3BvbGljeShHVEtfUE9MSUNZX0FVVE9NQVRJQywg R1RLX1BPTElDWV9BTFdBWVMpOwogICAgc2Nyb2xsZWRfd2luZG93LT5hZGQoKmNsaXN0KTsKCiAg ICBHdGs6OldpbmRvdyAqd2luZG93ID0gbWFuYWdlKG5ldyBHdGs6OldpbmRvdyhHVEtfV0lORE9X X1RPUExFVkVMKSk7CiAgICB3aW5kb3ctPnNldF91c2l6ZSgzMDAsIDE1MCk7CiAgICB3aW5kb3ct PnNldF90aXRsZSgiRXhhbXBsZSIpOwogICAgd2luZG93LT5hZGQoKnNjcm9sbGVkX3dpbmRvdyk7 CiAgICB3aW5kb3ctPnNob3dfYWxsKCk7CiAgICBtYWluLnJ1bigpOwogICAgcmV0dXJuIDA7Cn0K CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpewogICAgRGVtbyBkKGFyZ2MsIGFyZ3Yp OwogICAgcmV0dXJuIGQubWFpbigpOwp9Cg==