From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12795 invoked by alias); 19 Apr 2002 01:26:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 12773 invoked by uid 71); 19 Apr 2002 01:26:01 -0000 Resent-Date: 19 Apr 2002 01:26:01 -0000 Resent-Message-ID: <20020419012601.12772.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, echristo@redhat.com, David.Billinghurst@riotinto.com Resent-Reply-To: gcc-gnats@gcc.gnu.org, ghazi@caip.rutgers.edu Received:(qmail 12716 invoked by uid 61); 19 Apr 2002 01:25:39 -0000 Message-Id:<20020419012539.12715.qmail@sources.redhat.com> Date: Thu, 18 Apr 2002 18:26:00 -0000 From: ghazi@caip.rutgers.edu Reply-To: ghazi@caip.rutgers.edu To: gcc-gnats@gcc.gnu.org Cc: echristo@redhat.com, David.Billinghurst@riotinto.com X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify:echristo@redhat.com, David.Billinghurst@riotinto.com Subject: target/6369: mips-irix6 gcc-3.1 bootstrap failure in stage2 compiling genrecog.c X-SW-Source: 2002-04/txt/msg00964.txt.bz2 List-Id: >Number: 6369 >Category: target >Synopsis: mips-irix6 gcc-3.1 bootstrap failure in stage2 compiling genrecog.c >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Thu Apr 18 18:26:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Kaveh Ghazi >Release: gcc version 3.1 20020418 (prerelease) >Organization: >Environment: mips-sgi-irix6.2 native as/ld or sparc-sun-solaris2.7 cross to mips-sgi-irix6.5 >Description: While bootstrapping the gcc-3.1 branch today on mips-irix6.2, I get this failure in stage2 compiling genrecog.c: genrecog.c: In function `make_insn_sequence': genrecog.c:2609: Internal compiler error in ?, at simplify-rtx.c:2711 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. make[2]: *** [genrecog.o] Error 1 I was able to replicate it using a cross compiler from sparc-sun-solaris2.7 to mips-sgi-irix6.5. If you do that, use the attached .i file and these flags: cc1 -fpreprocessed genrecog.i -quiet -dumpbase genrecog.c -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -Wno-long-long -pedantic -version -o genrecog.s Bootstrap worked as recently as yesterday: http://gcc.gnu.org/ml/gcc-testresults/2002-04/msg00671.html http://gcc.gnu.org/ml/gcc-testresults/2002-04/msg00679.html >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-gzip; name="genrecog.i.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="genrecog.i.gz" IyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKIyAxICI8YnVp bHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9nZW5yZWNvZy5jIgojIDUzICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mv Z2VucmVjb2cuYyIKIyAxICJoY29uZmlnLmgiIDEKIyAxICJhdXRvLWhvc3QuaCIgMQojIDIgImhj b25maWcuaCIgMgoKCgoKCnN0cnVjdCBydHhfZGVmOwp0eXBlZGVmIHN0cnVjdCBydHhfZGVmICpy dHg7CnN0cnVjdCBydHZlY19kZWY7CnR5cGVkZWYgc3RydWN0IHJ0dmVjX2RlZiAqcnR2ZWM7CnVu aW9uIHRyZWVfbm9kZTsKdHlwZWRlZiB1bmlvbiB0cmVlX25vZGUgKnRyZWU7CgoKIyAxICIuLi8u Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2Fuc2lkZWNsLmgiIDEKIyAxNiAiaGNvbmZp Zy5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL2ly aXM2LmgiIDEKIyAzMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz L2lyaXM2LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz L2lyaXM1LmgiIDEKIyAyOSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t aXBzL2lyaXM1LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t aXBzL2lyaXMzLmgiIDEKIyAzMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZp Zy9taXBzL2lyaXM1LmgiIDIKIyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvY29u ZmlnL21pcHMvbWlwcy5oIiAxCiMgMjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9j b25maWcvbWlwcy9taXBzLmgiCmV4dGVybiBjaGFyICphc21fZmlsZV9uYW1lOwpleHRlcm4gY2hh ciBjYWxsX3VzZWRfcmVnc1tdOwpleHRlcm4gaW50IG1heV9jYWxsX2FsbG9jYTsKZXh0ZXJuIGNo YXIgKipzYXZlX2FyZ3Y7CmV4dGVybiBpbnQgdGFyZ2V0X2ZsYWdzOwoKCgoKZW51bSBjbXBfdHlw ZSB7CiAgQ01QX1NJLAogIENNUF9ESSwKICBDTVBfU0YsCiAgQ01QX0RGLAogIENNUF9NQVgKfTsK CgplbnVtIGRlbGF5X3R5cGUgewogIERFTEFZX05PTkUsCiAgREVMQVlfTE9BRCwKICBERUxBWV9I SUxPLAogIERFTEFZX0ZDTVAKfTsKCgoKCgoKZW51bSBwcm9jZXNzb3JfdHlwZSB7CiAgUFJPQ0VT U09SX0RFRkFVTFQsCiAgUFJPQ0VTU09SX1IzMDAwLAogIFBST0NFU1NPUl9SMzkwMCwKICBQUk9D RVNTT1JfUjYwMDAsCiAgUFJPQ0VTU09SX1I0MDAwLAogIFBST0NFU1NPUl9SNDEwMCwKICBQUk9D RVNTT1JfUjQzMDAsCiAgUFJPQ0VTU09SX1I0NjAwLAogIFBST0NFU1NPUl9SNDY1MCwKICBQUk9D RVNTT1JfUjUwMDAsCiAgUFJPQ0VTU09SX1I4MDAwLAogIFBST0NFU1NPUl9SNEtDLAogIFBST0NF U1NPUl9SNUtDLAogIFBST0NFU1NPUl9SMjBLQwp9OwojIDEwNCAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL21pcHMuaCIKZW51bSBtaXBzX2FiaWNhbGxzX3R5cGUg ewogIE1JUFNfQUJJQ0FMTFNfTk8sCiAgTUlQU19BQklDQUxMU19ZRVMKfTsKCgoKCgoKCmVudW0g YmxvY2tfbW92ZV90eXBlIHsKICBCTE9DS19NT1ZFX05PUk1BTCwKICBCTE9DS19NT1ZFX05PVF9M QVNULAogIEJMT0NLX01PVkVfTEFTVAp9OwoKZXh0ZXJuIGNoYXIgbWlwc19yZWdfbmFtZXNbXVs4 XTsKZXh0ZXJuIGNoYXIgbWlwc19wcmludF9vcGVyYW5kX3B1bmN0WzI1Nl07CmV4dGVybiBjb25z dCBjaGFyICpjdXJyZW50X2Z1bmN0aW9uX2ZpbGU7CmV4dGVybiBpbnQgbnVtX3NvdXJjZV9maWxl bmFtZXM7CmV4dGVybiBpbnQgaW5zaWRlX2Z1bmN0aW9uOwpleHRlcm4gaW50IGlnbm9yZV9saW5l X251bWJlcjsKZXh0ZXJuIGludCBmaWxlX2luX2Z1bmN0aW9uX3dhcm5pbmc7CmV4dGVybiBpbnQg c2RiX2xhYmVsX2NvdW50OwpleHRlcm4gaW50IHNkYl9iZWdpbl9mdW5jdGlvbl9saW5lOwpleHRl cm4gaW50IG1pcHNfc2VjdGlvbl90aHJlc2hvbGQ7CmV4dGVybiBpbnQgZ19zd2l0Y2hfdmFsdWU7 CmV4dGVybiBpbnQgZ19zd2l0Y2hfc2V0OwpleHRlcm4gaW50IHN5bV9saW5lbm87CmV4dGVybiBp bnQgc2V0X25vcmVvcmRlcjsKZXh0ZXJuIGludCBzZXRfbm9tYWNybzsKZXh0ZXJuIGludCBzZXRf bm9hdDsKZXh0ZXJuIGludCBzZXRfdm9sYXRpbGU7CmV4dGVybiBpbnQgbWlwc19icmFuY2hfbGlr ZWx5OwpleHRlcm4gaW50IG1pcHNfZGJ4X3JlZ25vW107CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAq YnJhbmNoX2NtcFsyXTsKZXh0ZXJuIGVudW0gY21wX3R5cGUgYnJhbmNoX3R5cGU7CmV4dGVybiBl bnVtIHByb2Nlc3Nvcl90eXBlIG1pcHNfYXJjaDsKZXh0ZXJuIGVudW0gcHJvY2Vzc29yX3R5cGUg bWlwc190dW5lOwpleHRlcm4gZW51bSBtaXBzX2FiaWNhbGxzX3R5cGUgbWlwc19hYmljYWxsczsK ZXh0ZXJuIGludCBtaXBzX2lzYTsKZXh0ZXJuIGludCBtaXBzMTY7CmV4dGVybiBpbnQgbWlwczE2 X2hhcmRfZmxvYXQ7CmV4dGVybiBpbnQgbWlwc19lbnRyeTsKZXh0ZXJuIGNvbnN0IGNoYXIgKm1p cHNfY3B1X3N0cmluZzsKZXh0ZXJuIGNvbnN0IGNoYXIgKm1pcHNfYXJjaF9zdHJpbmc7CmV4dGVy biBjb25zdCBjaGFyICptaXBzX3R1bmVfc3RyaW5nOwpleHRlcm4gY29uc3QgY2hhciAqbWlwc19p c2Ffc3RyaW5nOwpleHRlcm4gY29uc3QgY2hhciAqbWlwc19hYmlfc3RyaW5nOwpleHRlcm4gY29u c3QgY2hhciAqbWlwc19lbnRyeV9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX25vX21p cHMxNl9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9z dHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX2NhY2hlX2ZsdXNoX2Z1bmM7CmV4dGVybiBp bnQgbWlwc19zcGxpdF9hZGRyZXNzZXM7CmV4dGVybiBpbnQgZHNsb3RzX2xvYWRfdG90YWw7CmV4 dGVybiBpbnQgZHNsb3RzX2xvYWRfZmlsbGVkOwpleHRlcm4gaW50IGRzbG90c19qdW1wX3RvdGFs OwpleHRlcm4gaW50IGRzbG90c19qdW1wX2ZpbGxlZDsKZXh0ZXJuIGludCBkc2xvdHNfbnVtYmVy X25vcHM7CmV4dGVybiBpbnQgbnVtX3JlZnNbM107CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqbWlw c19sb2FkX3JlZzsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICptaXBzX2xvYWRfcmVnMjsKZXh0ZXJu IHN0cnVjdCBydHhfZGVmICptaXBzX2xvYWRfcmVnMzsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICpt aXBzX2xvYWRfcmVnNDsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICplbWJlZGRlZF9waWNfZm5hZGRy X3J0eDsKZXh0ZXJuIGludCBtaXBzX3N0cmluZ19sZW5ndGg7CmV4dGVybiBzdHJ1Y3QgcnR4X2Rl ZiAqbWlwczE2X2dwX3BzZXVkb19ydHg7CgoKZXh0ZXJuIHZvaWQgcmRhdGFfc2VjdGlvbiAodm9p ZCk7CmV4dGVybiB2b2lkIHNkYXRhX3NlY3Rpb24gKHZvaWQpOwpleHRlcm4gdm9pZCBzYnNzX3Nl Y3Rpb24gKHZvaWQpOwojIDg1MyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZp Zy9taXBzL21pcHMuaCIKZXh0ZXJuIGludCBtaXBzX2FiaTsKIyAxOTE5ICIuLi8uLi9lZ2NjLTMu MS1DVlMyMDAyMDQxOC9nY2MvY29uZmlnL21pcHMvbWlwcy5oIgpleHRlcm4gY2hhciBtaXBzX2hh cmRfcmVnbm9fbW9kZV9va1tdWzc2XTsKIyAyMDQzICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx OC9nY2MvY29uZmlnL21pcHMvbWlwcy5oIgplbnVtIHJlZ19jbGFzcwp7CiAgTk9fUkVHUywKICBN MTZfTkFfUkVHUywKICBNMTZfUkVHUywKICBUX1JFRywKICBNMTZfVF9SRUdTLAogIEdSX1JFR1Ms CiAgRlBfUkVHUywKICBISV9SRUcsCiAgTE9fUkVHLAogIEhJTE9fUkVHLAogIE1EX1JFR1MsCiAg SElfQU5EX0dSX1JFR1MsCiAgTE9fQU5EX0dSX1JFR1MsCiAgSElMT19BTkRfR1JfUkVHUywKICBI SV9BTkRfRlBfUkVHUywKICBTVF9SRUdTLAogIEFMTF9SRUdTLAogIExJTV9SRUdfQ0xBU1NFUwp9 OwojIDIxMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9taXBz LmgiCmV4dGVybiBjb25zdCBlbnVtIHJlZ19jbGFzcyBtaXBzX3JlZ25vX3RvX2NsYXNzW107CiMg MjIwMiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL21pcHMuaCIK ZXh0ZXJuIGVudW0gcmVnX2NsYXNzIG1pcHNfY2hhcl90b19jbGFzc1syNTZdOwojIDI0NDMgIi4u Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9taXBzLmgiCnN0cnVjdCBt aXBzX2ZyYW1lX2luZm8KewogIGxvbmcgdG90YWxfc2l6ZTsKICBsb25nIHZhcl9zaXplOwogIGxv bmcgYXJnc19zaXplOwogIGxvbmcgZXh0cmFfc2l6ZTsKICBpbnQgZ3BfcmVnX3NpemU7CiAgaW50 IGZwX3JlZ19zaXplOwogIGxvbmcgbWFzazsKICBsb25nIGZtYXNrOwogIGxvbmcgZ3Bfc2F2ZV9v ZmZzZXQ7CiAgbG9uZyBmcF9zYXZlX29mZnNldDsKICBsb25nIGdwX3NwX29mZnNldDsKICBsb25n IGZwX3NwX29mZnNldDsKICBpbnQgaW5pdGlhbGl6ZWQ7CiAgaW50IG51bV9ncDsKICBpbnQgbnVt X2ZwOwogIGxvbmcgaW5zbnNfbGVuOwp9OwoKZXh0ZXJuIHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8g Y3VycmVudF9mcmFtZV9pbmZvOwojIDI3NzMgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2dj Yy9jb25maWcvbWlwcy9taXBzLmgiCnR5cGVkZWYgc3RydWN0IG1pcHNfYXJncyB7CiAgaW50IGdw X3JlZ19mb3VuZDsKICB1bnNpZ25lZCBpbnQgYXJnX251bWJlcjsKICB1bnNpZ25lZCBpbnQgYXJn X3dvcmRzOwogIHVuc2lnbmVkIGludCBmcF9hcmdfd29yZHM7CiAgaW50IGxhc3RfYXJnX2ZwOwog IGludCBmcF9jb2RlOwogIHVuc2lnbmVkIGludCBudW1fYWRqdXN0czsKCgoKCiAgaW50IHByb3Rv dHlwZTsKICBzdHJ1Y3QgcnR4X2RlZiAqYWRqdXN0WzQqMl07Cn0gQ1VNVUxBVElWRV9BUkdTOwoj IDMxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvY29uZmlnL21pcHMvaXJpczUuaCIg MgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9pcmlzNC5o IiAxCiMgMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9pcmlz NS5oIiAyCiMgMzQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9p cmlzNi5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz L2FiaTY0LmgiIDEKIyAzNSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t aXBzL2lyaXM2LmgiIDIKIyAxNyAiaGNvbmZpZy5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL2RlZmF1bHRzLmgiIDEKIyAxOCAiaGNvbmZpZy5oIiAyCiMgNTQgIi4uLy4u L2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiAyCiMgMSAiLi4vLi4vZWdjYy0z LjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAxCiMgMzMgIi4uLy4uL2VnY2MtMy4xLUNWUzIw MDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICJpbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiaW5j bHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0 OwojIDExMCAiaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xp c3Q7CiMgMzQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDQ3 ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiCiMgMSAiaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMTQ3ICJpbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRp ZmZfdDsKIyAyMDEgImluY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6 ZV90OwojIDI5NCAiaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7 CiMgNDggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgoKCiMgMSAi aW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyMCAiaW5jbHVkZS9zdGRpby5oIiAzCiNpZGVudCAiJFJl dmlzaW9uOiAxLjY1ICQiCiMgNTAgImluY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9zdGFuZGFyZHMuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS9zdGFuZGFyZHMuaCIgMwojaWRl bnQgIiRJZDogc3RhbmRhcmRzLmgsdiAxLjcgMTk5NS8xMi8zMCAwMjo0OToxOCBqd2FnIEV4cCAk IgojIDUxICJpbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zZ2lkZWZzLmgi IDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAx LjExICQiCiMgMTM2ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCnR5cGVkZWYgaW50IF9faW50 MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBfX3VpbnQzMl90OwojIDE4MyAiL3Vzci9pbmNsdWRlL3Nn aWRlZnMuaCIgMwp0eXBlZGVmIGxvbmcgbG9uZyBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIF9fdWludDY0X3Q7CiMgMjE5ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCnR5 cGVkZWYgX19pbnQzMl90IF9fcHNpbnRfdDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fcHN1bnNpZ25l ZF90OwojIDI0MSAiL3Vzci9pbmNsdWRlL3NnaWRlZnMuaCIgMwp0eXBlZGVmIF9faW50MzJfdCBf X3NjaW50X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3NjdW5zaWduZWRfdDsKIyA1MiAiaW5jbHVk ZS9zdGRpby5oIiAyIDMKIyA2NSAiaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX19pbnQ2NF90 IGZwb3NfdDsKIyA3NCAiaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX19pbnQ2NF90IGZwb3M2 NF90OwojIDgzICJpbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBjaGFyICpfX25vdF92YV9saXN0 X187CiMgMTUzICJpbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKIyAxNjMgImluY2x1 ZGUvc3RkaW8uaCIgMwpfX2ZpbGVfcwoKewoKICAgICAgICBpbnQgX2NudDsKCgoKCiAgICAgICAg dW5zaWduZWQgY2hhciAqX3B0cjsKICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsKCgoKCiAg ICAgICAgdW5zaWduZWQgY2hhciBfZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIF9vX2ZpbGU7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgX2ZpbGU7CgoKCgp9IEZJTEU7CgpleHRlcm4gRklMRSBf X2lvYlsxMDBdOwpleHRlcm4gRklMRSAqX2xhc3RidWY7CmV4dGVybiB1bnNpZ25lZCBjaGFyICpf YnVmZW5kdGFiW107CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsKCmV4 dGVybiBpbnQgcmVtb3ZlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBj aGFyICp0bXBuYW0oY2hhciAqKTsKZXh0ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGlu dCBmZmx1c2goRklMRSAqKTsKZXh0ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IEZJTEUgKik7CmV4dGVybiB2b2lkIHNldGJ1ZihGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQg c2V0dmJ1ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwoKZXh0ZXJuIGludCBmcHJpbnRm KEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBj b25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7 CgpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50 ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29u c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25zdCBjaGFy ICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICosIGNvbnN0IGNo YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwojIDIyNyAiaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZmdldGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIgKmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICop OwpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBj aGFyICosIEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0YyhGSUxFICopOwpleHRlcm4gaW50IGdldGNo YXIodm9pZCk7CmV4dGVybiBjaGFyICpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQgcHV0YyhpbnQs IEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcihpbnQpOwpleHRlcm4gaW50IHB1dHMoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGludCB1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZy ZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2ln bmVkIGZyZWFkCmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXpl X3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIGZ3cml0ZQpleHRlcm4gaW50IGZn ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklMRSAqLCBsb25nLCBp bnQpOwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBs b25nIGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJld2luZChGSUxFICopOwpleHRlcm4gdm9p ZCBjbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50IGZlb2YoRklMRSAqKTsKZXh0ZXJuIGludCBm ZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgpleHRlcm4g aW50IF9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgX19mbHNidWYoaW50LCBGSUxFICopOwoK CgpleHRlcm4gRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBmaWxl bm8oRklMRSAqKTsKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50 IGZ0cnlsb2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxFICopOwpl eHRlcm4gaW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjX3VubG9ja2Vk KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkKHZvaWQpOwpleHRlcm4g aW50IHB1dGNoYXJfdW5sb2NrZWQoaW50KTsKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsKCgoKIyAxICIu Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAzNiAiLi4v Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gY2hhciAq b3B0YXJnOwojIDUwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5o IiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBp bnQgb3B0b3B0OwojIDgyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9w dC5oIiAzCnN0cnVjdCBvcHRpb24KewoKICBjb25zdCBjaGFyICpuYW1lOwoKCgoKCiAgaW50IGhh c19hcmc7CiAgaW50ICpmbGFnOwogIGludCB2YWw7Cn07CiMgMTEyICIuLi8uLi9lZ2NjLTMuMS1D VlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgYXJn YywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKnNob3J0b3B0cyk7CgoKCgoKZXh0ZXJu IGludCBnZXRvcHRfbG9uZyAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFy ICpzaG9ydG9wdHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24g KmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQpOwpleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKGlu dCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpzaG9ydG9wdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CgoKZXh0ZXJuIGludCBfZ2V0 b3B0X2ludGVybmFsIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRvcHRzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvbmdfb25seSk7CiMgMjc5ICJpbmNsdWRl L3N0ZGlvLmgiIDIgMwpleHRlcm4gY2hhciAqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gY2hhciAq Y3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0dyhGSUxFICopOwpleHRlcm4gaW50IHB1dHcoaW50LCBG SUxFICopOwoKCgoKCmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0 ZW1wKGNoYXIgKik7CmV4dGVybiBpbnQgc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOwpl eHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hh ciAqKTsKCgpleHRlcm4gaW50IGZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90ICopOwoKZXh0ZXJu IGludCBmc2VlazY0KEZJTEUgKiwgX19pbnQ2NF90LCBpbnQpOwpleHRlcm4gaW50IGZzZXRwb3M2 NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwoKZXh0ZXJuIF9faW50NjRfdCBmdGVsbDY0KEZJ TEUgKik7CgoKCmV4dGVybiBpbnQgX19zZW1wdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBf X3NlbWdldGMoRklMRSAqKTsKZXh0ZXJuIGludCBfX3VzX3JzdGhyZWFkX3N0ZGlvOwoKCgpleHRl cm4gY2hhciAqY3Rlcm1pZF9yKGNoYXIgKik7CiMgNTEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9zeXN0ZW0uaCIgMgojIDExMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj L3N5c3RlbS5oIgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvc2FmZS1j dHlwZS5oIiAxCiMgNDQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvc2FmZS1j dHlwZS5oIgplbnVtIHsKCiAgX3NjaF9pc2JsYW5rID0gMHgwMDAxLAogIF9zY2hfaXNjbnRybCA9 IDB4MDAwMiwKICBfc2NoX2lzZGlnaXQgPSAweDAwMDQsCiAgX3NjaF9pc2xvd2VyID0gMHgwMDA4 LAogIF9zY2hfaXNwcmludCA9IDB4MDAxMCwKICBfc2NoX2lzcHVuY3QgPSAweDAwMjAsCiAgX3Nj aF9pc3NwYWNlID0gMHgwMDQwLAogIF9zY2hfaXN1cHBlciA9IDB4MDA4MCwKICBfc2NoX2lzeGRp Z2l0ID0gMHgwMTAwLAoKCiAgX3NjaF9pc2lkc3QgPSAweDAyMDAsCiAgX3NjaF9pc3ZzcCA9IDB4 MDQwMCwKICBfc2NoX2lzbnZzcCA9IDB4MDgwMCwKCgogIF9zY2hfaXNhbHBoYSA9IF9zY2hfaXN1 cHBlcnxfc2NoX2lzbG93ZXIsCiAgX3NjaF9pc2FsbnVtID0gX3NjaF9pc2FscGhhfF9zY2hfaXNk aWdpdCwKICBfc2NoX2lzaWRudW0gPSBfc2NoX2lzaWRzdHxfc2NoX2lzZGlnaXQsCiAgX3NjaF9p c2dyYXBoID0gX3NjaF9pc2FsbnVtfF9zY2hfaXNwdW5jdCwKICBfc2NoX2lzY3Bwc3AgPSBfc2No X2lzdnNwfF9zY2hfaXNudnNwLAogIF9zY2hfaXNiYXNpYyA9IF9zY2hfaXNwcmludHxfc2NoX2lz Y3Bwc3AKCn07CgoKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IF9zY2hfaXN0YWJsZVsyNTZd OwojIDk3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL3NhZmUtY3R5cGUuaCIK ZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX3NjaF90b3VwcGVyWzI1Nl07CmV4dGVybiBjb25z dCB1bnNpZ25lZCBjaGFyIF9zY2hfdG9sb3dlclsyNTZdOwojIDExMSAiLi4vLi4vZWdjYy0zLjEt Q1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAyCgojIDEgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDEg MwojIDM2ICJpbmNsdWRlL3N5cy90eXBlcy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjEwMSAk IgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyB1bG9uZ190OwoKCnR5cGVkZWYgY2hhciAqIGFkZHJfdDsKdHlwZWRlZiBjaGFyICog Y2FkZHJfdDsKCnR5cGVkZWYgX19pbnQ2NF90IGRhZGRyX3Q7CgoKCnR5cGVkZWYgbG9uZyBwZ25v X3Q7CnR5cGVkZWYgX191aW50MzJfdCBwZm5fdDsKdHlwZWRlZiBzaG9ydCBjbnRfdDsKCgoKCnR5 cGVkZWYgX19pbnQzMl90IHBnY250X3Q7Cgp0eXBlZGVmIGVudW0geyBCX0ZBTFNFLCBCX1RSVUUg fSBib29sZWFuX3Q7CiMgNzYgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBsb25nIGlk X3Q7CiMgODkgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bG9uZ190IG1ham9yX3Q7 CnR5cGVkZWYgdWxvbmdfdCBtaW5vcl90OwojIDEwOCAiaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0 eXBlZGVmIHVzaG9ydF90IG9fbW9kZV90Owp0eXBlZGVmIHNob3J0IG9fZGV2X3Q7CnR5cGVkZWYg dXNob3J0X3Qgb191aWRfdDsKdHlwZWRlZiBvX3VpZF90IG9fZ2lkX3Q7CnR5cGVkZWYgc2hvcnQg b19ubGlua190Owp0eXBlZGVmIHNob3J0IG9fcGlkX3Q7CnR5cGVkZWYgX191aW50MzJfdCBvX2lu b190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBtb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBkZXZfdDsKdHlwZWRlZiBsb25nIHVpZF90Owp0eXBlZGVmIGxvbmcgZ2lkX3Q7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBubGlua190Owp0eXBlZGVmIGxvbmcgcGlkX3Q7CiMgMTM0ICJpbmNsdWRl L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBpbm9fdDsKCgoKdHlwZWRlZiBfX3Vp bnQ2NF90IGlubzY0X3Q7CgoKCgoKCnR5cGVkZWYgX19pbnQ2NF90IG9mZl90OwoKCgp0eXBlZGVm IF9faW50NjRfdCBvZmY2NF90OwoKdHlwZWRlZiBfX3NjaW50X3QgX19zY29mZl90OwoKdHlwZWRl ZiBfX3Njb2ZmX3Qgc2NvZmZfdDsKCgoKdHlwZWRlZiBfX2ludDY0X3QgYmxrY250X3Q7CnR5cGVk ZWYgX191aW50NjRfdCBmc2Jsa2NudF90Owp0eXBlZGVmIF9fdWludDY0X3QgZnNmaWxjbnRfdDsK CgoKCgoKdHlwZWRlZiBsb25nIHN3YmxrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBwYWRkcl90 Owp0eXBlZGVmIGludCBrZXlfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVzZV90Owp0eXBlZGVm IHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQgaW5kZXhfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgbG9ja190Owp0eXBlZGVmIHNpZ25lZCBjaGFyIGNwdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQg Y2hhciBwcmlfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IGFjY3VtX3Q7CnR5cGVkZWYgX19pbnQ2NF90 IHByaWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgYXNoX3Q7CiMgMjAwICJpbmNsdWRlL3N5cy90eXBl cy5oIiAzCnR5cGVkZWYgaW50IHNzaXplX3Q7CiMgMjEwICJpbmNsdWRlL3N5cy90eXBlcy5oIiAz CnR5cGVkZWYgbG9uZyB0aW1lX3Q7CiMgMjIwICJpbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk ZWYgbG9uZyBjbG9ja190OwojIDI1MSAiaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGlu dCBjbG9ja2lkX3Q7CgoKCnR5cGVkZWYgaW50IHRpbWVyX3Q7CiMgMjY0ICJpbmNsdWRlL3N5cy90 eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHVzZWNvbmRzX3Q7CgoKCgoKCnR5cGVkZWYg X19zY3Vuc2lnbmVkX3QgYml0bnVtX3Q7CnR5cGVkZWYgX19zY3Vuc2lnbmVkX3QgYml0bGVuX3Q7 CgoKdHlwZWRlZiBpbnQgcHJvY2Vzc29yaWRfdDsKdHlwZWRlZiBpbnQgdG9pZF90Owp0eXBlZGVm IGxvbmcgKnFhZGRyX3Q7CnR5cGVkZWYgX191aW50MzJfdCBpbnN0X3Q7CiMgMjg3ICJpbmNsdWRl L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBtYWNocmVnX3Q7CiMgMjk3ICJpbmNs dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBmcHJlZ190OwojIDMwOCAiaW5j bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBpbnQzMl90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKdHlwZWRlZiBfX2ludDY0X3QgaW50NjRfdDsK dHlwZWRlZiBfX3VpbnQ2NF90IHVpbnQ2NF90Owp0eXBlZGVmIF9faW50NjRfdCBpbnRtYXhfdDsK dHlwZWRlZiBfX3VpbnQ2NF90IHVpbnRtYXhfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBpbnQgaW50 cHRyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OwoKCgoKCgp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90 Owp0eXBlZGVmIF9fdWludDMyX3QgdV9pbnQzMl90OwojIDM0OSAiaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIGxvbmcgaG9zdGlkX3Q7CiMgMzY0ICJpbmNsdWRlL3N5cy90eXBlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9ic2RfdHlwZXMuaCIgMSAzCiMgMjEgIi91c3IvaW5jbHVk ZS9zeXMvYnNkX3R5cGVzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMiAkIgoKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7IGludCByWzFdOyB9ICogcGh5c2FkcjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVuY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKdHlwZWRlZiBzdHJ1 Y3QgX3F1YWQgeyBsb25nIHZhbFsyXTsgfSBxdWFkOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiNpZGVu dCAiJFJldmlzaW9uOiAxLjEwICQiCiMgNTEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK dHlwZWRlZiBsb25nIGZkX21hc2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVmZF9tYXNrX3Q7 CiMgNjIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0 IHsKICAgICAgICBmZF9tYXNrX3QgZmRzX2JpdHNbKCgoMTAyNCkrKCgoaW50KShzaXplb2YoZmRf bWFza190KSAqIDgpKS0xKSkvKChpbnQpKHNpemVvZihmZF9tYXNrX3QpICogOCkpKV07Cn0gZmRf c2V0OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKCgoKCgojaWRlbnQgIiRS ZXZpc2lvbjogMS4zNiAkIgojIDU3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHZv aWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1l bW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHko Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIg Kik7CmV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpl eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpl eHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0 ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0 cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShj aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2 b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGlu dCk7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiNw cmFnbWEgaW50X3RvX3Vuc2lnbmVkIHN0cmNzcG4KZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBjaGFyICos IGludCk7CmV4dGVybiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK I3ByYWdtYSBpbnRfdG9fdW5zaWduZWQgc3Ryc3BuCmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJu IGNoYXIgKnN0cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7 CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIHN0cmxlbgoKCmV4dGVybiBpbnQgZmZzKGludCk7Cgpl eHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g aW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCgpl eHRlcm4gY2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2tf cihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CiMgNzEgIi91c3IvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDIgMwojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYg bG9uZyBmZF9tYXNrOwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2JzZF90eXBlcy5oIiAyIDMKIyAz NjUgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCnR5cGVkZWYgX191aW50NjRfdCBrX3Np Z3NldF90OwojIDExMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAy CgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKCgoKCgojaWRlbnQgIiRSZXZpc2lvbjog MS4yNCAkIgojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9z eXMvZXJybm8uaCIgMSAzCiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMwojaWRlbnQg IiRSZXZpc2lvbjogMy4zNCAkIgojIDM4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCgoKCgpl eHRlcm4gY2hhciAqIHN5c19lcnJsaXN0W107CmV4dGVybiBpbnQgc3lzX25lcnI7CgpleHRlcm4g aW50IG9zZXJyb3Iodm9pZCk7CmV4dGVybiBpbnQgc2V0b3NlcnJvcihpbnQpOwpleHRlcm4gaW50 IGdvc2Vycm9yKHZvaWQpOwojIDU5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gaW50 IGVycm5vOwojIDExNSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAy CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDEgMwojIDkgIi91c3IvaW5jbHVk ZS9zdHJpbmdzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMTEgJCIKIyAyOCAiL3Vzci9pbmNs dWRlL3N0cmluZ3MuaCIgMwpleHRlcm4gaW50IGJjbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk ICosIHNpemVfdCk7CmV4dGVybiB2b2lkIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXpl X3QpOwpleHRlcm4gdm9pZCBiemVybyh2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICppbmRl eChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpyaW5kZXgoY29uc3QgY2hhciAqLCBp bnQpOwojIDEyMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAyCiMg MTM0ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiCiMgMSAiaW5jbHVk ZS9zdGRsaWIuaCIgMSAzCiMgMTUgImluY2x1ZGUvc3RkbGliLmgiIDMKI2lkZW50ICIkUmV2aXNp b246IDEuNTcgJCIKIyA5OSAiaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdCB7CiAg ICAgICAgIGludCBxdW90OwogICAgICAgICBpbnQgcmVtOwogICAgICAgIH0gZGl2X3Q7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgIGxvbmcgcXVvdDsKICAgICAgICAgbG9uZyByZW07CiAgICAg ICAgfSBsZGl2X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICBsb25nIGxvbmcgcXVvdDsK ICAgICAgICAgbG9uZyBsb25nIHJlbTsKICAgICAgICB9IGxsZGl2X3Q7CiMgMTY4ICJpbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVbXTsKCgoKCmV4dGVybiBk b3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIGRvdWJsZSBzdHJ0b2Qo Y29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFy ICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0 IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRlcm4gdm9p ZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90 KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7 CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgYWJvcnQo dm9pZCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIHZvaWQgZXhp dChpbnQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3lz dGVtKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwg Y29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs CiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKCgoKZXh0 ZXJuIGludCBhYnMoaW50KTsKCgpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxv bmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJu IGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQg bWJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdj aGFyX3QpOwpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBz aXplX3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBz aXplX3QpOwoKCgpleHRlcm4gaW50IHB1dGVudihjb25zdCBjaGFyICopOwpleHRlcm4gZG91Ymxl IGRyYW5kNDgodm9pZCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBbM10p OwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVk IHNob3J0IFszXSk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIGpyYW5k NDgodW5zaWduZWQgc2hvcnQgWzNdKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJu IHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCBpbnQgWzddKTsKZXh0ZXJuIHZvaWQgc2V0a2V5 KGNvbnN0IGNoYXIgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqIHNlZWQ0OCh1bnNpZ25lZCBz aG9ydCBpbnQgWzNdKTsKCgoKCmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJu IGNoYXIgKmVjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0 KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGlu dCwgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICos IGNoYXIgKiopOwpleHRlcm4gaW50IGdyYW50cHQoaW50KTsKZXh0ZXJuIGNoYXIgKmluaXRzdGF0 ZSh1bnNpZ25lZCBpbnQsIGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4 dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CmV4 dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJu IGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGludCB0dHlzbG90 KHZvaWQpOwpleHRlcm4gaW50IHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6 ZV90KTsKCgoKZXh0ZXJuIGludCByYW5kX3IodW5zaWduZWQgaW50ICopOwoKCgoKZXh0ZXJuIGlu dCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CmV4 dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKCmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNo YXIgKik7CmV4dGVybiBpbnQgZ2V0cHcoaW50LCBjaGFyICopOwpleHRlcm4gaW50IGlzYXR0eShp bnQpOwpleHRlcm4gdm9pZCBsM3RvbChsb25nICosIGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJu IHZvaWQgbHRvbDMoY2hhciAqLCBjb25zdCBsb25nICosIGludCk7CmV4dGVybiB2b2lkICptZW1h bGlnbihzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2b2lkIHN3YWIoY29uc3Qgdm9pZCAqLCB2b2lk ICosIHNzaXplX3QpOwpleHRlcm4gY2hhciAqdHR5bmFtZShpbnQpOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgYXRvbGQoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQoY29u c3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7CmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRv dWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3VibGUs IGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBpbnQs IGNoYXIgKik7CgpleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbChjb25zdCBjaGFyICopOwpleHRl cm4gbG9uZyBsb25nIGludCBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoq LCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRpdl90 IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKCgoKZXh0ZXJuIGNoYXIgKmVjdnRfcihkb3Vi bGUsIGludCwgaW50ICosIGludCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqZmN2dF9yKGRvdWJs ZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CgpleHRlcm4gY2hhciAqcWVjdnRfcihsb25n IGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmN2dF9y KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKIyAxMzUgIi4uLy4uL2Vn Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDE1NyAiLi4vLi4vZWdjYy0zLjEt Q1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgojIDEgImluY2x1ZGUvdW5pc3RkLmgiIDEgMwojIDE1 ICJpbmNsdWRlL3VuaXN0ZC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAxLjEwNiAkIgojIDIxMyAi aW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwoj IDIxNCAiaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgpleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBj aGFyICosIGludCk7CmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNpZ25lZCk7CmV4dGVybiBpbnQg Y2hkaXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90 LCBnaWRfdCk7CmV4dGVybiBpbnQgY2xvc2UoaW50KTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hh ciAqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGludCBkdXAoaW50KTsK ZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7 CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29u c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4 dGVybiB2b2lkIF9leGl0KGludCk7CmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwpleHRlcm4gbG9u ZyBmcGF0aGNvbmYoaW50LCBpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVf dCk7CmV4dGVybiBnaWRfdCBnZXRlZ2lkKHZvaWQpOwpleHRlcm4gdWlkX3QgZ2V0ZXVpZCh2b2lk KTsKZXh0ZXJuIGdpZF90IGdldGdpZCh2b2lkKTsKCgoKZXh0ZXJuIGludCBnZXRncm91cHMoaW50 LCBnaWRfdCAqKTsKCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKCgoKZXh0ZXJuIHBpZF90 IGdldHBncnAodm9pZCk7CgpleHRlcm4gcGlkX3QgZ2V0cGlkKHZvaWQpOwpleHRlcm4gcGlkX3Qg Z2V0cHBpZCh2b2lkKTsKZXh0ZXJuIHVpZF90IGdldHVpZCh2b2lkKTsKZXh0ZXJuIGludCBpc2F0 dHkoaW50KTsKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0 ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCk7CmV4dGVybiBsb25nIHBhdGhjb25mKGNv bnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBwYXVzZSh2b2lkKTsKZXh0ZXJuIGludCBwaXBl KGludCAqKTsKZXh0ZXJuIHNzaXplX3QgcmVhZChpbnQsIHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJu IGludCBybWRpcihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHNldGdpZChnaWRfdCk7CmV4dGVy biBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwpleHRlcm4gcGlkX3Qgc2V0c2lkKHZvaWQpOwpl eHRlcm4gaW50IHNldHVpZCh1aWRfdCk7CmV4dGVybiB1bnNpZ25lZCBzbGVlcCh1bnNpZ25lZCk7 CmV4dGVybiBsb25nIHN5c2NvbmYoaW50KTsKZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQpOwpl eHRlcm4gaW50IHRjc2V0cGdycChpbnQsIHBpZF90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50 KTsKZXh0ZXJuIGludCB1bmxpbmsoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNzaXplX3Qgd3JpdGUo aW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CgoKCgoKZXh0ZXJuIGludCBmZGF0YXN5bmMoaW50 KTsKCgoKCgoKZXh0ZXJuIGludCBmc3luYyhpbnQpOwoKCgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0 ZShpbnQsIG9mZl90KTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yKGNoYXIgKiwgc2l6ZV90 KTsKZXh0ZXJuIGludCB0dHluYW1lX3IoaW50LCBjaGFyICosIHNpemVfdCk7CgoKCgoKCgpleHRl cm4gc2l6ZV90IGNvbmZzdHIoaW50LCBjaGFyICosIHNpemVfdCk7CgoKCgoKCmV4dGVybiBpbnQg Y2hyb290KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgbmljZShpbnQpOwpleHRlcm4gY2hhciAq Y3J5cHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBlbmNyeXB0KGNo YXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZv aWQgc3dhYihjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7CgoKCgoKCmV4dGVybiBpbnQg YnJrKHZvaWQgKik7CmV4dGVybiBpbnQgZmNob3duKGludCwgdWlkX3QsIGdpZF90KTsKZXh0ZXJu IGludCBmY2hkaXIoaW50KTsKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplKHZvaWQpOwpleHRlcm4g bG9uZyBnZXRob3N0aWQodm9pZCk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVy biBwaWRfdCBnZXRwZ2lkKHBpZF90KTsKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CmV4dGVy biBjaGFyICpnZXR3ZChjaGFyICopOwpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVp ZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGlu dCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKnNi cmsoc3NpemVfdCk7CgoKCmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwoKZXh0ZXJuIGludCBz ZXRyZWdpZChnaWRfdCwgZ2lkX3QpOwpleHRlcm4gaW50IHNldHJldWlkKHVpZF90LCB1aWRfdCk7 CmV4dGVybiBpbnQgc3ltbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiB2 b2lkIHN5bmModm9pZCk7CmV4dGVybiBpbnQgdHJ1bmNhdGUoY29uc3QgY2hhciAqLCBvZmZfdCk7 CmV4dGVybiB1c2Vjb25kc190IHVhbGFybSh1c2Vjb25kc190LCB1c2Vjb25kc190KTsKZXh0ZXJu IGludCB1c2xlZXAodXNlY29uZHNfdCk7CiMgMzYyICJpbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy biBpbnQgZmF0dGFjaChpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZmRldGFjaChjb25z dCBjaGFyICopOwpleHRlcm4gaW50IGlvY3RsKGludCwgaW50LCAuLi4pOwojIDM3NiAiaW5jbHVk ZS91bmlzdGQuaCIgMwpzdHJ1Y3QgdGltZXZhbDsKZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9z ZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIg MwojaWRlbnQgIkAoIyl1dHMtM2IyOmlvL3Vpby5oCTEuMiIKI2lkZW50ICIkUmV2aXNpb246IDEu OSAkIgojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAzCnR5cGVkZWYgc3RydWN0IGlvdmVj IHsKICAgICAgICB2b2lkICppb3ZfYmFzZTsKICAgICAgICBzaXplX3QgaW92X2xlbjsKfSBpb3Zl Y190OwoKCmV4dGVybiBzc2l6ZV90IHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGlu dCk7CmV4dGVybiBzc2l6ZV90IHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQp OwojIDM4NSAiaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3V0aW1lLmgi IDEgMwoKCgoKCiNpZGVudCAiJFJldmlzaW9uOiAxLjkgJCIKIyAzNCAiL3Vzci9pbmNsdWRlL3V0 aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3V0aW1lLmgiIDEgMwojIDE3ICIvdXNyL2lu Y2x1ZGUvc3lzL3V0aW1lLmgiIDMKc3RydWN0IHV0aW1idWYgewogICAgICAgIHRpbWVfdCBhY3Rp bWU7CiAgICAgICAgdGltZV90IG1vZHRpbWU7Cn07CiMgMzUgIi91c3IvaW5jbHVkZS91dGltZS5o IiAyIDMKCmV4dGVybiBpbnQgdXRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdXRpbWJ1 ZiAqKTsKIyAzODYgImluY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9yZV9j b21wLmgiIDEgMwoKCgoKCiNpZGVudCAiJFJldmlzaW9uOiAxLjEgJCIKIyAyNSAiL3Vzci9pbmNs dWRlL3JlX2NvbXAuaCIgMwpleHRlcm4gY2hhciAqcmVfY29tcChjb25zdCBjaGFyICopOwpleHRl cm4gaW50IHJlX2V4ZWMoY29uc3QgY2hhciAqKTsKIyAzODcgImluY2x1ZGUvdW5pc3RkLmgiIDIg MwpzdHJ1Y3QgYWNjdF9zcGk7CmV4dGVybiBpbnQgYWNjdChjb25zdCBjaGFyICopOwpleHRlcm4g aW50IEJTRGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKZXh0ZXJuIGludCBCU0Rk dXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBCU0RmY2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOwpl eHRlcm4gaW50IEJTRGdldHBncnAoaW50KTsKZXh0ZXJuIGludCBCU0RzZXRwZ3JwKGludCwgaW50 KTsKZXh0ZXJuIGludCBCU0RzZXRncm91cHMoaW50LCBpbnQgKik7CmV4dGVybiBpbnQgQlNEZ2V0 Z3JvdXBzKGludCwgaW50ICopOwoKZXh0ZXJuIHZvaWQgYnNldChjaGFyICosIGJpdG51bV90KTsK ZXh0ZXJuIHZvaWQgYmNscihjaGFyICosIGJpdG51bV90KTsKZXh0ZXJuIGludCBidHN0KGNoYXIg KiwgYml0bnVtX3QpOwpleHRlcm4gdm9pZCBiZnNldChjaGFyICosIGJpdG51bV90LCBiaXRsZW5f dCk7CmV4dGVybiB2b2lkIGJmY2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJu IGJpdGxlbl90IGJmdHN0c2V0KGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGJp dGxlbl90IGJmdHN0Y2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKCmV4dGVybiBpbnQg X2RhZW1vbml6ZShpbnQsIGludCwgaW50LCBpbnQpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4 dGVybiBpbnQgZnRydW5jYXRlNjQoaW50LCBvZmY2NF90KTsKZXh0ZXJuIGFzaF90IGdldGFzaCh2 b2lkKTsKZXh0ZXJuIGludCBnZXRkdGFibGVoaSh2b2lkKTsKZXh0ZXJuIGludCBnZXRkb21haW5u YW1lKGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIGludCk7CmV4 dGVybiBwcmlkX3QgZ2V0cHJpZCh2b2lkKTsKZXh0ZXJuIGNoYXIgKl9nZXRwdHkoaW50ICosIGlu dCwgbW9kZV90LCBpbnQpOwpleHRlcm4gaW50IGdldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7 CmV4dGVybiBjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g b2ZmNjRfdCBsc2VlazY0KGludCwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIGludCBtaW5jb3JlKGNh ZGRyX3QsIHNpemVfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBtcGluKHZvaWQgKiwgc2l6ZV90KTsK ZXh0ZXJuIGludCBtdW5waW4odm9pZCAqLCBzaXplX3QpOwpleHRlcm4gaW50IG5ld2FycmF5c2Vz cyh2b2lkKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGVsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCAuLi4pOwpleHRlcm4gcGlkX3QgcGNyZWF0ZWxwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCAuLi4pOwpleHRlcm4gcGlkX3QgcGNyZWF0ZXYoY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAq KTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2ZShjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICosIGNo YXIgKmNvbnN0ICopOwpleHRlcm4gcGlkX3QgcGNyZWF0ZXZwKGNvbnN0IGNoYXIgKiwgY2hhciAq Y29uc3QgKik7CmV4dGVybiBzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZjY0 X3QpOwpleHRlcm4gaW50IHByb2ZpbCh1bnNpZ25lZCBzaG9ydCAqLCBzaXplX3QsIGludCwgdW5z aWduZWQgaW50KTsKZXh0ZXJuIGludCBwdHJhY2UoaW50LCBwaWRfdCwgaW50LCBpbnQpOwpleHRl cm4gc3NpemVfdCBwd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgb2ZmNjRfdCk7CmV4 dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGZsb2F0 IF9zcXJ0X3MoZmxvYXQpOwpleHRlcm4gZG91YmxlIF9zcXJ0X2QoZG91YmxlKTsKZXh0ZXJuIGlu dCBzZXRhc2goYXNoX3QpOwpleHRlcm4gaW50IHNldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7 CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZShjb25zdCBjaGFyICosIGludCk7CgoKCmV4dGVybiBp bnQgc2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QgKik7CgpleHRlcm4gaW50IHNldGhvc3RpZChp bnQpOwpleHRlcm4gaW50IHNldGhvc3RuYW1lKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGlu dCBzZXRldWlkKHVpZF90KTsKZXh0ZXJuIGludCBzZXRydWlkKHVpZF90KTsKZXh0ZXJuIGludCBz ZXRlZ2lkKGdpZF90KTsKZXh0ZXJuIGludCBzZXRyZ2lkKGdpZF90KTsKZXh0ZXJuIGludCBzZXRw cmlkKHByaWRfdCk7CmV4dGVybiBpbnQgc2dpa29wdChjb25zdCBjaGFyICosIGNoYXIgKiwgaW50 KTsKZXh0ZXJuIGxvbmcgc2dpbmFwKGxvbmcpOwpleHRlcm4gaW50IHN0aW1lKGNvbnN0IHRpbWVf dCAqKTsKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKZXh0ZXJuIG9mZjY0X3QgdGVsbDY0KGludCk7 CmV4dGVybiBpbnQgdHJ1bmNhdGU2NChjb25zdCBjaGFyICosIG9mZjY0X3QpOwpleHRlcm4gaW50 IHZoYW5ndXAodm9pZCk7CiMgMTU4ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lz dGVtLmgiIDIKCgoKIyAxICJpbmNsdWRlL3N5cy9wYXJhbS5oIiAxIDMKIyA0NyAiaW5jbHVkZS9z eXMvcGFyYW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDEgMwojIDE2ICIv dXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjEzMCAkIgoj IDEyMCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHZvaWQgKCpTSUdfUEYp ICgpOwojIDEzOSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHVuaW9uIHNp Z3ZhbCB7CiAgICAgICAgaW50IHNpdmFsX2ludDsKICAgICAgICB2b2lkICpzaXZhbF9wdHI7Cn0g c2lndmFsX3Q7CiMgMTUyICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCnR5cGVkZWYgdW5p b24gbm90aWZ5aW5mbyB7CiAgICAgICAgaW50IG5pc2lnbm87CiAgICAgICAgdm9pZCAoKm5pZnVu YykgKHNpZ3ZhbF90KTsKfSBub3RpZnlpbmZvX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7 CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsKICAgICAgICBub3RpZnlpbmZvX3Qgc2lnZXZfbm90 aWZ5aW5mbzsKICAgICAgICBzaWd2YWxfdCBzaWdldl92YWx1ZTsKICAgICAgICB1bnNpZ25lZCBs b25nIHNpZ2V2X3Jlc2VydmVkWzEzXTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpZ2V2X3BhZFs2 XTsKfSBzaWdldmVudF90OwojIDE4MCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAxIDMKIyAxMyAiL3Vzci9pbmNsdWRlL3N5cy9z aWdpbmZvLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMjAgJCIKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvc2lnbmFsLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIg MiAzCiMgMTgxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAyIDMKIyAxODkgIi91c3IvaW5j bHVkZS9zeXMvc2lnbmFsLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CiAgICAgICAgaW50 IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9lcnJubzsKICAg ICAgICB1bmlvbiB7CgogICAgICAgICAgICAgICAgaW50IHNpX3BhZFsoKDEyOCAvIHNpemVvZihf X2ludDMyX3QpKSAtIDMpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgICAgICAgICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9IF9fa2lsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3V0 aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVz OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1l OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0gX19wZGF0YTsKICAgICAgICAgICAgICAgIH0gX19wcm9jOwoKICAgICAgICAg ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsKICAg ICAgICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg X19iYW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgdW5pb24g c2lndmFsIF9fdmFsdWU7CgoKCiAgICAgICAgfSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsKIyAyNTIg Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9f dWludDMyX3QgX19zaWdiaXRzWzRdOwp9IHNpZ3NldF90OwoKCnR5cGVkZWYgdW5pb24gX19zaWdo YW5kbGVyIHsKICAgICAgICB2b2lkICgqX19zYV9oYW5kbGVyKSgpOwoKICAgICAgICB2b2lkICgq X19zYV9zaWdhY3Rpb24pKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7Cgp9IF9fc2lnaGFuZGxl cl90OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgICAgICBpbnQgc2FfZmxhZ3M7CiAg ICAgICAgX19zaWdoYW5kbGVyX3Qgc2Ffc2lnaGFuZGxlcjsKICAgICAgICBzaWdzZXRfdCBzYV9t YXNrOwoKICAgICAgICBpbnQgc2FfcmVzdlsyXTsKfSBzaWdhY3Rpb25fdDsKIyAzMTggIi91c3Iv aW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKc3RydWN0IHNpZ3N0YWNrIHsKICAgICAgICBjaGFyICpz c19zcDsKICAgICAgICBpbnQgc3Nfb25zdGFjazsKfTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdh bHRzdGFjayB7CiAgICAgICAgY2hhciAqc3Nfc3A7CiAgICAgICAgaW50IHNzX3NpemU7CiAgICAg ICAgaW50IHNzX2ZsYWdzOwp9IHN0YWNrX3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vj b250ZXh0LmgiIDEgMwojIDE3ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMKI2lkZW50 ICIkUmV2aXNpb246IDEuMjMgJCIKIyA4MyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAz CnR5cGVkZWYgbWFjaHJlZ190IGdyZWdfdDsKCnR5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFszN107 Cgp0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgZG91YmxlIGZwX2RyZWdzWzMyXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9mcF9maWxsOwogICAgICAgICAgICAgICAgICAg ICAgICBmbG9hdCBfZnBfZnJlZ3M7CiAgICAgICAgICAgICAgICB9IGZwX2ZyZWdzWzMyXTsKCgoK CgoKICAgICAgICAgICAgICAgIG1hY2hyZWdfdCBmcF9yZWdzWzMyXTsKICAgICAgICB9IGZwX3I7 CgoKCiAgICAgICAgX191aW50MzJfdCBmcF9jc3I7CgogICAgICAgIF9fdWludDMyX3QgZnBfcGFk Owp9IGZwcmVnc2V0X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZ3JlZ3NldF90IGdyZWdz OwogICAgICAgIGZwcmVnc2V0X3QgZnByZWdzOwp9IG1jb250ZXh0X3Q7Cgp0eXBlZGVmIHN0cnVj dCB1Y29udGV4dCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyB1Y19mbGFnczsKICAgICAgICBzdHJ1 Y3QgdWNvbnRleHQgKnVjX2xpbms7CiAgICAgICAgc2lnc2V0X3QgdWNfc2lnbWFzazsKICAgICAg ICBzdGFja190IHVjX3N0YWNrOwogICAgICAgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CiAgICAg ICAgX19pbnQ2NF90IHVjX3BhbmNha2VbNV07CiAgICAgICAgbG9uZyB1Y19maWxsZXJbNDRdOwp9 IHVjb250ZXh0X3Q7CiMgMzM4ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAyIDMKIyAzOTQg Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKZXh0ZXJuIHZvaWQgKCpic2Rfc2lnbmFsKGlu dCwgdm9pZCAoKikoaW50KSkpKGludCk7CmV4dGVybiBpbnQga2lsbHBnKHBpZF90LCBpbnQpOwpl eHRlcm4gaW50IHNpZ3N0YWNrKHN0cnVjdCBzaWdzdGFjayAqLCBzdHJ1Y3Qgc2lnc3RhY2sgKik7 CgoKCgoKZXh0ZXJuIHZvaWQgKCpzaWduYWwoaW50LHZvaWQgKCopKCkpKSgpOwojIDQyNiAiL3Vz ci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdjb250ZXh0IHsKICAg ICAgICBfX3VpbnQzMl90IHNjX3JlZ21hc2s7CiAgICAgICAgX191aW50MzJfdCBzY19zdGF0dXM7 CiAgICAgICAgX191aW50NjRfdCBzY19wYzsKCgoKICAgICAgICBfX3VpbnQ2NF90IHNjX3JlZ3Nb MzJdOwoKCgogICAgICAgIF9fdWludDY0X3Qgc2NfZnByZWdzWzMyXTsKICAgICAgICBfX3VpbnQz Ml90IHNjX293bmVkZnA7CiAgICAgICAgX191aW50MzJfdCBzY19mcGNfY3NyOwogICAgICAgIF9f dWludDMyX3Qgc2NfZnBjX2VpcjsKCiAgICAgICAgX191aW50MzJfdCBzY19zc2ZsYWdzOwogICAg ICAgIF9fdWludDY0X3Qgc2NfbWRoaTsKICAgICAgICBfX3VpbnQ2NF90IHNjX21kbG87CgoKCiAg ICAgICAgX191aW50NjRfdCBzY19jYXVzZTsKICAgICAgICBfX3VpbnQ2NF90IHNjX2JhZHZhZGRy OwogICAgICAgIF9fdWludDY0X3Qgc2NfdHJpZ2dlcnNhdmU7CiAgICAgICAgc2lnc2V0X3Qgc2Nf c2lnc2V0OwogICAgICAgIF9fdWludDY0X3Qgc2NfZnBfcm91bmRlZF9yZXN1bHQ7CiAgICAgICAg X191aW50NjRfdCBzY19wYW5jYWtlWzVdOwogICAgICAgIF9fdWludDY0X3Qgc2NfcGFkWzI2XTsK fSBzaWdjb250ZXh0X3Q7CiMgNDggImluY2x1ZGUvc3lzL3BhcmFtLmgiIDIgMwojIDIzMyAiaW5j bHVkZS9zeXMvcGFyYW0uaCIgMwpzdHJ1Y3QgcGFyYW1jb25zdCB7CiAgICAgICAgaW50IHBfdXNp emU7CiAgICAgICAgaW50IHBfZXh0dXNpemU7Cn07CiMgMTYyICIuLi8uLi9lZ2NjLTMuMS1DVlMy MDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKCgoKCgojIDEgImluY2x1ZGUvbGltaXRzLmgiIDEgMwoj IDExICJpbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMg MzYgImluY2x1ZGUvc3lzbGltaXRzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDcuMzYgJCIKIyAz MjAgImluY2x1ZGUvc3lzbGltaXRzLmgiIDMKdHlwZWRlZiB1bmlvbiBfaF92YWwgewoKICAgICAg ICB1bnNpZ25lZCBsb25nIGlbMl07CgoKCgogICAgICAgIGRvdWJsZSBkOwp9IF9oX3ZhbDsKCmV4 dGVybiBfX2NvbnN0IF9oX3ZhbCBfX2h1Z2VfdmFsOwojIDEyICJpbmNsdWRlL2xpbWl0cy5oIiAy IDMKIyAxNjggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgoKCgoj IDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9od2ludC5oIiAxCiMgMTcyICIuLi8u Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyMDAgIi4uLy4uL2VnY2Mt My4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiNpZGVudCAiJFJldmlzaW9u OiAzLjQ0ICQiCiMgNjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFs IHsKCgoKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfdXNlYzsKfTsKCgoK CgoKc3RydWN0IF9faXJpeDVfdGltZXZhbCB7CiAgICAgICAgX19pbnQzMl90IHR2X3NlYzsKICAg ICAgICBfX2ludDMyX3QgdHZfdXNlYzsKfTsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi IDMKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7 CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMTE4ICIvdXNyL2luY2x1ZGUv c3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUgewogICAgICAgIGludCB0el9taW51dGVzd2Vz dDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsKfTsKIyAxNDggIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzCnR5cGVkZWYgc3RydWN0IHRpbWVzdHJ1YyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsK ICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGltZXN0cnVjX3Q7CgoKCgoKCgpleHRlcm4gaW50IGdl dGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwgKik7CmV4dGVybiBpbnQgc2V0aXRpbWVyKGlu dCwgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwpleHRlcm4gaW50IHV0 aW1lcyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsIFsyXSk7CgoKCgpleHRlcm4g aW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1l dmFsICopOwoKCgoKCmV4dGVybiBpbnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3Qg dGltZXZhbCAqKTsKZXh0ZXJuIGludCBCU0RnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwg c3RydWN0IHRpbWV6b25lICopOwpleHRlcm4gaW50IEJTRHNldHRpbWVvZmRheShzdHJ1Y3QgdGlt ZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKik7CmV4dGVybiBpbnQgZ2V0dGltZW9mZGF5KHN0cnVj dCB0aW1ldmFsICosLi4uKTsKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg KiwuLi4pOwojIDIwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKCgoKCgojaWRlbnQgIiRSZXZpc2lvbjogMS40NCAkIgojIDc2ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wdGltZXJzLmgiIDEgMwoj IDExICIvdXNyL2luY2x1ZGUvc3lzL3B0aW1lcnMuaCIgMwp0eXBlZGVmIHN0cnVjdCB0aW1lc3Bl YyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGltZXNw ZWNfdDsKCgp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVjIHsKICAgICAgICBzdHJ1Y3QgdGltZXNw ZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwp9IGl0aW1l cnNwZWNfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBwdGltZXJfaW5mbyB7CiAgICAgICAgX19pbnQ2 NF90IG5leHRfdGltZW91dDsKICAgICAgICBfX2ludDY0X3QgaW50ZXJ2YWxfdGljazsKICAgICAg ICBpbnQgc2lnbm87CiAgICAgICAgdW5pb24gc2lndmFsIHZhbHVlOwogICAgICAgIGludCBjbG9j a190eXBlOwogICAgICAgIHRvaWRfdCBuZXh0X3RvaWQ7CiAgICAgICAgaW50IG92ZXJydW5fY250 Owp9IHB0aW1lcl9pbmZvX3Q7CiMgNzcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDEwNyAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAg ICAgICAgaW50IHRtX21pbjsKICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRh eTsKICAgICAgICBpbnQgdG1fbW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0 bV93ZGF5OwogICAgICAgIGludCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKfTsKCgoK CmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOwpleHRlcm4gZG91YmxlIGRpZmZ0aW1lKHRpbWVf dCwgdGltZV90KTsKZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOwpleHRlcm4gdGlt ZV90IHRpbWUodGltZV90ICopOwpleHRlcm4gY2hhciAqYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0g Kik7CmV4dGVybiBjaGFyICpjdGltZSAoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRt ICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29u c3QgdGltZV90ICopOwpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lKGNoYXIgKiwgc2l6ZV90LCBjb25z dCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKCgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lk KTsKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKIyAxNDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK c3RydWN0IHNpZ2V2ZW50OwpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90LCBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBz dHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1l c3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfY3JlYXRlKGNsb2Nr aWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBpbnQgdGltZXJfZGVs ZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25z dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCB0 aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwpleHRlcm4gaW50IHRp bWVyX2dldG92ZXJydW4odGltZXJfdCk7CgoKCgoKCmV4dGVybiB0aW1lX3QgdGltZXpvbmU7CmV4 dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRl KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCmV4dGVybiBpbnQgY2Z0 aW1lKGNoYXIgKiwgY2hhciAqLCBjb25zdCB0aW1lX3QgKik7CmV4dGVybiBpbnQgYXNjZnRpbWUo Y2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRpbWVfdCBh bHR6b25lOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqLCBj aGFyICopOwpleHRlcm4gY2hhciAqY3RpbWVfcihjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKZXh0 ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKZXh0 ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsK IyAyMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAyMDEgIi4uLy4uL2VnY2MtMy4x LUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDIxMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw MjA0MTgvZ2NjL3N5c3RlbS5oIgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMKCgoKCgoj aWRlbnQgIiRSZXZpc2lvbjogMS4yMCAkIgojIDMzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMSAzCiMgMTMgIi91c3IvaW5jbHVkZS9zeXMv ZmNudGwuaCIgMwojaWRlbnQgIiRSZXZpc2lvbjogMy41NSAkIgojIDEzMSAiL3Vzci9pbmNsdWRl L3N5cy9mY250bC5oIiAzCnR5cGVkZWYgc3RydWN0IGZsb2NrIHsKICAgICAgICBzaG9ydCBsX3R5 cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAgb2ZmX3QgbF9zdGFydDsKICAgICAg ICBvZmZfdCBsX2xlbjsKICAgICAgICBsb25nIGxfc3lzaWQ7CiAgICAgICAgcGlkX3QgbF9waWQ7 CiAgICAgICAgbG9uZyBsX3BhZFs0XTsKfSBmbG9ja190OwoKCgoKCnR5cGVkZWYgc3RydWN0IGZs b2NrNjQgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAgICBzaG9ydCBsX3doZW5jZTsKICAg ICAgICBvZmY2NF90IGxfc3RhcnQ7CiAgICAgICAgb2ZmNjRfdCBsX2xlbjsKICAgICAgICBsb25n IGxfc3lzaWQ7CiAgICAgICAgcGlkX3QgbF9waWQ7CiAgICAgICAgbG9uZyBsX3BhZFs0XTsKfSBm bG9jazY0X3Q7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRsLmgiIDMKc3RydWN0IGRpb2F0 dHIgewogICAgICAgIHVuc2lnbmVkIGRfbWVtOwogICAgICAgIHVuc2lnbmVkIGRfbWluaW9zejsK ICAgICAgICB1bnNpZ25lZCBkX21heGlvc3o7Cn07CgoKCgpzdHJ1Y3QgZnN4YXR0ciB7CiAgICAg ICAgX191aW50MzJfdCBmc3hfeGZsYWdzOwogICAgICAgIF9fdWludDMyX3QgZnN4X2V4dHNpemU7 CiAgICAgICAgX191aW50MzJfdCBmc3hfbmV4dGVudHM7CiAgICAgICAgY2hhciBmc3hfcGFkWzE2 XTsKfTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMwpzdHJ1Y3QgZ2V0Ym1hcCB7 CiAgICAgICAgX19pbnQ2NF90IGJtdl9vZmZzZXQ7CiAgICAgICAgX19pbnQ2NF90IGJtdl9ibG9j azsKICAgICAgICBfX2ludDY0X3QgYm12X2xlbmd0aDsKICAgICAgICBfX2ludDMyX3QgYm12X2Nv dW50OwogICAgICAgIF9faW50MzJfdCBibXZfZW50cmllczsKfTsKIyAyMzUgIi91c3IvaW5jbHVk ZS9zeXMvZmNudGwuaCIgMwpzdHJ1Y3QgZ2V0Ym1hcHggewogICAgICAgIF9faW50NjRfdCBibXZf b2Zmc2V0OwogICAgICAgIF9faW50NjRfdCBibXZfYmxvY2s7CiAgICAgICAgX19pbnQ2NF90IGJt dl9sZW5ndGg7CiAgICAgICAgX19pbnQzMl90IGJtdl9jb3VudDsKICAgICAgICBfX2ludDMyX3Qg Ym12X2VudHJpZXM7CiAgICAgICAgX19pbnQzMl90IGJtdl9pZmxhZ3M7CiAgICAgICAgX19pbnQz Ml90IGJtdl9vZmxhZ3M7CiAgICAgICAgX19pbnQzMl90IGJtdl91bnVzZWQxOwogICAgICAgIF9f aW50MzJfdCBibXZfdW51c2VkMjsKfTsKIyAyODEgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIg MwpzdHJ1Y3QgZnNkbWlkYXRhIHsKICAgICAgICBfX2ludDMyX3QgZnNkX2RtZXZtYXNrOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGZzZF9wYWRkaW5nOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZz ZF9kbXN0YXRlOwp9OwojIDM0ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMiAzCiMgNTggIi91c3Iv aW5jbHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgZmNudGwoaW50LCBpbnQsIC4uLik7CmV4dGVy biBpbnQgb3Blbihjb25zdCBjaGFyICosIGludCwgLi4uKTsKZXh0ZXJuIGludCBjcmVhdChjb25z dCBjaGFyICosIG1vZGVfdCk7CgoKZXh0ZXJuIGludCBvcGVuNjQoY29uc3QgY2hhciAqLCBpbnQs IC4uLik7CmV4dGVybiBpbnQgY3JlYXQ2NChjb25zdCBjaGFyICosIG1vZGVfdCk7CiMgMjE0ICIu Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyNTEgIi4uLy4uL2Vn Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3dh aXQuaCIgMSAzCiMgMjEgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCiNpZGVudCAiJFJldmlz aW9uOiAxLjQ1ICQiCiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCnR5cGVkZWYgdW5p b24gd2FpdCB7CiAgICAgICAgaW50IHdfc3RhdHVzOwoKCgogICAgICAgIHN0cnVjdCB7CgoKCgoK CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdfRmlsbGVyOjE2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdfUmV0Y29kZTo4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdfQ29yZWR1bXA6MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3X1Rl cm1zaWc6NzsKCiAgICAgICAgfSB3X1Q7CgoKCgoKICAgICAgICBzdHJ1Y3QgewoKCgoKCgogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHdfRmlsbGVyOjE2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdfU3RvcHNpZzo4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdfU3RvcHZhbDo4OwoKICAgICAgICB9IHdfUzsKfSB3YWl0X3Q7CiMgMTQ5ICIvdXNyL2luY2x1 ZGUvc3lzL3dhaXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMKIyAx MSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuNiAk IgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMwp0eXBlZGVmIGVudW0gaWR0eXBl IHsKICAgICAgICBQX1BJRCwKICAgICAgICBQX1BQSUQsCiAgICAgICAgUF9QR0lELAoKICAgICAg ICBQX1NJRCwKICAgICAgICBQX0NJRCwKICAgICAgICBQX1VJRCwKICAgICAgICBQX0dJRCwKICAg ICAgICBQX0FMTAp9IGlkdHlwZV90OwoKCgoKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewogICAgICAg IFBPUF9ESUZGLAoKCiAgICAgICAgUE9QX0FORCwKCgogICAgICAgIFBPUF9PUiwKCgogICAgICAg IFBPUF9YT1IKCgp9IGlkb3BfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHByb2NzZXQgewogICAg ICAgIGlkb3BfdCBwX29wOwoKCgoKICAgICAgICBpZHR5cGVfdCBwX2xpZHR5cGU7CgoKICAgICAg ICBpZF90IHBfbGlkOwoKICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7CgoKICAgICAgICBpZF90 IHBfcmlkOwp9IHByb2NzZXRfdDsKIyAxNTAgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzCiMgNjAgIi91c3IvaW5jbHVk ZS9zeXMvcmVzb3VyY2UuaCIgMwpzdHJ1Y3QgcnVzYWdlIHsKICAgICAgICBzdHJ1Y3QgdGltZXZh bCBydV91dGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKICAgICAgICBsb25n IHJ1X21heHJzczsKCiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAgICBsb25nIHJ1X2lkcnNz OwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9taW5mbHQ7CiAgICAgICAg bG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAgICAgICBsb25nIHJ1X2lu YmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxvbmcgcnVfbXNnc25kOwog ICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNpZ25hbHM7CiAgICAgICAg bG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKCn07CiMgMTEyICIvdXNyL2lu Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKdHlwZWRlZiBfX3VpbnQ2NF90IHJsaW1fdDsKCgoKCnN0 cnVjdCBybGltaXQgewogICAgICAgIHJsaW1fdCBybGltX2N1cjsKICAgICAgICBybGltX3Qgcmxp bV9tYXg7Cn07CgoKdHlwZWRlZiBfX3VpbnQ2NF90IHJsaW02NF90OwoKc3RydWN0IHJsaW1pdDY0 IHsKICAgICAgICBybGltNjRfdCBybGltX2N1cjsKICAgICAgICBybGltNjRfdCBybGltX21heDsK fTsKIyAxNTEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMwpleHRlcm4gaW50IGdldHJs aW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29u c3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0ZXJuIGludCBnZXRwcmlvcml0eShpbnQsIGlkX3QpOwpl eHRlcm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsKZXh0ZXJuIGludCBnZXRydXNh Z2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKCmV4dGVybiBpbnQgZ2V0cmxpbWl0NjQoaW50LCBz dHJ1Y3QgcmxpbWl0NjQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1 Y3QgcmxpbWl0NjQgKik7CiMgMTUzICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMTYx ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMwpleHRlcm4gcGlkX3Qgd2FpdHBpZChwaWRfdCwg aW50ICosIGludCk7CgoKCgoKZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOwoKCgoKCgpleHRlcm4g cGlkX3Qgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgoKCgpleHRlcm4gaW50 IHdhaXRpZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7CiMgMjUyICIuLi8uLi9l Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyOTYgIi4uLy4uL2VnY2MtMy4x LUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKZXh0ZXJuIGludCBnZXRvcHQgKGludCwgY2hhciAq IGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CiMgMzEyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx OC9nY2Mvc3lzdGVtLmgiCiMgMSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL21hbGxvYy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAxLjQxICQiCiMgNjEgIi91 c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwojIDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDYyICIv dXNyL2luY2x1ZGUvbWFsbG9jLmgiIDIgMwoKCnN0cnVjdCBtYWxsaW5mbyB7CiAgICAgICAgX19z Y2ludF90IGFyZW5hOwogICAgICAgIF9fc2NpbnRfdCBvcmRibGtzOwogICAgICAgIF9fc2NpbnRf dCBzbWJsa3M7CiAgICAgICAgX19zY2ludF90IGhibGtzOwogICAgICAgIF9fc2NpbnRfdCBoYmxr aGQ7CiAgICAgICAgX19zY2ludF90IHVzbWJsa3M7CiAgICAgICAgX19zY2ludF90IGZzbWJsa3M7 CiAgICAgICAgX19zY2ludF90IHVvcmRibGtzOwogICAgICAgIF9fc2NpbnRfdCBmb3JkYmxrczsK ICAgICAgICBfX3NjaW50X3Qga2VlcGNvc3Q7Cn07CiMgODUgIi91c3IvaW5jbHVkZS9tYWxsb2Mu aCIgMwojIDEgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS91 bG9ja3MuaCIgMwojaWRlbnQgIiRSZXZpc2lvbjogMy41MyAkICRBdXRob3I6IGxlZWRvbSAkIgoK CgojIDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvdWxvY2tzLmgi IDIgMwoKCiMgMSAiaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS91bG9j a3MuaCIgMiAzCiMgMTA5ICIvdXNyL2luY2x1ZGUvdWxvY2tzLmgiIDMKZXh0ZXJuIGludCBfdXRy YWNlOwpleHRlcm4gaW50IF91ZXJyb3I7CgoKCgp0eXBlZGVmIHZvaWQgdXNwdHJfdDsKCgoKCnR5 cGVkZWYgc3RydWN0IGxvY2ttZXRlcl9zIHsKICAgICAgICBpbnQgbG1fc3BpbnM7CiAgICAgICAg aW50IGxtX3RyaWVzOwogICAgICAgIGludCBsbV9oaXRzOwp9IGxvY2ttZXRlcl90OwoKdHlwZWRl ZiBzdHJ1Y3QgbG9ja2RlYnVnX3MgewogICAgICAgIHBpZF90IGxkX293bmVyX3BpZDsKfSBsb2Nr ZGVidWdfdDsKCnR5cGVkZWYgdm9pZCAqdWxvY2tfdDsKCgoKCnR5cGVkZWYgdm9pZCB1c2VtYV90 OwoKCnR5cGVkZWYgc3RydWN0IGhpc3RfcyB7CiAgICAgICAgdXNlbWFfdCAqaF9zZW07CiAgICAg ICAgaW50IGhfb3A7CiAgICAgICAgcGlkX3QgaF9waWQ7CiAgICAgICAgaW50IGhfc2NudDsKICAg ICAgICBwaWRfdCBoX3dwaWQ7CiAgICAgICAgY2hhciAqaF9jcGM7CiAgICAgICAgc3RydWN0IGhp c3RfcyAqaF9uZXh0OwogICAgICAgIHN0cnVjdCBoaXN0X3MgKmhfbGFzdDsKfSBoaXN0X3Q7Cgp0 eXBlZGVmIHN0cnVjdCBoaXN0cHRyX3MgewogICAgICAgIGhpc3RfdCAqaHBfY3VycmVudDsKICAg ICAgICBpbnQgaHBfZW50cmllczsKICAgICAgICBpbnQgaHBfZXJyb3JzOwp9IGhpc3RwdHJfdDsK CnR5cGVkZWYgc3RydWN0IHNlbWFtZXRlcl9zIHsKICAgICAgICBpbnQgc21fcGhpdHM7CiAgICAg ICAgaW50IHNtX3BzZW1hczsKICAgICAgICBpbnQgc21fdnNlbWFzOwogICAgICAgIGludCBzbV92 bm93YWl0OwogICAgICAgIGludCBzbV9ud2FpdDsKICAgICAgICBpbnQgc21fbWF4bndhaXQ7Cn0g c2VtYW1ldGVyX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzZW1hZGVidWdfcyB7CiAgICAgICAgcGlkX3Qg c2Rfb3duZXJfcGlkOwogICAgICAgIGNoYXIgKnNkX293bmVyX3BjOwogICAgICAgIHBpZF90IHNk X2xhc3RfcGlkOwogICAgICAgIGNoYXIgKnNkX2xhc3RfcGM7Cn0gc2VtYWRlYnVnX3Q7CgoKCgp0 eXBlZGVmIHN0cnVjdCBiYXJyaWVyIHsKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJf aW51c2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBiX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGNo YXIgYl93YWl0Y250OwogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYl9zcGluOwogICAg ICAgIHVsb2NrX3QgYl9wbG9jazsKICAgICAgICB1c3B0cl90ICpiX3VzcHRyOwp9IGJhcnJpZXJf dDsKCmV4dGVybiBiYXJyaWVyX3QgKm5ld19iYXJyaWVyKHVzcHRyX3QgKik7CmV4dGVybiB2b2lk IGluaXRfYmFycmllcihiYXJyaWVyX3QgKik7CmV4dGVybiB2b2lkIGZyZWVfYmFycmllcihiYXJy aWVyX3QgKik7CmV4dGVybiB2b2lkIGJhcnJpZXIoYmFycmllcl90ICosIHVuc2lnbmVkKTsKIyAy MTAgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMwpleHRlcm4gcHRyZGlmZl90IHVzY29uZmlnKGlu dCwgLi4uKTsKZXh0ZXJuIHVzcHRyX3QgKnVzaW5pdChjb25zdCBjaGFyICopOwpleHRlcm4gdm9p ZCB1c2RldGFjaCh1c3B0cl90ICopOwpleHRlcm4gaW50IHVzYWRkKHVzcHRyX3QgKik7CmV4dGVy biB2b2lkIHVzcHV0aW5mbyh1c3B0cl90ICosIHZvaWQgKik7CmV4dGVybiB2b2lkICp1c2dldGlu Zm8odXNwdHJfdCAqKTsKZXh0ZXJuIGludCB1c2Nhc2luZm8odXNwdHJfdCAqLCB2b2lkICosIHZv aWQgKik7CgoKZXh0ZXJuIHZvaWQgKnVzbWFsbG9jKHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJu IHZvaWQgdXNmcmVlKHZvaWQgKiwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzcmVhbGxvYyh2 b2lkICosIHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzcmVjYWxsb2Modm9pZCAq LCBzaXplX3QsIHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzY2FsbG9jKHNpemVf dCwgc2l6ZV90LCB1c3B0cl90ICopOwpleHRlcm4gc3RydWN0IG1hbGxpbmZvIHVzbWFsbGluZm8o dXNwdHJfdCAqKTsKZXh0ZXJuIGludCB1c21hbGxvcHQoaW50LCBpbnQsIHVzcHRyX3QgKik7CmV4 dGVybiBzaXplX3QgdXNtYWxsb2NibGtzaXplKHZvaWQgKiwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZv aWQgKnVzbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QsIHVzcHRyX3QgKik7CgoKZXh0ZXJuIHVsb2Nr X3QgKCpfbmxvY2spKHVzcHRyX3QgKik7CmV4dGVybiBpbnQgKCpfaWxvY2spKHVsb2NrX3QpOwpl eHRlcm4gdm9pZCAoKl9mcmVlbG9jaykodWxvY2tfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIGludCAo Kl93bG9jaykodWxvY2tfdCwgdW5zaWduZWQpOwpleHRlcm4gaW50ICgqX2Nsb2NrKSh1bG9ja190 LCB1bnNpZ25lZCk7CmV4dGVybiBpbnQgKCpfbG9jaykodWxvY2tfdCk7CmV4dGVybiBpbnQgKCpf dWxvY2spKHVsb2NrX3QpOwpleHRlcm4gaW50ICgqX3Rsb2NrKSh1bG9ja190KTsKZXh0ZXJuIGlu dCAoKl9jdGxvY2spKHVsb2NrX3QsIGludCwgLi4uKTsKZXh0ZXJuIGludCAoKl9kbG9jaykodWxv Y2tfdCwgRklMRSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50ICgqX2Nhcykodm9pZCAqLCBw dHJkaWZmX3QsIHB0cmRpZmZfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIGludCAoKl9jYXMzMikodm9p ZCAqLCBpbnQzMl90LCBpbnQzMl90LCB1c3B0cl90ICopOwoKCmV4dGVybiB1c2VtYV90ICp1c25l d3NlbWEodXNwdHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHVzaW5pdHNlbWEodXNlbWFfdCAqLCBp bnQpOwpleHRlcm4gaW50IHVzcHNlbWEodXNlbWFfdCAqKTsKZXh0ZXJuIGludCB1c3ZzZW1hKHVz ZW1hX3QgKik7CmV4dGVybiBpbnQgdXNjcHNlbWEodXNlbWFfdCAqKTsKZXh0ZXJuIHZvaWQgdXNm cmVlc2VtYSh1c2VtYV90ICosIHVzcHRyX3QgKik7CmV4dGVybiBpbnQgdXN0ZXN0c2VtYSh1c2Vt YV90ICopOwpleHRlcm4gaW50IHVzY3Rsc2VtYSh1c2VtYV90ICosIGludCwgLi4uKTsKZXh0ZXJu IGludCB1c2R1bXBzZW1hKHVzZW1hX3QgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g dXNlbWFfdCAqdXNuZXdwb2xsc2VtYSh1c3B0cl90ICosIGludCk7CmV4dGVybiBpbnQgdXNmcmVl cG9sbHNlbWEodXNlbWFfdCAqLCB1c3B0cl90ICopOwpleHRlcm4gaW50IHVzb3BlbnBvbGxzZW1h KHVzZW1hX3QgKiwgbW9kZV90KTsKZXh0ZXJuIGludCB1c2Nsb3NlcG9sbHNlbWEodXNlbWFfdCAq KTsKIyAyOTIgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90YXNr LmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvdGFzay5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAz LjM3ICQiCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Vsb2Nrcy5oIiAxIDMKIyAyOCAiL3Vzci9p bmNsdWRlL3Rhc2suaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAxIDMKIyAy MyAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjUxICQi CiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaCIgMwpzdHJ1Y3QgcHJkYV9zeXMgewogICAg ICAgIHBpZF90IHRfcGlkOwogICAgICAgIF9fdWludDMyX3QgdF9oaW50OwogICAgICAgIF9fdWlu dDMyX3QgdF9kbGFjdHNlcTsKICAgICAgICBfX3VpbnQzMl90IHRfZnBmbGFnczsKICAgICAgICBf X3VpbnQzMl90IHRfcHJpZDsKICAgICAgICBfX3VpbnQzMl90IHRfZGxlbmRzZXE7CiAgICAgICAg X191aW50NjRfdCB0X3BhbmNha2VbNV07CiAgICAgICAgcGlkX3QgdF9ycGlkOwogICAgICAgIF9f aW50MzJfdCB0X3Jlc2NoZWQ7CiAgICAgICAgX191aW50MzJfdCB0X3VudXNlZFs4XTsKCgoKCgog ICAgICAgIF9fdWludDMyX3QgdF9jcHU7CgoKCgoKICAgICAgICBfX3VpbnQzMl90IHRfZmxhZ3M7 CiAgICAgICAga19zaWdzZXRfdCB0X2hvbGQ7Cn07CgpzdHJ1Y3QgcHJkYSB7CiAgICAgICAgY2hh ciB1bnVzZWRbMjA0OF07CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgY2hhciBmaWxs WzUxMl07CiAgICAgICAgfSBzeXMyX3ByZGE7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgY2hhciBmaWxsWzUxMl07CiAgICAgICAgfSBsaWIyX3ByZGE7CiAgICAgICAgdW5pb24gewog ICAgICAgICAgICAgICAgY2hhciBmaWxsWzUxMl07CiAgICAgICAgfSB1c3IyX3ByZGE7CgogICAg ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGNoYXIgZmlsbFsxMjhdOwogICAgICAgICAgICAg ICAgc3RydWN0IHByZGFfc3lzIHByZGFfc3lzOwogICAgICAgIH0gc3lzX3ByZGE7CiAgICAgICAg dW5pb24gewogICAgICAgICAgICAgICAgY2hhciBmaWxsWzI1Nl07CiAgICAgICAgfSBsaWJfcHJk YTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBjaGFyIGZpbGxbMTI4XTsKICAgICAg ICB9IHVzcl9wcmRhOwp9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3ByY3RsLmgiIDMKc3RydWN0 IHByYXR0YWNoX2FyZ3NfdCB7CiAgICAgICAgX19pbnQ2NF90IGxvY2FsX3ZhZGRyOwogICAgICAg IF9faW50NjRfdCB2YWRkcjsKICAgICAgICBwaWRfdCBwaWQ7CiAgICAgICAgX191aW50MzJfdCBw cm90czsKICAgICAgICBfX3VpbnQzMl90IGZsYWdzOwp9OwoKc3RydWN0IHByYXR0YWNoX3Jlc3Vs dHNfdCB7CiAgICAgICAgX19pbnQ2NF90IGxvY2FsX3ZhZGRyOwogICAgICAgIF9faW50NjRfdCBy ZWdpb25fYmFzZTsKICAgICAgICBfX2ludDY0X3QgcmVnaW9uX3NpemU7CiAgICAgICAgX191aW50 MzJfdCBwcm90czsKfTsKIyAxMjUgIi91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaCIgMwojIDEgImlu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAyIDMK CmludCBibG9ja3Byb2MocGlkX3QpOwppbnQgdW5ibG9ja3Byb2MocGlkX3QpOwppbnQgc2V0Ymxv Y2twcm9jY250KHBpZF90LCBpbnQpOwppbnQgYmxvY2twcm9jYWxsKHBpZF90KTsKaW50IHVuYmxv Y2twcm9jYWxsKHBpZF90KTsKaW50IHNldGJsb2NrcHJvY2NudGFsbChwaWRfdCwgaW50KTsKcHRy ZGlmZl90IHByY3RsKHVuc2lnbmVkLCAuLi4pOwppbnQgc3Byb2Modm9pZCAoKikodm9pZCAqKSwg dW5zaWduZWQsIC4uLik7CmludCBzcHJvY3NwKHZvaWQgKCopKHZvaWQgKiwgc2l6ZV90KSwgdW5z aWduZWQsIHZvaWQgKiwgY2FkZHJfdCwgc2l6ZV90KTsKaW50IG5zcHJvYyh2b2lkICgqKSh2b2lk ICosIHNpemVfdCksIHVuc2lnbmVkLCB2b2lkICosIGNhZGRyX3QsIHNpemVfdCk7CiMgMjkgIi91 c3IvaW5jbHVkZS90YXNrLmgiIDIgMwoKCgoKCgp0eXBlZGVmIGludCB0aWRfdDsKc3RydWN0IHBy ZGFfbGliIHsKICAgICAgICB0aWRfdCB0X3RpZDsKICAgICAgICBpbnQgdF9lcnJubzsKCgogICAg ICAgIGludCBhdXRvX21wX2lkOwogICAgICAgIGNoYXIgKmZwZV9kYXRhX3B0cjsKICAgICAgICBj aGFyICpwaXhpZV9kYXRhX3B0cjsKICAgICAgICBpbnQgY29tcGlsZXJfZXh0cmFbMV07CgoKICAg ICAgICB2b2lkICpnbHhfY2xpZW50OwogICAgICAgIHZvaWQgKm9nbF9jb250ZXh0OwogICAgICAg IHZvaWQgKm9nbF9kaXNwYXRjaFs3XTsKCgogICAgICAgIHZvaWQgKnNwZWVkc2hvcF9kYXRhX3B0 cls1XTsKCgogICAgICAgIGludCBwdGhyZWFkX2lkOwogICAgICAgIGludCBwdGhyZWFkX2NhbmNl bDsKICAgICAgICB2b2lkICpwdGhyZWFkX2RhdGFbNl07Cn07CgoKZXh0ZXJuIGNoYXIgX19wcmRh X2xpYl9zelsyNTcgLSBzaXplb2Yoc3RydWN0IHByZGFfbGliKV07CiMgNzIgIi91c3IvaW5jbHVk ZS90YXNrLmgiIDMKdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgdHNrYmxrIHsKICAgICAgICB2b2lk ICgqdF9lbnRyeSkodm9pZCAqKTsKICAgICAgICB2b2lkICp0X2FyZzsKICAgICAgICB0aWRfdCB0 X3RpZDsKICAgICAgICBwaWRfdCB0X3BpZDsKICAgICAgICB1bnNpZ25lZCB0X29wdGlvbnM7CiAg ICAgICAgdW5zaWduZWQgdF9mbGFnczsKICAgICAgICBjaGFyICp0X25hbWU7CiAgICAgICAgc3Ry dWN0IHRza2JsayAqdF9saW5rOwp9IHRza2Jsa190OwoKCgoKCgpleHRlcm4gdHNrYmxrX3QgKl9m aW5kdGFzayh0aWRfdCwgdHNrYmxrX3QgKiopOwoKCgoKZXh0ZXJuIHRpZF90IHRhc2tjcmVhdGUo Y2hhciAqLCB2b2lkICgqKSh2b2lkICopLCB2b2lkICosIGludCk7CmV4dGVybiBpbnQgdGFza2Rl c3Ryb3kodGlkX3QpOwpleHRlcm4gaW50IHRhc2tjdGwodGlkX3QsIHVuc2lnbmVkLCAuLi4pOwpl eHRlcm4gaW50IHRhc2tibG9jayh0aWRfdCk7CmV4dGVybiBpbnQgdGFza3VuYmxvY2sodGlkX3Qp OwpleHRlcm4gaW50IHRhc2tzZXRibG9ja2NudCh0aWRfdCwgaW50KTsKCgp0eXBlZGVmIHN0cnVj dCB0c2toZHIgewogICAgICAgIHVzcHRyX3QgKnRfdXNwdHI7CiAgICAgICAgdWxvY2tfdCB0X2xp c3Rsb2NrOwogICAgICAgIHRza2Jsa190ICp0X2xpc3Q7Cn0gdHNraGRyX3Q7CmV4dGVybiB0c2to ZHJfdCBfdGFza2hlYWRlcjsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgbWxpYmhkciB7CiAgICAgICAg dWxvY2tfdCAqbV9saXN0bG9jazsKICAgICAgICB0aWRfdCBtX2xpc3RbMjU2XTsKICAgICAgICBz dHJ1Y3QgYmFycmllciAqbV9zYmFyOwogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG1f bGNvdW50OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1fcGNvdW50OwogICAgICAgIHVsb2NrX3Qg bV9nbG9jazsKICAgICAgICB1bnNpZ25lZCBtX2djb3VudDsKICAgICAgICB1bG9ja190IG1fZ2Nv dW50bG9jazsKfSBtbGliaGRyX3Q7CgpleHRlcm4gaW50IG1fZm9yayh2b2lkICgqKSgpLCAuLi4p OwpleHRlcm4gaW50IG1fcGFya19wcm9jcyh2b2lkKTsKZXh0ZXJuIGludCBtX3JlbGVfcHJvY3Mo dm9pZCk7CmV4dGVybiB2b2lkIG1fc3luYyh2b2lkKTsKZXh0ZXJuIGludCBtX2tpbGxfcHJvY3Mo dm9pZCk7CmV4dGVybiBpbnQgbV9nZXRfbXlpZCh2b2lkKTsKZXh0ZXJuIGludCBtX3NldF9wcm9j cyhpbnQpOwpleHRlcm4gaW50IG1fZ2V0X251bXByb2NzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQg bV9uZXh0KHZvaWQpOwpleHRlcm4gdm9pZCBtX2xvY2sodm9pZCk7CmV4dGVybiB2b2lkIG1fdW5s b2NrKHZvaWQpOwojIDI5MyAiL3Vzci9pbmNsdWRlL3Vsb2Nrcy5oIiAyIDMKIyA4NiAiL3Vzci9p bmNsdWRlL21hbGxvYy5oIiAyIDMKCmV4dGVybiBpbnQgX191c19yc3RocmVhZF9tYWxsb2M7CgoK CgpleHRlcm4gaW50IF9fbGliY19sb2NrbWFsbG9jKHZvaWQpOwpleHRlcm4gaW50IF9fbGliY191 bmxvY2ttYWxsb2Modm9pZCk7CgoKCgoKCmV4dGVybiB2b2lkICogY2FsbG9jKHNpemVfdCwgc2l6 ZV90KTsKZXh0ZXJuIHZvaWQgKiBtYWxsb2Moc2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lk ICopOwpleHRlcm4gdm9pZCAqIHJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1h bGxvcHQoaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQpOwoK CmV4dGVybiB2b2lkICpyZWNhbGxvYyh2b2lkICosIHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIHNp emVfdCBtYWxsb2NibGtzaXplKHZvaWQgKik7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3Qs IHNpemVfdCk7CgoKZXh0ZXJuIHZvaWQgKiBhY3JlYXRlKHZvaWQgKiwgc2l6ZV90LCBpbnQsIHZv aWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKiko c2l6ZV90LCB2b2lkICopKTsKZXh0ZXJuIHZvaWQgYWZyZWUodm9pZCAqLCB2b2lkICopOwpleHRl cm4gdm9pZCAqYXJlYWxsb2Modm9pZCAqLCBzaXplX3QsIHZvaWQgKik7CmV4dGVybiB2b2lkICph cmVjYWxsb2Modm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgKmFt YWxsb2Moc2l6ZV90LCB2b2lkICopOwpleHRlcm4gdm9pZCAqYWNhbGxvYyhzaXplX3QsIHNpemVf dCwgdm9pZCAqKTsKZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyBhbWFsbGluZm8odm9pZCAqKTsKZXh0 ZXJuIGludCBhbWFsbG9wdChpbnQsIGludCwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgYWRlbGV0ZSh2 b2lkICopOwpleHRlcm4gc2l6ZV90IGFtYWxsb2NibGtzaXplKHZvaWQgKiwgdm9pZCAqKTsKZXh0 ZXJuIHZvaWQgKmFtZW1hbGlnbihzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIyAzMTMgIi4uLy4u L2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDMzMSAiLi4vLi4vZWdjYy0z LjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgpleHRlcm4gY29uc3QgY2hhciAqc3Ryc2lnbmFs IChpbnQpOwojIDM4MSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL3N5cy9z dGF0LmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDMuNDkgJCIKIyAyNCAiL3Vzci9pbmNsdWRlL3N5 cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjkgIi91c3Iv aW5jbHVkZS9zeXMvdGltZS5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjQ0ICQiCiMgMjUgIi91 c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0Lmgi IDMKc3RydWN0IHN0YXQgewogICAgICAgIGRldl90IHN0X2RldjsKICAgICAgICBsb25nIHN0X3Bh ZDFbM107CiAgICAgICAgaW5vX3Qgc3RfaW5vOwogICAgICAgIG1vZGVfdCBzdF9tb2RlOwogICAg ICAgIG5saW5rX3Qgc3Rfbmxpbms7CiAgICAgICAgdWlkX3Qgc3RfdWlkOwogICAgICAgIGdpZF90 IHN0X2dpZDsKICAgICAgICBkZXZfdCBzdF9yZGV2OwogICAgICAgIGxvbmcgc3RfcGFkMlsyXTsK ICAgICAgICBvZmZfdCBzdF9zaXplOwogICAgICAgIGxvbmcgc3RfcGFkMzsKICAgICAgICB0aW1l c3RydWNfdCBzdF9hdGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X210aW07CiAgICAgICAgdGlt ZXN0cnVjX3Qgc3RfY3RpbTsKICAgICAgICBsb25nIHN0X2Jsa3NpemU7CiAgICAgICAgYmxrY250 X3Qgc3RfYmxvY2tzOwogICAgICAgIGNoYXIgc3RfZnN0eXBlWzE2XTsKICAgICAgICBsb25nIHN0 X3BhZDRbOF07Cn07CgoKCgoKCnN0cnVjdCBzdGF0NjQgewogICAgICAgIGRldl90IHN0X2RldjsK ICAgICAgICBsb25nIHN0X3BhZDFbM107CiAgICAgICAgaW5vNjRfdCBzdF9pbm87CiAgICAgICAg bW9kZV90IHN0X21vZGU7CiAgICAgICAgbmxpbmtfdCBzdF9ubGluazsKICAgICAgICB1aWRfdCBz dF91aWQ7CiAgICAgICAgZ2lkX3Qgc3RfZ2lkOwogICAgICAgIGRldl90IHN0X3JkZXY7CiAgICAg ICAgbG9uZyBzdF9wYWQyWzJdOwogICAgICAgIG9mZjY0X3Qgc3Rfc2l6ZTsKICAgICAgICBsb25n IHN0X3BhZDM7CiAgICAgICAgdGltZXN0cnVjX3Qgc3RfYXRpbTsKICAgICAgICB0aW1lc3RydWNf dCBzdF9tdGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X2N0aW07CiAgICAgICAgbG9uZyBzdF9i bGtzaXplOwogICAgICAgIF9faW50NjRfdCBzdF9ibG9ja3M7CiAgICAgICAgY2hhciBzdF9mc3R5 cGVbMTZdOwogICAgICAgIGxvbmcgc3RfcGFkNFs4XTsKfTsKIyAxODYgIi91c3IvaW5jbHVkZS9z eXMvc3RhdC5oIiAzCmludCBfZnhzdGF0KGNvbnN0IGludCwgaW50LCBzdHJ1Y3Qgc3RhdCAqKTsK aW50IF94c3RhdChjb25zdCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CmludCBf bHhzdGF0KGNvbnN0IGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKaW50IF94bWtu b2QoY29uc3QgaW50LCBjb25zdCBjaGFyICosIG1vZGVfdCwgZGV2X3QpOwoKCmludCBmY2htb2Qo aW50LCBtb2RlX3QpOwoKCmV4dGVybiBpbnQgY2htb2QoY29uc3QgY2hhciAqLCBtb2RlX3QpOwpl eHRlcm4gaW50IG1rZGlyKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIGludCBta2ZpZm8o Y29uc3QgY2hhciAqLCBtb2RlX3QpOwpleHRlcm4gbW9kZV90IHVtYXNrKG1vZGVfdCk7CiMgMjM2 ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwppbnQgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAq KTsKaW50IHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKCmludCBsc3RhdChjb25z dCBjaGFyICosIHN0cnVjdCBzdGF0ICopOwppbnQgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3Qs IGRldl90KTsKCgoKaW50IGZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdDY0ICopOwppbnQgbHN0YXQ2 NChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKik7CmludCBzdGF0NjQoY29uc3QgY2hhciAq LCBzdHJ1Y3Qgc3RhdDY0ICopOwojIDM4MiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj L3N5c3RlbS5oIiAyCiMgNDkwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVt LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJpYmVydHkuaCIg MQojIDQ2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2xpYmliZXJ0eS5oIgoj IDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx OC9pbmNsdWRlL2xpYmliZXJ0eS5oIiAyCgoKCgoKCgpleHRlcm4gY2hhciAqKmJ1aWxkYXJndiAo Y29uc3QgY2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9p ZCBmcmVlYXJndiAoY2hhciAqKik7CgoKCgpleHRlcm4gY2hhciAqKmR1cGFyZ3YgKGNoYXIgKiop IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgNzcgIi4uLy4uL2VnY2MtMy4xLUNWUzIw MDIwNDE4L2luY2x1ZGUvbGliaWJlcnR5LmgiCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3Qg Y2hhciAqKTsKIyA4NiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJpYmVy dHkuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKmxiYXNlbmFtZSAoY29uc3QgY2hhciAqKTsKCgoKCgpl eHRlcm4gY2hhciAqY29uY2F0IChjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKIyAxMDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvbGli aWJlcnR5LmgiCmV4dGVybiBjaGFyICpyZWNvbmNhdCAoY2hhciAqLCBjb25zdCBjaGFyICosIC4u LikgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9u ZyBjb25jYXRfbGVuZ3RoIChjb25zdCBjaGFyICosIC4uLik7CgoKCgoKCmV4dGVybiBjaGFyICpj b25jYXRfY29weSAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CgoKCgoKCmV4dGVybiBjaGFy ICpjb25jYXRfY29weTIgKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKZXh0ZXJuIGNoYXIgKmxpYmli ZXJ0eV9jb25jYXRfcHRyOwojIDEzNyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVk ZS9saWJpYmVydHkuaCIKZXh0ZXJuIGludCBmZG1hdGNoIChpbnQgZmQxLCBpbnQgZmQyKTsKCgoK CmV4dGVybiBjaGFyICogZ2V0cHdkICh2b2lkKTsKCgoKZXh0ZXJuIGxvbmcgZ2V0X3J1bl90aW1l ICh2b2lkKTsKCgoKZXh0ZXJuIGNoYXIgKmNob29zZV90ZW1wX2Jhc2UgKHZvaWQpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiBjaGFyICptYWtlX3RlbXBfZmlsZSAoY29u c3QgY2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gY29uc3Qg Y2hhciAqc3BhY2VzIChpbnQgY291bnQpOwoKCgoKZXh0ZXJuIGludCBlcnJub19tYXggKHZvaWQp OwoKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm5vIChpbnQpOwoKCgpleHRlcm4gaW50IHN0 cnRvZXJybm8gKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICp4c3RyZXJyb3IgKGludCk7 CgoKCgpleHRlcm4gaW50IHNpZ25vX21heCAodm9pZCk7CiMgMTkzICIuLi8uLi9lZ2NjLTMuMS1D VlMyMDAyMDQxOC9pbmNsdWRlL2xpYmliZXJ0eS5oIgpleHRlcm4gY29uc3QgY2hhciAqc3Ryc2ln bm8gKGludCk7CgoKCmV4dGVybiBpbnQgc3RydG9zaWdubyAoY29uc3QgY2hhciAqKTsKCgoKZXh0 ZXJuIGludCB4YXRleGl0ICh2b2lkICgqZm4pICh2b2lkKSk7CgoKCmV4dGVybiB2b2lkIHhleGl0 IChpbnQgc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiB2 b2lkIHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9p ZCB4bWFsbG9jX2ZhaWxlZCAoc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7 CgoKCgoKZXh0ZXJuIHZvaWQgKiB4bWFsbG9jIChzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKiB4cmVhbGxvYyAodm9pZCAqLCBzaXplX3QpOwoK CgoKZXh0ZXJuIHZvaWQgKiB4Y2FsbG9jIChzaXplX3QsIHNpemVfdCkgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKikgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgKiB4bWVtZHVwIChjb25z dCB2b2lkICosIHNpemVfdCwgc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKCmV4dGVybiBjb25zdCBjaGFyIF9oZXhfdmFsdWVbMjU2XTsKZXh0ZXJuIHZvaWQgaGV4X2lu aXQgKHZvaWQpOwojIDI2MCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJp YmVydHkuaCIKZXh0ZXJuIGludCBwZXhlY3V0ZSAoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3Qg KiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiosIGNoYXIgKiosIGludCk7CgoK CgpleHRlcm4gaW50IHB3YWl0IChpbnQsIGludCAqLCBpbnQpOwoKCgoKZXh0ZXJuIGludCBhc3By aW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIg KiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkKICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19wcmludGZfXywgMiwgMCkpKTsKIyAyODYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2lu Y2x1ZGUvbGliaWJlcnR5LmgiCmV4dGVybiB2b2lkICogQ19hbGxvY2EgKHNpemVfdCkgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA0OTEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4 L2djYy9zeXN0ZW0uaCIgMgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUv c3ltY2F0LmgiIDEKIyA0OTIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0u aCIgMgojIDU1ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIgMgoj IDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIgMQojIDI1ICIuLi8uLi9l Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCnN0cnVjdCBmdW5jdGlvbjsKCiMgMSAiLi4v Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiIDEKIyAyOSAiLi4vLi4vZWdj Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiCmVudW0gbWFjaGluZV9tb2RlIHsKIyAx ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuZGVmIiAxCiMgNzQgIi4u Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9tYWNobW9kZS5kZWYiClZPSURtb2RlLAoKQklt b2RlLApRSW1vZGUsCkhJbW9kZSwKU0ltb2RlLApESW1vZGUsClRJbW9kZSwKT0ltb2RlLAoKCgoK UFFJbW9kZSwKUEhJbW9kZSwKUFNJbW9kZSwKUERJbW9kZSwKClFGbW9kZSwKSEZtb2RlLApUUUZt b2RlLApTRm1vZGUsCkRGbW9kZSwKWEZtb2RlLApURm1vZGUsCgoKUUNtb2RlLApIQ21vZGUsClND bW9kZSwKRENtb2RlLApYQ21vZGUsClRDbW9kZSwKCkNRSW1vZGUsCkNISW1vZGUsCkNTSW1vZGUs CkNESW1vZGUsCkNUSW1vZGUsCkNPSW1vZGUsCgoKCgoKCgpWMlFJbW9kZSwKVjJISW1vZGUsClYy U0ltb2RlLApWMkRJbW9kZSwKClY0UUltb2RlLApWNEhJbW9kZSwKVjRTSW1vZGUsClY0REltb2Rl LAoKVjhRSW1vZGUsClY4SEltb2RlLApWOFNJbW9kZSwKVjhESW1vZGUsCgpWMTZRSW1vZGUsCgpW MlNGbW9kZSwKVjJERm1vZGUsCgpWNFNGbW9kZSwKVjRERm1vZGUsCgpWOFNGbW9kZSwKVjhERm1v ZGUsClYxNlNGbW9kZSwKCgoKQkxLbW9kZSwKIyAxNTkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9tYWNobW9kZS5kZWYiCkNDbW9kZSwKIyAzMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw MjA0MTgvZ2NjL21hY2htb2RlLmgiIDIKTUFYX01BQ0hJTkVfTU9ERSB9OwojIDQxICIuLi8uLi9l Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKiBj b25zdCBtb2RlX25hbWVbKGludCkgTUFYX01BQ0hJTkVfTU9ERV07CgoKZW51bSBtb2RlX2NsYXNz IHsgTU9ERV9SQU5ET00sIE1PREVfSU5ULCBNT0RFX0ZMT0FULCBNT0RFX1BBUlRJQUxfSU5ULCBN T0RFX0NDLAogICAgICAgICAgICAgICAgICBNT0RFX0NPTVBMRVhfSU5ULCBNT0RFX0NPTVBMRVhf RkxPQVQsCiAgICAgICAgICAgICAgICAgIE1PREVfVkVDVE9SX0lOVCwgTU9ERV9WRUNUT1JfRkxP QVQsCiAgICAgICAgICAgICAgICAgIE1BWF9NT0RFX0NMQVNTfTsKCgoKCmV4dGVybiBjb25zdCBl bnVtIG1vZGVfY2xhc3MgbW9kZV9jbGFzc1soaW50KSBNQVhfTUFDSElORV9NT0RFXTsKIyA4MCAi Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiCmV4dGVybiBjb25zdCB1 bnNpZ25lZCBjaGFyIG1vZGVfc2l6ZVsoaW50KSBNQVhfTUFDSElORV9NT0RFXTsKCgoKCmV4dGVy biBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfdW5pdF9zaXplWyhpbnQpIE1BWF9NQUNISU5FX01P REVdOwojIDk2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0 ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZGVfYml0c2l6ZVsoaW50KSBNQVhfTUFDSElORV9N T0RFXTsKIyAxMDYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9tYWNobW9kZS5oIgpl eHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIG1vZGVfbWFza19hcnJheVsoaW50KSBNQVhf TUFDSElORV9NT0RFXTsKCgoKZXh0ZXJuIGNvbnN0IGVudW0gbWFjaGluZV9tb2RlIGlubmVyX21v ZGVfYXJyYXlbKGludCkgTUFYX01BQ0hJTkVfTU9ERV07CiMgMTIzICIuLi8uLi9lZ2NjLTMuMS1D VlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9k ZV93aWRlcl9tb2RlWyhpbnQpIE1BWF9NQUNISU5FX01PREVdOwoKCgoKCgpleHRlcm4gZW51bSBt YWNoaW5lX21vZGUgbW9kZV9mb3Jfc2l6ZSAodW5zaWduZWQgaW50LCBlbnVtIG1vZGVfY2xhc3Ms IGludCk7CgoKCgpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgc21hbGxlc3RfbW9kZV9mb3Jfc2l6 ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQsIGVudW0gbW9k ZV9jbGFzcyk7CgoKCgoKZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGludF9tb2RlX2Zvcl9tb2Rl IChlbnVtIG1hY2hpbmVfbW9kZSk7CgoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBnZXRfYmVz dF9tb2RlIChpbnQsIGludCwgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsK CgoKCmV4dGVybiB1bnNpZ25lZCBnZXRfbW9kZV9hbGlnbm1lbnQgKGVudW0gbWFjaGluZV9tb2Rl KTsKCgoKCgpleHRlcm4gY29uc3QgZW51bSBtYWNoaW5lX21vZGUgY2xhc3NfbmFycm93ZXN0X21v ZGVbKGludCkgTUFYX01PREVfQ0xBU1NdOwoKCgoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBi eXRlX21vZGU7CmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSB3b3JkX21vZGU7CmV4dGVybiBlbnVt IG1hY2hpbmVfbW9kZSBwdHJfbW9kZTsKIyAyOCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgv Z2NjL3J0bC5oIiAyCiMgNDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIK ZW51bSBydHhfY29kZSB7CgoKIyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRs LmRlZiIgMQojIDcwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKVU5L Tk9XTiAsCgoKCk5JTCAsCgoKCgpJTkNMVURFICwKCgoKCgoKRVhQUl9MSVNUICwKCgoKSU5TTl9M SVNUICwKIyAxMjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpNQVRD SF9PUEVSQU5EICwKCgoKCgoKTUFUQ0hfU0NSQVRDSCAsCgoKCgpNQVRDSF9EVVAgLAoKCgoKCgoK TUFUQ0hfT1BFUkFUT1IgLAojIDE1OCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0 bC5kZWYiCk1BVENIX1BBUkFMTEVMICwKCgoKCk1BVENIX09QX0RVUCAsCgoKCgpNQVRDSF9QQVJf RFVQICwKCgoKCk1BVENIX0lOU04gLAojIDE5MiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgv Z2NjL3J0bC5kZWYiCkRFRklORV9JTlNOICwKCgoKCgoKCkRFRklORV9QRUVQSE9MRSAsCiMgMjEx ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKREVGSU5FX1NQTElUICwK IyAyMzkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpERUZJTkVfSU5T Tl9BTkRfU1BMSVQgLAoKCgpERUZJTkVfUEVFUEhPTEUyICwKCgoKREVGSU5FX0NPTUJJTkUgLAoj IDI2MCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklORV9FWFBB TkQgLAojIDI3NiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklO RV9ERUxBWSAsCiMgMzE3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIK REVGSU5FX0ZVTkNUSU9OX1VOSVQgLAoKCkRFRklORV9BU01fQVRUUklCVVRFUyAsCiMgMzMzICIu Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKREVGSU5FX0NPTkRfRVhFQyAs CgoKCgoKU0VRVUVOQ0UgLAoKCkFERFJFU1MgLAojIDM1MyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw MjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklORV9BVFRSICwKCgpBVFRSICwKCgoKCgoKClNFVF9BVFRS ICwKIyAzNzkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpTRVRfQVRU Ul9BTFRFUk5BVElWRSAsCgoKCgpFUV9BVFRSICwKIyAzOTQgIi4uLy4uL2VnY2MtMy4xLUNWUzIw MDIwNDE4L2djYy9ydGwuZGVmIgpBVFRSX0ZMQUcgLAojIDQwNyAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL3J0bC5kZWYiCklOU04gLAoKCgpKVU1QX0lOU04gLAoKCgoKCgpDQUxMX0lO U04gLAoKCkJBUlJJRVIgLAojIDQzMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0 bC5kZWYiCkNPREVfTEFCRUwgLAoKCgoKCgpOT1RFICwKIyA0NTAgIi4uLy4uL2VnY2MtMy4xLUNW UzIwMDIwNDE4L2djYy9ydGwuZGVmIgpDT05EX0VYRUMgLAoKClBBUkFMTEVMICwKCgoKCgoKCkFT TV9JTlBVVCAsCiMgNDc1ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIK QVNNX09QRVJBTkRTICwKIyA0ODYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwu ZGVmIgpVTlNQRUMgLAoKClVOU1BFQ19WT0xBVElMRSAsCgoKCkFERFJfVkVDICwKIyA1MTggIi4u Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpBRERSX0RJRkZfVkVDICwKIyA1 MjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpQUkVGRVRDSCAsCiMg NTQxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKU0VUICwKCgoKClVT RSAsCgoKCgpDTE9CQkVSICwKCgoKCgpDQUxMICwKCgoKUkVUVVJOICwKCgoKCgpUUkFQX0lGICwK CgoKClJFU1ggLAoKCgoKCgpDT05TVF9JTlQgLAoKCgoKCgpDT05TVF9ET1VCTEUgLAoKCkNPTlNU X1ZFQ1RPUiAsCgoKQ09OU1RfU1RSSU5HICwKCgoKCgpDT05TVCAsCgoKClBDICwKCgpWQUxVRSAs CiMgNjE0ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkVHICwKCgoK CgoKU0NSQVRDSCAsCiMgNjMxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRl ZiIKU1VCUkVHICwKIyA2NDQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVm IgpTVFJJQ1RfTE9XX1BBUlQgLAoKCgoKCkNPTkNBVCAsCgoKCgpNRU0gLAoKCgoKCkxBQkVMX1JF RiAsCgoKCgoKU1lNQk9MX1JFRiAsCgoKCgoKCkNDMCAsCiMgNjgzICIuLi8uLi9lZ2NjLTMuMS1D VlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKQUREUkVTU09GICwKIyA3MDEgIi4uLy4uL2VnY2MtMy4x LUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpRVUVVRUQgLAojIDcxMyAiLi4vLi4vZWdjYy0zLjEt Q1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCklGX1RIRU5fRUxTRSAsCiMgNzIyICIuLi8uLi9lZ2Nj LTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKQ09ORCAsCgoKQ09NUEFSRSAsCgoKUExVUyAs CgoKTUlOVVMgLAoKCk5FRyAsCgpNVUxUICwKCgpESVYgLAoKTU9EICwKCgpVRElWICwKVU1PRCAs CgoKQU5EICwKCklPUiAsCgpYT1IgLAoKTk9UICwKCgoKCkFTSElGVCAsClJPVEFURSAsCkFTSElG VFJUICwKTFNISUZUUlQgLApST1RBVEVSVCAsCgoKCgoKU01JTiAsClNNQVggLApVTUlOICwKVU1B WCAsCiMgNzgxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUFJFX0RF QyAsClBSRV9JTkMgLApQT1NUX0RFQyAsClBPU1RfSU5DICwKIyA3OTggIi4uLy4uL2VnY2MtMy4x LUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpQUkVfTU9ESUZZICwKUE9TVF9NT0RJRlkgLAoKCgpO RSAsCkVRICwKR0UgLApHVCAsCkxFICwKTFQgLApHRVUgLApHVFUgLApMRVUgLApMVFUgLAoKClVO T1JERVJFRCAsCk9SREVSRUQgLAoKClVORVEgLApVTkdFICwKVU5HVCAsClVOTEUgLApVTkxUICwK CgpMVEdUICwKCgoKClNJR05fRVhURU5EICwKCgpaRVJPX0VYVEVORCAsCgoKVFJVTkNBVEUgLAoK CkZMT0FUX0VYVEVORCAsCkZMT0FUX1RSVU5DQVRFICwKCgpGTE9BVCAsCgoKCgoKCgpGSVggLAoK ClVOU0lHTkVEX0ZMT0FUICwKCgoKClVOU0lHTkVEX0ZJWCAsCgoKQUJTICwKCgpTUVJUICwKCgoK CkZGUyAsCiMgODgyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKU0lH Tl9FWFRSQUNUICwKCgpaRVJPX0VYVFJBQ1QgLAoKCgoKSElHSCAsCgoKCkxPX1NVTSAsCiMgOTA3 ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkFOR0VfSU5GTyAsCiMg OTIyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkFOR0VfUkVHICwK CgoKCgpSQU5HRV9WQVIgLAoKCgpSQU5HRV9MSVZFICwKCgoKCkNPTlNUQU5UX1BfUlRYICwKIyA5 NTggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpDQUxMX1BMQUNFSE9M REVSICwKCgoKCgoKVkVDX01FUkdFICwKCgoKCgpWRUNfU0VMRUNUICwKCgoKClZFQ19DT05DQVQg LAoKCgoKClZFQ19EVVBMSUNBVEUgLAoKClNTX1BMVVMgLAoKClVTX1BMVVMgLAoKClNTX01JTlVT ICwKCgpVU19NSU5VUyAsCgoKU1NfVFJVTkNBVEUgLAoKClVTX1RSVU5DQVRFICwKIyAxMDE0ICIu Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUEhJICwKIyA0NSAiLi4vLi4v ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIiAyCgoKICBMQVNUX0FORF9VTlVTRURfUlRY X0NPREV9OwoKCgoKCgpleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBydHhfbGVuZ3RoWygoaW50 KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUpXTsKCgpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0 IHJ0eF9uYW1lWygoaW50KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUpXTsKCgpleHRlcm4gY29u c3QgY2hhciAqIGNvbnN0IHJ0eF9mb3JtYXRbKChpbnQpIExBU1RfQU5EX1VOVVNFRF9SVFhfQ09E RSldOwoKCmV4dGVybiBjb25zdCBjaGFyIHJ0eF9jbGFzc1soKGludCkgTEFTVF9BTkRfVU5VU0VE X1JUWF9DT0RFKV07CgoKCgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIG1pbl9hbGlnbjog ODsKCiAgdW5zaWduZWQgYmFzZV9hZnRlcl92ZWM6IDE7CiAgdW5zaWduZWQgbWluX2FmdGVyX3Zl YzogMTsKCiAgdW5zaWduZWQgbWF4X2FmdGVyX3ZlYzogMTsKCiAgdW5zaWduZWQgbWluX2FmdGVy X2Jhc2U6IDE7CgogIHVuc2lnbmVkIG1heF9hZnRlcl9iYXNlOiAxOwoKCiAgdW5zaWduZWQgb2Zm c2V0X3Vuc2lnbmVkOiAxOwogIHVuc2lnbmVkIDogMjsKICB1bnNpZ25lZCBzY2FsZSA6IDg7Cn0g YWRkcl9kaWZmX3ZlY19mbGFnczsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgbG9uZyBsb25nIGFs aWFzOwogIHRyZWUgZXhwcjsKICBydHggb2Zmc2V0OwogIHJ0eCBzaXplOwogIHVuc2lnbmVkIGlu dCBhbGlnbjsKfSBtZW1fYXR0cnM7CgoKCnR5cGVkZWYgdW5pb24gcnR1bmlvbl9kZWYKewogIGxv bmcgbG9uZyBydHdpbnQ7CiAgaW50IHJ0aW50OwogIHVuc2lnbmVkIGludCBydHVpbnQ7CiAgY29u c3QgY2hhciAqcnRzdHI7CiAgcnR4IHJ0eDsKICBydHZlYyBydHZlYzsKICBlbnVtIG1hY2hpbmVf bW9kZSBydHR5cGU7CiAgYWRkcl9kaWZmX3ZlY19mbGFncyBydF9hZGRyX2RpZmZfdmVjX2ZsYWdz OwogIHN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCAqcnRfY3NlbGliOwogIHN0cnVjdCBiaXRtYXBf aGVhZF9kZWYgKnJ0Yml0OwogIHRyZWUgcnR0cmVlOwogIHN0cnVjdCBiYXNpY19ibG9ja19kZWYg KmJiOwogIG1lbV9hdHRycyAqcnRtZW07Cn0gcnR1bmlvbjsKCgoKc3RydWN0IHJ0eF9kZWYKewoK ICBlbnVtIHJ0eF9jb2RlIGNvZGU6IDE2OwoKCiAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA6IDg7 CgoKCgoKCiAgdW5zaWduZWQgaW50IGp1bXAgOiAxOwoKCiAgdW5zaWduZWQgaW50IGNhbGwgOiAx OwojIDE0OSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgogIHVuc2lnbmVk IGludCB1bmNoYW5naW5nIDogMTsKCgoKCgoKCiAgdW5zaWduZWQgaW50IHZvbGF0aWwgOiAxOwoj IDE3NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgogIHVuc2lnbmVkIGlu dCBpbl9zdHJ1Y3QgOiAxOwoKCgoKCgogIHVuc2lnbmVkIGludCB1c2VkIDogMTsKCgoKCiAgdW5z aWduZWQgaW50ZWdyYXRlZCA6IDE7CiMgMTk2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9n Y2MvcnRsLmgiCiAgdW5zaWduZWQgZnJhbWVfcmVsYXRlZCA6IDE7CgoKCgogIHJ0dW5pb24gZmxk WzFdOwp9OwojIDIyMiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpzdHJ1 Y3QgcnR2ZWNfZGVmIHsKICBpbnQgbnVtX2VsZW07CiAgcnR4IGVsZW1bMV07Cn07CiMgNDUxICIu Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmVudW0gcmVnX25vdGUKewoKCgog IFJFR19ERUFEID0gMSwKCgogIFJFR19JTkMsCiMgNDcwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAy MDQxOC9nY2MvcnRsLmgiCiAgUkVHX0VRVUlWLAoKCgoKICBSRUdfRVFVQUwsCgoKCgoKICBSRUdf V0FTXzAsCgoKCgoKICBSRUdfUkVUVkFMLAoKCgoKICBSRUdfTElCQ0FMTCwKCgoKCgoKICBSRUdf Tk9OTkVHLAoKCgogIFJFR19OT19DT05GTElDVCwKCgogIFJFR19VTlVTRUQsCiMgNTE1ICIuLi8u Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCiAgUkVHX0NDX1NFVFRFUiwgUkVHX0ND X1VTRVIsCgoKCgogIFJFR19MQUJFTCwKCgoKCgogIFJFR19ERVBfQU5USSwgUkVHX0RFUF9PVVRQ VVQsCgoKCgoKICBSRUdfQlJfUFJPQiwKCgoKCiAgUkVHX0VYRUNfQ09VTlQsCgoKCiAgUkVHX05P QUxJQVMsCgoKCiAgUkVHX1NBVkVfQVJFQSwKCgoKCgogIFJFR19CUl9QUkVELAoKCgoKICBSRUdf RlJBTUVfUkVMQVRFRF9FWFBSLAoKCgoKICBSRUdfRUhfQ09OVEVYVCwKCgoKCgogIFJFR19FSF9S RUdJT04sCgoKICBSRUdfU0FWRV9OT1RFLAoKCgoKCiAgUkVHX01BWUJFX0RFQUQsCgoKICBSRUdf Tk9SRVRVUk4sCgoKCiAgUkVHX05PTl9MT0NBTF9HT1RPLAoKCgogIFJFR19TRVRKTVAsCgoKICBS RUdfQUxXQVlTX1JFVFVSTiwKCgoKICBSRUdfVlRBQkxFX1JFRgp9OwojIDYwNyAiLi4vLi4vZWdj Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJl Z19ub3RlX25hbWVbXTsKIyA2NjMgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwu aCIKZW51bSBpbnNuX25vdGUKewoKICBOT1RFX0lOU05fQklBUyA9IC0xMDAsCgoKCiAgTk9URV9J TlNOX0RFTEVURUQsCgoKCiAgTk9URV9JTlNOX0JMT0NLX0JFRywKICBOT1RFX0lOU05fQkxPQ0tf RU5ELAoKCiAgTk9URV9JTlNOX0xPT1BfQkVHLAogIE5PVEVfSU5TTl9MT09QX0VORCwKCgogIE5P VEVfSU5TTl9MT09QX0NPTlQsCgogIE5PVEVfSU5TTl9MT09QX1ZUT1AsCgoKCgoKICBOT1RFX0lO U05fTE9PUF9FTkRfVE9QX0NPTkQsCgoKCgoKCiAgTk9URV9JTlNOX0ZVTkNUSU9OX0VORCwKCgog IE5PVEVfSU5TTl9QUk9MT0dVRV9FTkQsCgoKICBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLAoKCiAg Tk9URV9JTlNOX0RFTEVURURfTEFCRUwsCgoKCgogIE5PVEVfSU5TTl9GVU5DVElPTl9CRUcsCgoK CiAgTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcsCiAgTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCgoK CgogIE5PVEVfSU5TTl9SRVBFQVRFRF9MSU5FX05VTUJFUiwKCgoKICBOT1RFX0lOU05fUkFOR0Vf QkVHLAogIE5PVEVfSU5TTl9SQU5HRV9FTkQsCgoKICBOT1RFX0lOU05fTElWRSwKCgogIE5PVEVf SU5TTl9CQVNJQ19CTE9DSywKCgoKICBOT1RFX0lOU05fRVhQRUNURURfVkFMVUUsCgogIE5PVEVf SU5TTl9NQVgKfTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBub3RlX2luc25fbmFtZVtO T1RFX0lOU05fTUFYIC0gTk9URV9JTlNOX0JJQVNdOwojIDg0MCAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gdW5zaWduZWQgaW50IHN1YnJlZ19sc2IgKHJ0eCk7 CmV4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vX29mZnNldCAodW5zaWduZWQgaW50LCBl bnVtIG1hY2hpbmVfbW9kZSwgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CgoKCmV4 dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vIChydHgpOwojIDEyMTEgIi4uLy4uL2VnY2Mt My4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKZXh0ZXJuIGludCBydHhfZXF1YWxfZnVuY3Rpb25f dmFsdWVfbWF0dGVyczsKCgpleHRlcm4gaW50IGdlbmVyYXRpbmdfY29uY2F0X3A7CgoKCgpleHRl cm4gaW50IGNlaWxfbG9nMiAodW5zaWduZWQgbG9uZyBsb25nKTsKCgoKCmV4dGVybiBydHggZXhw YW5kX2J1aWx0aW5fZXhwZWN0X2p1bXAgKHRyZWUsIHJ0eCwgcnR4KTsKCgpleHRlcm4gdm9pZCBz ZXRfc3RhY2tfY2hlY2tfbGliZnVuYyAocnR4KTsKZXh0ZXJuIGxvbmcgbG9uZyB0cnVuY19pbnRf Zm9yX21vZGUgKGxvbmcgbG9uZywgZW51bSBtYWNoaW5lX21vZGUpOwoKZXh0ZXJuIHJ0eCBwbHVz X2NvbnN0YW50X3dpZGUgKHJ0eCwgbG9uZyBsb25nKTsKZXh0ZXJuIHJ0eCBwbHVzX2NvbnN0YW50 X2Zvcl9vdXRwdXRfd2lkZSAocnR4LCBsb25nIGxvbmcpOwpleHRlcm4gdm9pZCBvcHRpbWl6ZV9z YXZlX2FyZWFfYWxsb2NhIChydHgpOwoKCmV4dGVybiBydHggZ2VuX3J0eCAoZW51bSBydHhfY29k ZSwgZW51bSBtYWNoaW5lX21vZGUsIC4uLik7CgpleHRlcm4gcnR2ZWMgZ2VuX3J0dmVjIChpbnQs IC4uLik7CmV4dGVybiBydHggY29weV9pbnNuXzEgKHJ0eCk7CmV4dGVybiBydHggY29weV9pbnNu IChydHgpOwoKCmV4dGVybiBydHggcnR4X2FsbG9jIChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIHJ0 dmVjIHJ0dmVjX2FsbG9jIChpbnQpOwpleHRlcm4gcnR4IGNvcHlfcnR4IChydHgpOwoKCmV4dGVy biBydHggY29weV9ydHhfaWZfc2hhcmVkIChydHgpOwoKCmV4dGVybiBydHggY29weV9tb3N0X3J0 eCAocnR4LCBydHgpOwpleHRlcm4gcnR4IHNoYWxsb3dfY29weV9ydHggKHJ0eCk7CmV4dGVybiBp bnQgcnR4X2VxdWFsX3AgKHJ0eCwgcnR4KTsKCgpleHRlcm4gcnR2ZWMgZ2VuX3J0dmVjX3YgKGlu dCwgcnR4ICopOwpleHRlcm4gcnR4IGdlbl9yZWdfcnR4IChlbnVtIG1hY2hpbmVfbW9kZSk7CmV4 dGVybiBydHggZ2VuX2xhYmVsX3J0eCAodm9pZCk7CmV4dGVybiBpbnQgc3VicmVnX2hhcmRfcmVn bm8gKHJ0eCwgaW50KTsKZXh0ZXJuIHJ0eCBnZW5fbG93cGFydF9jb21tb24gKGVudW0gbWFjaGlu ZV9tb2RlLCBydHgpOwpleHRlcm4gcnR4IGdlbl9sb3dwYXJ0IChlbnVtIG1hY2hpbmVfbW9kZSwg cnR4KTsKCgpleHRlcm4gcnR4IGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlIChlbnVtIG1hY2hpbmVf bW9kZSwgcnR4KTsKCgpleHRlcm4gcnR4IGdlbl9oaWdocGFydCAoZW51bSBtYWNoaW5lX21vZGUs IHJ0eCk7CmV4dGVybiBydHggZ2VuX2hpZ2hwYXJ0X21vZGUgKGVudW0gbWFjaGluZV9tb2RlLCBl bnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKCmV4dGVybiBydHggZ2VuX3JlYWxwYXJ0IChlbnVtIG1h Y2hpbmVfbW9kZSwgcnR4KTsKZXh0ZXJuIHJ0eCBnZW5faW1hZ3BhcnQgKGVudW0gbWFjaGluZV9t b2RlLCBydHgpOwpleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29yZCAocnR4LCB1bnNpZ25lZCBpbnQs IGludCwgZW51bSBtYWNoaW5lX21vZGUpOwoKZXh0ZXJuIHJ0eCBjb25zdGFudF9zdWJ3b3JkIChy dHgsIGludCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCgpleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29y ZF9mb3JjZSAocnR4LCB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKCmV4dGVybiBp bnQgc3VicmVnX2xvd3BhcnRfcCAocnR4KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbG93 cGFydF9vZmZzZXQgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSk7CgpleHRl cm4gdW5zaWduZWQgaW50IHN1YnJlZ19oaWdocGFydF9vZmZzZXQgKGVudW0gbWFjaGluZV9tb2Rl LCBlbnVtIG1hY2hpbmVfbW9kZSk7CgpleHRlcm4gcnR4IG1ha2Vfc2FmZV9mcm9tIChydHgsIHJ0 eCk7CmV4dGVybiBydHggY29udmVydF9tZW1vcnlfYWRkcmVzcyAoZW51bSBtYWNoaW5lX21vZGUs IHJ0eCk7CmV4dGVybiBydHggZ2V0X2luc25zICh2b2lkKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmdl dF9pbnNuX25hbWUgKGludCk7CmV4dGVybiBydHggZ2V0X2xhc3RfaW5zbiAodm9pZCk7CmV4dGVy biBydHggZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSAodm9pZCk7CmV4dGVybiB2b2lkIHN0YXJ0X3Nl cXVlbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHVzaF90b19zZXF1ZW5jZSAocnR4KTsKZXh0ZXJu IHZvaWQgZW5kX3NlcXVlbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHVzaF90b19mdWxsX3NlcXVl bmNlIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIGVuZF9mdWxsX3NlcXVlbmNlIChydHgqLCBydHgq KTsKZXh0ZXJuIHJ0eCBnZW5fc2VxdWVuY2UgKHZvaWQpOwoKCmV4dGVybiBydHggaW1tZWRfZG91 YmxlX2NvbnN0IChsb25nIGxvbmcsIGxvbmcgbG9uZywgZW51bSBtYWNoaW5lX21vZGUpOwpleHRl cm4gcnR4IG1lbV9mb3JfY29uc3RfZG91YmxlIChydHgpOwpleHRlcm4gcnR4IGZvcmNlX2NvbnN0 X21lbSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CgoKZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25z dGFudCAocnR4KTsKZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25zdGFudF9tYXJrIChydHgsIF9Cb29s ICopOwpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZSAocnR4KTsKZXh0ZXJu IHJ0eCBnZXRfcG9vbF9jb25zdGFudF9mb3JfZnVuY3Rpb24gKHN0cnVjdCBmdW5jdGlvbiAqLCBy dHgpOwpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZV9mb3JfZnVuY3Rpb24g KHN0cnVjdCBmdW5jdGlvbiAqLCBydHgpOwpleHRlcm4gaW50IGdldF9wb29sX29mZnNldCAocnR4 KTsKZXh0ZXJuIHJ0eCBzaW1wbGlmeV9zdWJ0cmFjdGlvbiAocnR4KTsKCgpleHRlcm4gcnR4IGFz c2lnbl9zdGFja19sb2NhbCAoZW51bSBtYWNoaW5lX21vZGUsIGxvbmcgbG9uZywgaW50KTsKCmV4 dGVybiBydHggYXNzaWduX3N0YWNrX3RlbXAgKGVudW0gbWFjaGluZV9tb2RlLCBsb25nIGxvbmcs IGludCk7CgpleHRlcm4gcnR4IGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlIChlbnVtIG1hY2hp bmVfbW9kZSwgbG9uZyBsb25nLCBpbnQsIHRyZWUpOwoKZXh0ZXJuIHJ0eCBhc3NpZ25fdGVtcCAo dHJlZSwgaW50LCBpbnQsIGludCk7CgpleHRlcm4gcnR4IGVtaXRfaW5zbl9iZWZvcmUgKHJ0eCwg cnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2p1bXBfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKZXh0ZXJu IHJ0eCBlbWl0X2NhbGxfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2Jh cnJpZXJfYmVmb3JlIChydHgpOwpleHRlcm4gcnR4IGVtaXRfbGFiZWxfYmVmb3JlIChydHgsIHJ0 eCk7CmV4dGVybiBydHggZW1pdF9ub3RlX2JlZm9yZSAoaW50LCBydHgpOwpleHRlcm4gcnR4IGVt aXRfaW5zbl9hZnRlciAocnR4LCBydHgpOwpleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVy IChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9iYXJyaWVyX2FmdGVyIChydHgpOwpleHRlcm4g cnR4IGVtaXRfbGFiZWxfYWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X25vdGVfYWZ0 ZXIgKGludCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2xpbmVfbm90ZV9hZnRlciAoY29uc3QgY2hh ciAqLCBpbnQsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9pbnNuIChydHgpOwpleHRlcm4gcnR4IGVt aXRfaW5zbnMgKHJ0eCk7CmV4dGVybiBydHggZW1pdF9pbnNuc19iZWZvcmUgKHJ0eCwgcnR4KTsK ZXh0ZXJuIHJ0eCBlbWl0X2luc25zX2FmdGVyIChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9q dW1wX2luc24gKHJ0eCk7CmV4dGVybiBydHggZW1pdF9jYWxsX2luc24gKHJ0eCk7CmV4dGVybiBy dHggZW1pdF9sYWJlbCAocnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2JhcnJpZXIgKHZvaWQpOwpleHRl cm4gcnR4IGVtaXRfbGluZV9ub3RlIChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBydHggZW1p dF9ub3RlIChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBydHggZW1pdF9saW5lX25vdGVfZm9y Y2UgKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHJ0eCBtYWtlX2luc25fcmF3IChydHgpOwpl eHRlcm4gcnR4IHByZXZpb3VzX2luc24gKHJ0eCk7CmV4dGVybiBydHggbmV4dF9pbnNuIChydHgp OwpleHRlcm4gcnR4IHByZXZfbm9ubm90ZV9pbnNuIChydHgpOwpleHRlcm4gcnR4IG5leHRfbm9u bm90ZV9pbnNuIChydHgpOwpleHRlcm4gcnR4IHByZXZfcmVhbF9pbnNuIChydHgpOwpleHRlcm4g cnR4IG5leHRfcmVhbF9pbnNuIChydHgpOwpleHRlcm4gcnR4IHByZXZfYWN0aXZlX2luc24gKHJ0 eCk7CmV4dGVybiBydHggbmV4dF9hY3RpdmVfaW5zbiAocnR4KTsKZXh0ZXJuIGludCBhY3RpdmVf aW5zbl9wIChydHgpOwpleHRlcm4gcnR4IHByZXZfbGFiZWwgKHJ0eCk7CmV4dGVybiBydHggbmV4 dF9sYWJlbCAocnR4KTsKZXh0ZXJuIHJ0eCBuZXh0X2NjMF91c2VyIChydHgpOwpleHRlcm4gcnR4 IHByZXZfY2MwX3NldHRlciAocnR4KTsKCgpleHRlcm4gcnR4IG5leHRfbm9uZGVsZXRlZF9pbnNu IChydHgpOwpleHRlcm4gZW51bSBydHhfY29kZSByZXZlcnNlX2NvbmRpdGlvbiAoZW51bSBydHhf Y29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHJldmVyc2VfY29uZGl0aW9uX21heWJlX3Vub3Jk ZXJlZCAoZW51bSBydHhfY29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHN3YXBfY29uZGl0aW9u IChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIGVudW0gcnR4X2NvZGUgdW5zaWduZWRfY29uZGl0aW9u IChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIGVudW0gcnR4X2NvZGUgc2lnbmVkX2NvbmRpdGlvbiAo ZW51bSBydHhfY29kZSk7CmV4dGVybiB2b2lkIG1hcmtfanVtcF9sYWJlbCAocnR4LCBydHgsIGlu dCk7CmV4dGVybiB2b2lkIGNsZWFudXBfYmFycmllcnMgKHZvaWQpOwoKCmV4dGVybiBfQm9vbCBz cXVlZXplX25vdGVzIChydHggKiwgcnR4ICopOwpleHRlcm4gcnR4IGRlbGV0ZV9yZWxhdGVkX2lu c25zIChydHgpOwpleHRlcm4gdm9pZCBkZWxldGVfanVtcCAocnR4KTsKZXh0ZXJuIHZvaWQgZGVs ZXRlX2JhcnJpZXIgKHJ0eCk7CmV4dGVybiBydHggZ2V0X2xhYmVsX2JlZm9yZSAocnR4KTsKZXh0 ZXJuIHJ0eCBnZXRfbGFiZWxfYWZ0ZXIgKHJ0eCk7CmV4dGVybiBydHggZm9sbG93X2p1bXBzIChy dHgpOwoKCmV4dGVybiBydHggKmZpbmRfY29uc3RhbnRfdGVybV9sb2MgKHJ0eCAqKTsKCgpleHRl cm4gcnR4IHRyeV9zcGxpdCAocnR4LCBydHgsIGludCk7CmV4dGVybiBpbnQgc3BsaXRfYnJhbmNo X3Byb2JhYmlsaXR5OwoKCmV4dGVybiBydHggc3BsaXRfaW5zbnMgKHJ0eCwgcnR4KTsKCgpleHRl cm4gcnR4IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo aW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf YmluYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwg cnR4KTsKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3Rlcm5hcnlfb3BlcmF0aW9uIChlbnVtIHJ0eF9j b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LCBydHgp OwoKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uIChlbnVtIHJ0eF9j b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf Z2VuX2JpbmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4KTsK CgpleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl91bmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo aW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf Z2VuX3Rlcm5hcnkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hp bmVfbW9kZSwgcnR4LCBydHgsIHJ0eCk7CgoKCmV4dGVybiBydHggc2ltcGxpZnlfZ2VuX3JlbGF0 aW9uYWwgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9k ZSwgcnR4LCBydHgpOwoKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3N1YnJlZyAoZW51bSBtYWNoaW5l X21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCk7CgoKCmV4dGVybiBy dHggc2ltcGxpZnlfZ2VuX3N1YnJlZyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgZW51bSBtYWNo aW5lX21vZGUsIHVuc2lnbmVkIGludCk7CgoKCmV4dGVybiBydHggc2ltcGxpZnlfcmVwbGFjZV9y dHggKHJ0eCwgcnR4LCBydHgpOwpleHRlcm4gcnR4IHNpbXBsaWZ5X3J0eCAocnR4KTsKZXh0ZXJu IHJ0eCBhdm9pZF9jb25zdGFudF9wb29sX3JlZmVyZW5jZSAocnR4KTsKCgpleHRlcm4gcnR4IGdl bl9tZW1fYWRkcmVzc29mIChydHgsIHRyZWUpOwoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBj aG9vc2VfaGFyZF9yZWdfbW9kZSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwoKCgpleHRl cm4gcnR4IHNldF91bmlxdWVfcmVnX25vdGUgKHJ0eCwgZW51bSByZWdfbm90ZSwgcnR4KTsKIyAx NDQ2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmV4dGVybiBpbnQgcnR4 X2FkZHJfY2FuX3RyYXBfcCAocnR4KTsKZXh0ZXJuIGludCBydHhfdW5zdGFibGVfcCAocnR4KTsK ZXh0ZXJuIGludCBydHhfdmFyaWVzX3AgKHJ0eCwgaW50KTsKZXh0ZXJuIGludCBydHhfYWRkcl92 YXJpZXNfcCAocnR4LCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIGdldF9pbnRlZ2VyX3Rlcm0gKHJ0 eCk7CmV4dGVybiBydHggZ2V0X3JlbGF0ZWRfdmFsdWUgKHJ0eCk7CmV4dGVybiBydHggZ2V0X2p1 bXBfdGFibGVfb2Zmc2V0IChydHgsIHJ0eCAqKTsKZXh0ZXJuIGludCByZWdfbWVudGlvbmVkX3Ag KHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBjb3VudF9vY2N1cnJlbmNlcyAocnR4LCBydHgsIGludCk7 CmV4dGVybiBpbnQgcmVnX3JlZmVyZW5jZWRfcCAocnR4LCBydHgpOwpleHRlcm4gaW50IHJlZ191 c2VkX2JldHdlZW5fcCAocnR4LCBydHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVnX3JlZmVyZW5jZWRf YmV0d2Vlbl9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfc2V0X2JldHdlZW5fcCAo cnR4LCBydHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVnc19zZXRfYmV0d2Vlbl9wIChydHgsIHJ0eCwg cnR4KTsKZXh0ZXJuIGludCBjb21tdXRhdGl2ZV9vcGVyYW5kX3ByZWNlZGVuY2UgKHJ0eCk7CmV4 dGVybiBpbnQgc3dhcF9jb21tdXRhdGl2ZV9vcGVyYW5kc19wIChydHgsIHJ0eCk7CmV4dGVybiBp bnQgbW9kaWZpZWRfYmV0d2Vlbl9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBub19sYWJl bHNfYmV0d2Vlbl9wIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgbm9fanVtcHNfYmV0d2Vlbl9wIChy dHgsIHJ0eCk7CmV4dGVybiBpbnQgbW9kaWZpZWRfaW5fcCAocnR4LCBydHgpOwpleHRlcm4gaW50 IGluc25fZGVwZW5kZW50X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfc2V0X3AgKHJ0eCwg cnR4KTsKZXh0ZXJuIHJ0eCBzaW5nbGVfc2V0XzIgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBtdWx0 aXBsZV9zZXRzIChydHgpOwpleHRlcm4gaW50IHNldF9ub29wX3AgKHJ0eCk7CmV4dGVybiBpbnQg bm9vcF9tb3ZlX3AgKHJ0eCk7CmV4dGVybiBydHggZmluZF9sYXN0X3ZhbHVlIChydHgsIHJ0eCAq LCBydHgsIGludCk7CmV4dGVybiBpbnQgcmVmZXJzX3RvX3JlZ25vX3AgKHVuc2lnbmVkIGludCwg dW5zaWduZWQgaW50LCBydHgsIHJ0eCAqKTsKCmV4dGVybiBpbnQgcmVnX292ZXJsYXBfbWVudGlv bmVkX3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBzZXRfb2YgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZv aWQgbm90ZV9zdG9yZXMgKHJ0eCwgdm9pZCAoKikgKHJ0eCwgcnR4LCB2b2lkICopLCB2b2lkICop OwoKCmV4dGVybiB2b2lkIG5vdGVfdXNlcyAocnR4ICosIHZvaWQgKCopIChydHggKiwgdm9pZCAq KSwgdm9pZCAqKTsKCgpleHRlcm4gcnR4IHJlZ19zZXRfbGFzdCAocnR4LCBydHgpOwpleHRlcm4g aW50IGRlYWRfb3Jfc2V0X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBkZWFkX29yX3NldF9yZWdu b19wIChydHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiBydHggZmluZF9yZWdfbm90ZSAocnR4LCBl bnVtIHJlZ19ub3RlLCBydHgpOwpleHRlcm4gcnR4IGZpbmRfcmVnbm9fbm90ZSAocnR4LCBlbnVt IHJlZ19ub3RlLCB1bnNpZ25lZCBpbnQpOwoKZXh0ZXJuIHJ0eCBmaW5kX3JlZ19lcXVhbF9lcXVp dl9ub3RlIChydHgpOwpleHRlcm4gaW50IGZpbmRfcmVnX2Z1c2FnZSAocnR4LCBlbnVtIHJ0eF9j b2RlLCBydHgpOwpleHRlcm4gaW50IGZpbmRfcmVnbm9fZnVzYWdlIChydHgsIGVudW0gcnR4X2Nv ZGUsIHVuc2lnbmVkIGludCk7CgpleHRlcm4gaW50IHB1cmVfY2FsbF9wIChydHgpOwpleHRlcm4g dm9pZCByZW1vdmVfbm90ZSAocnR4LCBydHgpOwpleHRlcm4gaW50IHNpZGVfZWZmZWN0c19wIChy dHgpOwpleHRlcm4gaW50IHZvbGF0aWxlX3JlZnNfcCAocnR4KTsKZXh0ZXJuIGludCB2b2xhdGls ZV9pbnNuX3AgKHJ0eCk7CmV4dGVybiBpbnQgbWF5X3RyYXBfcCAocnR4KTsKZXh0ZXJuIGludCBp bmVxdWFsaXR5X2NvbXBhcmlzb25zX3AgKHJ0eCk7CmV4dGVybiBydHggcmVwbGFjZV9ydHggKHJ0 eCwgcnR4LCBydHgpOwpleHRlcm4gcnR4IHJlcGxhY2VfcmVncyAocnR4LCBydHggKiwgdW5zaWdu ZWQgaW50LCBpbnQpOwoKZXh0ZXJuIGludCBjb21wdXRlZF9qdW1wX3AgKHJ0eCk7CnR5cGVkZWYg aW50ICgqcnR4X2Z1bmN0aW9uKSAocnR4ICosIHZvaWQgKik7CmV4dGVybiBpbnQgZm9yX2VhY2hf cnR4IChydHggKiwgcnR4X2Z1bmN0aW9uLCB2b2lkICopOwpleHRlcm4gcnR4IHJlZ25vX3VzZV9p biAodW5zaWduZWQgaW50LCBydHgpOwpleHRlcm4gaW50IGF1dG9faW5jX3AgKHJ0eCk7CmV4dGVy biBpbnQgaW5fZXhwcl9saXN0X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX25vZGVf ZnJvbV9leHByX2xpc3QgKHJ0eCwgcnR4ICopOwpleHRlcm4gaW50IGluc25zX3NhZmVfdG9fbW92 ZV9wIChydHgsIHJ0eCwgcnR4ICopOwpleHRlcm4gaW50IGxvY19tZW50aW9uZWRfaW5fcCAocnR4 ICosIHJ0eCk7CmV4dGVybiBydHggZmluZF9maXJzdF9wYXJhbWV0ZXJfbG9hZCAocnR4LCBydHgp OwoKCgpleHRlcm4gcnR4IGZpbmRfdXNlX2FzX2FkZHJlc3MgKHJ0eCwgcnR4LCBsb25nIGxvbmcp Owp2b2lkIGluaXRfRVhQUl9JTlNOX0xJU1RfY2FjaGUgKHZvaWQpOwp2b2lkIGZyZWVfRVhQUl9M SVNUX2xpc3QgKHJ0eCAqKTsKdm9pZCBmcmVlX0lOU05fTElTVF9saXN0IChydHggKik7CnZvaWQg ZnJlZV9FWFBSX0xJU1Rfbm9kZSAocnR4KTsKdm9pZCBmcmVlX0lOU05fTElTVF9ub2RlIChydHgp OwpydHggYWxsb2NfSU5TTl9MSVNUIChydHgsIHJ0eCk7CnJ0eCBhbGxvY19FWFBSX0xJU1QgKGlu dCwgcnR4LCBydHgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYXhfcGFyYWxsZWw7CgoKZXh0ZXJuIHZv aWQgZnJlZV9yZWdfaW5mbyAodm9pZCk7CgoKZXh0ZXJuIGludCBhc21fbm9wZXJhbmRzIChydHgp OwpleHRlcm4gY29uc3QgY2hhciAqZGVjb2RlX2FzbV9vcGVyYW5kcyAocnR4LCBydHggKiwgcnR4 ICoqLCBjb25zdCBjaGFyICoqLCBlbnVtIG1hY2hpbmVfbW9kZSAqKTsKCgoKZXh0ZXJuIGVudW0g cmVnX2NsYXNzIHJlZ19wcmVmZXJyZWRfY2xhc3MgKGludCk7CmV4dGVybiBlbnVtIHJlZ19jbGFz cyByZWdfYWx0ZXJuYXRlX2NsYXNzIChpbnQpOwoKZXh0ZXJuIHJ0eCBnZXRfZmlyc3Rfbm9ucGFy bV9pbnNuICh2b2lkKTsKCmV4dGVybiB2b2lkIHNwbGl0X2FsbF9pbnNucyAoaW50KTsKZXh0ZXJu IHZvaWQgc3BsaXRfYWxsX2luc25zX25vZmxvdyAodm9pZCk7CgoKZXh0ZXJuIHJ0eCBjb25zdF9p bnRfcnR4WzY0ICogMiArIDFdOwoKCgoKCmV4dGVybiBydHggY29uc3RfdHJ1ZV9ydHg7CgpleHRl cm4gcnR4IGNvbnN0X3RpbnlfcnR4WzNdWyhpbnQpIE1BWF9NQUNISU5FX01PREVdOwojIDE1ODIg Ii4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKZW51bSBnbG9iYWxfcnRsX2lu ZGV4CnsKICBHUl9QQywKICBHUl9DQzAsCiAgR1JfU1RBQ0tfUE9JTlRFUiwKICBHUl9GUkFNRV9Q T0lOVEVSLAojIDE1OTcgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKICBH Ul9IQVJEX0ZSQU1FX1BPSU5URVIsCgoKCgoKICBHUl9BUkdfUE9JTlRFUiwKCgogIEdSX1ZJUlRV QUxfSU5DT01JTkdfQVJHUywKICBHUl9WSVJUVUFMX1NUQUNLX0FSR1MsCiAgR1JfVklSVFVBTF9T VEFDS19EWU5BTUlDLAogIEdSX1ZJUlRVQUxfT1VUR09JTkdfQVJHUywKICBHUl9WSVJUVUFMX0NG QSwKCiAgR1JfTUFYCn07CgoKZXh0ZXJuIHJ0eCBnbG9iYWxfcnRsW0dSX01BWF07CiMgMTYzMCAi Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gcnR4IHBpY19vZmZz ZXRfdGFibGVfcnR4OwpleHRlcm4gcnR4IHN0cnVjdF92YWx1ZV9ydHg7CmV4dGVybiBydHggc3Ry dWN0X3ZhbHVlX2luY29taW5nX3J0eDsKZXh0ZXJuIHJ0eCBzdGF0aWNfY2hhaW5fcnR4OwpleHRl cm4gcnR4IHN0YXRpY19jaGFpbl9pbmNvbWluZ19ydHg7CmV4dGVybiBydHggcmV0dXJuX2FkZHJl c3NfcG9pbnRlcl9ydHg7CgoKCgojIDEgImdlbnJ0bC5oIiAxCgoKCgoKZXh0ZXJuIHJ0eCBnZW5f cnR4X2ZtdF9zIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBj aGFyICphcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWUgKGVudW0gcnR4X2NvZGUsIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHggYXJnMSk7CgpleHRlcm4gcnR4IGdl bl9ydHhfZm10X3VlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHgg YXJnMCwgcnR4IGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pc3MgKGVudW0gcnR4X2Nv ZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBjb25zdCBjaGFyICphcmcxLCBj b25zdCBjaGFyICphcmcyKTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2lzIChlbnVtIHJ0eF9j b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgY29uc3QgY2hhciAqYXJnMSk7 CgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9t b2RlIG1vZGUsIGludCBhcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfaXNFIChlbnVtIHJ0 eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgY29uc3QgY2hhciAqYXJn MSwgcnR2ZWMgYXJnMik7CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pRSAoZW51bSBydHhfY29k ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIHJ0dmVjIGFyZzEpOwoKZXh0ZXJu IHJ0eCBnZW5fcnR4X2ZtdF9Fc3MgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v ZGUsIHJ0dmVjIGFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIpOwoKCmV4 dGVybiBydHggZ2VuX3J0eF9mbXRfc0VzcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21v ZGUgbW9kZSwgY29uc3QgY2hhciAqYXJnMCwgcnR2ZWMgYXJnMSwgY29uc3QgY2hhciAqYXJnMiwg Y29uc3QgY2hhciAqYXJnMyk7CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lRSAoZW51bSBydHhf Y29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzAsIHJ0dmVjIGFyZzEpOwoKZXh0 ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBt b2RlLCBydHZlYyBhcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZSAoZW51bSBydHhfY29k ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzApOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4 X2ZtdF9zc2UgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNo YXIgKmFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsIHJ0eCBhcmcyKTsKCgpleHRlcm4gcnR4IGdlbl9y dHhfZm10X3NzIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBj aGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfc0Ug KGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmFyZzAs IHJ0dmVjIGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXVlaWVlIChlbnVtIHJ0eF9j b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcy LCBydHggYXJnMywgaW50IGFyZzQsIHJ0eCBhcmc1LCBydHggYXJnNik7CgoKCmV4dGVybiBydHgg Z2VuX3J0eF9mbXRfaXV1ZWllZTAgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v ZGUsIGludCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIsIHJ0eCBhcmczLCBpbnQgYXJnNCwgcnR4 IGFyZzUsIHJ0eCBhcmc2KTsKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXVlaWVlZSAoZW51 bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIHJ0eCBhcmcxLCBy dHggYXJnMiwgcnR4IGFyZzMsIGludCBhcmc0LCBydHggYXJnNSwgcnR4IGFyZzYsIHJ0eCBhcmc3 KTsKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXUgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFj aGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIpOwoKZXh0ZXJuIHJ0 eCBnZW5fcnR4X2ZtdF9pdXUwMGlzcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUg bW9kZSwgaW50IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwgaW50IGFyZzMsIGNvbnN0IGNoYXIg KmFyZzQsIGNvbnN0IGNoYXIgKmFyZzUpOwoKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X3NzaUVF c2kgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmFy ZzAsIGNvbnN0IGNoYXIgKmFyZzEsIGludCBhcmcyLCBydHZlYyBhcmczLCBydHZlYyBhcmc0LCBj b25zdCBjaGFyICphcmc1LCBpbnQgYXJnNik7CgoKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfRWkg KGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0dmVjIGFyZzAsIGludCBh cmcxKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZUVlZTAgKGVudW0gcnR4X2NvZGUsIGVudW0g bWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHZlYyBhcmcxLCBydHggYXJnMiwgcnR4IGFy ZzMpOwoKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWVlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1h Y2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyKTsKCmV4dGVybiBy dHggZ2VuX3J0eF9mbXRfIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsK ZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF93IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9k ZSBtb2RlLCBsb25nIGxvbmcgYXJnMCk7CgpleHRlcm4gcnR4IGdlbl9ydHhfZm10XzB3dyAoZW51 bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgbG9uZyBsb25nIGFyZzAsIGxvbmcg bG9uZyBhcmcxKTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10XzAgKGVudW0gcnR4X2NvZGUsIGVu dW0gbWFjaGluZV9tb2RlIG1vZGUpOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kwIChlbnVtIHJ0 eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCk7CgpleHRlcm4gcnR4IGdl bl9ydHhfZm10X2VpIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHgg YXJnMCwgaW50IGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lMCAoZW51bSBydHhfY29k ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzApOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4 X2ZtdF91MDAgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcw KTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWl0IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hp bmVfbW9kZSBtb2RlLCBydHggYXJnMCwgaW50IGFyZzEsIHVuaW9uIHRyZWVfbm9kZSAqYXJnMik7 CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lZWVlZSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo aW5lX21vZGUgbW9kZSwgcnR4IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwgcnR4IGFyZzMsIHJ0 eCBhcmc0KTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X0VlIChlbnVtIHJ0eF9jb2RlLCBlbnVt IG1hY2hpbmVfbW9kZSBtb2RlLCBydHZlYyBhcmcwLCBydHggYXJnMSk7CgpleHRlcm4gcnR4IGdl bl9ydHhfZm10X3V1RWlpaWlpaWJiaWkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2Rl IG1vZGUsIHJ0eCBhcmcwLCBydHggYXJnMSwgcnR2ZWMgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0 LCBpbnQgYXJnNSwgaW50IGFyZzYsIGludCBhcmc3LCBpbnQgYXJnOCwgc3RydWN0IGJpdG1hcF9o ZWFkX2RlZiAqYXJnOSwgc3RydWN0IGJpdG1hcF9oZWFkX2RlZiAqYXJnMTAsIGludCBhcmcxMSwg aW50IGFyZzEyKTsKCgoKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9paWlpaWlpaXR0IChlbnVt IHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgaW50IGFyZzEsIGlu dCBhcmcyLCBpbnQgYXJnMywgaW50IGFyZzQsIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcs IHVuaW9uIHRyZWVfbm9kZSAqYXJnOCwgdW5pb24gdHJlZV9ub2RlICphcmc5KTsKCgoKCgpleHRl cm4gcnR4IGdlbl9ydHhfZm10X2V0aSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUg bW9kZSwgcnR4IGFyZzAsIHVuaW9uIHRyZWVfbm9kZSAqYXJnMSwgaW50IGFyZzIpOwoKCmV4dGVy biBydHggZ2VuX3J0eF9mbXRfYmkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v ZGUsIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmFyZzAsIGludCBhcmcxKTsKCgpleHRlcm4gcnR4 IGdlbl9ydHhfZm10X3V1dXUgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUs IHJ0eCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIsIHJ0eCBhcmczKTsKIyAxNjQxICIuLi8uLi9l Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiIDIKCgoKCgoKCmV4dGVybiBydHggZ2VuX3J0 eF9DT05TVF9ET1VCTEUgKGVudW0gbWFjaGluZV9tb2RlLCBsb25nIGxvbmcsIGxvbmcgbG9uZyk7 CgpleHRlcm4gcnR4IGdlbl9ydHhfQ09OU1RfSU5UIChlbnVtIG1hY2hpbmVfbW9kZSwgbG9uZyBs b25nKTsKZXh0ZXJuIHJ0eCBnZW5fcmF3X1JFRyAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4 dGVybiBydHggZ2VuX3J0eF9SRUcgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOwpleHRlcm4gcnR4 IGdlbl9ydHhfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBpbnQpOwpleHRlcm4gcnR4 IGdlbl9ydHhfTUVNIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKCmV4dGVybiBydHggZ2VuX2xv d3BhcnRfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKIyAxNzI2ICIuLi8uLi9lZ2Nj LTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmV4dGVybiBydHggZmluZF9uZXh0X3JlZiAocnR4 LCBydHgpOwoKZXh0ZXJuIHJ0eCBvdXRwdXRfY29uc3RhbnRfZGVmICh0cmVlLCBpbnQpOwpleHRl cm4gcnR4IGltbWVkX3JlYWxfY29uc3QgKHRyZWUpOwojIDE3MzkgIi4uLy4uL2VnY2MtMy4xLUNW UzIwMDIwNDE4L2djYy9ydGwuaCIKZXh0ZXJuIGludCBmbG93Ml9jb21wbGV0ZWQ7CgoKCgpleHRl cm4gaW50IHJlbG9hZF9jb21wbGV0ZWQ7CgoKCgpleHRlcm4gaW50IHJlbG9hZF9pbl9wcm9ncmVz czsKCgoKCgoKCmV4dGVybiBpbnQgY3NlX25vdF9leHBlY3RlZDsKCgoKZXh0ZXJuIGludCBub19u ZXdfcHNldWRvczsKCgoKCgpleHRlcm4gaW50IHJ0eF90b190cmVlX2NvZGUgKGVudW0gcnR4X2Nv ZGUpOwoKCnN0cnVjdCBvYnN0YWNrOwpleHRlcm4gdm9pZCBnY2Nfb2JzdGFja19pbml0IChzdHJ1 Y3Qgb2JzdGFjayAqKTsKCgpzdHJ1Y3QgY3NlX2Jhc2ljX2Jsb2NrX2RhdGE7CiMgMTc4NSAiLi4v Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gaW50IHJ0eF9jb3N0IChy dHgsIGVudW0gcnR4X2NvZGUpOwpleHRlcm4gaW50IGFkZHJlc3NfY29zdCAocnR4LCBlbnVtIG1h Y2hpbmVfbW9kZSk7CmV4dGVybiB2b2lkIGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyAocnR4 LCBpbnQsIGludCk7CgpleHRlcm4gaW50IGNzZV9tYWluIChydHgsIGludCwgaW50LCBGSUxFICop OwoKZXh0ZXJuIHZvaWQgY3NlX2VuZF9vZl9iYXNpY19ibG9jayAocnR4LCBzdHJ1Y3QgY3NlX2Jh c2ljX2Jsb2NrX2RhdGEgKiwgaW50LCBpbnQsIGludCk7CgoKCgpleHRlcm4gaW50IGNvbXBhcmlz b25fZG9taW5hdGVzX3AgKGVudW0gcnR4X2NvZGUsIGVudW0gcnR4X2NvZGUpOwpleHRlcm4gaW50 IGNvbmRqdW1wX3AgKHJ0eCk7CmV4dGVybiBpbnQgYW55X2NvbmRqdW1wX3AgKHJ0eCk7CmV4dGVy biBpbnQgYW55X3VuY29uZGp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBzYWZlX3RvX3JlbW92ZV9q dW1wX3AgKHJ0eCk7CmV4dGVybiBydHggcGNfc2V0IChydHgpOwpleHRlcm4gcnR4IGNvbmRqdW1w X2xhYmVsIChydHgpOwpleHRlcm4gaW50IHNpbXBsZWp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBy ZXR1cm5qdW1wX3AgKHJ0eCk7CmV4dGVybiBpbnQgb25seWp1bXBfcCAocnR4KTsKZXh0ZXJuIGlu dCBvbmx5X3NldHNfY2MwX3AgKHJ0eCk7CmV4dGVybiBpbnQgc2V0c19jYzBfcCAocnR4KTsKZXh0 ZXJuIGludCBpbnZlcnRfanVtcF8xIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgaW52ZXJ0X2p1bXAg KHJ0eCwgcnR4LCBpbnQpOwpleHRlcm4gaW50IHJ0eF9yZW51bWJlcmVkX2VxdWFsX3AgKHJ0eCwg cnR4KTsKZXh0ZXJuIGludCB0cnVlX3JlZ251bSAocnR4KTsKZXh0ZXJuIGludCByZWRpcmVjdF9q dW1wXzEgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWRpcmVjdF9qdW1wIChydHgsIHJ0eCwgaW50 KTsKZXh0ZXJuIHZvaWQgcmVidWlsZF9qdW1wX2xhYmVscyAocnR4KTsKZXh0ZXJuIGVudW0gcnR4 X2NvZGUgcmV2ZXJzZWRfY29tcGFyaXNvbl9jb2RlIChydHgsIHJ0eCk7CmV4dGVybiBlbnVtIHJ0 eF9jb2RlIHJldmVyc2VkX2NvbXBhcmlzb25fY29kZV9wYXJ0cyAoZW51bSBydHhfY29kZSwgcnR4 LCBydHgsIHJ0eCk7CgpleHRlcm4gdm9pZCBkZWxldGVfZm9yX3BlZXBob2xlIChydHgsIHJ0eCk7 CmV4dGVybiBpbnQgY29uZGp1bXBfaW5fcGFyYWxsZWxfcCAocnR4KTsKZXh0ZXJuIHZvaWQgbmV2 ZXJfcmVhY2hlZF93YXJuaW5nIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIHB1cmdlX2xpbmVfbnVt YmVyX25vdGVzIChydHgpOwpleHRlcm4gdm9pZCBjb3B5X2xvb3BfaGVhZGVycyAocnR4KTsKCgpl eHRlcm4gaW50IG1heF9yZWdfbnVtICh2b2lkKTsKZXh0ZXJuIGludCBtYXhfbGFiZWxfbnVtICh2 b2lkKTsKZXh0ZXJuIGludCBnZXRfZmlyc3RfbGFiZWxfbnVtICh2b2lkKTsKZXh0ZXJuIHZvaWQg ZGVsZXRlX2luc25zX3NpbmNlIChydHgpOwpleHRlcm4gdm9pZCBtYXJrX3JlZ19wb2ludGVyIChy dHgsIGludCk7CmV4dGVybiB2b2lkIG1hcmtfdXNlcl9yZWcgKHJ0eCk7CmV4dGVybiB2b2lkIHJl c2V0X3VzZWRfZmxhZ3MgKHJ0eCk7CmV4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnMgKHJ0eCwgcnR4 LCBydHgpOwpleHRlcm4gdm9pZCByZW9yZGVyX2luc25zX25vYmIgKHJ0eCwgcnR4LCBydHgpOwpl eHRlcm4gaW50IGdldF9tYXhfdWlkICh2b2lkKTsKZXh0ZXJuIGludCBpbl9zZXF1ZW5jZV9wICh2 b2lkKTsKZXh0ZXJuIHZvaWQgZm9yY2VfbmV4dF9saW5lX25vdGUgKHZvaWQpOwpleHRlcm4gdm9p ZCBjbGVhcl9lbWl0X2NhY2hlcyAodm9pZCk7CmV4dGVybiB2b2lkIGluaXRfZW1pdCAodm9pZCk7 CmV4dGVybiB2b2lkIGluaXRfZW1pdF9vbmNlIChpbnQpOwpleHRlcm4gdm9pZCBwdXNoX3RvcG1v c3Rfc2VxdWVuY2UgKHZvaWQpOwpleHRlcm4gdm9pZCBwb3BfdG9wbW9zdF9zZXF1ZW5jZSAodm9p ZCk7CmV4dGVybiBpbnQgc3VicmVnX3JlYWxwYXJ0X3AgKHJ0eCk7CmV4dGVybiB2b2lkIHJldmVy c2VfY29tcGFyaXNvbiAocnR4KTsKZXh0ZXJuIHZvaWQgc2V0X25ld19maXJzdF9hbmRfbGFzdF9p bnNuIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIHNldF9uZXdfZmlyc3RfYW5kX2xhc3RfbGFiZWxf bnVtIChpbnQsIGludCk7CmV4dGVybiB2b2lkIHNldF9uZXdfbGFzdF9sYWJlbF9udW0gKGludCk7 CmV4dGVybiB2b2lkIHVuc2hhcmVfYWxsX3J0bF9hZ2FpbiAocnR4KTsKZXh0ZXJuIHZvaWQgc2V0 X2xhc3RfaW5zbiAocnR4KTsKZXh0ZXJuIHZvaWQgbGlua19jYzBfaW5zbnMgKHJ0eCk7CmV4dGVy biB2b2lkIGFkZF9pbnNuIChydHgpOwpleHRlcm4gdm9pZCBhZGRfaW5zbl9iZWZvcmUgKHJ0eCwg cnR4KTsKZXh0ZXJuIHZvaWQgYWRkX2luc25fYWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQg cmVtb3ZlX2luc24gKHJ0eCk7CmV4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnNfd2l0aF9saW5lX25v dGVzIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgZW1pdF9pbnNuX2FmdGVyX3dpdGhfbGlu ZV9ub3RlcyAocnR4LCBydHgsIHJ0eCk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIGNsYXNzaWZ5X2lu c24gKHJ0eCk7CmV4dGVybiBydHggZW1pdCAocnR4KTsKCgoKaW50IGZvcmNlX2xpbmVfbnVtYmVy cyAodm9pZCk7CnZvaWQgcmVzdG9yZV9saW5lX251bWJlcl9zdGF0dXMgKGludCBvbGRfdmFsdWUp OwpleHRlcm4gdm9pZCByZW51bWJlcl9pbnNucyAoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3Zl X3VubmVjZXNzYXJ5X25vdGVzICh2b2lkKTsKZXh0ZXJuIHJ0eCBkZWxldGVfaW5zbiAocnR4KTsK ZXh0ZXJuIHZvaWQgZGVsZXRlX2luc25fY2hhaW4gKHJ0eCwgcnR4KTsKCgpleHRlcm4gaW50IGNv bWJpbmVfaW5zdHJ1Y3Rpb25zIChydHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiB1bnNpZ25lZCBp bnQgZXh0ZW5kZWRfY291bnQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4dGVybiBy dHggcmVtb3ZlX2RlYXRoICh1bnNpZ25lZCBpbnQsIHJ0eCk7CgpleHRlcm4gdm9pZCBkdW1wX2Nv bWJpbmVfc3RhdHMgKEZJTEUgKik7CmV4dGVybiB2b2lkIGR1bXBfY29tYmluZV90b3RhbF9zdGF0 cyAoRklMRSAqKTsKCgoKCmV4dGVybiB2b2lkIHNjaGVkdWxlX2luc25zIChGSUxFICopOwpleHRl cm4gdm9pZCBzY2hlZHVsZV9lYmJzIChGSUxFICopOwoKZXh0ZXJuIHZvaWQgZml4X3NjaGVkX3Bh cmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnBy aW50X3J0eF9oZWFkOwpleHRlcm4gdm9pZCBkZWJ1Z19ydHggKHJ0eCk7CmV4dGVybiB2b2lkIGRl YnVnX3J0eF9saXN0IChydHgsIGludCk7CmV4dGVybiB2b2lkIGRlYnVnX3J0eF9yYW5nZSAocnR4 LCBydHgpOwpleHRlcm4gcnR4IGRlYnVnX3J0eF9maW5kIChydHgsIGludCk7CgpleHRlcm4gdm9p ZCBwcmludF9tZW1fZXhwciAoRklMRSAqLCB0cmVlKTsKZXh0ZXJuIHZvaWQgcHJpbnRfcnRsIChG SUxFICosIHJ0eCk7CmV4dGVybiB2b2lkIHByaW50X3NpbXBsZV9ydGwgKEZJTEUgKiwgcnR4KTsK ZXh0ZXJuIGludCBwcmludF9ydGxfc2luZ2xlIChGSUxFICosIHJ0eCk7CmV4dGVybiB2b2lkIHBy aW50X2lubGluZV9ydHggKEZJTEUgKiwgcnR4LCBpbnQpOwoKCgpleHRlcm4gdm9pZCBpbml0X2xv b3AgKHZvaWQpOwpleHRlcm4gcnR4IGxpYmNhbGxfb3RoZXJfcmVnIChydHgsIHJ0eCk7CgpleHRl cm4gdm9pZCBsb29wX29wdGltaXplIChydHgsIEZJTEUgKiwgaW50KTsKCmV4dGVybiB2b2lkIHJl Y29yZF9leGNlc3NfcmVncyAocnR4LCBydHgsIHJ0eCAqKTsKCgpleHRlcm4gdm9pZCByZXBvc2l0 aW9uX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9ub3RlcyAocnR4KTsKZXh0ZXJuIHZvaWQgdGhyZWFk X3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyAocnR4KTsKZXh0ZXJuIGludCBwcm9sb2d1ZV9l cGlsb2d1ZV9jb250YWlucyAocnR4KTsKZXh0ZXJuIGludCBzaWJjYWxsX2VwaWxvZ3VlX2NvbnRh aW5zIChydHgpOwpleHRlcm4gdm9pZCBwcmVzZXJ2ZV9ydGxfZXhwcl9yZXN1bHQgKHJ0eCk7CmV4 dGVybiB2b2lkIG1hcmtfdGVtcF9hZGRyX3Rha2VuIChydHgpOwpleHRlcm4gdm9pZCB1cGRhdGVf dGVtcF9zbG90X2FkZHJlc3MgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgcHVyZ2VfYWRkcmVzc29m IChydHgpOwpleHRlcm4gdm9pZCBwdXJnZV9oYXJkX3N1YnJlZ19zZXRzIChydHgpOwoKCmV4dGVy biB2b2lkIHNldF9maWxlX2FuZF9saW5lX2Zvcl9zdG10IChjb25zdCBjaGFyICosIGludCk7CmV4 dGVybiB2b2lkIGV4cGFuZF9udWxsX3JldHVybiAodm9pZCk7CmV4dGVybiB2b2lkIGVtaXRfanVt cCAocnR4KTsKZXh0ZXJuIGludCBwcmVzZXJ2ZV9zdWJleHByZXNzaW9uc19wICh2b2lkKTsKCgpl eHRlcm4gdm9pZCBtb3ZlX2J5X3BpZWNlcyAocnR4LCBydHgsIHVuc2lnbmVkIGxvbmcgbG9uZywg dW5zaWduZWQgaW50KTsKCgoKCmV4dGVybiB2b2lkIHJlY29tcHV0ZV9yZWdfdXNhZ2UgKHJ0eCwg aW50KTsKZXh0ZXJuIGludCBpbml0aWFsaXplX3VuaW5pdGlhbGl6ZWRfc3VicmVncyAodm9pZCk7 CgpleHRlcm4gdm9pZCBwcmludF9ydGxfd2l0aF9iYiAoRklMRSAqLCBydHgpOwpleHRlcm4gdm9p ZCBkdW1wX2Zsb3dfaW5mbyAoRklMRSAqKTsKCgoKZXh0ZXJuIHZvaWQgaW5pdF9leHBtZWQgKHZv aWQpOwpleHRlcm4gdm9pZCBleHBhbmRfaW5jIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIGV4cGFu ZF9kZWMgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBleHBhbmRfbXVsdF9oaWdocGFydCAoZW51bSBt YWNoaW5lX21vZGUsIHJ0eCwgdW5zaWduZWQgbG9uZyBsb25nLCBydHgsIGludCwgaW50KTsKCgoK CgpleHRlcm4gaW50IGdjc2VfbWFpbiAocnR4LCBGSUxFICopOwoKCgpleHRlcm4gdm9pZCBtYXJr X2VsaW1pbmF0aW9uIChpbnQsIGludCk7CgpleHRlcm4gaW50IGdsb2JhbF9hbGxvYyAoRklMRSAq KTsKZXh0ZXJuIHZvaWQgZHVtcF9nbG9iYWxfcmVncyAoRklMRSAqKTsKCgoKCmV4dGVybiB2b2lk IGJ1aWxkX2luc25fY2hhaW4gKHJ0eCk7CgoKZXh0ZXJuIGludCByZWdfY2xhc3Nlc19pbnRlcnNl Y3RfcCAoZW51bSByZWdfY2xhc3MsIGVudW0gcmVnX2NsYXNzKTsKZXh0ZXJuIGludCByZWdfY2xh c3Nfc3Vic2V0X3AgKGVudW0gcmVnX2NsYXNzLCBlbnVtIHJlZ19jbGFzcyk7CmV4dGVybiB2b2lk IGdsb2JhbGl6ZV9yZWcgKGludCk7CmV4dGVybiB2b2lkIGluaXRfcmVncyAodm9pZCk7CmV4dGVy biB2b2lkIGluaXRfcmVnX3NldHMgKHZvaWQpOwpleHRlcm4gdm9pZCByZWdzZXRfcmVsZWFzZV9t ZW1vcnkgKHZvaWQpOwpleHRlcm4gdm9pZCByZWdjbGFzc19pbml0ICh2b2lkKTsKZXh0ZXJuIHZv aWQgcmVnY2xhc3MgKHJ0eCwgaW50LCBGSUxFICopOwpleHRlcm4gdm9pZCByZWdfc2NhbiAocnR4 LCB1bnNpZ25lZCBpbnQsIGludCk7CmV4dGVybiB2b2lkIHJlZ19zY2FuX3VwZGF0ZSAocnR4LCBy dHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIGZpeF9yZWdpc3RlciAoY29uc3QgY2hhciAq LCBpbnQsIGludCk7CgpleHRlcm4gdm9pZCBkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcyAocnR4 KTsKCgoKZXh0ZXJuIHZvaWQgcmVnbW92ZV9vcHRpbWl6ZSAocnR4LCBpbnQsIEZJTEUgKik7Cgpl eHRlcm4gdm9pZCBjb21iaW5lX3N0YWNrX2FkanVzdG1lbnRzICh2b2lkKTsKCgoKZXh0ZXJuIHZv aWQgZGJyX3NjaGVkdWxlIChydHgsIEZJTEUgKik7CgoKCgpleHRlcm4gdm9pZCBkdW1wX2xvY2Fs X2FsbG9jIChGSUxFICopOwoKZXh0ZXJuIGludCBsb2NhbF9hbGxvYyAodm9pZCk7CmV4dGVybiBp bnQgZnVuY3Rpb25faW52YXJpYW50X3AgKHJ0eCk7CgoKZXh0ZXJuIHZvaWQgaW5pdF9icmFuY2hf cHJvYiAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgYnJhbmNoX3Byb2IgKHZvaWQpOwpleHRl cm4gdm9pZCBlbmRfYnJhbmNoX3Byb2IgKHZvaWQpOwpleHRlcm4gdm9pZCBvdXRwdXRfZnVuY19z dGFydF9wcm9maWxlciAodm9pZCk7CgoKCmV4dGVybiB2b2lkIHJlZ190b19zdGFjayAocnR4LCBG SUxFICopOwoKCgpleHRlcm4gaW50IGFkZF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9u ZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25n ICosIGxvbmcgbG9uZyAqKTsKCgoKZXh0ZXJuIGludCBuZWdfZG91YmxlICh1bnNpZ25lZCBsb25n IGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgpl eHRlcm4gaW50IG11bF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCB1bnNp Z25lZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9u ZyAqKTsKCgoKCmV4dGVybiB2b2lkIGxzaGlmdF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywg bG9uZyBsb25nLCBsb25nIGxvbmcsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyBsb25nICos IGxvbmcgbG9uZyAqLCBpbnQpOwoKCgpleHRlcm4gdm9pZCByc2hpZnRfZG91YmxlICh1bnNpZ25l ZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgbG9uZyBsb25nLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVk IGxvbmcgbG9uZyAqLCBsb25nIGxvbmcgKiwgaW50KTsKCgoKZXh0ZXJuIHZvaWQgbHJvdGF0ZV9k b3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCBsb25nIGxvbmcsIHVuc2lnbmVk IGludCwgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgoKZXh0ZXJuIHZvaWQg cnJvdGF0ZV9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCBsb25nIGxvbmcs IHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgoKCgpl bnVtIGxpYmNhbGxfdHlwZQp7CiAgTENUX05PUk1BTCA9IDAsCiAgTENUX0NPTlNUID0gMSwKICBM Q1RfUFVSRSA9IDIsCiAgTENUX0NPTlNUX01BS0VfQkxPQ0sgPSAzLAogIExDVF9QVVJFX01BS0Vf QkxPQ0sgPSA0LAogIExDVF9OT1JFVFVSTiA9IDUsCiAgTENUX1RIUk9XID0gNiwKICBMQ1RfQUxX QVlTX1JFVFVSTiA9IDcsCiAgTENUX1JFVFVSTlNfVFdJQ0UgPSA4Cn07CgpleHRlcm4gdm9pZCBl bWl0X2xpYnJhcnlfY2FsbCAocnR4LCBlbnVtIGxpYmNhbGxfdHlwZSwgZW51bSBtYWNoaW5lX21v ZGUsIGludCwgLi4uKTsKCgpleHRlcm4gcnR4IGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIChydHgs IHJ0eCwgZW51bSBsaWJjYWxsX3R5cGUsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIC4uLik7CgoK CgpleHRlcm4gaW50IHNldF9kb21pbmF0ZXNfdXNlIChpbnQsIGludCwgaW50LCBydHgsIHJ0eCk7 CgoKZXh0ZXJuIGludCBpbl9kYXRhX3NlY3Rpb24gKHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X3Zh cmFzbV9vbmNlICh2b2lkKTsKCgpleHRlcm4gdm9pZCBpbml0X3J0bCAodm9pZCk7CmV4dGVybiB2 b2lkIHRyYXZlcnNlX21kX2NvbnN0YW50cyAoaW50ICgqKSAodm9pZCAqKiwgdm9pZCAqKSwgdm9p ZCAqKTsKCnN0cnVjdCBtZF9jb25zdGFudCB7IGNoYXIgKm5hbWUsICp2YWx1ZTsgfTsKCgpleHRl cm4gaW50IHJlYWRfc2tpcF9zcGFjZXMgKEZJTEUgKik7CmV4dGVybiBydHggcmVhZF9ydHggKEZJ TEUgKik7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnJlYWRfcnR4X2ZpbGVuYW1lOwpleHRlcm4gaW50 IHJlYWRfcnR4X2xpbmVubzsKCgoKCgoKCmV4dGVybiB2b2lkIGZhbmN5X2Fib3J0IChjb25zdCBj aGFyICosIGludCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCgpleHRlcm4gdm9pZCBjbGVhcl9yZWdfYWxpYXNfaW5mbyAocnR4KTsKZXh0ZXJuIHJ0 eCBjYW5vbl9ydHggKHJ0eCk7CmV4dGVybiBpbnQgdHJ1ZV9kZXBlbmRlbmNlIChydHgsIGVudW0g bWFjaGluZV9tb2RlLCBydHgsIGludCAoKikocnR4LCBpbnQpKTsKCmV4dGVybiBydHggZ2V0X2Fk ZHIgKHJ0eCk7CmV4dGVybiBpbnQgY2Fub25fdHJ1ZV9kZXBlbmRlbmNlIChydHgsIGVudW0gbWFj aGluZV9tb2RlLCBydHgsIHJ0eCwgaW50ICgqKShydHgsIGludCkpOwoKZXh0ZXJuIGludCByZWFk X2RlcGVuZGVuY2UgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBhbnRpX2RlcGVuZGVuY2UgKHJ0eCwg cnR4KTsKZXh0ZXJuIGludCBvdXRwdXRfZGVwZW5kZW5jZSAocnR4LCBydHgpOwpleHRlcm4gdm9p ZCBtYXJrX2NvbnN0YW50X2Z1bmN0aW9uICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9hbGlhc19v bmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9hbGlhc19hbmFseXNpcyAodm9pZCk7CmV4dGVy biB2b2lkIGVuZF9hbGlhc19hbmFseXNpcyAodm9pZCk7CmV4dGVybiBydHggYWRkcl9zaWRlX2Vm ZmVjdF9ldmFsIChydHgsIGludCwgaW50KTsKCgp0eXBlZGVmIGVudW0gewogIHNpYmNhbGxfdXNl X25vcm1hbCA9IDEsCiAgc2liY2FsbF91c2VfdGFpbF9yZWN1cnNpb24sCiAgc2liY2FsbF91c2Vf c2liY2FsbAp9IHNpYmNhbGxfdXNlX3Q7CgpleHRlcm4gdm9pZCBvcHRpbWl6ZV9zaWJsaW5nX2Fu ZF90YWlsX3JlY3Vyc2l2ZV9jYWxscyAodm9pZCk7CmV4dGVybiB2b2lkIHJlcGxhY2VfY2FsbF9w bGFjZWhvbGRlciAocnR4LCBzaWJjYWxsX3VzZV90KTsKCgoKCgoKZXh0ZXJuIHJ0eCBzdGFja19s aW1pdF9ydHg7CgoKZXh0ZXJuIHZvaWQgcmVncmVuYW1lX29wdGltaXplICh2b2lkKTsKZXh0ZXJu IHZvaWQgY29weXByb3BfaGFyZHJlZ19mb3J3YXJkICh2b2lkKTsKCgpleHRlcm4gdm9pZCBpZl9j b252ZXJ0IChpbnQpOwoKCmV4dGVybiB2b2lkIGludmVydF9icl9wcm9iYWJpbGl0aWVzIChydHgp OwpleHRlcm4gX0Jvb2wgZXhwZW5zaXZlX2Z1bmN0aW9uX3AgKGludCk7CiMgNTYgIi4uLy4uL2Vn Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEt Q1ZTMjAwMjA0MTgvZ2NjL2Vycm9ycy5oIiAxCiMgMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9lcnJvcnMuaCIKZXh0ZXJuIHZvaWQgd2FybmluZyAoY29uc3QgY2hhciAqLCAuLi4p OwpleHRlcm4gdm9pZCBlcnJvciAoY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gdm9pZCBmYXRh bCAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0 ZXJuIHZvaWQgaW50ZXJuYWxfZXJyb3IgKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CmV4dGVybiBjb25zdCBjaGFyICp0cmltX2ZpbGVuYW1lIChjb25z dCBjaGFyICopOwpleHRlcm4gdm9pZCBmYW5jeV9hYm9ydCAoY29uc3QgY2hhciAqLCBpbnQsIGNv bnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCmV4dGVybiBp bnQgaGF2ZV9lcnJvcjsKZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOwojIDU3ICIuLi8uLi9l Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIgMgojIDEgIi4uLy4uL2VnY2MtMy4x LUNWUzIwMDIwNDE4L2djYy9nZW5zdXBwb3J0LmgiIDEKIyAyMSAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL2dlbnN1cHBvcnQuaCIKc3RydWN0IG9ic3RhY2s7CmV4dGVybiBzdHJ1Y3Qg b2JzdGFjayAqcnRsX29ic3RhY2s7CgpleHRlcm4gaW50IGluaXRfbWRfcmVhZGVyX2FyZ3MgKGlu dCwgY2hhciAqKik7CmV4dGVybiBpbnQgaW5pdF9tZF9yZWFkZXIgKGNvbnN0IGNoYXIgKik7CmV4 dGVybiBydHggcmVhZF9tZF9ydHggKGludCAqLCBpbnQgKik7CgpleHRlcm4gdm9pZCBtZXNzYWdl X3dpdGhfbGluZSAoaW50LCBjb25zdCBjaGFyICosIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKIyA1OCAiLi4vLi4vZWdjYy0zLjEtQ1ZT MjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiIDIKCgoKCgoKc3RhdGljIGNoYXIgKippbnNuX25hbWVf cHRyID0gMDsKc3RhdGljIGludCBpbnNuX25hbWVfcHRyX3NpemUgPSAwOwoKCgoKCnN0cnVjdCBk ZWNpc2lvbl9oZWFkCnsKICBzdHJ1Y3QgZGVjaXNpb24gKmZpcnN0OwogIHN0cnVjdCBkZWNpc2lv biAqbGFzdDsKfTsKCgoKCgpzdHJ1Y3QgZGVjaXNpb25fdGVzdAp7CgogIHN0cnVjdCBkZWNpc2lv bl90ZXN0ICpuZXh0OwoKCiAgZW51bSBkZWNpc2lvbl90eXBlCiAgICB7CiAgICAgIERUX21vZGUs IERUX2NvZGUsIERUX3ZlY2xlbiwKICAgICAgRFRfZWx0X3plcm9faW50LCBEVF9lbHRfb25lX2lu dCwgRFRfZWx0X3plcm9fd2lkZSwgRFRfZWx0X3plcm9fd2lkZV9zYWZlLAogICAgICBEVF92ZWNs ZW5fZ2UsIERUX2R1cCwgRFRfcHJlZCwgRFRfY190ZXN0LAogICAgICBEVF9hY2NlcHRfb3AsIERU X2FjY2VwdF9pbnNuCiAgICB9IHR5cGU7CgogIHVuaW9uCiAgewogICAgZW51bSBtYWNoaW5lX21v ZGUgbW9kZTsKICAgIGVudW0gcnR4X2NvZGUgY29kZTsKCiAgICBzdHJ1Y3QKICAgIHsKICAgICAg Y29uc3QgY2hhciAqbmFtZTsKICAgICAgaW50IGluZGV4OwogICAgICBlbnVtIG1hY2hpbmVfbW9k ZSBtb2RlOwogICAgfSBwcmVkOwoKICAgIGNvbnN0IGNoYXIgKmNfdGVzdDsKICAgIGludCB2ZWNs ZW47CiAgICBpbnQgZHVwOwogICAgbG9uZyBsb25nIGludHZhbDsKICAgIGludCBvcG5vOwoKICAg IHN0cnVjdCB7CiAgICAgIGludCBjb2RlX251bWJlcjsKICAgICAgaW50IGxpbmVubzsKICAgICAg aW50IG51bV9jbG9iYmVyc190b19hZGQ7CiAgICB9IGluc247CiAgfSB1Owp9OwoKCgpzdHJ1Y3Qg ZGVjaXNpb24KewogIHN0cnVjdCBkZWNpc2lvbl9oZWFkIHN1Y2Nlc3M7CiAgc3RydWN0IGRlY2lz aW9uICpuZXh0OwogIHN0cnVjdCBkZWNpc2lvbiAqcHJldjsKICBzdHJ1Y3QgZGVjaXNpb24gKmFm dGVyd2FyZDsKCgogIGNvbnN0IGNoYXIgKnBvc2l0aW9uOwoKICBzdHJ1Y3QgZGVjaXNpb25fdGVz dCAqdGVzdHM7CgogIGludCBudW1iZXI7CiAgaW50IHN1YnJvdXRpbmVfbnVtYmVyOwogIGludCBu ZWVkX2xhYmVsOwp9OwoKCgpzdGF0aWMgaW50IG5leHRfc3Vicm91dGluZV9udW1iZXI7CgoKCgoK ZW51bSByb3V0aW5lX3R5cGUgewogIFJFQ09HLCBTUExJVCwgUEVFUEhPTEUyCn07CgoKCgoKc3Rh dGljIGludCBuZXh0X251bWJlcjsKCgoKc3RhdGljIGludCBuZXh0X2luc25fY29kZTsKCgoKCnN0 YXRpYyBpbnQgbmV4dF9pbmRleDsKCgoKCnN0YXRpYyBpbnQgbWF4X2RlcHRoOwoKCnN0YXRpYyBp bnQgcGF0dGVybl9saW5lbm87CgoKc3RhdGljIGludCBlcnJvcl9jb3VudDsKCgoKCgoKCnN0YXRp YyBjb25zdCBzdHJ1Y3QgcHJlZF90YWJsZQp7CiAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKICBj b25zdCBlbnVtIHJ0eF9jb2RlIGNvZGVzWygoaW50KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUp XTsKfSBwcmVkc1tdID0gewogIHsiZ2VuZXJhbF9vcGVyYW5kIiwge0NPTlNUX0lOVCwgQ09OU1Rf RE9VQkxFLCBDT05TVCwgU1lNQk9MX1JFRiwKICAgICAgICAgICAgICAgICAgICAgICBMQUJFTF9S RUYsIFNVQlJFRywgUkVHLCBNRU19fSwKCiAgeyJ1bnNfYXJpdGhfb3BlcmFuZCIsIHsgUkVHLCBD T05TVF9JTlQsIFNVQlJFRyB9fSwgeyJhcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwg U1VCUkVHIH19LCB7ImFyaXRoMzJfb3BlcmFuZCIsIHsgUkVHLCBDT05TVF9JTlQsIFNVQlJFRyB9 fSwgeyJyZWdfb3JfMF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBT VUJSRUcgfX0sIHsidHJ1ZV9yZWdfb3JfMF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgQ09O U1RfRE9VQkxFLCBTVUJSRUcgfX0sIHsic21hbGxfaW50IiwgeyBDT05TVF9JTlQgfX0sIHsibGFy Z2VfaW50IiwgeyBDT05TVF9JTlQgfX0sIHsibWlwc19jb25zdF9kb3VibGVfb2siLCB7IENPTlNU X0RPVUJMRSB9fSwgeyJjb25zdF9mbG9hdF8xX29wZXJhbmQiLCB7IENPTlNUX0RPVUJMRSB9fSwg eyJzaW1wbGVfbWVtb3J5X29wZXJhbmQiLCB7IE1FTSwgU1VCUkVHIH19LCB7ImVxdWFsaXR5X29w IiwgeyBFUSwgTkUgfX0sIHsiY21wX29wIiwgeyBFUSwgTkUsIEdULCBHRSwgR1RVLCBHRVUsIExU LCBMRSwgTFRVLCBMRVUgfX0sIHsidHJhcF9jbXBfb3AiLCB7IEVRLCBORSwgR0UsIEdFVSwgTFQs IExUVSB9fSwgeyJwY19vcl9sYWJlbF9vcGVyYW5kIiwgeyBQQywgTEFCRUxfUkVGIH19LCB7ImNh bGxfaW5zbl9vcGVyYW5kIiwgeyBDT05TVF9JTlQsIENPTlNULCBTWU1CT0xfUkVGLCBSRUd9fSwg eyJtb3ZlX29wZXJhbmQiLCB7IENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBDT05TVCwgU1lNQk9M X1JFRiwgTEFCRUxfUkVGLCBTVUJSRUcsIFJFRywgTUVNfX0sIHsibW92ZGlfb3BlcmFuZCIsIHsg Q09OU1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIFNV QlJFRywgUkVHLCBNRU0sIFNJR05fRVhURU5EIH19LCB7InNlX3JlZ2lzdGVyX29wZXJhbmQiLCB7 IFNVQlJFRywgUkVHLCBTSUdOX0VYVEVORCB9fSwgeyJzZV9yZWdfb3JfMF9vcGVyYW5kIiwgeyBS RUcsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBTVUJSRUcsIFNJR05fRVhURU5EIH19LCB7InNl X3Vuc19hcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgU1VCUkVHLCBTSUdOX0VYVEVO RCB9fSwgeyJzZV9hcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgU1VCUkVHLCBTSUdO X0VYVEVORCB9fSwgeyJzZV9ub25tZW1vcnlfb3BlcmFuZCIsIHsgQ09OU1RfSU5ULCBDT05TVF9E T1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIFNVQlJFRywgUkVHLCBTSUdOX0VY VEVORCB9fSwgeyJzZV9ub25pbW1lZGlhdGVfb3BlcmFuZCIsIHsgU1VCUkVHLCBSRUcsIE1FTSwg U0lHTl9FWFRFTkQgfX0sIHsiY29uc3R0YWJsZV9vcGVyYW5kIiwgeyBMQUJFTF9SRUYsIFNZTUJP TF9SRUYsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBDT05TVCB9fSwgeyJleHRlbmRfb3BlcmF0 b3IiLCB7IFNJR05fRVhURU5ELCBaRVJPX0VYVEVORCB9fSwgeyJoaWdocGFydF9zaGlmdF9vcGVy YXRvciIsIHsgQVNISUZUUlQsIExTSElGVFJULCBST1RBVEVSVCwgUk9UQVRFIH19LAoKICB7ImFk ZHJlc3Nfb3BlcmFuZCIsIHtDT05TVF9JTlQsIENPTlNUX0RPVUJMRSwgQ09OU1QsIFNZTUJPTF9S RUYsCiAgICAgICAgICAgICAgICAgICAgICAgTEFCRUxfUkVGLCBTVUJSRUcsIFJFRywgTUVNLCBQ TFVTLCBNSU5VUywgTVVMVH19LAogIHsicmVnaXN0ZXJfb3BlcmFuZCIsIHtTVUJSRUcsIFJFR319 LAogIHsicG1vZGVfcmVnaXN0ZXJfb3BlcmFuZCIsIHtTVUJSRUcsIFJFR319LAogIHsic2NyYXRj aF9vcGVyYW5kIiwge1NDUkFUQ0gsIFJFR319LAogIHsiaW1tZWRpYXRlX29wZXJhbmQiLCB7Q09O U1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLAogICAgICAgICAgICAgICAg ICAgICAgICAgTEFCRUxfUkVGfX0sCiAgeyJjb25zdF9pbnRfb3BlcmFuZCIsIHtDT05TVF9JTlR9 fSwKICB7ImNvbnN0X2RvdWJsZV9vcGVyYW5kIiwge0NPTlNUX0lOVCwgQ09OU1RfRE9VQkxFfX0s CiAgeyJub25pbW1lZGlhdGVfb3BlcmFuZCIsIHtTVUJSRUcsIFJFRywgTUVNfX0sCiAgeyJub25t ZW1vcnlfb3BlcmFuZCIsIHtDT05TVF9JTlQsIENPTlNUX0RPVUJMRSwgQ09OU1QsIFNZTUJPTF9S RUYsCiAgICAgICAgICAgICAgICAgICAgICAgICBMQUJFTF9SRUYsIFNVQlJFRywgUkVHfX0sCiAg eyJwdXNoX29wZXJhbmQiLCB7TUVNfX0sCiAgeyJwb3Bfb3BlcmFuZCIsIHtNRU19fSwKICB7Im1l bW9yeV9vcGVyYW5kIiwge1NVQlJFRywgTUVNfX0sCiAgeyJpbmRpcmVjdF9vcGVyYW5kIiwge1NV QlJFRywgTUVNfX0sCiAgeyJjb21wYXJpc29uX29wZXJhdG9yIiwge0VRLCBORSwgTEUsIExULCBH RSwgR1QsIExFVSwgTFRVLCBHRVUsIEdUVSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5P UkRFUkVELCBPUkRFUkVELCBVTkVRLCBVTkdFLCBVTkdULCBVTkxFLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBVTkxULCBMVEdUfX0sCiAgeyJtb2RlX2luZGVwZW5kZW50X29wZXJhbmQiLCB7 Q09OU1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExBQkVMX1JFRiwgU1VCUkVHLCBSRUcsIE1FTX19Cn07CgoKCnN0 YXRpYyBjb25zdCBjaGFyICpjb25zdCBzcGVjaWFsX21vZGVfcHJlZF90YWJsZVtdID0gewoKICAi cGNfb3JfbGFiZWxfb3BlcmFuZCIsCgogICJwbW9kZV9yZWdpc3Rlcl9vcGVyYW5kIgp9OwoKCgpz dGF0aWMgc3RydWN0IGRlY2lzaW9uICpuZXdfZGVjaXNpb24KICAoY29uc3QgY2hhciAqLCBzdHJ1 Y3QgZGVjaXNpb25faGVhZCAqKTsKc3RhdGljIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpuZXdfZGVj aXNpb25fdGVzdAogIChlbnVtIGRlY2lzaW9uX3R5cGUsIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICoq Kik7CnN0YXRpYyBydHggZmluZF9vcGVyYW5kCiAgKHJ0eCwgaW50KTsKc3RhdGljIHJ0eCBmaW5k X21hdGNoaW5nX29wZXJhbmQKICAocnR4LCBpbnQpOwpzdGF0aWMgdm9pZCB2YWxpZGF0ZV9wYXR0 ZXJuCiAgKHJ0eCwgcnR4LCBydHgsIGludCk7CnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKmFkZF90 b19zZXF1ZW5jZQogIChydHgsIHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIGNvbnN0IGNoYXIgKiwg ZW51bSByb3V0aW5lX3R5cGUsIGludCk7CgpzdGF0aWMgaW50IG1heWJlX2JvdGhfdHJ1ZV8yCiAg KHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICopOwpzdGF0aWMg aW50IG1heWJlX2JvdGhfdHJ1ZV8xCiAgKHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBk ZWNpc2lvbl90ZXN0ICopOwpzdGF0aWMgaW50IG1heWJlX2JvdGhfdHJ1ZQogIChzdHJ1Y3QgZGVj aXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICosIGludCk7CgpzdGF0aWMgaW50IG5vZGVzX2lkZW50 aWNhbF8xCiAgKHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICop OwpzdGF0aWMgaW50IG5vZGVzX2lkZW50aWNhbAogIChzdHJ1Y3QgZGVjaXNpb24gKiwgc3RydWN0 IGRlY2lzaW9uICopOwpzdGF0aWMgdm9pZCBtZXJnZV9hY2NlcHRfaW5zbgogIChzdHJ1Y3QgZGVj aXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICopOwpzdGF0aWMgdm9pZCBtZXJnZV90cmVlcwogIChz dHJ1Y3QgZGVjaXNpb25faGVhZCAqLCBzdHJ1Y3QgZGVjaXNpb25faGVhZCAqKTsKCnN0YXRpYyB2 b2lkIGZhY3Rvcl90ZXN0cwogIChzdHJ1Y3QgZGVjaXNpb25faGVhZCAqKTsKc3RhdGljIHZvaWQg c2ltcGxpZnlfdGVzdHMKICAoc3RydWN0IGRlY2lzaW9uX2hlYWQgKik7CnN0YXRpYyBpbnQgYnJl YWtfb3V0X3N1YnJvdXRpbmVzCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIGludCk7CnN0YXRp YyB2b2lkIGZpbmRfYWZ0ZXJ3YXJkCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIHN0cnVjdCBk ZWNpc2lvbiAqKTsKCnN0YXRpYyB2b2lkIGNoYW5nZV9zdGF0ZQogIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgc3RydWN0IGRlY2lzaW9uICosIGNvbnN0IGNoYXIgKik7CnN0YXRpYyB2b2lk IHByaW50X2NvZGUKICAoZW51bSBydHhfY29kZSk7CnN0YXRpYyB2b2lkIHdyaXRlX2FmdGVyd2Fy ZAogIChzdHJ1Y3QgZGVjaXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICosIGNvbnN0IGNoYXIgKik7 CnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKndyaXRlX3N3aXRjaAogIChzdHJ1Y3QgZGVjaXNpb24g KiwgaW50KTsKc3RhdGljIHZvaWQgd3JpdGVfY29uZAogIChzdHJ1Y3QgZGVjaXNpb25fdGVzdCAq LCBpbnQsIGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfYWN0aW9uCiAgKHN0 cnVjdCBkZWNpc2lvbiAqLCBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqLCBpbnQsIGludCwgc3RydWN0 IGRlY2lzaW9uICosIGVudW0gcm91dGluZV90eXBlKTsKCnN0YXRpYyBpbnQgaXNfdW5jb25kaXRp b25hbAogIChzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqLCBlbnVtIHJvdXRpbmVfdHlwZSk7CnN0YXRp YyBpbnQgd3JpdGVfbm9kZQogIChzdHJ1Y3QgZGVjaXNpb24gKiwgaW50LCBlbnVtIHJvdXRpbmVf dHlwZSk7CnN0YXRpYyB2b2lkIHdyaXRlX3RyZWVfMQogIChzdHJ1Y3QgZGVjaXNpb25faGVhZCAq LCBpbnQsIGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfdHJlZQogIChzdHJ1 Y3QgZGVjaXNpb25faGVhZCAqLCBjb25zdCBjaGFyICosIGVudW0gcm91dGluZV90eXBlLCBpbnQp OwpzdGF0aWMgdm9pZCB3cml0ZV9zdWJyb3V0aW5lCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICos IGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfc3Vicm91dGluZXMKICAoc3Ry dWN0IGRlY2lzaW9uX2hlYWQgKiwgZW51bSByb3V0aW5lX3R5cGUpOwpzdGF0aWMgdm9pZCB3cml0 ZV9oZWFkZXIKICAodm9pZCk7CgpzdGF0aWMgc3RydWN0IGRlY2lzaW9uX2hlYWQgbWFrZV9pbnNu X3NlcXVlbmNlCiAgKHJ0eCwgZW51bSByb3V0aW5lX3R5cGUpOwpzdGF0aWMgdm9pZCBwcm9jZXNz X3RyZWUKICAoc3RydWN0IGRlY2lzaW9uX2hlYWQgKiwgZW51bSByb3V0aW5lX3R5cGUpOwoKc3Rh dGljIHZvaWQgcmVjb3JkX2luc25fbmFtZQogIChpbnQsIGNvbnN0IGNoYXIgKik7CgpzdGF0aWMg dm9pZCBkZWJ1Z19kZWNpc2lvbl8wCiAgKHN0cnVjdCBkZWNpc2lvbiAqLCBpbnQsIGludCk7CnN0 YXRpYyB2b2lkIGRlYnVnX2RlY2lzaW9uXzEKICAoc3RydWN0IGRlY2lzaW9uICosIGludCk7CnN0 YXRpYyB2b2lkIGRlYnVnX2RlY2lzaW9uXzIKICAoc3RydWN0IGRlY2lzaW9uX3Rlc3QgKik7CmV4 dGVybiB2b2lkIGRlYnVnX2RlY2lzaW9uCiAgKHN0cnVjdCBkZWNpc2lvbiAqKTsKZXh0ZXJuIHZv aWQgZGVidWdfZGVjaXNpb25fbGlzdAogIChzdHJ1Y3QgZGVjaXNpb24gKik7CgoKCnN0YXRpYyBz dHJ1Y3QgZGVjaXNpb24gKgpuZXdfZGVjaXNpb24gKHBvc2l0aW9uLCBsYXN0KQogICAgIGNvbnN0 IGNoYXIgKnBvc2l0aW9uOwogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpsYXN0Owp7CiAgc3Ry dWN0IGRlY2lzaW9uICpuZXcKICAgID0gKHN0cnVjdCBkZWNpc2lvbiAqKSB4bWFsbG9jIChzaXpl b2YgKHN0cnVjdCBkZWNpc2lvbikpOwoKICBtZW1zZXQgKG5ldywgMCwgc2l6ZW9mICgqbmV3KSk7 CiAgbmV3LT5zdWNjZXNzID0gKmxhc3Q7CiAgbmV3LT5wb3NpdGlvbiA9IHhzdHJkdXAgKHBvc2l0 aW9uKTsKICBuZXctPm51bWJlciA9IG5leHRfbnVtYmVyKys7CgogIGxhc3QtPmZpcnN0ID0gbGFz dC0+bGFzdCA9IG5ldzsKICByZXR1cm4gbmV3Owp9CgoKCnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb25f dGVzdCAqCm5ld19kZWNpc2lvbl90ZXN0ICh0eXBlLCBwcGxhY2UpCiAgICAgZW51bSBkZWNpc2lv bl90eXBlIHR5cGU7CiAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKioqcHBsYWNlOwp7CiAgc3Ry dWN0IGRlY2lzaW9uX3Rlc3QgKipwbGFjZSA9ICpwcGxhY2U7CiAgc3RydWN0IGRlY2lzaW9uX3Rl c3QgKnRlc3Q7CgogIHRlc3QgPSAoc3RydWN0IGRlY2lzaW9uX3Rlc3QgKikgeG1hbGxvYyAoc2l6 ZW9mICgqdGVzdCkpOwogIHRlc3QtPm5leHQgPSAqcGxhY2U7CiAgdGVzdC0+dHlwZSA9IHR5cGU7 CiAgKnBsYWNlID0gdGVzdDsKCiAgcGxhY2UgPSAmdGVzdC0+bmV4dDsKICAqcHBsYWNlID0gcGxh Y2U7CgogIHJldHVybiB0ZXN0Owp9CgoKCnN0YXRpYyBydHgKZmluZF9vcGVyYW5kIChwYXR0ZXJu LCBuKQogICAgIHJ0eCBwYXR0ZXJuOwogICAgIGludCBuOwp7CiAgY29uc3QgY2hhciAqZm10Owog IGVudW0gcnR4X2NvZGUgY29kZTsKICBpbnQgaSwgaiwgbGVuOwogIHJ0eCByOwoKICBjb2RlID0g KChlbnVtIHJ0eF9jb2RlKSAocGF0dGVybiktPmNvZGUpOwogIGlmICgoY29kZSA9PSBNQVRDSF9T Q1JBVENICiAgICAgICB8fCBjb2RlID09IE1BVENIX0lOU04KICAgICAgIHx8IGNvZGUgPT0gTUFU Q0hfT1BFUkFORAogICAgICAgfHwgY29kZSA9PSBNQVRDSF9PUEVSQVRPUgogICAgICAgfHwgY29k ZSA9PSBNQVRDSF9QQVJBTExFTCkKICAgICAgJiYgKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQp ID09IG4pCiAgICByZXR1cm4gcGF0dGVybjsKCiAgZm10ID0gKHJ0eF9mb3JtYXRbKGludCkgKGNv ZGUpXSk7CiAgbGVuID0gKHJ0eF9sZW5ndGhbKGludCkgKGNvZGUpXSk7CiAgZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQogICAgewogICAgICBzd2l0Y2ggKGZtdFtpXSkKICAgICAgICB7CiAgICAg ICAgY2FzZSAnZSc6IGNhc2UgJ3UnOgogICAgICAgICAgaWYgKChyID0gZmluZF9vcGVyYW5kICgo KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHgpLCBuKSkgIT0gKHJ0eCkgMCkKICAgICAgICAgICAgcmV0 dXJuIHI7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnVic6CiAgICAgICAgICBpZiAo ISAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpCiAgICAgICAgICAgIGJyZWFrOwoKCiAgICAg ICAgY2FzZSAnRSc6CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKCgoKChwYXR0ZXJuKS0+Zmxk W2ldKS5ydHZlYykpLT5udW1fZWxlbSk7IGorKykKICAgICAgICAgICAgaWYgKChyID0gZmluZF9v cGVyYW5kICgoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPmVsZW1bal0pLCBuKSkgIT0g KHJ0eCkgMCkKICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlICdpJzogY2FzZSAndyc6IGNhc2UgJzAnOiBjYXNlICdzJzoKICAgICAgICAgIGJyZWFr OwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMu MS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDQwMCwgX19GVU5DVElPTl9fKTsKICAgICAg ICB9CiAgICB9CgogIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCgoKc3RhdGljIHJ0eApmaW5kX21h dGNoaW5nX29wZXJhbmQgKHBhdHRlcm4sIG4pCiAgICAgcnR4IHBhdHRlcm47CiAgICAgaW50IG47 CnsKICBjb25zdCBjaGFyICpmbXQ7CiAgZW51bSBydHhfY29kZSBjb2RlOwogIGludCBpLCBqLCBs ZW47CiAgcnR4IHI7CgogIGNvZGUgPSAoKGVudW0gcnR4X2NvZGUpIChwYXR0ZXJuKS0+Y29kZSk7 CiAgaWYgKGNvZGUgPT0gTUFUQ0hfT1BFUkFORAogICAgICAmJiAoKCgocGF0dGVybiktPmZsZFsy XSkucnRzdHIpWzBdID09ICcwJyArIG4KICAgICAgICAgIHx8ICgoKChwYXR0ZXJuKS0+ZmxkWzJd KS5ydHN0cilbMF0gPT0gJyUnCiAgICAgICAgICAgICAgJiYgKCgocGF0dGVybiktPmZsZFsyXSku cnRzdHIpWzFdID09ICcwJyArIG4pKSkKICAgIHJldHVybiBwYXR0ZXJuOwoKICBmbXQgPSAocnR4 X2Zvcm1hdFsoaW50KSAoY29kZSldKTsKICBsZW4gPSAocnR4X2xlbmd0aFsoaW50KSAoY29kZSld KTsKICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICB7CiAgICAgIHN3aXRjaCAoZm10W2ld KQogICAgICAgIHsKICAgICAgICBjYXNlICdlJzogY2FzZSAndSc6CiAgICAgICAgICBpZiAoKHIg PSBmaW5kX21hdGNoaW5nX29wZXJhbmQgKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksIG4pKSkK ICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnVic6 CiAgICAgICAgICBpZiAoISAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpCiAgICAgICAgICAg IGJyZWFrOwoKCiAgICAgICAgY2FzZSAnRSc6CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKCgo KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpLT5udW1fZWxlbSk7IGorKykKICAgICAgICAgICAg aWYgKChyID0gZmluZF9tYXRjaGluZ19vcGVyYW5kICgoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0 dmVjKSktPmVsZW1bal0pLCBuKSkpCiAgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICBi cmVhazsKCiAgICAgICAgY2FzZSAnaSc6IGNhc2UgJ3cnOiBjYXNlICcwJzogY2FzZSAncyc6CiAg ICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGZhbmN5X2Fib3J0ICgi Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCA0NTMsIF9fRlVOQ1RJ T05fXyk7CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCgoKCgoKc3Rh dGljIHZvaWQKdmFsaWRhdGVfcGF0dGVybiAocGF0dGVybiwgaW5zbiwgc2V0LCBzZXRfY29kZSkK ICAgICBydHggcGF0dGVybjsKICAgICBydHggaW5zbjsKICAgICBydHggc2V0OwogICAgIGludCBz ZXRfY29kZTsKewogIGNvbnN0IGNoYXIgKmZtdDsKICBlbnVtIHJ0eF9jb2RlIGNvZGU7CiAgc2l6 ZV90IGksIGxlbjsKICBpbnQgajsKCiAgY29kZSA9ICgoZW51bSBydHhfY29kZSkgKHBhdHRlcm4p LT5jb2RlKTsKICBzd2l0Y2ggKGNvZGUpCiAgICB7CiAgICBjYXNlIE1BVENIX1NDUkFUQ0g6CiAg ICAgIHJldHVybjsKCiAgICBjYXNlIE1BVENIX0lOU046CiAgICBjYXNlIE1BVENIX09QRVJBTkQ6 CiAgICBjYXNlIE1BVENIX09QRVJBVE9SOgogICAgICB7CiAgICAgICAgY29uc3QgY2hhciAqcHJl ZF9uYW1lID0gKCgocGF0dGVybiktPmZsZFsxXSkucnRzdHIpOwogICAgICAgIGludCBhbGxvd3Nf bm9uX2x2YWx1ZSA9IDEsIGFsbG93c19ub25fY29uc3QgPSAxOwogICAgICAgIGludCBzcGVjaWFs X21vZGVfcHJlZCA9IDA7CiAgICAgICAgY29uc3QgY2hhciAqY190ZXN0OwoKICAgICAgICBpZiAo KChlbnVtIHJ0eF9jb2RlKSAoaW5zbiktPmNvZGUpID09IERFRklORV9JTlNOKQogICAgICAgICAg Y190ZXN0ID0gKCgoaW5zbiktPmZsZFsyXSkucnRzdHIpOwogICAgICAgIGVsc2UKICAgICAgICAg IGNfdGVzdCA9ICgoKGluc24pLT5mbGRbMV0pLnJ0c3RyKTsKCiAgICAgICAgaWYgKHByZWRfbmFt ZVswXSAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVv ZiAocHJlZHMpIC8gc2l6ZW9mICgocHJlZHMpWzBdKSk7IGkrKykKICAgICAgICAgICAgICBpZiAo ISBzdHJjbXAgKHByZWRzW2ldLm5hbWUsIHByZWRfbmFtZSkpCiAgICAgICAgICAgICAgICBicmVh azsKCiAgICAgICAgICAgIGlmIChpIDwgKHNpemVvZiAocHJlZHMpIC8gc2l6ZW9mICgocHJlZHMp WzBdKSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAg ICAgICAgYWxsb3dzX25vbl9sdmFsdWUgPSBhbGxvd3Nfbm9uX2NvbnN0ID0gMDsKICAgICAgICAg ICAgICAgIGZvciAoaiA9IDA7IHByZWRzW2ldLmNvZGVzW2pdICE9IDA7IGorKykKICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVudW0gcnR4X2NvZGUgYyA9IHByZWRzW2ld LmNvZGVzW2pdOwogICAgICAgICAgICAgICAgICAgIGlmIChjICE9IExBQkVMX1JFRgogICAgICAg ICAgICAgICAgICAgICAgICAmJiBjICE9IFNZTUJPTF9SRUYKICAgICAgICAgICAgICAgICAgICAg ICAgJiYgYyAhPSBDT05TVF9JTlQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05T VF9ET1VCTEUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05TVAogICAgICAgICAg ICAgICAgICAgICAgICAmJiBjICE9IEhJR0gKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAh PSBDT05TVEFOVF9QX1JUWCkKICAgICAgICAgICAgICAgICAgICAgIGFsbG93c19ub25fY29uc3Qg PSAxOwoKICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBSRUcKICAgICAgICAgICAgICAgICAg ICAgICAgJiYgYyAhPSBTVUJSRUcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBNRU0K ICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05DQVQKICAgICAgICAgICAgICAgICAg ICAgICAgJiYgYyAhPSBQQVJBTExFTAogICAgICAgICAgICAgICAgICAgICAgICAmJiBjICE9IFNU UklDVF9MT1dfUEFSVCkKICAgICAgICAgICAgICAgICAgICAgIGFsbG93c19ub25fbHZhbHVlID0g MTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0 ZXJuX2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZzog YCVzJyBub3QgaW4gUFJFRElDQVRFX0NPREVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmVkX25hbWUpOwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgKHNpemVvZiAoc3BlY2lhbF9tb2RlX3ByZWRfdGFibGUpIC8gc2l6ZW9mICgoc3Bl Y2lhbF9tb2RlX3ByZWRfdGFibGUpWzBdKSk7ICsraSkKICAgICAgICAgICAgICBpZiAoc3RyY21w IChwcmVkX25hbWUsIHNwZWNpYWxfbW9kZV9wcmVkX3RhYmxlW2ldKSA9PSAwKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBzcGVjaWFsX21vZGVfcHJlZCA9IDE7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICBp ZiAoY29kZSA9PSBNQVRDSF9PUEVSQU5EKQogICAgICAgICAgewogICAgICAgICAgICBjb25zdCBj aGFyIGNvbnN0cmFpbnRzMCA9ICgoKHBhdHRlcm4pLT5mbGRbMl0pLnJ0c3RyKVswXTsKCgoKCgog ICAgICAgICAgICBpZiAoKChlbnVtIHJ0eF9jb2RlKSAoaW5zbiktPmNvZGUpID09IERFRklORV9F WFBBTkQKICAgICAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGluc24pLT5jb2RlKSA9 PSBERUZJTkVfU1BMSVQKICAgICAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGluc24p LT5jb2RlKSA9PSBERUZJTkVfUEVFUEhPTEUyKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIGlmIChjb25zdHJhaW50czApCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5l IChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3 YXJuaW5nOiBjb25zdHJhaW50cyBub3Qgc3VwcG9ydGVkIGluICVzIiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJ0eF9uYW1lWygoZW51bSBydHhfY29kZSkgKGluc24pLT5j b2RlKV0pOwogICAgICAgICAgICAgIH0KCgogICAgICAgICAgICBlbHNlIGlmIChzZXQgJiYgY29u c3RyYWludHMwKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChzZXRfY29kZSA9 PSAnKycpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3Ry YWludHMwID09ICcrJykKICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKGNvbnN0cmFpbnRzMCA9PSAnPScKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBmaW5kX21hdGNoaW5nX29wZXJhbmQgKGluc24sICgoKHBhdHRlcm4pLT5mbGRbMF0p LnJ0aW50KSkpCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdl X3dpdGhfbGluZSAocGF0dGVybl9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAib3BlcmFuZCAlZCBtaXNzaW5nIGluLW91dCByZWxvYWQiLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0dGVybiktPmZsZFswXSku cnRpbnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY291bnQrKzsKICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBp ZiAoY29uc3RyYWludHMwICE9ICc9JyAmJiBjb25zdHJhaW50czAgIT0gJysnKQogICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKHBhdHRlcm5f bGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCAl ZCBtaXNzaW5nIG91dHB1dCByZWxvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydGludCkpOwogICAgICAgICAgICAgICAgICAg IGVycm9yX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAg ICAgICB9CgoKCgogICAgICAgIGlmIChzZXQKICAgICAgICAgICAgJiYgcHJlZF9uYW1lWzBdICE9 ICdcMCcKICAgICAgICAgICAgJiYgYWxsb3dzX25vbl9sdmFsdWUpCiAgICAgICAgICB7CiAgICAg ICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAg ICAgICAgICAgIndhcm5pbmc6IGRlc3RpbmF0aW9uIG9wZXJhbmQgJWQgYWxsb3dzIG5vbi1sdmFs dWUiLAogICAgICAgICAgICAgICAgICAgICAgICAoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydGludCkp OwogICAgICAgICAgfQojIDYxNiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJl Y29nLmMiCiAgICAgICAgaWYgKCgoZW51bSBtYWNoaW5lX21vZGUpIChwYXR0ZXJuKS0+bW9kZSkg PT0gVk9JRG1vZGUKICAgICAgICAgICAgJiYgY29kZSA9PSBNQVRDSF9PUEVSQU5ECiAgICAgICAg ICAgICYmICgoZW51bSBydHhfY29kZSkgKGluc24pLT5jb2RlKSA9PSBERUZJTkVfSU5TTgogICAg ICAgICAgICAmJiBhbGxvd3Nfbm9uX2NvbnN0CiAgICAgICAgICAgICYmICEgc3BlY2lhbF9tb2Rl X3ByZWQKICAgICAgICAgICAgJiYgcHJlZF9uYW1lWzBdICE9ICdcMCcKICAgICAgICAgICAgJiYg c3RyY21wIChwcmVkX25hbWUsICJhZGRyZXNzX29wZXJhbmQiKSAhPSAwCiAgICAgICAgICAgICYm IHN0cnN0ciAoY190ZXN0LCAib3BlcmFuZHMiKSA9PSAoKHZvaWQgKikwKQogICAgICAgICAgICAm JiAhIChzZXQKICAgICAgICAgICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoc2V0KS0+Y29k ZSkgPT0gU0VUCiAgICAgICAgICAgICAgICAgICYmICgoZW51bSBydHhfY29kZSkgKCgoKHNldCkt PmZsZFsxXSkucnR4KSktPmNvZGUpID09IENBTEwpKQogICAgICAgICAgewogICAgICAgICAgICBt ZXNzYWdlX3dpdGhfbGluZSAocGF0dGVybl9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAid2FybmluZzogb3BlcmFuZCAlZCBtaXNzaW5nIG1vZGU/IiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0aW50KSk7CiAgICAgICAg ICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgY2FzZSBTRVQ6CiAgICAgIHsKICAgICAg ICBlbnVtIG1hY2hpbmVfbW9kZSBkbW9kZSwgc21vZGU7CiAgICAgICAgcnR4IGRlc3QsIHNyYzsK CiAgICAgICAgZGVzdCA9ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCk7CiAgICAgICAgc3JjID0g KCgocGF0dGVybiktPmZsZFsxXSkucnR4KTsKCgoKICAgICAgICBpZiAoKChlbnVtIHJ0eF9jb2Rl KSAoZGVzdCktPmNvZGUpID09IFNUUklDVF9MT1dfUEFSVCkKICAgICAgICAgIGRlc3QgPSAoKChk ZXN0KS0+ZmxkWzBdKS5ydHgpOwoKCgogICAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUpIChkZXN0 KS0+Y29kZSkgPT0gTUFUQ0hfRFVQCiAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGRl c3QpLT5jb2RlKSA9PSBNQVRDSF9PUF9EVVAKICAgICAgICAgICAgfHwgKChlbnVtIHJ0eF9jb2Rl KSAoZGVzdCktPmNvZGUpID09IE1BVENIX1BBUl9EVVApCiAgICAgICAgICBkZXN0ID0gZmluZF9v cGVyYW5kIChpbnNuLCAoKChkZXN0KS0+ZmxkWzBdKS5ydGludCkpOwoKICAgICAgICBpZiAoKChl bnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgPT0gTUFUQ0hfRFVQCiAgICAgICAgICAgIHx8ICgo ZW51bSBydHhfY29kZSkgKHNyYyktPmNvZGUpID09IE1BVENIX09QX0RVUAogICAgICAgICAgICB8 fCAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSA9PSBNQVRDSF9QQVJfRFVQKQogICAgICAg ICAgc3JjID0gZmluZF9vcGVyYW5kIChpbnNuLCAoKChzcmMpLT5mbGRbMF0pLnJ0aW50KSk7Cgog ICAgICAgIGRtb2RlID0gKChlbnVtIG1hY2hpbmVfbW9kZSkgKGRlc3QpLT5tb2RlKTsKICAgICAg ICBzbW9kZSA9ICgoZW51bSBtYWNoaW5lX21vZGUpIChzcmMpLT5tb2RlKTsKCgoKICAgICAgICBp ZiAoKChlbnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgPT0gTUFUQ0hfT1BFUkFORAogICAgICAg ICAgICAmJiAhIHN0cmNtcCAoKCgoc3JjKS0+ZmxkWzFdKS5ydHN0ciksICJhZGRyZXNzX29wZXJh bmQiKSkKICAgICAgICAgIDsKCgoKICAgICAgICBlbHNlIGlmIChkbW9kZSAhPSBWT0lEbW9kZSAm JiBzbW9kZSAhPSBWT0lEbW9kZSAmJiBkbW9kZSAhPSBzbW9kZSkKICAgICAgICAgIHsKICAgICAg ICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKHBhdHRlcm5fbGluZW5vLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIm1vZGUgbWlzbWF0Y2ggaW4gc2V0OiAlc21vZGUgdnMgJXNtb2RlIiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlX25hbWVbKGludCkgKGRtb2RlKV0p LCAobW9kZV9uYW1lWyhpbnQpIChzbW9kZSldKSk7CiAgICAgICAgICAgIGVycm9yX2NvdW50Kys7 CiAgICAgICAgICB9CgoKCiAgICAgICAgZWxzZSBpZiAoZG1vZGUgIT0gc21vZGUKICAgICAgICAg ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChkZXN0KS0+Y29kZSkgIT0gUEMKICAgICAgICAg ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChkZXN0KS0+Y29kZSkgIT0gQ0MwCiAgICAgICAg ICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgIT0gUEMKICAgICAgICAg ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSAhPSBDQzAKICAgICAgICAg ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSAhPSBDT05TVF9JTlQpCiAg ICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKndoaWNoOwogICAgICAgICAgICB3aGlj aCA9IChkbW9kZSA9PSBWT0lEbW9kZSA/ICJkZXN0aW5hdGlvbiIgOiAic291cmNlIik7CiAgICAg ICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ3YXJuaW5nOiAlcyBtaXNzaW5nIGEgbW9kZT8iLCB3aGljaCk7CiAg ICAgICAgICB9CgogICAgICAgIGlmIChkZXN0ICE9ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCkp CiAgICAgICAgICB2YWxpZGF0ZV9wYXR0ZXJuIChkZXN0LCBpbnNuLCBwYXR0ZXJuLCAnPScpOwog ICAgICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCksIGluc24s IHBhdHRlcm4sICc9Jyk7CiAgICAgICAgdmFsaWRhdGVfcGF0dGVybiAoKCgocGF0dGVybiktPmZs ZFsxXSkucnR4KSwgaW5zbiwgKHJ0eCkgMCwgMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9Cgog ICAgY2FzZSBDTE9CQkVSOgogICAgICB2YWxpZGF0ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+Zmxk WzBdKS5ydHgpLCBpbnNuLCBwYXR0ZXJuLCAnPScpOwogICAgICByZXR1cm47CgogICAgY2FzZSBa RVJPX0VYVFJBQ1Q6CiAgICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbMF0p LnJ0eCksIGluc24sIHNldCwgc2V0ID8gJysnIDogMCk7CiAgICAgIHZhbGlkYXRlX3BhdHRlcm4g KCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0eCksIGluc24sIChydHgpIDAsIDApOwogICAgICB2YWxp ZGF0ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+ZmxkWzJdKS5ydHgpLCBpbnNuLCAocnR4KSAwLCAw KTsKICAgICAgcmV0dXJuOwoKICAgIGNhc2UgU1RSSUNUX0xPV19QQVJUOgogICAgICB2YWxpZGF0 ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydHgpLCBpbnNuLCBzZXQsIHNldCA/ICcr JyA6IDApOwogICAgICByZXR1cm47CgogICAgY2FzZSBMQUJFTF9SRUY6CiAgICAgIGlmICgoKGVu dW0gbWFjaGluZV9tb2RlKSAoKCgocGF0dGVybiktPmZsZFswXSkucnR4KSktPm1vZGUpICE9IFZP SURtb2RlKQogICAgICAgIHsKICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xp bmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCB0byBsYWJlbF9yZWYg JXNtb2RlIG5vdCBWT0lEbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVf bmFtZVsoaW50KSAoKChlbnVtIG1hY2hpbmVfbW9kZSkgKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0 eCkpLT5tb2RlKSldKSk7CiAgICAgICAgICBlcnJvcl9jb3VudCsrOwogICAgICAgIH0KICAgICAg YnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CgogIGZtdCA9IChydHhfZm9y bWF0WyhpbnQpIChjb2RlKV0pOwogIGxlbiA9IChydHhfbGVuZ3RoWyhpbnQpIChjb2RlKV0pOwog IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgIHsKICAgICAgc3dpdGNoIChmbXRbaV0pCiAg ICAgICAgewogICAgICAgIGNhc2UgJ2UnOiBjYXNlICd1JzoKICAgICAgICAgIHZhbGlkYXRlX3Bh dHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksIGluc24sIChydHgpIDAsIDApOwogICAg ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ0UnOgogICAgICAgICAgZm9yIChqID0gMDsgaiA8 ICgoKCgocGF0dGVybiktPmZsZFtpXSkucnR2ZWMpKS0+bnVtX2VsZW0pOyBqKyspCiAgICAgICAg ICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKCgocGF0dGVybiktPmZsZFtpXSkucnR2ZWMpKS0+ZWxl bVtqXSksIGluc24sIChydHgpIDAsIDApOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug J2knOiBjYXNlICd3JzogY2FzZSAnMCc6IGNhc2UgJ3MnOgogICAgICAgICAgYnJlYWs7CgogICAg ICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIw MDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgNzQ4LCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAg IH0KfQojIDc2NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0 YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKgphZGRfdG9fc2VxdWVuY2UgKHBhdHRlcm4sIGxhc3QsIHBv c2l0aW9uLCBpbnNuX3R5cGUsIHRvcCkKICAgICBydHggcGF0dGVybjsKICAgICBzdHJ1Y3QgZGVj aXNpb25faGVhZCAqbGFzdDsKICAgICBjb25zdCBjaGFyICpwb3NpdGlvbjsKICAgICBlbnVtIHJv dXRpbmVfdHlwZSBpbnNuX3R5cGU7CiAgICAgaW50IHRvcDsKewogIGVudW0gcnR4X2NvZGUgY29k ZTsKICBzdHJ1Y3QgZGVjaXNpb24gKnRoaXMsICpzdWI7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3Qg KnRlc3Q7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKipwbGFjZTsKICBjaGFyICpzdWJwb3M7CiAg c2l6ZV90IGk7CiAgY29uc3QgY2hhciAqZm10OwogIGludCBkZXB0aCA9IHN0cmxlbiAocG9zaXRp b24pOwogIGludCBsZW47CiAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKCiAgaWYgKGRlcHRoID4g bWF4X2RlcHRoKQogICAgbWF4X2RlcHRoID0gZGVwdGg7CgogIHN1YnBvcyA9IChjaGFyICopIHht YWxsb2MgKGRlcHRoICsgMik7CiAgc3RyY3B5IChzdWJwb3MsIHBvc2l0aW9uKTsKICBzdWJwb3Nb ZGVwdGggKyAxXSA9IDA7CgogIHN1YiA9IHRoaXMgPSBuZXdfZGVjaXNpb24gKHBvc2l0aW9uLCBs YXN0KTsKICBwbGFjZSA9ICZ0aGlzLT50ZXN0czsKCiByZXN0YXJ0OgogIG1vZGUgPSAoKGVudW0g bWFjaGluZV9tb2RlKSAocGF0dGVybiktPm1vZGUpOwogIGNvZGUgPSAoKGVudW0gcnR4X2NvZGUp IChwYXR0ZXJuKS0+Y29kZSk7CgogIHN3aXRjaCAoY29kZSkKICAgIHsKICAgIGNhc2UgUEFSQUxM RUw6CgogICAgICBpZiAoaW5zbl90eXBlID09IFBFRVBIT0xFMiAmJiB0b3ApCiAgICAgICAgewoK ICAgICAgICAgIGxhc3QtPmZpcnN0ID0gbGFzdC0+bGFzdCA9ICgodm9pZCAqKTApOwoKICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSAoKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0dmVj KSktPm51bV9lbGVtKTsgaSsrKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgc3VicG9z W2RlcHRoXSA9IChpID4gMCA/ICdBJyArIGkgOiAwKTsKICAgICAgICAgICAgICBzdWIgPSBhZGRf dG9fc2VxdWVuY2UgKCgoKCgocGF0dGVybiktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtpXSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LCBzdWJwb3MsIGluc25fdHlw ZSwgMCk7CiAgICAgICAgICAgICAgbGFzdCA9ICZzdWItPnN1Y2Nlc3M7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGdvdG8gcmV0OwogICAgICAgIH0KCgogICAgICBicmVhazsKCiAgICBjYXNlIE1B VENIX1BBUkFMTEVMOgoKCgoKCiAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAoRFRfdmVj bGVuX2dlLCAmcGxhY2UpOwogICAgICB0ZXN0LT51LnZlY2xlbiA9ICgoKCgocGF0dGVybiktPmZs ZFsyXSkucnR2ZWMpKS0+bnVtX2VsZW0pOwoKCiAgICBjYXNlIE1BVENIX09QRVJBTkQ6CiAgICBj YXNlIE1BVENIX1NDUkFUQ0g6CiAgICBjYXNlIE1BVENIX09QRVJBVE9SOgogICAgY2FzZSBNQVRD SF9JTlNOOgogICAgICB7CiAgICAgICAgY29uc3QgY2hhciAqcHJlZF9uYW1lOwogICAgICAgIGVu dW0gcnR4X2NvZGUgd2FzX2NvZGUgPSBjb2RlOwogICAgICAgIGludCBhbGxvd3NfY29uc3RfaW50 ID0gMTsKCiAgICAgICAgaWYgKGNvZGUgPT0gTUFUQ0hfU0NSQVRDSCkKICAgICAgICAgIHsKICAg ICAgICAgICAgcHJlZF9uYW1lID0gInNjcmF0Y2hfb3BlcmFuZCI7CiAgICAgICAgICAgIGNvZGUg PSBVTktOT1dOOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAg ICAgcHJlZF9uYW1lID0gKCgocGF0dGVybiktPmZsZFsxXSkucnRzdHIpOwogICAgICAgICAgICBp ZiAoY29kZSA9PSBNQVRDSF9QQVJBTExFTCkKICAgICAgICAgICAgICBjb2RlID0gUEFSQUxMRUw7 CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBjb2RlID0gVU5LTk9XTjsKICAgICAgICAg IH0KCiAgICAgICAgaWYgKHByZWRfbmFtZVswXSAhPSAwKQogICAgICAgICAgewogICAgICAgICAg ICB0ZXN0ID0gbmV3X2RlY2lzaW9uX3Rlc3QgKERUX3ByZWQsICZwbGFjZSk7CiAgICAgICAgICAg IHRlc3QtPnUucHJlZC5uYW1lID0gcHJlZF9uYW1lOwogICAgICAgICAgICB0ZXN0LT51LnByZWQu bW9kZSA9IG1vZGU7CiMgODczICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVj b2cuYyIKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IChzaXplb2YgKHByZWRzKSAvIHNpemVv ZiAoKHByZWRzKVswXSkpOyBpKyspCiAgICAgICAgICAgICAgaWYgKCEgc3RyY21wIChwcmVkc1tp XS5uYW1lLCBwcmVkX25hbWUpKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBp ZiAoaSA8IChzaXplb2YgKHByZWRzKSAvIHNpemVvZiAoKHByZWRzKVswXSkpKQogICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgIHRlc3QtPnUucHJl ZC5pbmRleCA9IGk7CgogICAgICAgICAgICAgICAgaWYgKHByZWRzW2ldLmNvZGVzWzFdID09IDAg JiYgY29kZSA9PSBVTktOT1dOKQogICAgICAgICAgICAgICAgICBjb2RlID0gcHJlZHNbaV0uY29k ZXNbMF07CgogICAgICAgICAgICAgICAgYWxsb3dzX2NvbnN0X2ludCA9IDA7CiAgICAgICAgICAg ICAgICBmb3IgKGogPSAwOyBwcmVkc1tpXS5jb2Rlc1tqXSAhPSAwOyBqKyspCiAgICAgICAgICAg ICAgICAgIGlmIChwcmVkc1tpXS5jb2Rlc1tqXSA9PSBDT05TVF9JTlQpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgYWxsb3dzX2NvbnN0X2ludCA9IDE7CiAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgdGVzdC0+dS5wcmVkLmluZGV4ID0g LTE7CiAgICAgICAgICB9CgoKICAgICAgICBpZiAoYWxsb3dzX2NvbnN0X2ludCkKICAgICAgICAg IG1vZGUgPSBWT0lEbW9kZTsKCgogICAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAoRFRf YWNjZXB0X29wLCAmcGxhY2UpOwogICAgICAgIHRlc3QtPnUub3BubyA9ICgoKHBhdHRlcm4pLT5m bGRbMF0pLnJ0aW50KTsKCiAgICAgICAgaWYgKHdhc19jb2RlID09IE1BVENIX09QRVJBVE9SIHx8 IHdhc19jb2RlID09IE1BVENIX1BBUkFMTEVMKQogICAgICAgICAgewogICAgICAgICAgICBjaGFy IGJhc2UgPSAod2FzX2NvZGUgPT0gTUFUQ0hfT1BFUkFUT1IgPyAnMCcgOiAnYScpOwogICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgKCgoKChwYXR0ZXJuKS0+ZmxkWzJdKS5ydHZl YykpLT5udW1fZWxlbSk7IGkrKykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdWJw b3NbZGVwdGhdID0gaSArIGJhc2U7CiAgICAgICAgICAgICAgICBzdWIgPSBhZGRfdG9fc2VxdWVu Y2UgKCgoKCgocGF0dGVybiktPmZsZFsyXSkucnR2ZWMpKS0+ZWxlbVtpXSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWItPnN1Y2Nlc3MsIHN1YnBvcywgaW5zbl90 eXBlLCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZ290byBmaW5pOwog ICAgICB9CgogICAgY2FzZSBNQVRDSF9PUF9EVVA6CiAgICAgIGNvZGUgPSBVTktOT1dOOwoKICAg ICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9kdXAsICZwbGFjZSk7CiAgICAgIHRlc3Qt PnUuZHVwID0gKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQpOwoKICAgICAgdGVzdCA9IG5ld19k ZWNpc2lvbl90ZXN0IChEVF9hY2NlcHRfb3AsICZwbGFjZSk7CiAgICAgIHRlc3QtPnUub3BubyA9 ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0aW50KTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6 ZV90KSAoKCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0dmVjKSktPm51bV9lbGVtKTsgaSsrKQogICAg ICAgIHsKICAgICAgICAgIHN1YnBvc1tkZXB0aF0gPSBpICsgJzAnOwogICAgICAgICAgc3ViID0g YWRkX3RvX3NlcXVlbmNlICgoKCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0dmVjKSktPmVsZW1baV0p LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViLT5zdWNjZXNzLCBzdWJwb3Ms IGluc25fdHlwZSwgMCk7CiAgICAgICAgfQogICAgICBnb3RvIGZpbmk7CgogICAgY2FzZSBNQVRD SF9EVVA6CiAgICBjYXNlIE1BVENIX1BBUl9EVVA6CiAgICAgIGNvZGUgPSBVTktOT1dOOwoKICAg ICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9kdXAsICZwbGFjZSk7CiAgICAgIHRlc3Qt PnUuZHVwID0gKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQpOwogICAgICBnb3RvIGZpbmk7Cgog ICAgY2FzZSBBRERSRVNTOgogICAgICBwYXR0ZXJuID0gKCgocGF0dGVybiktPmZsZFswXSkucnR4 KTsKICAgICAgZ290byByZXN0YXJ0OwoKICAgIGRlZmF1bHQ6CiAgICAgIGJyZWFrOwogICAgfQoK ICBmbXQgPSAocnR4X2Zvcm1hdFsoaW50KSAoY29kZSldKTsKICBsZW4gPSAocnR4X2xlbmd0aFso aW50KSAoY29kZSldKTsKCgogIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSBsZW47IGkrKykKICAg IHsKICAgICAgaWYgKGZtdFtpXSA9PSAnaScpCiAgICAgICAgewogICAgICAgICAgaWYgKGkgPT0g MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAo RFRfZWx0X3plcm9faW50LCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUuaW50dmFsID0g KCgocGF0dGVybiktPmZsZFtpXSkucnRpbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl IGlmIChpID09IDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lz aW9uX3Rlc3QgKERUX2VsdF9vbmVfaW50LCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUu aW50dmFsID0gKCgocGF0dGVybiktPmZsZFtpXSkucnRpbnQpOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw MjA0MTgvZ2NjL2dlbnJlY29nLmMiLCA5NzEsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQogICAg ICBlbHNlIGlmIChmbXRbaV0gPT0gJ3cnKQogICAgICAgIHsKCgogICAgICAgICAgZW51bSBkZWNp c2lvbl90eXBlIHR5cGUKICAgICAgICAgICAgPSAoKGludCkgKCgocGF0dGVybiktPmZsZFtpXSku cnR3aW50KSA9PSAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHdpbnQpKQogICAgICAgICAgICAgID8g RFRfZWx0X3plcm9fd2lkZV9zYWZlIDogRFRfZWx0X3plcm9fd2lkZTsKCiAgICAgICAgICBpZiAo aSAhPSAwKQogICAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9nZW5yZWNvZy5jIiwgOTgyLCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICAgIHRlc3Qg PSBuZXdfZGVjaXNpb25fdGVzdCAodHlwZSwgJnBsYWNlKTsKICAgICAgICAgIHRlc3QtPnUuaW50 dmFsID0gKCgocGF0dGVybiktPmZsZFtpXSkucnR3aW50KTsKICAgICAgICB9CiAgICAgIGVsc2Ug aWYgKGZtdFtpXSA9PSAnRScpCiAgICAgICAgewogICAgICAgICAgaWYgKGkgIT0gMCkKICAgICAg ICAgICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVj b2cuYyIsIDk5MCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lzaW9u X3Rlc3QgKERUX3ZlY2xlbiwgJnBsYWNlKTsKICAgICAgICAgIHRlc3QtPnUudmVjbGVuID0gKCgo KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpLT5udW1fZWxlbSk7CiAgICAgICAgfQogICAgfQoK CiAgZm9yIChpID0gMDsgaSA8IChzaXplX3QpIGxlbjsgaSsrKQogICAgewogICAgICBzd2l0Y2gg KGZtdFtpXSkKICAgICAgICB7CiAgICAgICAgY2FzZSAnZSc6IGNhc2UgJ3UnOgogICAgICAgICAg c3VicG9zW2RlcHRoXSA9ICcwJyArIGk7CiAgICAgICAgICBzdWIgPSBhZGRfdG9fc2VxdWVuY2Ug KCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksICZzdWItPnN1Y2Nlc3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN1YnBvcywgaW5zbl90eXBlLCAwKTsKICAgICAgICAgIGJyZWFr OwoKICAgICAgICBjYXNlICdFJzoKICAgICAgICAgIHsKICAgICAgICAgICAgaW50IGo7CiAgICAg ICAgICAgIGZvciAoaiA9IDA7IGogPCAoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPm51 bV9lbGVtKTsgaisrKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1YnBvc1tkZXB0 aF0gPSAnYScgKyBqOwogICAgICAgICAgICAgICAgc3ViID0gYWRkX3RvX3NlcXVlbmNlICgoKCgo KHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPmVsZW1bal0pLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc3ViLT5zdWNjZXNzLCBzdWJwb3MsIGluc25fdHlwZSwgMCk7 CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAg Y2FzZSAnaSc6IGNhc2UgJ3cnOgoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzAnOgog ICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAo Ii4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgMTAyNywgX19GVU5D VElPTl9fKTsKICAgICAgICB9CiAgICB9CgogZmluaToKCgogIGlmIChjb2RlICE9IFVOS05PV04p CiAgICB7CiAgICAgIHBsYWNlID0gJnRoaXMtPnRlc3RzOwogICAgICB0ZXN0ID0gbmV3X2RlY2lz aW9uX3Rlc3QgKERUX2NvZGUsICZwbGFjZSk7CiAgICAgIHRlc3QtPnUuY29kZSA9IGNvZGU7CiAg ICB9CgogIGlmIChtb2RlICE9IFZPSURtb2RlKQogICAgewogICAgICBwbGFjZSA9ICZ0aGlzLT50 ZXN0czsKICAgICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9tb2RlLCAmcGxhY2UpOwog ICAgICB0ZXN0LT51Lm1vZGUgPSBtb2RlOwogICAgfQoKCiAgaWYgKHRoaXMtPnRlc3RzID09ICgo dm9pZCAqKTApKQogICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9n Y2MvZ2VucmVjb2cuYyIsIDEwNTAsIF9fRlVOQ1RJT05fXyk7CgogcmV0OgogIGZyZWUgKHN1YnBv cyk7CiAgcmV0dXJuIHN1YjsKfQoKCgoKc3RhdGljIGludAptYXliZV9ib3RoX3RydWVfMiAoZDEs IGQyKQogICAgIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpkMSwgKmQyOwp7CiAgaWYgKGQxLT50eXBl ID09IGQyLT50eXBlKQogICAgewogICAgICBzd2l0Y2ggKGQxLT50eXBlKQogICAgICAgIHsKICAg ICAgICBjYXNlIERUX21vZGU6CiAgICAgICAgICByZXR1cm4gZDEtPnUubW9kZSA9PSBkMi0+dS5t b2RlOwoKICAgICAgICBjYXNlIERUX2NvZGU6CiAgICAgICAgICByZXR1cm4gZDEtPnUuY29kZSA9 PSBkMi0+dS5jb2RlOwoKICAgICAgICBjYXNlIERUX3ZlY2xlbjoKICAgICAgICAgIHJldHVybiBk MS0+dS52ZWNsZW4gPT0gZDItPnUudmVjbGVuOwoKICAgICAgICBjYXNlIERUX2VsdF96ZXJvX2lu dDoKICAgICAgICBjYXNlIERUX2VsdF9vbmVfaW50OgogICAgICAgIGNhc2UgRFRfZWx0X3plcm9f d2lkZToKICAgICAgICBjYXNlIERUX2VsdF96ZXJvX3dpZGVfc2FmZToKICAgICAgICAgIHJldHVy biBkMS0+dS5pbnR2YWwgPT0gZDItPnUuaW50dmFsOwoKICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKCgoKCiAgaWYgKGQxLT50eXBlID09IERUX3ByZWQg fHwgZDItPnR5cGUgPT0gRFRfcHJlZCkKICAgIHsKICAgICAgaWYgKGQyLT50eXBlID09IERUX3By ZWQpCiAgICAgICAgewogICAgICAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnRtcDsKICAgICAg ICAgIHRtcCA9IGQxLCBkMSA9IGQyLCBkMiA9IHRtcDsKICAgICAgICB9CgoKICAgICAgaWYgKGQx LT51LnByZWQubW9kZSAhPSBWT0lEbW9kZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoZDItPnR5 cGUgPT0gRFRfbW9kZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChkMS0+dS5wcmVk Lm1vZGUgIT0gZDItPnUubW9kZQoKCgoKICAgICAgICAgICAgICAgICAgJiYgc3RyY21wIChkMS0+ dS5wcmVkLm5hbWUsICJhZGRyZXNzX29wZXJhbmQiKSAhPSAwKQogICAgICAgICAgICAgICAgcmV0 dXJuIDA7CiAgICAgICAgICAgIH0KCgoKCiAgICAgICAgfQoKICAgICAgaWYgKGQxLT51LnByZWQu aW5kZXggPj0gMCkKICAgICAgICB7CgoKICAgICAgICAgIGlmIChkMi0+dHlwZSA9PSBEVF9jb2Rl KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgZW51bSBydHhfY29kZSAqYyA9ICZw cmVkc1tkMS0+dS5wcmVkLmluZGV4XS5jb2Rlc1swXTsKICAgICAgICAgICAgICB3aGlsZSAoKmMg IT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCpjID09IGQyLT51 LmNvZGUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICsrYzsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKmMgPT0gMCkKICAgICAgICAgICAg ICAgIHJldHVybiAwOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGVsc2UgaWYgKGQyLT50eXBl ID09IERUX3ByZWQgJiYgZDItPnUucHJlZC5pbmRleCA+PSAwKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgZW51bSBydHhfY29kZSAqYzEgPSAmcHJlZHNbZDEtPnUucHJlZC5pbmRl eF0uY29kZXNbMF07CiAgICAgICAgICAgICAgaW50IGNvbW1vbiA9IDA7CgogICAgICAgICAgICAg IHdoaWxlICgqYzEgIT0gMCAmJiAhY29tbW9uKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlICpjMiA9ICZwcmVkc1tkMi0+dS5wcmVkLmluZGV4 XS5jb2Rlc1swXTsKICAgICAgICAgICAgICAgICAgd2hpbGUgKCpjMiAhPSAwICYmICFjb21tb24p CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29tbW9uID0gKCpj MSA9PSAqYzIpOwogICAgICAgICAgICAgICAgICAgICAgKytjMjsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICsrYzE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgIGlmICghY29tbW9uKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICB9CgoKICBpZiAoZDEtPnR5cGUgPT0gRFRfdmVjbGVuICYmIGQyLT50eXBl ID09IERUX3ZlY2xlbl9nZSkKICAgIHJldHVybiBkMS0+dS52ZWNsZW4gPj0gZDItPnUudmVjbGVu OwogIGlmIChkMS0+dHlwZSA9PSBEVF92ZWNsZW5fZ2UgJiYgZDItPnR5cGUgPT0gRFRfdmVjbGVu KQogICAgcmV0dXJuIGQyLT51LnZlY2xlbiA+PSBkMS0+dS52ZWNsZW47CgogIHJldHVybiAtMTsK fQoKCgoKc3RhdGljIGludAptYXliZV9ib3RoX3RydWVfMSAoZDEsIGQyKQogICAgIHN0cnVjdCBk ZWNpc2lvbl90ZXN0ICpkMSwgKmQyOwp7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnQxLCAqdDI7 CgoKCiAgaWYgKGQxLT50eXBlID09IERUX2FjY2VwdF9vcCB8fCBkMi0+dHlwZSA9PSBEVF9hY2Nl cHRfb3ApCiAgICByZXR1cm4gMTsKCgogIHdoaWxlIChkMSAmJiBkMiAmJiBkMS0+dHlwZSA9PSBk Mi0+dHlwZSkKICAgIHsKICAgICAgaWYgKG1heWJlX2JvdGhfdHJ1ZV8yIChkMSwgZDIpID09IDAp CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGQxID0gZDEtPm5leHQsIGQyID0gZDItPm5leHQ7CiAg ICB9CgoKICBmb3IgKHQxID0gZDE7IHQxIDsgdDEgPSB0MS0+bmV4dCkKICAgIGZvciAodDIgPSBk MjsgdDIgOyB0MiA9IHQyLT5uZXh0KQogICAgICBpZiAobWF5YmVfYm90aF90cnVlXzIgKHQxLCB0 MikgPT0gMCkKICAgICAgICByZXR1cm4gMDsKCiAgcmV0dXJuIC0xOwp9CiMgMTIwNiAiLi4vLi4v ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0YXRpYyBpbnQKbWF5YmVfYm90 aF90cnVlIChkMSwgZDIsIHRvcGxldmVsKQogICAgIHN0cnVjdCBkZWNpc2lvbiAqZDEsICpkMjsK ICAgICBpbnQgdG9wbGV2ZWw7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKnAxLCAqcDI7CiAgaW50IGNt cDsKIyAxMjMyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKICBj bXAgPSBzdHJjbXAgKGQxLT5wb3NpdGlvbiwgZDItPnBvc2l0aW9uKTsKICBpZiAoY21wICE9IDAp CiAgICB7CiAgICAgIGlmICh0b3BsZXZlbCkKICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2Vn Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgMTIzNiwgX19GVU5DVElPTl9fKTsK CgogICAgICBpZiAoY21wID4gMCkKICAgICAgICBwMSA9IGQxLCBkMSA9IGQyLCBkMiA9IHAxOwoK ICAgICAgaWYgKGQxLT5zdWNjZXNzLmZpcnN0ID09IDApCiAgICAgICAgcmV0dXJuIDE7CiAgICAg IGZvciAocDEgPSBkMS0+c3VjY2Vzcy5maXJzdDsgcDE7IHAxID0gcDEtPm5leHQpCiAgICAgICAg aWYgKG1heWJlX2JvdGhfdHJ1ZSAocDEsIGQyLCAwKSkKICAgICAgICAgIHJldHVybiAxOwoKICAg ICAgcmV0dXJuIDA7CiAgICB9CgoKICBjbXAgPSBtYXliZV9ib3RoX3RydWVfMSAoZDEtPnRlc3Rz LCBkMi0+dGVzdHMpOwogIGlmIChjbXAgPj0gMCkKICAgIHJldHVybiBjbXA7CgoKCgoKCgogIGlm ICh0b3BsZXZlbCB8fCBkMS0+c3VjY2Vzcy5maXJzdCA9PSAwIHx8IGQyLT5zdWNjZXNzLmZpcnN0 ID09IDApCiAgICByZXR1cm4gMTsKCiAgZm9yIChwMSA9IGQxLT5zdWNjZXNzLmZpcnN0OyBwMTsg cDEgPSBwMS0+bmV4dCkKICAgIGZvciAocDIgPSBkMi0+c3VjY2Vzcy5maXJzdDsgcDI7IHAyID0g cDItPm5leHQpCiAgICAgIGlmIChtYXliZV9ib3RoX3RydWUgKHAxLCBwMiwgMCkpCiAgICAgICAg cmV0dXJuIDE7CgogIHJldHVybiAwOwp9CgoKCnN0YXRpYyBpbnQKbm9kZXNfaWRlbnRpY2FsXzEg KGQxLCBkMikKICAgICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqZDEsICpkMjsKewogIHN3aXRjaCAo ZDEtPnR5cGUpCiAgICB7CiAgICBjYXNlIERUX21vZGU6CiAgICAgIHJldHVybiBkMS0+dS5tb2Rl ID09IGQyLT51Lm1vZGU7CgogICAgY2FzZSBEVF9jb2RlOgogICAgICByZXR1cm4gZDEtPnUuY29k ZSA9PSBkMi0+dS5jb2RlOwoKICAgIGNhc2UgRFRfcHJlZDoKICAgICAgcmV0dXJuIChkMS0+dS5w cmVkLm1vZGUgPT0gZDItPnUucHJlZC5tb2RlCiAgICAgICAgICAgICAgJiYgc3RyY21wIChkMS0+ dS5wcmVkLm5hbWUsIGQyLT51LnByZWQubmFtZSkgPT0gMCk7CgogICAgY2FzZSBEVF9jX3Rlc3Q6 CiAgICAgIHJldHVybiBzdHJjbXAgKGQxLT51LmNfdGVzdCwgZDItPnUuY190ZXN0KSA9PSAwOwoK ICAgIGNhc2UgRFRfdmVjbGVuOgogICAgY2FzZSBEVF92ZWNsZW5fZ2U6CiAgICAgIHJldHVybiBk MS0+dS52ZWNsZW4gPT0gZDItPnUudmVjbGVuOwoKICAgIGNhc2UgRFRfZHVwOgogICAgICByZXR1 cm4gZDEtPnUuZHVwID09IGQyLT51LmR1cDsKCiAgICBjYXNlIERUX2VsdF96ZXJvX2ludDoKICAg IGNhc2UgRFRfZWx0X29uZV9pbnQ6CiAgICBjYXNlIERUX2VsdF96ZXJvX3dpZGU6CiAgICBjYXNl IERUX2VsdF96ZXJvX3dpZGVfc2FmZToKICAgICAgcmV0dXJuIGQxLT51LmludHZhbCA9PSBkMi0+ dS5pbnR2YWw7CgogICAgY2FzZSBEVF9hY2NlcHRfb3A6CiAgICAgIHJldHVybiBkMS0+dS5vcG5v ID09IGQyLT51Lm9wbm87CgogICAgY2FzZSBEVF9hY2NlcHRfaW5zbjoKCiAgICAgIHJldHVybiAx OwoKICAgIGRlZmF1bHQ6CiAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw MjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAxMzE1LCBfX0ZVTkNUSU9OX18pOwogICAgfQp9CgoKCgoK c3RhdGljIGludApub2Rlc19pZGVudGljYWwgKGQxLCBkMikKICAgICBzdHJ1Y3QgZGVjaXNpb24g KmQxLCAqZDI7CnsKICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdDEsICp0MjsKCiAgZm9yICh0MSA9 IGQxLT50ZXN0cywgdDIgPSBkMi0+dGVzdHM7IHQxICYmIHQyOyB0MSA9IHQxLT5uZXh0LCB0MiA9 IHQyLT5uZXh0KQogICAgewogICAgICBpZiAodDEtPnR5cGUgIT0gdDItPnR5cGUpCiAgICAgICAg cmV0dXJuIDA7CiAgICAgIGlmICghIG5vZGVzX2lkZW50aWNhbF8xICh0MSwgdDIpKQogICAgICAg IHJldHVybiAwOwogICAgfQoKCiAgaWYgKHQxICE9IHQyKQogICAgcmV0dXJuIDA7CgoKCgoKICBp ZiAoZDEtPnN1Y2Nlc3MuZmlyc3QKICAgICAgJiYgZDItPnN1Y2Nlc3MuZmlyc3QKICAgICAgJiYg c3RyY21wIChkMS0+c3VjY2Vzcy5maXJzdC0+cG9zaXRpb24sIGQyLT5zdWNjZXNzLmZpcnN0LT5w b3NpdGlvbikpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIDE7Cn0KIyAxMzYwICIuLi8uLi9lZ2Nj LTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKc3RhdGljIHZvaWQKbWVyZ2VfYWNjZXB0 X2luc24gKG9sZGQsIGFkZGQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpvbGRkLCAqYWRkZDsKewog IHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpvbGQsICphZGQ7CgogIGZvciAob2xkID0gb2xkZC0+dGVz dHM7IG9sZDsgb2xkID0gb2xkLT5uZXh0KQogICAgaWYgKG9sZC0+dHlwZSA9PSBEVF9hY2NlcHRf aW5zbikKICAgICAgYnJlYWs7CiAgaWYgKG9sZCA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybjsK CiAgZm9yIChhZGQgPSBhZGRkLT50ZXN0czsgYWRkOyBhZGQgPSBhZGQtPm5leHQpCiAgICBpZiAo YWRkLT50eXBlID09IERUX2FjY2VwdF9pbnNuKQogICAgICBicmVhazsKICBpZiAoYWRkID09ICgo dm9pZCAqKTApKQogICAgcmV0dXJuOwoKCgoKICBpZiAob2xkLT51Lmluc24ubnVtX2Nsb2JiZXJz X3RvX2FkZCA9PSAwCiAgICAgICYmIGFkZC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPiAw KQogICAgewoKICAgIH0KICBlbHNlIGlmIChvbGQtPnUuaW5zbi5udW1fY2xvYmJlcnNfdG9fYWRk ID4gMAogICAgICAgICAgICYmIGFkZC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPT0gMCkK ICAgIHsKCiAgICAgIG9sZC0+dS5pbnNuID0gYWRkLT51Lmluc247CiAgICB9CiAgZWxzZQogICAg ewogICAgICBtZXNzYWdlX3dpdGhfbGluZSAoYWRkLT51Lmluc24ubGluZW5vLCAiYCVzJyBtYXRj aGVzIGAlcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2luc25fbmFtZSAoYWRkLT51 Lmluc24uY29kZV9udW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2luc25fbmFt ZSAob2xkLT51Lmluc24uY29kZV9udW1iZXIpKTsKICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKG9s ZC0+dS5pbnNuLmxpbmVubywgInByZXZpb3VzIGRlZmluaXRpb24gb2YgYCVzJyIsCiAgICAgICAg ICAgICAgICAgICAgICAgICBnZXRfaW5zbl9uYW1lIChvbGQtPnUuaW5zbi5jb2RlX251bWJlcikp OwogICAgICBlcnJvcl9jb3VudCsrOwogICAgfQp9CgoKCnN0YXRpYyB2b2lkCm1lcmdlX3RyZWVz IChvbGRoLCBhZGRoKQogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpvbGRoLCAqYWRkaDsKewog IHN0cnVjdCBkZWNpc2lvbiAqbmV4dCwgKmFkZDsKCiAgaWYgKGFkZGgtPmZpcnN0ID09IDApCiAg ICByZXR1cm47CiAgaWYgKG9sZGgtPmZpcnN0ID09IDApCiAgICB7CiAgICAgICpvbGRoID0gKmFk ZGg7CiAgICAgIHJldHVybjsKICAgIH0KCgogIGlmIChzdHJjbXAgKG9sZGgtPmZpcnN0LT5wb3Np dGlvbiwgYWRkaC0+Zmlyc3QtPnBvc2l0aW9uKSkKICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdj Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAxNDIxLCBfX0ZVTkNUSU9OX18pOwoK ICBmb3IgKGFkZCA9IGFkZGgtPmZpcnN0OyBhZGQgOyBhZGQgPSBuZXh0KQogICAgewogICAgICBz dHJ1Y3QgZGVjaXNpb24gKm9sZCwgKmluc2VydF9iZWZvcmUgPSAoKHZvaWQgKikwKTsKCiAgICAg IG5leHQgPSBhZGQtPm5leHQ7CiMgMTQ0NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj L2dlbnJlY29nLmMiCiAgICAgIGZvciAob2xkID0gb2xkaC0+bGFzdDsgb2xkOyBvbGQgPSBvbGQt PnByZXYpCiAgICAgICAgewogICAgICAgICAgaWYgKG5vZGVzX2lkZW50aWNhbCAob2xkLCBhZGQp KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbWVyZ2VfYWNjZXB0X2luc24gKG9sZCwgYWRk KTsKICAgICAgICAgICAgICBtZXJnZV90cmVlcyAoJm9sZC0+c3VjY2VzcywgJmFkZC0+c3VjY2Vz cyk7CiAgICAgICAgICAgICAgZ290byBtZXJnZWRfbm9kZXM7CiAgICAgICAgICAgIH0KCiAgICAg ICAgICBpZiAobWF5YmVfYm90aF90cnVlIChvbGQsIGFkZCwgMCkpCiAgICAgICAgICAgIGJyZWFr OwoKCgoKCiAgICAgICAgICBpZiAoKGludCkgYWRkLT50ZXN0cy0+dHlwZSA8IChpbnQpIG9sZC0+ dGVzdHMtPnR5cGUpCiAgICAgICAgICAgIGluc2VydF9iZWZvcmUgPSBvbGQ7CiAgICAgICAgfQoK ICAgICAgaWYgKGluc2VydF9iZWZvcmUgPT0gKCh2b2lkICopMCkpCiAgICAgICAgewogICAgICAg ICAgYWRkLT5uZXh0ID0gKCh2b2lkICopMCk7CiAgICAgICAgICBhZGQtPnByZXYgPSBvbGRoLT5s YXN0OwogICAgICAgICAgb2xkaC0+bGFzdC0+bmV4dCA9IGFkZDsKICAgICAgICAgIG9sZGgtPmxh c3QgPSBhZGQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaWYgKChh ZGQtPnByZXYgPSBpbnNlcnRfYmVmb3JlLT5wcmV2KSAhPSAoKHZvaWQgKikwKSkKICAgICAgICAg ICAgYWRkLT5wcmV2LT5uZXh0ID0gYWRkOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBvbGRo LT5maXJzdCA9IGFkZDsKICAgICAgICAgIGFkZC0+bmV4dCA9IGluc2VydF9iZWZvcmU7CiAgICAg ICAgICBpbnNlcnRfYmVmb3JlLT5wcmV2ID0gYWRkOwogICAgICAgIH0KCiAgICBtZXJnZWRfbm9k ZXM6OwogICAgfQp9CgoKCgoKc3RhdGljIHZvaWQKZmFjdG9yX3Rlc3RzIChoZWFkKQogICAgIHN0 cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwp7CiAgc3RydWN0IGRlY2lzaW9uICpmaXJzdCwgKm5l eHQ7CgogIGZvciAoZmlyc3QgPSBoZWFkLT5maXJzdDsgZmlyc3QgJiYgZmlyc3QtPm5leHQ7IGZp cnN0ID0gbmV4dCkKICAgIHsKICAgICAgZW51bSBkZWNpc2lvbl90eXBlIHR5cGU7CiAgICAgIHN0 cnVjdCBkZWNpc2lvbiAqbmV3LCAqb2xkX2xhc3Q7CgogICAgICB0eXBlID0gZmlyc3QtPnRlc3Rz LT50eXBlOwogICAgICBuZXh0ID0gZmlyc3QtPm5leHQ7CgoKICAgICAgaWYgKG5leHQtPnRlc3Rz LT50eXBlICE9IHR5cGUpCiAgICAgICAgY29udGludWU7CgoKCiAgICAgIGlmICh0eXBlICE9IERU X21vZGUKICAgICAgICAgICYmIHR5cGUgIT0gRFRfY29kZQogICAgICAgICAgJiYgdHlwZSAhPSBE VF92ZWNsZW4KICAgICAgICAgICYmIHR5cGUgIT0gRFRfZWx0X3plcm9faW50CiAgICAgICAgICAm JiB0eXBlICE9IERUX2VsdF9vbmVfaW50CiAgICAgICAgICAmJiB0eXBlICE9IERUX2VsdF96ZXJv X3dpZGVfc2FmZSkKICAgICAgICBjb250aW51ZTsKCgoKICAgICAgaWYgKGZpcnN0LT50ZXN0cy0+ bmV4dCAhPSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBuZXcgPSBuZXdfZGVjaXNp b24gKGZpcnN0LT5wb3NpdGlvbiwgJmZpcnN0LT5zdWNjZXNzKTsKICAgICAgICAgIG5ldy0+dGVz dHMgPSBmaXJzdC0+dGVzdHMtPm5leHQ7CiAgICAgICAgICBmaXJzdC0+dGVzdHMtPm5leHQgPSAo KHZvaWQgKikwKTsKICAgICAgICB9CgoKICAgICAgZmlyc3QtPm5leHQgPSAoKHZvaWQgKikwKTsK ICAgICAgb2xkX2xhc3QgPSBoZWFkLT5sYXN0OwogICAgICBoZWFkLT5sYXN0ID0gZmlyc3Q7CgoK CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgaDsKCiAg ICAgICAgICBpZiAobmV4dC0+dGVzdHMtPm5leHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBuZXcgPSBuZXdfZGVjaXNpb24gKG5leHQtPnBvc2l0aW9uLCAmbmV4 dC0+c3VjY2Vzcyk7CiAgICAgICAgICAgICAgbmV3LT50ZXN0cyA9IG5leHQtPnRlc3RzLT5uZXh0 OwogICAgICAgICAgICAgIG5leHQtPnRlc3RzLT5uZXh0ID0gKCh2b2lkICopMCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIG5ldyA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gbmV4dC0+bmV4dDsK ICAgICAgICAgIG5ldy0+bmV4dCA9ICgodm9pZCAqKTApOwogICAgICAgICAgaC5maXJzdCA9IGgu bGFzdCA9IG5ldzsKCiAgICAgICAgICBtZXJnZV90cmVlcyAoaGVhZCwgJmgpOwogICAgICAgIH0K ICAgICAgd2hpbGUgKG5leHQgJiYgbmV4dC0+dGVzdHMtPnR5cGUgPT0gdHlwZSk7CgoKCiAgICAg IGlmIChuZXh0KQogICAgICAgIHsKICAgICAgICAgIG5leHQtPnByZXYgPSBoZWFkLT5sYXN0Owog ICAgICAgICAgaGVhZC0+bGFzdC0+bmV4dCA9IG5leHQ7CiAgICAgICAgICBoZWFkLT5sYXN0ID0g b2xkX2xhc3Q7CiAgICAgICAgfQogICAgfQoKCiAgZm9yIChmaXJzdCA9IGhlYWQtPmZpcnN0OyBm aXJzdDsgZmlyc3QgPSBmaXJzdC0+bmV4dCkKICAgIGZhY3Rvcl90ZXN0cyAoJmZpcnN0LT5zdWNj ZXNzKTsKfQojIDE1NzYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5j IgpzdGF0aWMgdm9pZApzaW1wbGlmeV90ZXN0cyAoaGVhZCkKICAgICBzdHJ1Y3QgZGVjaXNpb25f aGVhZCAqaGVhZDsKewogIHN0cnVjdCBkZWNpc2lvbiAqdHJlZTsKCiAgZm9yICh0cmVlID0gaGVh ZC0+Zmlyc3Q7IHRyZWU7IHRyZWUgPSB0cmVlLT5uZXh0KQogICAgewogICAgICBzdHJ1Y3QgZGVj aXNpb25fdGVzdCAqYSwgKmI7CgogICAgICBhID0gdHJlZS0+dGVzdHM7CiAgICAgIGIgPSBhLT5u ZXh0OwogICAgICBpZiAoYiA9PSAoKHZvaWQgKikwKSkKICAgICAgICBjb250aW51ZTsKCgogICAg ICB3aGlsZSAoYiAmJiBiLT50eXBlICE9IERUX3ByZWQpCiAgICAgICAgYiA9IGItPm5leHQ7CiAg ICAgIGlmIChiKQogICAgICAgIHsKCgoKICAgICAgICAgIHdoaWxlIChhLT50eXBlID09IERUX21v ZGUgfHwgYS0+dHlwZSA9PSBEVF9jb2RlKQogICAgICAgICAgICBhID0gYS0+bmV4dDsKICAgICAg ICAgIHRyZWUtPnRlc3RzID0gYTsKICAgICAgICB9CiAgICB9CgoKICBmb3IgKHRyZWUgPSBoZWFk LT5maXJzdDsgdHJlZTsgdHJlZSA9IHRyZWUtPm5leHQpCiAgICBzaW1wbGlmeV90ZXN0cyAoJnRy ZWUtPnN1Y2Nlc3MpOwp9CgoKCgoKc3RhdGljIGludApicmVha19vdXRfc3Vicm91dGluZXMgKGhl YWQsIGluaXRpYWwpCiAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgKmhlYWQ7CiAgICAgaW50IGlu aXRpYWw7CnsKICBpbnQgc2l6ZSA9IDA7CiAgc3RydWN0IGRlY2lzaW9uICpzdWI7CgogIGZvciAo c3ViID0gaGVhZC0+Zmlyc3Q7IHN1Yjsgc3ViID0gc3ViLT5uZXh0KQogICAgc2l6ZSArPSAxICsg YnJlYWtfb3V0X3N1YnJvdXRpbmVzICgmc3ViLT5zdWNjZXNzLCAwKTsKCiAgaWYgKHNpemUgPiAx MDAgJiYgISBpbml0aWFsKQogICAgewogICAgICBoZWFkLT5maXJzdC0+c3Vicm91dGluZV9udW1i ZXIgPSArK25leHRfc3Vicm91dGluZV9udW1iZXI7CiAgICAgIHNpemUgPSAxOwogICAgfQogIHJl dHVybiBzaXplOwp9CgoKCgpzdGF0aWMgdm9pZApmaW5kX2FmdGVyd2FyZCAoaGVhZCwgcmVhbF9h ZnRlcndhcmQpCiAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgKmhlYWQ7CiAgICAgc3RydWN0IGRl Y2lzaW9uICpyZWFsX2FmdGVyd2FyZDsKewogIHN0cnVjdCBkZWNpc2lvbiAqcCwgKnEsICphZnRl cndhcmQ7CgoKCgogIHAgPSBoZWFkLT5maXJzdDsKICBhZnRlcndhcmQgPSAocC0+c3Vicm91dGlu ZV9udW1iZXIgPiAwID8gKCh2b2lkICopMCkgOiByZWFsX2FmdGVyd2FyZCk7CgogIGZvciAoIDsg cCA7IHAgPSBwLT5uZXh0KQogICAgewoKICAgICAgZm9yIChxID0gcC0+bmV4dDsgcSA7IHEgPSBx LT5uZXh0KQogICAgICAgIGlmIChtYXliZV9ib3RoX3RydWUgKHAsIHEsIDEpKQogICAgICAgICAg YnJlYWs7CgoKCiAgICAgIGlmICghcSkKICAgICAgICBxID0gYWZ0ZXJ3YXJkOwogICAgICBwLT5h ZnRlcndhcmQgPSBxOwogICAgICBpZiAocSkKICAgICAgICBxLT5uZWVkX2xhYmVsID0gMTsKICAg IH0KCgogIGZvciAocCA9IGhlYWQtPmZpcnN0OyBwIDsgcCA9IHAtPm5leHQpCiAgICBpZiAocC0+ c3VjY2Vzcy5maXJzdCkKICAgICAgZmluZF9hZnRlcndhcmQgKCZwLT5zdWNjZXNzLCBwLT5hZnRl cndhcmQpOwoKCgoKICBwID0gaGVhZC0+Zmlyc3Q7CiAgaWYgKHAtPnN1YnJvdXRpbmVfbnVtYmVy ID4gMCkKICAgIHAtPmFmdGVyd2FyZCA9IHJlYWxfYWZ0ZXJ3YXJkOwp9CiMgMTY4NSAiLi4vLi4v ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0YXRpYyB2b2lkCmNoYW5nZV9z dGF0ZSAob2xkcG9zLCBuZXdwb3MsIGFmdGVyd2FyZCwgaW5kZW50KQogICAgIGNvbnN0IGNoYXIg Km9sZHBvczsKICAgICBjb25zdCBjaGFyICpuZXdwb3M7CiAgICAgc3RydWN0IGRlY2lzaW9uICph ZnRlcndhcmQ7CiAgICAgY29uc3QgY2hhciAqaW5kZW50Owp7CiAgaW50IG9kZXB0aCA9IHN0cmxl biAob2xkcG9zKTsKICBpbnQgbmRlcHRoID0gc3RybGVuIChuZXdwb3MpOwogIGludCBkZXB0aDsK ICBpbnQgb2xkX2hhc19pbnNuLCBuZXdfaGFzX2luc247CgoKICBmb3IgKGRlcHRoID0gb2RlcHRo OyBzdHJuY21wIChvbGRwb3MsIG5ld3BvcywgZGVwdGgpICE9IDA7IC0tZGVwdGgpCiAgICBjb250 aW51ZTsKCgogIGZvciAob2xkX2hhc19pbnNuID0gb2RlcHRoIC0gMTsgb2xkX2hhc19pbnNuID49 IDA7IC0tb2xkX2hhc19pbnNuKQogICAgaWYgKChfc2NoX2lzdGFibGVbKG9sZHBvc1tvbGRfaGFz X2luc25dKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzdXBwZXIpKSkKICAgICAg YnJlYWs7CiAgZm9yIChuZXdfaGFzX2luc24gPSBuZGVwdGggLSAxOyBuZXdfaGFzX2luc24gPj0g MDsgLS1uZXdfaGFzX2luc24pCiAgICBpZiAoKF9zY2hfaXN0YWJsZVsobmV3cG9zW25ld19oYXNf aW5zbl0pICYgMHhmZl0gJiAodW5zaWduZWQgc2hvcnQpKF9zY2hfaXN1cHBlcikpKQogICAgICBi cmVhazsKCgogIHdoaWxlIChkZXB0aCA8IG5kZXB0aCkKICAgIHsKCiAgICAgIGlmICgoX3NjaF9p c3RhYmxlWyhuZXdwb3NbZGVwdGhdKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lz dXBwZXIpKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKG9sZF9oYXNfaW5zbiA+PSAwICYmIG9s ZHBvc1tvbGRfaGFzX2luc25dID49IG5ld3Bvc1tkZXB0aF0pCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBwcmludGYgKCIlc3RlbSA9IHBlZXAyX25leHRfaW5zbiAoJWQpO1xuIiwKICAgICAg ICAgICAgICAgICAgICAgIGluZGVudCwgbmV3cG9zW2RlcHRoXSAtICdBJyk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIHByaW50ZiAoIiVz dGVtID0gcGVlcDJfbmV4dF9pbnNuICglZCk7XG4iLAogICAgICAgICAgICAgICAgICAgICAgaW5k ZW50LCBuZXdwb3NbZGVwdGhdIC0gJ0EnKTsKICAgICAgICAgICAgICBwcmludGYgKCIlc2lmICh0 ZW0gPT0gTlVMTF9SVFgpXG4iLCBpbmRlbnQpOwogICAgICAgICAgICAgIGlmIChhZnRlcndhcmQp CiAgICAgICAgICAgICAgICBwcmludGYgKCIlcyAgZ290byBMJWQ7XG4iLCBpbmRlbnQsIGFmdGVy d2FyZC0+bnVtYmVyKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYg KCIlcyAgZ290byByZXQwO1xuIiwgaW5kZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgcHJp bnRmICgiJXN4JWQgPSBQQVRURVJOICh0ZW0pO1xuIiwgaW5kZW50LCBkZXB0aCArIDEpOwogICAg ICAgIH0KICAgICAgZWxzZSBpZiAoKF9zY2hfaXN0YWJsZVsobmV3cG9zW2RlcHRoXSkgJiAweGZm XSAmICh1bnNpZ25lZCBzaG9ydCkoX3NjaF9pc2xvd2VyKSkpCiAgICAgICAgcHJpbnRmICgiJXN4 JWQgPSBYVkVDRVhQICh4JWQsIDAsICVkKTtcbiIsCiAgICAgICAgICAgICAgICBpbmRlbnQsIGRl cHRoICsgMSwgZGVwdGgsIG5ld3Bvc1tkZXB0aF0gLSAnYScpOwogICAgICBlbHNlCiAgICAgICAg cHJpbnRmICgiJXN4JWQgPSBYRVhQICh4JWQsICVjKTtcbiIsCiAgICAgICAgICAgICAgICBpbmRl bnQsIGRlcHRoICsgMSwgZGVwdGgsIG5ld3Bvc1tkZXB0aF0pOwogICAgICArK2RlcHRoOwogICAg fQp9CgoKCgpzdGF0aWMgdm9pZApwcmludF9jb2RlIChjb2RlKQogICAgIGVudW0gcnR4X2NvZGUg Y29kZTsKewogIGNvbnN0IGNoYXIgKnA7CiAgZm9yIChwID0gKHJ0eF9uYW1lWyhpbnQpIChjb2Rl KV0pOyAqcDsgcCsrKQogICAgKF9fdXNfcnN0aHJlYWRfc3RkaW8gPyBfX3NlbXB1dGMoKF9zY2hf dG91cHBlclsoKnApICYgMHhmZl0pLCgmX19pb2JbMV0pKSA6ICgtLSgoJl9faW9iWzFdKSktPl9j bnQgPCAwID8gX19mbHNidWYoKChfc2NoX3RvdXBwZXJbKCpwKSAmIDB4ZmZdKSksICgoJl9faW9i WzFdKSkpIDogKGludCkoKigoJl9faW9iWzFdKSktPl9wdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSgo X3NjaF90b3VwcGVyWygqcCkgJiAweGZmXSkpKSkpOwp9CgoKCnN0YXRpYyB2b2lkCndyaXRlX2Fm dGVyd2FyZCAoc3RhcnQsIGFmdGVyd2FyZCwgaW5kZW50KQogICAgIHN0cnVjdCBkZWNpc2lvbiAq c3RhcnQ7CiAgICAgc3RydWN0IGRlY2lzaW9uICphZnRlcndhcmQ7CiAgICAgY29uc3QgY2hhciAq aW5kZW50Owp7CiAgaWYgKCFhZnRlcndhcmQgfHwgc3RhcnQtPnN1YnJvdXRpbmVfbnVtYmVyID4g MCkKICAgIHByaW50ZigiJXNnb3RvIHJldDA7XG4iLCBpbmRlbnQpOwogIGVsc2UKICAgIHsKICAg ICAgY2hhbmdlX3N0YXRlIChzdGFydC0+cG9zaXRpb24sIGFmdGVyd2FyZC0+cG9zaXRpb24sICgo dm9pZCAqKTApLCBpbmRlbnQpOwogICAgICBwcmludGYgKCIlc2dvdG8gTCVkO1xuIiwgaW5kZW50 LCBhZnRlcndhcmQtPm51bWJlcik7CiAgICB9Cn0KCgoKCnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24g Kgp3cml0ZV9zd2l0Y2ggKHN0YXJ0LCBkZXB0aCkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnN0YXJ0 OwogICAgIGludCBkZXB0aDsKewogIHN0cnVjdCBkZWNpc2lvbiAqcCA9IHN0YXJ0OwogIGVudW0g ZGVjaXNpb25fdHlwZSB0eXBlID0gcC0+dGVzdHMtPnR5cGU7CiAgc3RydWN0IGRlY2lzaW9uICpu ZWVkc19sYWJlbCA9ICgodm9pZCAqKTApOwoKCgoKICBpZiAoIXAtPm5leHQKICAgICAgfHwgcC0+ dGVzdHMtPm5leHQKICAgICAgfHwgcC0+bmV4dC0+dGVzdHMtPnR5cGUgIT0gdHlwZQogICAgICB8 fCBwLT5uZXh0LT50ZXN0cy0+bmV4dAogICAgICB8fCBub2Rlc19pZGVudGljYWxfMSAocC0+dGVz dHMsIHAtPm5leHQtPnRlc3RzKSkKICAgIHJldHVybiBwOwoKCgogIGlmICh0eXBlID09IERUX2Nv ZGUpCiAgICB7CiAgICAgIGNoYXIgY29kZW1hcFsoKGludCkgTEFTVF9BTkRfVU5VU0VEX1JUWF9D T0RFKV07CiAgICAgIHN0cnVjdCBkZWNpc2lvbiAqcmV0OwogICAgICBlbnVtIHJ0eF9jb2RlIGNv ZGU7CgogICAgICBtZW1zZXQgKGNvZGVtYXAsIDAsIHNpemVvZihjb2RlbWFwKSk7CgogICAgICBw cmludGYgKCIgIHN3aXRjaCAoR0VUX0NPREUgKHglZCkpXG4gICAge1xuIiwgZGVwdGgpOwogICAg ICBjb2RlID0gcC0+dGVzdHMtPnUuY29kZTsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBp ZiAocCAhPSBzdGFydCAmJiBwLT5uZWVkX2xhYmVsICYmIG5lZWRzX2xhYmVsID09ICgodm9pZCAq KTApKQogICAgICAgICAgICBuZWVkc19sYWJlbCA9IHA7CgogICAgICAgICAgcHJpbnRmICgiICAg IGNhc2UgIik7CiAgICAgICAgICBwcmludF9jb2RlIChjb2RlKTsKICAgICAgICAgIHByaW50ZiAo IjpcbiAgICAgIGdvdG8gTCVkO1xuIiwgcC0+c3VjY2Vzcy5maXJzdC0+bnVtYmVyKTsKICAgICAg ICAgIHAtPnN1Y2Nlc3MuZmlyc3QtPm5lZWRfbGFiZWwgPSAxOwoKICAgICAgICAgIGNvZGVtYXBb Y29kZV0gPSAxOwogICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgfQogICAgICB3aGlsZSAo cAogICAgICAgICAgICAgJiYgISBwLT50ZXN0cy0+bmV4dAogICAgICAgICAgICAgJiYgcC0+dGVz dHMtPnR5cGUgPT0gRFRfY29kZQogICAgICAgICAgICAgJiYgISBjb2RlbWFwW2NvZGUgPSBwLT50 ZXN0cy0+dS5jb2RlXSk7CiMgMTgzNCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dl bnJlY29nLmMiCiAgICAgIGlmIChuZWVkc19sYWJlbCAhPSAoKHZvaWQgKikwKSkKICAgICAgICBy ZXQgPSBuZWVkc19sYWJlbDsKICAgICAgZWxzZQogICAgICAgIHJldCA9IHA7CgogICAgICB3aGls ZSAocCAmJiBwLT50ZXN0cy0+dHlwZSA9PSBEVF9wcmVkCiAgICAgICAgICAgICAmJiBwLT50ZXN0 cy0+dS5wcmVkLmluZGV4ID49IDApCiAgICAgICAgewogICAgICAgICAgY29uc3QgZW51bSBydHhf Y29kZSAqYzsKCiAgICAgICAgICBmb3IgKGMgPSAmcHJlZHNbcC0+dGVzdHMtPnUucHJlZC5pbmRl eF0uY29kZXNbMF07ICpjIDsgKytjKQogICAgICAgICAgICBpZiAoY29kZW1hcFsoaW50KSAqY10g IT0gMCkKICAgICAgICAgICAgICBnb3RvIHByZWRfZG9uZTsKCiAgICAgICAgICBmb3IgKGMgPSAm cHJlZHNbcC0+dGVzdHMtPnUucHJlZC5pbmRleF0uY29kZXNbMF07ICpjIDsgKytjKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgcHJpbnRmICgiICAgIGNhc2UgIik7CiAgICAgICAgICAgICAg cHJpbnRfY29kZSAoKmMpOwogICAgICAgICAgICAgIHByaW50ZiAoIjpcbiIpOwogICAgICAgICAg ICAgIGNvZGVtYXBbKGludCkgKmNdID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgIHByaW50 ZiAoIiAgICAgIGdvdG8gTCVkO1xuIiwgcC0+bnVtYmVyKTsKICAgICAgICAgIHAtPm5lZWRfbGFi ZWwgPSAxOwogICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgfQoKICAgIHByZWRfZG9uZToK CgogICAgICBwcmludGYgKCIgICAgZGVmYXVsdDpcbiIpOwogICAgICBpZiAocCAhPSByZXQpCiAg ICAgICAgewogICAgICAgICAgaWYgKHApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmlu dGYgKCIgICAgICBnb3RvIEwlZDtcbiIsIHAtPm51bWJlcik7CiAgICAgICAgICAgICAgcC0+bmVl ZF9sYWJlbCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgd3Jp dGVfYWZ0ZXJ3YXJkIChzdGFydCwgc3RhcnQtPmFmdGVyd2FyZCwgIiAgICAgICIpOwogICAgICAg IH0KICAgICAgZWxzZQogICAgICAgIHByaW50ZiAoIiAgICAgYnJlYWs7XG4iKTsKICAgICAgcHJp bnRmICgiICAgfVxuIik7CgogICAgICByZXR1cm4gcmV0OwogICAgfQogIGVsc2UgaWYgKHR5cGUg PT0gRFRfbW9kZQogICAgICAgICAgIHx8IHR5cGUgPT0gRFRfdmVjbGVuCiAgICAgICAgICAgfHwg dHlwZSA9PSBEVF9lbHRfemVyb19pbnQKICAgICAgICAgICB8fCB0eXBlID09IERUX2VsdF9vbmVf aW50CiAgICAgICAgICAgfHwgdHlwZSA9PSBEVF9lbHRfemVyb193aWRlX3NhZmUpCiAgICB7CiAg ICAgIGNvbnN0IGNoYXIgKmluZGVudCA9ICIiOwoKCgogICAgICBpZiAodHlwZSA9PSBEVF9lbHRf emVyb193aWRlX3NhZmUpCiAgICAgICAgewogICAgICAgICAgaW5kZW50ID0gIiAgIjsKICAgICAg ICAgIHByaW50ZigiICBpZiAoKGludCkgWFdJTlQgKHglZCwgMCkgPT0gWFdJTlQgKHglZCwgMCkp XG4iLCBkZXB0aCwgZGVwdGgpOwogICAgICAgIH0KICAgICAgcHJpbnRmICgiJXMgIHN3aXRjaCAo IiwgaW5kZW50KTsKICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgIHsKICAgICAgICBjYXNlIERU X21vZGU6CiAgICAgICAgICBwcmludGYgKCJHRVRfTU9ERSAoeCVkKSIsIGRlcHRoKTsKICAgICAg ICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRfdmVjbGVuOgogICAgICAgICAgcHJpbnRmICgiWFZF Q0xFTiAoeCVkLCAwKSIsIGRlcHRoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRf ZWx0X3plcm9faW50OgogICAgICAgICAgcHJpbnRmICgiWElOVCAoeCVkLCAwKSIsIGRlcHRoKTsK ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRfZWx0X29uZV9pbnQ6CiAgICAgICAgICBw cmludGYgKCJYSU5UICh4JWQsIDEpIiwgZGVwdGgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg Y2FzZSBEVF9lbHRfemVyb193aWRlX3NhZmU6CgoKICAgICAgICAgIHByaW50ZiAoIihpbnQpIFhX SU5UICh4JWQsIDApIiwgZGVwdGgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoK ICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dl bnJlY29nLmMiLCAxOTE3LCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAgICAgcHJpbnRmICgi KVxuJXMgICAge1xuIiwgaW5kZW50KTsKCiAgICAgIGRvCiAgICAgICAgewoKCgogICAgICAgICAg c3RydWN0IGRlY2lzaW9uICpxOwogICAgICAgICAgZm9yIChxID0gc3RhcnQ7IHEgIT0gcDsgcSA9 IHEtPm5leHQpCiAgICAgICAgICAgIGlmIChub2Rlc19pZGVudGljYWxfMSAocC0+dGVzdHMsIHEt PnRlc3RzKSkKICAgICAgICAgICAgICBnb3RvIGNhc2VfZG9uZTsKCiAgICAgICAgICBpZiAocCAh PSBzdGFydCAmJiBwLT5uZWVkX2xhYmVsICYmIG5lZWRzX2xhYmVsID09ICgodm9pZCAqKTApKQog ICAgICAgICAgICBuZWVkc19sYWJlbCA9IHA7CgogICAgICAgICAgcHJpbnRmICgiJXMgICAgY2Fz ZSAiLCBpbmRlbnQpOwogICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICB7CiAgICAg ICAgICAgIGNhc2UgRFRfbW9kZToKICAgICAgICAgICAgICBwcmludGYgKCIlc21vZGUiLCAobW9k ZV9uYW1lWyhpbnQpIChwLT50ZXN0cy0+dS5tb2RlKV0pKTsKICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgY2FzZSBEVF92ZWNsZW46CiAgICAgICAgICAgICAgcHJpbnRmICgiJWQiLCBw LT50ZXN0cy0+dS52ZWNsZW4pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNl IERUX2VsdF96ZXJvX2ludDoKICAgICAgICAgICAgY2FzZSBEVF9lbHRfb25lX2ludDoKICAgICAg ICAgICAgY2FzZSBEVF9lbHRfemVyb193aWRlOgogICAgICAgICAgICBjYXNlIERUX2VsdF96ZXJv X3dpZGVfc2FmZToKICAgICAgICAgICAgICBwcmludGYgKCIlbGxkIiwgcC0+dGVzdHMtPnUuaW50 dmFsKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg ICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNv Zy5jIiwgMTk1MCwgX19GVU5DVElPTl9fKTsKICAgICAgICAgICAgfQogICAgICAgICAgcHJpbnRm ICgiOlxuJXMgICAgICBnb3RvIEwlZDtcbiIsIGluZGVudCwgcC0+c3VjY2Vzcy5maXJzdC0+bnVt YmVyKTsKICAgICAgICAgIHAtPnN1Y2Nlc3MuZmlyc3QtPm5lZWRfbGFiZWwgPSAxOwoKICAgICAg ICAgIHAgPSBwLT5uZXh0OwogICAgICAgIH0KICAgICAgd2hpbGUgKHAgJiYgcC0+dGVzdHMtPnR5 cGUgPT0gdHlwZSAmJiAhcC0+dGVzdHMtPm5leHQpOwoKICAgIGNhc2VfZG9uZToKICAgICAgcHJp bnRmICgiJXMgICAgZGVmYXVsdDpcbiVzICAgICAgYnJlYWs7XG4lcyAgICB9XG4iLAogICAgICAg ICAgICAgIGluZGVudCwgaW5kZW50LCBpbmRlbnQpOwoKICAgICAgcmV0dXJuIG5lZWRzX2xhYmVs ICE9ICgodm9pZCAqKTApID8gbmVlZHNfbGFiZWwgOiBwOwogICAgfQogIGVsc2UKICAgIHsKCiAg ICAgIHJldHVybiBwOwogICAgfQp9CgoKCnN0YXRpYyB2b2lkCndyaXRlX2NvbmQgKHAsIGRlcHRo LCBzdWJyb3V0aW5lX3R5cGUpCiAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnA7CiAgICAgaW50 IGRlcHRoOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1YnJvdXRpbmVfdHlwZTsKewogIHN3aXRj aCAocC0+dHlwZSkKICAgIHsKICAgIGNhc2UgRFRfbW9kZToKICAgICAgcHJpbnRmICgiR0VUX01P REUgKHglZCkgPT0gJXNtb2RlIiwgZGVwdGgsIChtb2RlX25hbWVbKGludCkgKHAtPnUubW9kZSld KSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFRfY29kZToKICAgICAgcHJpbnRmICgiR0VUX0NP REUgKHglZCkgPT0gIiwgZGVwdGgpOwogICAgICBwcmludF9jb2RlIChwLT51LmNvZGUpOwogICAg ICBicmVhazsKCiAgICBjYXNlIERUX3ZlY2xlbjoKICAgICAgcHJpbnRmICgiWFZFQ0xFTiAoeCVk LCAwKSA9PSAlZCIsIGRlcHRoLCBwLT51LnZlY2xlbik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2Ug RFRfZWx0X3plcm9faW50OgogICAgICBwcmludGYgKCJYSU5UICh4JWQsIDApID09ICVkIiwgZGVw dGgsIChpbnQpIHAtPnUuaW50dmFsKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEVF9lbHRfb25l X2ludDoKICAgICAgcHJpbnRmICgiWElOVCAoeCVkLCAxKSA9PSAlZCIsIGRlcHRoLCAoaW50KSBw LT51LmludHZhbCk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFRfZWx0X3plcm9fd2lkZToKICAg IGNhc2UgRFRfZWx0X3plcm9fd2lkZV9zYWZlOgogICAgICBwcmludGYgKCJYV0lOVCAoeCVkLCAw KSA9PSAiLCBkZXB0aCk7CiAgICAgIHByaW50ZiAoIiVsbGQiLCBwLT51LmludHZhbCk7CiAgICAg IGJyZWFrOwoKICAgIGNhc2UgRFRfdmVjbGVuX2dlOgogICAgICBwcmludGYgKCJYVkVDTEVOICh4 JWQsIDApID49ICVkIiwgZGVwdGgsIHAtPnUudmVjbGVuKTsKICAgICAgYnJlYWs7CgogICAgY2Fz ZSBEVF9kdXA6CiAgICAgIHByaW50ZiAoInJ0eF9lcXVhbF9wICh4JWQsIG9wZXJhbmRzWyVkXSki LCBkZXB0aCwgcC0+dS5kdXApOwogICAgICBicmVhazsKCiAgICBjYXNlIERUX3ByZWQ6CiAgICAg IHByaW50ZiAoIiVzICh4JWQsICVzbW9kZSkiLCBwLT51LnByZWQubmFtZSwgZGVwdGgsCiAgICAg ICAgICAgICAgKG1vZGVfbmFtZVsoaW50KSAocC0+dS5wcmVkLm1vZGUpXSkpOwogICAgICBicmVh azsKCiAgICBjYXNlIERUX2NfdGVzdDoKICAgICAgcHJpbnRmICgiKCVzKSIsIHAtPnUuY190ZXN0 KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEVF9hY2NlcHRfaW5zbjoKICAgICAgc3dpdGNoIChz dWJyb3V0aW5lX3R5cGUpCiAgICAgICAgewogICAgICAgIGNhc2UgUkVDT0c6CiAgICAgICAgICBp ZiAocC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPT0gMCkKICAgICAgICAgICAgZmFuY3lf YWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwMzEs IF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICBwcmludGYgKCJwbnVtX2Nsb2JiZXJzICE9IE5VTEwi KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZmFuY3lfYWJv cnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwMzYsIF9f RlVOQ1RJT05fXyk7CiAgICAgICAgfQogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBm YW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwg MjA0MSwgX19GVU5DVElPTl9fKTsKICAgIH0KfQoKCgoKCnN0YXRpYyB2b2lkCndyaXRlX2FjdGlv biAocCwgdGVzdCwgZGVwdGgsIHVuY29uZCwgc3VjY2Vzcywgc3Vicm91dGluZV90eXBlKQogICAg IHN0cnVjdCBkZWNpc2lvbiAqcDsKICAgICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdGVzdDsKICAg ICBpbnQgZGVwdGgsIHVuY29uZDsKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnN1Y2Nlc3M7CiAgICAg ZW51bSByb3V0aW5lX3R5cGUgc3Vicm91dGluZV90eXBlOwp7CiAgY29uc3QgY2hhciAqaW5kZW50 OwogIGludCB3YW50X2Nsb3NlID0gMDsKCiAgaWYgKHVuY29uZCkKICAgIGluZGVudCA9ICIgICI7 CiAgZWxzZSBpZiAodGVzdC0+dHlwZSA9PSBEVF9hY2NlcHRfb3AgfHwgdGVzdC0+dHlwZSA9PSBE VF9hY2NlcHRfaW5zbikKICAgIHsKICAgICAgZnB1dHMgKCIgICAge1xuIiwgKCZfX2lvYlsxXSkp OwogICAgICBpbmRlbnQgPSAiICAgICAgIjsKICAgICAgd2FudF9jbG9zZSA9IDE7CiAgICB9CiAg ZWxzZQogICAgaW5kZW50ID0gIiAgICAiOwoKICBpZiAodGVzdC0+dHlwZSA9PSBEVF9hY2NlcHRf b3ApCiAgICB7CiAgICAgIHByaW50ZigiJXNvcGVyYW5kc1slZF0gPSB4JWQ7XG4iLCBpbmRlbnQs IHRlc3QtPnUub3BubywgZGVwdGgpOwoKCiAgICAgIGlmICh0ZXN0LT5uZXh0KQogICAgICAgIHsK ICAgICAgICAgIHRlc3QgPSB0ZXN0LT5uZXh0OwogICAgICAgICAgaWYgKHRlc3QtPnR5cGUgIT0g RFRfYWNjZXB0X2luc24pCiAgICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEt Q1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAyMDgwLCBfX0ZVTkNUSU9OX18pOwogICAgICAg IH0KICAgIH0KCgogIGlmICh0ZXN0LT5uZXh0KQogICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2Nj LTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwODYsIF9fRlVOQ1RJT05fXyk7Cgog IGlmICh0ZXN0LT50eXBlID09IERUX2FjY2VwdF9pbnNuKQogICAgewogICAgICBzd2l0Y2ggKHN1 YnJvdXRpbmVfdHlwZSkKICAgICAgICB7CiAgICAgICAgY2FzZSBSRUNPRzoKICAgICAgICAgIGlm ICh0ZXN0LT51Lmluc24ubnVtX2Nsb2JiZXJzX3RvX2FkZCAhPSAwKQogICAgICAgICAgICBwcmlu dGYgKCIlcypwbnVtX2Nsb2JiZXJzID0gJWQ7XG4iLAogICAgICAgICAgICAgICAgICAgIGluZGVu dCwgdGVzdC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQpOwogICAgICAgICAgcHJpbnRmICgi JXNyZXR1cm4gJWQ7XG4iLCBpbmRlbnQsIHRlc3QtPnUuaW5zbi5jb2RlX251bWJlcik7CiAgICAg ICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTUExJVDoKICAgICAgICAgIHByaW50ZiAoIiVzcmV0 dXJuIGdlbl9zcGxpdF8lZCAob3BlcmFuZHMpO1xuIiwKICAgICAgICAgICAgICAgICAgaW5kZW50 LCB0ZXN0LT51Lmluc24uY29kZV9udW1iZXIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgUEVFUEhPTEUyOgogICAgICAgICAgewogICAgICAgICAgICBpbnQgbWF0Y2hfbGVuID0gMCwg aTsKCiAgICAgICAgICAgIGZvciAoaSA9IHN0cmxlbiAocC0+cG9zaXRpb24pIC0gMTsgaSA+PSAw OyAtLWkpCiAgICAgICAgICAgICAgaWYgKChfc2NoX2lzdGFibGVbKHAtPnBvc2l0aW9uW2ldKSAm IDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzdXBwZXIpKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgbWF0Y2hfbGVuID0gcC0+cG9zaXRpb25baV0gLSAnQSc7CiAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcmlu dGYgKCIlcypfcG1hdGNoX2xlbiA9ICVkO1xuIiwgaW5kZW50LCBtYXRjaF9sZW4pOwogICAgICAg ICAgICBwcmludGYgKCIlc3RlbSA9IGdlbl9wZWVwaG9sZTJfJWQgKGluc24sIG9wZXJhbmRzKTtc biIsCiAgICAgICAgICAgICAgICAgICAgaW5kZW50LCB0ZXN0LT51Lmluc24uY29kZV9udW1iZXIp OwogICAgICAgICAgICBwcmludGYgKCIlc2lmICh0ZW0gIT0gMClcbiVzICByZXR1cm4gdGVtO1xu IiwgaW5kZW50LCBpbmRlbnQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw NDE4L2djYy9nZW5yZWNvZy5jIiwgMjEyMiwgX19GVU5DVElPTl9fKTsKICAgICAgICB9CiAgICB9 CiAgZWxzZQogICAgewogICAgICBwcmludGYoIiVzZ290byBMJWQ7XG4iLCBpbmRlbnQsIHN1Y2Nl c3MtPm51bWJlcik7CiAgICAgIHN1Y2Nlc3MtPm5lZWRfbGFiZWwgPSAxOwogICAgfQoKICBpZiAo d2FudF9jbG9zZSkKICAgIGZwdXRzICgiICAgIH1cbiIsICgmX19pb2JbMV0pKTsKfQoKCgoKCgpz dGF0aWMgaW50CmlzX3VuY29uZGl0aW9uYWwgKHQsIHN1YnJvdXRpbmVfdHlwZSkKICAgICBzdHJ1 Y3QgZGVjaXNpb25fdGVzdCAqdDsKICAgICBlbnVtIHJvdXRpbmVfdHlwZSBzdWJyb3V0aW5lX3R5 cGU7CnsKICBpZiAodC0+dHlwZSA9PSBEVF9hY2NlcHRfb3ApCiAgICByZXR1cm4gMTsKCiAgaWYg KHQtPnR5cGUgPT0gRFRfYWNjZXB0X2luc24pCiAgICB7CiAgICAgIHN3aXRjaCAoc3Vicm91dGlu ZV90eXBlKQogICAgICAgIHsKICAgICAgICBjYXNlIFJFQ09HOgogICAgICAgICAgcmV0dXJuICh0 LT51Lmluc24ubnVtX2Nsb2JiZXJzX3RvX2FkZCA9PSAwKTsKICAgICAgICBjYXNlIFNQTElUOgog ICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgY2FzZSBQRUVQSE9MRTI6CiAgICAgICAgICByZXR1 cm4gLTE7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdj Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAyMTU5LCBfX0ZVTkNUSU9OX18pOwog ICAgICAgIH0KICAgIH0KCiAgcmV0dXJuIDA7Cn0KCgoKCnN0YXRpYyBpbnQKd3JpdGVfbm9kZSAo cCwgZGVwdGgsIHN1YnJvdXRpbmVfdHlwZSkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnA7CiAgICAg aW50IGRlcHRoOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1YnJvdXRpbmVfdHlwZTsKewogIHN0 cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0LCAqbGFzdF90ZXN0OwogIGludCB1bmNvbmQ7CgogIGxh c3RfdGVzdCA9IHRlc3QgPSBwLT50ZXN0czsKICB1bmNvbmQgPSBpc191bmNvbmRpdGlvbmFsICh0 ZXN0LCBzdWJyb3V0aW5lX3R5cGUpOwogIGlmICh1bmNvbmQgPT0gMCkKICAgIHsKICAgICAgcHJp bnRmICgiICBpZiAoIik7CiAgICAgIHdyaXRlX2NvbmQgKHRlc3QsIGRlcHRoLCBzdWJyb3V0aW5l X3R5cGUpOwoKICAgICAgd2hpbGUgKCh0ZXN0ID0gdGVzdC0+bmV4dCkgIT0gKCh2b2lkICopMCkp CiAgICAgICAgewogICAgICAgICAgaW50IHVuY29uZDI7CgogICAgICAgICAgbGFzdF90ZXN0ID0g dGVzdDsKICAgICAgICAgIHVuY29uZDIgPSBpc191bmNvbmRpdGlvbmFsICh0ZXN0LCBzdWJyb3V0 aW5lX3R5cGUpOwogICAgICAgICAgaWYgKHVuY29uZDIgIT0gMCkKICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgcHJpbnRmICgiXG4gICAgICAmJiAiKTsKICAgICAgICAgIHdyaXRlX2NvbmQg KHRlc3QsIGRlcHRoLCBzdWJyb3V0aW5lX3R5cGUpOwogICAgICAgIH0KCiAgICAgIHByaW50ZiAo IilcbiIpOwogICAgfQoKICB3cml0ZV9hY3Rpb24gKHAsIGxhc3RfdGVzdCwgZGVwdGgsIHVuY29u ZCwgcC0+c3VjY2Vzcy5maXJzdCwgc3Vicm91dGluZV90eXBlKTsKCiAgcmV0dXJuIHVuY29uZCA+ IDA7Cn0KCgoKc3RhdGljIHZvaWQKd3JpdGVfdHJlZV8xIChoZWFkLCBkZXB0aCwgc3Vicm91dGlu ZV90eXBlKQogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGludCBkZXB0aDsK ICAgICBlbnVtIHJvdXRpbmVfdHlwZSBzdWJyb3V0aW5lX3R5cGU7CnsKICBzdHJ1Y3QgZGVjaXNp b24gKnAsICpuZXh0OwogIGludCB1bmNvbmQgPSAwOwoKICBmb3IgKHAgPSBoZWFkLT5maXJzdDsg cCA7IHAgPSBuZXh0KQogICAgewoKICAgICAgaWYgKHAgIT0gaGVhZC0+Zmlyc3QgJiYgcC0+bmVl ZF9sYWJlbCkKICAgICAgICBwcmludGYoIiVzTCVkOiBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMXG4i LCAoIiAiKSwgKHAtPm51bWJlcikpOwoKCiAgICAgIG5leHQgPSB3cml0ZV9zd2l0Y2ggKHAsIGRl cHRoKTsKICAgICAgaWYgKHAgIT0gbmV4dCkKICAgICAgICB1bmNvbmQgPSAwOwogICAgICBlbHNl CiAgICAgICAgewoKICAgICAgICAgIHVuY29uZCA9IHdyaXRlX25vZGUgKHAsIGRlcHRoLCBzdWJy b3V0aW5lX3R5cGUpOwogICAgICAgICAgbmV4dCA9IHAtPm5leHQ7CiAgICAgICAgfQogICAgfQoK CgogIGlmICghIHVuY29uZCkKICAgIHdyaXRlX2FmdGVyd2FyZCAoaGVhZC0+bGFzdCwgaGVhZC0+ bGFzdC0+YWZ0ZXJ3YXJkLCAiICAiKTsKfQoKCgoKc3RhdGljIHZvaWQKd3JpdGVfdHJlZSAoaGVh ZCwgcHJldnBvcywgdHlwZSwgaW5pdGlhbCkKICAgICBzdHJ1Y3QgZGVjaXNpb25faGVhZCAqaGVh ZDsKICAgICBjb25zdCBjaGFyICpwcmV2cG9zOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7 CiAgICAgaW50IGluaXRpYWw7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKnAgPSBoZWFkLT5maXJzdDsK CiAgKF9fdXNfcnN0aHJlYWRfc3RkaW8gPyBfX3NlbXB1dGMoKCdcbicpLCgmX19pb2JbMV0pKSA6 ICgtLSgoJl9faW9iWzFdKSktPl9jbnQgPCAwID8gX19mbHNidWYoKCgnXG4nKSksICgoJl9faW9i WzFdKSkpIDogKGludCkoKigoJl9faW9iWzFdKSktPl9wdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSgo J1xuJykpKSkpOwogIGlmIChwLT5uZWVkX2xhYmVsKQogICAgcHJpbnRmKCIlc0wlZDogQVRUUklC VVRFX1VOVVNFRF9MQUJFTFxuIiwgKCIgIiksIChwLT5udW1iZXIpKTsKCiAgaWYgKCEgaW5pdGlh bCAmJiBwLT5zdWJyb3V0aW5lX251bWJlciA+IDApCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBj aGFyICogY29uc3QgbmFtZV9wcmVmaXhbXSA9IHsKICAgICAgICAgICJyZWNvZyIsICJzcGxpdCIs ICJwZWVwaG9sZTIiCiAgICAgIH07CgogICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNh bGxfc3VmZml4W10gPSB7CiAgICAgICAgICAiLCBwbnVtX2Nsb2JiZXJzIiwgIiIsICIsIF9wbWF0 Y2hfbGVuIgogICAgICB9OwoKCgoKICAgICAgaWYgKHAtPmFmdGVyd2FyZCkKICAgICAgICB7CiAg ICAgICAgICBwcmludGYgKCIgIHRlbSA9ICVzXyVkICh4MCwgaW5zbiVzKTtcbiIsCiAgICAgICAg ICAgICAgICAgIG5hbWVfcHJlZml4W3R5cGVdLCBwLT5zdWJyb3V0aW5lX251bWJlciwgY2FsbF9z dWZmaXhbdHlwZV0pOwogICAgICAgICAgaWYgKCgodHlwZSkgIT0gUkVDT0cpKQogICAgICAgICAg ICBwcmludGYgKCIgIGlmICh0ZW0gIT0gMClcbiAgICByZXR1cm4gdGVtO1xuIik7CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHByaW50ZiAoIiAgaWYgKHRlbSA+PSAwKVxuICAgIHJldHVybiB0 ZW07XG4iKTsKCiAgICAgICAgICBjaGFuZ2Vfc3RhdGUgKHAtPnBvc2l0aW9uLCBwLT5hZnRlcndh cmQtPnBvc2l0aW9uLCAoKHZvaWQgKikwKSwgIiAgIik7CiAgICAgICAgICBwcmludGYgKCIgIGdv dG8gTCVkO1xuIiwgcC0+YWZ0ZXJ3YXJkLT5udW1iZXIpOwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIHByaW50ZiAoIiAgcmV0dXJuICVzXyVkICh4MCwgaW5zbiVzKTtc biIsCiAgICAgICAgICAgICAgICAgIG5hbWVfcHJlZml4W3R5cGVdLCBwLT5zdWJyb3V0aW5lX251 bWJlciwgY2FsbF9zdWZmaXhbdHlwZV0pOwogICAgICAgIH0KICAgIH0KICBlbHNlCiAgICB7CiAg ICAgIGludCBkZXB0aCA9IHN0cmxlbiAocC0+cG9zaXRpb24pOwoKICAgICAgY2hhbmdlX3N0YXRl IChwcmV2cG9zLCBwLT5wb3NpdGlvbiwgaGVhZC0+bGFzdC0+YWZ0ZXJ3YXJkLCAiICAiKTsKICAg ICAgd3JpdGVfdHJlZV8xIChoZWFkLCBkZXB0aCwgdHlwZSk7CgogICAgICBmb3IgKHAgPSBoZWFk LT5maXJzdDsgcDsgcCA9IHAtPm5leHQpCiAgICAgICAgaWYgKHAtPnN1Y2Nlc3MuZmlyc3QpCiAg ICAgICAgICB3cml0ZV90cmVlICgmcC0+c3VjY2VzcywgcC0+cG9zaXRpb24sIHR5cGUsIDApOwog ICAgfQp9CgoKCgpzdGF0aWMgdm9pZAp3cml0ZV9zdWJyb3V0aW5lIChoZWFkLCB0eXBlKQogICAg IHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7 CnsKICBpbnQgc3ViZnVuY3Rpb24gPSBoZWFkLT5maXJzdCA/IGhlYWQtPmZpcnN0LT5zdWJyb3V0 aW5lX251bWJlciA6IDA7CiAgY29uc3QgY2hhciAqc19vcl9lOwogIGNoYXIgZXh0ZW5zaW9uWzMy XTsKICBpbnQgaTsKCiAgc19vcl9lID0gc3ViZnVuY3Rpb24gPyAic3RhdGljICIgOiAiIjsKCiAg aWYgKHN1YmZ1bmN0aW9uKQogICAgc3ByaW50ZiAoZXh0ZW5zaW9uLCAiXyVkIiwgc3ViZnVuY3Rp b24pOwogIGVsc2UgaWYgKHR5cGUgPT0gUkVDT0cpCiAgICBleHRlbnNpb25bMF0gPSAnXDAnOwog IGVsc2UKICAgIHN0cmNweSAoZXh0ZW5zaW9uLCAiX2luc25zIik7CgogIHN3aXRjaCAodHlwZSkK ICAgIHsKICAgIGNhc2UgUkVDT0c6CiAgICAgIHByaW50ZiAoIiVzaW50IHJlY29nJXMgUEFSQU1T ICgocnR4LCBydHgsIGludCAqKSk7XG4iLCBzX29yX2UsIGV4dGVuc2lvbik7CiAgICAgIHByaW50 ZiAoIiVzaW50XG5yZWNvZyVzICh4MCwgaW5zbiwgcG51bV9jbG9iYmVycylcbiAgICAgcnR4IHgw IEFUVFJJQlVURV9VTlVTRUQ7XG4gICAgIHJ0eCBpbnNuIEFUVFJJQlVURV9VTlVTRUQ7XG4gICAg IGludCAqcG51bV9jbG9iYmVycyBBVFRSSUJVVEVfVU5VU0VEO1xuIiwgc19vcl9lLCBleHRlbnNp b24pOwoKCgoKICAgICAgYnJlYWs7CiAgICBjYXNlIFNQTElUOgogICAgICBwcmludGYgKCIlc3J0 eCBzcGxpdCVzIFBBUkFNUyAoKHJ0eCwgcnR4KSk7XG4iLCBzX29yX2UsIGV4dGVuc2lvbik7CiAg ICAgIHByaW50ZiAoIiVzcnR4XG5zcGxpdCVzICh4MCwgaW5zbilcbiAgICAgcnR4IHgwIEFUVFJJ QlVURV9VTlVTRUQ7XG4gICAgIHJ0eCBpbnNuIEFUVFJJQlVURV9VTlVTRUQ7XG4iLCBzX29yX2Us IGV4dGVuc2lvbik7CgoKCiAgICAgIGJyZWFrOwogICAgY2FzZSBQRUVQSE9MRTI6CiAgICAgIHBy aW50ZiAoIiVzcnR4IHBlZXBob2xlMiVzIFBBUkFNUyAoKHJ0eCwgcnR4LCBpbnQgKikpO1xuIiwK ICAgICAgICAgICAgICBzX29yX2UsIGV4dGVuc2lvbik7CiAgICAgIHByaW50ZiAoIiVzcnR4XG5w ZWVwaG9sZTIlcyAoeDAsIGluc24sIF9wbWF0Y2hfbGVuKVxuICAgICBydHggeDAgQVRUUklCVVRF X1VOVVNFRDtcbiAgICAgcnR4IGluc24gQVRUUklCVVRFX1VOVVNFRDtcbiAgICAgaW50ICpfcG1h dGNoX2xlbiBBVFRSSUJVVEVfVU5VU0VEO1xuIiwgc19vcl9lLCBleHRlbnNpb24pOwoKCgoKICAg ICAgYnJlYWs7CiAgICB9CgogIHByaW50ZiAoIntcbiAgcnR4ICogY29uc3Qgb3BlcmFuZHMgQVRU UklCVVRFX1VOVVNFRCA9ICZyZWNvZ19kYXRhLm9wZXJhbmRbMF07XG4iKTsKICBmb3IgKGkgPSAx OyBpIDw9IG1heF9kZXB0aDsgaSsrKQogICAgcHJpbnRmICgiICBydHggeCVkIEFUVFJJQlVURV9V TlVTRUQ7XG4iLCBpKTsKCiAgcHJpbnRmICgiICAlcyB0ZW0gQVRUUklCVVRFX1VOVVNFRDtcbiIs ICgodHlwZSkgIT0gUkVDT0cpID8gInJ0eCIgOiAiaW50Iik7CgogIGlmICghc3ViZnVuY3Rpb24p CiAgICBwcmludGYgKCIgIHJlY29nX2RhdGEuaW5zbiA9IE5VTExfUlRYO1xuIik7CgogIGlmICho ZWFkLT5maXJzdCkKICAgIHdyaXRlX3RyZWUgKGhlYWQsICIiLCB0eXBlLCAxKTsKICBlbHNlCiAg ICBwcmludGYgKCIgIGdvdG8gcmV0MDtcbiIpOwoKICBwcmludGYgKCIgcmV0MDpcbiAgcmV0dXJu ICVkO1xufVxuXG4iLCAoKHR5cGUpICE9IFJFQ09HKSA/IDAgOiAtMSk7Cn0KCgoKCnN0YXRpYyB2 b2lkCndyaXRlX3N1YnJvdXRpbmVzIChoZWFkLCB0eXBlKQogICAgIHN0cnVjdCBkZWNpc2lvbl9o ZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7CnsKICBzdHJ1Y3QgZGVjaXNp b24gKnA7CgogIGZvciAocCA9IGhlYWQtPmZpcnN0OyBwIDsgcCA9IHAtPm5leHQpCiAgICBpZiAo cC0+c3VjY2Vzcy5maXJzdCkKICAgICAgd3JpdGVfc3Vicm91dGluZXMgKCZwLT5zdWNjZXNzLCB0 eXBlKTsKCiAgaWYgKGhlYWQtPmZpcnN0LT5zdWJyb3V0aW5lX251bWJlciA+IDApCiAgICB3cml0 ZV9zdWJyb3V0aW5lIChoZWFkLCB0eXBlKTsKfQoKCgpzdGF0aWMgdm9pZAp3cml0ZV9oZWFkZXIg KCkKewogIHB1dHMgKCIvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgcHJvZ3JhbSBg Z2VucmVjb2cnIGZyb20gdGhlIHRhcmdldFxuICAgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlLiAg Ki9cblxuI2luY2x1ZGUgXCJjb25maWcuaFwiXG4jaW5jbHVkZSBcInN5c3RlbS5oXCJcbiNpbmNs dWRlIFwicnRsLmhcIlxuI2luY2x1ZGUgXCJ0bV9wLmhcIlxuI2luY2x1ZGUgXCJmdW5jdGlvbi5o XCJcbiNpbmNsdWRlIFwiaW5zbi1jb25maWcuaFwiXG4jaW5jbHVkZSBcInJlY29nLmhcIlxuI2lu Y2x1ZGUgXCJyZWFsLmhcIlxuI2luY2x1ZGUgXCJvdXRwdXQuaFwiXG4jaW5jbHVkZSBcImZsYWdz LmhcIlxuI2luY2x1ZGUgXCJoYXJkLXJlZy1zZXQuaFwiXG4jaW5jbHVkZSBcInJlc291cmNlLmhc IlxuI2luY2x1ZGUgXCJ0b3BsZXYuaFwiXG4jaW5jbHVkZSBcInJlbG9hZC5oXCJcblxuIik7CiMg MjQxMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCiAgcHV0cyAo IlxuLyogYHJlY29nJyBjb250YWlucyBhIGRlY2lzaW9uIHRyZWUgdGhhdCByZWNvZ25pemVzIHdo ZXRoZXIgdGhlIHJ0eFxuICAgWDAgaXMgYSB2YWxpZCBpbnN0cnVjdGlvbi5cblxuICAgcmVjb2cg cmV0dXJucyAtMSBpZiB0aGUgcnR4IGlzIG5vdCB2YWxpZC4gIElmIHRoZSBydHggaXMgdmFsaWQs IHJlY29nXG4gICByZXR1cm5zIGEgbm9ubmVnYXRpdmUgbnVtYmVyIHdoaWNoIGlzIHRoZSBpbnNu IGNvZGUgbnVtYmVyIGZvciB0aGVcbiAgIHBhdHRlcm4gdGhhdCBtYXRjaGVkLiAgVGhpcyBpcyB0 aGUgc2FtZSBhcyB0aGUgb3JkZXIgaW4gdGhlIG1hY2hpbmVcbiAgIGRlc2NyaXB0aW9uIG9mIHRo ZSBlbnRyeSB0aGF0IG1hdGNoZWQuICBUaGlzIG51bWJlciBjYW4gYmUgdXNlZCBhcyBhblxuICAg aW5kZXggaW50byBgaW5zbl9kYXRhJyBhbmQgb3RoZXIgdGFibGVzLlxuIik7CiMgMjQyMCAiLi4v Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCiAgcHV0cyAoIiAgIFRoZSB0 aGlyZCBhcmd1bWVudCB0byByZWNvZyBpcyBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGludC4g IElmXG4gICBwcmVzZW50LCByZWNvZyB3aWxsIGFjY2VwdCBhIHBhdHRlcm4gaWYgaXQgbWF0Y2hl cyBleGNlcHQgZm9yIG1pc3NpbmdcbiAgIENMT0JCRVIgZXhwcmVzc2lvbnMgYXQgdGhlIGVuZC4g IEluIHRoYXQgY2FzZSwgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnlcbiAgIHRoZSBvcHRpb25hbCBw b2ludGVyIHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgQ0xPQkJFUnMgdGhhdCBuZWVkXG4g ICB0byBiZSBhZGRlZCAoaXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8gYnkgdGhlIGNh bGxlcikuICBJZiBpdCIpOwoKCgoKCiAgcHV0cyAoIiAgIGlzIHNldCBub256ZXJvLCB0aGUgY2Fs bGVyIHNob3VsZCBhbGxvY2F0ZSBhIFBBUkFMTEVMIG9mIHRoZVxuICAgYXBwcm9wcmlhdGUgc2l6 ZSwgY29weSB0aGUgaW5pdGlhbCBlbnRyaWVzLCBhbmQgY2FsbCBhZGRfY2xvYmJlcnNcbiAgIChm b3VuZCBpbiBpbnNuLWVtaXQuYykgdG8gZmlsbCBpbiB0aGUgQ0xPQkJFUnMuXG4iKTsKCgoKCgog IHB1dHMgKCJcbiAgIFRoZSBmdW5jdGlvbiBzcGxpdF9pbnNucyByZXR1cm5zIDAgaWYgdGhlIHJ0 bCBjb3VsZCBub3RcbiAgIGJlIHNwbGl0IG9yIHRoZSBzcGxpdCBydGwgaW4gYSBTRVFVRU5DRSBp ZiBpdCBjYW4gYmUuXG5cbiAgIFRoZSBmdW5jdGlvbiBwZWVwaG9sZTJfaW5zbnMgcmV0dXJucyAw IGlmIHRoZSBydGwgY291bGQgbm90XG4gICBiZSBtYXRjaGVkLiBJZiB0aGVyZSB3YXMgYSBtYXRj aCwgdGhlIG5ldyBydGwgaXMgcmV0dXJuZWQgaW4gYSBTRVFVRU5DRSxcbiAgIGFuZCBMQVNUX0lO U04gd2lsbCBwb2ludCB0byB0aGUgbGFzdCByZWNvZ25pemVkIGluc24gaW4gdGhlIG9sZCBzZXF1 ZW5jZS5cbiovXG5cbiIpOwoKCgoKCgoKfQoKCgoKCgoKc3RhdGljIHN0cnVjdCBkZWNpc2lvbl9o ZWFkCm1ha2VfaW5zbl9zZXF1ZW5jZSAoaW5zbiwgdHlwZSkKICAgICBydHggaW5zbjsKICAgICBl bnVtIHJvdXRpbmVfdHlwZSB0eXBlOwp7CiAgcnR4IHg7CiAgY29uc3QgY2hhciAqY190ZXN0ID0g KCgoaW5zbiktPmZsZFt0eXBlID09IFJFQ09HID8gMiA6IDFdKS5ydHN0cik7CiAgc3RydWN0IGRl Y2lzaW9uICpsYXN0OwogIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0LCAqKnBsYWNlOwogIHN0 cnVjdCBkZWNpc2lvbl9oZWFkIGhlYWQ7CiAgY2hhciBjX3Rlc3RfcG9zWzJdOwoKICByZWNvcmRf aW5zbl9uYW1lIChuZXh0X2luc25fY29kZSwgKHR5cGUgPT0gUkVDT0cgPyAoKChpbnNuKS0+Zmxk WzBdKS5ydHN0cikgOiAoKHZvaWQgKikwKSkpOwoKICBjX3Rlc3RfcG9zWzBdID0gJ1wwJzsKICBp ZiAodHlwZSA9PSBQRUVQSE9MRTIpCiAgICB7CiAgICAgIGludCBpLCBqOwoKCgoKCiAgICAgIHgg PSBydHhfYWxsb2MgKFBBUkFMTEVMKTsKICAgICAgKCh4KS0+bW9kZSA9IChlbnVtIG1hY2hpbmVf bW9kZSkgKFZPSURtb2RlKSk7CiAgICAgICgoKHgpLT5mbGRbMF0pLnJ0dmVjKSA9IHJ0dmVjX2Fs bG9jICgoKCgoKGluc24pLT5mbGRbMF0pLnJ0dmVjKSktPm51bV9lbGVtKSk7CiAgICAgIGZvciAo aSA9IGogPSAwOyBpIDwgKCgoKChpbnNuKS0+ZmxkWzBdKS5ydHZlYykpLT5udW1fZWxlbSk7IGkr KykKICAgICAgICB7CiAgICAgICAgICBydHggdG1wID0gKCgoKChpbnNuKS0+ZmxkWzBdKS5ydHZl YykpLT5lbGVtW2ldKTsKICAgICAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUpICh0bXApLT5jb2Rl KSAhPSBNQVRDSF9TQ1JBVENIICYmICgoZW51bSBydHhfY29kZSkgKHRtcCktPmNvZGUpICE9IE1B VENIX0RVUCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICgoKCgoeCktPmZsZFswXSkucnR2 ZWMpKS0+ZWxlbVtqXSkgPSB0bXA7CiAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICAoKCgoKHgpLT5mbGRbMF0pLnJ0dmVjKSktPm51bV9lbGVtKSA9IGo7Cgog ICAgICBjX3Rlc3RfcG9zWzBdID0gJ0EnICsgaiAtIDE7CiAgICAgIGNfdGVzdF9wb3NbMV0gPSAn XDAnOwogICAgfQogIGVsc2UgaWYgKCgoKCgoaW5zbiktPmZsZFt0eXBlID09IFJFQ09HXSkucnR2 ZWMpKS0+bnVtX2VsZW0pID09IDEpCiAgICB4ID0gKCgoKChpbnNuKS0+ZmxkW3R5cGUgPT0gUkVD T0ddKS5ydHZlYykpLT5lbGVtWzBdKTsKICBlbHNlCiAgICB7CiAgICAgIHggPSBydHhfYWxsb2Mg KFBBUkFMTEVMKTsKICAgICAgKCgoeCktPmZsZFswXSkucnR2ZWMpID0gKCgoaW5zbiktPmZsZFt0 eXBlID09IFJFQ09HXSkucnR2ZWMpOwogICAgICAoKHgpLT5tb2RlID0gKGVudW0gbWFjaGluZV9t b2RlKSAoVk9JRG1vZGUpKTsKICAgIH0KCiAgdmFsaWRhdGVfcGF0dGVybiAoeCwgaW5zbiwgKHJ0 eCkgMCwgMCk7CgogIG1lbXNldCgmaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTsKICBsYXN0ID0gYWRk X3RvX3NlcXVlbmNlICh4LCAmaGVhZCwgIiIsIHR5cGUsIDEpOwoKCiAgZm9yICh0ZXN0ID0gbGFz dC0+dGVzdHM7IHRlc3QtPm5leHQ7IHRlc3QgPSB0ZXN0LT5uZXh0KQogICAgY29udGludWU7CiAg cGxhY2UgPSAmdGVzdC0+bmV4dDsKCiAgaWYgKGNfdGVzdFswXSkKICAgIHsKCiAgICAgIGlmICh0 ZXN0LT50eXBlID09IERUX2FjY2VwdF9vcCkKICAgICAgICB7CiAgICAgICAgICBsYXN0ID0gbmV3 X2RlY2lzaW9uIChjX3Rlc3RfcG9zLCAmbGFzdC0+c3VjY2Vzcyk7CiAgICAgICAgICBwbGFjZSA9 ICZsYXN0LT50ZXN0czsKICAgICAgICB9CiAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAo RFRfY190ZXN0LCAmcGxhY2UpOwogICAgICB0ZXN0LT51LmNfdGVzdCA9IGNfdGVzdDsKICAgIH0K CiAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9hY2NlcHRfaW5zbiwgJnBsYWNlKTsKICB0 ZXN0LT51Lmluc24uY29kZV9udW1iZXIgPSBuZXh0X2luc25fY29kZTsKICB0ZXN0LT51Lmluc24u bGluZW5vID0gcGF0dGVybl9saW5lbm87CiAgdGVzdC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19h ZGQgPSAwOwoKICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICBjYXNlIFJFQ09HOgoKCgoKICAgICAg aWYgKCgoZW51bSBydHhfY29kZSkgKHgpLT5jb2RlKSA9PSBQQVJBTExFTCkKICAgICAgICB7CiAg ICAgICAgICBpbnQgaTsKCgogICAgICAgICAgZm9yIChpID0gKCgoKCh4KS0+ZmxkWzBdKS5ydHZl YykpLT5udW1fZWxlbSk7IGkgPiAwOyBpLS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBy dHggeSA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtpIC0gMV0pOwogICAgICAgICAg ICAgIGlmICgoKGVudW0gcnR4X2NvZGUpICh5KS0+Y29kZSkgIT0gQ0xPQkJFUgogICAgICAgICAg ICAgICAgICB8fCAoKChlbnVtIHJ0eF9jb2RlKSAoKCgoeSktPmZsZFswXSkucnR4KSktPmNvZGUp ICE9IFJFRwogICAgICAgICAgICAgICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoKCgoeSkt PmZsZFswXSkucnR4KSktPmNvZGUpICE9IE1BVENIX1NDUkFUQ0gpKQogICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaSAhPSAoKCgoKHgpLT5mbGRbMF0p LnJ0dmVjKSktPm51bV9lbGVtKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJ0eCBuZXc7 CiAgICAgICAgICAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgY2xvYmJlcl9oZWFkOwoKCiAgICAg ICAgICAgICAgaWYgKGkgPT0gMSkKICAgICAgICAgICAgICAgIG5ldyA9ICgoKCgoeCktPmZsZFsw XSkucnR2ZWMpKS0+ZWxlbVswXSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgIG5ldyA9IHJ0eF9h bGxvYyAoUEFSQUxMRUwpOwogICAgICAgICAgICAgICAgICAoKChuZXcpLT5mbGRbMF0pLnJ0dmVj KSA9IHJ0dmVjX2FsbG9jIChpKTsKICAgICAgICAgICAgICAgICAgZm9yIChqID0gaSAtIDE7IGog Pj0gMDsgai0tKQogICAgICAgICAgICAgICAgICAgICgoKCgobmV3KS0+ZmxkWzBdKS5ydHZlYykp LT5lbGVtW2pdKSA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtqXSk7CiAgICAgICAg ICAgICAgICB9CgoKICAgICAgICAgICAgICBtZW1zZXQgKCZjbG9iYmVyX2hlYWQsIDAsIHNpemVv ZihjbG9iYmVyX2hlYWQpKTsKICAgICAgICAgICAgICBsYXN0ID0gYWRkX3RvX3NlcXVlbmNlIChu ZXcsICZjbG9iYmVyX2hlYWQsICIiLCB0eXBlLCAxKTsKCgogICAgICAgICAgICAgIGZvciAodGVz dCA9IGxhc3QtPnRlc3RzOyB0ZXN0LT5uZXh0OyB0ZXN0ID0gdGVzdC0+bmV4dCkKICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwoKCgogICAgICAgICAgICAgIHBsYWNlID0gJnRlc3QtPm5leHQ7CiAg ICAgICAgICAgICAgaWYgKHRlc3QtPnR5cGUgPT0gRFRfYWNjZXB0X29wKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICBsYXN0ID0gbmV3X2RlY2lzaW9uICgiIiwgJmxhc3QtPnN1 Y2Nlc3MpOwogICAgICAgICAgICAgICAgICBwbGFjZSA9ICZsYXN0LT50ZXN0czsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKGNfdGVzdFswXSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9jX3Rlc3QsICZw bGFjZSk7CiAgICAgICAgICAgICAgICAgIHRlc3QtPnUuY190ZXN0ID0gY190ZXN0OwogICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lzaW9uX3Rlc3QgKERUX2Fj Y2VwdF9pbnNuLCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUuaW5zbi5jb2RlX251bWJl ciA9IG5leHRfaW5zbl9jb2RlOwogICAgICAgICAgICAgIHRlc3QtPnUuaW5zbi5saW5lbm8gPSBw YXR0ZXJuX2xpbmVubzsKICAgICAgICAgICAgICB0ZXN0LT51Lmluc24ubnVtX2Nsb2JiZXJzX3Rv X2FkZCA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+bnVtX2VsZW0pIC0gaTsKCiAgICAgICAg ICAgICAgbWVyZ2VfdHJlZXMgKCZoZWFkLCAmY2xvYmJlcl9oZWFkKTsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSBTUExJVDoKCiAgICAgIHByaW50ZiAoImV4 dGVybiBydHggZ2VuX3NwbGl0XyVkIFBBUkFNUyAoKHJ0eCAqKSk7XG4iLCBuZXh0X2luc25fY29k ZSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgUEVFUEhPTEUyOgoKICAgICAgcHJpbnRmICgiZXh0 ZXJuIHJ0eCBnZW5fcGVlcGhvbGUyXyVkIFBBUkFNUyAoKHJ0eCwgcnR4ICopKTtcbiIsCiAgICAg ICAgICAgICAgbmV4dF9pbnNuX2NvZGUpOwogICAgICBicmVhazsKICAgIH0KCiAgcmV0dXJuIGhl YWQ7Cn0KCnN0YXRpYyB2b2lkCnByb2Nlc3NfdHJlZSAoaGVhZCwgc3Vicm91dGluZV90eXBlKQog ICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1 YnJvdXRpbmVfdHlwZTsKewogIGlmIChoZWFkLT5maXJzdCA9PSAoKHZvaWQgKikwKSkKICAgIHsK CiAgICAgIGlmIChzdWJyb3V0aW5lX3R5cGUgPT0gUEVFUEhPTEUyKQogICAgICAgIHJldHVybjsK ICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGZhY3Rvcl90ZXN0cyAoaGVhZCk7CgogICAgICBuZXh0 X3N1YnJvdXRpbmVfbnVtYmVyID0gMDsKICAgICAgYnJlYWtfb3V0X3N1YnJvdXRpbmVzIChoZWFk LCAxKTsKICAgICAgZmluZF9hZnRlcndhcmQgKGhlYWQsICgodm9pZCAqKTApKTsKCgoKCiAgICAg IHNpbXBsaWZ5X3Rlc3RzKGhlYWQpOwoKICAgICAgd3JpdGVfc3Vicm91dGluZXMgKGhlYWQsIHN1 YnJvdXRpbmVfdHlwZSk7CiAgICB9CgogIHdyaXRlX3N1YnJvdXRpbmUgKGhlYWQsIHN1YnJvdXRp bmVfdHlwZSk7Cn0KCmV4dGVybiBpbnQgbWFpbiAoaW50LCBjaGFyICoqKTsKCmludAptYWluIChh cmdjLCBhcmd2KQogICAgIGludCBhcmdjOwogICAgIGNoYXIgKiphcmd2Owp7CiAgcnR4IGRlc2M7 CiAgc3RydWN0IGRlY2lzaW9uX2hlYWQgcmVjb2dfdHJlZSwgc3BsaXRfdHJlZSwgcGVlcGhvbGUy X3RyZWUsIGg7CgogIHByb2duYW1lID0gImdlbnJlY29nIjsKCiAgbWVtc2V0ICgmcmVjb2dfdHJl ZSwgMCwgc2l6ZW9mIHJlY29nX3RyZWUpOwogIG1lbXNldCAoJnNwbGl0X3RyZWUsIDAsIHNpemVv ZiBzcGxpdF90cmVlKTsKICBtZW1zZXQgKCZwZWVwaG9sZTJfdHJlZSwgMCwgc2l6ZW9mIHBlZXBo b2xlMl90cmVlKTsKCiAgaWYgKGFyZ2MgPD0gMSkKICAgIGZhdGFsICgibm8gaW5wdXQgZmlsZSBu YW1lIik7CgogIGlmIChpbml0X21kX3JlYWRlcl9hcmdzIChhcmdjLCBhcmd2KSAhPSAwKQogICAg cmV0dXJuICgxKTsKCiAgbmV4dF9pbnNuX2NvZGUgPSAwOwogIG5leHRfaW5kZXggPSAwOwoKICB3 cml0ZV9oZWFkZXIgKCk7CgoKCiAgd2hpbGUgKDEpCiAgICB7CiAgICAgIGRlc2MgPSByZWFkX21k X3J0eCAoJnBhdHRlcm5fbGluZW5vLCAmbmV4dF9pbnNuX2NvZGUpOwogICAgICBpZiAoZGVzYyA9 PSAoKHZvaWQgKikwKSkKICAgICAgICBicmVhazsKCiAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUp IChkZXNjKS0+Y29kZSkgPT0gREVGSU5FX0lOU04pCiAgICAgICAgewogICAgICAgICAgaCA9IG1h a2VfaW5zbl9zZXF1ZW5jZSAoZGVzYywgUkVDT0cpOwogICAgICAgICAgbWVyZ2VfdHJlZXMgKCZy ZWNvZ190cmVlLCAmaCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmICgoKGVudW0gcnR4X2NvZGUp IChkZXNjKS0+Y29kZSkgPT0gREVGSU5FX1NQTElUKQogICAgICAgIHsKICAgICAgICAgIGggPSBt YWtlX2luc25fc2VxdWVuY2UgKGRlc2MsIFNQTElUKTsKICAgICAgICAgIG1lcmdlX3RyZWVzICgm c3BsaXRfdHJlZSwgJmgpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoKChlbnVtIHJ0eF9jb2Rl KSAoZGVzYyktPmNvZGUpID09IERFRklORV9QRUVQSE9MRTIpCiAgICAgICAgewogICAgICAgICAg aCA9IG1ha2VfaW5zbl9zZXF1ZW5jZSAoZGVzYywgUEVFUEhPTEUyKTsKICAgICAgICAgIG1lcmdl X3RyZWVzICgmcGVlcGhvbGUyX3RyZWUsICZoKTsKICAgICAgICB9CgogICAgICBuZXh0X2luZGV4 Kys7CiAgICB9CgogIGlmIChlcnJvcl9jb3VudCkKICAgIHJldHVybiAxOwoKICBwdXRzICgiXG5c biIpOwoKICBwcm9jZXNzX3RyZWUgKCZyZWNvZ190cmVlLCBSRUNPRyk7CiAgcHJvY2Vzc190cmVl ICgmc3BsaXRfdHJlZSwgU1BMSVQpOwogIHByb2Nlc3NfdHJlZSAoJnBlZXBob2xlMl90cmVlLCBQ RUVQSE9MRTIpOwoKICBmZmx1c2ggKCgmX19pb2JbMV0pKTsKICByZXR1cm4gKCgoKGludCkoKCZf X2lvYlsxXSkpLT5fZmxhZykgJiAwMDQwKSAhPSAwID8gMSA6IDApOwp9CgoKY29uc3QgY2hhciAq CmdldF9pbnNuX25hbWUgKGNvZGUpCiAgICAgaW50IGNvZGU7CnsKICBpZiAoY29kZSA8IGluc25f bmFtZV9wdHJfc2l6ZSkKICAgIHJldHVybiBpbnNuX25hbWVfcHRyW2NvZGVdOwogIGVsc2UKICAg IHJldHVybiAoKHZvaWQgKikwKTsKfQoKc3RhdGljIHZvaWQKcmVjb3JkX2luc25fbmFtZSAoY29k ZSwgbmFtZSkKICAgICBpbnQgY29kZTsKICAgICBjb25zdCBjaGFyICpuYW1lOwp7CiAgc3RhdGlj IGNvbnN0IGNoYXIgKmxhc3RfcmVhbF9uYW1lID0gImluc24iOwogIHN0YXRpYyBpbnQgbGFzdF9y ZWFsX2NvZGUgPSAwOwogIGNoYXIgKm5ldzsKCiAgaWYgKGluc25fbmFtZV9wdHJfc2l6ZSA8PSBj b2RlKQogICAgewogICAgICBpbnQgbmV3X3NpemU7CiAgICAgIG5ld19zaXplID0gKGluc25fbmFt ZV9wdHJfc2l6ZSA/IGluc25fbmFtZV9wdHJfc2l6ZSAqIDIgOiA1MTIpOwogICAgICBpbnNuX25h bWVfcHRyID0KICAgICAgICAoY2hhciAqKikgeHJlYWxsb2MgKGluc25fbmFtZV9wdHIsIHNpemVv ZihjaGFyICopICogbmV3X3NpemUpOwogICAgICBtZW1zZXQgKGluc25fbmFtZV9wdHIgKyBpbnNu X25hbWVfcHRyX3NpemUsIDAsCiAgICAgICAgICAgICAgc2l6ZW9mKGNoYXIgKikgKiAobmV3X3Np emUgLSBpbnNuX25hbWVfcHRyX3NpemUpKTsKICAgICAgaW5zbl9uYW1lX3B0cl9zaXplID0gbmV3 X3NpemU7CiAgICB9CgogIGlmICghbmFtZSB8fCBuYW1lWzBdID09ICdcMCcpCiAgICB7CiAgICAg IG5ldyA9IHhtYWxsb2MgKHN0cmxlbiAobGFzdF9yZWFsX25hbWUpICsgMTApOwogICAgICBzcHJp bnRmIChuZXcsICIlcyslZCIsIGxhc3RfcmVhbF9uYW1lLCBjb2RlIC0gbGFzdF9yZWFsX2NvZGUp OwogICAgfQogIGVsc2UKICAgIHsKICAgICAgbGFzdF9yZWFsX25hbWUgPSBuZXcgPSB4c3RyZHVw IChuYW1lKTsKICAgICAgbGFzdF9yZWFsX2NvZGUgPSBjb2RlOwogICAgfQoKICBpbnNuX25hbWVf cHRyW2NvZGVdID0gbmV3Owp9CgpzdGF0aWMgdm9pZApkZWJ1Z19kZWNpc2lvbl8yICh0ZXN0KQog ICAgIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0Owp7CiAgc3dpdGNoICh0ZXN0LT50eXBlKQog ICAgewogICAgY2FzZSBEVF9tb2RlOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgIm1vZGU9 JXMiLCAobW9kZV9uYW1lWyhpbnQpICh0ZXN0LT51Lm1vZGUpXSkpOwogICAgICBicmVhazsKICAg IGNhc2UgRFRfY29kZToKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICJjb2RlPSVzIiwgKHJ0 eF9uYW1lWyhpbnQpICh0ZXN0LT51LmNvZGUpXSkpOwogICAgICBicmVhazsKICAgIGNhc2UgRFRf dmVjbGVuOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgInZlY2xlbj0lZCIsIHRlc3QtPnUu dmVjbGVuKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2VsdF96ZXJvX2ludDoKICAgICAgZnBy aW50ZiAoKCZfX2lvYlsyXSksICJlbHQwX2k9JWQiLCAoaW50KSB0ZXN0LT51LmludHZhbCk7CiAg ICAgIGJyZWFrOwogICAgY2FzZSBEVF9lbHRfb25lX2ludDoKICAgICAgZnByaW50ZiAoKCZfX2lv YlsyXSksICJlbHQxX2k9JWQiLCAoaW50KSB0ZXN0LT51LmludHZhbCk7CiAgICAgIGJyZWFrOwog ICAgY2FzZSBEVF9lbHRfemVyb193aWRlOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgImVs dDBfdz0iKTsKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICIlbGxkIiwgdGVzdC0+dS5pbnR2 YWwpOwogICAgICBicmVhazsKICAgIGNhc2UgRFRfZWx0X3plcm9fd2lkZV9zYWZlOgogICAgICBm cHJpbnRmICgoJl9faW9iWzJdKSwgImVsdDBfd3M9Iik7CiAgICAgIGZwcmludGYgKCgmX19pb2Jb Ml0pLCAiJWxsZCIsIHRlc3QtPnUuaW50dmFsKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX3Zl Y2xlbl9nZToKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICJ2ZWNsZW4+PSVkIiwgdGVzdC0+ dS52ZWNsZW4pOwogICAgICBicmVhazsKICAgIGNhc2UgRFRfZHVwOgogICAgICBmcHJpbnRmICgo Jl9faW9iWzJdKSwgImR1cD0lZCIsIHRlc3QtPnUuZHVwKTsKICAgICAgYnJlYWs7CiAgICBjYXNl IERUX3ByZWQ6CiAgICAgIGZwcmludGYgKCgmX19pb2JbMl0pLCAicHJlZD0oJXMsJXMpIiwKICAg ICAgICAgICAgICAgdGVzdC0+dS5wcmVkLm5hbWUsIChtb2RlX25hbWVbKGludCkgKHRlc3QtPnUu cHJlZC5tb2RlKV0pKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2NfdGVzdDoKICAgICAgewog ICAgICAgIGNoYXIgc3ViWzE2KzRdOwogICAgICAgIHN0cm5jcHkgKHN1YiwgdGVzdC0+dS5jX3Rl c3QsIHNpemVvZihzdWIpKTsKICAgICAgICBtZW1jcHkgKHN1YisxNiwgIi4uLiIsIDQpOwogICAg ICAgIGZwcmludGYgKCgmX19pb2JbMl0pLCAiY190ZXN0PVwiJXNcIiIsIHN1Yik7CiAgICAgIH0K ICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2FjY2VwdF9vcDoKICAgICAgZnByaW50ZiAoKCZfX2lv YlsyXSksICJBX29wPSVkIiwgdGVzdC0+dS5vcG5vKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERU X2FjY2VwdF9pbnNuOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgIkFfaW5zbj0oJWQsJWQp IiwKICAgICAgICAgICAgICAgdGVzdC0+dS5pbnNuLmNvZGVfbnVtYmVyLCB0ZXN0LT51Lmluc24u bnVtX2Nsb2JiZXJzX3RvX2FkZCk7CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgIGZh bmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAy ODA5LCBfX0ZVTkNUSU9OX18pOwogICAgfQp9CgpzdGF0aWMgdm9pZApkZWJ1Z19kZWNpc2lvbl8x IChkLCBpbmRlbnQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpkOwogICAgIGludCBpbmRlbnQ7CnsK ICBpbnQgaTsKICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdGVzdDsKCiAgaWYgKGQgPT0gKCh2b2lk ICopMCkpCiAgICB7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAo LS0oKCZfX2lvYlsyXSkpLT5fY250IDwgMCA/IF9fZmxzYnVmKCgnICcpLCAoKCZfX2lvYlsyXSkp KSA6IChpbnQpKCooKCZfX2lvYlsyXSkpLT5fcHRyKysgPSAodW5zaWduZWQgY2hhcikoJyAnKSkp OwogICAgICBmcHV0cyAoIihuaWwpXG4iLCAoJl9faW9iWzJdKSk7CiAgICAgIHJldHVybjsKICAg IH0KCiAgZm9yIChpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgKC0tKCgmX19pb2JbMl0pKS0+ X2NudCA8IDAgPyBfX2Zsc2J1ZigoJyAnKSwgKCgmX19pb2JbMl0pKSkgOiAoaW50KSgqKCgmX19p b2JbMl0pKS0+X3B0cisrID0gKHVuc2lnbmVkIGNoYXIpKCcgJykpKTsKCiAgKC0tKCgmX19pb2Jb Ml0pKS0+X2NudCA8IDAgPyBfX2Zsc2J1ZigoJ3snKSwgKCgmX19pb2JbMl0pKSkgOiAoaW50KSgq KCgmX19pb2JbMl0pKS0+X3B0cisrID0gKHVuc2lnbmVkIGNoYXIpKCd7JykpKTsKICB0ZXN0ID0g ZC0+dGVzdHM7CiAgaWYgKHRlc3QpCiAgICB7CiAgICAgIGRlYnVnX2RlY2lzaW9uXzIgKHRlc3Qp OwogICAgICB3aGlsZSAoKHRlc3QgPSB0ZXN0LT5uZXh0KSAhPSAoKHZvaWQgKikwKSkKICAgICAg ICB7CiAgICAgICAgICBmcHV0cyAoIiArICIsICgmX19pb2JbMl0pKTsKICAgICAgICAgIGRlYnVn X2RlY2lzaW9uXzIgKHRlc3QpOwogICAgICAgIH0KICAgIH0KICBmcHJpbnRmICgoJl9faW9iWzJd KSwgIn0gJWQgbiAlZCBhICVkXG4iLCBkLT5udW1iZXIsCiAgICAgICAgICAgKGQtPm5leHQgPyBk LT5uZXh0LT5udW1iZXIgOiAtMSksCiAgICAgICAgICAgKGQtPmFmdGVyd2FyZCA/IGQtPmFmdGVy d2FyZC0+bnVtYmVyIDogLTEpKTsKfQoKc3RhdGljIHZvaWQKZGVidWdfZGVjaXNpb25fMCAoZCwg aW5kZW50LCBtYXhkZXB0aCkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKmQ7CiAgICAgaW50IGluZGVu dCwgbWF4ZGVwdGg7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKm47CiAgaW50IGk7CgogIGlmIChtYXhk ZXB0aCA8IDApCiAgICByZXR1cm47CiAgaWYgKGQgPT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAg IGZvciAoaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAoLS0oKCZfX2lvYlsyXSkpLT5f Y250IDwgMCA/IF9fZmxzYnVmKCgnICcpLCAoKCZfX2lvYlsyXSkpKSA6IChpbnQpKCooKCZfX2lv YlsyXSkpLT5fcHRyKysgPSAodW5zaWduZWQgY2hhcikoJyAnKSkpOwogICAgICBmcHV0cyAoIihu aWwpXG4iLCAoJl9faW9iWzJdKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgZGVidWdfZGVjaXNp b25fMSAoZCwgaW5kZW50KTsKICBmb3IgKG4gPSBkLT5zdWNjZXNzLmZpcnN0OyBuIDsgbiA9IG4t Pm5leHQpCiAgICBkZWJ1Z19kZWNpc2lvbl8wIChuLCBpbmRlbnQgKyAyLCBtYXhkZXB0aCAtIDEp Owp9Cgp2b2lkCmRlYnVnX2RlY2lzaW9uIChkKQogICAgIHN0cnVjdCBkZWNpc2lvbiAqZDsKewog IGRlYnVnX2RlY2lzaW9uXzAgKGQsIDAsIDEwMDAwMDApOwp9Cgp2b2lkCmRlYnVnX2RlY2lzaW9u X2xpc3QgKGQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpkOwp7CiAgd2hpbGUgKGQpCiAgICB7CiAg ICAgIGRlYnVnX2RlY2lzaW9uXzAgKGQsIDAsIDApOwogICAgICBkID0gZC0+bmV4dDsKICAgIH0K fQo=