From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26783 invoked by alias); 12 Jan 2011 13:08:14 -0000 Received: (qmail 26170 invoked by uid 22791); 12 Jan 2011 13:08:12 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=BAYES_00 X-Spam-Check-By: sourceware.org Received: from tx2ehsobe004.messaging.microsoft.com (HELO TX2EHSOBE007.bigfish.com) (65.55.88.14) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 12 Jan 2011 13:08:05 +0000 Received: from mail187-tx2-R.bigfish.com (10.9.14.244) by TX2EHSOBE007.bigfish.com (10.9.40.27) with Microsoft SMTP Server id 14.1.225.8; Wed, 12 Jan 2011 13:08:03 +0000 Received: from mail187-tx2 (localhost.localdomain [127.0.0.1]) by mail187-tx2-R.bigfish.com (Postfix) with ESMTP id BCDDC52010E; Wed, 12 Jan 2011 13:07:58 +0000 (UTC) X-SpamScore: -8 X-BigFish: VPS-8(zz936eK1432Nzz1202hzz8275bhz32i2a8h668h34h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: KIP:(null);UIP:(null);IPVD:NLI;H:kcinpunhjhc02.kpit.com;RD:none;EFVD:NLI Received: from mail187-tx2 (localhost.localdomain [127.0.0.1]) by mail187-tx2 (MessageSwitch) id 1294837678430662_13148; Wed, 12 Jan 2011 13:07:58 +0000 (UTC) Received: from TX2EHSMHS033.bigfish.com (unknown [10.9.14.245]) by mail187-tx2.bigfish.com (Postfix) with ESMTP id 6423498051; Wed, 12 Jan 2011 13:07:58 +0000 (UTC) Received: from kcinpunhjhc02.kpit.com (220.225.38.51) by TX2EHSMHS033.bigfish.com (10.9.99.133) with Microsoft SMTP Server (TLS) id 14.1.225.8; Wed, 12 Jan 2011 13:07:56 +0000 Received: from Kcinpunhjcms01.kpit.com ([172.10.16.121]) by kcinpunhjhc02.kpit.com ([172.10.16.124]) with mapi; Wed, 12 Jan 2011 18:37:52 +0530 From: Rathish C To: "gdb-patches@sourceware.org" CC: "kevinb@redhat.com" , Gina Verlekar Date: Wed, 12 Jan 2011 13:25:00 -0000 Subject: [PATCH, V850] Add support for V850E2 and V850E2V3 Message-ID: <371569CBCFB2E745B891DBB88B2DFDDD19EB425D6B@KCINPUNHJCMS01.kpit.com> Content-Type: multipart/mixed; boundary="_002_371569CBCFB2E745B891DBB88B2DFDDD19EB425D6BKCINPUNHJCMS0_" MIME-Version: 1.0 X-OriginatorOrg: kpitcummins.com Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-01/txt/msg00255.txt.bz2 --_002_371569CBCFB2E745B891DBB88B2DFDDD19EB425D6BKCINPUNHJCMS0_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 3285 Hi, Thank you for the review comments. I have updated the patch based on the review comments from Kevin Buettner. Please find the updated patch "v850-gdb-v850e2-v850e2v3-support.patch". > > Your changes to gdb/v850-tdep.c are approved. > Thank you for approving the changes to the gdb/v850-tdep.c file. >=20 > I have one comment (see below) for the sim portion of the patch. The > rest of the patch looks reasonable to me. (It's unclear to me whether or > not I can approve sim patches...) > > > >> diff -upNr gdb-7.2.50-original/sim/v850/sim-main.h gdb-7.2.50- >> modified/sim/v850/sim-main.h >> --- gdb-7.2.50-original/sim/v850/sim-main.h 2002-11-30=20 >> 23:31:30.000000000 +0530 >> +++ gdb-7.2.50-modified/sim/v850/sim-main.h 2010-12-08=20 >> 14:52:40.000000000 +0530 [...] >> @@ -61,6 +65,7 @@ struct sim_state { >> #define STATE_CPU(sd,n) (&(sd)->cpu[n]) >> #else >> #define STATE_CPU(sd,n) (&(sd)->cpu[0]) >> +#define CPU (STATE_CPU (sd, 0)) >> #endif > > > Do you really need to define CPU here? It appears to me that a > suitable definition for CPU is placed in support.h by igen at build > time. If it turns out that you do need this definition, you should > make sure that the WITH_SMP case is handled too. > Yes, the CPU definition is available in support.h in the ./sim/v850/support.h file.=20 I have removed the definition from the sim-main.h file and=20 updated the patch accordingly. Please review the patch and let me know if there should be=20 any other modifications in it.=20 2011-01-12 Rathish.C =09 * gdb/v850-tdep.c: Add the enum values for mpu and fpu registers (v850_register_name): Add the mpu and fpu register names. (v850e_register_name): Add the mpu and fpu register names. (v850e2_register_name): New function. (v850_gdbarch_init): Add case for bfd_mach_v850e2 and=20 bfd_mach_v850e2v3. * sim/common/sim-trace.c: Update the function prototype of=20 save_data_size. Move the enum data_fmt from here * sim/common/sim-trace.h: to here. Add function prototype of save_data * sim/v850/sim-main.h: Update the struct _v850_regs to include mpu and fpu system registers. Define the macros to access the mpu and fpu system registers. (SEXT3): Define. (TRACE_FP_INPUT_FPU1, TRACE_FP_INPUT_FPU2, TRACE_FP_INPUT_FPU3): Define. (TRACE_FP_INPUT_BOOL1_FPU2): Define. (TRACE_FP_INPUT_WORD2): Define. (TRACE_FP_RESULT_WORD1, TRACE_FP_RESULT_WORD2): Define. * sim/v850/simops.c: Update the function prototype of Add32 (update_fpsr): New function. (SignalException): New function. (SignalExceptionFPE): New function. (check_invalid_snan): New function. (v850_float_compare): New function. (v850_div): New function. (v850_divu): New function. (v850_sar): New function. (v850_shl): New function. (v850_shr): New function. (v850_satadd): New function. (v850_satsub): New function. (load_data_mem): New function. (store_data_mem): New function. (mpu_load_mem_test): New function. (mpu_store_mem_test): New function. * sim/v850/simops.h: Add function prototype for above mentioned functions. (check_cvt_fi, check_cvt_if, check_cvt_ff): Define. * sim/v850/v850-dc: Add entry for v850e2 and v850e2v3. * sim/v850/v850.igen: Add support for v850e2 and v850e2v3 Thanks & Regards, Rathish.C --_002_371569CBCFB2E745B891DBB88B2DFDDD19EB425D6BKCINPUNHJCMS0_ Content-Type: application/octet-stream; name="v850-gdb-v850e2-v850e2v3-support.patch" Content-Description: v850-gdb-v850e2-v850e2v3-support.patch Content-Disposition: attachment; filename="v850-gdb-v850e2-v850e2v3-support.patch"; size=94476; creation-date="Wed, 12 Jan 2011 12:10:59 GMT"; modification-date="Tue, 11 Jan 2011 18:46:49 GMT" Content-Transfer-Encoding: base64 Content-length: 128068 ZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFsL2dkYi92ODUwLXRkZXAu YyBnZGItNy4yLjUwLW1vZGlmaWVkL2dkYi92ODUwLXRkZXAuYwotLS0gZ2Ri LTcuMi41MC1vcmlnaW5hbC9nZGIvdjg1MC10ZGVwLmMJMjAxMS0wMS0wMSAy MTowMzoxOC4wMDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZp ZWQvZ2RiL3Y4NTAtdGRlcC5jCTIwMTEtMDEtMTEgMTg6MjQ6MzAuMDAwMDAw MDAwICswNTMwCkBAIC0xMDEsNyArMTAxLDk3IEBAIGVudW0KICAgICBFX1I2 Ml9SRUdOVU0sCiAgICAgRV9SNjNfUkVHTlVNLAogICAgIEVfUjY0X1JFR05V TSwgRV9QQ19SRUdOVU0gPSBFX1I2NF9SRUdOVU0sCi0gICAgRV9SNjVfUkVH TlVNLAorICAgIEVfUjY1X1JFR05VTSwgRV9OVU1fT0ZfVjg1MF9SRUdTID0g RV9SNjVfUkVHTlVNLCBFX05VTV9PRl9WODUwRV9SRUdTID0gRV9SNjVfUkVH TlVNLAorCisgICAgLyogbXB1MCBzeXN0ZW0gcmVnaXN0ZXJzICovCisgICAg RV9SNjZfUkVHTlVNLAorICAgIEVfUjY3X1JFR05VTSwKKyAgICBFX1I2OF9S RUdOVU0sCisgICAgRV9SNjlfUkVHTlVNLAorICAgIEVfUjcwX1JFR05VTSwK KyAgICBFX1I3MV9SRUdOVU0sCisgICAgRV9SNzJfUkVHTlVNLAorICAgIEVf UjczX1JFR05VTSwKKyAgICBFX1I3NF9SRUdOVU0sCisgICAgRV9SNzVfUkVH TlVNLAorICAgIEVfUjc2X1JFR05VTSwKKyAgICBFX1I3N19SRUdOVU0sCisg ICAgRV9SNzhfUkVHTlVNLAorICAgIEVfUjc5X1JFR05VTSwKKyAgICBFX1I4 MF9SRUdOVU0sCisgICAgRV9SODFfUkVHTlVNLAorICAgIEVfUjgyX1JFR05V TSwKKyAgICBFX1I4M19SRUdOVU0sCisgICAgRV9SODRfUkVHTlVNLAorICAg IEVfUjg1X1JFR05VTSwKKyAgICBFX1I4Nl9SRUdOVU0sCisgICAgRV9SODdf UkVHTlVNLAorICAgIEVfUjg4X1JFR05VTSwKKyAgICBFX1I4OV9SRUdOVU0s CisgICAgRV9SOTBfUkVHTlVNLAorICAgIEVfUjkxX1JFR05VTSwKKyAgICBF X1I5Ml9SRUdOVU0sCisgICAgRV9SOTNfUkVHTlVNLAorCisgICAgLyogbXB1 MSBzeXN0ZW0gcmVnaXN0ZXJzICovCisKKyAgICBFX1I5NF9SRUdOVU0sCisg ICAgRV9SOTVfUkVHTlVNLAorICAgIEVfUjk2X1JFR05VTSwKKyAgICBFX1I5 N19SRUdOVU0sCisgICAgRV9SOThfUkVHTlVNLAorICAgIEVfUjk5X1JFR05V TSwKKyAgICBFX1IxMDBfUkVHTlVNLAorICAgIEVfUjEwMV9SRUdOVU0sCisg ICAgRV9SMTAyX1JFR05VTSwKKyAgICBFX1IxMDNfUkVHTlVNLAorICAgIEVf UjEwNF9SRUdOVU0sCisgICAgRV9SMTA1X1JFR05VTSwKKyAgICBFX1IxMDZf UkVHTlVNLAorICAgIEVfUjEwN19SRUdOVU0sCisgICAgRV9SMTA4X1JFR05V TSwKKyAgICBFX1IxMDlfUkVHTlVNLAorICAgIEVfUjExMF9SRUdOVU0sCisg ICAgRV9SMTExX1JFR05VTSwKKyAgICBFX1IxMTJfUkVHTlVNLAorICAgIEVf UjExM19SRUdOVU0sCisgICAgRV9SMTE0X1JFR05VTSwKKyAgICBFX1IxMTVf UkVHTlVNLAorICAgIEVfUjExNl9SRUdOVU0sCisgICAgRV9SMTE3X1JFR05V TSwKKyAgICBFX1IxMThfUkVHTlVNLAorICAgIEVfUjExOV9SRUdOVU0sCisg ICAgRV9SMTIwX1JFR05VTSwKKyAgICBFX1IxMjFfUkVHTlVNLAorCisgICAg LyogZnB1IHN5c3RlbSByZWdpc3RlcnMgKi8KKyAgICBFX1IxMjJfUkVHTlVN LAorICAgIEVfUjEyM19SRUdOVU0sCisgICAgRV9SMTI0X1JFR05VTSwKKyAg ICBFX1IxMjVfUkVHTlVNLAorICAgIEVfUjEyNl9SRUdOVU0sCisgICAgRV9S MTI3X1JFR05VTSwKKyAgICBFX1IxMjhfUkVHTlVNLCBFX0ZQU1JfUkVHTlVN ID0gRV9SMTI4X1JFR05VTSwKKyAgICBFX1IxMjlfUkVHTlVNLCBFX0ZQRVBD X1JFR05VTSA9IEVfUjEyOV9SRUdOVU0sCisgICAgRV9SMTMwX1JFR05VTSwg RV9GUFNUX1JFR05VTSA9IEVfUjEzMF9SRUdOVU0sCisgICAgRV9SMTMxX1JF R05VTSwgRV9GUENDX1JFR05VTSA9IEVfUjEzMV9SRUdOVU0sCisgICAgRV9S MTMyX1JFR05VTSwgRV9GUENGR19SRUdOVU0gPSBFX1IxMzJfUkVHTlVNLAor ICAgIEVfUjEzM19SRUdOVU0sCisgICAgRV9SMTM0X1JFR05VTSwKKyAgICBF X1IxMzVfUkVHTlVNLAorICAgIEVfUjEzNl9SRUdOVU0sCisgICAgRV9SMTM3 X1JFR05VTSwKKyAgICBFX1IxMzhfUkVHTlVNLAorICAgIEVfUjEzOV9SRUdO VU0sCisgICAgRV9SMTQwX1JFR05VTSwKKyAgICBFX1IxNDFfUkVHTlVNLAor ICAgIEVfUjE0Ml9SRUdOVU0sCisgICAgRV9SMTQzX1JFR05VTSwKKyAgICBF X1IxNDRfUkVHTlVNLAorICAgIEVfUjE0NV9SRUdOVU0sCisgICAgRV9SMTQ2 X1JFR05VTSwKKyAgICBFX1IxNDdfUkVHTlVNLAorICAgIEVfUjE0OF9SRUdO VU0sCiAgICAgRV9OVU1fUkVHUwogICB9OwogCkBAIC0xNTIsNyArMjQyLDcg QEAgdjg1MF9yZWdpc3Rlcl9uYW1lIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYQog ICAgICJzcjI0IiwgInNyMjUiLCAic3IyNiIsICJzcjI3IiwgInNyMjgiLCAi c3IyOSIsICJzcjMwIiwgInNyMzEiLAogICAgICJwYyIsICJmcCIKICAgfTsK LSAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IEVfTlVNX1JFR1MpCisg IGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+IEVfTlVNX09GX1Y4NTBfUkVH UykKICAgICByZXR1cm4gTlVMTDsKICAgcmV0dXJuIHY4NTBfcmVnX25hbWVz W3JlZ251bV07CiB9CkBAIC0xNzIsMTEgKzI2Miw1MCBAQCB2ODUwZV9yZWdp c3Rlcl9uYW1lIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiCiAgICAgInNyMjQiLCAi c3IyNSIsICJzcjI2IiwgInNyMjciLCAic3IyOCIsICJzcjI5IiwgInNyMzAi LCAic3IzMSIsCiAgICAgInBjIiwgImZwIgogICB9OwotICBpZiAocmVnbnVt IDwgMCB8fCByZWdudW0gPj0gRV9OVU1fUkVHUykKKyAgaWYgKHJlZ251bSA8 IDAgfHwgcmVnbnVtID4gRV9OVU1fT0ZfVjg1MEVfUkVHUykKICAgICByZXR1 cm4gTlVMTDsKICAgcmV0dXJuIHY4NTBlX3JlZ19uYW1lc1tyZWdudW1dOwog fQogCitzdGF0aWMgY29uc3QgY2hhciAqCit2ODUwZTJfcmVnaXN0ZXJfbmFt ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0pCit7Cisg IHN0YXRpYyBjb25zdCBjaGFyICp2ODUwZTJfcmVnX25hbWVzW10gPQorICB7 CisgICAgInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgInI2 IiwgInI3IiwKKyAgICAicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJyMTIi LCAicjEzIiwgInIxNCIsICJyMTUiLAorICAgICJyMTYiLCAicjE3IiwgInIx OCIsICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjIzIiwKKyAgICAi cjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgInIyOCIsICJyMjkiLCAicjMw IiwgInIzMSIsCisKKyAgICAiZWlwYyIsICJlaXBzdyIsICJmZXBjIiwgImZl cHN3IiwgImVjciIsICJwc3ciLCAic3I2IiwgInNyNyIsCisgICAgInNyOCIs ICJzcjkiLCAic3IxMCIsICJzcjExIiwgInNyMTIiLCAic3IxMyIsICJzcjE0 IiwgInNyMTUiLAorICAgICJjdHBjIiwgImN0cHN3IiwgImRicGMiLCAiZGJw c3ciLCAiY3RicCIsICJzcjIxIiwgInNyMjIiLCAic3IyMyIsCisgICAgInNy MjQiLCAic3IyNSIsICJzcjI2IiwgInNyMjciLCAic3IyOCIsICJzcjI5Iiwg InNyMzAiLCAic3IzMSIsCisgICAgInBjIiwgImZwIgorCisgICAgLyogbXB1 MCBzeXN0ZW0gcmVnaXN0ZXJzICovCisgICAgInZpcCIsICJzcjMzIiwgInNy MzQiLCAic3IzNSIsICJ2bWVjciIsICJ2bXRpZCIsICJ2bWFkciIsICJzcjM5 IiwKKyAgICAidnBlY3IiLCAidnB0aWQiLCAidnBhZHIiLCAic3I0MyIsICJ2 ZGVjciIsICJ2ZHRpZCIsICJzcjQ2IiwgInNyNDciLAorICAgICJzcjQ4Iiwg InNyNDkiLCAic3I1MCIsICJzcjUxIiwgInNyNTIiLCAic3I1MyIsICJzcjU0 IiwgInNyNTUiLAorICAgICJzcjU2IiwgInNyNTciLCAic3I1OCIsICJzcjU5 IiwKKworICAgIC8qIG1wdTEgc3lzdGVtIHJlZ2lzdGVycyAqLworICAgICJt cG0iLCAibXBjIiwgInRpZCIsICJwcGEiLCAicHBtIiwgInBwYyIsICJkY2Mi LCAiZGN2MCIsCisgICAgImRjdjEiLCAic3I2OSIsICJzcGFsIiwgInNwYXUi LCAiaXBhMGwiLCAiaXBhMHUiLCAiaXBhMWwiLCAiaXBhMXUiLAorICAgICJp YXAybCIsICJpcGEydSIsICJpcGEzbCIsICJpcGEzdSIsICJkcGEwbCIsICJk cGEwdSIsICJkcGExbCIsICJkcGExdSIsCisgICAgImRwYTJsIiwgImRwYTJ1 IiwgImRwYTNsIiwgImRwYTN1IiwKKworICAgIC8qIGZwdSBzeXN0ZW0gcmVn aXN0ZXJzICovCisgICAgInNyODgiLCAic3I4OSIsICJzcjkwIiwgInNyOTEi LCAic3I5MiIsICJzcjkzIiwgImZwc3IiLCAiZnBlcGMiLAorICAgICJmcHN0 IiwgImZwY2MiLCAiZnBjZmciLCAic3I5OSIsICJzcjEwMCIsICJzcjEwMSIs ICJzcjEwMiIsICJzcjEwMyIsCisgICAgInNyMTA0IiwgInNyMTA1IiwgInNy MTA2IiwgInNyMTA3IiwgInNyMTA4IiwgInNyMTA5IiwgInNyMTEwIiwgInNy MTExIiwKKyAgICAic3IxMTIiLCAic3IxMTMiLCAic3IxMTQiLCAic3IxMTUi CisgIH07CisgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBFX05VTV9S RUdTKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gdjg1MGUyX3JlZ19u YW1lc1tyZWdudW1dOworfQorCiAvKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHR5 cGUgZm9yIHJlZ2lzdGVyIE4uICAqLwogCiBzdGF0aWMgc3RydWN0IHR5cGUg KgpAQCAtOTk2LDYgKzExMjUsMTAgQEAgdjg1MF9nZGJhcmNoX2luaXQgKHN0 cnVjdCBnZGJhcmNoX2luZm8gaQogICAgIGNhc2UgYmZkX21hY2hfdjg1MGUx OgogICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwg djg1MGVfcmVnaXN0ZXJfbmFtZSk7CiAgICAgICBicmVhazsKKyAgICBjYXNl IGJmZF9tYWNoX3Y4NTBlMjoKKyAgICBjYXNlIGJmZF9tYWNoX3Y4NTBlMnYz OgorICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwg djg1MGUyX3JlZ2lzdGVyX25hbWUpOworICAgICAgYnJlYWs7CiAgICAgfQog CiAgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCBFX05VTV9SRUdT KTsKZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS9jb21tb24v c2ltLXRyYWNlLmMgZ2RiLTcuMi41MC1tb2RpZmllZC9zaW0vY29tbW9uL3Np bS10cmFjZS5jCi0tLSBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS9jb21tb24v c2ltLXRyYWNlLmMJMjAxMS0wMS0wMSAyMTowMzo1Ni4wMDAwMDAwMDAgKzA1 MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL2NvbW1vbi9zaW0tdHJh Y2UuYwkyMDExLTAxLTExIDE4OjI0OjU2LjAwMDAwMDAwMCArMDUzMApAQCAt NDg2LDE3ICs0ODYsNiBAQCB0cmFjZV91bmluc3RhbGwgKFNJTV9ERVNDIHNk KQogICAgIH0KIH0KIAwKLXR5cGVkZWYgZW51bSB7Ci0gIHRyYWNlX2ZtdF9p bnZhbGlkLAotICB0cmFjZV9mbXRfd29yZCwKLSAgdHJhY2VfZm10X2ZwLAot ICB0cmFjZV9mbXRfZnB1LAotICB0cmFjZV9mbXRfc3RyaW5nLAotICB0cmFj ZV9mbXRfYm9vbCwKLSAgdHJhY2VfZm10X2FkZHIsCi0gIHRyYWNlX2ZtdF9p bnN0cnVjdGlvbl9pbmNvbXBsZXRlLAotfSBkYXRhX2ZtdDsKLQogLyogY29t cHV0ZSB0aGUgbnIgb2YgdHJhY2UgZGF0YSB1bml0cyBjb25zdW1lZCBieSBk YXRhICovCiBzdGF0aWMgaW50CiBzYXZlX2RhdGFfc2l6ZSAoVFJBQ0VfREFU QSAqZGF0YSwKQEAgLTUwOCw3ICs0OTcsNyBAQCBzYXZlX2RhdGFfc2l6ZSAo VFJBQ0VfREFUQSAqZGF0YSwKIAogCiAvKiBBcmNoaXZlIERBVEEgaW50byB0 aGUgdHJhY2UgYnVmZmVyICovCi1zdGF0aWMgdm9pZAordm9pZAogc2F2ZV9k YXRhIChTSU1fREVTQyBzZCwKIAkgICBUUkFDRV9EQVRBICpkYXRhLAogCSAg IGRhdGFfZm10IGZtdCwKZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFs L3NpbS9jb21tb24vc2ltLXRyYWNlLmggZ2RiLTcuMi41MC1tb2RpZmllZC9z aW0vY29tbW9uL3NpbS10cmFjZS5oCi0tLSBnZGItNy4yLjUwLW9yaWdpbmFs L3NpbS9jb21tb24vc2ltLXRyYWNlLmgJMjAxMS0wMS0wMSAyMTowMzo1Ni4w MDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL2Nv bW1vbi9zaW0tdHJhY2UuaAkyMDExLTAxLTExIDE4OjI0OjU2LjAwMDAwMDAw MCArMDUzMApAQCAtMjQzLDkgKzI0MywyNiBAQCBleHRlcm4gdm9pZCB0cmFj ZV9nZW5lcmljIFBBUkFNUyAoKFNJTV9ECiAJCQkJICAgLi4uKSkKICAgICAg X19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSk7CiAKK3R5 cGVkZWYgZW51bSB7CisgIHRyYWNlX2ZtdF9pbnZhbGlkLAorICB0cmFjZV9m bXRfd29yZCwKKyAgdHJhY2VfZm10X2ZwLAorICB0cmFjZV9mbXRfZnB1LAor ICB0cmFjZV9mbXRfc3RyaW5nLAorICB0cmFjZV9mbXRfYm9vbCwKKyAgdHJh Y2VfZm10X2FkZHIsCisgIHRyYWNlX2ZtdF9pbnN0cnVjdGlvbl9pbmNvbXBs ZXRlLAorfSBkYXRhX2ZtdDsKKwogLyogVHJhY2UgYSB2YXJ5aW5nIG51bWJl ciBvZiB3b3JkIHNpemVkIGlucHV0cy9vdXRwdXRzLiAgdHJhY2VfcmVzdWx0 KgogICAgbXVzdCBiZSBjYWxsZWQgdG8gY2xvc2UgdGhlIHRyYWNlIG9wZXJh dGlvbi4gKi8KIAorZXh0ZXJuIHZvaWQgc2F2ZV9kYXRhIFBBUkFNUyAoKFNJ TV9ERVNDIHNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRS QUNFX0RBVEEgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YV9mbXQgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB2b2lkICpidWYpKTsKKwogZXh0ZXJuIHZvaWQgdHJhY2VfaW5w dXQwIFBBUkFNUyAoKFNJTV9ERVNDIHNkLAogCQkJCSAgc2ltX2NwdSAqY3B1 LAogCQkJCSAgaW50IHRyYWNlX2lkeCkpOwpkaWZmIC11cE5yIGdkYi03LjIu NTAtb3JpZ2luYWwvc2ltL3Y4NTAvc2ltLW1haW4uaCBnZGItNy4yLjUwLW1v ZGlmaWVkL3NpbS92ODUwL3NpbS1tYWluLmgKLS0tIGdkYi03LjIuNTAtb3Jp Z2luYWwvc2ltL3Y4NTAvc2ltLW1haW4uaAkyMDAyLTExLTMwIDIzOjMxOjMw LjAwMDAwMDAwMCArMDUzMAorKysgZ2RiLTcuMi41MC1tb2RpZmllZC9zaW0v djg1MC9zaW0tbWFpbi5oCTIwMTEtMDEtMTEgMTg6MjQ6NTguMDAwMDAwMDAw ICswNTMwCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJzaW0tYmFz aWNzLmgiCiAjaW5jbHVkZSAic2ltLXNpZ25hbC5oIgorI2luY2x1ZGUgInNp bS1mcHUuaCIKIAogdHlwZWRlZiBhZGRyZXNzX3dvcmQgc2ltX2NpYTsKIApA QCAtMzksNyArNDAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX3Y4NTBfcmVncyB7 CiAgIHJlZ190IHJlZ3NbMzJdOwkJLyogZ2VuZXJhbC1wdXJwb3NlIHJlZ2lz dGVycyAqLwogICByZWdfdCBzcmVnc1szMl07CQkvKiBzeXN0ZW0gcmVnaXN0 ZXJzLCBpbmNsdWRpbmcgcHN3ICovCiAgIHJlZ190IHBjOwotICBpbnQgZHVt bXlfbWVtOwkJLyogd2hlcmUgaW52YWxpZCBhY2Nlc3NlcyBnbyAqLworICBp bnQgZHVtbXlfbWVtOyAgICAgICAgICAgICAgICAvKiB3aGVyZSBpbnZhbGlk IGFjY2Vzc2VzIGdvICovCisgIHJlZ190IG1wdTBfc3JlZ3NbMjhdOyAgICAg ICAgIC8qIG1wdTAgc3lzdGVtIHJlZ2lzdGVycyAqLworICByZWdfdCBtcHUx X3NyZWdzWzI4XTsgICAgICAgICAvKiBtcHUxIHN5c3RlbSByZWdpc3RlcnMg Ki8KKyAgcmVnX3QgZnB1X3NyZWdzWzI4XTsgICAgICAgICAgLyogZnB1IHN5 c3RlbSByZWdpc3RlcnMgKi8KIH0gdjg1MF9yZWdzOwogCiBzdHJ1Y3QgX3Np bV9jcHUKQEAgLTEyMiwxMSArMTI2LDE1IEBAIG5pYSA9IFBDCiAvKiBuZXcg Ki8KICNkZWZpbmUgR1IgICgoQ1BVKS0+cmVnLnJlZ3MpCiAjZGVmaW5lIFNS ICAoKENQVSktPnJlZy5zcmVncykKKyNkZWZpbmUgTVBVMF9TUiAgKChTVEFU RV9DUFUgKHNkLCAwKSktPnJlZy5tcHUwX3NyZWdzKQorI2RlZmluZSBNUFUx X1NSICAoKFNUQVRFX0NQVSAoc2QsIDApKS0+cmVnLm1wdTFfc3JlZ3MpCisj ZGVmaW5lIEZQVV9TUiAgICgoU1RBVEVfQ1BVIChzZCwgMCkpLT5yZWcuZnB1 X3NyZWdzKQogCiAvKiBvbGQgKi8KICNkZWZpbmUgU3RhdGUgICAgKFNUQVRF X0NQVSAoc2ltdWxhdG9yLCAwKS0+cmVnKQogI2RlZmluZSBQQwkoU3RhdGUu cGMpCi0jZGVmaW5lIFNQCShTdGF0ZS5yZWdzWzNdKQorI2RlZmluZSBTUF9S RUdOTyAgICAgICAgMworI2RlZmluZSBTUCAgICAgIChTdGF0ZS5yZWdzW1NQ X1JFR05PXSkKICNkZWZpbmUgRVAJKFN0YXRlLnJlZ3NbMzBdKQogCiAjZGVm aW5lIEVJUEMgIChTdGF0ZS5zcmVnc1swXSkKQEAgLTEzNSwxMSArMTQzLDIw IEBAIG5pYSA9IFBDCiAjZGVmaW5lIEZFUFNXIChTdGF0ZS5zcmVnc1szXSkK ICNkZWZpbmUgRUNSICAgKFN0YXRlLnNyZWdzWzRdKQogI2RlZmluZSBQU1cg ICAoU3RhdGUuc3JlZ3NbNV0pCisjZGVmaW5lIFBTV19SRUdOTyAgIDUKKyNk ZWZpbmUgRUlJQyAgKFN0YXRlLnNyZWdzWzEzXSkKKyNkZWZpbmUgRkVJQyAg KFN0YXRlLnNyZWdzWzE0XSkKKyNkZWZpbmUgREJJQyAgKFNSWzE1XSkKICNk ZWZpbmUgQ1RQQyAgKFNSWzE2XSkKICNkZWZpbmUgQ1RQU1cgKFNSWzE3XSkK ICNkZWZpbmUgREJQQyAgKFN0YXRlLnNyZWdzWzE4XSkKICNkZWZpbmUgREJQ U1cgKFN0YXRlLnNyZWdzWzE5XSkKICNkZWZpbmUgQ1RCUCAgKFN0YXRlLnNy ZWdzWzIwXSkKKyNkZWZpbmUgRElSICAgKFNSWzIxXSkKKyNkZWZpbmUgRUlX UiAgKFNSWzI4XSkKKyNkZWZpbmUgRkVXUiAgKFNSWzI5XSkKKyNkZWZpbmUg REJXUiAgKFNSWzMwXSkKKyNkZWZpbmUgQlNFTCAgKFNSWzMxXSkKIAogI2Rl ZmluZSBQU1dfVVMgQklUMzIgKDgpCiAjZGVmaW5lIFBTV19OUCAweDgwCkBA IC0xNTEsNiArMTY4LDIxMCBAQCBuaWEgPSBQQwogI2RlZmluZSBQU1dfUyAw eDIKICNkZWZpbmUgUFNXX1ogMHgxCiAKKyNkZWZpbmUgUFNXX05QVgkoMTw8 MTgpCisjZGVmaW5lIFBTV19ETVAJKDE8PDE3KQorI2RlZmluZSBQU1dfSU1Q CSgxPDwxNikKKworI2RlZmluZSBFQ1JfRUlDQyAweDAwMDBmZmZmCisjZGVm aW5lIEVDUl9GRUNDIDB4ZmZmZjAwMDAKKworLyogRlBVICovCisKKyNkZWZp bmUgRlBTUiAgKEZQVV9TUls2XSkKKyNkZWZpbmUgRlBTUl9SRUdOTyA2Cisj ZGVmaW5lIEZQRVBDIChGUFVfU1JbN10pCisjZGVmaW5lIEZQU1QgIChGUFVf U1JbOF0pCisjZGVmaW5lIEZQU1RfUkVHTk8gOAorI2RlZmluZSBGUENDICAo RlBVX1NSWzldKQorI2RlZmluZSBGUENGRyAoRlBVX1NSWzEwXSkKKyNkZWZp bmUgRlBDRkdfUkVHTk8gMTAKKworI2RlZmluZSBGUFNSX0RFTSAgMHgwMDIw MDAwMAorI2RlZmluZSBGUFNSX1NFTSAgMHgwMDEwMDAwMAorI2RlZmluZSBG UFNSX1JNICAgMHgwMDBjMDAwMAorI2RlZmluZSBGUFNSX1JOICAgMHgwMDAw MDAwMAorI2RlZmluZSBGUFNSX0ZTICAgMHgwMDAyMDAwMAorI2RlZmluZSBG UFNSX1BSICAgMHgwMDAxMDAwMAorCisjZGVmaW5lIEZQU1JfWEMgICAweDAw MDBmYzAwCisjZGVmaW5lIEZQU1JfWENFICAweDAwMDA4MDAwCisjZGVmaW5l IEZQU1JfWENWICAweDAwMDA0MDAwCisjZGVmaW5lIEZQU1JfWENaICAweDAw MDAyMDAwCisjZGVmaW5lIEZQU1JfWENPICAweDAwMDAxMDAwCisjZGVmaW5l IEZQU1JfWENVICAweDAwMDAwODAwCisjZGVmaW5lIEZQU1JfWENJICAweDAw MDAwNDAwCisKKyNkZWZpbmUgRlBTUl9YRSAgIDB4MDAwMDAzZTAKKyNkZWZp bmUgRlBTUl9YRVYgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRlBTUl9YRVogIDB4 MDAwMDAxMDAKKyNkZWZpbmUgRlBTUl9YRU8gIDB4MDAwMDAwODAKKyNkZWZp bmUgRlBTUl9YRVUgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRlBTUl9YRUkgIDB4 MDAwMDAwMjAKKworI2RlZmluZSBGUFNSX1hQICAgMHgwMDAwMDAxZgorI2Rl ZmluZSBGUFNSX1hQViAgMHgwMDAwMDAxMAorI2RlZmluZSBGUFNSX1hQWiAg MHgwMDAwMDAwOAorI2RlZmluZSBGUFNSX1hQTyAgMHgwMDAwMDAwNAorI2Rl ZmluZSBGUFNSX1hQVSAgMHgwMDAwMDAwMgorI2RlZmluZSBGUFNSX1hQSSAg MHgwMDAwMDAwMQorCisjZGVmaW5lIEZQU1RfUFIgICAweDAwMDA4MDAwIAor I2RlZmluZSBGUFNUX1hDRSAgMHgwMDAwMjAwMCAKKyNkZWZpbmUgRlBTVF9Y Q1YgIDB4MDAwMDEwMDAgCisjZGVmaW5lIEZQU1RfWENaICAweDAwMDAwODAw IAorI2RlZmluZSBGUFNUX1hDTyAgMHgwMDAwMDQwMCAKKyNkZWZpbmUgRlBT VF9YQ1UgIDB4MDAwMDAyMDAgCisjZGVmaW5lIEZQU1RfWENJICAweDAwMDAw MTAwIAorCisjZGVmaW5lIEZQU1RfWFBWICAweDAwMDAwMDEwIAorI2RlZmlu ZSBGUFNUX1hQWiAgMHgwMDAwMDAwOCAKKyNkZWZpbmUgRlBTVF9YUE8gIDB4 MDAwMDAwMDQgCisjZGVmaW5lIEZQU1RfWFBVICAweDAwMDAwMDAyIAorI2Rl ZmluZSBGUFNUX1hQSSAgMHgwMDAwMDAwMSAKKworI2RlZmluZSBGUENGR19S TSAgIDB4MDAwMDAxODAgCisjZGVmaW5lIEZQQ0ZHX1hFViAgMHgwMDAwMDAx MCAKKyNkZWZpbmUgRlBDRkdfWEVaICAweDAwMDAwMDA4IAorI2RlZmluZSBG UENGR19YRU8gIDB4MDAwMDAwMDQgCisjZGVmaW5lIEZQQ0ZHX1hFVSAgMHgw MDAwMDAwMiAKKyNkZWZpbmUgRlBDRkdfWEVJICAweDAwMDAwMDAxIAorCisj ZGVmaW5lIEdFVF9GUENDKClcCisgKChGUFNSID4+IDI0KSAmMHhmKQorCisj ZGVmaW5lIENMRUFSX0ZQQ0MoYmJiKVwKKyAgKEZQU1IgJj0gfigxIDw8IChi YmIrMjQpKSkKKworI2RlZmluZSBTRVRfRlBDQyhiYmIpXAorIChGUFNSIHw9 IDEgPDwgKGJiYisyNCkpCisKKyNkZWZpbmUgVEVTVF9GUENDKGJiYilcCisg ICgoRlBTUiAmICgxIDw8IChiYmIrMjQpKSkgIT0gMCkKKworI2RlZmluZSBG UFNSX0dFVF9ST1VORCgpCQkJCQlcCisgICgoKEZQU1IgJiBGUFNSX1JNKSA9 PSBGUFNSX1JOKSA/IHNpbV9mcHVfcm91bmRfbmVhcgkJXAorICAgOiAoKEZQ U1IgJiBGUFNSX1JNKSA9PSAweDAwMDQwMDAwKSA/IHNpbV9mcHVfcm91bmRf dXAJXAorICAgOiAoKEZQU1IgJiBGUFNSX1JNKSA9PSAweDAwMDgwMDAwKSA/ IHNpbV9mcHVfcm91bmRfZG93bglcCisgICA6IHNpbV9mcHVfcm91bmRfemVy bykKKworCitlbnVtIEZQVV9DT01QQVJFIHsKKyAgRlBVX0NNUF9GID0gMCwK KyAgRlBVX0NNUF9VTiwKKyAgRlBVX0NNUF9FUSwKKyAgRlBVX0NNUF9VRVEs CisgIEZQVV9DTVBfT0xULAorICBGUFVfQ01QX1VMVCwKKyAgRlBVX0NNUF9P TEUsCisgIEZQVV9DTVBfVUxFLAorICBGUFVfQ01QX1NGLAorICBGUFVfQ01Q X05HTEUsCisgIEZQVV9DTVBfU0VRLAorICBGUFVfQ01QX05HTCwKKyAgRlBV X0NNUF9MVCwKKyAgRlBVX0NNUF9OR0UsCisgIEZQVV9DTVBfTEUsCisgIEZQ VV9DTVBfTkdUCit9OworCisKKy8qIE1QVSAqLworI2RlZmluZSBNUE0JKE1Q VTFfU1JbMF0pCisjZGVmaW5lIE1QQwkoTVBVMV9TUlsxXSkKKyNkZWZpbmUg TVBDX1JFR05PIDEKKyNkZWZpbmUgVElECShNUFUxX1NSWzJdKQorI2RlZmlu ZSBQUEEJKE1QVTFfU1JbM10pCisjZGVmaW5lIFBQTQkoTVBVMV9TUls0XSkK KyNkZWZpbmUgUFBDCShNUFUxX1NSWzVdKQorI2RlZmluZSBEQ0MJKE1QVTFf U1JbNl0pCisjZGVmaW5lIERDVjAJKE1QVTFfU1JbN10pCisjZGVmaW5lIERD VjEJKE1QVTFfU1JbOF0pCisjZGVmaW5lIFNQQUwJKE1QVTFfU1JbMTBdKQor I2RlZmluZSBTUEFVCShNUFUxX1NSWzExXSkKKyNkZWZpbmUgSVBBMEwJKE1Q VTFfU1JbMTJdKQorI2RlZmluZSBJUEEwVQkoTVBVMV9TUlsxM10pCisjZGVm aW5lIElQQTFMCShNUFUxX1NSWzE0XSkKKyNkZWZpbmUgSVBBMVUJKE1QVTFf U1JbMTVdKQorI2RlZmluZSBJUEEyTAkoTVBVMV9TUlsxNl0pCisjZGVmaW5l IElQQTJVCShNUFUxX1NSWzE3XSkKKyNkZWZpbmUgSVBBM0wJKE1QVTFfU1Jb MThdKQorI2RlZmluZSBJUEEzVQkoTVBVMV9TUlsxOV0pCisjZGVmaW5lIERQ QTBMCShNUFUxX1NSWzIwXSkKKyNkZWZpbmUgRFBBMFUJKE1QVTFfU1JbMjFd KQorI2RlZmluZSBEUEExTAkoTVBVMV9TUlsyMl0pCisjZGVmaW5lIERQQTFV CShNUFUxX1NSWzIzXSkKKyNkZWZpbmUgRFBBMkwJKE1QVTFfU1JbMjRdKQor I2RlZmluZSBEUEEyVQkoTVBVMV9TUlsyNV0pCisjZGVmaW5lIERQQTNMCShN UFUxX1NSWzI2XSkKKyNkZWZpbmUgRFBBM1UJKE1QVTFfU1JbMjddKQorCisj ZGVmaW5lIFBQQ19QUEUgMHgxCisjZGVmaW5lIFNQQUxfU1BFIDB4MQorI2Rl ZmluZSBTUEFMX1NQUyAweDEwCisKKyNkZWZpbmUgVklQCShNUFUwX1NSWzBd KQorI2RlZmluZSBWTUVDUgkoTVBVMF9TUls0XSkKKyNkZWZpbmUgVk1USUQJ KE1QVTBfU1JbNV0pCisjZGVmaW5lIFZNQURSCShNUFUwX1NSWzZdKQorI2Rl ZmluZSBWUEVDUgkoTVBVMF9TUls4XSkKKyNkZWZpbmUgVlBUSUQJKE1QVTBf U1JbOV0pCisjZGVmaW5lIFZQQURSCShNUFUwX1NSWzEwXSkKKyNkZWZpbmUg VkRFQ1IJKE1QVTBfU1JbMTJdKQorI2RlZmluZSBWRFRJRAkoTVBVMF9TUlsx M10pCisKKyNkZWZpbmUgTVBNX0FVRQkweDIKKyNkZWZpbmUgTVBNX01QRQkw eDEKKworI2RlZmluZSBWTUVDUl9WTVggICAweDIKKyNkZWZpbmUgVk1FQ1Jf Vk1SICAgMHg0CisjZGVmaW5lIFZNRUNSX1ZNVyAgIDB4OAorI2RlZmluZSBW TUVDUl9WTVMgICAweDEwCisjZGVmaW5lIFZNRUNSX1ZNUk1XIDB4MjAKKyNk ZWZpbmUgVk1FQ1JfVk1NUyAgMHg0MAorCisjZGVmaW5lIElQQTJBRERSKElQ QSkJKChJUEEpICYgMHgxZmZmZmY4MCkKKyNkZWZpbmUgSVBBX0lQRQkweDEg CisjZGVmaW5lIElQQV9JUFgJMHgyIAorI2RlZmluZSBJUEFfSVBSCTB4NCAK KyNkZWZpbmUgSVBFMAkoSVBBMEwgJiBJUEFfSVBFKQorI2RlZmluZSBJUEUx CShJUEExTCAmIElQQV9JUEUpCisjZGVmaW5lIElQRTIJKElQQTJMICYgSVBB X0lQRSkKKyNkZWZpbmUgSVBFMwkoSVBBM0wgJiBJUEFfSVBFKQorI2RlZmlu ZSBJUFgwCShJUEEwTCAmIElQQV9JUFgpCisjZGVmaW5lIElQWDEJKElQQTFM ICYgSVBBX0lQWCkKKyNkZWZpbmUgSVBYMgkoSVBBMkwgJiBJUEFfSVBYKQor I2RlZmluZSBJUFgzCShJUEEzTCAmIElQQV9JUFgpCisjZGVmaW5lIElQUjAJ KElQQTBMICYgSVBBX0lQUikKKyNkZWZpbmUgSVBSMQkoSVBBMUwgJiBJUEFf SVBSKQorI2RlZmluZSBJUFIyCShJUEEyTCAmIElQQV9JUFIpCisjZGVmaW5l IElQUjMJKElQQTNMICYgSVBBX0lQUikKKworI2RlZmluZSBEUEEyQUREUihE UEEpCSgoRFBBKSAmIDB4MWZmZmZmODApCisjZGVmaW5lIERQQV9EUEUgMHgx CQorI2RlZmluZSBEUEFfRFBSIDB4NAkKKyNkZWZpbmUgRFBBX0RQVyAweDgJ CisjZGVmaW5lIERQRTAJKERQQTBMICYgRFBBX0RQRSkKKyNkZWZpbmUgRFBF MQkoRFBBMUwgJiBEUEFfRFBFKQorI2RlZmluZSBEUEUyCShEUEEyTCAmIERQ QV9EUEUpCisjZGVmaW5lIERQRTMJKERQQTNMICYgRFBBX0RQRSkKKyNkZWZp bmUgRFBSMAkoRFBBMEwgJiBEUEFfRFBSKQorI2RlZmluZSBEUFIxCShEUEEx TCAmIERQQV9EUFIpCisjZGVmaW5lIERQUjIJKERQQTJMICYgRFBBX0RQUikK KyNkZWZpbmUgRFBSMwkoRFBBM0wgJiBEUEFfRFBSKQorI2RlZmluZSBEUFcw CShEUEEwTCAmIERQQV9EUFcpCisjZGVmaW5lIERQVzEJKERQQTFMICYgRFBB X0RQVykKKyNkZWZpbmUgRFBXMgkoRFBBMkwgJiBEUEFfRFBXKQorI2RlZmlu ZSBEUFczCShEUEEzTCAmIERQQV9EUFcpCisKKyNkZWZpbmUgRENDX0RDRTAg MHgxCisjZGVmaW5lIERDQ19EQ0UxIDB4MTAwMDAKKworI2RlZmluZSBQUEEy QUREUihQUEEpCSgoUFBBKSAmIDB4MWZmZmZmODApIAorI2RlZmluZSBQUENf UFBDIDB4ZmZmZmZmZmUKKyNkZWZpbmUgUFBDX1BQRSAweDEKKyNkZWZpbmUg UFBDX1BQTSAweDAwMDBmZmY4CisKKwogI2RlZmluZSBTRVhUMyh4KQkoKCgo eCkmMHg3KV4ofjB4MykpKzB4NCkJCiAKIC8qIHNpZ24tZXh0ZW5kIGEgNC1i aXQgbnVtYmVyICovCkBAIC0zNDQsNiArNTY1LDc5IEBAIGRvIHsgXAogICB9 IFwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgVFJBQ0VfRlBfSU5QVVRfRlBV MShWMCkJXAorZG8geyBcCisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAor ICAgIHsgXAorICAgICAgdW5zaWduZWQ2NCBmMDsgXAorICAgICAgc2ltX2Zw dV90bzY0ICgmZjAsIChWMCkpOyBcCisgICAgICB0cmFjZV9pbnB1dF9mcDEg KFNELCBDUFUsIFRSQUNFX0ZQVV9JRFgsIGYwKTsgXAorICAgIH0gXAorfSB3 aGlsZSAoMCkKKworI2RlZmluZSBUUkFDRV9GUF9JTlBVVF9GUFUyKFYwLCBW MSkgXAorZG8geyBcCisgIGlmIChUUkFDRV9GUFVfUCAoQ1BVKSkgXAorICAg IHsgXAorICAgICAgdW5zaWduZWQ2NCBmMCwgZjE7IFwKKyAgICAgIHNpbV9m cHVfdG82NCAoJmYwLCAoVjApKTsgXAorICAgICAgc2ltX2ZwdV90bzY0ICgm ZjEsIChWMSkpOyBcCisgICAgICB0cmFjZV9pbnB1dF9mcDIgKFNELCBDUFUs IFRSQUNFX0ZQVV9JRFgsIGYwLCBmMSk7CVwKKyAgICB9IFwKK30gd2hpbGUg KDApCisKKyNkZWZpbmUgVFJBQ0VfRlBfSU5QVVRfRlBVMyhWMCwgVjEsIFYy KSBcCitkbyB7IFwKKyAgaWYgKFRSQUNFX0ZQVV9QIChDUFUpKSBcCisgICAg eyBcCisgICAgICB1bnNpZ25lZDY0IGYwLCBmMSwgZjI7IFwKKyAgICAgIHNp bV9mcHVfdG82NCAoJmYwLCAoVjApKTsgXAorICAgICAgc2ltX2ZwdV90bzY0 ICgmZjEsIChWMSkpOyBcCisgICAgICBzaW1fZnB1X3RvNjQgKCZmMiwgKFYy KSk7IFwKKyAgICAgIHRyYWNlX2lucHV0X2ZwMyAoU0QsIENQVSwgVFJBQ0Vf RlBVX0lEWCwgZjAsIGYxLCBmMik7IFwKKyAgICB9IFwKK30gd2hpbGUgKDAp CisKKyNkZWZpbmUgVFJBQ0VfRlBfSU5QVVRfQk9PTDFfRlBVMihWMCwgVjEs IFYyKSBcCitkbyB7IFwKKyAgaWYgKFRSQUNFX0ZQVV9QIChDUFUpKSBcCisg ICAgeyBcCisgICAgICBpbnQgZDAgPSAoVjApOyBcCisgICAgICB1bnNpZ25l ZDY0IGYxLCBmMjsgXAorICAgICAgVFJBQ0VfREFUQSAqZGF0YSA9IENQVV9U UkFDRV9EQVRBIChDUFUpOyBcCisgICAgICBUUkFDRV9JRFggKGRhdGEpID0g VFJBQ0VfRlBVX0lEWDsJXAorICAgICAgc2ltX2ZwdV90bzY0ICgmZjEsIChW MSkpOyBcCisgICAgICBzaW1fZnB1X3RvNjQgKCZmMiwgKFYyKSk7IFwKKyAg ICAgIHNhdmVfZGF0YSAoU0QsIGRhdGEsIHRyYWNlX2ZtdF9ib29sLCBzaXpl b2YgKGQwKSwgJmQwKTsgXAorICAgICAgc2F2ZV9kYXRhIChTRCwgZGF0YSwg dHJhY2VfZm10X2ZwLCBzaXplb2YgKGZwX3dvcmQpLCAmZjEpOyBcCisgICAg ICBzYXZlX2RhdGEgKFNELCBkYXRhLCB0cmFjZV9mbXRfZnAsIHNpemVvZiAo ZnBfd29yZCksICZmMik7IFwKKyAgICB9IFwKK30gd2hpbGUgKDApCisKKyNk ZWZpbmUgVFJBQ0VfRlBfSU5QVVRfV09SRDIoVjAsIFYxKSBcCitkbyB7IFwK KyAgaWYgKFRSQUNFX0ZQVV9QIChDUFUpKSBcCisgICAgdHJhY2VfaW5wdXRf d29yZDIgKFNELCBDUFUsIFRSQUNFX0ZQVV9JRFgsIChWMCksIChWMSkpOyBc Cit9IHdoaWxlICgwKQorCisjZGVmaW5lIFRSQUNFX0ZQX1JFU1VMVF9GUFUx KFIwKSBcCitkbyB7IFwKKyAgaWYgKFRSQUNFX0ZQVV9QIChDUFUpKSBcCisg ICAgeyBcCisgICAgICB1bnNpZ25lZDY0IGYwOyBcCisgICAgICBzaW1fZnB1 X3RvNjQgKCZmMCwgKFIwKSk7CVwKKyAgICAgIHRyYWNlX3Jlc3VsdF9mcDEg KFNELCBDUFUsIFRSQUNFX0ZQVV9JRFgsIGYwKTsgXAorICAgIH0gXAorfSB3 aGlsZSAoMCkKKworI2RlZmluZSBUUkFDRV9GUF9SRVNVTFRfV09SRDEoUjAp IFRSQUNFX0ZQX1JFU1VMVF9XT1JEKFIwKQorCisjZGVmaW5lIFRSQUNFX0ZQ X1JFU1VMVF9XT1JEMihSMCwgUjEpIFwKK2RvIHsgXAorICBpZiAoVFJBQ0Vf RlBVX1AgKENQVSkpIFwKKyAgICB0cmFjZV9yZXN1bHRfd29yZDIgKFNELCBD UFUsIFRSQUNFX0ZQVV9JRFgsIChSMCksIChSMSkpOyBcCit9IHdoaWxlICgw KQorCiAjZWxzZQogI2RlZmluZSB0cmFjZV9pbnB1dChOQU1FLCBJTjEsIElO MikKICNkZWZpbmUgdHJhY2Vfb3V0cHV0KFJFU1VMVCkKZGlmZiAtdXBOciBn ZGItNy4yLjUwLW9yaWdpbmFsL3NpbS92ODUwL3NpbW9wcy5jIGdkYi03LjIu NTAtbW9kaWZpZWQvc2ltL3Y4NTAvc2ltb3BzLmMKLS0tIGdkYi03LjIuNTAt b3JpZ2luYWwvc2ltL3Y4NTAvc2ltb3BzLmMJMjAwOC0wMi0wNiAxMDoxMToy Ni4wMDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2lt L3Y4NTAvc2ltb3BzLmMJMjAxMS0wMS0xMSAxODoyNDo1OC4wMDAwMDAwMDAg KzA1MzAKQEAgLTMyMCw3ICszMjAsNyBAQCBjb25kaXRpb25fbWV0ICh1bnNp Z25lZCBjb2RlKQogICByZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVk IGxvbmcKK3Vuc2lnbmVkIGxvbmcKIEFkZDMyICh1bnNpZ25lZCBsb25nIGEx LCB1bnNpZ25lZCBsb25nIGEyLCBpbnQgKiBjYXJyeSkKIHsKICAgdW5zaWdu ZWQgbG9uZyByZXN1bHQgPSAoYTEgKyBhMik7CkBAIC0yNzYxLDMgKzI3NjEs NzE3IEBAIE9QXzMwN0UwICh2b2lkKQogICByZXR1cm4gNDsKIH0KIAorLyog Vjg1MEUyUiBGUFUgZnVuY3Rpb25zICovCisvKgorICBzaW1fZnB1X3N0YXR1 c19pbnZhbGlkX3NuYW4gPSAxLAkJCQktVi0tLSAoc2ltIHNwZWMuKQorICBz aW1fZnB1X3N0YXR1c19pbnZhbGlkX3FuYW4gPSAyLAkJCQktLS0tLSAoc2lt IHNwZWMuKQorICBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX2lzaSA9IDQsIChp bmYgLSBpbmYpCQkJLVYtLS0KKyAgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9p ZGkgPSA4LCAoaW5mIC8gaW5mKQkJCS1WLS0tCisgIHNpbV9mcHVfc3RhdHVz X2ludmFsaWRfemR6ID0gMTYsICgwIC8gMCkJCQktVi0tLQorICBzaW1fZnB1 X3N0YXR1c19pbnZhbGlkX2lteiA9IDMyLCAoaW5mICogMCkJCQktVi0tLQor ICBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX2N2aSA9IDY0LCBjb252ZXJ0IHRv IGludGVnZXIJCS1WLS0tCisgIHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfZGl2 MCA9IDEyOCwgKFggLyAwKQkJCS0tWi0tCisgIHNpbV9mcHVfc3RhdHVzX2lu dmFsaWRfY21wID0gMjU2LCBjb21wYXJlCQkJLS0tLS0gKHNpbSBzcGVjLikK KyAgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9zcXJ0ID0gNTEyLAkJCQktVi0t LQorICBzaW1fZnB1X3N0YXR1c19yb3VuZGVkID0gMTAyNCwJCQkJSS0tLS0K KyAgc2ltX2ZwdV9zdGF0dXNfaW5leGFjdCA9IDIwNDgsCQkJCUktLS0tIChz aW0gc3BlYy4pCisgIHNpbV9mcHVfc3RhdHVzX292ZXJmbG93ID0gNDA5NiwJ CQkJSS0tTy0KKyAgc2ltX2ZwdV9zdGF0dXNfdW5kZXJmbG93ID0gODE5MiwJ CQkJSS0tLVUKKyAgc2ltX2ZwdV9zdGF0dXNfZGVub3JtID0gMTYzODQsCQkJ CS0tLS1VIChzaW0gc3BlYy4pCisqLyAgCisgICAgCit2b2lkIHVwZGF0ZV9m cHNyIChTSU1fREVTQyBzZCwgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzLCB1bnNp Z25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGRvdWJsZV9vcF9wKQorewor ICB1bnNpZ25lZCBpbnQgZnBzciA9IEZQU1IgJiBtYXNrOworCisgIHVuc2ln bmVkIGludCBmbGFncyA9IDA7CisKKyAgaWYgKGZwc3IgJiBGUFNSX1hFSQor ICAgICAgJiYgKChzdGF0dXMgJiAoc2ltX2ZwdV9zdGF0dXNfcm91bmRlZAor CQkgICAgIHwgc2ltX2ZwdV9zdGF0dXNfb3ZlcmZsb3cKKwkJICAgICB8IHNp bV9mcHVfc3RhdHVzX2luZXhhY3QpKQorCSAgfHwgKHN0YXR1cyAmIHNpbV9m cHVfc3RhdHVzX3VuZGVyZmxvdworCSAgICAgICYmIChmcHNyICYgKEZQU1Jf WEVVIHwgRlBTUl9YRUkpKSA9PSAwCisJICAgICAgJiYgZnBzciAmIEZQU1Jf RlMpKSkKKyAgICB7CisgICAgICBmbGFncyB8PSBGUFNSX1hDSSB8IEZQU1Jf WFBJOworICAgIH0KKworICBpZiAoZnBzciAmIEZQU1JfWEVWCisgICAgICAm JiAoc3RhdHVzICYgKHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfaXNpCisJCSAg ICB8IHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfaW16CisJCSAgICB8IHNpbV9m cHVfc3RhdHVzX2ludmFsaWRfemR6CisJCSAgICB8IHNpbV9mcHVfc3RhdHVz X2ludmFsaWRfaWRpCisJCSAgICB8IHNpbV9mcHVfc3RhdHVzX2ludmFsaWRf Y3ZpCisJCSAgICB8IHNpbV9mcHVfc3RhdHVzX2ludmFsaWRfc3FydAorCQkg ICAgfCBzaW1fZnB1X3N0YXR1c19pbnZhbGlkX3NuYW4pKSkKKyAgICB7Cisg ICAgICBmbGFncyB8PSBGUFNSX1hDViB8IEZQU1JfWFBWOworICAgIH0KKwor ICBpZiAoZnBzciAmIEZQU1JfWEVaCisgICAgICAmJiAoc3RhdHVzICYgc2lt X2ZwdV9zdGF0dXNfaW52YWxpZF9kaXYwKSkKKyAgICB7CisgICAgICBmbGFn cyB8PSBGUFNSX1hDViB8IEZQU1JfWFBWOworICAgIH0KKworICBpZiAoZnBz ciAmIEZQU1JfWEVPCisgICAgICAmJiAoc3RhdHVzICYgc2ltX2ZwdV9zdGF0 dXNfb3ZlcmZsb3cpKQorICAgIHsKKyAgICAgIGZsYWdzIHw9IEZQU1JfWENP IHwgRlBTUl9YUE87CisgICAgfQorICAgICAgCisgIGlmICgoKGZwc3IgJiBG UFNSX1hFVSkgfHwgKGZwc3IgJiBGUFNSX0ZTKSA9PSAwKQorICAgICAgJiYg KHN0YXR1cyAmIChzaW1fZnB1X3N0YXR1c191bmRlcmZsb3cKKwkJICAgIHwg c2ltX2ZwdV9zdGF0dXNfZGVub3JtKSkpCisgICAgeworICAgICAgZmxhZ3Mg fD0gRlBTUl9YQ1UgfCBGUFNSX1hQVTsKKyAgICB9CisKKyAgaWYgKGZsYWdz KQorICAgIHsKKyAgICAgIEZQU1IgJj0gfkZQU1JfWEM7CisgICAgICBGUFNS IHw9IGZsYWdzOworCisgICAgICBTaWduYWxFeGNlcHRpb25GUEUoc2QsIGRv dWJsZV9vcF9wKTsKKyAgICB9Cit9CisKKy8qCisgIGV4Y2VwdGlvbgorKi8K Kwordm9pZCAgU2lnbmFsRXhjZXB0aW9uKFNJTV9ERVNDIHNkKQoreworICBp ZiAoTVBNICYgTVBNX0FVRSkKKyAgICB7CisgICAgICBQU1cgPSBQU1cgJiB+ KFBTV19OUFYgfCBQU1dfRE1QIHwgUFNXX0lNUCk7CisgICAgfQorfQorCit2 b2lkIFNpZ25hbEV4Y2VwdGlvbkZQRShTSU1fREVTQyBzZCwgdW5zaWduZWQg aW50IGRvdWJsZV9vcF9wKQorewkJCQkJCQkJCisgIGlmICgoKFBTVyAmIChQ U1dfTlB8UFNXX0lEKSkgPT0gMCkKKyAgICAgIHx8ICEoRlBTUiAmIChkb3Vi bGVfb3BfcCA/IEZQU1JfREVNIDogRlBTUl9TRU0pKSkJCQorICAgIHsJCQkJ CQkJCQorICAgICAgRUlQQyA9IFBDOwkJCQkJCQkKKyAgICAgIEVJUFNXID0g UFNXOwkJCQkJCQorICAgICAgRUlJQyA9IChGUFNSICYgKGRvdWJsZV9vcF9w ID8gRlBTUl9ERU0gOiBGUFNSX1NFTSkpIAkKKwk/IDB4NzEgOiAweDcyOwkJ CQkJCQorICAgICAgUFNXIHw9IChQU1dfRVAgfCBQU1dfSUQpOworICAgICAg UEMgPSAweDcwOworCisgICAgICBTaWduYWxFeGNlcHRpb24oc2QpOworICAg IH0JCQkJCQkJCQorfQorCisKK3ZvaWQgY2hlY2tfaW52YWxpZF9zbmFuKFNJ TV9ERVNDIHNkLCBzaW1fZnB1X3N0YXR1cyBzdGF0dXMsIHVuc2lnbmVkIGlu dCBkb3VibGVfb3BfcCkKK3sKKyAgaWYgKChGUFNSICYgRlBTUl9YRUkpCisg ICAgICAmJiAoc3RhdHVzICYgc2ltX2ZwdV9zdGF0dXNfaW52YWxpZF9zbmFu KSkKKyAgICB7CisgICAgICBGUFNSICY9IH5GUFNSX1hDOworICAgICAgRlBT UiB8PSBGUFNSX1hDVjsKKyAgICAgIEZQU1IgfD0gRlBTUl9YUFY7CisgICAg ICBTaWduYWxFeGNlcHRpb25GUEUoc2QsIGRvdWJsZV9vcF9wKTsKKyAgICB9 Cit9CisKK2ludCB2ODUwX2Zsb2F0X2NvbXBhcmUoU0lNX0RFU0Mgc2QsIGlu dCBjbXAsIHNpbV9mcHUgd29wMSwgc2ltX2ZwdSB3b3AyLCBpbnQgZG91Ymxl X29wX3ApCit7CisgIGludCByZXN1bHQgPSAtMTsKKyAgCisgIGlmIChzaW1f ZnB1X2lzX25hbigmd29wMSkgfHwgc2ltX2ZwdV9pc19uYW4oJndvcDIpKQor ICAgIHsKKyAgICAgIGlmIChjbXAgJiAweDgpCisJeworCSAgaWYgKEZQU1Ig JiBGUFNSX1hFVikKKwkgICAgeworCSAgICAgIEZQU1IgfD0gRlBTUl9YQ1Yg fCBGUFNSX1hQVjsKKwkgICAgICBTaWduYWxFeGNlcHRpb25GUEUoc2QsIGRv dWJsZV9vcF9wKTsKKwkgICAgfQorCX0KKworICAgICAgc3dpdGNoIChjbXAp CisJeworCWNhc2UgRlBVX0NNUF9GOgorCSAgcmVzdWx0ID0gMDsKKwkgIGJy ZWFrOworCWNhc2UgRlBVX0NNUF9VTjoKKwkgIHJlc3VsdCA9IDE7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfRVE6CisJICByZXN1bHQgPSAwOworCSAg YnJlYWs7CisJY2FzZSBGUFVfQ01QX1VFUToKKwkgIHJlc3VsdCA9IDE7CisJ ICBicmVhazsKKwljYXNlIEZQVV9DTVBfT0xUOgorCSAgcmVzdWx0ID0gMDsK KwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9VTFQ6CisJICByZXN1bHQgPSAx OworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX09MRToKKwkgIHJlc3VsdCA9 IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfVUxFOgorCSAgcmVzdWx0 ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9TRjoKKwkgIHJlc3Vs dCA9IDA7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfTkdMRToKKwkgIHJl c3VsdCA9IDE7CisJICBicmVhazsKKwljYXNlIEZQVV9DTVBfU0VROgorCSAg cmVzdWx0ID0gMDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR0w6CisJ ICByZXN1bHQgPSAxOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX0xUOgor CSAgcmVzdWx0ID0gMDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR0U6 CisJICByZXN1bHQgPSAxOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX0xF OgorCSAgcmVzdWx0ID0gMDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9O R1Q6CisJICByZXN1bHQgPSAxOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkg IGFib3J0KCk7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoc2ltX2ZwdV9pc19p bmZpbml0eSgmd29wMSkgJiYgc2ltX2ZwdV9pc19pbmZpbml0eSgmd29wMikK KwkgICAmJiBzaW1fZnB1X3NpZ24oJndvcDEpID09IHNpbV9mcHVfc2lnbigm d29wMikpCisgICAgeworICAgICAgc3dpdGNoIChjbXApCisJeworCWNhc2Ug RlBVX0NNUF9GOgorCSAgcmVzdWx0ID0gMDsKKwkgIGJyZWFrOworCWNhc2Ug RlBVX0NNUF9VTjoKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNl IEZQVV9DTVBfRVE6CisJICByZXN1bHQgPSAxOworCSAgYnJlYWs7CisJY2Fz ZSBGUFVfQ01QX1VFUToKKwkgIHJlc3VsdCA9IDE7CisJICBicmVhazsKKwlj YXNlIEZQVV9DTVBfT0xUOgorCSAgcmVzdWx0ID0gMDsKKwkgIGJyZWFrOwor CWNhc2UgRlBVX0NNUF9VTFQ6CisJICByZXN1bHQgPSAwOworCSAgYnJlYWs7 CisJY2FzZSBGUFVfQ01QX09MRToKKwkgIHJlc3VsdCA9IDE7CisJICBicmVh azsKKwljYXNlIEZQVV9DTVBfVUxFOgorCSAgcmVzdWx0ID0gMTsKKwkgIGJy ZWFrOworCWNhc2UgRlBVX0NNUF9TRjoKKwkgIHJlc3VsdCA9IDA7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfTkdMRToKKwkgIHJlc3VsdCA9IDA7CisJ ICBicmVhazsKKwljYXNlIEZQVV9DTVBfU0VROgorCSAgcmVzdWx0ID0gMTsK KwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR0w6CisJICByZXN1bHQgPSAx OworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX0xUOgorCSAgcmVzdWx0ID0g MDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR0U6CisJICByZXN1bHQg PSAwOworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX0xFOgorCSAgcmVzdWx0 ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9OR1Q6CisJICByZXN1 bHQgPSAxOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGFib3J0KCk7CisJ fQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBndCA9IDAsbHQg PSAwLGVxID0gMCwgc3RhdHVzOworCisgICAgICBzdGF0dXMgPSBzaW1fZnB1 X2NtcCggJndvcDEsICZ3b3AyICk7CisKKyAgICAgIHN3aXRjaCAoc3RhdHVz KSB7CisgICAgICBjYXNlIFNJTV9GUFVfSVNfU05BTjoKKyAgICAgIGNhc2Ug U0lNX0ZQVV9JU19RTkFOOgorCWFib3J0KCk7CisJYnJlYWs7CisKKyAgICAg IGNhc2UgU0lNX0ZQVV9JU19OSU5GOgorCWx0ID0gMTsKKwlicmVhazsKKyAg ICAgIGNhc2UgU0lNX0ZQVV9JU19QSU5GOgorCWd0ID0gMTsKKwlicmVhazsK KyAgICAgIGNhc2UgU0lNX0ZQVV9JU19OTlVNQkVSOgorCWx0ID0gMTsKKwli cmVhazsKKyAgICAgIGNhc2UgU0lNX0ZQVV9JU19QTlVNQkVSOgorCWd0ID0g MTsKKwlicmVhazsKKyAgICAgIGNhc2UgU0lNX0ZQVV9JU19OREVOT1JNOgor CWx0ID0gMTsKKwlicmVhazsKKyAgICAgIGNhc2UgU0lNX0ZQVV9JU19QREVO T1JNOgorCWd0ID0gMTsKKwlicmVhazsKKyAgICAgIGNhc2UgU0lNX0ZQVV9J U19OWkVSTzoKKyAgICAgIGNhc2UgU0lNX0ZQVV9JU19QWkVSTzoKKwllcSA9 IDE7CisJYnJlYWs7CisgICAgICB9CisgIAorICAgICAgc3dpdGNoIChjbXAp CisJeworCWNhc2UgRlBVX0NNUF9GOgorCSAgcmVzdWx0ID0gMDsKKwkgIGJy ZWFrOworCWNhc2UgRlBVX0NNUF9VTjoKKwkgIHJlc3VsdCA9IDA7CisJICBi cmVhazsKKwljYXNlIEZQVV9DTVBfRVE6CisJICByZXN1bHQgPSBlcTsKKwkg IGJyZWFrOworCWNhc2UgRlBVX0NNUF9VRVE6CisJICByZXN1bHQgPSBlcTsK KwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9PTFQ6CisJICByZXN1bHQgPSBs dDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9VTFQ6CisJICByZXN1bHQg PSBsdDsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9PTEU6CisJICByZXN1 bHQgPSBsdCB8fCBlcTsKKwkgIGJyZWFrOworCWNhc2UgRlBVX0NNUF9VTEU6 CisJICByZXN1bHQgPSBsdCB8fCBlcTsKKwkgIGJyZWFrOworCWNhc2UgRlBV X0NNUF9TRjoKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNlIEZQ VV9DTVBfTkdMRToKKwkgIHJlc3VsdCA9IDA7CisJICBicmVhazsKKwljYXNl IEZQVV9DTVBfU0VROgorCSAgcmVzdWx0ID0gZXE7CisJICBicmVhazsKKwlj YXNlIEZQVV9DTVBfTkdMOgorCSAgcmVzdWx0ID0gZXE7CisJICBicmVhazsK KwljYXNlIEZQVV9DTVBfTFQ6CisJICByZXN1bHQgPSBsdDsKKwkgIGJyZWFr OworCWNhc2UgRlBVX0NNUF9OR0U6CisJICByZXN1bHQgPSBsdDsKKwkgIGJy ZWFrOworCWNhc2UgRlBVX0NNUF9MRToKKwkgIHJlc3VsdCA9IGx0IHx8IGVx OworCSAgYnJlYWs7CisJY2FzZSBGUFVfQ01QX05HVDoKKwkgIHJlc3VsdCA9 IGx0IHx8IGVxOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICBBU1NFUlQo cmVzdWx0ICE9IC0xKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB2 ODUwX2RpdihTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5zaWdu ZWQgaW50IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwLCB1bnNpZ25lZCBpbnQg Km9wM3ApCit7CisgIHNpZ25lZCBsb25nIGludCBxdW90aWVudDsKKyAgc2ln bmVkIGxvbmcgaW50IHJlbWFpbmRlcjsKKyAgc2lnbmVkIGxvbmcgaW50IGRp dmlkZV9ieTsKKyAgc2lnbmVkIGxvbmcgaW50IGRpdmlkZV90aGlzOworICBi ZmRfYm9vbGVhbiAgICAgb3ZlcmZsb3cgPSBGQUxTRTsKKyAgCisgIC8qIENv bXB1dGUgdGhlIHJlc3VsdC4gICovCisgIGRpdmlkZV9ieSAgID0gb3AwOwor ICBkaXZpZGVfdGhpcyA9IG9wMTsKKyAgCisgIGlmIChkaXZpZGVfYnkgPT0g MCB8fCAoZGl2aWRlX2J5ID09IC0xICYmIGRpdmlkZV90aGlzID09ICgxIDw8 IDMxKSkpCisgICAgeworICAgICAgb3ZlcmZsb3cgID0gVFJVRTsKKyAgICAg IGRpdmlkZV9ieSA9IDE7CisgICAgfQorICAKKyAgcXVvdGllbnQgID0gZGl2 aWRlX3RoaXMgLyBkaXZpZGVfYnk7CisgIHJlbWFpbmRlciA9IGRpdmlkZV90 aGlzICUgZGl2aWRlX2J5OworICAKKyAgLyogU2V0IGNvbmRpdGlvbiBjb2Rl cy4gICovCisgIFBTVyAmPSB+KFBTV19aIHwgUFNXX1MgfCBQU1dfT1YpOwor ICAKKyAgaWYgKG92ZXJmbG93KSAgICAgIFBTVyB8PSBQU1dfT1Y7CisgIGlm IChxdW90aWVudCA9PSAwKSBQU1cgfD0gUFNXX1o7CisgIGlmIChxdW90aWVu dCA8ICAwKSBQU1cgfD0gUFNXX1M7CisgIAorICAqb3AycCA9IHF1b3RpZW50 OworICAqb3AzcCA9IHJlbWFpbmRlcjsKK30KKwordm9pZCB2ODUwX2RpdnUo U0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGludCBv cDEsIHVuc2lnbmVkIGludCAqb3AycCwgdW5zaWduZWQgaW50ICpvcDNwKQor eworICB1bnNpZ25lZCBsb25nIGludCBxdW90aWVudDsKKyAgdW5zaWduZWQg bG9uZyBpbnQgcmVtYWluZGVyOworICB1bnNpZ25lZCBsb25nIGludCBkaXZp ZGVfYnk7CisgIHVuc2lnbmVkIGxvbmcgaW50IGRpdmlkZV90aGlzOworICBi ZmRfYm9vbGVhbiAgICAgICBvdmVyZmxvdyA9IEZBTFNFOworICAKKyAgLyog Q29tcHV0ZSB0aGUgcmVzdWx0LiAgKi8KKyAgCisgIGRpdmlkZV9ieSAgID0g b3AwOworICBkaXZpZGVfdGhpcyA9IG9wMTsKKyAgCisgIGlmIChkaXZpZGVf YnkgPT0gMCkKKyAgICB7CisgICAgICBvdmVyZmxvdyA9IFRSVUU7CisgICAg ICBkaXZpZGVfYnkgID0gMTsKKyAgICB9CisgIAorICBxdW90aWVudCAgPSBk aXZpZGVfdGhpcyAvIGRpdmlkZV9ieTsKKyAgcmVtYWluZGVyID0gZGl2aWRl X3RoaXMgJSBkaXZpZGVfYnk7CisgIAorICAvKiBTZXQgY29uZGl0aW9uIGNv ZGVzLiAgKi8KKyAgUFNXICY9IH4oUFNXX1ogfCBQU1dfUyB8IFBTV19PVik7 CisgIAorICBpZiAob3ZlcmZsb3cpICAgICAgUFNXIHw9IFBTV19PVjsKKyAg aWYgKHF1b3RpZW50ID09IDApIFBTVyB8PSBQU1dfWjsKKyAgaWYgKHF1b3Rp ZW50ICYgMHg4MDAwMDAwMCkgUFNXIHw9IFBTV19TOworICAKKyAgKm9wMnAg PSBxdW90aWVudDsKKyAgKm9wM3AgPSByZW1haW5kZXI7Cit9CisKKwordm9p ZCB2ODUwX3NhcihTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5z aWduZWQgaW50IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwKQoreworICB1bnNp Z25lZCBpbnQgcmVzdWx0LCB6LCBzLCBjeTsKKworICBvcDAgJj0gMHgxZjsK KyAgcmVzdWx0ID0gKHNpZ25lZClvcDEgPj4gb3AwOworCisgIC8qIENvbXB1 dGUgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gICovCisgIHogPSAocmVzdWx0ID09 IDApOworICBzID0gKHJlc3VsdCAmIDB4ODAwMDAwMDApOworICBjeSA9IChv cDEgJiAoMSA8PCAob3AwIC0gMSkpKTsKKworICAvKiBTdG9yZSB0aGUgcmVz dWx0IGFuZCBjb25kaXRpb24gY29kZXMuICAqLworICBQU1cgJj0gfihQU1df WiB8IFBTV19TIHwgUFNXX09WIHwgUFNXX0NZKTsKKyAgUFNXIHw9ICgoeiA/ IFBTV19aIDogMCkgfCAocyA/IFBTV19TIDogMCkKKwkJfCAoY3kgPyBQU1df Q1kgOiAwKSk7CisKKyAgKm9wMnAgPSByZXN1bHQ7Cit9CisKK3ZvaWQgdjg1 MF9zaGwoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVk IGludCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCkKK3sKKyAgdW5zaWduZWQg aW50IHJlc3VsdCwgeiwgcywgY3k7CisKKyAgb3AwICY9IDB4MWY7CisgIHJl c3VsdCA9IG9wMSA8PCBvcDA7CisKKyAgLyogQ29tcHV0ZSB0aGUgY29uZGl0 aW9uIGNvZGVzLiAgKi8KKyAgeiA9IChyZXN1bHQgPT0gMCk7CisgIHMgPSAo cmVzdWx0ICYgMHg4MDAwMDAwMCk7CisgIGN5ID0gKG9wMSAmICgxIDw8ICgz MiAtIG9wMCkpKTsKKworICAvKiBTdG9yZSB0aGUgcmVzdWx0IGFuZCBjb25k aXRpb24gY29kZXMuICAqLworICBQU1cgJj0gfihQU1dfWiB8IFBTV19TIHwg UFNXX09WIHwgUFNXX0NZKTsKKyAgUFNXIHw9ICgoeiA/IFBTV19aIDogMCkg fCAocyA/IFBTV19TIDogMCkKKwkJfCAoY3kgPyBQU1dfQ1kgOiAwKSk7CisK KyAgKm9wMnAgPSByZXN1bHQ7Cit9CisKK3ZvaWQgdjg1MF9zaHIoU0lNX0RF U0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGludCBvcDEsIHVu c2lnbmVkIGludCAqb3AycCkKK3sKKyAgdW5zaWduZWQgaW50IHJlc3VsdCwg eiwgcywgY3k7CisKKyAgb3AwICY9ICAweDFmOworICByZXN1bHQgPSBvcDEg Pj4gb3AwOworCisgIC8qIENvbXB1dGUgdGhlIGNvbmRpdGlvbiBjb2Rlcy4g ICovCisgIHogPSAocmVzdWx0ID09IDApOworICBzID0gKHJlc3VsdCAmIDB4 ODAwMDAwMDApOworICBjeSA9IChvcDEgJiAoMSA8PCAob3AwIC0gMSkpKTsK KworICAvKiBTdG9yZSB0aGUgcmVzdWx0IGFuZCBjb25kaXRpb24gY29kZXMu ICAqLworICBQU1cgJj0gfihQU1dfWiB8IFBTV19TIHwgUFNXX09WIHwgUFNX X0NZKTsKKyAgUFNXIHw9ICgoeiA/IFBTV19aIDogMCkgfCAocyA/IFBTV19T IDogMCkKKwkJfCAoY3kgPyBQU1dfQ1kgOiAwKSk7CisKKyAgKm9wMnAgPSBy ZXN1bHQ7Cit9CisKK3ZvaWQgdjg1MF9zYXRhZGQoU0lNX0RFU0Mgc2QsIHVu c2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGludCBvcDEsIHVuc2lnbmVkIGlu dCAqb3AycCkKK3sKKyAgdW5zaWduZWQgaW50IHJlc3VsdCwgeiwgcywgY3ks IG92LCBzYXQ7CisKKyAgcmVzdWx0ID0gb3AwICsgb3AxOworICAKKyAgLyog Q29tcHV0ZSB0aGUgY29uZGl0aW9uIGNvZGVzLiAgKi8KKyAgeiA9IChyZXN1 bHQgPT0gMCk7CisgIHMgPSAocmVzdWx0ICYgMHg4MDAwMDAwMCk7CisgIGN5 ID0gKHJlc3VsdCA8IG9wMCB8fCByZXN1bHQgPCBvcDEpOworICBvdiA9ICgo b3AwICYgMHg4MDAwMDAwMCkgPT0gKG9wMSAmIDB4ODAwMDAwMDApCisJJiYg KG9wMCAmIDB4ODAwMDAwMDApICE9IChyZXN1bHQgJiAweDgwMDAwMDAwKSk7 CisgIHNhdCA9IG92OworICAKKyAgLyogU3RvcmUgdGhlIHJlc3VsdCBhbmQg Y29uZGl0aW9uIGNvZGVzLiAgKi8KKyAgUFNXICY9IH4oUFNXX1ogfCBQU1df UyB8IFBTV19DWSB8IFBTV19PVik7CisgIFBTVyB8PSAoKHogPyBQU1dfWiA6 IDApIHwgKHMgPyBQU1dfUyA6IDApCisJICB8IChjeSA/IFBTV19DWSA6IDAp IHwgKG92ID8gUFNXX09WIDogMCkKKwkgIHwgKHNhdCA/IFBTV19TQVQgOiAw KSk7CisgIAorICAvKiBIYW5kbGUgc2F0dXJhdGVkIHJlc3VsdHMuICAqLwor ICBpZiAoc2F0ICYmIHMpCisgICAgeworICAgICAgcmVzdWx0ID0gMHg3ZmZm ZmZmZjsKKyAgICAgIFBTVyAmPSB+UFNXX1M7CisgICAgfQorICBlbHNlIGlm IChzYXQpCisgICAgeworICAgICAgcmVzdWx0ID0gMHg4MDAwMDAwMDsKKyAg ICAgIFBTVyB8PSBQU1dfUzsKKyAgICB9CisKKyAgKm9wMnAgPSByZXN1bHQ7 Cit9CisKK3ZvaWQgdjg1MF9zYXRzdWIoU0lNX0RFU0Mgc2QsIHVuc2lnbmVk IGludCBvcDAsIHVuc2lnbmVkIGludCBvcDEsIHVuc2lnbmVkIGludCAqb3Ay cCkKK3sKKyAgdW5zaWduZWQgaW50IHJlc3VsdCwgeiwgcywgY3ksIG92LCBz YXQ7CisKKyAgLyogQ29tcHV0ZSB0aGUgcmVzdWx0LiAgKi8KKyAgcmVzdWx0 ID0gb3AxIC0gb3AwOworICAKKyAgLyogQ29tcHV0ZSB0aGUgY29uZGl0aW9u IGNvZGVzLiAgKi8KKyAgeiA9IChyZXN1bHQgPT0gMCk7CisgIHMgPSAocmVz dWx0ICYgMHg4MDAwMDAwMCk7CisgIGN5ID0gKG9wMSA8IG9wMCk7CisgIG92 ID0gKChvcDEgJiAweDgwMDAwMDAwKSAhPSAob3AwICYgMHg4MDAwMDAwMCkK KwkmJiAob3AxICYgMHg4MDAwMDAwMCkgIT0gKHJlc3VsdCAmIDB4ODAwMDAw MDApKTsKKyAgc2F0ID0gb3Y7CisgIAorICAvKiBTdG9yZSB0aGUgcmVzdWx0 IGFuZCBjb25kaXRpb24gY29kZXMuICAqLworICBQU1cgJj0gfihQU1dfWiB8 IFBTV19TIHwgUFNXX0NZIHwgUFNXX09WKTsKKyAgUFNXIHw9ICgoeiA/IFBT V19aIDogMCkgfCAocyA/IFBTV19TIDogMCkKKwkgIHwgKGN5ID8gUFNXX0NZ IDogMCkgfCAob3YgPyBQU1dfT1YgOiAwKQorCSAgfCAoc2F0ID8gUFNXX1NB VCA6IDApKTsKKworICAvKiBIYW5kbGUgc2F0dXJhdGVkIHJlc3VsdHMuICAq LworICBpZiAoc2F0ICYmIHMpCisgICAgeworICAgICAgcmVzdWx0ID0gMHg3 ZmZmZmZmZjsKKyAgICAgIFBTVyAmPSB+UFNXX1M7CisgICAgfQorICBlbHNl IGlmIChzYXQpCisgICAgeworICAgICAgcmVzdWx0ID0gMHg4MDAwMDAwMDsK KyAgICAgIFBTVyB8PSBQU1dfUzsKKyAgICB9CisKKyAgKm9wMnAgPSByZXN1 bHQ7Cit9CisKK3Vuc2lnbmVkMzIKK2xvYWRfZGF0YV9tZW0oc2QsIGFkZHIs IGxlbikKKyAgICAgU0lNX0RFU0Mgc2Q7CisgICAgIFNJTV9BRERSIGFkZHI7 CisgICAgIGludCBsZW47Cit7CisgIHVpbnQzMiBkYXRhOworCisgIHN3aXRj aCAobGVuKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICBkYXRhID0gc2lt X2NvcmVfcmVhZF91bmFsaWduZWRfMSAoU1RBVEVfQ1BVIChzZCwgMCksIAor CQkJCQlQQywgcmVhZF9tYXAsIGFkZHIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAyOgorICAgICAgZGF0YSA9IHNpbV9jb3JlX3JlYWRfdW5hbGlnbmVk XzIgKFNUQVRFX0NQVSAoc2QsIDApLCAKKwkJCQkJUEMsIHJlYWRfbWFwLCBh ZGRyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgIGRhdGEg PSBzaW1fY29yZV9yZWFkX3VuYWxpZ25lZF80IChTVEFURV9DUFUgKHNkLCAw KSwgCisJCQkJCVBDLCByZWFkX21hcCwgYWRkcik7CisgICAgICBicmVhazsK KyAgICBkZWZhdWx0OgorICAgICAgYWJvcnQgKCk7CisgICAgfQorICByZXR1 cm4gZGF0YTsKK30KKwordm9pZAorc3RvcmVfZGF0YV9tZW0oc2QsIGFkZHIs IGxlbiwgZGF0YSkKKyAgICAgU0lNX0RFU0Mgc2Q7CisgICAgIFNJTV9BRERS IGFkZHI7CisgICAgIGludCBsZW47CisgICAgIHVuc2lnbmVkMzIgZGF0YTsK K3sKKyAgc3dpdGNoIChsZW4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAg IHN0b3JlX21lbShhZGRyLCAxLCBkYXRhKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgMjoKKyAgICAgIHN0b3JlX21lbShhZGRyLCAyLCBkYXRhKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgIHN0b3JlX21lbShhZGRy LCA0LCBkYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg ICBhYm9ydCAoKTsKKyAgICB9Cit9CisKK2ludCBtcHVfbG9hZF9tZW1fdGVz dChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IGFkZHIsIGludCBzaXplLCBp bnQgYmFzZV9yZWcpCit7CisgIGludCByZXN1bHQgPSAxOworCisgIGlmIChQ U1cgJiBQU1dfRE1QKQorICAgIHsKKyAgICAgIGlmIChJUEUwICYmIGFkZHIg Pj0gSVBBMkFERFIoSVBBMEwpICYmIGFkZHIgPD0gSVBBMkFERFIoSVBBMEwp ICYmIElQUjApCisJeworCSAgLyogdGV4dCBhcmVhICovCisJfQorICAgICAg ZWxzZSBpZiAoSVBFMSAmJiBhZGRyID49IElQQTJBRERSKElQQTFMKSAmJiBh ZGRyIDw9IElQQTJBRERSKElQQTFMKSAmJiBJUFIxKQorCXsKKwkgIC8qIHRl eHQgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKElQRTIgJiYgYWRkciA+ PSBJUEEyQUREUihJUEEyTCkgJiYgYWRkciA8PSBJUEEyQUREUihJUEEyTCkg JiYgSVBSMikKKwl7CisJICAvKiB0ZXh0IGFyZWEgKi8KKwl9CisgICAgICBl bHNlIGlmIChJUEUzICYmIGFkZHIgPj0gSVBBMkFERFIoSVBBM0wpICYmIGFk ZHIgPD0gSVBBMkFERFIoSVBBM0wpICYmIElQUjMpCisJeworCSAgLyogdGV4 dCBhcmVhICovCisJfQorICAgICAgZWxzZSBpZiAoYWRkciA+PSBQUEEyQURE UihQUEEgJiB+UFBNKSAmJiBhZGRyIDw9IERQQTJBRERSKFBQQSB8IFBQTSkp CisJeworCSAgLyogcHJlaWZhcmFsbGVsIGFyZWEgKi8KKwl9CisgICAgICBl bHNlIGlmIChhZGRyID49IFBQQTJBRERSKFNQQUwpICYmIGFkZHIgPD0gRFBB MkFERFIoU1BBVSkpCisJeworCSAgLyogc3RhY2sgYXJlYSAqLworCX0KKyAg ICAgIGVsc2UgaWYgKERQRTAgJiYgYWRkciA+PSBEUEEyQUREUihEUEEwTCkg JiYgYWRkciA8PSBEUEEyQUREUihEUEEwTCkgJiYgRFBSMAorCSAgICAgICAm JiAoKFNQQUwgJiBTUEFMX1NQUykgPyBiYXNlX3JlZyA9PSBTUF9SRUdOTyA6 IDEpKQorCXsKKwkgIC8qIGRhdGEgYXJlYSAqLworCX0KKyAgICAgIGVsc2Ug aWYgKERQRTEgJiYgYWRkciA+PSBEUEEyQUREUihEUEExTCkgJiYgYWRkciA8 PSBEUEEyQUREUihEUEExTCkgJiYgRFBSMQorCSAgICAgICAmJiAoKFNQQUwg JiBTUEFMX1NQUykgPyBiYXNlX3JlZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsK KwkgIC8qIGRhdGEgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKERQRTIg JiYgYWRkciA+PSBEUEEyQUREUihEUEEyTCkgJiYgYWRkciA8PSBEUEEyQURE UihEUEEyTCkgJiYgRFBSMgorCSAgICAgICAmJiAoKFNQQUwgJiBTUEFMX1NQ UykgPyBiYXNlX3JlZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsKKwkgIC8qIGRh dGEgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKERQRTMgJiYgYWRkciA+ PSBEUEEyQUREUihEUEEzTCkgJiYgYWRkciA8PSBEUEEyQUREUihEUEEzTCkg JiYgRFBSMworCSAgICAgICAmJiAoKFNQQUwgJiBTUEFMX1NQUykgPyBiYXNl X3JlZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsKKwkgIC8qIGRhdGEgYXJlYSAq LworCX0KKyAgICAgIGVsc2UKKwl7CisJICBWTUVDUiAmPSB+KFZNRUNSX1ZN VyB8IFZNRUNSX1ZNWCk7CisJICBWTUVDUiB8PSBWTUVDUl9WTVI7CisJICBW TUFEUiA9IGFkZHI7CisJICBWTVRJRCA9IFRJRDsKKwkgIEZFSUMgPSAweDQz MTsKKworCSAgUEMgPSAweDMwOworCisJICBTaWduYWxFeGNlcHRpb24oc2Qp OworCSAgcmVzdWx0ID0gMDsKKwl9CisgICAgfQorCisgIHJldHVybiByZXN1 bHQ7Cit9CisKK2ludCBtcHVfc3RvcmVfbWVtX3Rlc3QoU0lNX0RFU0Mgc2Qs IHVuc2lnbmVkIGludCBhZGRyLCBpbnQgc2l6ZSwgaW50IGJhc2VfcmVnKQor eworICBpbnQgcmVzdWx0ID0gMTsKKworICBpZiAoUFNXICYgUFNXX0RNUCkK KyAgICB7CisgICAgICBpZiAoYWRkciA+PSBQUEEyQUREUihQUEEgJiB+UFBN KSAmJiBhZGRyIDw9IERQQTJBRERSKFBQQSB8IFBQTSkpCisJeworCSAgLyog cHJlaWZhcmFsbGVsIGFyZWEgKi8KKwl9CisgICAgICBlbHNlIGlmIChhZGRy ID49IFBQQTJBRERSKFNQQUwpICYmIGFkZHIgPD0gRFBBMkFERFIoU1BBVSkp CisJeworCSAgLyogc3RhY2sgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYg KERQRTAgJiYgYWRkciA+PSBEUEEyQUREUihEUEEwTCkgJiYgYWRkciA8PSBE UEEyQUREUihEUEEwTCkgJiYgRFBXMAorCSAgICAgICAmJiAoKFNQQUwgJiBT UEFMX1NQUykgPyBiYXNlX3JlZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsKKwkg IC8qIGRhdGEgYXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKERQRTEgJiYg YWRkciA+PSBEUEEyQUREUihEUEExTCkgJiYgYWRkciA8PSBEUEEyQUREUihE UEExTCkgJiYgRFBXMQorCSAgICAgICAmJiAoKFNQQUwgJiBTUEFMX1NQUykg PyBiYXNlX3JlZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsKKwkgIC8qIGRhdGEg YXJlYSAqLworCX0KKyAgICAgIGVsc2UgaWYgKERQRTIgJiYgYWRkciA+PSBE UEEyQUREUihEUEEyTCkgJiYgYWRkciA8PSBEUEEyQUREUihEUEEyTCkgJiYg RFBXMgorCSAgICAgICAmJiAoKFNQQUwgJiBTUEFMX1NQUykgPyBiYXNlX3Jl ZyA9PSBTUF9SRUdOTyA6IDEpKQorCXsKKwkgIC8qIGRhdGEgYXJlYSAqLwor CX0KKyAgICAgIGVsc2UgaWYgKERQRTMgJiYgYWRkciA+PSBEUEEyQUREUihE UEEzTCkgJiYgYWRkciA8PSBEUEEyQUREUihEUEEzTCkgJiYgRFBXMworCSAg ICAgICAmJiAoKFNQQUwgJiBTUEFMX1NQUykgPyBiYXNlX3JlZyA9PSBTUF9S RUdOTyA6IDEpKQorCXsKKwkgIC8qIGRhdGEgYXJlYSAqLworCX0KKyAgICAg IGVsc2UKKwl7CisJICBpZiAoYWRkciA+PSBQUEEyQUREUihQUEEgJiB+UFBN KSAmJiBhZGRyIDw9IERQQTJBRERSKFBQQSB8IFBQTSkpCisJICAgIHsKKwkg ICAgICBGRUlDID0gMHg0MzI7CisJICAgICAgVlBUSUQgPSBUSUQ7CisJICAg ICAgVlBBRFIgPSBQQzsKKyNpZmRlZiBOT1RfWUVUCisJICAgICAgVklQX1BQ OworCSAgICAgIFZQRUNSOworI2VuZGlmCSAgICAgIAorCSAgICB9CisJICBl bHNlCisJICAgIHsKKwkgICAgICBGRUlDID0gMHg0MzE7CisJICAgICAgVk1U SUQgPSBUSUQ7CisJICAgICAgVk1BRFIgPSBWTUVDUjsKKwkgICAgICBWTUVD UiAmPSB+KFZNRUNSX1ZNVyB8IFZNRUNSX1ZNWCk7CisJICAgICAgVk1FQ1Ig fD0gVk1FQ1JfVk1SOworCSAgICAgIFBDID0gMHgzMDsKKwkgICAgfQorCSAg cmVzdWx0ID0gMDsKKwl9CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9 CisKZGlmZiAtdXBOciBnZGItNy4yLjUwLW9yaWdpbmFsL3NpbS92ODUwL3Np bW9wcy5oIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL3Y4NTAvc2ltb3BzLmgK LS0tIGdkYi03LjIuNTAtb3JpZ2luYWwvc2ltL3Y4NTAvc2ltb3BzLmgJMjAw My0wNC0wNiAxNDoyMTowNC4wMDAwMDAwMDAgKzA1MzAKKysrIGdkYi03LjIu NTAtbW9kaWZpZWQvc2ltL3Y4NTAvc2ltb3BzLmgJMjAxMS0wMS0xMSAxODoy NDo1OC4wMDAwMDAwMDAgKzA1MzAKQEAgLTc1LDQgKzc1LDUxIEBAIGludCBP UF8yMjAwN0UwICh2b2lkKTsKIGludCBPUF8zMDdGMCAodm9pZCk7CiBpbnQg T1BfMTA3RjAgKHZvaWQpOwogaW50IE9QXzMwN0UwICh2b2lkKTsKKworaW50 IHY4NTBfZmxvYXRfY29tcGFyZShTSU1fREVTQyBzZCwgaW50IGNtcCwgc2lt X2ZwdSB3b3AxLCBzaW1fZnB1IHdvcDIsIGludCBkb3VibGVfb3BfcCk7CisK Ky8qIE1FTU9SWSBBQ0NFU1MgKi8KK3Vuc2lnbmVkMzIgbG9hZF9kYXRhX21l bShTSU1fREVTQyBzZCwgU0lNX0FERFIgYWRkciwgaW50IGxlbik7Cit2b2lk IHN0b3JlX2RhdGFfbWVtKFNJTV9ERVNDIHNkLCBTSU1fQUREUiBhZGRyLCBp bnQgbGVuLCB1bnNpZ25lZDMyIGRhdGEpOworCit1bnNpZ25lZCBsb25nIEFk ZDMyICh1bnNpZ25lZCBsb25nIGExLCB1bnNpZ25lZCBsb25nIGEyLCBpbnQg KiBjYXJyeSk7CisKKy8qIEZQVSAqLworCisvKgorICBGUFU6IHVwZGF0ZSBG UFNSIGZsYWdzCisgIGludmFsaWQsIGluZXhhY3QsIG92ZXJmbG93LCB1bmRl cmZsb3cKKyAqLworCitleHRlcm4gdm9pZCBjaGVja19pbnZhbGlkX3NuYW4g KFNJTV9ERVNDIHNkLCBzaW1fZnB1X3N0YXR1cywgdW5zaWduZWQgaW50KTsK KworI2RlZmluZSBjaGVja19jdnRfZmkoc2QsIHN0YXR1cywgZG91YmxlX29w X3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdXBkYXRlX2Zwc3Ig KHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUksIGRvdWJsZV9vcF9w KQorCisjZGVmaW5lIGNoZWNrX2N2dF9pZihzZCwgc3RhdHVzLCBkb3VibGVf b3BfcCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1cGRhdGVfZnBz ciAoc2QsIHN0YXR1cywgRlBTUl9YRUksIGRvdWJsZV9vcF9wKQorCisjZGVm aW5lIGNoZWNrX2N2dF9mZihzZCwgc3RhdHVzLCBkb3VibGVfb3BfcCkgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICB1cGRhdGVfZnBzciAoc2QsIHN0 YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9Y RVUsIGRvdWJsZV9vcF9wKQorCitleHRlcm4gdm9pZCB1cGRhdGVfZnBzciAo U0lNX0RFU0Mgc2QsIHNpbV9mcHVfc3RhdHVzLCB1bnNpZ25lZCBpbnQsIHVu c2lnbmVkIGludCk7CisKKworLyoKKyAgRXhjZXB0aW9uIAorICovCit2b2lk ICBTaWduYWxFeGNlcHRpb24gKFNJTV9ERVNDIHNkKTsKK3ZvaWQgIFNpZ25h bEV4Y2VwdGlvbkZQRSAoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBkb3Vi bGVfb3BfcCk7CisKK2ludCBtcHVfbG9hZF9tZW1fdGVzdCAoU0lNX0RFU0Mg c2QsIHVuc2lnbmVkIGludCBhZGRyLCBpbnQgbGVuLCBpbnQgYmFzZV9yZWcp OworaW50IG1wdV9zdG9yZV9tZW1fdGVzdCAoU0lNX0RFU0Mgc2QsIHVuc2ln bmVkIGludCBhZGRyLCBpbnQgbGVuLCBpbnQgYmFzZV9yZWcpOworCit2b2lk IHY4NTBfc2FyIChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5z aWduZWQgaW50IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwKTsKK3ZvaWQgdjg1 MF9zaGwgKFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25l ZCBpbnQgb3AxLCB1bnNpZ25lZCBpbnQgKm9wMnApOwordm9pZCB2ODUwX3No ciAoU0lNX0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGlu dCBvcDEsIHVuc2lnbmVkIGludCAqb3AycCk7Cit2b2lkIHY4NTBfc2F0YWRk IChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwgdW5zaWduZWQgaW50 IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwKTsKK3ZvaWQgdjg1MF9zYXRzdWIg KFNJTV9ERVNDIHNkLCB1bnNpZ25lZCBpbnQgb3AwLCB1bnNpZ25lZCBpbnQg b3AxLCB1bnNpZ25lZCBpbnQgKm9wMnApOwordm9pZCB2ODUwX2RpdiAoU0lN X0RFU0Mgc2QsIHVuc2lnbmVkIGludCBvcDAsIHVuc2lnbmVkIGludCBvcDEs IHVuc2lnbmVkIGludCAqb3AycCwgdW5zaWduZWQgaW50ICpvcDNwKTsKK3Zv aWQgdjg1MF9kaXZ1IChTSU1fREVTQyBzZCwgdW5zaWduZWQgaW50IG9wMCwg dW5zaWduZWQgaW50IG9wMSwgdW5zaWduZWQgaW50ICpvcDJwLCB1bnNpZ25l ZCBpbnQgKm9wM3ApOworCiAjZW5kaWYKZGlmZiAtdXBOciBnZGItNy4yLjUw LW9yaWdpbmFsL3NpbS92ODUwL3Y4NTAtZGMgZ2RiLTcuMi41MC1tb2RpZmll ZC9zaW0vdjg1MC92ODUwLWRjCi0tLSBnZGItNy4yLjUwLW9yaWdpbmFsL3Np bS92ODUwL3Y4NTAtZGMJMjAwMy0wOS0wNSAyMzoxNjo1Mi4wMDAwMDAwMDAg KzA1MzAKKysrIGdkYi03LjIuNTAtbW9kaWZpZWQvc2ltL3Y4NTAvdjg1MC1k YwkyMDExLTAxLTExIDE4OjI0OjU4LjAwMDAwMDAwMCArMDUzMApAQCAtMTIs NyArMTIsOSBAQAogICBzd2l0Y2gsY29tYmluZSAgICAgICAgOiAgIDQgOiAg IDAgOiAgICA6ICAgIDogICAgOiAgICAxIDogVixWSUkgICAgICAgOgogICBz d2l0Y2gsY29tYmluZSAgICAgICAgOiAgIDQgOiAgIDAgOiAgICA6ICAgIDog ICAgOiAgICAxIDogVixYSUlJICAgICAgOiB2ODUwZQogICBzd2l0Y2gsY29t YmluZSAgICAgICAgOiAgIDQgOiAgIDAgOiAgICA6ICAgIDogICAgOiAgICAx IDogVixYSUlJICAgICAgOiB2ODUwZTEKLQorICBzd2l0Y2gsY29tYmluZSAg ICAgICAgOiAgIDQgOiAgIDAgOiAgICA6ICAgIDogICAgOiAgICAxIDogVixY SUlJICAgICAgOiB2ODUwZTIKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDog ICA0IDogICAwIDogICAgOiAgICA6ICAgIDogICAgMSA6IFYsWElJSSAgICAg IDogdjg1MGUydjMKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogIDEwIDog ICA1IDogICAgOiAgICA6ICAgIDogICAgMCA6IEZfSSAgICAgICAgIDogdjg1 MGUydjMKIAogIyBmb3Igb3Bjb2RlIDYzLCAxMjcsIDEwODcgZXQuYWwuCiAK QEAgLTI3LDMgKzI5LDI4IEBACiAjIGZvciBvcGNvZGUgNjYgLSBkaXZoL2Jy ZWFrCiAKICAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogICA0IDogICAwIDog ICAgOiAgICA6ICAgIDogICAgMCA6IEkgICAgICAgICAgIDoKKworIyBmb3Ig aWxnb3AsIG1hY3UKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogIDEwIDog ICA5IDogICAgOiAgICA6ICAgIDogICAgMSA6IFgsWEkgICAgICAgIDogdjg1 MGUyCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICAxMCA6ICAgOSA6ICAg IDogICAgOiAgICA6ICAgIDEgOiBYLFhJICAgICAgICA6IHY4NTBlMnYzCisK KyNmb3IgY21vdmYucywgc2V0ZgorICBzd2l0Y2gsY29tYmluZSAgICAgICAg OiAgMTAgOiAgIDEwIDogICAgOiAgICA6ICAgIDogICAgMSA6Rl9JLElYICAg ICAgOiB2ODUwZTJ2MworICAKKyMgZm9yIGNtb3ZmLnMgdHJmc3IKKyAgc3dp dGNoLGNvbWJpbmUgICAgICAgIDogIDE1IDogICAxMSA6ICAgIDogICAgOiAg ICA6ICAgIDEgOkZfSSAgICAgICAgIDogdjg1MGUydjMKKworIyBmb3IgdHJu Y2Yuc3csIGN2dGYuc3cKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogICAw IDogICAgMCA6ICAgIDogICAgOiAgICA6ICAgIDAgOkZfSSAgICAgICAgIDog djg1MGUydjMKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogICAzIDogICAg MyA6ICAgIDogICAgOiAgICA6ICAgIDAgOkZfSSAgICAgICAgIDogdjg1MGUy djMKKworIyBmb3IgcnNxcnRmLnMsIHNxcnRmLnMKKyAgc3dpdGNoLGNvbWJp bmUgICAgICAgIDogICAxIDogICAgMSA6ICAgIDogICAgOiAgICA6ICAgIDAg OkZfSSAgICAgICAgIDogdjg1MGUydjMKKworIyBmb3IgbWFkZGYucywgdHJh cCAKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogICA4IDogICAgOCA6ICAg IDogICAgOiAgICA6ICAgIDEgOkZfSSxYICAgICAgIDogdjg1MGUydjMKKyAg c3dpdGNoLGNvbWJpbmUgICAgICAgIDogIDEwIDogICAxMCA6ICAgIDogICAg OiAgICA6ICAgIDEgOkZfSSxYICAgICAgIDogdjg1MGUydjMKKworIyBmb3Ig anIzMiBqYXJsMzIKKyAgc3dpdGNoLGNvbWJpbmUgICAgICAgIDogIDQgOiAg IDAgOiAgICA6ICAgIDogICAgOiAgICAwIDpWSSAgICAgICAgICAgIDogdjg1 MGUyCisgIHN3aXRjaCxjb21iaW5lICAgICAgICA6ICA0IDogICAwIDogICAg OiAgICA6ICAgIDogICAgMCA6VkkgICAgICAgICAgICA6IHY4NTBlMnYzCmRp ZmYgLXVwTnIgZ2RiLTcuMi41MC1vcmlnaW5hbC9zaW0vdjg1MC92ODUwLmln ZW4gZ2RiLTcuMi41MC1tb2RpZmllZC9zaW0vdjg1MC92ODUwLmlnZW4KLS0t IGdkYi03LjIuNTAtb3JpZ2luYWwvc2ltL3Y4NTAvdjg1MC5pZ2VuCTIwMDgt MDItMDYgMTA6MTE6MjYuMDAwMDAwMDAwICswNTMwCisrKyBnZGItNy4yLjUw LW1vZGlmaWVkL3NpbS92ODUwL3Y4NTAuaWdlbgkyMDExLTAxLTExIDE4OjI0 OjU4LjAwMDAwMDAwMCArMDUzMApAQCAtNiw2ICs2LDcgQEAKIDpvcHRpb246 Ojpmb3JtYXQtbmFtZXM6WEksWElJLFhJSUkKIDpvcHRpb246Ojpmb3JtYXQt bmFtZXM6WElWLFhWCiA6b3B0aW9uOjo6Zm9ybWF0LW5hbWVzOloKKzpvcHRp b246Ojpmb3JtYXQtbmFtZXM6Rl9JCiAKIAogOm1vZGVsOjo6djg1MDp2ODUw OgpAQCAtMTQsMTIgKzE1LDIyIEBACiA6bW9kZWw6Ojp2ODUwZTp2ODUwZToK IDpvcHRpb246OjptdWx0aS1zaW06dHJ1ZQogOm1vZGVsOjo6djg1MGUxOnY4 NTBlMToKKzpvcHRpb246OjptdWx0aS1zaW06dHJ1ZQorOm1vZGVsOjo6djg1 MGUyOnY4NTBlMjoKKzpvcHRpb246OjptdWx0aS1zaW06dHJ1ZQorOm1vZGVs Ojo6djg1MGUydjM6djg1MGUydjM6CiAKIC8vIENhY2hlIG1hY3JvcwogCiA6 Y2FjaGU6Ojp1bnNpZ25lZDpyZWcxOlJSUlJSOihSUlJSUikKIDpjYWNoZTo6 OnVuc2lnbmVkOnJlZzI6cnJycnI6KHJycnJyKQogOmNhY2hlOjo6dW5zaWdu ZWQ6cmVnMzp3d3d3dzood3d3d3cpCis6Y2FjaGU6Ojp1bnNpZ25lZDpyZWc0 OlcsV1dXVzooKFcgPDwgNCkgKyBXV1dXKQorCis6Y2FjaGU6Ojp1bnNpZ25l ZDpyZWcxZTpSUlJSOihSUlJSIDw8IDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpy ZWcyZTpycnJyOihycnJyIDw8IDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpyZWcz ZTp3d3d3Oih3d3d3IDw8IDEpCis6Y2FjaGU6Ojp1bnNpZ25lZDpyZWc0ZTpt bW1tOihtbW1tIDw8IDEpCiAKIDpjYWNoZTo6OnVuc2lnbmVkOmRpc3A0OmRk ZGQ6KGRkZGQpCiA6Y2FjaGU6Ojp1bnNpZ25lZDpkaXNwNTpkZGRkOihkZGRk IDw8IDEpCkBAIC0yOSw3ICs0MCwxMCBAQAogOmNhY2hlOjo6dW5zaWduZWQ6 ZGlzcDk6ZGRkZGQsZGRkOlNFWFQzMiAoKGRkZGRkIDw8IDQpICsgKGRkZCA8 PCAxKSwgOSAtIDEpCiA6Y2FjaGU6Ojp1bnNpZ25lZDpkaXNwMTY6ZGRkZGRk ZGRkZGRkZGRkZDpFWFRFTkQxNiAoZGRkZGRkZGRkZGRkZGRkZCkKIDpjYWNo ZTo6OnVuc2lnbmVkOmRpc3AxNjpkZGRkZGRkZGRkZGRkZGQ6IEVYVEVORDE2 IChkZGRkZGRkZGRkZGRkZGQgPDwgMSkKKzpjYWNoZTo6OnVuc2lnbmVkOmRp c3AxNzpkLGRkZGRkZGRkZGRkZGRkZDpTRVhUMzIgKCgoZCA8PDE2KSArIChk ZGRkZGRkZGRkZGRkZGQgPDwgMSkpLCAxNyAtIDEpCiA6Y2FjaGU6Ojp1bnNp Z25lZDpkaXNwMjI6ZGRkZGRkLGRkZGRkZGRkZGRkZGRkZDogU0VYVDMyICgo ZGRkZGRkIDw8IDE2KSArIChkZGRkZGRkZGRkZGRkZGQgPDwgMSksIDIyIC0g MSkKKzpjYWNoZTo6OnVuc2lnbmVkOmRpc3AyMzpkZGRkZGRkLGRkZGRkZGRk ZGRkZGRkZGQ6IFNFWFQzMiAoKGRkZGRkZGQpICsgKGRkZGRkZGRkZGRkZGRk ZGQgPDwgNyksIDIzIC0gMSkKKzpjYWNoZTo6OnVuc2lnbmVkOmRpc3AyMzpk ZGRkZGQsZGRkZGRkZGRkZGRkZGRkZDogU0VYVDMyICgoZGRkZGRkIDw8IDEp ICsgKGRkZGRkZGRkZGRkZGRkZGQgPDwgNyksIDIzIC0gMSkKIAogOmNhY2hl Ojo6dW5zaWduZWQ6aW1tNTppaWlpaTpTRVhUMzIgKGlpaWlpLCA0KQogOmNh Y2hlOjo6dW5zaWduZWQ6aW1tNjppaWlpaWk6aWlpaWlpCkBAIC00Niw2ICs2 MCw3IEBACiA6Y2FjaGU6Ojp1bnNpZ25lZDpsaXN0MTg6TExMTCxMTExMTExM TExMTEw6KChMTExMIDw8IDEyKSArIExMTExMTExMTExMTCkKIAogOmNhY2hl Ojo6dW5zaWduZWQ6Yml0MzpiYmI6YmJiCis6Y2FjaGU6Ojp1bnNpZ25lZDpi aXQ0OmJiYmI6YmJiYgogCiAKIC8vIFdoYXQgZG8gd2UgZG8gd2l0aCBhbiBp bGxlZ2FsIGluc3RydWN0aW9uPwpAQCAtNTgsOCArNzMsNyBAQAogCiAKIAot Ly8gQWRkCi0KKy8vIEFERAogcnJycnIsMDAxMTEwLFJSUlJSOkk6OjphZGQK ICJhZGQgcjxyZWcxPiwgcjxyZWcyPiIKIHsKQEAgLTgzLDYgKzk3LDIwIEBA IHJycnJyLDExMDAwMCxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6VkkKIAog CiAKKy8vIEFERgorcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDExMTAx LGNjY2MhMTMsMDpYSTo6OmFkZgorKnY4NTBlMgorKnY4NTBlMnYzCisiYWRm ICVzPGNjY2M+LCByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+IgoreworICBp bnQgY29uZCA9IGNvbmRpdGlvbl9tZXQgKGNjY2MpOworICBUUkFDRV9BTFVf SU5QVVQzIChjb25kLCBHUltyZWcxXSwgR1JbcmVnMl0pOworICBHUltyZWcz XSA9IEdSW3JlZzFdICsgR1JbcmVnMl0gKyAoY29uZCA/IDEgOiAwKTsKKyAg VFJBQ0VfQUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsKK30KKworCisKIC8vIEFO RAogcnJycnIsMDAxMDEwLFJSUlJSOkk6OjphbmQKICJhbmQgcjxyZWcxPiwg cjxyZWcyPiIKQEAgLTE1MywxMiArMTgxLDI3IEBAIGRkZGRkLDEwMTEsZGRk LGNjY2M6SUlJOjo6QmNvbmQKICAgfQogfQogCiswMDAwMDExMTExMSxkLGNj Y2MgKyBkZGRkZGRkZGRkZGRkZGQsMTpWSUk6OjpCY29uZAorImJyZWFrcG9p bnQiOigoZGlzcDE3ID09IDApICYmIChjY2NjID09IDB4MDUpKQorImIlczxj Y2NjPiA8ZGlzcDE3PiIKKyp2ODUwZTJ2MworeworICBpbnQgY29uZDsKKyAg Y29uZCA9IGNvbmRpdGlvbl9tZXQgKGNjY2MpOworICBpZiAoY29uZCkKKyAg ICBuaWEgPSBjaWEgKyBkaXNwMTc7CisgIFRSQUNFX0JSQU5DSF9JTlBVVDEg KGNvbmQpOworICBUUkFDRV9CUkFOQ0hfUkVTVUxUIChuaWEpOworfQorCiAK IAogLy8gQlNICiBycnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDAxMTAxMDAw MDEwOlhJSTo6OmJzaAogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1 MGUydjMKICJic2ggcjxyZWcyPiwgcjxyZWczPiIKIHsKICAgdW5zaWduZWQz MiB2YWx1ZTsKQEAgLTE3OCwxMCArMjIxLDE0IEBAIHJycnJyLDExMTExMTAw MDAwICsgd3d3d3csMDExMDEwMDAwMTA6WEkKICAgVFJBQ0VfQUxVX1JFU1VM VCAoR1JbcmVnM10pOwogfQogCisKKwogLy8gQlNXCiBycnJyciwxMTExMTEw MDAwMCArIHd3d3d3LDAxMTAxMDAwMDAwOlhJSTo6OmJzdwogKnY4NTBlCiAq djg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJic3cgcjxyZWcyPiwgcjxy ZWczPiIKIHsKICNkZWZpbmUgV09SREhBU05VTExCWVRFKHgpICgoKHgpIC0g MHgwMTAxMDEwMSkgJiB+KHgpJjB4ODA4MDgwODApCkBAIC0yMDQsMTAgKzI1 MSwxNCBAQCBycnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDAxMTAxMDAwMDAw OlhJCiAgIFRSQUNFX0FMVV9SRVNVTFQgKEdSW3JlZzNdKTsKIH0KIAorCisK IC8vIENBTExUCiAwMDAwMDAxMDAwLGlpaWlpaTpJSTo6OmNhbGx0CiAqdjg1 MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogImNhbGx0IDxpbW02 PiIKIHsKICAgdW5zaWduZWQzMiBhZHI7CkBAIC0yMjEsNiArMjcyLDU1IEBA IHJycnJyLDExMTExMTAwMDAwICsgd3d3d3csMDExMDEwMDAwMDA6WEkKIH0K IAogCisKKy8vIENBWEkKK3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAw MDExMTAxMTEwOklYOjo6Y2F4aQorKnY4NTBlMgorKnY4NTBlMnYzCisiY2F4 aSBbcmVnMV0sIHJlZzIsIHJlZzMiCit7CisgIHVuc2lnbmVkIGludCB6LHMs Y3ksb3Y7CisgIHVuc2lnbmVkMzIgYWRkcjsKKyAgdW5zaWduZWQzMiB0b2tl bixyZXN1bHQ7CisKKyAgYWRkciA9IEdSW3JlZzFdOworCisgIGlmIChtcHVf bG9hZF9tZW1fdGVzdChzZCwgYWRkciwgNCwgcmVnMSkgCisgICAgICAmJiBt cHVfc3RvcmVfbWVtX3Rlc3Qoc2QsIGFkZHIsIDQsIHJlZzEpKQorICAgIHsK KyAgICAgIHRva2VuID0gbG9hZF9kYXRhX21lbSAoc2QsIGFkZHIsIDQpOwor CisgICAgICBUUkFDRV9BTFVfSU5QVVQyICh0b2tlbiwgR1JbcmVnMl0pOwor CisgICAgICByZXN1bHQgPSBHUltyZWcyXSAtIHRva2VuOworCisgICAgICB6 ID0gKHJlc3VsdCA9PSAwKTsKKyAgICAgIHMgPSAocmVzdWx0ICYgMHg4MDAw MDAwMCk7CisgICAgICBjeSA9IChHUltyZWcyXSA8IHRva2VuKTsKKyAgICAg IG92ID0gKChHUltyZWcyXSAmIDB4ODAwMDAwMDApICE9ICh0b2tlbiAmIDB4 ODAwMDAwMDApCisJICAgICYmIChHUltyZWcyXSAmIDB4ODAwMDAwMDApICE9 IChyZXN1bHQgJiAweDgwMDAwMDAwKSk7CisKKyAgICAgIGlmIChyZXN1bHQg PT0gMCkKKwl7CisJICBzdG9yZV9kYXRhX21lbSAoc2QsIGFkZHIsIDQsIEdS W3JlZzNdKTsKKwkgIEdSW3JlZzNdID0gdG9rZW47CisJfQorICAgICAgZWxz ZQorCXsKKwkgIHN0b3JlX2RhdGFfbWVtIChzZCwgYWRkciwgNCwgdG9rZW4p OworCSAgR1JbcmVnM10gPSB0b2tlbjsKKwl9CisgIAorICAgICAgLyogU2V0 IGNvbmRpdGlvbiBjb2Rlcy4gICovCisgICAgICBQU1cgJj0gfihQU1dfWiB8 IFBTV19TIHwgUFNXX0NZIHwgUFNXX09WKTsKKyAgICAgIFBTVyB8PSAoKHog PyBQU1dfWiA6IDApIHwgKHMgPyBQU1dfUyA6IDApCisJICAgICAgfCAoY3kg PyBQU1dfQ1kgOiAwKSB8IChvdiA/IFBTV19PViA6IDApKTsKKworICAgICAg VFJBQ0VfQUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsKKyAgICB9Cit9CisKKwog Ly8gQ0xSMQogMTAsYmJiLDExMTExMCxSUlJSUiArIGRkZGRkZGRkZGRkZGRk ZGQ6VklJSTo6OmNscjEKICJjbHIxIDxiaXQzPiwgPGRpc3AxNj5bcjxyZWcx Pl0iCkBAIC0yMzEsMTYgKzMzMSwyMSBAQCBycnJyciwxMTExMTEwMDAwMCAr IHd3d3d3LDAxMTAxMDAwMDAwOlhJCiBycnJyciwxMTExMTEsUlJSUlIgKyAw MDAwMDAwMDExMTAwMTAwOklYOjo6Y2xyMQogKnY4NTBlCiAqdjg1MGUxCisq djg1MGUyCisqdjg1MGUydjMKICJjbHIxIHI8cmVnMj4sIFtyPHJlZzE+XSIK IHsKICAgQ09NUEFUXzIgKE9QX0U0MDdFMCAoKSk7CiB9CiAKIAorCiAvLyBD VFJFVAogMDAwMDAxMTExMTEwMDAwMCArIDAwMDAwMDAxMDEwMDAxMDA6WDo6 OmN0cmV0CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2Mwog ImN0cmV0IgogewogICBuaWEgID0gKENUUEMgJiB+MSk7CkBAIC0yNDgsMTAg KzM1MywxNCBAQCBycnJyciwxMTExMTEsUlJSUlIgKyAwMDAwMDAwMDExMTAw MTAwOklYCiAgIFRSQUNFX0JSQU5DSDEgKFBTVyk7CiB9CiAKKworCiAvLyBD TU9WCiBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTEwMDEsY2NjYyww OlhJOjo6Y21vdgogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUy djMKICJjbW92ICVzPGNjY2M+LCByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+ IgogewogICBpbnQgY29uZCA9IGNvbmRpdGlvbl9tZXQgKGNjY2MpOwpAQCAt MjYzLDYgKzM3Miw4IEBAIHJycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAx MTAwMSxjY2NjLDAKIHJycnJyLDExMTExMSxpaWlpaSArIHd3d3d3LDAxMTAw MCxjY2NjLDA6WElJOjo6Y21vdgogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUy Cisqdjg1MGUydjMKICJjbW92ICVzPGNjY2M+LCA8aW1tNT4sIHI8cmVnMj4s IHI8cmVnMz4iCiB7CiAgIGludCBjb25kID0gY29uZGl0aW9uX21ldCAoY2Nj Yyk7CkBAIC0yNzEsNiArMzgyLDggQEAgcnJycnIsMTExMTExLGlpaWlpICsg d3d3d3csMDExMDAwLGNjY2MsMAogICBUUkFDRV9BTFVfUkVTVUxUIChHUlty ZWczXSk7CiB9CiAKKworCiAvLyBDTVAKIHJycnJyLDAwMTExMSxSUlJSUjpJ Ojo6Y21wCiAiY21wIHI8cmVnMT4sIHI8cmVnMj4iCkBAIC0zMDEsNiArNDE0 LDggQEAgcnJycnIsMDEwMDExLGlpaWlpOklJOjo6Y21wCiAwMDAwMDExMDAx LGlpaWlpLEwgKyBMTExMTExMTExMTCxSUlJSUjpYSUlJOjo6ZGlzcG9zZQog KnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJkaXNwb3Nl IDxpbW01PiwgPGxpc3QxMj4iOlJSUlJSID09IDAKICJkaXNwb3NlIDxpbW01 PiwgPGxpc3QxMj4sIFtyZWcxXSIKIHsKQEAgLTMyOSwxMCArNDQ0LDEzIEBA IHJycnJyLDAxMDAxMSxpaWlpaTpJSTo6OmNtcAogfQogCiAKKwogLy8gRElW CiBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTAxMTAwMDAwMDpYSTo6 OmRpdgogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJk aXYgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKIHsKICAgQ09NUEFUXzIg KE9QXzJDMDA3RTAgKCkpOwpAQCAtMzkwLDYgKzUwOCw4IEBAIHJycnJyITAs MDAwMDEwLFJSUlJSITA6STo6OmRpdmgKIHJycnJyLDExMTExMSxSUlJSUiAr IHd3d3d3LDAxMDEwMDAwMDAwOlhJOjo6ZGl2aAogKnY4NTBlCiAqdjg1MGUx Cisqdjg1MGUyCisqdjg1MGUydjMKICJkaXZoIHI8cmVnMT4sIHI8cmVnMj4s IHI8cmVnMz4iCiB7CiAgIENPTVBBVF8yIChPUF8yODAwN0UwICgpKTsKQEAg LTQwMCw2ICs1MjAsOCBAQCBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dyww MTAxMDAwMDAwMDpYCiBycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTAx MDAwMDAxMDpYSTo6OmRpdmh1CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIK Kyp2ODUwZTJ2MwogImRpdmh1IHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4i CiB7CiAgIENPTVBBVF8yIChPUF8yODIwN0UwICgpKTsKQEAgLTQxMCwxMiAr NTMyLDYwIEBAIHJycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMDEwMDAw MDEwOlgKIHJycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMDExMDAwMDEw OlhJOjo6ZGl2dQogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUy djMKICJkaXZ1IHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCiB7CiAgIENP TVBBVF8yIChPUF8yQzIwN0UwICgpKTsKIH0KIAogCisvLyBESVZRCitycnJy ciwxMTExMTEsUlJSUlIgKyB3d3d3dywwMTAxMTExMTEwMDpYSTo6OmRpdnEK Kyp2ODUwZTIKKyp2ODUwZTJ2MworImRpdnEgcjxyZWcxPiwgcjxyZWcyPiwg cjxyZWczPiIKK3sKKyAgdW5zaWduZWQgaW50IHF1b3RpZW50OworICB1bnNp Z25lZCBpbnQgcmVtYWluZGVyOworICB1bnNpZ25lZCBpbnQgZGl2aWRlX2J5 OworICB1bnNpZ25lZCBpbnQgZGl2aWRlX3RoaXM7CisKKyAgVFJBQ0VfQUxV X0lOUFVUMiAoR1JbcmVnMV0sIEdSW3JlZzJdKTsKKworICBkaXZpZGVfYnkg ICA9IEdSW3JlZzFdOworICBkaXZpZGVfdGhpcyA9IEdSW3JlZzJdOworICB2 ODUwX2RpdiAoc2QsIGRpdmlkZV9ieSwgZGl2aWRlX3RoaXMsICZxdW90aWVu dCwgJnJlbWFpbmRlcik7CisgIEdSW3JlZzJdID0gcXVvdGllbnQ7CisgIEdS W3JlZzNdID0gcmVtYWluZGVyOworCisgIFRSQUNFX0FMVV9SRVNVTFQyIChH UltyZWcyXSwgR1JbcmVnM10pOworfQorCisKKy8vIERJVlFVCitycnJyciwx MTExMTEsUlJSUlIgKyB3d3d3dywwMTAxMTExMTExMDpYSTo6OmRpdnF1Cisq djg1MGUyCisqdjg1MGUydjMKKyJkaXZxIHI8cmVnMT4sIHI8cmVnMj4sIHI8 cmVnMz4iCit7CisgIHVuc2lnbmVkIGludCBxdW90aWVudDsKKyAgdW5zaWdu ZWQgaW50IHJlbWFpbmRlcjsKKyAgdW5zaWduZWQgaW50IGRpdmlkZV9ieTsK KyAgdW5zaWduZWQgaW50IGRpdmlkZV90aGlzOworCisgIFRSQUNFX0FMVV9J TlBVVDIgKEdSW3JlZzFdLCBHUltyZWcyXSk7CisgIAorICBkaXZpZGVfYnkg ICA9IEdSW3JlZzFdOworICBkaXZpZGVfdGhpcyA9IEdSW3JlZzJdOworICB2 ODUwX2RpdnUgKHNkLCBkaXZpZGVfYnksIGRpdmlkZV90aGlzLCAmcXVvdGll bnQsICZyZW1haW5kZXIpOworICBHUltyZWcyXSA9IHF1b3RpZW50OworICBH UltyZWczXSA9IHJlbWFpbmRlcjsKKworICBUUkFDRV9BTFVfUkVTVUxUMiAo R1JbcmVnMl0sIEdSW3JlZzNdKTsKK30KKworCiAvLyBFSQogMTAwMDAxMTEx MTEwMDAwMCArIDAwMDAwMDAxMDExMDAwMDA6WDo6OmVpCiAiZWkiCkBAIC00 MjUsNiArNTk1LDc2IEBAIHJycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAx MDExMDAwMDEwOlgKIAogCiAKKy8vIEVJUkVUCiswMDAwMDExMTExMTAwMDAw ICsgMDAwMDAwMDEwMTAwMTAwMDpYOjo6ZWlyZXQKKyJlaXJldCIKKyp2ODUw ZTIKKyp2ODUwZTJ2MworeworICBUUkFDRV9BTFVfSU5QVVQxIChNUE0gJiBN UE1fQVVFKTsKKworICBuaWEgPSBFSVBDOwkvKiBuZXh0IFBDICovCisgIGlm IChNUE0gJiBNUE1fQVVFKQorICAgIHsKKyAgICAgIFBTVyA9IEVJUFNXOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFBTVyA9IChQU1cgJiAoUFNX X05QViB8IFBTV19ETVAgfCBQU1dfSU1QKSkKKwl8IChFSVBTVyAmIH4oUFNX X05QViB8IFBTV19ETVAgfCBQU1dfSU1QKSk7CisgICAgfQorCisgIFRSQUNF X0FMVV9SRVNVTFQxIChQU1cpOworICBUUkFDRV9CUkFOQ0hfUkVTVUxUIChu aWEpOworfQorCisKKworLy8gRkVSRVQKKzAwMDAwMTExMTExMDAwMDAgKyAw MDAwMDAwMTAxMDAxMDEwOlg6OjpmZXJldAorImZlcmV0IgorKnY4NTBlMgor KnY4NTBlMnYzCit7CisgIFRSQUNFX0FMVV9JTlBVVDEgKE1QTSAmIE1QTV9B VUUpOworCisgIG5pYSA9IEZFUEM7CS8qIG5leHQgUEMgKi8KKyAgaWYgKE1Q TSAmIE1QTV9BVUUpCisgICAgeworICAgICAgUFNXID0gRkVQU1c7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgUFNXID0gKFBTVyAmIChQU1dfTlBW IHwgUFNXX0RNUCB8IFBTV19JTVApKQorCXwgKEZFUFNXICYgfihQU1dfTlBW IHwgUFNXX0RNUCB8IFBTV19JTVApKTsKKyAgICB9CisKKyAgVFJBQ0VfQUxV X1JFU1VMVDEgKFBTVyk7CisgIFRSQUNFX0JSQU5DSF9SRVNVTFQgKG5pYSk7 Cit9CisKKworLy8gRkVUUkFQCiswLGJiYmIhMCwwMDAwMTAwMDAwMDpJOjo6 ZmV0cmFwCisiZmV0cmFwIgorKnY4NTBlMgorKnY4NTBlMnYzCit7CisgIFRS QUNFX0FMVV9JTlBVVDAgKCk7CisKKyAgRkVQQyA9IFBDICsgMjsKKyAgRkVQ U1cgPSBQU1c7CisgIEVDUiAmPSB+RUNSX0ZFQ0M7CisgIEVDUiB8PSAoMHgz MCArIGJpdDQpIDw8IDE2OworICBGRUlDID0gMHgzMCArIGJpdDQ7CisgIFBT VyB8PSBQU1dfRVAgfCBQU1dfSUQgfCBQU1dfTlA7CisgIG5pYSA9IDB4MzA7 CS8qIG5leHQgUEMgKi8KKworICBUUkFDRV9BTFVfUkVTVUxUMSAoUFNXKTsK KyAgVFJBQ0VfQlJBTkNIX1JFU1VMVCAobmlhKTsKK30KKworCiAvLyBIQUxU CiAwMDAwMDExMTExMTAwMDAwICsgMDAwMDAwMDEwMDEwMDAwMDpYOjo6aGFs dAogImhhbHQiCkBAIC00MzQsMTAgKzY3NCwzMyBAQCBycnJyciwxMTExMTEs UlJSUlIgKyB3d3d3dywwMTAxMTAwMDAxMDpYCiAKIAogCisvLyBIU0gKK3Jy cnJyLDExMTExMTAwMDAwICsgd3d3d3csMDExMDEwMDAxMTA6WElJOjo6aHNo Cisqdjg1MGUyCisqdjg1MGUydjMKKyJoc2ggcjxyZWcyPiwgcjxyZWczPiIK K3sKKyAgdW5zaWduZWQzMiB2YWx1ZTsKKyAgVFJBQ0VfQUxVX0lOUFVUMSAo R1JbcmVnMl0pOworCisgIHZhbHVlID0gMHhmZmZmICYgR1JbcmVnMl07Cisg IEdSW3JlZzNdID0gR1JbcmVnMl07CisKKyAgUFNXICY9IH4oUFNXX1ogfCBQ U1dfUyB8IFBTV19DWSB8IFBTV19PVik7CisKKyAgaWYgKHZhbHVlID09IDAp IHsgUFNXIHw9IFBTV19aOyBQU1cgfD0gUFNXX0NZOyB9CisgIGlmICh2YWx1 ZSAmIDB4ODAwMDAwMDApIFBTVyB8PSBQU1dfUzsKKworICBUUkFDRV9BTFVf UkVTVUxUMSAoR1JbcmVnM10pOworfQorCisKIC8vIEhTVwogcnJycnIsMTEx MTExMDAwMDAgKyB3d3d3dywwMTEwMTAwMDEwMDpYSUk6Ojpoc3cKICp2ODUw ZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAiaHN3IHI8cmVnMj4s IHI8cmVnMz4iCiB7CiAgIHVuc2lnbmVkMzIgdmFsdWU7CkBAIC00NjksNiAr NzMyLDE2IEBAIHJycnJyITAsMTExMTAsZGRkZGRkICsgZGRkZGRkZGRkZGRk ZGRkLDAKICAgVFJBQ0VfQlJBTkNIMSAoR1JbcmVnMl0pOwogfQogCiswMDAw MDAxMDExMSxSUlJSUiEwICsgaWlpaWlpaWlpaWlpaWlpaSArIElJSUlJSUlJ SUlJSUlJSUk6Vkk6OjpqYXJsMzIKKyp2ODUwZTIKKyp2ODUwZTJ2MworImph cmwgPGltbTMyPiwgcjxyZWcxPiIKK3sKKyAgR1JbcmVnMV0gPSBuaWE7Cisg IG5pYSA9IChjaWEgKyBpbW0zMikgJiB+MTsKKworICBUUkFDRV9CUkFOQ0hf UkVTVUxUIChuaWEpOworfQogCiAKIC8vIEpNUApAQCAtNDc5LDYgKzc1Miwx NSBAQCBycnJyciEwLDExMTEwLGRkZGRkZCArIGRkZGRkZGRkZGRkZGRkZCww CiAgIFRSQUNFX0JSQU5DSDAgKCk7CiB9CiAKKzAwMDAwMTEwMTExLFJSUlJS ICsgaWlpaWlpaWlpaWlpaWlpaSArIElJSUlJSUlJSUlJSUlJSUk6Vkk6Ojpq bXAzMgorKnY4NTBlMgorKnY4NTBlMnYzCisiam1wIDxpbW0zMj5bcjxyZWcx Pl0iCit7CisgIG5pYSA9IChHUltyZWcxXSArIGltbTMyKSAmIH4xOworCisg IFRSQUNFX0JSQU5DSF9SRVNVTFQgKG5pYSk7Cit9CiAKIAogLy8gSlIKQEAg LTQ5MCw2ICs3NzIsMTcgQEAgcnJycnIhMCwxMTExMCxkZGRkZGQgKyBkZGRk ZGRkZGRkZGRkZGQsMAogfQogCiAKKy8vIEpSMzIKKzAwMDAwMDEwMTExLDAw MDAwICsgaWlpaWlpaWlpaWlpaWlpaSArIElJSUlJSUlJSUlJSUlJSUk6Vkk6 OjpqcjMyCisqdjg1MGUyCisqdjg1MGUydjMKKyJqciA8aW1tMzI+Igorewor ICBuaWEgPSAoY2lhICsgaW1tMzIpICYgfjE7CisKKyAgVFJBQ0VfQlJBTkNI X1JFU1VMVCAobmlhKTsKK30KKwogCiAvLyBMRAogcnJycnIsMTExMDAwLFJS UlJSICsgZGRkZGRkZGRkZGRkZGRkZDpWSUk6OjpsZC5iCkBAIC00OTgsNDcg Kzc5MSwzNjggQEAgcnJycnIsMTExMDAwLFJSUlJSICsgZGRkZGRkZGRkZGRk ZGRkZDpWSQogICBDT01QQVRfMiAoT1BfNzAwICgpKTsKIH0KIAorMDAwMDAx MTExMDAsUlJSUlIrd3d3d3csZGRkZGRkZCwwMTAxK2RkZGRkZGRkZGRkZGRk ZGQ6WElWOjo6bGQuYgorImxkLmIgPGRpc3AyMz5bcjxyZWcxPl0sIHI8cmVn Mz4iCisqdjg1MGUydjMKK3sKKyAgdW5zaWduZWQzMiBhZGRyID0gR1JbcmVn MV0gKyBkaXNwMjM7CisgIHVuc2lnbmVkMzIgcmVzdWx0ID0gRVhURU5EOCAo bG9hZF9kYXRhX21lbSAoc2QsIGFkZHIsIDEpKTsKKyAgR1JbcmVnM10gPSBy ZXN1bHQ7CisgIFRSQUNFX0xEIChhZGRyLCByZXN1bHQpOworfQorCiBycnJy ciwxMTEwMDEsUlJSUlIgKyBkZGRkZGRkZGRkZGRkZGQsMDpWSUk6OjpsZC5o CiAibGQuaCA8ZGlzcDE2PltyPHJlZzE+XSwgcjxyZWcyPiIKIHsKICAgQ09N UEFUXzIgKE9QXzcyMCAoKSk7CiB9CiAKKzAwMDAwMTExMTAwLFJSUlJSK3d3 d3d3LGRkZGRkZCwwMDExMStkZGRkZGRkZGRkZGRkZGRkOlhJVjo6OmxkLmgK Kyp2ODUwZTJ2MworImxkLmggPGRpc3AyMz5bcjxyZWcxPl0sIHI8cmVnMz4i Cit7CisgIHVuc2lnbmVkMzIgYWRkciA9IEdSW3JlZzFdICsgZGlzcDIzOwor ICB1bnNpZ25lZDMyIHJlc3VsdCA9IEVYVEVORDE2IChsb2FkX2RhdGFfbWVt IChzZCwgYWRkciwgMikpOworICBHUltyZWczXSA9IHJlc3VsdDsKKyAgVFJB Q0VfTEQgKGFkZHIsIHJlc3VsdCk7Cit9CisKIHJycnJyLDExMTAwMSxSUlJS UiArIGRkZGRkZGRkZGRkZGRkZCwxOlZJSTo6OmxkLncKICJsZC53IDxkaXNw MTY+W3I8cmVnMT5dLCByPHJlZzI+IgogewogICBDT01QQVRfMiAoT1BfMTA3 MjAgKCkpOwogfQogCiswMDAwMDExMTEwMCxSUlJSUit3d3d3dyxkZGRkZGQs MDEwMDErZGRkZGRkZGRkZGRkZGRkZDpYSVY6OjpsZC53Cisqdjg1MGUydjMK KyJsZC53IDxkaXNwMjM+W3I8cmVnMT5dLCByPHJlZzM+IgoreworICB1bnNp Z25lZDMyIGFkZHIgPSBHUltyZWcxXSArIGRpc3AyMzsKKyAgdW5zaWduZWQz MiByZXN1bHQgPSBsb2FkX2RhdGFfbWVtIChzZCwgYWRkciwgNCk7CisgIEdS W3JlZzNdID0gcmVzdWx0OworICBUUkFDRV9MRCAoYWRkciwgcmVzdWx0KTsK K30KKwogcnJycnIhMCwxMTExMCxiLFJSUlJSICsgZGRkZGRkZGRkZGRkZGRk LDE6VklJOjo6bGQuYnUKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4 NTBlMnYzCiAibGQuYnUgPGRpc3AxNj5bcjxyZWcxPl0sIHI8cmVnMj4iCiB7 CiAgIENPTVBBVF8yIChPUF8xMDc4MCAoKSk7CiB9CiAKKzAwMDAwMTExMTAx LFJSUlJSK3d3d3d3LGRkZGRkZGQsMDEwMStkZGRkZGRkZGRkZGRkZGRkOlhJ Vjo6OmxkLmJ1Cisqdjg1MGUydjMKKyJsZC5idSA8ZGlzcDIzPltyPHJlZzE+ XSwgcjxyZWczPiIKK3sgCisgIHVuc2lnbmVkMzIgYWRkciA9IEdSW3JlZzFd ICsgZGlzcDIzOworICB1bnNpZ25lZDMyIHJlc3VsdCA9IGxvYWRfZGF0YV9t ZW0gKHNkLCBhZGRyLCAxKTsKKyAgR1JbcmVnM10gPSByZXN1bHQ7CisgIFRS QUNFX0xEIChhZGRyLCByZXN1bHQpOworfQorCiBycnJyciEwLDExMTExMSxS UlJSUiArIGRkZGRkZGRkZGRkZGRkZCwxOlZJSTo6OmxkLmh1CiAqdjg1MGUK ICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogImxkLmh1IDxkaXNwMTY+ W3I8cmVnMT5dLCByPHJlZzI+IgogewogICBDT01QQVRfMiAoT1BfMTA3RTAg KCkpOwogfQogCiswMDAwMDExMTEwMSxSUlJSUit3d3d3dyxkZGRkZGQsMDAx MTErZGRkZGRkZGRkZGRkZGRkZDpYSVY6OjpsZC5odQorKnY4NTBlMnYzCisi bGQuaHUgPGRpc3AyMz5bcjxyZWcxPl0sIHI8cmVnMz4iCit7CisgIHVuc2ln bmVkMzIgYWRkciA9IEdSW3JlZzFdICsgZGlzcDIzOworICB1bnNpZ25lZDMy IHJlc3VsdCA9IGxvYWRfZGF0YV9tZW0gKHNkLCBhZGRyLCAyKTsKKyAgR1Jb cmVnM10gPSByZXN1bHQ7CisgIFRSQUNFX0xEIChhZGRyLCByZXN1bHQpOwor fQorCisKIAogLy8gTERTUgogcmVnSUQsMTExMTExLFJSUlJSICsgMDAwMDAw MDAwMDEwMDAwMDpJWDo6Omxkc3IKICJsZHNyIHI8cmVnMT4sIHM8cmVnSUQ+ IgogeworICB1aW50MzIgc3JlZyA9IEdSW3JlZzFdOwogICBUUkFDRV9BTFVf SU5QVVQxIChHUltyZWcxXSk7CiAgIAotICBpZiAoJlBTVyA9PSAmU1JbcmVn SURdKQotICAgIFBTVyA9IChHUltyZWcxXSAmIChDUFUpLT5wc3dfbWFzayk7 CisgICBpZiAoKGlkZWNvZGVfaXNzdWUgPT0gaWRlY29kZV92ODUwZTJfaXNz dWUKKyAgICAgICB8fCBpZGVjb2RlX2lzc3VlID09IGlkZWNvZGVfdjg1MGUy djNfaXNzdWUpCisgICAgICAmJiByZWdJRCA8IDI4KQorICAgIHsKKyAgICAg IGludCBwcm90ZWN0X3AgPSAoUFNXICYgUFNXX05QVikgPyAxIDogMDsKKwor ICAgICAgCisgICAgICBzd2l0Y2ggKEJTRUwgJiAweGZmZmYpCisJeworCWNh c2UgMHgwMDAwOgorCSAgaWYgKChQU1cgJiBQU1dfTlBWKQorCSAgICAgICYm ICgocmVnSUQgPj0gOCAmJiByZWdJRCA8PSAxMikKKwkJICB8fCAocmVnSUQg Pj0gMjIgJiYgcmVnSUQgPD0gMjcpCisJCSAgfHwgcmVnSUQgPT0gUFNXX1JF R05PKSkKKwkgICAgeworCSAgICAgIHByb3RlY3RfcCA9IDA7CisJICAgIH0K KwkgIGJyZWFrOworCWNhc2UgMHgxMDAwOgkvKiBNUFUwICovCisJICBicmVh azsKKwljYXNlIDB4MTAwMToJLyogTVBVMSAqLworCSAgYnJlYWs7CisJY2Fz ZSAweDIwMDA6CS8qIEZQVSAqLworCSAgaWYgKChQU1cgJiBQU1dfTlBWKQor CSAgICAgICYmICgoLyogcmVnSUQgPj0gMCAmJiAqLyByZWdJRCA8PSA1KQor CQkgIHx8IHJlZ0lEID09IDggCisJCSAgfHwgcmVnSUQgPT0gOSAKKwkJICB8 fCByZWdJRCA9PSAxMCAKKwkJICB8fCAocmVnSUQgPj0gMTEgJiYgcmVnSUQg PD0gMjYpKSkKKwkgICAgeworCSAgICAgIHByb3RlY3RfcCA9IDA7CisJICAg IH0KKwkgIGJyZWFrOworCWNhc2UgMHhmZjAwOgorCSAgaWYgKChQU1cgJiBQ U1dfTlBWKQorCSAgICAgICAmJiAocmVnSUQgPT0gNiAKKwkJICAgfHwgcmVn SUQgPT0gNyAKKwkJICAgfHwgcmVnSUQgPT0gOCAKKwkJICAgfHwgcmVnSUQg PT0gOSAKKwkJICAgfHwgcmVnSUQgPT0gMTAgCisJCSAgIHx8IChyZWdJRCA+ PSAxMSAmJiByZWdJRCA8PSAxNSkKKwkJICAgfHwgcmVnSUQgPT0gMTggCisJ CSAgIHx8IHJlZ0lEID09IDE5IAorCQkgICB8fCAocmVnSUQgPj0gMjEgJiYg cmVnSUQgPD0gMjcpKSkKKwkgICAgeworCSAgICAgIHByb3RlY3RfcCA9IDA7 CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgMHhmZmZmOgorCSAgaWYgKChQ U1cgJiBQU1dfTlBWKQorCSAgICAgICAmJiAocmVnSUQgPT0gNiAKKwkJICAg fHwgcmVnSUQgPT0gNyAKKwkJICAgfHwgcmVnSUQgPT0gOCAKKwkJICAgfHwg cmVnSUQgPT0gOSAKKwkJICAgfHwgcmVnSUQgPT0gMTAgCisJCSAgIHx8IHJl Z0lEID09IDExIAorCQkgICB8fCByZWdJRCA9PSAxMiAKKwkJICAgfHwgcmVn SUQgPT0gMTUgCisJCSAgIHx8IHJlZ0lEID09IDE4IAorCQkgICB8fCByZWdJ RCA9PSAxOSAKKwkJICAgfHwgKHJlZ0lEID49IDIxICYmIHJlZ0lEIDw9IDI3 KSkpCisJICAgIHsKKwkgICAgICBwcm90ZWN0X3AgPSAwOworCSAgICB9CisJ ICBicmVhazsKKwl9CisKKyAgICAgIGlmICghcHJvdGVjdF9wKQorCXsKKwkg IHN3aXRjaCAoQlNFTCAmIDB4ZmZmZikKKwkgICAgeworCSAgICBjYXNlIDB4 MDAwMDoKKwkgICAgY2FzZSAweGZmMDA6CS8qIHVzZXIwIGJhbmsgKi8KKwkg ICAgY2FzZSAweGZmZmY6CS8qIHVzZXIxIGJhbmsgKi8KKwkgICAgICBpZihy ZWdJRCA9PSBQU1dfUkVHTk8pCisJCXsKKwkJICBTUltyZWdJRF0gPSBzcmVn ICYgKChQU1cgJiBQU1dfTlBWKSA/IDB4ZiA6IH4wKTsKKwkJfQorCSAgICAg IGVsc2UKKwkJeworCQkgIFNSW3JlZ0lEXSA9IHNyZWc7CisJCX0KKwkgICAg ICBicmVhazsKKwkgICAgY2FzZSAweDEwMDA6CisJICAgICAgTVBVMF9TUlty ZWdJRF0gPSBzcmVnOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4MTAw MToKKwkgICAgICBpZiAocmVnSUQgPT0gTVBDX1JFR05PKQorCQl7CisJCSAg UFBDICY9IH5QUENfUFBFOworCQkgIFNQQUwgJj0gflNQQUxfU1BFOworCQkg IElQQTBMICY9IH5JUEFfSVBFOworCQkgIElQQTFMICY9IH5JUEFfSVBFOwor CQkgIElQQTJMICY9IH5JUEFfSVBFOworCQkgIElQQTNMICY9IH5JUEFfSVBF OworCQkgIERQQTBMICY9IH5EUEFfRFBFOworCQkgIERQQTFMICY9IH5EUEFf RFBFOworCQkgIERDQyAmPSB+KERDQ19EQ0UwIHwgRENDX0RDRTEpOworCQl9 CisJICAgICAgZWxzZQorCQl7CisJCSAgTVBVMV9TUltyZWdJRF0gPSBzcmVn OworCQl9CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMHgyMDAwOgkvKiBG UFUgKi8KKwkgICAgICBpZiAocmVnSUQgPT0gRlBTVF9SRUdOTykKKwkJewor CQkgIHVuc2lnbmVkIGludCB2YWwgPSBGUFNSICYgfihGUFNSX1BSIHwgRlBT Ul9YQyB8IEZQU1JfWFApOworCSAgICAgIAorCQkgIHZhbCB8PSAoKHNyZWcg JiBGUFNUX1BSKSA/IEZQU1JfUFIgOiAwKQorCQkgICAgfCAoKHNyZWcgJiBG UFNUX1hDRSkgPyBGUFNSX1hDRSA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQ U1RfWENWKSA/IEZQU1JfWENWIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBT VF9YQ1opID8gRlBTUl9YQ1ogOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNU X1hDTykgPyBGUFNSX1hDTyA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQU1Rf WENVKSA/IEZQU1JfWENVIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBTVF9Y Q0kpID8gRlBTUl9YQ0kgOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNUX1hQ VikgPyBGUFNSX1hQViA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQU1RfWFBa KSA/IEZQU1JfWFBaIDogMCkKKwkJICAgIHwgKChzcmVnICYgRlBTVF9YUE8p ID8gRlBTUl9YUE8gOiAwKQorCQkgICAgfCAoKHNyZWcgJiBGUFNUX1hQVSkg PyBGUFNSX1hQVSA6IDApCisJCSAgICB8ICgoc3JlZyAmIEZQU1RfWFBJKSA/ IEZQU1JfWFBJIDogMCk7CisJCSAgRlBTUiA9IHZhbDsKKwkJfQorCSAgICAg IGVsc2UgaWYgKHJlZ0lEID09IEZQQ0ZHX1JFR05PKQorCQl7CisJCSAgdW5z aWduZWQgaW50IHZhbCA9IEZQU1IgJiB+KEZQU1JfUk0gfCBGUFNSX1hFKTsK KworCQkgIHZhbCB8PSAoKChzcmVnICYgRlBDRkdfUk0pID4+IDcpIDw8IDE4 KQorCQkgICAgfCAoKHNyZWcgJiBGUENGR19YRVYpID8gRlBTUl9YRVYgOiAw KQorCQkgICAgfCAoKHNyZWcgJiBGUENGR19YRVopID8gRlBTUl9YRVogOiAw KQorCQkgICAgfCAoKHNyZWcgJiBGUENGR19YRU8pID8gRlBTUl9YRU8gOiAw KQorCQkgICAgfCAoKHNyZWcgJiBGUENGR19YRVUpID8gRlBTUl9YRVUgOiAw KQorCQkgICAgfCAoKHNyZWcgJiBGUENGR19YRUkpID8gRlBTUl9YRUkgOiAw KTsKKwkJICBGUFNSID0gdmFsOworCQl9CisKKwkgICAgICBGUFVfU1JbcmVn SURdID0gc3JlZzsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9 CiAgIGVsc2UKLSAgICBTUltyZWdJRF0gPSBHUltyZWcxXTsKKyAgICB7Cisg ICAgICBTUltyZWdJRF0gPSBzcmVnOworICAgIH0KKyAKKyAgVFJBQ0VfQUxV X1JFU1VMVCAoc3JlZyk7Cit9CisKKworCisvLyBNQUMKK3JycnJyLDExMTEx MSxSUlJSUiArIHd3d3csMDAxMTExMCxtbW1tLDA6WEk6OjptYWMKKyp2ODUw ZTIKKyp2ODUwZTJ2MworIm1hYyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzNl PiwgcjxyZWc0ZT4iCit7CisgIHVuc2lnbmVkIGxvbmcgb3AwOworICB1bnNp Z25lZCBsb25nIG9wMTsKKyAgdW5zaWduZWQgbG9uZyBvcDI7CisgIHVuc2ln bmVkIGxvbmcgb3AyaGk7CisgIHVuc2lnbmVkIGxvbmcgbG87CisgIHVuc2ln bmVkIGxvbmcgbWlkMTsKKyAgdW5zaWduZWQgbG9uZyBtaWQyOworICB1bnNp Z25lZCBsb25nIGhpOworICB1bnNpZ25lZCBsb25nIFJkTG87CisgIHVuc2ln bmVkIGxvbmcgUmRIaTsKKyAgaW50ICAgICAgICAgICBjYXJyeTsKKyAgYmZk X2Jvb2xlYW4gc2lnbjsKKworICBvcDAgPSBHUltyZWcxXTsKKyAgb3AxID0g R1JbcmVnMl07CisgIG9wMiA9IEdSW3JlZzNlXTsKKyAgb3AyaGkgPSBHUlty ZWczZSsxXTsKKworICBUUkFDRV9BTFVfSU5QVVQ0IChvcDAsIG9wMSwgb3Ay LCBvcDJoaSk7CisKKyAgc2lnbiA9IChvcDAgXiBvcDEpICYgMHg4MDAwMDAw MDsKKwkgIAorICBpZiAoKChzaWduZWQgbG9uZykgb3AwKSA8IDApCisgICAg b3AwID0gLSBvcDA7CisJICAKKyAgaWYgKCgoc2lnbmVkIGxvbmcpIG9wMSkg PCAwKQorICAgIG9wMSA9IC0gb3AxOworICAgICAgCisgIC8qIFdlIGNhbiBz cGxpdCB0aGUgMzJ4MzIgaW50byBmb3VyIDE2eDE2IG9wZXJhdGlvbnMuIFRo aXMgZW5zdXJlcworICAgICB0aGF0IHdlIGRvIG5vdCBsb3NlIHByZWNpc2lv biBvbiAzMmJpdCBvbmx5IGhvc3RzOiAqLworICBsbyAgID0gKCAob3AwICAg ICAgICAmIDB4RkZGRikgKiAgKG9wMSAgICAgICAgJiAweEZGRkYpKTsKKyAg bWlkMSA9ICggKG9wMCAgICAgICAgJiAweEZGRkYpICogKChvcDEgPj4gMTYp ICYgMHhGRkZGKSk7CisgIG1pZDIgPSAoKChvcDAgPj4gMTYpICYgMHhGRkZG KSAqICAob3AxICAgICAgICAmIDB4RkZGRikpOworICBoaSAgID0gKCgob3Aw ID4+IDE2KSAmIDB4RkZGRikgKiAoKG9wMSA+PiAxNikgJiAweEZGRkYpKTsK KyAgCisgIC8qIFdlIG5vdyBuZWVkIHRvIGFkZCBhbGwgb2YgdGhlc2UgcmVz dWx0cyB0b2dldGhlciwgdGFraW5nIGNhcmUKKyAgICAgdG8gcHJvcG9nYXRl IHRoZSBjYXJyaWVzIGZyb20gdGhlIGFkZGl0aW9uczogKi8KKyAgUmRMbyA9 IEFkZDMyIChsbywgKG1pZDEgPDwgMTYpLCAmIGNhcnJ5KTsKKyAgUmRIaSA9 IGNhcnJ5OworICBSZExvID0gQWRkMzIgKFJkTG8sIChtaWQyIDw8IDE2KSwg JiBjYXJyeSk7CisgIFJkSGkgKz0gKGNhcnJ5ICsgKChtaWQxID4+IDE2KSAm IDB4RkZGRikgKyAoKG1pZDIgPj4gMTYpICYgMHhGRkZGKSArIGhpKTsKKwor ICBpZiAoc2lnbikKKyAgICB7CisgICAgICBSZExvID0gfiBSZExvOworICAg ICAgUmRIaSA9IH4gUmRIaTsKKyAgICAgIGlmIChSZExvID09IDB4RkZGRkZG RkYpCisJeworCSAgUmRMbyA9IDA7CisJICBSZEhpICs9IDE7CisJfQorICAg ICAgZWxzZQorCVJkTG8gKz0gMTsKKyAgICB9CisKKyAgUmRMbyA9IEFkZDMy IChSZExvLCBvcDIsICYgY2FycnkpOworICBSZEhpICs9IGNhcnJ5ICsgb3Ay aGk7IAorCisgIC8qIFN0b3JlIHRoZSByZXN1bHQgYW5kIGNvbmRpdGlvbiBj b2Rlcy4gICovCisgIEdSW3JlZzRlXSA9IFJkTG87CisgIEdSW3JlZzRlICsg MSBdID0gUmRIaTsKKworICBUUkFDRV9BTFVfUkVTVUxUMiAoUmRMbywgUmRI aSk7Cit9CisKKworCisvLyBNQUNVCitycnJyciwxMTExMTEsUlJSUlIgKyB3 d3d3LDAwMTExMTEsbW1tbSwwOlhJOjo6bWFjdQorKnY4NTBlMgorKnY4NTBl MnYzCisibWFjdSByPHJlZzE+LCByPHJlZzI+LCByPHJlZzNlPiwgcjxyZWc0 ZT4iCit7CisgIHVuc2lnbmVkIGxvbmcgb3AwOworICB1bnNpZ25lZCBsb25n IG9wMTsKKyAgdW5zaWduZWQgbG9uZyBvcDI7CisgIHVuc2lnbmVkIGxvbmcg b3AyaGk7CisgIHVuc2lnbmVkIGxvbmcgbG87CisgIHVuc2lnbmVkIGxvbmcg bWlkMTsKKyAgdW5zaWduZWQgbG9uZyBtaWQyOworICB1bnNpZ25lZCBsb25n IGhpOworICB1bnNpZ25lZCBsb25nIFJkTG87CisgIHVuc2lnbmVkIGxvbmcg UmRIaTsKKyAgaW50ICAgICAgICAgICBjYXJyeTsKKyAgCisgIG9wMCA9IEdS W3JlZzFdOworICBvcDEgPSBHUltyZWcyXTsKKyAgb3AyID0gR1JbcmVnM2Vd OworICBvcDJoaSA9IEdSW3JlZzNlICsgMV07CisKKyAgVFJBQ0VfQUxVX0lO UFVUNCAob3AwLCBvcDEsIG9wMiwgb3AyaGkpOworCisgIC8qIFdlIGNhbiBz cGxpdCB0aGUgMzJ4MzIgaW50byBmb3VyIDE2eDE2IG9wZXJhdGlvbnMuIFRo aXMgZW5zdXJlcworICAgICB0aGF0IHdlIGRvIG5vdCBsb3NlIHByZWNpc2lv biBvbiAzMmJpdCBvbmx5IGhvc3RzOiAqLworICBsbyAgID0gKCAob3AwICAg ICAgICAmIDB4RkZGRikgKiAgKG9wMSAgICAgICAgJiAweEZGRkYpKTsKKyAg bWlkMSA9ICggKG9wMCAgICAgICAgJiAweEZGRkYpICogKChvcDEgPj4gMTYp ICYgMHhGRkZGKSk7CisgIG1pZDIgPSAoKChvcDAgPj4gMTYpICYgMHhGRkZG KSAqICAob3AxICAgICAgICAmIDB4RkZGRikpOworICBoaSAgID0gKCgob3Aw ID4+IDE2KSAmIDB4RkZGRikgKiAoKG9wMSA+PiAxNikgJiAweEZGRkYpKTsK ICAgCi0gIFRSQUNFX0FMVV9SRVNVTFQgKFNSW3JlZ0lEXSk7CisgIC8qIFdl IG5vdyBuZWVkIHRvIGFkZCBhbGwgb2YgdGhlc2UgcmVzdWx0cyB0b2dldGhl ciwgdGFraW5nIGNhcmUKKyAgICAgdG8gcHJvcG9nYXRlIHRoZSBjYXJyaWVz IGZyb20gdGhlIGFkZGl0aW9uczogKi8KKyAgUmRMbyA9IEFkZDMyIChsbywg KG1pZDEgPDwgMTYpLCAmIGNhcnJ5KTsKKyAgUmRIaSA9IGNhcnJ5OworICBS ZExvID0gQWRkMzIgKFJkTG8sIChtaWQyIDw8IDE2KSwgJiBjYXJyeSk7Cisg IFJkSGkgKz0gKGNhcnJ5ICsgKChtaWQxID4+IDE2KSAmIDB4RkZGRikgKyAo KG1pZDIgPj4gMTYpICYgMHhGRkZGKSArIGhpKTsKKworICBSZExvID0gQWRk MzIgKFJkTG8sIG9wMiwgJiBjYXJyeSk7CisgIFJkSGkgKz0gY2FycnkgKyBv cDJoaTsgCisKKyAgLyogU3RvcmUgdGhlIHJlc3VsdCBhbmQgY29uZGl0aW9u IGNvZGVzLiAgKi8KKyAgR1JbcmVnNGVdID0gUmRMbzsKKyAgR1JbcmVnNGUr MV0gPSBSZEhpOworCisgIFRSQUNFX0FMVV9SRVNVTFQyIChSZExvLCBSZEhp KTsKIH0KIAogCkBAIC01NTIsNyArMTE2Niw2IEBAIHJycnJyITAsMDAwMDAw LFJSUlJSOkk6Ojptb3YKICAgVFJBQ0VfQUxVX1JFU1VMVCAoR1JbcmVnMl0p OwogfQogCi0KIHJycnJyITAsMDEwMDAwLGlpaWlpOklJOjo6bW92CiAibW92 IDxpbW01PiwgcjxyZWcyPiIKIHsKQEAgLTU2Miw2ICsxMTc1LDggQEAgcnJy cnIhMCwwMTAwMDAsaWlpaWk6SUk6Ojptb3YKIDAwMDAwMTEwMDAxLFJSUlJS ICsgaWlpaWlpaWlpaWlpaWlpaSArIElJSUlJSUlJSUlJSUlJSUk6Vkk6Ojpt b3YKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAibW92 IDxpbW0zMj4sIHI8cmVnMT4iCiB7CiAgIFNBVkVfMjsKQEAgLTU5Niw2ICsx MjExLDggQEAgcnJycnIhMCwxMTAwMTAsUlJSUlIgKyBpaWlpaWlpaWlpaWlp aWlpOgogcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDEwMDAxMDAwMDA6 WEk6OjptdWwKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYz CiAibXVsIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCiB7CiAgIENPTVBB VF8yIChPUF8yMjAwN0UwICgpKTsKQEAgLTYwNCw2ICsxMjIxLDggQEAgcnJy cnIsMTExMTExLFJSUlJSICsgd3d3d3csMDEwMDAxMDAwMDA6WAogcnJycnIs MTExMTExLGlpaWlpICsgd3d3d3csMDEwMDEsSUlJSSwwMDpYSUk6OjptdWwK ICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAibXVsIDxp bW05PiwgcjxyZWcyPiwgcjxyZWczPiIKIHsKICAgQ09NUEFUXzIgKE9QXzI0 MDA3RTAgKCkpOwpAQCAtNjM4LDYgKzEyNTcsOCBAQCBycnJyciEwLDExMDEx MSxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6CiBycnJyciwxMTExMTEsUlJS UlIgKyB3d3d3dywwMTAwMDEwMDAxMDpYSTo6Om11bHUKICp2ODUwZQogKnY4 NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAibXVsdSByPHJlZzE+LCByPHJl ZzI+LCByPHJlZzM+IgogewogICBDT01QQVRfMiAoT1BfMjIyMDdFMCAoKSk7 CkBAIC02NDYsNiArMTI2Nyw4IEBAIHJycnJyLDExMTExMSxSUlJSUiArIHd3 d3d3LDAxMDAwMTAwMDEwOlgKIHJycnJyLDExMTExMSxpaWlpaSArIHd3d3d3 LDAxMDAxLElJSUksMTA6WElJOjo6bXVsdQogKnY4NTBlCiAqdjg1MGUxCisq djg1MGUyCisqdjg1MGUydjMKICJtdWx1IDxpbW05PiwgcjxyZWcyPiwgcjxy ZWczPiIKIHsKICAgQ09NUEFUXzIgKE9QXzI0MjA3RTAgKCkpOwpAQCAtNjgx LDYgKzEzMDQsOCBAQCBycnJyciwwMDAwMDEsUlJSUlI6STo6Om5vdAogcnJy cnIsMTExMTExLFJSUlJSICsgMDAwMDAwMDAxMTEwMDAxMDpJWDo6Om5vdDEK ICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAibm90MSBy PHJlZzI+LCByPHJlZzE+IgogewogICBDT01QQVRfMiAoT1BfRTIwN0UwICgp KTsKQEAgLTcxMCw2ICsxMzM1LDggQEAgcnJycnIsMTEwMTAwLFJSUlJSICsg aWlpaWlpaWlpaWlpaWlpaTpWSQogMDAwMDAxMTExMCxpaWlpaSxMICsgTExM TExMTExMTEwsMDAwMDE6WElJSTo6OnByZXBhcmUKICp2ODUwZQogKnY4NTBl MQorKnY4NTBlMgorKnY4NTBlMnYzCiAicHJlcGFyZSA8bGlzdDEyPiwgPGlt bTU+IgogewogICBpbnQgIGk7CkBAIC03MzUsNiArMTM2Miw4IEBAIHJycnJy LDExMDEwMCxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMTEx MTAsaWlpaWksTCArIExMTExMTExMTExMLDAwMDExOlhJSUk6OjpwcmVwYXJl MDAKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAicHJl cGFyZSA8bGlzdDEyPiwgPGltbTU+LCBzcCIKIHsKICAgQ09NUEFUXzIgKE9Q XzMwNzgwICgpKTsKQEAgLTc0Myw2ICsxMzcyLDggQEAgcnJycnIsMTEwMTAw LFJSUlJSICsgaWlpaWlpaWlpaWlpaWlpaTpWSQogMDAwMDAxMTExMCxpaWlp aSxMICsgTExMTExMTExMTEwsMDEwMTEgKyBpaWlpaWlpaWlpaWlpaWlpOlhJ SUk6OjpwcmVwYXJlMDEKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4 NTBlMnYzCiAicHJlcGFyZSA8bGlzdDEyPiwgPGltbTU+LCA8dWltbTE2PiIK IHsKICAgQ09NUEFUXzIgKE9QX0IwNzgwICgpKTsKQEAgLTc1MSw2ICsxMzgy LDggQEAgcnJycnIsMTEwMTAwLFJSUlJSICsgaWlpaWlpaWlpaWlpaWlpaTpW SQogMDAwMDAxMTExMCxpaWlpaSxMICsgTExMTExMTExMTEwsMTAwMTEgKyBp aWlpaWlpaWlpaWlpaWlpOlhJSUk6OjpwcmVwYXJlMTAKICp2ODUwZQogKnY4 NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAicHJlcGFyZSA8bGlzdDEyPiwg PGltbTU+LCA8dWltbTE2PiIKIHsKICAgQ09NUEFUXzIgKE9QXzEzMDc4MCAo KSk7CkBAIC03NTksNiArMTM5Miw4IEBAIHJycnJyLDExMDEwMCxSUlJSUiAr IGlpaWlpaWlpaWlpaWlpaWk6VkkKIDAwMDAwMTExMTAsaWlpaWksTCArIExM TExMTExMTExMLDExMDExICsgaWlpaWlpaWlpaWlpaWlpaSArIGRkZGRkZGRk ZGRkZGRkZGQ6WElJSTo6OnByZXBhcmUxMQogKnY4NTBlCiAqdjg1MGUxCisq djg1MGUyCisqdjg1MGUydjMKICJwcmVwYXJlIDxsaXN0MTI+LCA8aW1tNT4s IDx1aW1tMzI+IgogewogICBDT01QQVRfMiAoT1BfMUIwNzgwICgpKTsKQEAg LTgwMywxMiArMTQzOCwyMyBAQCBycnJyciwwMTAxMDEsaWlpaWk6SUk6Ojpz YXIKICAgQ09NUEFUXzEgKE9QXzJBMCAoKSk7CiB9CiAKK3JycnJyLDExMTEx MSxSUlJSUiArIHd3d3d3LDAwMDEwMTAwMDEwOlhJOjo6c2FyCisqdjg1MGUy Cisqdjg1MGUydjMKKyJzYXIgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIK K3sKKyAgVFJBQ0VfQUxVX0lOUFVUMiAoR1JbcmVnMV0sIEdSW3JlZzJdKTsK KyAgdjg1MF9zYXIoc2QsIEdSW3JlZzFdLCBHUltyZWcyXSwgJkdSW3JlZzNd KTsgCisgIFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CiAKIAog Ly8gU0FTRgogcnJycnIsMTExMTExMCxjY2NjICsgMDAwMDAwMTAwMDAwMDAw MDpJWDo6OnNhc2YKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBl MnYzCiAic2FzZiAlczxjY2NjPiwgcjxyZWcyPiIKIHsKICAgQ09NUEFUXzIg KE9QXzIwMDA3RTAgKCkpOwpAQCAtODE2LDcgKzE0NjIsNiBAQCBycnJyciwx MTExMTEwLGNjY2MgKyAwMDAwMDAxMDAwMDAwMDAwOklYCiAKIAogCi0KIC8v IFNBVEFERAogcnJycnIhMCwwMDAxMTAsUlJSUlI6STo6OnNhdGFkZAogInNh dGFkZCByPHJlZzE+LCByPHJlZzI+IgpAQCAtODMwLDYgKzE0NzUsMTYgQEAg cnJycnIhMCwwMTAwMDEsaWlpaWk6SUk6OjpzYXRhZGQKICAgQ09NUEFUXzEg KE9QXzIyMCAoKSk7CiB9CiAKK3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3 LDAxMTEwMTExMDEwOlhJOjo6c2F0YWRkCisqdjg1MGUyCisqdjg1MGUydjMK KyJzYXRhZGQgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgVFJB Q0VfQUxVX0lOUFVUMiAoR1JbcmVnMV0sIEdSW3JlZzJdKTsKKyAgdjg1MF9z YXRhZGQgKHNkLCBHUltyZWcxXSwgR1JbcmVnMl0sICZHUltyZWczXSk7Cisg IFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisKIAogCiAvLyBT QVRTVUIKQEAgLTgzOSw2ICsxNDk0LDE2IEBAIHJycnJyITAsMDAwMTAxLFJS UlJSOkk6OjpzYXRzdWIKICAgQ09NUEFUXzEgKE9QX0EwICgpKTsKIH0KIAor cnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMDExMTAwMTEwMTA6WEk6Ojpz YXRzdWIKKyp2ODUwZTIKKyp2ODUwZTJ2MworInNhdHN1YiByPHJlZzE+LCBy PHJlZzI+LCByPHJlZzM+IgoreworICBUUkFDRV9BTFVfSU5QVVQyIChHUlty ZWcxXSwgR1JbcmVnMl0pOworICB2ODUwX3NhdHN1YiAoc2QsIEdSW3JlZzFd LCBHUltyZWcyXSwgJkdSW3JlZzNdKTsKKyAgVFJBQ0VfQUxVX1JFU1VMVDEg KEdSW3JlZzNdKTsKK30KKwogCiAKIC8vIFNBVFNVQkkKQEAgLTg1OSw2ICsx NTI0LDIzNCBAQCBycnJyciEwLDAwMDEwMCxSUlJSUjpJOjo6c2F0c3Vicgog CiAKIAorLy9TQkYKK3JycnJyLDExMTExMSxSUlJSUiArIHd3d3d3LDAxMTEw MCxjY2NjITEzLDA6WEk6OjpzYmYKKyp2ODUwZTIKKyp2ODUwZTJ2MworInNi ZiAlczxjY2NjPiwgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAg aW50IGNvbmQgPSBjb25kaXRpb25fbWV0IChjY2NjKTsKKyAgVFJBQ0VfQUxV X0lOUFVUMyAoY29uZCwgR1JbcmVnMV0sIEdSW3JlZzJdKTsKKyAgR1JbcmVn M10gPSBHUltyZWcyXSAtIEdSW3JlZzFdIC0gKGNvbmQgPyAxIDogMCk7Cisg IFRSQUNFX0FMVV9SRVNVTFQxIChHUltyZWczXSk7Cit9CisKKworCisvLyBT Q0gwTAorcnJycnIsMTExMTExMDAwMDAgKyB3d3d3dywwMTEwMTEwMDEwMDpJ WDo6OnNjaDBsCisqdjg1MGUyCisqdjg1MGUydjMKKyJzY2gwbCByPHJlZzI+ LCByPHJlZzM+IgoreworICB1bnNpZ25lZCBpbnQgcG9zLCBvcDA7CisKKyAg VFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVnMl0pOworCisgIG9wMCA9IEdSW3Jl ZzJdOworCisgIGlmIChvcDAgPT0gMHhmZmZmZmZmZikKKyAgICB7CisgICAg ICBQU1cgJj0gflBTV19DWTsKKyAgICAgIFBTVyAmPSB+UFNXX09WOworICAg ICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyB8PSBQU1dfWjsKKyAgICAg IHBvcyA9IDA7CisgICAgfQorICBlbHNlIGlmIChvcDAgPT0gMHhmZmZmZmZm ZSkKKyAgICB7CisgICAgICBQU1cgfD0gUFNXX0NZOworICAgICAgUFNXICY9 IH5QU1dfT1Y7CisgICAgICBQU1cgJj0gflBTV19TOworICAgICAgUFNXICY9 IH5QU1dfWjsKKyAgICAgIHBvcyA9IDMyOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIHBvcyA9IDE7CisgICAgICB3aGlsZSAob3AwICYgMHg4MDAw MDAwMCkgCisJeworCSAgb3AwIDw8PSAxOyAKKwkgIHBvcysrOworCX0KKyAg ICAgIFBTVyAmPSB+UFNXX0NZOworICAgICAgUFNXICY9IH5QU1dfT1Y7Cisg ICAgICBQU1cgJj0gflBTV19TOworICAgICAgUFNXICY9IH5QU1dfWjsKKyAg ICB9CisKKyAgR1JbcmVnM10gPSBwb3M7CisKKyAgVFJBQ0VfQUxVX1JFU1VM VDEgKEdSW3JlZzNdKTsKK30KKworCisKKy8vIFNDSDBSCitycnJyciwxMTEx MTEwMDAwMCArIHd3d3d3LDAxMTAxMTAwMDAwOklYOjo6c2NoMHIKKyp2ODUw ZTIKKyp2ODUwZTJ2MworInNjaDByIHI8cmVnMj4sIHI8cmVnMz4iCit7Cisg IHVuc2lnbmVkIGludCBwb3MsIG9wMDsKKworICBUUkFDRV9BTFVfSU5QVVQx IChHUltyZWcyXSk7CisKKyAgb3AwID0gR1JbcmVnMl07CisKKyAgaWYgKG9w MCA9PSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIFBTVyAmPSB+UFNXX0NZ OworICAgICAgUFNXICY9IH5QU1dfT1Y7CisgICAgICBQU1cgJj0gflBTV19T OworICAgICAgUFNXIHw9IFBTV19aOworICAgICAgcG9zID0gMDsKKyAgICB9 CisgIGVsc2UgaWYgKG9wMCA9PSAweDdmZmZmZmZmKQorICAgIHsKKyAgICAg IFBTVyB8PSBQU1dfQ1k7CisgICAgICBQU1cgJj0gflBTV19PVjsKKyAgICAg IFBTVyAmPSB+UFNXX1M7CisgICAgICBQU1cgJj0gflBTV19aOworICAgICAg cG9zID0gMzI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcG9zID0g MTsKKyAgICAgIHdoaWxlIChvcDAgJiAweDAwMDAwMDAxKSAKKwl7CisJICBv cDAgPj49IDE7IAorCSAgcG9zKys7CisJfQorICAgICAgUFNXICY9IH5QU1df Q1k7CisgICAgICBQU1cgJj0gflBTV19PVjsKKyAgICAgIFBTVyAmPSB+UFNX X1M7CisgICAgICBQU1cgJj0gflBTV19aOworICAgIH0KKworICBHUltyZWcz XSA9IHBvczsKKworICBUUkFDRV9BTFVfUkVTVUxUMSAoR1JbcmVnM10pOwor fQorCisvLyBTQ0gxTAorcnJycnIsMTExMTExMDAwMDAgKyB3d3d3dywwMTEw MTEwMDExMDpJWDo6OnNjaDFsCisqdjg1MGUyCisqdjg1MGUydjMKKyJzY2gx bCByPHJlZzI+LCByPHJlZzM+IgoreworICB1bnNpZ25lZCBpbnQgcG9zLCBv cDA7CisKKyAgVFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVnMl0pOworCisgIG9w MCA9IEdSW3JlZzJdOworCisgIGlmIChvcDAgPT0gMHgwMDAwMDAwMCkKKyAg ICB7CisgICAgICBQU1cgJj0gflBTV19DWTsKKyAgICAgIFBTVyAmPSB+UFNX X09WOworICAgICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyB8PSBQU1df WjsKKyAgICAgIHBvcyA9IDA7CisgICAgfQorICBlbHNlIGlmIChvcDAgPT0g MHgwMDAwMDAwMSkKKyAgICB7CisgICAgICBQU1cgfD0gUFNXX0NZOworICAg ICAgUFNXICY9IH5QU1dfT1Y7CisgICAgICBQU1cgJj0gflBTV19TOworICAg ICAgUFNXICY9IH5QU1dfWjsKKyAgICAgIHBvcyA9IDMyOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIHBvcyA9IDE7CisgICAgICB3aGlsZSAoIShv cDAgJiAweDgwMDAwMDAwKSkgCisJeworCSAgb3AwIDw8PSAxOyAKKwkgIHBv cysrOworCX0KKyAgICAgIFBTVyAmPSB+UFNXX0NZOworICAgICAgUFNXICY9 IH5QU1dfT1Y7CisgICAgICBQU1cgJj0gflBTV19TOworICAgICAgUFNXICY9 IH5QU1dfWjsKKyAgICB9CisKKyAgR1JbcmVnM10gPSBwb3M7CisKKyAgVFJB Q0VfQUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsKK30KKworLy8gU0NIMVIKK3Jy cnJyLDExMTExMTAwMDAwICsgd3d3d3csMDExMDExMDAwMTA6SVg6OjpzY2gx cgorKnY4NTBlMgorKnY4NTBlMnYzCisic2NoMXIgcjxyZWcyPiwgcjxyZWcz PiIKK3sKKyAgdW5zaWduZWQgaW50IHBvcywgb3AwOworCisgIFRSQUNFX0FM VV9JTlBVVDEgKEdSW3JlZzJdKTsKKworICBvcDAgPSBHUltyZWcyXTsKKwor ICBpZiAob3AwID09IDB4MDAwMDAwMDApCisgICAgeworICAgICAgUFNXICY9 IH5QU1dfQ1k7CisgICAgICBQU1cgJj0gflBTV19PVjsKKyAgICAgIFBTVyAm PSB+UFNXX1M7CisgICAgICBQU1cgfD0gUFNXX1o7CisgICAgICBwb3MgPSAw OworICAgIH0KKyAgZWxzZSBpZiAob3AwID09IDB4ODAwMDAwMDApCisgICAg eworICAgICAgUFNXIHw9IFBTV19DWTsKKyAgICAgIFBTVyAmPSB+UFNXX09W OworICAgICAgUFNXICY9IH5QU1dfUzsKKyAgICAgIFBTVyAmPSB+UFNXX1o7 CisgICAgICBwb3MgPSAzMjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBwb3MgPSAxOworICAgICAgd2hpbGUgKCEob3AwICYgMHgwMDAwMDAwMSkp IAorCXsKKwkgIG9wMCA+Pj0gMTsKKwkgIHBvcysrOworCX0KKyAgICAgIFBT VyAmPSB+UFNXX0NZOworICAgICAgUFNXICY9IH5QU1dfT1Y7CisgICAgICBQ U1cgJj0gflBTV19TOworICAgICAgUFNXICY9IH5QU1dfWjsKKyAgICB9CisK KyAgR1JbcmVnM10gPSBwb3M7CisKKyAgVFJBQ0VfQUxVX1JFU1VMVDEgKEdS W3JlZzNdKTsKK30KKworLy9TSEwKK3JycnJyLDExMTExMSxSUlJSUiArIHd3 d3d3LDAwMDExMDAwMDEwOlhJOjo6c2hsCisqdjg1MGUyCisqdjg1MGUydjMK KyJzaGwgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgVFJBQ0Vf QUxVX0lOUFVUMiAoR1JbcmVnMV0sIEdSW3JlZzJdKTsKKyAgdjg1MF9zaGwo c2QsIEdSW3JlZzFdLCBHUltyZWcyXSwgJkdSW3JlZzNdKTsKKyAgVFJBQ0Vf QUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsKK30KKworLy9TSFIKK3JycnJyLDEx MTExMSxSUlJSUiArIHd3d3d3LDAwMDEwMDAwMDEwOlhJOjo6c2hyCisqdjg1 MGUyCisqdjg1MGUydjMKKyJzaHIgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWcz PiIKK3sKKyAgVFJBQ0VfQUxVX0lOUFVUMiAoR1JbcmVnMV0sIEdSW3JlZzJd KTsKKyAgdjg1MF9zaHIoc2QsIEdSW3JlZzFdLCBHUltyZWcyXSwgJkdSW3Jl ZzNdKTsKKyAgVFJBQ0VfQUxVX1JFU1VMVDEgKEdSW3JlZzNdKTsKK30KKwor CisKIC8vIFNFVEYKIHJycnJyLDExMTExMTAsY2NjYyArIDAwMDAwMDAwMDAw MDAwMDA6SVg6OjpzZXRmCiAic2V0ZiAlczxjY2NjPiwgcjxyZWcyPiIKQEAg LTg3OCw2ICsxNzcxLDggQEAgcnJycnIsMTExMTExMCxjY2NjICsgMDAwMDAw MDAwMDAwMDAwMDpJWAogcnJycnIsMTExMTExLFJSUlJSICsgMDAwMDAwMDAx MTEwMDAwMDpJWDo6OnNldDEKICp2ODUwZQogKnY4NTBlMQorKnY4NTBlMgor KnY4NTBlMnYzCiAic2V0MSByPHJlZzI+LCBbcjxyZWcxPl0iCiB7CiAgIENP TVBBVF8yIChPUF9FMDA3RTAgKCkpOwpAQCAtOTY2LDYgKzE4NjEsOCBAQCBy cnJyciwxMDEwLGRkZGRkZCwwOklWOjo6c2xkLncKIHJycnJyITAsMDAwMDEx MCxkZGRkOklWOjo6c2xkLmJ1CiAqdjg1MGUKICp2ODUwZTEKKyp2ODUwZTIK Kyp2ODUwZTJ2MwogInNsZC5iIDxkaXNwND5bZXBdLCByPHJlZzI+IjooUFNX ICYgUFNXX1VTKQogInNsZC5idSA8ZGlzcDQ+W2VwXSwgcjxyZWcyPiIKIHsK QEAgLTk4Nyw2ICsxODg0LDggQEAgcnJycnIhMCwwMDAwMTEwLGRkZGQ6SVY6 OjpzbGQuYnUKIHJycnJyITAsMDAwMDExMSxkZGRkOklWOjo6c2xkLmh1CiAq djg1MGUKICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInNsZC5oIDxk aXNwNT5bZXBdLCByPHJlZzI+IjooUFNXICYgUFNXX1VTKQogInNsZC5odSA8 ZGlzcDU+W2VwXSwgcjxyZWcyPiIKIHsKQEAgLTEwMDUsNiArMTkwNCw4IEBA IHJycnJyITAsMDAwMDExMSxkZGRkOklWOjo6c2xkLmh1CiAgICAgfQogfQog CisKKwogLy8gU1NUCiBycnJyciwwMTExLGRkZGRkZGQ6SVY6Ojpzc3QuYgog InNzdC5iIHI8cmVnMj4sIDxkaXNwNz5bZXBdIgpAQCAtMTAzMSwyOSArMTkz MiwxMTMgQEAgcnJycnIsMTExMDEwLFJSUlJSICsgZGRkZGRkZGRkZGRkZGRk ZDpWSQogICBDT01QQVRfMiAoT1BfNzQwICgpKTsKIH0KIAorMDAwMDAxMTEx MDAsUlJSUlIgKyB3d3d3dyxkZGRkZGRkLDExMDEgKyBkZGRkZGRkZGRkZGRk ZGRkOlhJVjo6OnN0LmIKKyp2ODUwZTJ2MworInN0LmIgcjxyZWczPiwgPGRp c3AyMz5bcjxyZWcxPl0iCit7CisgIHVuc2lnbmVkMzIgYWRkciA9IEdSW3Jl ZzFdICsgZGlzcDIzOworICBzdG9yZV9kYXRhX21lbSAoc2QsIGFkZHIsIDEs IEdSW3JlZzNdKTsKKyAgVFJBQ0VfU1QgKGFkZHIsIEdSW3JlZzNdKTsKK30K KwogcnJycnIsMTExMDExLFJSUlJSICsgZGRkZGRkZGRkZGRkZGRkLDA6VklJ Ojo6c3QuaAogInN0LmggcjxyZWcyPiwgPGRpc3AxNj5bcjxyZWcxPl0iCiB7 CiAgIENPTVBBVF8yIChPUF83NjAgKCkpOwogfQogCiswMDAwMDExMTEwMSxS UlJSUit3d3d3dyxkZGRkZGQsMDExMDErZGRkZGRkZGRkZGRkZGRkZDpYSVY6 OjpzdC5oCisqdjg1MGUydjMKKyJzdC5oIHI8cmVnMz4sIDxkaXNwMjM+W3I8 cmVnMT5dIgoreworICB1bnNpZ25lZDMyIGFkZHIgPSBHUltyZWcxXSArIGRp c3AyMzsKKyAgc3RvcmVfZGF0YV9tZW0gKHNkLCBhZGRyLCAyLCBHUltyZWcz XSk7CisgIFRSQUNFX1NUIChhZGRyLCBHUltyZWczXSk7Cit9CisKIHJycnJy LDExMTAxMSxSUlJSUiArIGRkZGRkZGRkZGRkZGRkZCwxOlZJSTo6OnN0LncK ICJzdC53IHI8cmVnMj4sIDxkaXNwMTY+W3I8cmVnMT5dIgogewogICBDT01Q QVRfMiAoT1BfMTA3NjAgKCkpOwogfQogCiswMDAwMDExMTEwMCxSUlJSUit3 d3d3dyxkZGRkZGQsMDExMTErZGRkZGRkZGRkZGRkZGRkZDpYSVY6OjpzdC53 Cisqdjg1MGUydjMKKyJzdC53IHI8cmVnMz4sIDxkaXNwMjM+W3I8cmVnMT5d IgoreworICB1bnNpZ25lZDMyIGFkZHIgPSBHUltyZWcxXSArIGRpc3AyMzsK KyAgc3RvcmVfZGF0YV9tZW0gKHNkLCBhZGRyLCA0LCBHUltyZWczXSk7Cisg IFRSQUNFX1NUIChhZGRyLCBHUltyZWczXSk7Cit9CisKKwogLy8gU1RTUgog cnJycnIsMTExMTExLHJlZ0lEICsgMDAwMDAwMDAwMTAwMDAwMDpJWDo6OnN0 c3IKICJzdHNyIHM8cmVnSUQ+LCByPHJlZzI+IgogewotICBUUkFDRV9BTFVf SU5QVVQxIChTUltyZWdJRF0pOwotICBHUltyZWcyXSA9IFNSW3JlZ0lEXTsK LSAgVFJBQ0VfQUxVX1JFU1VMVCAoR1JbcmVnMl0pOwotfQorICB1aW50MzIg c3JlZyA9IDA7CiAKLS8vIFNVQgotcnJycnIsMDAxMTAxLFJSUlJSOkk6Ojpz dWIKKyAgaWYgKChpZGVjb2RlX2lzc3VlID09IGlkZWNvZGVfdjg1MGUyX2lz c3VlCisgICAgICAgfHwgaWRlY29kZV9pc3N1ZSA9PSBpZGVjb2RlX3Y4NTBl MnYzX2lzc3VlKQorICAgICAgJiYgcmVnSUQgPCAyOCkKKyAgICB7CisgICAg ICBzd2l0Y2ggKEJTRUwgJiAweGZmZmYpCisJeworCWNhc2UgMHgwMDAwOgor CWNhc2UgMHhmZjAwOgkvKiBVU0VSIDAgKi8KKwljYXNlIDB4ZmZmZjoJLyog VVNFUiAxICovCisJICBzcmVnID0gU1JbcmVnSURdOworCSAgYnJlYWs7CisJ Y2FzZSAweDEwMDA6CisJICBzcmVnID0gTVBVMF9TUltyZWdJRF07CisJICBi cmVhazsKKwljYXNlIDB4MTAwMToKKwkgIHNyZWcgPSBNUFUxX1NSW3JlZ0lE XTsKKwkgIGJyZWFrOworCWNhc2UgMHgyMDAwOgorCSAgaWYgKHJlZ0lEID09 IEZQU1RfUkVHTk8pCisJICAgIHsKKwkgICAgICBzcmVnID0gKChGUFNSICYg RlBTUl9QUikgPyBGUFNUX1BSIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hD RSkgPyBGUFNUX1hDRSA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YQ1YpID8g RlBTVF9YQ1YgOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWENaKSA/IEZQU1Rf WENaIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hDTykgPyBGUFNUX1hDTyA6 IDApCisJCXwgKChGUFNSICYgRlBTUl9YQ1UpID8gRlBTVF9YQ1UgOiAwKQor CQl8ICgoRlBTUiAmIEZQU1JfWENJKSA/IEZQU1RfWENJIDogMCkKKwkJfCAo KEZQU1IgJiBGUFNSX1hQVikgPyBGUFNUX1hQViA6IDApCisJCXwgKChGUFNS ICYgRlBTUl9YUFopID8gRlBTVF9YUFogOiAwKQorCQl8ICgoRlBTUiAmIEZQ U1JfWFBPKSA/IEZQU1RfWFBPIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hQ VSkgPyBGUFNUX1hQVSA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YUEkpID8g RlBTVF9YUEkgOiAwKTsKKwkgICAgfQorCSAgZWxzZSBpZiAocmVnSUQgPT0g RlBDRkdfUkVHTk8pCisJICAgIHsKKwkgICAgICBzcmVnID0gKCgoRlBTUiAm IEZQU1JfUk0pID4+IDE4KSA8PCA3KQorCQl8ICgoRlBTUiAmIEZQU1JfWEVW KSA/IEZQQ0ZHX1hFViA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YRVopID8g RlBDRkdfWEVaIDogMCkKKwkJfCAoKEZQU1IgJiBGUFNSX1hFTykgPyBGUENG R19YRU8gOiAwKQorCQl8ICgoRlBTUiAmIEZQU1JfWEVVKSA/IEZQQ0ZHX1hF VSA6IDApCisJCXwgKChGUFNSICYgRlBTUl9YRUkpID8gRlBDRkdfWEVJIDog MCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHNyZWcgPSBG UFVfU1JbcmVnSURdOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgc3JlZyA9IFNSW3JlZ0lEXTsKKyAgICB9 CisKKyAgVFJBQ0VfQUxVX0lOUFVUMSAoc3JlZyk7CisgIEdSW3JlZzJdID0g c3JlZzsKKyAgVFJBQ0VfQUxVX1JFU1VMVCAoR1JbcmVnMl0pOworfQorCisv LyBTVUIKK3JycnJyLDAwMTEwMSxSUlJSUjpJOjo6c3ViCiAic3ViIHI8cmVn MT4sIHI8cmVnMj4iCiB7CiAgIENPTVBBVF8xIChPUF8xQTAgKCkpOwpAQCAt MTA3MCw2ICsyMDU1LDggQEAgcnJycnIsMDAxMTAwLFJSUlJSOkk6OjpzdWJy CiAwMDAwMDAwMDAxMCxSUlJSUjpJOjo6c3dpdGNoCiAqdjg1MGUKICp2ODUw ZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInN3aXRjaCByPHJlZzE+Igogewog ICB1bnNpZ25lZCBsb25nIGFkcjsKQEAgLTEwODQsNiArMjA3MSw4IEBAIHJy cnJyLDAwMTEwMCxSUlJSUjpJOjo6c3VicgogMDAwMDAwMDAxMDEsUlJSUlI6 STo6OnN4YgogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMK ICJzeGIgcjxyZWcxPiIKIHsKICAgVFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVn MV0pOwpAQCAtMTA5NSw2ICsyMDg0LDggQEAgcnJycnIsMDAxMTAwLFJSUlJS Okk6OjpzdWJyCiAwMDAwMDAwMDExMSxSUlJSUjpJOjo6c3hoCiAqdjg1MGUK ICp2ODUwZTEKKyp2ODUwZTIKKyp2ODUwZTJ2MwogInN4aCByPHJlZzE+Igog ewogICBUUkFDRV9BTFVfSU5QVVQxIChHUltyZWcxXSk7CkBAIC0xMTI2LDYg KzIxMTcsOCBAQCBycnJyciwwMDEwMTEsUlJSUlI6STo6OnRzdAogcnJycnIs MTExMTExLFJSUlJSICsgMDAwMDAwMDAxMTEwMDExMDpJWDo6OnRzdDEKICp2 ODUwZQogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAidHN0MSByPHJl ZzI+LCBbcjxyZWcxPl0iCiB7CiAgIENPTVBBVF8yIChPUF9FNjA3RTAgKCkp OwpAQCAtMTE0OSw2ICsyMTQyLDggQEAgcnJycnIsMTEwMTAxLFJSUlJSICsg aWlpaWlpaWlpaWlpaWlpaTpWSQogMDAwMDAwMDAxMDAsUlJSUlI6STo6Onp4 YgogKnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJ6eGIg cjxyZWcxPiIKIHsKICAgVFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVnMV0pOwpA QCAtMTE2MCw2ICsyMTU1LDggQEAgcnJycnIsMTEwMTAxLFJSUlJSICsgaWlp aWlpaWlpaWlpaWlpaTpWSQogMDAwMDAwMDAxMTAsUlJSUlI6STo6Onp4aAog KnY4NTBlCiAqdjg1MGUxCisqdjg1MGUyCisqdjg1MGUydjMKICJ6eGggcjxy ZWcxPiIKIHsKICAgVFJBQ0VfQUxVX0lOUFVUMSAoR1JbcmVnMV0pOwpAQCAt MTE3OCw2ICsyMTc1LDggQEAgcnJycnIsMTEwMTAxLFJSUlJSICsgaWlpaWlp aWlpaWlpaWlpaTpWSQogCiAxMTExMSwwMDAwMTAsMDAwMDA6STo6OmRidHJh cAogKnY4NTBlMQorKnY4NTBlMgorKnY4NTBlMnYzCiAiZGJ0cmFwIgogewog ICBEQlBDID0gY2lhICsgMjsKQEAgLTExOTcsOSArMjE5NiwxMDY5IEBAIHJy cnJyLDExMDEwMSxSUlJSUiArIGlpaWlpaWlpaWlpaWlpaWk6VkkKIC8vIFJl dHVybiBmcm9tIGRlYnVnIHRyYXA6IDB4MTQ2MDA3ZTAKIDAwMDAwMTExMTEx MDAwMDAgKyAwMDAwMDAwMTAxMDAwMTEwOlg6OjpkYnJldAogKnY4NTBlMQor KnY4NTBlMgorKnY4NTBlMnYzCiAiZGJyZXQiCiB7CiAgIG5pYSA9IERCUEM7 CiAgIFBTVyA9IERCUFNXOwogICBUUkFDRV9CUkFOQ0gxIChQU1cpOwogfQor CisKKy8vCisvLyBGTE9BVAorLy8KKworLy8gTWFwIGNvbmRpdGlvbiBjb2Rl IHRvIGEgc3RyaW5nCis6JXM6Ojo6RkZGRjppbnQgRkZGRgoreworICBzd2l0 Y2ggKEZGRkYpCisgICAgeworICAgIGNhc2UgMDogcmV0dXJuICJmIjsKKyAg ICBjYXNlIDE6IHJldHVybiAidW4iOworICAgIGNhc2UgMjogcmV0dXJuICJl cSI7CisgICAgY2FzZSAzOiByZXR1cm4gInVlcSI7CisgICAgY2FzZSA0OiBy ZXR1cm4gIm9sdCI7CisgICAgY2FzZSA1OiByZXR1cm4gInVsdCI7CisgICAg Y2FzZSA2OiByZXR1cm4gIm9sZSI7CisgICAgY2FzZSA3OiByZXR1cm4gInVs ZSI7CisgICAgY2FzZSA4OiByZXR1cm4gInNmIjsKKyAgICBjYXNlIDk6IHJl dHVybiAibmdsZSI7CisgICAgY2FzZSAxMDogcmV0dXJuICJzZXEiOworICAg IGNhc2UgMTE6IHJldHVybiAibmdsIjsKKyAgICBjYXNlIDEyOiByZXR1cm4g Imx0IjsKKyAgICBjYXNlIDEzOiByZXR1cm4gIm5nZSI7CisgICAgY2FzZSAx NDogcmV0dXJuICJsZSI7CisgICAgY2FzZSAxNTogcmV0dXJuICJuZ3QiOwor ICAgIH0KKyAgcmV0dXJuICIobnVsbCkiOworfQorCisvLyBBQlNGLkQKK3Jy cnIsMDExMTExMTAwMDAwICsgd3d3dywwMTAwMDEwMTEwMDA6Rl9JOjo6YWJz Zl9kCisqdjg1MGUydjMKKyJhYnNmLmQgcjxyZWcyZT4sIHI8cmVnM2U+Igor eworICBzaW1fZnB1IGFucywgd29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0 dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndvcCwgR1JbcmVnMmUrMV0sIEdS W3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisg IHN0YXR1cyA9IHNpbV9mcHVfYWJzICgmYW5zLCAmd29wKTsKKyAgY2hlY2tf aW52YWxpZF9zbmFuKHNkLCBzdGF0dXMsIDEpOworCisgIHNpbV9mcHVfdG8y MzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisKKyAgVFJB Q0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBBQlNGLlMKK3Jy cnJyLDExMTExMTAwMDAwICsgd3d3d3csMTAwMDEwMDEwMDA6Rl9JOjo6YWJz Zl9zCisqdjg1MGUydjMKKyJhYnNmLnMgcjxyZWcyPiwgcjxyZWczPiIKK3sK KyAgc2ltX2ZwdSBhbnMsIHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVz OworCisgIHNpbV9mcHVfMzJ0byAoJndvcCwgR1JbcmVnMl0pOworICBUUkFD RV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1 X2FicyAoJmFucywgJndvcCk7CisgIGNoZWNrX2ludmFsaWRfc25hbihzZCwg c3RhdHVzLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwgJmFu cyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8g QURERi5ECitycnJyLDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAwMDExMTAw MDA6Rl9JOjo6YWRkZl9kCisqdjg1MGUydjMKKyJhZGRmLmQgcjxyZWcxZT4s IHI8cmVnMmU+LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEs IHdvcDI7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1 XzIzMnRvICgmd29wMSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNp bV9mcHVfMjMydG8gKCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsK KyAgVFJBQ0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBz dGF0dXMgPSBzaW1fZnB1X2FkZCAoJmFucywgJndvcDEsICZ3b3AyKTsKKyAg c3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JP VU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKwor ICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hF SSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDEpOworCisgIHNpbV9mcHVfdG8y MzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisgIFRSQUNF X0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gQURERi5TCitycnJy ciwxMTExMTEsUlJSUlIgKyB3d3d3dywxMDAwMTEwMDAwMDpGX0k6OjphZGRm X3MKKyp2ODUwZTJ2MworImFkZGYucyByPHJlZzE+LCByPHJlZzI+LCByPHJl ZzM+IgoreworICBzaW1fZnB1IGFucywgd29wMSwgd29wMjsKKyAgc2ltX2Zw dV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEsIEdS W3JlZzFdKTsKKyAgc2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0pOwor ICBUUkFDRV9GUF9JTlBVVF9GUFUyICgmd29wMSwgJndvcDIpOworCisgIHN0 YXR1cyA9IHNpbV9mcHVfYWRkICgmYW5zLCAmd29wMSwgJndvcDIpOworICBz dGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF8zMiAoJmFucywgRlBTUl9HRVRfUk9V TkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisg IHVwZGF0ZV9mcHNyIChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJ IHwgRlBTUl9YRU8gfCBGUFNSX1hFVSwgMCk7CisKKyAgc2ltX2ZwdV90bzMy ICgmR1JbcmVnM10sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAo JmFucyk7Cit9CisKKy8vIENNT1ZGLkQKK3JycnIsMDExMTExMSxSUlJSLDAg KyB3d3d3ITAsMDEwMDAwMDEsYmJiLDA6Rl9JOjo6Y21vdmZfZAorKnY4NTBl MnYzCisiY21vdmYuZCA8YmJiPiwgcjxyZWcxZT4sIHI8cmVnMmU+LCByPHJl ZzNlPiIKK3sKKyAgdW5zaWduZWQgaW50IG9waGksb3Bsb3c7CisgIHNpbV9m cHUgYW5zLCB3b3AxLCB3b3AyOworCisgIHNpbV9mcHVfMjMydG8gKCZ3b3Ax LCBHUltyZWcxZSsxXSwgR1JbcmVnMWVdKTsKKyAgc2ltX2ZwdV8yMzJ0byAo JndvcDIsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9J TlBVVF9CT09MMV9GUFUyIChURVNUX0ZQQ0MoYmJiKSwgJndvcDEsICZ3b3Ay KTsKKworICBpZiAoVEVTVF9GUENDKGJiYikpIAorICAgIHsKKyAgICAgIG9w aGkgPSBHUltyZWcxZSsxXTsKKyAgICAgIG9wbG93ID0gR1JbcmVnMWVdOwor ICAgICAgYW5zID0gd29wMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBvcGhpID0gR1JbcmVnMmUrMV07CisgICAgICBvcGxvdyA9IEdSW3JlZzJl XTsKKyAgICAgIGFucyA9IHdvcDI7CisgICAgfQorCisgIEdSW3JlZzNlKzFd ID0gb3BoaTsKKyAgR1JbcmVnM2VdID0gb3Bsb3c7CisgIFRSQUNFX0ZQX1JF U1VMVF9GUFUxICgmYW5zKTs7Cit9CisKKy8vIENNT1ZGLlMKK3JycnJyLDEx MTExMSxSUlJSUiArIHd3d3d3ITAsMTAwMDAwMCxiYmIsMDpGX0k6OjpjbW92 Zl9zCisqdjg1MGUydjMKKyJjbW92Zi5kIDxiYmI+LCByPHJlZzE+LCByPHJl ZzI+LCByPHJlZzM+IgoreworICB1bnNpZ25lZCBpbnQgb3A7CisgIHNpbV9m cHUgYW5zLCB3b3AxLCB3b3AyOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEs IEdSW3JlZzFdKTsKKyAgc2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0p OworICBUUkFDRV9GUF9JTlBVVF9CT09MMV9GUFUyIChURVNUX0ZQQ0MoYmJi KSwgJndvcDEsICZ3b3AyKTsKKworICBpZiAoVEVTVF9GUENDKGJiYikpIAor ICB7CisgICAgb3AgPSBHUltyZWcxXTsKKyAgICBhbnMgPSB3b3AxOworICB9 CisgIGVsc2UKKyAgeworICAgIG9wID0gR1JbcmVnMl07CisgICAgYW5zID0g d29wMjsKKyAgfQorCisgIEdSW3JlZzNdID0gb3A7CisgIFRSQUNFX0ZQX1JF U1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gQ01QRi5ECitycnJyLDAxMTEx MTEsUlJSUiwwICsgMCxGRkZGLDEwMDAwMTEsYmJiLDA6Rl9JOjo6Y21wZl9k Cisqdjg1MGUydjMKKyJjbXBmLmQgJXM8RkZGRj4sIHI8cmVnMWU+LCByPHJl ZzJlPiI6KGJiYiA9PSAwKQorImNtcGYuZCAlczxGRkZGPiwgcjxyZWcxZT4s IHI8cmVnMmU+LCA8YmJiPiIKK3sKKyAgaW50IHJlc3VsdDsKKyAgc2ltX2Zw dSB3b3AxOworICBzaW1fZnB1IHdvcDI7CisgIAorICBzaW1fZnB1XzIzMnRv ICgmd29wMSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVf MjMydG8gKCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJB Q0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICByZXN1bHQg PSB2ODUwX2Zsb2F0X2NvbXBhcmUoc2QsIEZGRkYsIHdvcDEsIHdvcDIsIDEp OworCisgIGlmIChyZXN1bHQpICAKKyAgICBTRVRfRlBDQyhiYmIpOworICBl bHNlCisgICAgQ0xFQVJfRlBDQyhiYmIpOworCisgIFRSQUNFX0ZQX1JFU1VM VF9CT09MIChyZXN1bHQpOworfQorCisvLyBDTVBGLlMKK3JycnJyLDExMTEx MSxSUlJSUiArIDAsRkZGRiwxMDAwMDEwLGJiYiwwOkZfSTo6OmNtcGZfcwor KnY4NTBlMnYzCisiY21wZi5zICVzPEZGRkY+LCByPHJlZzE+LCByPHJlZzI+ IjooYmJiID09IDApCisiY21wZi5zICVzPEZGRkY+LCByPHJlZzE+LCByPHJl ZzI+LCA8YmJiPiIKK3sKKyAgaW50IHJlc3VsdDsgCisgIHNpbV9mcHUgd29w MTsKKyAgc2ltX2ZwdSB3b3AyOworCisgIHNpbV9mcHVfMzJ0byggJndvcDEs IEdSW3JlZzFdICk7CisgIHNpbV9mcHVfMzJ0byggJndvcDIsIEdSW3JlZzJd ICk7CisgIFRSQUNFX0ZQX0lOUFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisK KyAgcmVzdWx0ID0gdjg1MF9mbG9hdF9jb21wYXJlKHNkLCBGRkZGLCB3b3Ax LCB3b3AyLCAwKTsKKworICBpZiAocmVzdWx0KSAgCisgICAgU0VUX0ZQQ0Mo YmJiKTsKKyAgZWxzZQorICAgIENMRUFSX0ZQQ0MoYmJiKTsKKworICBUUkFD RV9GUF9SRVNVTFRfQk9PTCAocmVzdWx0KTsKK30KKworLy8gQ1ZURi5ETAor cnJyciwwMTExMTExMDAxMDAgKyB3d3d3LDAxMDAwMTAxMDEwMDpGX0k6Ojpj dnRmX2RsCisqdjg1MGUydjMKKyJjdnRmLmRsIHI8cmVnMmU+LCByPHJlZzNl PiIKK3sKKyAgdW5zaWduZWQ2NCBhbnM7CisgIHNpbV9mcHUgd29wOworICBz aW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndv cCwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVU X0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfcm91bmRfNjQg KCZ3b3AsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3plcm8p OworICBzdGF0dXMgfD0gc2ltX2ZwdV90bzY0aSAoJmFucywgJndvcCwgRlBT Ul9HRVRfUk9VTkQoKSk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBzdGF0dXMs IDEpOworCisgIEdSW3JlZzNlXSA9IGFuczsKKyAgR1JbcmVnM2UrMV0gPSBh bnM+PjMyTDsKKyAgVFJBQ0VfRlBfUkVTVUxUX1dPUkQyIChHUltyZWczZV0s IEdSW3JlZzNlKzFdKTsKK30KKworLy8gQ1ZURi5EUworcnJyciwwMTExMTEx MDAwMTEgKyB3d3d3dywxMDAwMTAxMDAxMDpGX0k6OjpjdnRmX2RzCisqdjg1 MGUydjMKKyJjdnRmLmRzIHI8cmVnMmU+LCByPHJlZzM+IgoreworICBzaW1f ZnB1IHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9m cHVfMjMydG8gKCZ3b3AsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBU UkFDRV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1f ZnB1X3JvdW5kXzMyICgmd29wLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1 X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgY2hlY2tfY3Z0X2Zp KHNkLCBzdGF0dXMsIDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNd LCAmd29wKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZ3b3ApOworfQor CisvLyBDVlRGLkRXCitycnJyLDAxMTExMTEwMDEwMCArIHd3d3d3LDEwMDAx MDEwMDAwOkZfSTo6OmN2dGZfZHcKKyp2ODUwZTJ2MworImN2dGYuZHcgcjxy ZWcyZT4sIHI8cmVnMz4iCit7CisgIHVpbnQzMiBhbnM7CisgIHNpbV9mcHUg d29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8y MzJ0byAoJndvcCwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNF X0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVf cm91bmRfMzIgKCZ3b3AsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVu b3JtX3plcm8pOworICBzdGF0dXMgfD0gc2ltX2ZwdV90bzMyaSAoJmFucywg JndvcCwgRlBTUl9HRVRfUk9VTkQoKSk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNk LCBzdGF0dXMsIDEpOworCisgIEdSW3JlZzNdID0gYW5zOworICBUUkFDRV9G UF9SRVNVTFRfV09SRDEgKGFucyk7Cit9CisKKy8vIENWVEYuTEQKK3JycnIs MDExMTExMTAwMDAxICsgd3d3dywwMTAwMDEwMTAwMTA6Rl9JOjo6Y3Z0Zl9s ZAorKnY4NTBlMnYzCisiY3Z0Zi5sZCByPHJlZzJlPiwgcjxyZWczZT4iCit7 CisgIHNpZ25lZDY0IG9wOworICBzaW1fZnB1IHdvcDsKKyAgc2ltX2ZwdV9z dGF0dXMgc3RhdHVzOworCisgIG9wID0gKChzaWduZWQ2NClHUltyZWcyZSsx XSA8PCAzMkwpIHwgR1JbcmVnMmVdOworICBUUkFDRV9GUF9JTlBVVF9XT1JE MiAoR1JbcmVnMmVdLCBHUltyZWcyZSsxXSk7CisKKyAgc2ltX2ZwdV9pNjR0 byAoJndvcCwgb3AsIEZQU1JfR0VUX1JPVU5EKCkpOworICBzdGF0dXMgPSBz aW1fZnB1X3JvdW5kXzY0ICgmd29wLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1f ZnB1X2Rlbm9ybV96ZXJvKTsKKworICBjaGVja19jdnRfaWYoc2QsIHN0YXR1 cywgMSk7CisKKyAgc2ltX2ZwdV90bzIzMiAoJkdSW3JlZzNlKzFdLCAmR1Jb cmVnM2VdLCAmd29wKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZ3b3Ap OworfQorCisvLyBDVlRGLkxTCitycnJyLDAxMTExMTEwMDAwMSArIHd3d3d3 LDEwMDAxMDAwMDEwOkZfSTo6OmN2dGZfbHMKKyp2ODUwZTJ2MworImN2dGYu bHMgcjxyZWcyZT4sIHI8cmVnMz4iCit7CisgIHNpZ25lZDY0IG9wOworICBz aW1fZnB1IHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIG9w ID0gKChzaWduZWQ2NClHUltyZWcyZSsxXSA8PCAzMkwpIHwgR1JbcmVnMmVd OworICBUUkFDRV9GUF9JTlBVVF9XT1JEMiAoR1JbcmVnMmVdLCBHUltyZWcy ZSsxXSk7CisKKyAgc2ltX2ZwdV9pNjR0byAoJndvcCwgb3AsIEZQU1JfR0VU X1JPVU5EKCkpOworICBzdGF0dXMgPSBzaW1fZnB1X3JvdW5kXzMyICgmd29w LCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV96ZXJvKTsKKwor ICBjaGVja19jdnRfaWYoc2QsIHN0YXR1cywgMCk7CisKKyAgc2ltX2ZwdV90 bzMyICgmR1JbcmVnM10sICZ3b3ApOworICBUUkFDRV9GUF9SRVNVTFRfRlBV MSAoJndvcCk7Cit9CisKKy8vIENWVEYuU0QKK3JycnJyLDExMTExMTAwMDEw ICsgd3d3dywwMTAwMDEwMTAwMTA6Rl9JOjo6Y3Z0Zl9zZAorKnY4NTBlMnYz CisiY3Z0Zi5zZCByPHJlZzI+LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSB3 b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMy dG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAo JndvcCk7CisgIHN0YXR1cyA9IHNpbV9mcHVfcm91bmRfNjQgKCZ3b3AsIEZQ U1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4 YWN0KTsKKworICBjaGVja19jdnRfZmYoc2QsIHN0YXR1cywgMSk7CisKKyAg c2ltX2ZwdV90bzIzMiAoJkdSW3JlZzNlKzFdLCAmR1JbcmVnM2VdLCAmd29w KTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZ3b3ApOworfQorCisvLyBD VlRGLlNMCitycnJyciwxMTExMTEwMDEwMCArIHd3d3csMDEwMDAxMDAwMTAw OkZfSTo6OmN2dGZfc2wKKyp2ODUwZTJ2MworImN2dGYuc2wgcjxyZWcyPiwg cjxyZWczZT4iCit7CisgIHNpZ25lZDY0IGFuczsKKyAgc2ltX2ZwdSB3b3A7 CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8g KCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndv cCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3VuZF82NCAoJndvcCwgRlBT Ul9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1femVybyk7CisgIHN0YXR1 cyB8PSBzaW1fZnB1X3RvNjRpICgmYW5zLCAmd29wLCBGUFNSX0dFVF9ST1VO RCgpKTsKKworICBjaGVja19jdnRfZmkoc2QsIHN0YXR1cywgMCk7CisKKyAg R1JbcmVnM2VdID0gYW5zOworICBHUltyZWczZSsxXSA9IGFucyA+PiAzMkw7 CisgIFRSQUNFX0ZQX1JFU1VMVF9XT1JEMiAoR1JbcmVnM2VdLCBHUltyZWcz ZSsxXSk7Cit9CisKKy8vIENWVEYuU1cKK3JycnJyLDExMTExMTAwMTAwICsg d3d3d3csMTAwMDEwMDAwMDA6Rl9JOjo6Y3Z0Zl9zdworKnY4NTBlMnYzCisi Y3Z0Zi5zdyByPHJlZzI+LCByPHJlZzM+IgoreworICB1aW50MzIgYW5zOwor ICBzaW1fZnB1IHdvcDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisg IHNpbV9mcHVfMzJ0byAoJndvcCwgR1JbcmVnMl0pOworICBUUkFDRV9GUF9J TlBVVF9GUFUxICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1X3JvdW5k XzMyICgmd29wLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV96 ZXJvKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfdG8zMmkgKCZhbnMsICZ3b3As IHNpbV9mcHVfcm91bmRfemVybyk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBz dGF0dXMsIDApOworCisgIEdSW3JlZzNdID0gYW5zOworICBUUkFDRV9GUF9S RVNVTFRfV09SRDEgKGFucyk7Cit9CisKKy8vIENWVEYuV0QKK3JycnJyLDEx MTExMTAwMDAwICsgd3d3dywwMTAwMDEwMTAwMTA6Rl9JOjo6Y3Z0Zl93ZAor KnY4NTBlMnYzCisiY3Z0Zi53ZCByPHJlZzI+LCByPHJlZzNlPiIKK3sKKyAg c2ltX2ZwdSB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBU UkFDRV9GUF9JTlBVVF9XT1JEMSAoR1JbcmVnMl0pOworICBzaW1fZnB1X2kz MnRvICgmd29wLCBHUltyZWcyXSwgRlBTUl9HRVRfUk9VTkQoKSk7CisgIHN0 YXR1cyA9IHNpbV9mcHVfcm91bmRfNjQgKCZ3b3AsIEZQU1JfR0VUX1JPVU5E KCksIHNpbV9mcHVfZGVub3JtX3plcm8pOworCisgIGNoZWNrX2N2dF9pZihz ZCwgc3RhdHVzLCAxKTsKKworICBzaW1fZnB1X3RvMjMyICgmR1JbcmVnM2Ur MV0sICZHUltyZWczZV0sICZ3b3ApOworICBUUkFDRV9GUF9SRVNVTFRfRlBV MSAoJndvcCk7Cit9CisKKy8vIENWVEYuV1MKK3JycnJyLDExMTExMTAwMDAw ICsgd3d3d3csMTAwMDEwMDAwMTA6Rl9JOjo6Y3Z0Zl93cworKnY4NTBlMnYz CisiY3Z0Zi53cyByPHJlZzI+LCByPHJlZzM+IgoreworICBzaW1fZnB1IHdv cDsKKyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIFRSQUNFX0ZQX0lO UFVUX1dPUkQxIChHUltyZWcyXSk7CisgIHNpbV9mcHVfaTMydG8gKCZ3b3As IEdSW3JlZzJdLCBGUFNSX0dFVF9ST1VORCgpKTsKKyAgc3RhdHVzID0gc2lt X2ZwdV9yb3VuZF8zMiAoJndvcCwgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2Zw dV9kZW5vcm1femVybyk7CisKKyAgY2hlY2tfY3Z0X2lmKHNkLCBzdGF0dXMs IDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNdLCAmd29wKTsKKyAg VFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZ3b3ApOworfQorCisvLyBESVZGLkQK K3JycnIsMDExMTExMSxSUlJSLDAgKyB3d3d3LDAxMDAwMTExMTExMDpGX0k6 OjpkaXZmX2QKKyp2ODUwZTJ2MworImRpdmYuZCByPHJlZzFlPiwgcjxyZWcy ZT4sIHI8cmVnM2U+IgoreworICBzaW1fZnB1IGFucywgd29wMSwgd29wMjsK KyAgc2ltX2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8g KCZ3b3AxLCBHUltyZWcxZSsxXSwgR1JbcmVnMWVdKTsKKyAgc2ltX2ZwdV8y MzJ0byAoJndvcDIsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFD RV9GUF9JTlBVVF9GUFUyICgmd29wMSwgJndvcDIpOworCisgIHN0YXR1cyA9 IHNpbV9mcHVfZGl2ICgmYW5zLCAmd29wMiwgJndvcDEpOworICBzdGF0dXMg fD0gc2ltX2ZwdV9yb3VuZF82NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwg c2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0 ZV9mcHNyIChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVaIHwgRlBT Ul9YRUkgfCBGUFNSX1hFTyB8IEZQU1JfWEVVLCAxKTsKKworICBzaW1fZnB1 X3RvMjMyICgmR1JbcmVnM2UrMV0sICZHUltyZWczZV0sICZhbnMpOworICBU UkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIERJVkYuUwor cnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMTAwMDExMDExMTA6Rl9JOjo6 ZGl2Zl9zCisqdjg1MGUydjMKKyJkaXZmLnMgcjxyZWcxPiwgcjxyZWcyPiwg cjxyZWczPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7CisgIHNp bV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3Ax LCBHUltyZWcxXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJd KTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKwor ICBzdGF0dXMgPSBzaW1fZnB1X2RpdiAoJmFucywgJndvcDIsICZ3b3AxKTsK KyAgc3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfMzIgKCZhbnMsIEZQU1JfR0VU X1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsK KworICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNS X1hFWiB8IEZQU1JfWEVJIHwgRlBTUl9YRU8gfCBGUFNSX1hFVSwgMCk7CisK KyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnM10sICZhbnMpOworICBUUkFDRV9G UF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIE1BRERGLlMKK3JycnJy LDExMTExMSxSUlJSUiArIHd3d3d3LDEwMSxXLDAwLFdXV1csMDpGX0k6Ojpt YWRkZl9zCisqdjg1MGUydjMKKyJtYWRkZi5zIHI8cmVnMT4sIHI8cmVnMj4s IHI8cmVnMz4sIHI8cmVnND4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3AxLCB3 b3AyLCB3b3AzOworICBzaW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2lt X2ZwdV8zMnRvICgmd29wMSwgR1JbcmVnMV0pOworICBzaW1fZnB1XzMydG8g KCZ3b3AyLCBHUltyZWcyXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDMsIEdS W3JlZzNdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMyAoJndvcDEsICZ3b3Ay LCAmd29wMyk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9tdWwgKCZhbnMsICZ3 b3AxLCAmd29wMik7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgm YW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZs b3dfaW5leGFjdCk7CisgIHdvcDEgPSBhbnM7CisgIHN0YXR1cyB8PSBzaW1f ZnB1X2FkZCAoJmFucywgJndvcDEsICZ3b3AzKTsKKyAgc3RhdHVzIHw9IHNp bV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9m cHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRhdGVfZnBz ciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVP IHwgRlBTUl9YRVUsIDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzRd LCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQor CisvLyBNQVhGLkQKK3JycnIsMDExMTExMSxSUlJSLDAgKyB3d3d3LDAxMDAw MTExMTAwMDpGX0k6OjptYXhmX2QKKyp2ODUwZTJ2MworIm1heGYuZCByPHJl ZzFlPiwgcjxyZWcyZT4sIHI8cmVnM2U+IgoreworICBzaW1fZnB1IGFucywg d29wMSwgd29wMjsKKworICBzaW1fZnB1XzIzMnRvICgmd29wMSwgR1JbcmVn MWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVfMjMydG8gKCZ3b3AyLCBH UltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBV MiAoJndvcDEsICZ3b3AyKTsKKworICBpZiAoc2ltX2ZwdV9pc19uYW4oJndv cDEpIHx8IHNpbV9mcHVfaXNfbmFuKCZ3b3AyKSkKKyAgICB7CisgICAgICBp ZiAoRlBTUiAmIEZQU1JfWEVWKQorCXsKKwkgIFNpZ25hbEV4Y2VwdGlvbkZQ RShzZCwgMSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFucyA9IHNpbV9m cHVfcW5hbjsKKwl9CisgICAgfQorICBlbHNlIGlmIChGUFNSICYgRlBTUl9G UworCSAgICYmICgoc2ltX2ZwdV9pc196ZXJvICgmd29wMSkgfHwgc2ltX2Zw dV9pc19kZW5vcm0gKCZ3b3AxKSkKKwkgICAgICAgJiYgKHNpbV9mcHVfaXNf emVybyAoJndvcDIpIHx8IHNpbV9mcHVfaXNfZGVub3JtICgmd29wMikpKSkg CisgICAgeworICAgICAgYW5zID0gc2ltX2ZwdV96ZXJvOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIHNpbV9mcHVfbWF4ICgmYW5zLCAmd29wMSwg JndvcDIpOworICAgIH0KKyAgCisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWcz ZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9G UFUxICgmYW5zKTsKK30KKworLy8gTUFYRi5TCitycnJyciwxMTExMTEsUlJS UlIgKyB3d3d3dywxMDAwMTEwMTAwMDpGX0k6OjptYXhmX3MKKyp2ODUwZTJ2 MworIm1heGYucyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+IgoreworICBz aW1fZnB1IGFucywgd29wMSwgd29wMjsKKworICBzaW1fZnB1XzMydG8gKCZ3 b3AxLCBHUltyZWcxXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3Jl ZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsK KworICBpZiAoc2ltX2ZwdV9pc19uYW4oJndvcDEpIHx8IHNpbV9mcHVfaXNf bmFuKCZ3b3AyKSkKKyAgICB7CisgICAgICBpZiAoRlBTUiAmIEZQU1JfWEVW KQorCXsKKwkgIFNpZ25hbEV4Y2VwdGlvbkZQRShzZCwgMCk7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIGFucyA9IHNpbV9mcHVfcW5hbjsKKwl9CisgICAg fQorICBlbHNlIGlmICgoRlBTUiAmIEZQU1JfRlMpCisJICAgJiYgKChzaW1f ZnB1X2lzX3plcm8gKCZ3b3AxKSB8fCBzaW1fZnB1X2lzX2Rlbm9ybSAoJndv cDEpKQorCSAgICAgICAmJiAoc2ltX2ZwdV9pc196ZXJvICgmd29wMil8fCBz aW1fZnB1X2lzX2Rlbm9ybSAoJndvcDIpKSkpCisgICAgeworICAgICAgYW5z ID0gc2ltX2ZwdV96ZXJvOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IHNpbV9mcHVfbWF4ICgmYW5zLCAmd29wMSwgJndvcDIpOworICAgIH0KKyAg CisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNdLCAmYW5zKTsKKyAgVFJBQ0Vf RlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBNSU5GLkQKK3JycnIs MDExMTExMSxSUlJSLDAgKyB3d3d3LDAxMDAwMTExMTAxMDpGX0k6OjptaW5m X2QKKyp2ODUwZTJ2MworIm1pbmYuZCByPHJlZzFlPiwgcjxyZWcyZT4sIHI8 cmVnM2U+IgoreworICBzaW1fZnB1IGFucywgd29wMSwgd29wMjsKKworICBz aW1fZnB1XzIzMnRvICgmd29wMSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7 CisgIHNpbV9mcHVfMjMydG8gKCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVn MmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsK KworICBpZiAoc2ltX2ZwdV9pc19uYW4oJndvcDEpIHx8IHNpbV9mcHVfaXNf bmFuKCZ3b3AyKSkKKyAgICB7CisgICAgICBpZiAoRlBTUiAmIEZQU1JfWEVW KQorCXsKKwkgIFNpZ25hbEV4Y2VwdGlvbkZQRShzZCwgMSk7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIGFucyA9IHNpbV9mcHVfcW5hbjsKKwl9CisgICAg fQorICBlbHNlIGlmIChGUFNSICYgRlBTUl9GUworCSAgICYmICgoc2ltX2Zw dV9pc196ZXJvICgmd29wMSkgfHwgc2ltX2ZwdV9pc19kZW5vcm0gKCZ3b3Ax KSkKKwkgICAgICAgJiYgKHNpbV9mcHVfaXNfemVybyAoJndvcDIpIHx8IHNp bV9mcHVfaXNfZGVub3JtICgmd29wMikpKSkgCisgICAgeworICAgICAgYW5z ID0gc2ltX2ZwdV96ZXJvOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IHNpbV9mcHVfbWluICgmYW5zLCAmd29wMSwgJndvcDIpOworICAgIH0KKyAg CisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwg JmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKwor Ly8gTUlORi5TCitycnJyciwxMTExMTEsUlJSUlIgKyB3d3d3dywxMDAwMTEw MTAxMDpGX0k6OjptaW5mX3MKKyp2ODUwZTJ2MworIm1pbmYucyByPHJlZzE+ LCByPHJlZzI+LCByPHJlZzM+IgoreworICBzaW1fZnB1IGFucywgd29wMSwg d29wMjsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AxLCBHUltyZWcxXSk7Cisg IHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBf SU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBpZiAoc2ltX2ZwdV9p c19uYW4oJndvcDEpIHx8IHNpbV9mcHVfaXNfbmFuKCZ3b3AyKSkKKyAgICB7 CisgICAgICBpZiAoRlBTUiAmIEZQU1JfWEVWKQorCXsKKwkgIFNpZ25hbEV4 Y2VwdGlvbkZQRShzZCwgMCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGFu cyA9IHNpbV9mcHVfcW5hbjsKKwl9CisgICAgfQorICBlbHNlIGlmIChGUFNS ICYgRlBTUl9GUworCSAgICYmICgoc2ltX2ZwdV9pc196ZXJvICgmd29wMSkg fHwgc2ltX2ZwdV9pc19kZW5vcm0gKCZ3b3AxKSkKKwkgICAgICAgJiYgKHNp bV9mcHVfaXNfemVybyAoJndvcDIpIHx8IHNpbV9mcHVfaXNfZGVub3JtICgm d29wMikpKSkKKyAgICB7CisgICAgICBhbnMgPSBzaW1fZnB1X3plcm87Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgc2ltX2ZwdV9taW4gKCZhbnMs ICZ3b3AxLCAmd29wMik7CisgICAgfQorICAKKyAgc2ltX2ZwdV90bzMyICgm R1JbcmVnM10sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFu cyk7Cit9CisKKy8vIE1TVUJGLlMKK3JycnJyLDExMTExMSxSUlJSUiArIHd3 d3d3LDEwMSxXLDAxLFdXV1csMDpGX0k6Ojptc3ViZl9zCisqdjg1MGUydjMK KyJtc3ViZi5zIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4sIHI8cmVnND4i Cit7CisgIHNpbV9mcHUgYW5zLCB3b3AxLCB3b3AyLCB3b3AzOworICBzaW1f ZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wMSwg R1JbcmVnMV0pOworICBzaW1fZnB1XzMydG8gKCZ3b3AyLCBHUltyZWcyXSk7 CisgIHNpbV9mcHVfMzJ0byAoJndvcDMsIEdSW3JlZzNdKTsKKyAgVFJBQ0Vf RlBfSU5QVVRfRlBVMyAoJndvcDEsICZ3b3AyLCAmd29wMyk7CisKKyAgc3Rh dHVzID0gc2ltX2ZwdV9tdWwgKCZhbnMsICZ3b3AxLCAmd29wMik7CisgIHN0 YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9ST1VO RCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisgIHdv cDEgPSBhbnM7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3N1YiAoJmFucywgJndv cDEsICZ3b3AzKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfNjQgKCZh bnMsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxv d19pbmV4YWN0KTsKKworICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBT Ul9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDApOwor CisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzRdLCAmYW5zKTsKKyAgVFJBQ0Vf RlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisvLyBNVUxGLkQKK3JycnIs MDExMTExMSxSUlJSLDAgKyB3d3d3LDAxMDAwMTExMDEwMDpGX0k6OjptdWxm X2QKKyp2ODUwZTJ2MworIm11bGYuZCByPHJlZzFlPiwgcjxyZWcyZT4sIHI8 cmVnM2U+IgoreworICBzaW1fZnB1IGFucywgd29wMSwgd29wMjsKKyAgc2lt X2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3b3Ax LCBHUltyZWcxZSsxXSwgR1JbcmVnMWVdKTsKKyAgc2ltX2ZwdV8yMzJ0byAo JndvcDIsIEdSW3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9J TlBVVF9GUFUyICgmd29wMSwgJndvcDIpOworCisgIHN0YXR1cyA9IHNpbV9m cHVfbXVsICgmYW5zLCAmd29wMSwgJndvcDIpOworICBzdGF0dXMgfD0gc2lt X2ZwdV9yb3VuZF82NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2Zw dV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0ZV9mcHNy IChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJIHwgRlBTUl9YRU8g fCBGUFNSX1hFVSwgMSk7CisKKyAgc2ltX2ZwdV90bzIzMiAoJkdSW3JlZzNl KzFdLCAmR1JbcmVnM2VdLCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQ VTEgKCZhbnMpOworfQorCisvLyBNVUxGLlMKK3JycnJyLDExMTExMSxSUlJS UiArIHd3d3d3LDEwMDAxMTAwMTAwOkZfSTo6Om11bGZfcworKnY4NTBlMnYz CisibXVsZi5zIHI8cmVnMT4sIHI8cmVnMj4sIHI8cmVnMz4iCit7CisgIHNp bV9mcHUgYW5zLCB3b3AxLCB3b3AyOworICBzaW1fZnB1X3N0YXR1cyBzdGF0 dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wMSwgR1JbcmVnMV0pOworICBz aW1fZnB1XzMydG8gKCZ3b3AyLCBHUltyZWcyXSk7CisgIFRSQUNFX0ZQX0lO UFVUX0ZQVTIgKCZ3b3AxLCAmd29wMik7CisKKyAgc3RhdHVzID0gc2ltX2Zw dV9tdWwgKCZhbnMsICZ3b3AxLCAmd29wMik7CisgIHN0YXR1cyB8PSBzaW1f ZnB1X3JvdW5kXzMyICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1 X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgdXBkYXRlX2Zwc3Ig KHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRUkgfCBGUFNSX1hFTyB8 IEZQU1JfWEVVLCAwKTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwg JmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKwor Ly8gTkVHRi5ECitycnJyLDAxMTExMTEwMDAwMSArIHd3d3csMDEwMDAxMDEx MDAwOkZfSTo6Om5lZ2ZfZAorKnY4NTBlMnYzCisibmVnZi5kIHI8cmVnMmU+ LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDsKKyAgc2ltX2Zw dV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3b3AsIEdS W3JlZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9JTlBVVF9GUFUx ICgmd29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1X25lZyAoJmFucywgJndv cCk7CisKKyAgY2hlY2tfaW52YWxpZF9zbmFuKHNkLCBzdGF0dXMsIDEpOwor CisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwg JmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKwor Ly8gTkVHRi5TCitycnJyciwxMTExMTEwMDAwMSArIHd3d3d3LDEwMDAxMDAx MDAwOkZfSTo6Om5lZ2ZfcworKnY4NTBlMnYzCisibmVnZi5zIHI8cmVnMj4s IHI8cmVnMz4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9mcHVf c3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AsIEdSW3Jl ZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisKKyAgc3Rh dHVzID0gc2ltX2ZwdV9uZWcgKCZhbnMsICZ3b3ApOworCisgIGNoZWNrX2lu dmFsaWRfc25hbihzZCwgc3RhdHVzLCAwKTsKKworICBzaW1fZnB1X3RvMzIg KCZHUltyZWczXSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgm YW5zKTsKK30KKworLy8gTk1BRERGLlMKK3JycnJyLDExMTExMSxSUlJSUiAr IHd3d3d3LDEwMSxXLDEwLFdXV1csMDpGX0k6OjpubWFkZGZfcworKnY4NTBl MnYzCisibm1hZGRmLnMgcjxyZWcxPiwgcjxyZWcyPiwgcjxyZWczPiwgcjxy ZWc0PiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDIsIHdvcDM7Cisg IHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3 b3AxLCBHUltyZWcxXSk7CisgIHNpbV9mcHVfMzJ0byAoJndvcDIsIEdSW3Jl ZzJdKTsKKyAgc2ltX2ZwdV8zMnRvICgmd29wMywgR1JbcmVnM10pOworICBU UkFDRV9GUF9JTlBVVF9GUFUzICgmd29wMSwgJndvcDIsICZ3b3AzKTsKKwor ICBzdGF0dXMgPSBzaW1fZnB1X211bCAoJmFucywgJndvcDEsICZ3b3AyKTsK KyAgc3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VU X1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsK KyAgd29wMSA9IGFuczsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfYWRkICgmYW5z LCAmd29wMSwgJndvcDMpOworICBzdGF0dXMgfD0gc2ltX2ZwdV9yb3VuZF82 NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2ltX2ZwdV9kZW5vcm1fdW5k ZXJmbG93X2luZXhhY3QpOworICB3b3AxID0gYW5zOworICBzdGF0dXMgfD0g c2ltX2ZwdV9uZWcgKCZhbnMsICZ3b3AxKTsKKworICB1cGRhdGVfZnBzciAo c2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwg RlBTUl9YRVUsIDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzRdLCAm YW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisv LyBOTVNVQkYuUworcnJycnIsMTExMTExLFJSUlJSICsgd3d3d3csMTAxLFcs MTEsV1dXVywwOkZfSTo6Om5tc3ViZl9zCisqdjg1MGUydjMKKyJubXN1YmYu cyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+LCByPHJlZzQ+IgoreworICBz aW1fZnB1IGFucywgd29wMSwgd29wMiwgd29wMzsKKyAgc2ltX2ZwdV9zdGF0 dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEsIEdSW3JlZzFd KTsKKyAgc2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0pOworICBzaW1f ZnB1XzMydG8gKCZ3b3AzLCBHUltyZWczXSk7CisgIFRSQUNFX0ZQX0lOUFVU X0ZQVTMgKCZ3b3AxLCAmd29wMiwgJndvcDMpOworCisgIHN0YXR1cyA9IHNp bV9mcHVfbXVsICgmYW5zLCAmd29wMSwgJndvcDIpOworICBzdGF0dXMgfD0g c2ltX2ZwdV9yb3VuZF82NCAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2lt X2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworICB3b3AxID0gYW5z OworICBzdGF0dXMgfD0gc2ltX2ZwdV9zdWIgKCZhbnMsICZ3b3AxLCAmd29w Myk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNS X0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFj dCk7CisgIHdvcDEgPSBhbnM7CisgIHN0YXR1cyB8PSBzaW1fZnB1X25lZyAo JmFucywgJndvcDEpOworCisgIHVwZGF0ZV9mcHNyIChzZCwgc3RhdHVzLCBG UFNSX1hFViB8IEZQU1JfWEVJIHwgRlBTUl9YRU8gfCBGUFNSX1hFVSwgMCk7 CisKKyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnNF0sICZhbnMpOworICBUUkFD RV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIFJFQ0lQRi5ECity cnJyLDAxMTExMTEwMDAwMSArIHd3d3csMDEwMDAxMDExMTEwOkZfSTo6OnJl Y2lwZi5kCisqdjg1MGUydjMKKyJyZWNpcGYuZCByPHJlZzJlPiwgcjxyZWcz ZT4iCit7CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9mcHVfc3RhdHVz IHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgmd29wLCBHUltyZWcyZSsx XSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7 CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9kaXYgKCZhbnMsICZzaW1fZnB1X29u ZSwgJndvcCk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5z LCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3df aW5leGFjdCk7CisKKyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMsIEZQU1Jf WEVWIHwgRlBTUl9YRVogfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwgRlBTUl9Y RVUsIDEpOworCisgIHNpbV9mcHVfdG8yMzIgKCZHUltyZWczZSsxXSwgJkdS W3JlZzNlXSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5z KTsKK30KKworLy8gUkVDSVBGLlMKK3JycnJyLDExMTExMTAwMDAxICsgd3d3 d3csMTAwMDEwMDExMTA6Rl9JOjo6cmVjaXBmLnMKKyp2ODUwZTJ2MworInJl Y2lwZi5zIHI8cmVnMj4sIHI8cmVnMz4iCit7CisgIHNpbV9mcHUgYW5zLCB3 b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzMy dG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAo JndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9kaXYgKCZhbnMsICZzaW1f ZnB1X29uZSwgJndvcCk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0 ICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRl cmZsb3dfaW5leGFjdCk7CisKKyAgdXBkYXRlX2Zwc3IgKHNkLCBzdGF0dXMs IEZQU1JfWEVWIHwgRlBTUl9YRVogfCBGUFNSX1hFSSB8IEZQU1JfWEVPIHwg RlBTUl9YRVUsIDApOworCisgIHNpbV9mcHVfdG8zMiAoJkdSW3JlZzNdLCAm YW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQorCisv LyBSU1FSVEYuRAorcnJyciwwMTExMTExMDAwMTAgKyB3d3d3LDAxMDAwMTAx MTExMDpGX0k6Ojpyc3FydGYuZAorKnY4NTBlMnYzCisicnNxcnRmLmQgcjxy ZWcyZT4sIHI8cmVnM2U+IgoreworICBzaW1fZnB1IGFucywgd29wOworICBz aW1fZnB1X3N0YXR1cyBzdGF0dXM7CisKKyAgc2ltX2ZwdV8yMzJ0byAoJndv cCwgR1JbcmVnMmUrMV0sIEdSW3JlZzJlXSk7CisgIFRSQUNFX0ZQX0lOUFVU X0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9mcHVfc3FydCAoJmFu cywgJndvcCk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3JvdW5kXzY0ICgmYW5z LCBGUFNSX0dFVF9ST1VORCgpLCBzaW1fZnB1X2Rlbm9ybV91bmRlcmZsb3df aW5leGFjdCk7CisgIHdvcCA9IGFuczsKKyAgc3RhdHVzID0gc2ltX2ZwdV9k aXYgKCZhbnMsICZzaW1fZnB1X29uZSwgJndvcCk7CisgIHN0YXR1cyB8PSBz aW1fZnB1X3JvdW5kXzY0ICgmYW5zLCBGUFNSX0dFVF9ST1VORCgpLCBzaW1f ZnB1X2Rlbm9ybV91bmRlcmZsb3dfaW5leGFjdCk7CisKKyAgdXBkYXRlX2Zw c3IgKHNkLCBzdGF0dXMsIEZQU1JfWEVWIHwgRlBTUl9YRVogfCBGUFNSX1hF SSB8IEZQU1JfWEVPIHwgRlBTUl9YRVUsIDEpOworCisgIHNpbV9mcHVfdG8y MzIgKCZHUltyZWczZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisgIFRSQUNF X0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gUlNRUlRGLlMKK3Jy cnJyLDExMTExMTAwMDEwICsgd3d3d3csMTAwMDEwMDExMTA6Rl9JOjo6cnNx cnRmLnMKKyp2ODUwZTJ2MworInJzcXJ0Zi5zIHI8cmVnMj4sIHI8cmVnMz4i Cit7CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0 YXR1czsKKworICBzaW1fZnB1XzMydG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAg VFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2lt X2ZwdV9zcXJ0ICgmYW5zLCAmd29wKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVf cm91bmRfMzIgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNpbV9mcHVfZGVu b3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKyAgd29wID0gYW5zOworICBzdGF0 dXMgPSBzaW1fZnB1X2RpdiAoJmFucywgJnNpbV9mcHVfb25lLCAmd29wKTsK KyAgc3RhdHVzIHw9IHNpbV9mcHVfcm91bmRfMzIgKCZhbnMsIEZQU1JfR0VU X1JPVU5EKCksIHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsK KworICB1cGRhdGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNS X1hFWiB8IEZQU1JfWEVJIHwgRlBTUl9YRU8gfCBGUFNSX1hFVSwgMCk7CisK KyAgc2ltX2ZwdV90bzMyICgmR1JbcmVnM10sICZhbnMpOworICBUUkFDRV9G UF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9CisKKy8vIFNRUlRGLkQKK3JycnIs MDExMTExMTAwMDAwICsgd3d3dywwMTAwMDEwMTExMTA6Rl9JOjo6c3FydGYu ZAorKnY4NTBlMnYzCisic3FydGYuZCByPHJlZzJlPiwgcjxyZWczZT4iCit7 CisgIHNpbV9mcHUgYW5zLCB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1 czsKKworICBzaW1fZnB1XzIzMnRvICgmd29wLCBHUltyZWcyZSsxXSwgR1Jb cmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5QVVRfRlBVMSAoJndvcCk7CisKKyAg c3RhdHVzID0gc2ltX2ZwdV9zcXJ0ICgmYW5zLCAmd29wKTsKKyAgc3RhdHVz IHw9IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCks IHNpbV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRh dGVfZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSwgMSk7 CisKKyAgc2ltX2ZwdV90bzIzMiAoJkdSW3JlZzNlKzFdLCAmR1JbcmVnM2Vd LCAmYW5zKTsKKyAgVFJBQ0VfRlBfUkVTVUxUX0ZQVTEgKCZhbnMpOworfQor CisvLyBTUVJURi5TCitycnJyciwxMTExMTEwMDAwMCArIHd3d3d3LDEwMDAx MDAxMTEwOkZfSTo6OnNxcnRmLnMKKyp2ODUwZTJ2MworInNxcnRmLnMgcjxy ZWcyPiwgcjxyZWczPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDsKKyAgc2lt X2ZwdV9zdGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcCwg R1JbcmVnMl0pOworICBUUkFDRV9GUF9JTlBVVF9GUFUxICgmd29wKTsKKwor ICBzdGF0dXMgPSBzaW1fZnB1X3NxcnQgKCZhbnMsICZ3b3ApOworICBzdGF0 dXMgfD0gc2ltX2ZwdV9yb3VuZF8zMiAoJmFucywgRlBTUl9HRVRfUk9VTkQo KSwgc2ltX2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVw ZGF0ZV9mcHNyIChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJLCAw KTsKKworICBzaW1fZnB1X3RvMzIgKCZHUltyZWczXSwgJmFucyk7CisgIFRS QUNFX0ZQX1JFU1VMVF9GUFUxICgmYW5zKTsKK30KKworLy8gU1VCRi5ECity cnJyLDAxMTExMTEsUlJSUiwwICsgd3d3dywwMTAwMDExMTAwMTA6Rl9JOjo6 c3ViZi5kCisqdjg1MGUydjMKKyJzdWJmLmQgcjxyZWcxZT4sIHI8cmVnMmU+ LCByPHJlZzNlPiIKK3sKKyAgc2ltX2ZwdSBhbnMsIHdvcDEsIHdvcDI7Cisg IHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgm d29wMSwgR1JbcmVnMWUrMV0sIEdSW3JlZzFlXSk7CisgIHNpbV9mcHVfMjMy dG8gKCZ3b3AyLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0Vf RlBfSU5QVVRfRlBVMiAoJndvcDEsICZ3b3AyKTsKKworICBzdGF0dXMgPSBz aW1fZnB1X3N1YiAoJmFucywgJndvcDIsICZ3b3AxKTsKKyAgc3RhdHVzIHw9 IHNpbV9mcHVfcm91bmRfNjQgKCZhbnMsIEZQU1JfR0VUX1JPVU5EKCksIHNp bV9mcHVfZGVub3JtX3VuZGVyZmxvd19pbmV4YWN0KTsKKworICB1cGRhdGVf ZnBzciAoc2QsIHN0YXR1cywgRlBTUl9YRVYgfCBGUFNSX1hFSSB8IEZQU1Jf WEVPIHwgRlBTUl9YRVUsIDEpOworCisgIHNpbV9mcHVfdG8yMzIgKCZHUlty ZWczZSsxXSwgJkdSW3JlZzNlXSwgJmFucyk7CisgIFRSQUNFX0ZQX1JFU1VM VF9GUFUxICgmYW5zKTsKK30KKworLy8gU1VCRi5TCitycnJyciwxMTExMTEs UlJSUlIgKyB3d3d3dywxMDAwMTEwMDAxMDpGX0k6OjpzdWJmLnMKKyp2ODUw ZTJ2MworInN1YmYucyByPHJlZzE+LCByPHJlZzI+LCByPHJlZzM+Igorewor ICBzaW1fZnB1IGFucywgd29wMSwgd29wMjsKKyAgc2ltX2ZwdV9zdGF0dXMg c3RhdHVzOworCisgIHNpbV9mcHVfMzJ0byAoJndvcDEsIEdSW3JlZzFdKTsK KyAgc2ltX2ZwdV8zMnRvICgmd29wMiwgR1JbcmVnMl0pOworICBUUkFDRV9G UF9JTlBVVF9GUFUyICgmd29wMSwgJndvcDIpOworCisgIHN0YXR1cyA9IHNp bV9mcHVfc3ViICgmYW5zLCAmd29wMiwgJndvcDEpOworICBzdGF0dXMgfD0g c2ltX2ZwdV9yb3VuZF8zMiAoJmFucywgRlBTUl9HRVRfUk9VTkQoKSwgc2lt X2ZwdV9kZW5vcm1fdW5kZXJmbG93X2luZXhhY3QpOworCisgIHVwZGF0ZV9m cHNyIChzZCwgc3RhdHVzLCBGUFNSX1hFViB8IEZQU1JfWEVJIHwgRlBTUl9Y RU8gfCBGUFNSX1hFVSwgMCk7CisKKyAgc2ltX2ZwdV90bzMyICgmR1JbcmVn M10sICZhbnMpOworICBUUkFDRV9GUF9SRVNVTFRfRlBVMSAoJmFucyk7Cit9 CisKKy8vIFRSRlNSCiswMDAwMDExMTExMTAwMDAwICsgMDAwMDAxMDAwMDAw LGJiYiwwOkZfSTo6OnRyZnNyCisqdjg1MGUydjMKKyJ0cmZzciI6KGJiYiA9 PSAwKQorInRyZnNyIDxiYmI+IgoreworICBUUkFDRV9BTFVfSU5QVVQxIChH RVRfRlBDQygpKTsKKworICBpZiAoVEVTVF9GUENDIChiYmIpKQorICAgIFBT VyB8PSBQU1dfWjsKKyAgZWxzZSAKKyAgICBQU1cgJj0gflBTV19aOyAgCisK KyAgVFJBQ0VfQUxVX1JFU1VMVDEgKFBTVyk7Cit9CisKKy8vIFRSTkNGLkRM CitycnJyLDAxMTExMTEwMDAwMSArIHd3d3csMDEwMDAxMDEwMTAwOkZfSTo6 OnRybmNmX2RsCisqdjg1MGUydjMKKyJ0cm5jZi5kbCByPHJlZzJlPiwgcjxy ZWczZT4iCit7CisgIHNpZ25lZDY0IGFuczsKKyAgc2ltX2ZwdSB3b3A7Cisg IHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1fZnB1XzIzMnRvICgm d29wLCBHUltyZWcyZSsxXSwgR1JbcmVnMmVdKTsKKyAgVFJBQ0VfRlBfSU5Q VVRfRlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3VuZF82 NCAoJndvcCwgc2ltX2ZwdV9yb3VuZF96ZXJvLCBzaW1fZnB1X2Rlbm9ybV96 ZXJvKTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfdG82NGkgKCZhbnMsICZ3b3As IHNpbV9mcHVfcm91bmRfemVybyk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBz dGF0dXMsIDEpOworCisgIEdSW3JlZzNlXSA9IGFuczsKKyAgR1JbcmVnM2Ur MV0gPSBhbnM+PjMyTDsKKyAgVFJBQ0VfRlBfUkVTVUxUX1dPUkQyIChHUlty ZWczZV0sIEdSW3JlZzNlKzFdKTsKK30KKworLy8gVFJOQ0YuRFcKK3JycnIs MDExMTExMTAwMDAxICsgd3d3d3csMTAwMDEwMTAwMDA6Rl9JOjo6dHJuY2Zf ZHcKKyp2ODUwZTJ2MworInRybmNmLmR3IHI8cmVnMmU+LCByPHJlZzM+Igor eworICB1aW50MzIgYW5zOworICBzaW1fZnB1IHdvcDsKKyAgc2ltX2ZwdV9z dGF0dXMgc3RhdHVzOworCisgIHNpbV9mcHVfMjMydG8gKCZ3b3AsIEdSW3Jl ZzJlKzFdLCBHUltyZWcyZV0pOworICBUUkFDRV9GUF9JTlBVVF9GUFUxICgm d29wKTsKKworICBzdGF0dXMgPSBzaW1fZnB1X3JvdW5kXzMyICgmd29wLCBz aW1fZnB1X3JvdW5kX3plcm8sIHNpbV9mcHVfZGVub3JtX3plcm8pOworICBz dGF0dXMgfD0gc2ltX2ZwdV90bzMyaSAoJmFucywgJndvcCwgc2ltX2ZwdV9y b3VuZF96ZXJvKTsKKworICBjaGVja19jdnRfZmkoc2QsIHN0YXR1cywgMSk7 CisKKyAgR1JbcmVnM10gPSBhbnM7CisgIFRSQUNFX0ZQX1JFU1VMVF9XT1JE MSAoYW5zKTsKK30KKworLy8gVFJOQ0YuU0wKK3JycnJyLDExMTExMTAwMDAx ICsgd3d3dywwMTAwMDEwMDAxMDA6Rl9JOjo6dHJuY2Zfc2wKKyp2ODUwZTJ2 MworInRybmNmLnNsIHI8cmVnMj4sIHI8cmVnM2U+IgoreworICBzaWduZWQ2 NCBhbnM7CisgIHNpbV9mcHUgd29wOworICBzaW1fZnB1X3N0YXR1cyBzdGF0 dXM7CisKKyAgc2ltX2ZwdV8zMnRvICgmd29wLCBHUltyZWcyXSk7CisgIFRS QUNFX0ZQX0lOUFVUX0ZQVTEgKCZ3b3ApOworCisgIHN0YXR1cyA9IHNpbV9m cHVfcm91bmRfNjQgKCZ3b3AsIHNpbV9mcHVfcm91bmRfemVybywgc2ltX2Zw dV9kZW5vcm1femVybyk7CisgIHN0YXR1cyB8PSBzaW1fZnB1X3RvNjRpICgm YW5zLCAmd29wLCBzaW1fZnB1X3JvdW5kX3plcm8pOworCisgIEdSW3JlZzNl XSA9IGFuczsKKyAgR1JbcmVnM2UrMV0gPSBhbnMgPj4gMzJMOworICBUUkFD RV9GUF9SRVNVTFRfV09SRDIgKEdSW3JlZzNlXSwgR1JbcmVnM2UrMV0pOwor fQorCisvLyBUUk5DRi5TVworcnJycnIsMTExMTExMDAwMDEgKyB3d3d3dywx MDAwMTAwMDAwMDpGX0k6Ojp0cm5jZl9zdworKnY4NTBlMnYzCisidHJuY2Yu c3cgcjxyZWcyPiwgcjxyZWczPiIKK3sKKyAgdWludDMyIGFuczsKKyAgc2lt X2ZwdSB3b3A7CisgIHNpbV9mcHVfc3RhdHVzIHN0YXR1czsKKworICBzaW1f ZnB1XzMydG8gKCZ3b3AsIEdSW3JlZzJdKTsKKyAgVFJBQ0VfRlBfSU5QVVRf RlBVMSAoJndvcCk7CisKKyAgc3RhdHVzID0gc2ltX2ZwdV9yb3VuZF8zMiAo JndvcCwgc2ltX2ZwdV9yb3VuZF96ZXJvLCBzaW1fZnB1X2Rlbm9ybV96ZXJv KTsKKyAgc3RhdHVzIHw9IHNpbV9mcHVfdG8zMmkgKCZhbnMsICZ3b3AsIHNp bV9mcHVfcm91bmRfemVybyk7CisKKyAgY2hlY2tfY3Z0X2ZpKHNkLCBzdGF0 dXMsIDApOworCisgIEdSW3JlZzNdID0gYW5zOworICBUUkFDRV9GUF9SRVNV TFRfV09SRDEgKGFucyk7Cit9CisK --_002_371569CBCFB2E745B891DBB88B2DFDDD19EB425D6BKCINPUNHJCMS0_--