Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuTNa-007OJi-1W for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 10:41:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuTNZ-00CqGq-12 for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 10:41:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vuTNY-00CqGi-2Q for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 10:41:28 +0000 Received: from mail-westcentralusazolkn19013073.outbound.protection.outlook.com ([52.103.7.73] helo=CY3PR05CU001.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vuTNU-00000000qpL-3wSw for pgsql-hackers@postgresql.org; Mon, 23 Feb 2026 10:41:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X+3bblQ9kYGER1DVym+rtMq8ZIaWQlGy5tseeyldLvyrQhfUB7tk8EzBuac7OZo5U1+q2p5qI0UYqGBYZVCWn14AK7dmbxr+8VP7dkJ6aIlSV1I/4v0tMjYb2t9idOvaskAiSU2jwDt0PXLUBbMqFRRfQ/k3SFif/cwuyRfNmk1Hyiq2jBUEEp/mBkwgZ5nA0kK/osoECamlrxSyaRCu3ztYWv7nU7wa/SFYrhGVB9AjfMh0WriOFXS6uDhvJinOTUCbVT7N1m2qq7VHlYyOePun/PLexjwlORAiU92kZ8JK42YTqyg6w1Mgs1aEfYe+jyyGLrvvV+Js82nGEcWuiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=40AHwgt3xP82tB2Zm3G5kWpN1lckhZcWvkWqH0AM+b4=; b=y3zJJOp/HEB0/d2E9kfF0IC/mxSAChkn+jTTR12HDUF/AA090YExOAz0f0tXdDdfGbnLmZTJIFIzonxsd8j67BEA4YJeWPpgLh3A+da3luMTKOlGcJ7Fw31Av0EKLaDIHBgjSR8U+1DgMwm8hGyv8wt8Hp/ugR8Xp8KO8a0IK406YQdY2+YEYyL+y86BdMD1xMLkeW6sd22eF5W4VXw4sM57VVi9oH3sIcwfHn7O0Gli0YSOArDLnLx3vW/moyGrd9p5PsNiKtwQwYcco3THwbdGuzM2cw7qIkBc2ucK+9E9OmgMIN1jpM8762/7TuVOUA+PQ4Vsee7rIDGDFpCcSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=40AHwgt3xP82tB2Zm3G5kWpN1lckhZcWvkWqH0AM+b4=; b=SdwTBAzVMuAtxOOaoCWRWYR77rHWysm7HDkn0nn2lmeYSUC3XeLioOcs2MWSjWsw/ANyPSUixJQ/k7g2Gv7Wb3+1eFnYFfh8/6319RZW8DMXXHKpjErMzdHBC/js5c/U3HwFJGM1/RAw6W3DIoPahE8woU0iHxq8/A6UEtj+bkBAQzgHO7l0Y57qYgmH9xIpQBKoPACio8HnB1lqnNT5ylfPrnSAslDvR3e1lkxvqJhhzF46q75MHgnSnAcW+Nqm/JJRfNv6M10Fp/edddc1OxLilu/YudD+Vkgxxf1LLPZw1IoSPCBEZg6RnFgZnKIB12ZzXg+H+Q0ED7TU26zLhw== Received: from PH0PR08MB7020.namprd08.prod.outlook.com (2603:10b6:510:74::15) by BLAPR08MB6946.namprd08.prod.outlook.com (2603:10b6:208:328::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Mon, 23 Feb 2026 10:41:20 +0000 Received: from PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273]) by PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273%4]) with mapi id 15.20.9632.010; Mon, 23 Feb 2026 10:41:20 +0000 From: Boris Mironov To: Madyshev Egor , "pgsql-hackers@postgresql.org" Subject: Re: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Topic: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Index: AQHcUwuRPlzLCtdZw06GAdoL15fmHbTwZ0aAgAGpzjGAACRkgIAAEcrGgAQQLgCAAG6d+YAGXmPMgAFzjL6AAV1tS4BpseD8gAEgG5GAAGN+EIAAFWg0gArDj2mAAAeBfoAE2r6AgBXReII= Date: Mon, 23 Feb 2026 10:41:19 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR08MB7020:EE_|BLAPR08MB6946:EE_ x-ms-office365-filtering-correlation-id: 8ec31a60-dbb1-4125-4ed8-08de72c81493 x-ms-exchange-slblob-mailprops: WaIXnCbdHrPy8Gg0T1tV+ubdyTLMpos/itAn4zXDuNNuFszLpdFxjRnd+PnL6e7Y0Xd+0Au2ZjMNs4/3Z7CLbzAqktGyVPR8yqbkC2awys4L84amsXzFD19tBmvpjlXSH0oLwi/vjmARm3LoRKGvaEOwaviK0Yby5gmApV0A5d+d4y16P4i3gPpUznSefmmqDUreHk+kl1vvRfybaLtwJD1L6XcGRYMhauuVXZRcY0VqaSnEOQw0paMVPxhX7/ohRlXPBZI1b7++AHvz7j7JK6bTqjsrFQDKLqHan4N0l+sPsYqUH8+Xy/Mm0ITdb4iC9RgkmTfmO1HC8zh3eDSoa5c0o68siTqvKSDSS1YMMZjCZNZu30MlM1X9dwmOAWYg1YjhLZSytgy8gDDvUel82pLdW2HchDmxSLaNm4QswB6u5DgLKy9/yZgwXWlSYPMNWgc9S45o1vDSpkhdMO2JnnvF0Zs3lPFMxIL4A3WfvFywLeYjfLSG0sNzp+TyNpwmMgEMdH1OOUj855fNrLKAIMwRtf9cppmx5KB2y5yqP+WcFzQxvI8LsqTFzYsMFmbGHnaKHwbDLDCnEN6mmGcIwE0uR4lNFlBcPre/qJrvVZgq8Mq1rDsRsbsYAwAp79A3k7Q0UPRuKYrPvop3kmIjQOX2/qxvinrPmeo+Q2zhmBORxIClHQTkRM44r70/1BApFoIZm5OjB0N+d35c3f1ZmPeLrl5XihY4uGLllZ7m8cOW8G/KO9PgKzn7zq3nOC+1l4MkT/rVsOg= x-microsoft-antispam: BCL:0;ARA:14566002|31061999003|6092099016|8060799015|461199028|19110799012|12121999013|15080799012|8062599012|15030799006|51005399006|3412199025|102099032|440099028|40105399003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?Z2D217w/HTEPOqyiJbaQqOWPgM3DXiR3nhvImaK8HjXCQlUt8ekqrwOyoa?= =?iso-8859-1?Q?8WEHNCY4Y2BMxhN9NXj/zWZqT0JJ3A7QEp+AqBtva0Gp2Wzr3aU8FQzLCG?= =?iso-8859-1?Q?uRZRCcvF8Y/H4qHRedNfP72IqwIF6XIXsdvPNZ5v9cFEFnkYRBqpnZvhWO?= =?iso-8859-1?Q?KX3LXAYW9tdvke8XPtHpbe0xbLbMusQ2DpHdNSONAjev6Teeb5yBHrV6tb?= =?iso-8859-1?Q?aiYQiEWbmctzW5RrcdjfLzT1atoUgAzyaKCBFHlqkA3n9dqSXeP0GQDMge?= =?iso-8859-1?Q?raY8TK8XXGh9O0hL2zTg3zSnj8RamfrRBdoE0IFEMXSJIQRdM7HdmhKUSW?= =?iso-8859-1?Q?C4u6nSOJJDEHZ9h8vT0sN3bdrfFKk2nanl8V9OVbUdnw7huXFTlTKsjpb4?= =?iso-8859-1?Q?ogWdkikM5+3Xc8gbrrOd7jLZBGCYRH5lt3onz79V1EQtonA+VaLJOcTUWy?= =?iso-8859-1?Q?EWF3R6bjPR215+2TZkvrQUqHg9nZyqcwfEvIcqhWdayYV8KSnNUL+Ez1Cz?= =?iso-8859-1?Q?mXf5yllHLirqnAhCELtTia16hSgfyJcj97u/sr26IALh4RJapmRsqMRE+N?= =?iso-8859-1?Q?tPn8oMFhEfss3z28xyEJ1WW3BB+/bWvMoc+mq4qu3xSDYJ3iScCXy4OmX2?= =?iso-8859-1?Q?Y2IuPUK/kJhUUo94toamLJ+Pr011ZIZUDMB8zjvLIMlmMGYm32uCjclE0x?= =?iso-8859-1?Q?yuMdRVVhpS+GpMQ2TVV5x6UsI/cLTZfGV14F9vnp4IyhifJB8LQrASmq05?= =?iso-8859-1?Q?B+vlkqGgvQFh003/AKk71WADLQTkQ1iDOsCakY9K2DLZ8FRDMl7LccFbBZ?= =?iso-8859-1?Q?DQixm6G+ez3Z20jsA3gvejUEa/+FTzTe0yMLJlbE6P1btLO6Pfo2GH+C9S?= =?iso-8859-1?Q?Yho/gCHC9qH/GjQwzHFSt1aOoORfoWK0wbD49gdUO0nAKRPTDkCrsdoyxL?= =?iso-8859-1?Q?RNX110tiHfCuBUjk1QbMTl42208UGmY9kUH4wznzk0nbf30+9GciWMJ1ev?= =?iso-8859-1?Q?eEmfqjR7Le42UZiIhOaYE6Rftii0wIoBY+cnjKHChrdVRWeBciT56JuO6A?= =?iso-8859-1?Q?O4Z/TFs8ats6vMj1UCosSRx+pAwHjvVJBU7asKYlDysppZfOz4F8Ndy6HN?= =?iso-8859-1?Q?Ehem+jd2fwCz6uXKNNp4l17L6IkoOMV4yIN3oK4N+/MChBz1TpwkWTI2Kk?= =?iso-8859-1?Q?aQ6tZ/DFmkdGYdRhi8SsZpJ4IQLZyhakyqltAc6MOU57LAmC+TCWf5tbp+?= =?iso-8859-1?Q?h4M2fw9YMDDGM9GEDEBTSBCi6XfFL6C8xlsw4v8Xfh6SdU+++icIhtUrsD?= =?iso-8859-1?Q?vwHEriw5hqYN0aDX8sXzb+iL7A=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?8kUxwJJCldUvKO6ivjiBucLS6xPyNG8xqCNwG1gbZ4NJcL7xrRU5JgolAy?= =?iso-8859-1?Q?itXdYw7Zg7QJPU/tQcItS9z9NpjQvfAx9hiI0JwHquXKVB6mSQfPvxNsug?= =?iso-8859-1?Q?kQeq1luHf0+kWAZOUIEJNAQlN0SBarUvsuX3lfGnkajJHpM7s5G4vp8wts?= =?iso-8859-1?Q?6mDXMmIjn8TCNAdq/O+3NzWyJ3bvmq53jgFqq7Z1NpyCS+jyx5rCSUdqVW?= =?iso-8859-1?Q?uPD81TjhJSPYjZRA6koGO3BrAFo6i6YZ0FpbLjdzR2JbbxZWXtzsSU30ck?= =?iso-8859-1?Q?kaPNg+JixLU6aS9r3ZbIgDr/9NETGFRFGdS5NockD9ohfNDl3p+nl7haP4?= =?iso-8859-1?Q?GoaURhjGyQmTG38g/ETxRsjK17emFb3/dDLYpncIFm0BQ6uSIF+HTl8S1D?= =?iso-8859-1?Q?6MraHDBN0arMfFaktAp4KkZ4W5f720BiNJ/6ukB+LeJnvAJ5akJsurbQRB?= =?iso-8859-1?Q?a5XN2wuv5AScCLJ94SWRcqI3HoHyaTUnhnG3od62C9zcG8YRLe6vJiG+ZJ?= =?iso-8859-1?Q?8K3MzIzapqBNWqLSaBasfgysjq4fE+Qo7j3i9eG1jHH9RFHcUeMlzy8GTq?= =?iso-8859-1?Q?DQ6htGbSIXaKY2qLRPGZCkQ92Mj8YgQsLfH8+0gGBEZV4+LlWYorUoFRV1?= =?iso-8859-1?Q?0++EbGY6lESMUJiUnDE/yyuPFLmqMms3dp8bQ2tnT1/4EnCRhUs/v+/hfB?= =?iso-8859-1?Q?PAOu8lemjFphL0KIbQFdIppRIJPMdXVSSSz301jTpA1yd/SDZPkHd48tHr?= =?iso-8859-1?Q?TYhOMSVDY30Nd/9b5ZYum3CMzxtWEVvTzlYYuJJdjIV1kdvQpWgeZx04Sx?= =?iso-8859-1?Q?jrDtM1W8XBAjvL+emdN3U2vSlnDYMvSfWLUwlVQ3AIdEgghi0aJ31ljnPH?= =?iso-8859-1?Q?Gzca62Hb9i68B5wdfM9g4UhDvfjv/lu9JJYABWOKVOvEGhOcfTEX9CE6aT?= =?iso-8859-1?Q?y9jh+IzW8IwY7hOpCNG2pwZH5uGWju8aMR1WCkKB4fDsy4IpBGh2p/HDj9?= =?iso-8859-1?Q?4Q2gMrR6FlO3ErqbwwUA2eQf408Y1ulSLoSd6xnWlXmlxlpr+/9RH1fFbo?= =?iso-8859-1?Q?OLYFpa7tlFxbO9tPy3ZvojCHSI9dWUVZ46bFzSG/c/CiAxyBTA+0KzTZ/f?= =?iso-8859-1?Q?6wnvDqtn/gurTu5J+EJ/zAHdJRo3r1fIHqqgiW6D5N/eYIhn7gj42UvLK0?= =?iso-8859-1?Q?9az0hfL42/qT4xfSW0VodCdDTJCMpfXsaJLUrn1IjmoG/qBGpPtyeHcpAM?= =?iso-8859-1?Q?gQvVGhVj8i75Hw6cD5/1a/LRBPTMP436IGtKE5nmkYel57t0usKP+2cc2V?= =?iso-8859-1?Q?maioWKDR6YVfB5m3oNVuEseIo5SQCWUURJNiM095Ma5cnJaRDAHjWacNow?= =?iso-8859-1?Q?0lVVEzM+cuZT3NKh76S3MVI3wQ7hZxCryceBMZy3ZKYLm+Wh9u7keaELYI?= =?iso-8859-1?Q?Cs+NWaFtZSmMlhig?= Content-Type: multipart/mixed; boundary="_004_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR08MB7020.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 8ec31a60-dbb1-4125-4ed8-08de72c81493 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Feb 2026 10:41:19.7323 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR08MB6946 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_ Content-Type: multipart/alternative; boundary="_000_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_" --_000_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Egor, Here comes v8 of the patch with all requested changes. Sorry it took a litt= le while to implement... > 1. Perhaps we should rename functions initRowMethodBin to > initRowMethodBinary, initPopulateTableText to initPopulateTableTextCopy, > initPopulateTableBinary to initPopulateTableBinaryCopy, > initGenerateDataClientSideText to initGenerateDataClientSideTextFrmt, > initGenerateDataClientSideBinary to initGenerateDataClientSideBinaryFrmt > for better clarity. Done > 2. The --help output currently describes only the 'M' mode. Should we >also add a description for the 'S' mode for completeness? Fixed. Thanks for noticing > 3. I`m wondering if the default value for the 'filler' column in > initCreateTables is necessary? The current functionality seems > unaffected, so perhaps we could avoid changing this function to keep the > diff minimal. That was done purely for debugging. Fixed > 4. I noticed that vanilla client functionality in M mode is not > implemented. Is there a specific reason for this? It seems feasible to > implement by passing a counter, similar to how it`s done in > initPopulateTableBinary. If there are reasons not to implement it, in > mode Mg pgbench should not run mode Sg, it just pg_fatal. I didn't do it initially to keep original logic intact. To unify new patch with existing codebase I've added multi-transactional functionality to client-side data generator and extracted "show progress" code into own procedure. Now both client-side generators use it. > 5. In mode client binary format generation c, It would be the right > thing to do implement write progress of generating data and 'quiet' mode, > as it already implement in client text format generation g. Everything is unified now via new procedure showPopulateTableCopyProgress > 6. In bufferData, when len =3D=3D 1, we call bufferCharData, which alread= y > increments bin_copy_buffer_length. However, at the end of bufferCharData > we increment it again, leading to a double increment. Fixed. Thank you > 7. I suggest adding column count in function initPopulateTableBinary, > and initBranchBinary, initTellerBinary, initAccountBinary, to pass it > from initAccountBinary to init_row, and use it in functions > initBranchBinary, initTellerBinary, initAccountBinary. This will > increase the readability of the code, and remove the magic numbers in > the addColumnCounter call. Done > 8. I think check and install data_generation_type in function > checkInitSteps is not quite right. In the current realization, pgbench > allows run data generation many times (dtCdtC...), so i suggest do not > touching this functionality. My suggestion would be to revert all the > changes from function checkInitSteps, set the data_generation_type in > switch in runInitSteps and remove call function checkInitSteps > from main. I thought about such solution initially, but then decided to implement extr= a procedure where I can count how many times we asked to initialize data. Since this is legacy code and I can see need for ability to run init multip= le times (eg, get exact timing of different methods for comparison or run same code multiple times to get average timing), I just show warning. All in all, thanks a lot for your deep analysis of the code and great suggestions on how to make better. Best regards, Boris --_000_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Egor,

Here comes v8 of the patch with all requested changes. Sorry it took a litt= le while to implement...


> 1. Perhaps we should rename functions initRowMethodBin to
> initRowMethodBinary, initPopulateTableText to initPopulateTableTextCop= y,
> initPopulateTableBinary to initPopulateTableBinaryCopy,
> initGenerateDataClientSideText to initGenerateDataClientSideTextFrmt,<= br> > initGenerateDataClientSideBinary to initGenerateDataClientSideBinaryFr= mt
> for better clarity.

Done

> 2. The --help output currently describes only the 'M' mode. Should we<= br> >also add a description for the 'S' mode for completeness?

Fixed. Thanks for noticing

> 3. I`m wondering if the default value for the 'filler' column in
> initCreateTables is necessary? The current functionality seems
> unaffected, so perhaps we could avoid changing this function to keep t= he
> diff minimal.

That was done purely for debugging. Fixed

> 4. I noticed that vanilla client functionality in M mode is not
> implemented. Is there a specific reason for this? It seems feasible to=
> implement by passing a counter, similar to how it`s done in
> initPopulateTableBinary. If there are reasons not to implement it, in<= br> > mode Mg pgbench should not run mode Sg, it just pg_fatal.

I didn't do it initially to keep original logic intact. To unify new patch<= /div>
with existing codebase I've added multi-transactional functionality
to client-side data generator and extracted "show progress" code<= /div>
into own procedure. Now both client-side generators use it.

> 5. In mode client binary format generation c, It would be the right > thing to do implement write progress of generating data and 'quiet' mo= de,
> as it already implement in client text format generation g.

Everything is unified now via new procedure showPopulateTableCopyProgress
> 6. In bufferData, when len =3D=3D 1, we call bufferCharData, which alr= eady
> increments bin_copy_buffer_length. However, at the end of bufferCharDa= ta
> we increment it again, leading to a double increment.

Fixed. Thank you

> 7. I suggest adding column count in function initPopulateTableBinary,<= br> > and initBranchBinary, initTellerBinary, initAccountBinary, to pass it<= br> > from initAccountBinary to init_row, and use it in functions
> initBranchBinary, initTellerBinary, initAccountBinary. This will
> increase the readability of the code, and remove the magic numbers in<= br> > the addColumnCounter call.

Done

> 8. I think check and install data_generation_type in function
> checkInitSteps is not quite right. In the current realization, pgbench=
> allows run data generation many times (dtCdtC...), so i suggest do not=
> touching this functionality. My suggestion would be to revert all the<= br> > changes from function checkInitSteps, set the data_generation_type in<= br> > switch in runInitSteps and remove call function checkInitSteps
> from main.

I thought about such solution initially, but then decided to implement extr= a
procedure where I can count how many times we asked to initialize data.
Since this is legacy code and I can see need for ability to run init multip= le
times (eg, get exact timing of different methods for comparison or run
same code multiple times to get average timing), I just show warning.

All in all, thanks a lot for your deep analysis of the code and great
suggestions on how to make better.

Best regards,
Boris
--_000_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_-- --_004_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_ Content-Type: application/octet-stream; name="v8-pgbench-faster-modes.patch" Content-Description: v8-pgbench-faster-modes.patch Content-Disposition: attachment; filename="v8-pgbench-faster-modes.patch"; size=119155; creation-date="Mon, 23 Feb 2026 10:27:13 GMT"; modification-date="Mon, 23 Feb 2026 10:27:25 GMT" Content-Transfer-Encoding: base64 RnJvbSBjNzY4ZjM5OWM1NTYyOTVkZTdkNTM4OTU0MTBlNjg2ZDg2YjRiOTYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBNaXJvbm92IDxib3Jpcy5taXJvbm92QGdtYWlsLmNv bT4KRGF0ZTogU3VuLCA5IE5vdiAyMDI1IDE5OjM0OjU4ICswNzAwClN1YmplY3Q6IFtQQVRDSCB2 OCAwMS8yM10gQ29udmVydGluZyBvbmUgaHVnZSB0cmFuc2FjdGlvbiBpbnRvIHNlcmllcyBvZiBv bmUKIHBlciAnc2NhbGUnCgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCA2MSArKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0MSBp bnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCBkODc2NGJhNmZl MC4uMjg0YTdjODYwZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysr IGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtMTgxLDYgKzE4MSwxMiBAQCBzdGF0aWMg aW50NjQgZW5kX3RpbWUgPSAwOwkJLyogd2hlbiB0byBzdG9wIGluIG1pY3JvIHNlY29uZHMsIHVu ZGVyIC1UICovCiAgKi8KIHN0YXRpYyBpbnQJc2NhbGUgPSAxOwogCisvKgorICogc2NhbGluZyBm YWN0b3IgYWZ0ZXIgd2hpY2ggd2Ugc3dpdGNoIHRvIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBkdXJp bmcKKyAqIGRhdGEgcG9wdWxhdGlvbiBwaGFzZSBvbiBzZXJ2ZXIgc2lkZQorICovCitzdGF0aWMg aW50NjQJc2luZ2xlX3R4bl9zY2FsZV9saW1pdCA9IDE7CisKIC8qCiAgKiBmaWxsZmFjdG9yLiBm b3IgZXhhbXBsZSwgZmlsbGZhY3RvciA9IDkwIHdpbGwgdXNlIG9ubHkgOTAgcGVyY2VudAogICog c3BhY2UgZHVyaW5nIGluc2VydHMgYW5kIGxlYXZlIDEwIHBlcmNlbnQgZnJlZS4KQEAgLTUyMTMs NiArNTIxOSw3IEBAIHN0YXRpYyB2b2lkCiBpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nv bm4gKmNvbikKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgc3FsOworCWludAkJCQljaHVuayA9IChzY2Fs ZSA+PSBzaW5nbGVfdHhuX3NjYWxlX2xpbWl0KSA/IDEgOiBzY2FsZTsKIAogCWZwcmludGYoc3Rk ZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSkuLi5cbiIpOwogCkBAIC01MjI1LDMw ICs1MjMyLDQ0IEBAIGluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQogCS8q IHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCiAJaW5pdFRydW5jYXRlVGFibGVzKGNvbik7 CiAKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCiAJaW5pdFBRRXhwQnVmZmVy KCZzcWwpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKLQkJCQkJICAiaW5zZXJ0IGludG8g cGdiZW5jaF9icmFuY2hlcyhiaWQsYmJhbGFuY2UpICIKLQkJCQkJICAic2VsZWN0IGJpZCwgMCAi Ci0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICVkKSBhcyBiaWQiLCBuYnJhbmNoZXMg KiBzY2FsZSk7Ci0JZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKLQotCXByaW50ZlBR RXhwQnVmZmVyKCZzcWwsCi0JCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQs YmlkLHRiYWxhbmNlKSAiCi0JCQkJCSAgInNlbGVjdCB0aWQsICh0aWQgLSAxKSAvICVkICsgMSwg MCAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICVkKSBhcyB0aWQiLCBudGVsbGVy cywgbnRlbGxlcnMgKiBzY2FsZSk7Ci0JZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsK LQotCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hf YWNjb3VudHMoYWlkLGJpZCxhYmFsYW5jZSxmaWxsZXIpICIKLQkJCQkJICAic2VsZWN0IGFpZCwg KGFpZCAtIDEpIC8gJWQgKyAxLCAwLCAnJyAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsICIgSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCi0JCQkJCSAgbmFjY291bnRzLCAoaW50NjQp IG5hY2NvdW50cyAqIHNjYWxlKTsKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwor CWZvciAoaW50IGkgPSAwOyBpIDwgc2NhbGU7IGkgKz0gY2h1bmspIHsKKwkJZXhlY3V0ZVN0YXRl bWVudChjb24sICJiZWdpbiIpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkg ICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVzKGJpZCxiYmFsYW5jZSkgIgorCQkJCQkJICAi c2VsZWN0IGJpZCArIDEsIDAgIgorCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVk KSBhcyBiaWQiLCBpLCBpICsgY2h1bmspOworCQkJCQkJICAvLyJzZWxlY3QgYmlkLCAwICIKKwkJ CQkJCSAgLy8iZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsIG5icmFuY2hlcyAq IHNjYWxlKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQ UUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRp ZCxiaWQsdGJhbGFuY2UpICIKKwkJCQkJCSAgInNlbGVjdCB0aWQgKyAxLCB0aWQgLyAlZCArIDEs IDAgIgorCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyB0aWQiLAorCQkJ CQkJICBudGVsbGVycywgaSAqIG50ZWxsZXJzLCAoaSArIGNodW5rKSAqIG50ZWxsZXJzIC0gMSk7 CisJCQkJCQkgIC8vInNlbGVjdCB0aWQsICh0aWQgLSAxKSAvICVkICsgMSwgMCAiCisJCQkJCQkg IC8vImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICVkKSBhcyB0aWQiLCBudGVsbGVycywgbnRlbGxl cnMgKiBzY2FsZSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJp bnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3Vu dHMoYWlkLGJpZCxhYmFsYW5jZSxmaWxsZXIpICIKKwkJCQkJCSAgInNlbGVjdCBhaWQgKyAxLCBh aWQgLyAlZCArIDEsIDAsICcnICIKKwkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCIgSU5U NjRfRk9STUFUICIsICIgSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCisJCQkJCQkgIG5hY2NvdW50 cywgKGludDY0KSBpICogbmFjY291bnRzLCAoaW50NjQpIChpICsgY2h1bmspICogbmFjY291bnRz IC0gMSk7CisJCQkJCQkgIC8vInNlbGVjdCBhaWQsIChhaWQgLSAxKSAvICVkICsgMSwgMCwgJycg IgorCQkJCQkJICAvLyJmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAiIElOVDY0X0ZPUk1BVCAiKSBh cyBhaWQiLAorCQkJCQkJICAvL25hY2NvdW50cywgKGludDY0KSBuYWNjb3VudHMgKiBzY2FsZSk7 CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJZXhlY3V0ZVN0YXRlbWVu dChjb24sICJjb21taXQiKTsKKwl9CiAKIAl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Ci0KLQlleGVj dXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwogfQogCiAvKgotLSAKMi40My4wCgpGcm9tIDBl ZGRiMTU2YzE4N2Q4MjljNDM4MWJjOTI4YzUzMTQ3MDU5Mjg4NTIgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCkZyb206IEJvcmlzIE1pcm9ub3YgPGJvcmlzLm1pcm9ub3ZAZ21haWwuY29tPgpEYXRl OiBTdW4sIDkgTm92IDIwMjUgMjA6MTM6MjMgKzA3MDAKU3ViamVjdDogW1BBVENIIHY4IDAyLzIz XSBHZXR0aW5nIHJpZCBvZmYgbGltaXQgZm9yIHNpbmdsZSB0cmFuc2FjdGlvbiBzaXplCiBkdXJp bmcgZGF0YSBnZW5lcmF0aW9uCgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCAxNSAr KysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDExIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDI4NGE3Yzg2MGYxLi4yOGI3MmU0Y2YxZiAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jCkBAIC0xODEsMTIgKzE4MSw2IEBAIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkv KiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5kZXIgLVQgKi8KICAqLwogc3RhdGlj IGludAlzY2FsZSA9IDE7CiAKLS8qCi0gKiBzY2FsaW5nIGZhY3RvciBhZnRlciB3aGljaCB3ZSBz d2l0Y2ggdG8gbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGR1cmluZwotICogZGF0YSBwb3B1bGF0aW9u IHBoYXNlIG9uIHNlcnZlciBzaWRlCi0gKi8KLXN0YXRpYyBpbnQ2NAlzaW5nbGVfdHhuX3NjYWxl X2xpbWl0ID0gMTsKLQogLyoKICAqIGZpbGxmYWN0b3IuIGZvciBleGFtcGxlLCBmaWxsZmFjdG9y ID0gOTAgd2lsbCB1c2Ugb25seSA5MCBwZXJjZW50CiAgKiBzcGFjZSBkdXJpbmcgaW5zZXJ0cyBh bmQgbGVhdmUgMTAgcGVyY2VudCBmcmVlLgpAQCAtNTIxOSw3ICs1MjEzLDYgQEAgc3RhdGljIHZv aWQKIGluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQogewogCVBRRXhwQnVm ZmVyRGF0YSBzcWw7Ci0JaW50CQkJCWNodW5rID0gKHNjYWxlID49IHNpbmdsZV90eG5fc2NhbGVf bGltaXQpID8gMSA6IHNjYWxlOwogCiAJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEg KHNlcnZlci1zaWRlKS4uLlxuIik7CiAKQEAgLTUyMzYsMTMgKzUyMjksMTMgQEAgaW5pdEdlbmVy YXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCiAKIAlpbml0UFFFeHBCdWZmZXIoJnNxbCk7 CiAKLQlmb3IgKGludCBpID0gMDsgaSA8IHNjYWxlOyBpICs9IGNodW5rKSB7CisJZm9yIChpbnQg aSA9IDA7IGkgPCBzY2FsZTsgaSsrKSB7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4i KTsKIAogCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAogCQkJCQkJICAiaW5zZXJ0IGludG8gcGdi ZW5jaF9icmFuY2hlcyhiaWQsYmJhbGFuY2UpICIKIAkJCQkJCSAgInNlbGVjdCBiaWQgKyAxLCAw ICIKLQkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgYmlkIiwgaSwgaSAr IGNodW5rKTsKKwkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgYmlkIiwg aSwgaSArIDEpOwogCQkJCQkJICAvLyJzZWxlY3QgYmlkLCAwICIKIAkJCQkJCSAgLy8iZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsIG5icmFuY2hlcyAqIHNjYWxlKTsKIAkJZXhl Y3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKQEAgLTUyNTEsNyArNTI0NCw3IEBAIGluaXRH ZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQogCQkJCQkJICAiaW5zZXJ0IGludG8g cGdiZW5jaF90ZWxsZXJzKHRpZCxiaWQsdGJhbGFuY2UpICIKIAkJCQkJCSAgInNlbGVjdCB0aWQg KyAxLCB0aWQgLyAlZCArIDEsIDAgIgogCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQs ICVkKSBhcyB0aWQiLAotCQkJCQkJICBudGVsbGVycywgaSAqIG50ZWxsZXJzLCAoaSArIGNodW5r KSAqIG50ZWxsZXJzIC0gMSk7CisJCQkJCQkgIG50ZWxsZXJzLCBpICogbnRlbGxlcnMsIChpICsg MSkgKiBudGVsbGVycyAtIDEpOwogCQkJCQkJICAvLyJzZWxlY3QgdGlkLCAodGlkIC0gMSkgLyAl ZCArIDEsIDAgIgogCQkJCQkJICAvLyJmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAlZCkgYXMgdGlk IiwgbnRlbGxlcnMsIG50ZWxsZXJzICogc2NhbGUpOwogCQlleGVjdXRlU3RhdGVtZW50KGNvbiwg c3FsLmRhdGEpOwpAQCAtNTI2MCw3ICs1MjUzLDcgQEAgaW5pdEdlbmVyYXRlRGF0YVNlcnZlclNp ZGUoUEdjb25uICpjb24pCiAJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2FjY291bnRzKGFp ZCxiaWQsYWJhbGFuY2UsZmlsbGVyKSAiCiAJCQkJCQkgICJzZWxlY3QgYWlkICsgMSwgYWlkIC8g JWQgKyAxLCAwLCAnJyAiCiAJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZP Uk1BVCAiLCAiIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAotCQkJCQkJICBuYWNjb3VudHMsIChp bnQ2NCkgaSAqIG5hY2NvdW50cywgKGludDY0KSAoaSArIGNodW5rKSAqIG5hY2NvdW50cyAtIDEp OworCQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgaSAqIG5hY2NvdW50cywgKGludDY0KSAoaSAr IDEpICogbmFjY291bnRzIC0gMSk7CiAJCQkJCQkgIC8vInNlbGVjdCBhaWQsIChhaWQgLSAxKSAv ICVkICsgMSwgMCwgJycgIgogCQkJCQkJICAvLyJmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAiIElO VDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAogCQkJCQkJICAvL25hY2NvdW50cywgKGludDY0KSBuYWNj b3VudHMgKiBzY2FsZSk7Ci0tIAoyLjQzLjAKCkZyb20gYzU2NTljZjQ3NGVjMjczYzA1NzY2OGYz MGE0ZjQzNWZkMDJmMmRhNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQm9yaXMgTWly b25vdiA8Ym9yaXMubWlyb25vdkBnbWFpbC5jb20+CkRhdGU6IFN1biwgOSBOb3YgMjAyNSAyMDoz ODozNiArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjggMDMvMjNdIE5vIG5lZWQgdG8ga2VlcCBvbGQg Y29kZSBpbiBjb21tZW50cwoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwgNyAtLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCAyOGI3 MmU0Y2YxZi4uOTc4OTVhYTllZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNo LmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtNTIzNiw4ICs1MjM2LDYgQEAg aW5pdEdlbmVyYXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCiAJCQkJCQkgICJpbnNlcnQg aW50byBwZ2JlbmNoX2JyYW5jaGVzKGJpZCxiYmFsYW5jZSkgIgogCQkJCQkJICAic2VsZWN0IGJp ZCArIDEsIDAgIgogCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyBiaWQi LCBpLCBpICsgMSk7Ci0JCQkJCQkgIC8vInNlbGVjdCBiaWQsIDAgIgotCQkJCQkJICAvLyJmcm9t IGdlbmVyYXRlX3NlcmllcygxLCAlZCkgYXMgYmlkIiwgbmJyYW5jaGVzICogc2NhbGUpOwogCQll eGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwogCiAJCXByaW50ZlBRRXhwQnVmZmVyKCZz cWwsCkBAIC01MjQ1LDggKzUyNDMsNiBAQCBpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nv bm4gKmNvbikKIAkJCQkJCSAgInNlbGVjdCB0aWQgKyAxLCB0aWQgLyAlZCArIDEsIDAgIgogCQkJ CQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyB0aWQiLAogCQkJCQkJICBudGVs bGVycywgaSAqIG50ZWxsZXJzLCAoaSArIDEpICogbnRlbGxlcnMgLSAxKTsKLQkJCQkJCSAgLy8i c2VsZWN0IHRpZCwgKHRpZCAtIDEpIC8gJWQgKyAxLCAwICIKLQkJCQkJCSAgLy8iZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMSwgJWQpIGFzIHRpZCIsIG50ZWxsZXJzLCBudGVsbGVycyAqIHNjYWxlKTsK IAkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKIAogCQlwcmludGZQUUV4cEJ1ZmZl cigmc3FsLApAQCAtNTI1NCw5ICs1MjUwLDYgQEAgaW5pdEdlbmVyYXRlRGF0YVNlcnZlclNpZGUo UEdjb25uICpjb24pCiAJCQkJCQkgICJzZWxlY3QgYWlkICsgMSwgYWlkIC8gJWQgKyAxLCAwLCAn JyAiCiAJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZPUk1BVCAiLCAiIElO VDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAogCQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgaSAqIG5h Y2NvdW50cywgKGludDY0KSAoaSArIDEpICogbmFjY291bnRzIC0gMSk7Ci0JCQkJCQkgIC8vInNl bGVjdCBhaWQsIChhaWQgLSAxKSAvICVkICsgMSwgMCwgJycgIgotCQkJCQkJICAvLyJmcm9tIGdl bmVyYXRlX3NlcmllcygxLCAiIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAotCQkJCQkJICAvL25h Y2NvdW50cywgKGludDY0KSBuYWNjb3VudHMgKiBzY2FsZSk7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQo Y29uLCBzcWwuZGF0YSk7CiAKIAkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKLS0g CjIuNDMuMAoKRnJvbSBlNDdiNTJkZGYyMzU5M2RhZDkzNzVlZjUzNTZmZDQxZDA2MjFlZGUzIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBNaXJvbm92IDxib3Jpcy5taXJvbm92 QGdtYWlsLmNvbT4KRGF0ZTogTW9uLCAxMCBOb3YgMjAyNSAxOTowNjo0OCArMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjggMDQvMjNdIEFkZGluZyBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24gdmlh IHVubmVzdAoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwgMTk5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTgyIGluc2VydGlv bnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2Jl bmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDk3ODk1YWE5ZWRmLi42NWQ3 N2NkZWZlYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC0xNjEsNyArMTYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg c29ja2V0X3NldAogICogc29tZSBjb25maWd1cmFibGUgcGFyYW1ldGVycyAqLwogCiAjZGVmaW5l IERFRkFVTFRfSU5JVF9TVEVQUyAiZHRndnAiCS8qIGRlZmF1bHQgLUkgc2V0dGluZyAqLwotI2Rl ZmluZSBBTExfSU5JVF9TVEVQUyAiZHRnR3ZwZiIJLyogYWxsIHBvc3NpYmxlIHN0ZXBzICovCisj ZGVmaW5lIEFMTF9JTklUX1NURVBTICJkdGdHaUl2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAq LwogCiAjZGVmaW5lIExPR19TVEVQX1NFQ09ORFMJNQkvKiBzZWNvbmRzIGJldHdlZW4gbG9nIG1l c3NhZ2VzICovCiAjZGVmaW5lIERFRkFVTFRfTlhBQ1RTCTEwCQkvKiBkZWZhdWx0IG54YWN0cyAq LwpAQCAtMTcxLDYgKzE3MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBzb2NrZXRfc2V0CiAjZGVmaW5l IE1JTl9aSVBGSUFOX1BBUkFNCQkxLjAwMQkvKiBtaW5pbXVtIHBhcmFtZXRlciBmb3IgemlwZmlh biAqLwogI2RlZmluZSBNQVhfWklQRklBTl9QQVJBTQkJMTAwMC4wCS8qIG1heGltdW0gcGFyYW1l dGVyIGZvciB6aXBmaWFuICovCiAKKy8qIG9yaWdpbmFsIHNpbmdsZSB0cmFuc2FjdGlvbiBzZXJ2 ZXItc2lkZSBtZXRob2QgKi8KKyNkZWZpbmUgR0VOX1RZUEVfSU5TRVJUX09SSUdJTkFMCSdHJwkv KiB1c2UgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMgdG8gZ2VuZXJhdGUgZGF0YSAq LworLyogJ29uZSB0cmFuc2FjdGlvbiBwZXIgc2NhbGUnIHNlcnZlci1zaWRlIG1ldGhvZHMgKi8K KyNkZWZpbmUgR0VOX1RZUEVfSU5TRVJUX1NFUklFUwkJJ2knCS8qIHVzZSBJTlNFUlQgLi4gU0VM RUNUIGdlbmVyYXRlX3NlcmllcyB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5lIEdFTl9UWVBF X0lOU0VSVF9VTk5FU1QgIAknSScJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0IHRvIGdl bmVyYXRlIGRhdGEgKi8KKwogc3RhdGljIGludAlueGFjdHMgPSAwOwkJCS8qIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgcGVyIGNsaWVudCAqLwogc3RhdGljIGludAlkdXJhdGlvbiA9IDA7CQkvKiBk dXJhdGlvbiBpbiBzZWNvbmRzICovCiBzdGF0aWMgaW50NjQgZW5kX3RpbWUgPSAwOwkJLyogd2hl biB0byBzdG9wIGluIG1pY3JvIHNlY29uZHMsIHVuZGVyIC1UICovCkBAIC0xODEsNiArMTg3LDEx IEBAIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8g c2Vjb25kcywgdW5kZXIgLVQgKi8KICAqLwogc3RhdGljIGludAlzY2FsZSA9IDE7CiAKKy8qCisg KgorICovCitzdGF0aWMgY2hhcglkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICc/JzsKKwogLyoKICAq IGZpbGxmYWN0b3IuIGZvciBleGFtcGxlLCBmaWxsZmFjdG9yID0gOTAgd2lsbCB1c2Ugb25seSA5 MCBwZXJjZW50CiAgKiBzcGFjZSBkdXJpbmcgaW5zZXJ0cyBhbmQgbGVhdmUgMTAgcGVyY2VudCBm cmVlLgpAQCAtOTE0LDcgKzkyNSw5IEBAIHVzYWdlKHZvaWQpCiAJCSAgICIgICAgICAgICAgICAg ICAgICAgICAgICAgICBkOiBkcm9wIGFueSBleGlzdGluZyBwZ2JlbmNoIHRhYmxlc1xuIgogCQkg ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogY3JlYXRlIHRoZSB0YWJsZXMgdXNlZCBi eSB0aGUgc3RhbmRhcmQgcGdiZW5jaCBzY2VuYXJpb1xuIgogCQkgICAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgZzogZ2VuZXJhdGUgZGF0YSwgY2xpZW50LXNpZGVcbiIKLQkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEc6IGdlbmVyYXRlIGRhdGEsIHNlcnZlci1zaWRlXG4iCisJ CSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBHOiBnZW5lcmF0ZSBkYXRhLCBzZXJ2ZXIt c2lkZSBpbiBzaW5nbGUgdHJhbnNhY3Rpb25cbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGk6ICAgc2VydmVyLXNpZGUgKG11bHRpcGxlIFRYTnMpIElOU0VSVCAuLiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzXG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBJOiAg IHNlcnZlci1zaWRlIChtdWx0aXBsZSBUWE5zKSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdFxuIgog CQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogaW52b2tlIFZBQ1VVTSBvbiB0aGUg c3RhbmRhcmQgdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBwOiBj cmVhdGUgcHJpbWFyeSBrZXkgaW5kZXhlcyBvbiB0aGUgc3RhbmRhcmQgdGFibGVzXG4iCiAJCSAg ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBjcmVhdGUgZm9yZWlnbiBrZXlzIGJldHdl ZW4gdGhlIHN0YW5kYXJkIHRhYmxlc1xuIgpAQCAtNTIwMywxOCArNTIxNiwxNiBAQCBpbml0R2Vu ZXJhdGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKIH0KIAogLyoKLSAqIEZpbGwgdGhlIHN0 YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUgZGF0YSBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlcgotICoK LSAqIEFzIGFscmVhZHkgdGhlIGNhc2Ugd2l0aCB0aGUgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0 aW9uLCB0aGUgZmlsbGVyCi0gKiBjb2x1bW4gZGVmYXVsdHMgdG8gTlVMTCBpbiBwZ2JlbmNoX2Jy YW5jaGVzIGFuZCBwZ2JlbmNoX3RlbGxlcnMsCi0gKiBhbmQgaXMgYSBibGFuay1wYWRkZWQgc3Ry aW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCisgKiBHZW5lcmF0aW5nIGRhdGEgdmlhIElOU0VSVCAu LiBTRUxFQ1QgLi4gRlJPTSBnZW5lcmF0ZV9zZXJpZXMKKyAqIHdob2xlIGRhdGFzZXQgaW4gc2lu Z2xlIHRyYW5zYWN0aW9uCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0R2VuZXJhdGVEYXRhU2VydmVy U2lkZShQR2Nvbm4gKmNvbikKK2dlbmVyYXRlRGF0YUluc2VydFNpbmdsZVRYTihQR2Nvbm4gKmNv bikKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgc3FsOwogCi0JZnByaW50ZihzdGRlcnIsICJnZW5lcmF0 aW5nIGRhdGEgKHNlcnZlci1zaWRlKS4uLlxuIik7CisJZnByaW50ZihzdGRlcnIsICJ2aWEgSU5T RVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMuLi4gaW4gc2luZ2xlIFRYTlxuIik7CisKIAog CS8qCiAJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJsZSB0 aGUgYmFja2VuZCdzCkBAIC01MjI1LDMxICs1MjM2LDEzNiBAQCBpbml0R2VuZXJhdGVEYXRhU2Vy dmVyU2lkZShQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwog CWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCisJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOworCisJ cHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9icmFu Y2hlcyhiaWQsIGJiYWxhbmNlKSAiCisJCQkJCSAgInNlbGVjdCBiaWQsIDAgIgorCQkJCQkgICJm cm9tIGdlbmVyYXRlX3NlcmllcygxLCAlZCkiLCBzY2FsZSAqIG5icmFuY2hlcyk7CisJZXhlY3V0 ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJ CQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsIGJpZCwgdGJhbGFuY2UpICIK KwkJCQkJICAic2VsZWN0IHRpZCArIDEsIHRpZCAvICVkICsgMSwgMCAiCisJCQkJCSAgImZyb20g Z2VuZXJhdGVfc2VyaWVzKDAsICVkKSBhcyB0aWQiLAorCQkJCQkgIG50ZWxsZXJzLCAoc2NhbGUg KiBudGVsbGVycykgLSAxKTsKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJ cHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2Nv dW50cyhhaWQsIGJpZCwgYWJhbGFuY2UsICIKKwkJCQkJCQkJICAgImZpbGxlcikgIgorCQkJCQkg ICJzZWxlY3QgYWlkICsgMSwgYWlkIC8gJWQgKyAxLCAwLCAnJyAiCisJCQkJCSAgImZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDAsICIgSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCisJCQkJCSAgbmFjY291 bnRzLCAoaW50NjQpIChzY2FsZSAqIG5hY2NvdW50cykgLSAxKTsKKwlleGVjdXRlU3RhdGVtZW50 KGNvbiwgc3FsLmRhdGEpOworCiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKIAor CXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKK30KKworCisvKgorICogR2VuZXJhdGluZyBkYXRhIHZp YSBJTlNFUlQgLi4gU0VMRUNUIC4uIEZST00gZ2VuZXJhdGVfc2VyaWVzCisgKiBPbmUgdHJhbnNh Y3Rpb24gcGVyICdzY2FsZScKKyAqLworc3RhdGljIHZvaWQKK2dlbmVyYXRlRGF0YUluc2VydFNl cmllcyhQR2Nvbm4gKmNvbikKK3sKKwlQUUV4cEJ1ZmZlckRhdGEgc3FsOworCisJZnByaW50Zihz dGRlcnIsICJ2aWEgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMuLi4gaW4gbXVsdGlw bGUgVFhOKHMpXG4iKTsKKwogCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKIAotCWZvciAoaW50IGkg PSAwOyBpIDwgc2NhbGU7IGkrKykgeworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsK KworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFibGVz KGNvbik7CisKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsKIAkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdp biIpOwogCiAJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCQkgICJpbnNlcnQgaW50byBw Z2JlbmNoX2JyYW5jaGVzKGJpZCxiYmFsYW5jZSkgIgotCQkJCQkJICAic2VsZWN0IGJpZCArIDEs IDAgIgotCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyBiaWQiLCBpLCBp ICsgMSk7CisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVzKGJpZCwgYmJhbGFu Y2UpICIKKwkJCQkJCSAgInZhbHVlcyglZCwgMCkiLCBpICsgMSk7CiAJCWV4ZWN1dGVTdGF0ZW1l bnQoY29uLCBzcWwuZGF0YSk7CiAKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKLQkJCQkJCSAg Imluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsYmlkLHRiYWxhbmNlKSAiCisJCQkJCQkg ICJpbnNlcnQgaW50byBwZ2JlbmNoX3RlbGxlcnModGlkLCBiaWQsIHRiYWxhbmNlKSAiCiAJCQkJ CQkgICJzZWxlY3QgdGlkICsgMSwgdGlkIC8gJWQgKyAxLCAwICIKIAkJCQkJCSAgImZyb20gZ2Vu ZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgdGlkIiwKIAkJCQkJCSAgbnRlbGxlcnMsIGkgKiBudGVs bGVycywgKGkgKyAxKSAqIG50ZWxsZXJzIC0gMSk7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBz cWwuZGF0YSk7CiAKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKLQkJCQkJCSAgImluc2VydCBp bnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLGJpZCxhYmFsYW5jZSxmaWxsZXIpICIKKwkJCQkJCSAg Imluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLCBiaWQsIGFiYWxhbmNlLCAiCisJCQkJ CQkJCQkgICAiZmlsbGVyKSAiCiAJCQkJCQkgICJzZWxlY3QgYWlkICsgMSwgYWlkIC8gJWQgKyAx LCAwLCAnJyAiCi0JCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZPUk1BVCAi LCAiIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAotCQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkg aSAqIG5hY2NvdW50cywgKGludDY0KSAoaSArIDEpICogbmFjY291bnRzIC0gMSk7CisJCQkJCQkg ICJmcm9tIGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZPUk1BVCAiLCAiCisJCQkJCQkJCUlOVDY0 X0ZPUk1BVCAiKSBhcyBhaWQiLAorCQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgaSAqIG5hY2Nv dW50cywKKwkJCQkJCSAgKGludDY0KSAoaSArIDEpICogbmFjY291bnRzIC0gMSk7CisJCWV4ZWN1 dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJj b21taXQiKTsKKwl9CisKKwl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Cit9CisKKy8qCisgKiBHZW5l cmF0aW5nIGRhdGEgdmlhIElOU0VSVCAuLiBTRUxFQ1QgLi4gRlJPTSB1bm5lc3QKKyAqIE9uZSB0 cmFuc2FjdGlvbiBwZXIgJ3NjYWxlJworICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVEYXRhSW5z ZXJ0VW5uZXN0KFBHY29ubiAqY29uKQoreworCVBRRXhwQnVmZmVyRGF0YSBzcWw7CisKKwlmcHJp bnRmKHN0ZGVyciwgInZpYSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdC4uLlxuIik7CisKKwlpbml0 UFFFeHBCdWZmZXIoJnNxbCk7CisKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CisK KwkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLworCWluaXRUcnVuY2F0ZVRhYmxlcyhj b24pOworCisJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKworCWZvciAoaW50IHMg PSAwOyBzIDwgc2NhbGU7IHMrKykKKwl7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4i KTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdi ZW5jaF9icmFuY2hlcyhiaWQsYmJhbGFuY2UpICIKKwkJCQkJCSAgInZhbHVlcyglZCwgMCkiLCBz ICsgMSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJpbnRmUFFF eHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQs IGJpZCwgdGJhbGFuY2UpICIKKwkJCQkJCSAgInNlbGVjdCB1bm5lc3QoYXJyYXlfYWdnKHMuaSBv cmRlciBieSBzLmkpKSBhcyB0aWQsICIKKwkJCQkJCQkJICAiJWQgYXMgYmlkLCAwIGFzIHRiYWxh bmNlICIKKwkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgcyhpKSIsCisJ CQkJCQkgIHMgKyAxLCBzICogbnRlbGxlcnMgKyAxLCAocyArIDEpICogbnRlbGxlcnMpOworCQll eGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZz cWwsCisJCQkJCQkgICJ3aXRoIGRhdGEgYXMgKCIKKwkJCQkJCSAgIiAgIHNlbGVjdCBnZW5lcmF0 ZV9zZXJpZXMoIiBJTlQ2NF9GT1JNQVQgIiwgIgorCQkJCQkJCSAgSU5UNjRfRk9STUFUICIpIGFz IGkpICIKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLCBiaWQsICIK KwkJCQkJCQkJCSAgImFiYWxhbmNlLCBmaWxsZXIpICIKKwkJCQkJCSAgInNlbGVjdCB1bm5lc3Qo YWlkKSwgdW5uZXN0KGJpZCksIDAgYXMgYWJhbGFuY2UsICIKKwkJCQkJCQkJICAiJycgYXMgZmls bGVyICIKKwkJCQkJCSAgImZyb20gKHNlbGVjdCBhcnJheV9hZ2coaSsxKSBhaWQsICIKKwkJCQkJ CQkJCSAgICJhcnJheV9hZ2coaS8lZCArIDEpIGJpZCBmcm9tIGRhdGEpIiwKKwkJCQkJCSAgKGlu dDY0KSBzICogbmFjY291bnRzICsgMSwKKwkJCQkJCSAgKGludDY0KSAocyArIDEpICogbmFjY291 bnRzLCBuYWNjb3VudHMpOwogCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwogCiAJ CWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CkBAIC01MjU4LDYgKzUzNzQsMzIgQEAg aW5pdEdlbmVyYXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCiAJdGVybVBRRXhwQnVmZmVy KCZzcWwpOwogfQogCisvKgorICogRmlsbCB0aGUgc3RhbmRhcmQgdGFibGVzIHdpdGggc29tZSBk YXRhIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyCisgKgorICogQXMgYWxyZWFkeSB0aGUgY2FzZSB3 aXRoIHRoZSBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24sIHRoZSBmaWxsZXIKKyAqIGNvbHVt biBkZWZhdWx0cyB0byBOVUxMIGluIHBnYmVuY2hfYnJhbmNoZXMgYW5kIHBnYmVuY2hfdGVsbGVy cywKKyAqIGFuZCBpcyBhIGJsYW5rLXBhZGRlZCBzdHJpbmcgaW4gcGdiZW5jaF9hY2NvdW50cy4K KyAqLworc3RhdGljIHZvaWQKK2luaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29u KQoreworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSkgIik7 CisKKwlzd2l0Y2ggKGRhdGFfZ2VuZXJhdGlvbl90eXBlKQorCXsKKwkJY2FzZSBHRU5fVFlQRV9J TlNFUlRfT1JJR0lOQUw6CisJCQlnZW5lcmF0ZURhdGFJbnNlcnRTaW5nbGVUWE4oY29uKTsKKwkJ CWJyZWFrOworCQljYXNlIEdFTl9UWVBFX0lOU0VSVF9TRVJJRVM6CisJCQlnZW5lcmF0ZURhdGFJ bnNlcnRTZXJpZXMoY29uKTsKKwkJCWJyZWFrOworCQljYXNlIEdFTl9UWVBFX0lOU0VSVF9VTk5F U1Q6CisJCQlnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3QoY29uKTsKKwkJCWJyZWFrOworCX0KK30K KwogLyoKICAqIEludm9rZSB2YWN1dW0gb24gdGhlIHN0YW5kYXJkIHRhYmxlcwogICovCkBAIC01 MzQxLDYgKzU0ODMsOCBAQCBpbml0Q3JlYXRlRktleXMoUEdjb25uICpjb24pCiBzdGF0aWMgdm9p ZAogY2hlY2tJbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVwcykKIHsKKwljaGFy CWRhdGFfaW5pdF90eXBlID0gMDsKKwogCWlmIChpbml0aWFsaXplX3N0ZXBzWzBdID09ICdcMCcp CiAJCXBnX2ZhdGFsKCJubyBpbml0aWFsaXphdGlvbiBzdGVwcyBzcGVjaWZpZWQiKTsKIApAQCAt NTM1Miw3ICs1NDk2LDI2IEBAIGNoZWNrSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVf c3RlcHMpCiAJCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJBbGxvd2VkIHN0ZXAgY2hhcmFjdGVycyBh cmU6IFwiIiBBTExfSU5JVF9TVEVQUyAiXCIuIik7CiAJCQlleGl0KDEpOwogCQl9CisKKwkJc3dp dGNoICgqc3RlcCkKKwkJeworCQkJY2FzZSAnRyc6CisJCQkJZGF0YV9pbml0X3R5cGUrKzsKKwkJ CQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpzdGVwOworCQkJCWJyZWFrOworCQkJY2FzZSAnaSc6 CisJCQkJZGF0YV9pbml0X3R5cGUrKzsKKwkJCQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpzdGVw OworCQkJCWJyZWFrOworCQkJY2FzZSAnSSc6CisJCQkJZGF0YV9pbml0X3R5cGUrKzsKKwkJCQlk YXRhX2dlbmVyYXRpb25fdHlwZSA9ICpzdGVwOworCQkJCWJyZWFrOworCQl9CiAJfQorCisJaWYg KGRhdGFfaW5pdF90eXBlID4gMSkKKwkJcGdfbG9nX2Vycm9yKCJXQVJOSU5HISBNb3JlIHRoYW4g b25lIHR5cGUgb2Ygc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uIGlzIHJlcXVlc3RlZCIpOwog fQogCiAvKgpAQCAtNTM5NSw2ICs1NTU4LDggQEAgcnVuSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmlu aXRpYWxpemVfc3RlcHMpCiAJCQkJaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoY29uKTsKIAkJ CQlicmVhazsKIAkJCWNhc2UgJ0cnOgorCQkJY2FzZSAnaSc6CisJCQljYXNlICdJJzoKIAkJCQlv cCA9ICJzZXJ2ZXItc2lkZSBnZW5lcmF0ZSI7CiAJCQkJaW5pdEdlbmVyYXRlRGF0YVNlcnZlclNp ZGUoY29uKTsKIAkJCQlicmVhazsKLS0gCjIuNDMuMAoKRnJvbSA1ZTE4MjdiODg5YjI4M2Y1MDI5 OWNlNmFiMWE3M2Y5ZjU1YTRhODRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3Jp cyBNaXJvbm92IDxib3Jpcy5taXJvbm92QGdtYWlsLmNvbT4KRGF0ZTogTW9uLCAxMCBOb3YgMjAy NSAyMDowMDo1NiArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjggMDUvMjNdIEZpeGluZyB0eXBvIGlu IHF1ZXJ5CgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCAzICsrLQogMSBmaWxlIGNo YW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDY1 ZDc3Y2RlZmVhLi4wM2UzN2RmNDQzNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC01MjQxLDcgKzUyNDEsOCBA QCBnZW5lcmF0ZURhdGFJbnNlcnRTaW5nbGVUWE4oUEdjb25uICpjb24pCiAJcHJpbnRmUFFFeHBC dWZmZXIoJnNxbCwKIAkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9icmFuY2hlcyhiaWQsIGJi YWxhbmNlKSAiCiAJCQkJCSAgInNlbGVjdCBiaWQsIDAgIgotCQkJCQkgICJmcm9tIGdlbmVyYXRl X3NlcmllcygxLCAlZCkiLCBzY2FsZSAqIG5icmFuY2hlcyk7CisJCQkJCSAgImZyb20gZ2VuZXJh dGVfc2VyaWVzKDEsICVkKSBhcyBiaWQiLAorCQkJCQkgIHNjYWxlICogbmJyYW5jaGVzKTsKIAll eGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoJnNx bCwKLS0gCjIuNDMuMAoKRnJvbSA3Y2E4NjUyMWZkYTY5MjliOGUwZGUzZmM3N2RjYmI4OTg0MDA5 Yzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBNaXJvbm92IDxib3Jpcy5t aXJvbm92QGdtYWlsLmNvbT4KRGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxOTozOTo0NSArMDcwMApT dWJqZWN0OiBbUEFUQ0ggdjggMDYvMjNdIEFkZGluZyBzdXBwb3J0IGZvciBDT1BZIEJJTkFSWSBt b2RlCgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCAzOTMgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAzODEgaW5zZXJ0aW9ucygr KSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu YyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMDNlMzdkZjQ0MzQuLjcxYWExZDk0 NzlmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4v cGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTE2MSw3ICsxNjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBzb2Nr ZXRfc2V0CiAgKiBzb21lIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzICovCiAKICNkZWZpbmUgREVG QVVMVF9JTklUX1NURVBTICJkdGd2cCIJLyogZGVmYXVsdCAtSSBzZXR0aW5nICovCi0jZGVmaW5l IEFMTF9JTklUX1NURVBTICJkdGdHaUl2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLworI2Rl ZmluZSBBTExfSU5JVF9TVEVQUyAiZHRnQ0dpSXZwZiIJLyogYWxsIHBvc3NpYmxlIHN0ZXBzICov CiAKICNkZWZpbmUgTE9HX1NURVBfU0VDT05EUwk1CS8qIHNlY29uZHMgYmV0d2VlbiBsb2cgbWVz c2FnZXMgKi8KICNkZWZpbmUgREVGQVVMVF9OWEFDVFMJMTAJCS8qIGRlZmF1bHQgbnhhY3RzICov CkBAIC0xNzYsNiArMTc2LDggQEAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogLyogJ29uZSB0 cmFuc2FjdGlvbiBwZXIgc2NhbGUnIHNlcnZlci1zaWRlIG1ldGhvZHMgKi8KICNkZWZpbmUgR0VO X1RZUEVfSU5TRVJUX1NFUklFUwkJJ2knCS8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUIGdlbmVyYXRl X3NlcmllcyB0byBnZW5lcmF0ZSBkYXRhICovCiAjZGVmaW5lIEdFTl9UWVBFX0lOU0VSVF9VTk5F U1QgIAknSScJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0IHRvIGdlbmVyYXRlIGRhdGEg Ki8KKyNkZWZpbmUgR0VOX1RZUEVfQ09QWV9PUklHSU5BTAkJJ2cnIC8qIHVzZSBDT1BZIC4uIEZS T00gU1RESU4gLi4gVEVYVCB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5lIEdFTl9UWVBFX0NP UFlfQklOQVJZCQknQycgLyogdXNlIENPUFkgLi4gRlJPTSBTVERJTiAuLiBCSU5BUlkgdG8gZ2Vu ZXJhdGUgZGF0YSAqLwogCiBzdGF0aWMgaW50CW54YWN0cyA9IDA7CQkJLyogbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBwZXIgY2xpZW50ICovCiBzdGF0aWMgaW50CWR1cmF0aW9uID0gMDsJCS8qIGR1 cmF0aW9uIGluIHNlY29uZHMgKi8KQEAgLTE4OCwxMCArMTkwLDE3IEBAIHN0YXRpYyBpbnQ2NCBl bmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5kZXIgLVQg Ki8KIHN0YXRpYyBpbnQJc2NhbGUgPSAxOwogCiAvKgotICoKKyAqIG1vZGUgb2YgZGF0YSBnZW5l cmF0aW9uIHRvIHVzZQogICovCiBzdGF0aWMgY2hhcglkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICc/ JzsKIAorLyoKKyAqIENPUFkgRlJPTSBCSU5BUlkgZXhlY3V0aW9uIGJ1ZmZlcgorICovCisjZGVm aW5lIEJJTl9DT1BZX0JVRl9TSVpFCTEwMjQwMAkJCQkvKiBtYXhpbXVtIGJ1ZmZlciBzaXplIGZv ciBDT1BZIEZST00gQklOQVJZICovCitzdGF0aWMgY2hhcgkJKmJpbl9jb3B5X2J1ZmZlciA9IE5V TEw7CQkvKiBidWZmZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgKi8KK3N0YXRpYyBpbnQzMl90CSBi aW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsJLyogY3VycmVudCBidWZmZXIgc2l6ZSAqLworCiAv KgogICogZmlsbGZhY3Rvci4gZm9yIGV4YW1wbGUsIGZpbGxmYWN0b3IgPSA5MCB3aWxsIHVzZSBv bmx5IDkwIHBlcmNlbnQKICAqIHNwYWNlIGR1cmluZyBpbnNlcnRzIGFuZCBsZWF2ZSAxMCBwZXJj ZW50IGZyZWUuCkBAIC04NjEsNyArODcwLDggQEAgc3RhdGljIGludAl3YWl0X29uX3NvY2tldF9z ZXQoc29ja2V0X3NldCAqc2EsIGludDY0IHVzZWNzKTsKIHN0YXRpYyBib29sIHNvY2tldF9oYXNf aW5wdXQoc29ja2V0X3NldCAqc2EsIGludCBmZCwgaW50IGlkeCk7CiAKIC8qIGNhbGxiYWNrIHVz ZWQgdG8gYnVpbGQgcm93cyBmb3IgQ09QWSBkdXJpbmcgZGF0YSBsb2FkaW5nICovCi10eXBlZGVm IHZvaWQgKCppbml0Um93TWV0aG9kKSAoUFFFeHBCdWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIp OwordHlwZWRlZiB2b2lkICgqaW5pdFJvd01ldGhvZCkJCShQUUV4cEJ1ZmZlckRhdGEgKnNxbCwg aW50NjQgY3Vycik7Cit0eXBlZGVmIHZvaWQgKCppbml0Um93TWV0aG9kQmluKQkoUEdjb25uICpj b24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpOwogCiAvKiBj YWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxleGVyICovCiBzdGF0aWMgY29uc3QgUHNx bFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxsYmFja3MgPSB7CkBAIC05MjUsNiArOTM1LDcgQEAg dXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IGRyb3AgYW55 IGV4aXN0aW5nIHBnYmVuY2ggdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAg ICAgICB0OiBjcmVhdGUgdGhlIHRhYmxlcyB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBwZ2JlbmNoIHNj ZW5hcmlvXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBnZW5lcmF0ZSBk YXRhLCBjbGllbnQtc2lkZVxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgQzog ICBjbGllbnQtc2lkZSAoc2luZ2xlIFROWCkgQ09QWSAuLiBGUk9NIFNURElOIC4uIEJJTkFSWVxu IgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgRzogZ2VuZXJhdGUgZGF0YSwgc2Vy dmVyLXNpZGUgaW4gc2luZ2xlIHRyYW5zYWN0aW9uXG4iCiAJCSAgICIgICAgICAgICAgICAgICAg ICAgICAgICAgICBpOiAgIHNlcnZlci1zaWRlIChtdWx0aXBsZSBUWE5zKSBJTlNFUlQgLi4gU0VM RUNUIGdlbmVyYXRlX3Nlcmllc1xuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg STogICBzZXJ2ZXItc2lkZSAobXVsdGlwbGUgVFhOcykgSU5TRVJUIC4uIFNFTEVDVCB1bm5lc3Rc biIKQEAgLTUxOTEsOSArNTIwMiw5IEBAIGluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBj b25zdCBjaGFyICp0YWJsZSwgaW50NjQgYmFzZSwKICAqIGEgYmxhbmstcGFkZGVkIHN0cmluZyBp biBwZ2JlbmNoX2FjY291bnRzLgogICovCiBzdGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0YUNs aWVudFNpZGUoUEdjb25uICpjb24pCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHQoUEdj b25uICpjb24pCiB7Ci0JZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEgKGNsaWVudC1z aWRlKS4uLlxuIik7CisJZnByaW50ZihzdGRlcnIsICJURVhUIG1vZGUuLi5cbiIpOwogCiAJLyoK IAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRoZSBi YWNrZW5kJ3MKQEAgLTUyMDksMTIgKzUyMjAsMzczIEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRT aWRlKFBHY29ubiAqY29uKQogCSAqIGFscmVhZHkgZXhpc3QKIAkgKi8KIAlpbml0UG9wdWxhdGVU YWJsZShjb24sICJwZ2JlbmNoX2JyYW5jaGVzIiwgbmJyYW5jaGVzLCBpbml0QnJhbmNoKTsKLQlp bml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCBudGVsbGVycywgaW5pdFRl bGxlcik7CisJaW5pdFBvcHVsYXRlVGFibGUoY29uLCAicGdiZW5jaF90ZWxsZXJzIiwgIG50ZWxs ZXJzLCAgaW5pdFRlbGxlcik7CiAJaW5pdFBvcHVsYXRlVGFibGUoY29uLCAicGdiZW5jaF9hY2Nv dW50cyIsIG5hY2NvdW50cywgaW5pdEFjY291bnQpOwogCiAJZXhlY3V0ZVN0YXRlbWVudChjb24s ICJjb21taXQiKTsKIH0KIAorCisvKgorICogRHVtcHMgYmluYXJ5IGJ1ZmZlciB0byBmaWxlIChw dXJlbHkgZm9yIGRlYnVnZ2luZykKKyAqLworc3RhdGljIHZvaWQKK2R1bXBCdWZmZXJUb0ZpbGUo Y2hhciAqZmlsZW5hbWUpCit7CisJRklMRSAqZmlsZV9wdHI7CisJc2l6ZV90IGJ5dGVzX3dyaXR0 ZW47CisKKwlmaWxlX3B0ciA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsKKwlpZiAoZmlsZV9wdHIg PT0gTlVMTCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlICVzXG4i LCBmaWxlbmFtZSk7CisJCXJldHVybjsgLy8gRVhJVF9GQUlMVVJFOworCX0KKworCWJ5dGVzX3dy aXR0ZW4gPSBmd3JpdGUoYmluX2NvcHlfYnVmZmVyLCAxLCBiaW5fY29weV9idWZmZXJfbGVuZ3Ro LCBmaWxlX3B0cik7CisKKwlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBiaW5fY29weV9idWZmZXJfbGVu Z3RoKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIHRvIGZpbGUgb3IgaW5j b21wbGV0ZSB3cml0ZVxuIik7CisJCWZjbG9zZShmaWxlX3B0cik7CisJCXJldHVybjsgLy8gRVhJ VF9GQUlMVVJFOworCX0KKworCWZjbG9zZShmaWxlX3B0cik7Cit9CisKKy8qCisgKiBTYXZlIGNo YXIgZGF0YSB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckNoYXJEYXRhKGNoYXIg KnNyYywgaW50MzJfdCBsZW4pCit7CisJbWVtY3B5KChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciAr IGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgsIChjaGFyICopIHNyYywgbGVuKTsKKwliaW5fY29weV9i dWZmZXJfbGVuZ3RoICs9IGxlbjsKK30KKworLyoKKyAqIENvbnZlcnRzIHBsYXRmb3JtIGJ5dGUg b3JkZXIgaW50byBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqIFNQQVJDIGRvZXNuJ3QgcmVxaXJlIHRo YXQKKyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckRhdGEodm9pZCAqc3JjLCBpbnQzMl90IGxlbikK K3sKKyNpZmRlZiBfX3NwYXJjX18KKwlidWZmZXJDaGFyRGF0YShzcmMsIGxlbik7CisjZWxzZQor CWlmIChsZW4gPT0gMSkKKwkJYnVmZmVyQ2hhckRhdGEoc3JjLCBsZW4pOworCWVsc2UKKwkJZm9y IChpbnQzMl90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXsKKwkJCSgoY2hhciAqKSBiaW5fY29w eV9idWZmZXIgKyBiaW5fY29weV9idWZmZXJfbGVuZ3RoKVtpXSA9CisJCQkJKChjaGFyICopIHNy YylbbGVuIC0gaSAtIDFdOworCQl9CisKKwliaW5fY29weV9idWZmZXJfbGVuZ3RoICs9IGxlbjsK KyNlbmRpZgorfQorCisvKgorICogYWRkcyBjb2x1bW4gY291bnRlcgorICovCitzdGF0aWMgdm9p ZAorYWRkQ29sdW1uQ291bnRlcihpbnQxNl90IG4pCit7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAm biwgc2l6ZW9mKG4pKTsKK30KKworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggTlVMTCB2YWx1ZQor ICovCitzdGF0aWMgdm9pZAorYWRkTnVsbENvbHVtbigpCit7CisJaW50MzJfdCBudWxsID0gLTE7 CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmbnVsbCwgc2l6ZW9mKG51bGwpKTsKK30KKworLyoKKyAq IGFkZHMgY29sdW1uIHdpdGggaW50OCB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50OENv bHVtbihpbnQ4X3QgdmFsdWUpCit7CisJaW50OF90CWRhdGEgPSB2YWx1ZTsKKwlpbnQzMl90CXNp emUgPSBzaXplb2YoZGF0YSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKHNp emUpKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCisv KgorICogYWRkcyBjb2x1bW4gd2l0aCBpbnQxNiB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRk SW50MTZDb2x1bW4oaW50MTZfdCB2YWx1ZSkKK3sKKwlpbnQxNl90CWRhdGEgPSB2YWx1ZTsKKwlp bnQzMl90CXNpemUgPSBzaXplb2YoZGF0YSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwg c2l6ZW9mKHNpemUpKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXplb2YoZGF0YSkp OworfQorCisvKgorICogYWRkcyBjb2x1bW4gd2l0aCBpbnRpMzIgdmFsdWUKKyAqLworc3RhdGlj IHZvaWQKK2FkZEludDMyQ29sdW1uKGludDMyX3QgdmFsdWUpCit7CisJaW50MzJfdAlkYXRhID0g dmFsdWU7CisJaW50MzJfdAlzaXplID0gc2l6ZW9mKGRhdGEpOworCWJ1ZmZlckRhdGEoKHZvaWQg KikgJnNpemUsIHNpemVvZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6 ZW9mKGRhdGEpKTsKK30KKworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggaW50aTY0IHZhbHVlCisg Ki8KK3N0YXRpYyB2b2lkCithZGRJbnQ2NENvbHVtbihpbnQ2NF90IHZhbHVlKQoreworCWludDY0 X3QJZGF0YSA9IHZhbHVlOworCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsKKwlidWZmZXJE YXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOworCWJ1ZmZlckRhdGEoKHZvaWQgKikg JmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKKy8qCisgKiBhZGRzIGNvbHVtbiB3aXRoIGNoYXIg dmFsdWUKKyAqLworc3RhdGljIHZvaWQKK2FkZENoYXJDb2x1bW4oY2hhciAqdmFsdWUpCit7CisJ aW50MzJfdAlzaXplID0gc3RybGVuKHZhbHVlKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZzaXpl LCBzaXplb2Yoc2l6ZSkpOworCWJ1ZmZlckNoYXJEYXRhKHZhbHVlLCBzaXplKTsKK30KKworLyoK KyAqIFN0YXJ0cyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZST00gQklOQVJZ IHN0YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlIZWFkZXIoUEdjb25u ICpjb24pCit7CisJY2hhciBoZWFkZXJbXSA9IHsnUCcsJ0cnLCdDJywnTycsJ1AnLCdZJywnXG4n LCdcMzc3JywnXHInLCdcbicsJ1wwJywKKwkJCQkJICdcMCcsJ1wwJywnXDAnLCdcMCcsCisJCQkJ CSAnXDAnLCdcMCcsJ1wwJywnXDAnIH07CisKKwlQUXB1dENvcHlEYXRhKGNvbiwgaGVhZGVyLCAx OSk7Cit9CisKKy8qCisgKiBGaW5pc2hlcyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBD T1BZIEZST00gQklOQVJZIHN0YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNv cHlUcmFpbGVyKFBHY29ubiAqY29uKQoreworCXN0YXRpYyBjaGFyIHRyYWlsZXJbXSA9IHsgMHhG RiwgMHhGRiB9OworCisJUFFwdXRDb3B5RGF0YShjb24sIHRyYWlsZXIsIDIpOworfQorCisvKgor ICogRmxhc2hlcyBjdXJyZW50IGJ1ZmZlciBvdmVyIG5ldHdvcmsgaWYgbmVlZGVkCisgKi8KK3N0 YXRpYyB2b2lkCitmbHVzaEJ1ZmZlcihQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywgaW50MTZf dCByb3dfbGVuKQoreworCWlmIChiaW5fY29weV9idWZmZXJfbGVuZ3RoICsgcm93X2xlbiA+IEJJ Tl9DT1BZX0JVRl9TSVpFKQorCXsKKwkJLyogZmx1c2ggY3VycmVudCBidWZmZXIgKi8KKwkJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKKwkJCVBRcHV0Q29weURhdGEo Y29uLCAoY2hhciAqKSBiaW5fY29weV9idWZmZXIsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpOwor CQliaW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsKKwl9Cit9CisKKy8qCisgKiBTZW5kcyBjdXJy ZW50IGJyYW5jaCByb3cgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkCitpbml0QnJhbmNoQmlu YXJ5KFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFy ZW50KQoreworCS8qCisJICogRWFjaCByb3cgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKKwkg KiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zCisJICogLSA0IGJ5dGVzIGFzIGxlbmd0 aCBmb3IgZWFjaCBjb2x1bW4KKwkgKi8KKwlpbnQxNl90CW1heF9yb3dfbGVuID0gIDM1ICsgMiAr IDQqMzsgLyogbWF4IHJvdyBzaXplIGlzIDMyICovCisKKwlmbHVzaEJ1ZmZlcihjb24sIHJlcywg bWF4X3Jvd19sZW4pOworCisJYWRkQ29sdW1uQ291bnRlcigyKTsKKworCWFkZEludDMyQ29sdW1u KGN1cnIgKyAxKTsKKwlhZGRJbnQzMkNvbHVtbigwKTsKK30KKworLyoKKyAqIFNlbmRzIGN1cnJl bnQgdGVsbGVyIHJvdyB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2luaXRUZWxsZXJCaW5h cnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJl bnQpCit7CisJLyoKKwkgKiBFYWNoIHJvdyBoYXMgZm9sbG93aW5nIGV4dHJhIGJ5dGVzOgorCSAq IC0gMiBieXRlcyBmb3IgbnVtYmVyIG9mIGNvbHVtbnMKKwkgKiAtIDQgYnl0ZXMgYXMgbGVuZ3Ro IGZvciBlYWNoIGNvbHVtbgorCSAqLworCWludDE2X3QJbWF4X3Jvd19sZW4gPSAgNDAgKyAyICsg NCo0OyAvKiBtYXggcm93IHNpemUgaXMgNDAgKi8KKworCWZsdXNoQnVmZmVyKGNvbiwgcmVzLCBt YXhfcm93X2xlbik7CisKKwlhZGRDb2x1bW5Db3VudGVyKDMpOworCisJYWRkSW50MzJDb2x1bW4o Y3VyciArIDEpOworCWFkZEludDMyQ29sdW1uKGN1cnIgLyBwYXJlbnQgKyAxKTsKKwlhZGRJbnQz MkNvbHVtbigwKTsKK30KKworLyoKKyAqIFNlbmRzIGN1cnJlbnQgYWNjb3VudCByb3cgdG8gYnVm ZmVyCisgKi8KK3N0YXRpYyB2b2lkCitpbml0QWNjb3VudEJpbmFyeShQR2Nvbm4gKmNvbiwgUEdy ZXN1bHQgKnJlcywgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKK3sKKwkvKgorCSAqIEVh Y2ggcm93IGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CisJICogLSAyIGJ5dGVzIGZvciBudW1i ZXIgb2YgY29sdW1ucworCSAqIC0gNCBieXRlcyBhcyBsZW5ndGggZm9yIGVhY2ggY29sdW1uCisJ ICovCisJaW50MTZfdAltYXhfcm93X2xlbiA9IDI1MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6 ZSBpcyAyNTAgZm9yIGludDY0ICovCisKKwlmbHVzaEJ1ZmZlcihjb24sIHJlcywgbWF4X3Jvd19s ZW4pOworCisJYWRkQ29sdW1uQ291bnRlcigzKTsKKworCWlmIChzY2FsZSA8PSBTQ0FMRV8zMkJJ VF9USFJFU0hPTEQpCisJCWFkZEludDMyQ29sdW1uKGN1cnIgKyAxKTsKKwllbHNlCisJCWFkZElu dDY0Q29sdW1uKGN1cnIpOworCisJYWRkSW50MzJDb2x1bW4oY3VyciAvIHBhcmVudCArIDEpOwor CWFkZEludDMyQ29sdW1uKDApOworfQorCisvKgorICogVW5pdmVyc2FsIHdyYXBwZXIgZm9yIHNl bmRpbmcgZGF0YSBpbiBiaW5hcnkgZm9ybWF0CisgKi8KK3N0YXRpYyB2b2lkCitpbml0UG9wdWxh dGVUYWJsZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCisJ CQkJCQlpbnQ2NF90IGJhc2UsIGluaXRSb3dNZXRob2RCaW4gaW5pdF9yb3cpCit7CisJaW50CQkJ IG47CisJUEdyZXN1bHQJKnJlczsKKwljaGFyCQkgY29weV9zdGF0ZW1lbnRbMjU2XTsKKwljb25z dCBjaGFyCSpjb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gKGZv cm1hdCBiaW5hcnkpIjsKKwlpbnQ2NF90CQkgdG90YWwgPSBiYXNlICogc2NhbGU7CisKKwliaW5f Y29weV9idWZmZXJfbGVuZ3RoID0gMDsKKworCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpFIG9uIHYx NCBhbmQgbGF0ZXIgZm9yIGFsbCBvcmRpbmFyeSB0YWJsZXMgKi8KKwlpZiAoKFBRc2VydmVyVmVy c2lvbihjb24pID49IDE0MDAwMCkgJiYKKwkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJsZSkg PT0gUkVMS0lORF9SRUxBVElPTikKKwkJY29weV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgKCVz KSBmcm9tIHN0ZGluIHdpdGggKGZvcm1hdCBiaW5hcnksIGZyZWV6ZSBvbikiOworCisJbiA9IHBn X3NucHJpbnRmKGNvcHlfc3RhdGVtZW50LCBzaXplb2YoY29weV9zdGF0ZW1lbnQpLCBjb3B5X3N0 YXRlbWVudF9mbXQsIHRhYmxlLCBjb2x1bW5zKTsKKwlpZiAobiA+PSBzaXplb2YoY29weV9zdGF0 ZW1lbnQpKQorCQlwZ19mYXRhbCgiaW52YWxpZCBidWZmZXIgc2l6ZTogbXVzdCBiZSBhdCBsZWFz dCAlZCBjaGFyYWN0ZXJzIGxvbmciLCBuKTsKKwllbHNlIGlmIChuID09IC0xKQorCQlwZ19mYXRh bCgiaW52YWxpZCBmb3JtYXQgc3RyaW5nIik7CisKKwlyZXMgPSBQUWV4ZWMoY29uLCBjb3B5X3N0 YXRlbWVudCk7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT1BZX0lOKQor CQlwZ19mYXRhbCgidW5leHBlY3RlZCBjb3B5IGluIHJlc3VsdDogJXMiLCBQUWVycm9yTWVzc2Fn ZShjb24pKTsKKwlQUWNsZWFyKHJlcyk7CisKKworCXNlbmRCaW5hcnlDb3B5SGVhZGVyKGNvbik7 CisKKwlmb3IgKGludDY0X3QgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKQorCXsKKwkJaW5pdF9yb3co Y29uLCByZXMsIGksIGJhc2UpOworCX0KKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBH UkVTX0NPUFlfSU4pCisJCVBRcHV0Q29weURhdGEoY29uLCAoY2hhciAqKSBiaW5fY29weV9idWZm ZXIsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJV bmV4cGVjdGVkIG1vZGUgJWQgaW5zdGVhZCBvZiAlZFxuIiwgUFFyZXN1bHRTdGF0dXMocmVzKSwg UEdSRVNfQ09QWV9JTik7CisKKwlzZW5kQmluYXJ5Q29weVRyYWlsZXIoY29uKTsKKworCWlmIChQ UXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJeworCQlpZiAoUFFwdXRDb3B5 RW5kKGNvbiwgTlVMTCkgPT0gMSkgLyogc3VjY2VzcyAqLworCQl7CisJCQlyZXMgPSBQUWdldFJl c3VsdChjb24pOworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9P SykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAlc1xuIiwgUFFlcnJvck1lc3NhZ2UoY29u KSk7CisJCQlQUWNsZWFyKHJlcyk7CisJCX0KKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJF cnJvcjogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCX0KK30KKworLyoKKyAqIFdyYXBw ZXIgZm9yIGJpbmFyeSBkYXRhIGxvYWQKKyAqLworc3RhdGljIHZvaWQKK2luaXRHZW5lcmF0ZURh dGFDbGllbnRTaWRlQmluYXJ5KFBHY29ubiAqY29uKQoreworCisJZnByaW50ZihzdGRlcnIsICJC SU5BUlkgbW9kZS4uLlxuIik7CisKKwliaW5fY29weV9idWZmZXIgPSBwZ19tYWxsb2MoQklOX0NP UFlfQlVGX1NJWkUpOworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOworCisJLyoKKwkgKiB3 ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRoZSBiYWNrZW5k J3MKKwkgKiBkYXRhLWxvYWRpbmcgb3B0aW1pemF0aW9ucworCSAqLworCWV4ZWN1dGVTdGF0ZW1l bnQoY29uLCAiYmVnaW4iKTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJ aW5pdFRydW5jYXRlVGFibGVzKGNvbik7CisKKwlpbml0UG9wdWxhdGVUYWJsZUJpbmFyeShjb24s ICJwZ2JlbmNoX2JyYW5jaGVzIiwgImJpZCwgYmJhbGFuY2UiLAorCQkJCQkJCW5icmFuY2hlcywg aW5pdEJyYW5jaEJpbmFyeSk7CisJaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5j aF90ZWxsZXJzIiwgICJ0aWQsIGJpZCwgdGJhbGFuY2UiLAorCQkJCQkJCW50ZWxsZXJzLCAgaW5p dFRlbGxlckJpbmFyeSk7CisJaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5jaF9h Y2NvdW50cyIsICJhaWQsIGJpZCwgYWJhbGFuY2UiLAorCQkJCQkJCW5hY2NvdW50cywgaW5pdEFj Y291bnRCaW5hcnkpOworCisJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKworCXBn X2ZyZWUoYmluX2NvcHlfYnVmZmVyKTsKK30KKworLyoKKyAqIEZpbGwgdGhlIHN0YW5kYXJkIHRh YmxlcyB3aXRoIHNvbWUgZGF0YSBnZW5lcmF0ZWQgYW5kIHNlbnQgZnJvbSB0aGUgY2xpZW50Lgor ICovCitzdGF0aWMgdm9pZAoraW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoUEdjb25uICpjb24p Cit7CisJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEgKGNsaWVudC1zaWRlKSBpbiAi KTsKKworCXN3aXRjaCAoZGF0YV9nZW5lcmF0aW9uX3R5cGUpCisJeworCQljYXNlIEdFTl9UWVBF X0NPUFlfT1JJR0lOQUw6CisJCQlpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHQoY29uKTsK KwkJCWJyZWFrOworCQljYXNlIEdFTl9UWVBFX0NPUFlfQklOQVJZOgorCQkJaW5pdEdlbmVyYXRl RGF0YUNsaWVudFNpZGVCaW5hcnkoY29uKTsKKwkJCWJyZWFrOworCX0KK30KKwogLyoKICAqIEdl bmVyYXRpbmcgZGF0YSB2aWEgSU5TRVJUIC4uIFNFTEVDVCAuLiBGUk9NIGdlbmVyYXRlX3Nlcmll cwogICogd2hvbGUgZGF0YXNldCBpbiBzaW5nbGUgdHJhbnNhY3Rpb24KQEAgLTU1MDAsMTQgKzU4 NzIsMTAgQEAgY2hlY2tJbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVwcykKIAog CQlzd2l0Y2ggKCpzdGVwKQogCQl7CisJCQljYXNlICdnJzoKKwkJCWNhc2UgJ0MnOgogCQkJY2Fz ZSAnRyc6Ci0JCQkJZGF0YV9pbml0X3R5cGUrKzsKLQkJCQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9 ICpzdGVwOwotCQkJCWJyZWFrOwogCQkJY2FzZSAnaSc6Ci0JCQkJZGF0YV9pbml0X3R5cGUrKzsK LQkJCQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpzdGVwOwotCQkJCWJyZWFrOwogCQkJY2FzZSAn SSc6CiAJCQkJZGF0YV9pbml0X3R5cGUrKzsKIAkJCQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpz dGVwOwpAQCAtNTU1NSw2ICs1OTIzLDcgQEAgcnVuSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRp YWxpemVfc3RlcHMpCiAJCQkJaW5pdENyZWF0ZVRhYmxlcyhjb24pOwogCQkJCWJyZWFrOwogCQkJ Y2FzZSAnZyc6CisJCQljYXNlICdDJzoKIAkJCQlvcCA9ICJjbGllbnQtc2lkZSBnZW5lcmF0ZSI7 CiAJCQkJaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoY29uKTsKIAkJCQlicmVhazsKLS0gCjIu NDMuMAoKRnJvbSA0YWEwYWMwNTc2NWVkZjZiNWYwYzEzZTE4YWM2NzcyODdjZTc4MjA2IE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IEZyaSwgMTQgTm92IDIwMjUgMjI6NDA6MzkgKzA5MDAKU3ViamVjdDogW1BBVENI IHY4IDA3LzIzXSBwZ2JlbmNoOiBGaXggYXNzZXJ0aW9uIGZhaWx1cmUgd2l0aCBtdWx0aXBsZQog XHN5bmNwaXBlbGluZSBpbiBwaXBlbGluZSBtb2RlLgoKUHJldmlvdXNseSwgd2hlbiBwZ2JlbmNo IHJhbiBhIGN1c3RvbSBzY3JpcHQgdGhhdCB0cmlnZ2VyZWQgcmV0cmlhYmxlIGVycm9ycwooZS5n LiwgZGVhZGxvY2tzKSBmb2xsb3dlZCBieSBtdWx0aXBsZSBcc3luY3BpcGVsaW5lIGNvbW1hbmRz IGluIHBpcGVsaW5lIG1vZGUsCnRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWx1cmUgY291bGQg b2NjdXI6CgogICAgQXNzZXJ0aW9uIGZhaWxlZDogKHJlcyA9PSAoKHZvaWQqKTApKSwgZnVuY3Rp b24gZGlzY2FyZFVudGlsU3luYywgZmlsZSBwZ2JlbmNoLmMsIGxpbmUgMzU5NC4KClRoZSBpc3N1 ZSB3YXMgdGhhdCBkaXNjYXJkVW50aWxTeW5jKCkgYXNzdW1lZCBhIHBpcGVsaW5lIHN5bmMgcmVz dWx0CihQR1JFU19QSVBFTElORV9TWU5DKSB3b3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgZWl0 aGVyIGFub3RoZXIgc3luYyByZXN1bHQKb3IgTlVMTC4gVGhpcyBhc3N1bXB0aW9uIHdhcyBpbmNv cnJlY3Q6IHdoZW4gbXVsdGlwbGUgc3luYyByZXF1ZXN0cyB3ZXJlIHNlbnQsCmEgc3luYyByZXN1 bHQgY291bGQgaW5zdGVhZCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIHJlc3VsdCB0eXBlLiBJbiBz dWNoIGNhc2VzLApkaXNjYXJkVW50aWxTeW5jKCkgbWlzaGFuZGxlZCB0aGUgcmVzdWx0cywgbGVh ZGluZyB0byB0aGUgYXNzZXJ0aW9uIGZhaWx1cmUuCgpUaGlzIGNvbW1pdCBmaXhlcyB0aGUgaXNz dWUgYnkgbWFraW5nIGRpc2NhcmRVbnRpbFN5bmMoKSBjb3JyZWN0bHkgaGFuZGxlIGNhc2VzCndo ZXJlIGEgcGlwZWxpbmUgc3luYyByZXN1bHQgaXMgZm9sbG93ZWQgYnkgb3RoZXIgcmVzdWx0IHR5 cGVzLiBJdCBub3cgY29udGludWVzCmRpc2NhcmRpbmcgcmVzdWx0cyB1bnRpbCBhbm90aGVyIHBp cGVsaW5lIHN5bmMgZm9sbG93ZWQgYnkgTlVMTCBpcyByZWFjaGVkLgoKQmFja3BhdGNoZWQgdG8g djE3LCB3aGVyZSBzdXBwb3J0IGZvciBcc3luY3BpcGVsaW5lIGNvbW1hbmQgaW4gcGdiZW5jaCB3 YXMKaW50cm9kdWNlZC4KCkF1dGhvcjogWXVnbyBOYWdhdGEgPG5hZ2F0YUBzcmFvc3MuY28uanA+ ClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaWNAaGlnaGdvLmNvbT4KUmV2aWV3ZWQtYnk6IEZ1amlp IE1hc2FvIDxtYXNhby5mdWppaUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vMjAyNTExMTExMDUwMzcuZjNmYzU1NDYxNmJjMTk4OTFmOTI2YzViQHNyYW9zcy5jby5q cApCYWNrcGF0Y2gtdGhyb3VnaDogMTcKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwg MzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgMjggaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggZDg3 NjRiYTZmZTAuLmE0MjUxNzZlY2RjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5j aC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTM1NjMsMTQgKzM1NjMsMTgg QEAgZG9SZXRyeShDU3RhdGUgKnN0LCBwZ190aW1lX3VzZWNfdCAqbm93KQogfQogCiAvKgotICog UmVhZCByZXN1bHRzIGFuZCBkaXNjYXJkIGl0IHVudGlsIGEgc3luYyBwb2ludC4KKyAqIFJlYWQg YW5kIGRpc2NhcmQgcmVzdWx0cyB1bnRpbCB0aGUgbGFzdCBzeW5jIHBvaW50LgogICovCiBzdGF0 aWMgaW50CiBkaXNjYXJkVW50aWxTeW5jKENTdGF0ZSAqc3QpCiB7CiAJYm9vbAkJcmVjZWl2ZWRf c3luYyA9IGZhbHNlOwogCi0JLyogc2VuZCBhIHN5bmMgKi8KKwkvKgorCSAqIFNlbmQgYSBTeW5j IG1lc3NhZ2UgdG8gZW5zdXJlIGF0IGxlYXN0IG9uZSBQR1JFU19QSVBFTElORV9TWU5DIGlzCisJ ICogcmVjZWl2ZWQgYW5kIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AsIHNpbmNlIGFsbCBlYXJs aWVyIG9uZXMgbWF5IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gcmVjZWl2ZWQuCisJICovCiAJaWYg KCFQUXBpcGVsaW5lU3luYyhzdC0+Y29uKSkKIAl7CiAJCXBnX2xvZ19lcnJvcigiY2xpZW50ICVk IGFib3J0ZWQ6IGZhaWxlZCB0byBzZW5kIGEgcGlwZWxpbmUgc3luYyIsCkBAIC0zNTc4LDI5ICsz NTgyLDQyIEBAIGRpc2NhcmRVbnRpbFN5bmMoQ1N0YXRlICpzdCkKIAkJcmV0dXJuIDA7CiAJfQog Ci0JLyogcmVjZWl2ZSBQR1JFU19QSVBFTElORV9TWU5DIGFuZCBudWxsIGZvbGxvd2luZyBpdCAq LworCS8qCisJICogQ29udGludWUgcmVhZGluZyByZXN1bHRzIHVudGlsIHRoZSBsYXN0IHN5bmMg cG9pbnQsIGkuZS4sIHVudGlsCisJICogcmVhY2hpbmcgbnVsbCBqdXN0IGFmdGVyIFBHUkVTX1BJ UEVMSU5FX1NZTkMuCisJICovCiAJZm9yICg7OykKIAl7CiAJCVBHcmVzdWx0ICAgKnJlcyA9IFBR Z2V0UmVzdWx0KHN0LT5jb24pOwogCisJCWlmIChQUXN0YXR1cyhzdC0+Y29uKSA9PSBDT05ORUNU SU9OX0JBRCkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjbGllbnQgJWQgYWJvcnRlZCB3aGlsZSBy b2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uIGFmdGVyIGFuIGVycm9yOyBwZXJoYXBzIHRoZSBi YWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2luZyIsCisJCQkJCQkgc3QtPmlkKTsKKwkJCVBRY2xl YXIocmVzKTsKKwkJCXJldHVybiAwOworCQl9CisKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg PT0gUEdSRVNfUElQRUxJTkVfU1lOQykKIAkJCXJlY2VpdmVkX3N5bmMgPSB0cnVlOwotCQllbHNl IGlmIChyZWNlaXZlZF9zeW5jKQorCQllbHNlIGlmIChyZWNlaXZlZF9zeW5jICYmIHJlcyA9PSBO VUxMKQogCQl7Ci0JCQkvKgotCQkJICogUEdSRVNfUElQRUxJTkVfU1lOQyBtdXN0IGJlIGZvbGxv d2VkIGJ5IGFub3RoZXIKLQkJCSAqIFBHUkVTX1BJUEVMSU5FX1NZTkMgb3IgTlVMTDsgb3RoZXJ3 aXNlLCBhc3NlcnQgZmFpbHVyZS4KLQkJCSAqLwotCQkJQXNzZXJ0KHJlcyA9PSBOVUxMKTsKLQog CQkJLyoKIAkJCSAqIFJlc2V0IG9uZ29pbmcgc3luYyBjb3VudCB0byAwIHNpbmNlIGFsbCBQR1JF U19QSVBFTElORV9TWU5DCiAJCQkgKiByZXN1bHRzIGhhdmUgYmVlbiBkaXNjYXJkZWQuCiAJCQkg Ki8KIAkJCXN0LT5udW1fc3luY3MgPSAwOwotCQkJUFFjbGVhcihyZXMpOwogCQkJYnJlYWs7CiAJ CX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSWYgYSBQR1JFU19QSVBFTElORV9TWU5DIGlz IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuCisJCQkgKiBQR1JFU19QSVBFTElORV9T WU5DIG9yIE5VTEwsIGFub3RoZXIgUEdSRVNfUElQRUxJTkVfU1lOQyB3aWxsCisJCQkgKiBhcHBl YXIgbGF0ZXIuIFJlc2V0IHJlY2VpdmVkX3N5bmMgdG8gZmFsc2UgdG8gd2FpdCBmb3IgaXQuCisJ CQkgKi8KKwkJCXJlY2VpdmVkX3N5bmMgPSBmYWxzZTsKKwkJfQogCQlQUWNsZWFyKHJlcyk7CiAJ fQogCi0tIAoyLjQzLjAKCkZyb20gOWM0ZjE5MDU1NTk3ZTlhZGIyNWU2NWMyYWE4YmVkZjIwYTA5 ZTEzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQm9yaXMgTWlyb25vdiA8Ym9yaXMu bWlyb25vdkBnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjEgTm92IDIwMjUgMTk6MDU6NTggKzA3MDAK U3ViamVjdDogW1BBVENIIHY4IDA4LzIzXSBTZXR0aW5nIGVtcHR5IHN0cmluZyBhcyBkZWZhdWx0 IHZhbHVlIGluIGZpbGxlcgogY29sdW1uCgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMg fCAxNiArKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9z cmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDk2N2Y2Y2U2OTg0Li4wM2I1ZTVjMjhmMCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jCkBAIC00OTg1LDI2ICs0OTg1LDI2IEBAIGluaXRDcmVhdGVUYWJsZXMoUEdj b25uICpjb24pCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkZGxpbmZvIERETHNbXSA9IHsKIAkJewog CQkJInBnYmVuY2hfaGlzdG9yeSIsCi0JCQkidGlkIGludCxiaWQgaW50LGFpZCAgICBpbnQsZGVs dGEgaW50LG10aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikiLAotCQkJInRpZCBpbnQsYmlk IGludCxhaWQgYmlnaW50LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAsZmlsbGVyIGNoYXIoMjIp IiwKKwkJCSJ0aWQgaW50LGJpZCBpbnQsYWlkICAgIGludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0 YW1wLGZpbGxlciBjaGFyKDIyKSBkZWZhdWx0ICcnIiwKKwkJCSJ0aWQgaW50LGJpZCBpbnQsYWlk IGJpZ2ludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFyKDIyKSBkZWZhdWx0 ICcnIiwKIAkJCTAKIAkJfSwKIAkJewogCQkJInBnYmVuY2hfdGVsbGVycyIsCi0JCQkidGlkIGlu dCBub3QgbnVsbCxiaWQgaW50LHRiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkiLAotCQkJInRp ZCBpbnQgbm90IG51bGwsYmlkIGludCx0YmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIiwKKwkJ CSJ0aWQgaW50IG5vdCBudWxsLGJpZCBpbnQsdGJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBk ZWZhdWx0ICcnIiwKKwkJCSJ0aWQgaW50IG5vdCBudWxsLGJpZCBpbnQsdGJhbGFuY2UgaW50LGZp bGxlciBjaGFyKDg0KSBkZWZhdWx0ICcnIiwKIAkJCTEKIAkJfSwKIAkJewogCQkJInBnYmVuY2hf YWNjb3VudHMiLAotCQkJImFpZCAgICBpbnQgbm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQs ZmlsbGVyIGNoYXIoODQpIiwKLQkJCSJhaWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFu Y2UgaW50LGZpbGxlciBjaGFyKDg0KSIsCisJCQkiYWlkICAgIGludCBub3QgbnVsbCxiaWQgaW50 LGFiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAnJyIsCisJCQkiYWlkIGJpZ2lu dCBub3QgbnVsbCxiaWQgaW50LGFiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAn JyIsCiAJCQkxCiAJCX0sCiAJCXsKIAkJCSJwZ2JlbmNoX2JyYW5jaGVzIiwKLQkJCSJiaWQgaW50 IG5vdCBudWxsLGJiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4OCkiLAotCQkJImJpZCBpbnQgbm90 IG51bGwsYmJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg4KSIsCisJCQkiYmlkIGludCBub3QgbnVs bCxiYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODgpIGRlZmF1bHQgJyciLAorCQkJImJpZCBpbnQg bm90IG51bGwsYmJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg4KSBkZWZhdWx0ICcnIiwKIAkJCTEK IAkJfQogCX07Ci0tIAoyLjQzLjAKCkZyb20gMmFhYmFhNTJkZmZkYjc4ZmJlZmFlZjk1MTYzODgx YzE1ZTE4ZWYyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSGVpa2tpIExpbm5ha2Fu Z2FzIDxoZWlra2kubGlubmFrYW5nYXNAaWtpLmZpPgpEYXRlOiBGcmksIDIxIE5vdiAyMDI1IDE1 OjAzOjExICswMjAwClN1YmplY3Q6IFtQQVRDSCB2OCAwOS8yM10gVXNlIHN0cnRvaTY0KCkgaW4g cGdiZW5jaCwgcmVwbGFjaW5nIGl0cyBvcGVuLWNvZGVkCiBpbXBsZW1lbnRhdGlvbgoKTWFrZXMg dGhlIGNvZGUgYSBsaXR0bGUgc2ltcGxlci4KClRoZSBvbGQgaW1wbGVtZW50YXRpb24gYWNjZXB0 ZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYnV0IHRoYXQgd2FzCnVubmVjZXNzYXJ5LiBGaXJzdGx5 LCBpdHMgc2libGluZyBmdW5jdGlvbiBmb3IgcGFyc2luZyBkZWNpbWFscywKc3RydG9kb3VibGUo KSwgZG9lcyBub3QgYWNjZXB0IHRyYWlsaW5nIHdoaXRlc3BhY2UuIFNlY29uZGx5LCBub25lIG9m CnRoZSBjYWxsZXJzIGNhbiBwYXNzIGEgc3RyaW5nIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSB0 byBpdC4KCkluIHRoZSBwYXNzaW5nLCBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIEVSQU5HRSBiZWZv cmUgcHJpbnRpbmcgdGhlICJvdXQKb2YgcmFuZ2UiIGVycm9yLiBPbiBzb21lIHN5c3RlbXMsIHN0 cnRvdWwoKSBhbmQgc3RydG9kKCkgcmV0dXJuIEVJTlZBTApvbiBhbiBlbXB0eSBvciBhbGwtc3Bh Y2VzIHN0cmluZywgYW5kICJpbnZhbGlkIGlucHV0IHN5bnRheCIgaXMgbW9yZQphcHByb3ByaWF0 ZSBmb3IgdGhhdCB0aGFuICJvdXQgb2YgcmFuZ2UiLiBGb3IgdGhlIGV4aXN0aW5nCnN0cnRvZG91 YmxlKCkgZnVuY3Rpb24gdGhpcyBpcyBwdXJlbHkgYWNhZGVtaWNhbCBiZWNhdXNlIGl0J3MgbmV2 ZXIKY2FsbGVkIHdpdGggZXJyb3JPSz09ZmFsc2UsIGJ1dCBsZXQncyBiZSB0aWR5LiAoUGVyaGFw cyB3ZSBzaG91bGQKcmVtb3ZlIHRoZSBkZWFkIGNvZGVwYXRocyBhbHRvZ2V0aGVyLCBidXQgSSds bCBsZWF2ZSB0aGF0IGZvciBhbm90aGVyCmRheS4pCgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGku ZXZhbi5jaGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFl1ZWZlaSBTaGkgPHNoaXl1ZWZlaTEw MDRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTmVpbCBDaGVuIDxjYXJwZW50ZXIubmFpbC5jekBn bWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2Ut aWQvODYxZGQ1YmQtZjJjOS00ZmY1LThhYTAtZjgyYmRiNzVlYzFmQGlraS5maQotLS0KIHNyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCA4MyArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA2NCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2Jl bmNoL3BnYmVuY2guYwppbmRleCBhNDI1MTc2ZWNkYy4uNjg3NzRhNTllZmQgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu YwpAQCAtOTgyLDEzICs5ODIsMTcgQEAgdXNhZ2Uodm9pZCkKIAkJICAgcHJvZ25hbWUsIHByb2du YW1lLCBQQUNLQUdFX0JVR1JFUE9SVCwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CiB9CiAK LS8qIHJldHVybiB3aGV0aGVyIHN0ciBtYXRjaGVzICJeXHMqWy0rXT9bMC05XSskIiAqLworLyoK KyAqIFJldHVybiB3aGV0aGVyIHN0ciBtYXRjaGVzICJeXHMqWy0rXT9bMC05XSskIgorICoKKyAq IFRoaXMgc2hvdWxkIGFncmVlIHdpdGggc3RydG9pbnQ2NCgpIG9uIHdoYXQncyBhY2NlcHRlZCwg aWdub3Jpbmcgb3ZlcmZsb3dzLgorICovCiBzdGF0aWMgYm9vbAogaXNfYW5faW50KGNvbnN0IGNo YXIgKnN0cikKIHsKIAljb25zdCBjaGFyICpwdHIgPSBzdHI7CiAKLQkvKiBza2lwIGxlYWRpbmcg c3BhY2VzOyBjYXN0IGlzIGNvbnNpc3RlbnQgd2l0aCBzdHJ0b2ludDY0ICovCisJLyogc2tpcCBs ZWFkaW5nIHNwYWNlcyAqLwogCXdoaWxlICgqcHRyICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp ICpwdHIpKQogCQlwdHIrKzsKIApAQCAtMTAxMiw5ICsxMDE2LDYgQEAgaXNfYW5faW50KGNvbnN0 IGNoYXIgKnN0cikKIC8qCiAgKiBzdHJ0b2ludDY0IC0tIGNvbnZlcnQgYSBzdHJpbmcgdG8gNjQt Yml0IGludGVnZXIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQg dmVyc2lvbiBvZiBwZ19zdHJ0b2ludDY0KCkgZnJvbQotICogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L251bXV0aWxzLmMuCi0gKgogICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciB0aGUgY29u dmVyc2lvbiB3b3JrZWQsIGFuZCBpZiBzbwogICogIipyZXN1bHQiIGlzIHNldCB0byB0aGUgcmVz dWx0LgogICoKQEAgLTEwMjMsNzEgKzEwMjQsMjUgQEAgaXNfYW5faW50KGNvbnN0IGNoYXIgKnN0 cikKIGJvb2wKIHN0cnRvaW50NjQoY29uc3QgY2hhciAqc3RyLCBib29sIGVycm9yT0ssIGludDY0 ICpyZXN1bHQpCiB7Ci0JY29uc3QgY2hhciAqcHRyID0gc3RyOwotCWludDY0CQl0bXAgPSAwOwot CWJvb2wJCW5lZyA9IGZhbHNlOwotCi0JLyoKLQkgKiBEbyBvdXIgb3duIHNjYW4sIHJhdGhlciB0 aGFuIHJlbHlpbmcgb24gc3NjYW5mIHdoaWNoIG1pZ2h0IGJlIGJyb2tlbgotCSAqIGZvciBsb25n IGxvbmcuCi0JICoKLQkgKiBBcyBJTlQ2NF9NSU4gY2FuJ3QgYmUgc3RvcmVkIGFzIGEgcG9zaXRp dmUgNjQgYml0IGludGVnZXIsIGFjY3VtdWxhdGUKLQkgKiB2YWx1ZSBhcyBhIG5lZ2F0aXZlIG51 bWJlci4KLQkgKi8KLQotCS8qIHNraXAgbGVhZGluZyBzcGFjZXMgKi8KLQl3aGlsZSAoKnB0ciAm JiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKLQkJcHRyKys7Ci0KLQkvKiBoYW5kbGUg c2lnbiAqLwotCWlmICgqcHRyID09ICctJykKLQl7Ci0JCXB0cisrOwotCQluZWcgPSB0cnVlOwot CX0KLQllbHNlIGlmICgqcHRyID09ICcrJykKLQkJcHRyKys7CisJY2hhcgkgICAqZW5kOwogCi0J LyogcmVxdWlyZSBhdCBsZWFzdCBvbmUgZGlnaXQgKi8KLQlpZiAodW5saWtlbHkoIWlzZGlnaXQo KHVuc2lnbmVkIGNoYXIpICpwdHIpKSkKLQkJZ290byBpbnZhbGlkX3N5bnRheDsKKwllcnJubyA9 IDA7CisJKnJlc3VsdCA9IHN0cnRvaTY0KHN0ciwgJmVuZCwgMTApOwogCi0JLyogcHJvY2VzcyBk aWdpdHMgKi8KLQl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkK KwlpZiAodW5saWtlbHkoZXJybm8gPT0gRVJBTkdFKSkKIAl7Ci0JCWludDgJCWRpZ2l0ID0gKCpw dHIrKyAtICcwJyk7Ci0KLQkJaWYgKHVubGlrZWx5KHBnX211bF9zNjRfb3ZlcmZsb3codG1wLCAx MCwgJnRtcCkpIHx8Ci0JCQl1bmxpa2VseShwZ19zdWJfczY0X292ZXJmbG93KHRtcCwgZGlnaXQs ICZ0bXApKSkKLQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQlpZiAoIWVycm9yT0spCisJCQlwZ19s b2dfZXJyb3IoInZhbHVlIFwiJXNcIiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgYmlnaW50Iiwg c3RyKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGFsbG93IHRyYWlsaW5nIHdoaXRlc3Bh Y2UsIGJ1dCBub3Qgb3RoZXIgdHJhaWxpbmcgY2hhcnMgKi8KLQl3aGlsZSAoKnB0ciAhPSAnXDAn ICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQotCQlwdHIrKzsKLQotCWlmICh1bmxp a2VseSgqcHRyICE9ICdcMCcpKQotCQlnb3RvIGludmFsaWRfc3ludGF4OwotCi0JaWYgKCFuZWcp CisJaWYgKHVubGlrZWx5KGVycm5vICE9IDAgfHwgZW5kID09IHN0ciB8fCAqZW5kICE9ICdcMCcp KQogCXsKLQkJaWYgKHVubGlrZWx5KHRtcCA9PSBQR19JTlQ2NF9NSU4pKQotCQkJZ290byBvdXRf b2ZfcmFuZ2U7Ci0JCXRtcCA9IC10bXA7CisJCWlmICghZXJyb3JPSykKKwkJCXBnX2xvZ19lcnJv cigiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgYmlnaW50OiBcIiVzXCIiLCBzdHIpOwor CQlyZXR1cm4gZmFsc2U7CiAJfQotCi0JKnJlc3VsdCA9IHRtcDsKIAlyZXR1cm4gdHJ1ZTsKLQot b3V0X29mX3JhbmdlOgotCWlmICghZXJyb3JPSykKLQkJcGdfbG9nX2Vycm9yKCJ2YWx1ZSBcIiVz XCIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIGJpZ2ludCIsIHN0cik7Ci0JcmV0dXJuIGZhbHNl OwotCi1pbnZhbGlkX3N5bnRheDoKLQlpZiAoIWVycm9yT0spCi0JCXBnX2xvZ19lcnJvcigiaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgYmlnaW50OiBcIiVzXCIiLCBzdHIpOwotCXJldHVy biBmYWxzZTsKIH0KIAogLyogY29udmVydCBzdHJpbmcgdG8gZG91YmxlLCBkZXRlY3Rpbmcgb3Zl cmZsb3dzL3VuZGVyZmxvd3MgKi8KQEAgLTEwOTksMTQgKzEwNTQsMTQgQEAgc3RydG9kb3VibGUo Y29uc3QgY2hhciAqc3RyLCBib29sIGVycm9yT0ssIGRvdWJsZSAqZHYpCiAJZXJybm8gPSAwOwog CSpkdiA9IHN0cnRvZChzdHIsICZlbmQpOwogCi0JaWYgKHVubGlrZWx5KGVycm5vICE9IDApKQor CWlmICh1bmxpa2VseShlcnJubyA9PSBFUkFOR0UpKQogCXsKIAkJaWYgKCFlcnJvck9LKQogCQkJ cGdfbG9nX2Vycm9yKCJ2YWx1ZSBcIiVzXCIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIGRvdWJs ZSIsIHN0cik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAodW5saWtlbHkoZW5kID09IHN0 ciB8fCAqZW5kICE9ICdcMCcpKQorCWlmICh1bmxpa2VseShlcnJubyAhPSAwIHx8IGVuZCA9PSBz dHIgfHwgKmVuZCAhPSAnXDAnKSkKIAl7CiAJCWlmICghZXJyb3JPSykKIAkJCXBnX2xvZ19lcnJv cigiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgZG91YmxlOiBcIiVzXCIiLCBzdHIpOwot LSAKMi40My4wCgpGcm9tIGRjYjg1ZDI2ZjgxMzJlYWFmOWQwOTZlODE0YjliZGE0OWRiN2Q0Nzgg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlzIE1pcm9ub3YgPGJvcmlzLm1pcm9u b3ZAZ21haWwuY29tPgpEYXRlOiBGcmksIDIxIE5vdiAyMDI1IDIwOjA2OjI0ICswNzAwClN1Ympl Y3Q6IFtQQVRDSCB2OCAxMC8yM10gU3dpdGNoaW5nIENPUFkgRlJPTSBCSU5BUlkgdGkgcnVuIGlu IG11bHRpcGxlCiB0cmFuc2FjdGlvbnMKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8 IDI3ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2IGluc2Vy dGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9w Z2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDAzYjVlNWMyOGYwLi42 Yjg5MDA3YTYzYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9z cmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC01NDk2LDIwICs1NDk2LDIwIEBAIGluaXRBY2Nv dW50QmluYXJ5KFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQ2NF90IGN1cnIsIGludDMy X3QgcGFyZW50KQogICovCiBzdGF0aWMgdm9pZAogaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdj b25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAotCQkJCQkJaW50NjRfdCBiYXNl LCBpbml0Um93TWV0aG9kQmluIGluaXRfcm93KQorCQkJCQkJaW50IGNvdW50ZXIsIGludDY0X3Qg YmFzZSwgaW5pdFJvd01ldGhvZEJpbiBpbml0X3JvdykKIHsKIAlpbnQJCQkgbjsKIAlQR3Jlc3Vs dAkqcmVzOwogCWNoYXIJCSBjb3B5X3N0YXRlbWVudFsyNTZdOwogCWNvbnN0IGNoYXIJKmNvcHlf c3RhdGVtZW50X2ZtdCA9ICJjb3B5ICVzICglcykgZnJvbSBzdGRpbiAoZm9ybWF0IGJpbmFyeSki OwotCWludDY0X3QJCSB0b3RhbCA9IGJhc2UgKiBzY2FsZTsKKwlpbnQ2NF90CQkgc3RhcnQgPSBi YXNlICogY291bnRlcjsKIAogCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwogCiAJLyogVXNl IENPUFkgd2l0aCBGUkVFWkUgb24gdjE0IGFuZCBsYXRlciBmb3IgYWxsIG9yZGluYXJ5IHRhYmxl cyAqLwogCWlmICgoUFFzZXJ2ZXJWZXJzaW9uKGNvbikgPj0gMTQwMDAwKSAmJgogCQlnZXRfdGFi bGVfcmVsa2luZChjb24sIHRhYmxlKSA9PSBSRUxLSU5EX1JFTEFUSU9OKQotCQljb3B5X3N0YXRl bWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gd2l0aCAoZm9ybWF0IGJpbmFyeSwg ZnJlZXplIG9uKSI7CisJCWNvcHlfc3RhdGVtZW50X2ZtdCA9ICJjb3B5ICVzICglcykgZnJvbSBz dGRpbiB3aXRoIChmb3JtYXQgYmluYXJ5KSI7CiAKIAluID0gcGdfc25wcmludGYoY29weV9zdGF0 ZW1lbnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksIGNvcHlfc3RhdGVtZW50X2ZtdCwgdGFibGUs IGNvbHVtbnMpOwogCWlmIChuID49IHNpemVvZihjb3B5X3N0YXRlbWVudCkpCkBAIC01NTI2LDcg KzU1MjYsNyBAQCBpbml0UG9wdWxhdGVUYWJsZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFi bGUsIGNoYXIgKmNvbHVtbnMsCiAKIAlzZW5kQmluYXJ5Q29weUhlYWRlcihjb24pOwogCi0JZm9y IChpbnQ2NF90IGkgPSAwOyBpIDwgdG90YWw7IGkrKykKKwlmb3IgKGludDY0X3QgaSA9IHN0YXJ0 OyBpIDwgc3RhcnQgKyBiYXNlOyBpKyspCiAJewogCQlpbml0X3Jvdyhjb24sIHJlcywgaSwgYmFz ZSk7CiAJfQpAQCAtNTU3MywxNSArNTU3MywyMCBAQCBpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lk ZUJpbmFyeShQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwog CWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCi0JaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29u LCAicGdiZW5jaF9icmFuY2hlcyIsICJiaWQsIGJiYWxhbmNlIiwKLQkJCQkJCQluYnJhbmNoZXMs IGluaXRCcmFuY2hCaW5hcnkpOwotCWluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KGNvbiwgInBnYmVu Y2hfdGVsbGVycyIsICAidGlkLCBiaWQsIHRiYWxhbmNlIiwKLQkJCQkJCQludGVsbGVycywgIGlu aXRUZWxsZXJCaW5hcnkpOwotCWluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KGNvbiwgInBnYmVuY2hf YWNjb3VudHMiLCAiYWlkLCBiaWQsIGFiYWxhbmNlIiwKLQkJCQkJCQluYWNjb3VudHMsIGluaXRB Y2NvdW50QmluYXJ5KTsKLQogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CiAKKwlm b3IgKGludCBpID0gMDsgaSA8IHNjYWxlOyBpKyspCisJeworCQlpbml0UG9wdWxhdGVUYWJsZUJp bmFyeShjb24sICJwZ2JlbmNoX2JyYW5jaGVzIiwgImJpZCwgYmJhbGFuY2UiLAorCQkJCQkJCQlp LCBuYnJhbmNoZXMsIGluaXRCcmFuY2hCaW5hcnkpOworCQlpbml0UG9wdWxhdGVUYWJsZUJpbmFy eShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCAgInRpZCwgYmlkLCB0YmFsYW5jZSIsCisJCQkJCQkJ CWksIG50ZWxsZXJzLCAgaW5pdFRlbGxlckJpbmFyeSk7CisJCWluaXRQb3B1bGF0ZVRhYmxlQmlu YXJ5KGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCAiYWlkLCBiaWQsIGFiYWxhbmNlIiwKKwkJCQkJ CQkJaSwgbmFjY291bnRzLCBpbml0QWNjb3VudEJpbmFyeSk7CisKKwkJZXhlY3V0ZVN0YXRlbWVu dChjb24sICJjb21taXQiKTsKKwl9CisKIAlwZ19mcmVlKGJpbl9jb3B5X2J1ZmZlcik7CiB9CiAK LS0gCjIuNDMuMAoKRnJvbSBiOGUyODg4MTIyNTIzNGZkMDBiNTUyMzViYzYwZmFkMmRjNjBiNTQ0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBNaXJvbm92IDxib3Jpcy5taXJv bm92QGdtYWlsLmNvbT4KRGF0ZTogU2F0LCAyMiBOb3YgMjAyNSAxNzowNjowMCArMDcwMApTdWJq ZWN0OiBbUEFUQ0ggdjggMTEvMjNdIEFkZGluZyB0ZXN0cyBmb3IgbmV3IG1vZGVzIG9mIGRhdGEg Z2VuZXJhdGlvbgoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAg ICAgICB8IDIxICsrKystLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3Nl cnZlci5wbCB8IDUyICsrKysrKysrKysrKysrKysrLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDU2IGlu c2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDZiODkwMDdhNjNi Li5kZDRlNWQ1ZTA1NiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysg Yi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC0xNjQsNyArMTY0LDcgQEAgdHlwZWRlZiBz dHJ1Y3Qgc29ja2V0X3NldAogI2RlZmluZSBBTExfSU5JVF9TVEVQUyAiZHRnQ0dpSXZwZiIJLyog YWxsIHBvc3NpYmxlIHN0ZXBzICovCiAKICNkZWZpbmUgTE9HX1NURVBfU0VDT05EUwk1CS8qIHNl Y29uZHMgYmV0d2VlbiBsb2cgbWVzc2FnZXMgKi8KLSNkZWZpbmUgREVGQVVMVF9OWEFDVFMJMTAJ CS8qIGRlZmF1bHQgbnhhY3RzICovCisjZGVmaW5lIERFRkFVTFRfTlhBQ1RTCQkxMAkvKiBkZWZh dWx0IG54YWN0cyAqLwogCiAjZGVmaW5lIE1JTl9HQVVTU0lBTl9QQVJBTQkJMi4wIC8qIG1pbmlt dW0gcGFyYW1ldGVyIGZvciBnYXVzcyAqLwogCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIGlu dAlzY2FsZSA9IDE7CiAvKgogICogbW9kZSBvZiBkYXRhIGdlbmVyYXRpb24gdG8gdXNlCiAgKi8K LXN0YXRpYyBjaGFyCWRhdGFfZ2VuZXJhdGlvbl90eXBlID0gJz8nOworc3RhdGljIGNoYXIJZGF0 YV9nZW5lcmF0aW9uX3R5cGUgPSBHRU5fVFlQRV9DT1BZX09SSUdJTkFMOwogCiAvKgogICogQ09Q WSBGUk9NIEJJTkFSWSBleGVjdXRpb24gYnVmZmVyCkBAIC00OTg1LDI2ICs0OTg1LDI2IEBAIGlu aXRDcmVhdGVUYWJsZXMoUEdjb25uICpjb24pCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkZGxpbmZv IERETHNbXSA9IHsKIAkJewogCQkJInBnYmVuY2hfaGlzdG9yeSIsCi0JCQkidGlkIGludCxiaWQg aW50LGFpZCAgICBpbnQsZGVsdGEgaW50LG10aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikg ZGVmYXVsdCAnJyIsCi0JCQkidGlkIGludCxiaWQgaW50LGFpZCBiaWdpbnQsZGVsdGEgaW50LG10 aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikgZGVmYXVsdCAnJyIsCisJCQkidGlkIGludCxi aWQgaW50LGFpZCAgICBpbnQsZGVsdGEgaW50LG10aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigy MikgZGVmYXVsdCAnPyciLAorCQkJInRpZCBpbnQsYmlkIGludCxhaWQgYmlnaW50LGRlbHRhIGlu dCxtdGltZSB0aW1lc3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJz8nIiwKIAkJCTAKIAkJ fSwKIAkJewogCQkJInBnYmVuY2hfdGVsbGVycyIsCi0JCQkidGlkIGludCBub3QgbnVsbCxiaWQg aW50LHRiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAnJyIsCi0JCQkidGlkIGlu dCBub3QgbnVsbCxiaWQgaW50LHRiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAn JyIsCisJCQkidGlkIGludCBub3QgbnVsbCxiaWQgaW50LHRiYWxhbmNlIGludCxmaWxsZXIgY2hh cig4NCkiLAorCQkJInRpZCBpbnQgbm90IG51bGwsYmlkIGludCx0YmFsYW5jZSBpbnQsZmlsbGVy IGNoYXIoODQpIiwKIAkJCTEKIAkJfSwKIAkJewogCQkJInBnYmVuY2hfYWNjb3VudHMiLAotCQkJ ImFpZCAgICBpbnQgbm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQp IGRlZmF1bHQgJyciLAotCQkJImFpZCBiaWdpbnQgbm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBp bnQsZmlsbGVyIGNoYXIoODQpIGRlZmF1bHQgJyciLAorCQkJImFpZCAgICBpbnQgbm90IG51bGws YmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIGRlZmF1bHQgJz8nIiwKKwkJCSJh aWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBk ZWZhdWx0ICc/JyIsCiAJCQkxCiAJCX0sCiAJCXsKIAkJCSJwZ2JlbmNoX2JyYW5jaGVzIiwKLQkJ CSJiaWQgaW50IG5vdCBudWxsLGJiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4OCkgZGVmYXVsdCAn JyIsCi0JCQkiYmlkIGludCBub3QgbnVsbCxiYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODgpIGRl ZmF1bHQgJyciLAorCQkJImJpZCBpbnQgbm90IG51bGwsYmJhbGFuY2UgaW50LGZpbGxlciBjaGFy KDg4KSIsCisJCQkiYmlkIGludCBub3QgbnVsbCxiYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODgp IiwKIAkJCTEKIAkJfQogCX07CkBAIC03ODM3LDYgKzc4MzcsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCX0KIAkJfQogCisJCWNoZWNrSW5pdFN0ZXBzKGluaXRpYWxpemVfc3Rl cHMpOwogCQlydW5Jbml0U3RlcHMoaW5pdGlhbGl6ZV9zdGVwcyk7CiAJCWV4aXQoMCk7CiAJfQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwg Yi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbAppbmRleCA1ODFl OWFmNzkwNy4uYTM3NzA0OGVhZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9w Z2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNo X3dpdGhfc2VydmVyLnBsCkBAIC0xNiwyNSArMTYsMzAgQEAgc3ViIGNoZWNrX2RhdGFfc3RhdGUK IAlsb2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAx OwogCW15ICRub2RlID0gc2hpZnQ7CiAJbXkgJHR5cGUgPSBzaGlmdDsKKwlteSAkc3FsX3Jlc3Vs dDsKIAotCW15ICRzcWxfcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCQkn U0VMRUNUIGNvdW50KCopIEFTIG51bGxfY291bnQgRlJPTSBwZ2JlbmNoX2FjY291bnRzIFdIRVJF IGZpbGxlciBJUyBOVUxMIExJTUlUIDEwOycKLQkpOwotCWlzKCRzcWxfcmVzdWx0LCAnMCcsCi0J CSIkdHlwZTogZmlsbGVyIGNvbHVtbiBvZiBwZ2JlbmNoX2FjY291bnRzIGhhcyBubyBOVUxMIGRh dGEiKTsKIAkkc3FsX3Jlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkJJ1NF TEVDVCBjb3VudCgqKSBBUyBudWxsX2NvdW50IEZST00gcGdiZW5jaF9icmFuY2hlcyBXSEVSRSBm aWxsZXIgSVMgTlVMTDsnCiAJKTsKIAlpcygkc3FsX3Jlc3VsdCwgJzEnLAogCQkiJHR5cGU6IGZp bGxlciBjb2x1bW4gb2YgcGdiZW5jaF9icmFuY2hlcyBoYXMgb25seSBOVUxMIGRhdGEiKTsKKwog CSRzcWxfcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCQknU0VMRUNUIGNv dW50KCopIEFTIG51bGxfY291bnQgRlJPTSBwZ2JlbmNoX3RlbGxlcnMgV0hFUkUgZmlsbGVyIElT IE5VTEw7JwogCSk7CiAJaXMoJHNxbF9yZXN1bHQsICcxMCcsCiAJCSIkdHlwZTogZmlsbGVyIGNv bHVtbiBvZiBwZ2JlbmNoX3RlbGxlcnMgaGFzIG9ubHkgTlVMTCBkYXRhIik7CisKKwkkc3FsX3Jl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJJ1NFTEVDVCBjb3VudCgqKSBB UyBudWxsX2NvdW50IEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBmaWxsZXIgSVMgTlVMTCBM SU1JVCAxMDsnCisJKTsKKwlpcygkc3FsX3Jlc3VsdCwgJzAnLAorCQkiJHR5cGU6IGZpbGxlciBj b2x1bW4gb2YgcGdiZW5jaF9hY2NvdW50cyBoYXMgbm8gTlVMTCBkYXRhIik7CisKIAkkc3FsX3Jl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkJJ1NFTEVDVCBjb3VudCgqKSBB UyBkYXRhX2NvdW50IEZST00gcGdiZW5jaF9oaXN0b3J5OycpOwotCWlzKCRzcWxfcmVzdWx0LCAn MCcsICIkdHlwZTogcGdiZW5jaF9oaXN0b3J5IGhhcyBubyBkYXRhIik7CisJaXMoJHNxbF9yZXN1 bHQsICcwJywKKwkJIiR0eXBlOiBwZ2JlbmNoX2hpc3RvcnkgaGFzIG5vIGRhdGEiKTsKIH0KIAog IyBzdGFydCBhIHBnYmVuY2ggc3BlY2lmaWMgc2VydmVyCkBAIC0xMjUsNyArMTMwLDcgQEAgJG5v ZGUtPnBnYmVuY2goCiAJJ3BnYmVuY2ggc2NhbGUgMSBpbml0aWFsaXphdGlvbicsKTsKIAogIyBD aGVjayBkYXRhIHN0YXRlLCBhZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCi1jaGVj a19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUnKTsKK2NoZWNrX2RhdGFfc3RhdGUoJG5v ZGUsICdjbGllbnQtc2lkZSAoZGVmYXVsdCBvcHRpb25zKScpOwogCiAjIEFnYWluLCB3aXRoIGFs bCBwb3NzaWJsZSBvcHRpb25zCiAkbm9kZS0+cGdiZW5jaCgKQEAgLTE0Myw2ICsxNDgsNyBAQCAk bm9kZS0+cGdiZW5jaCgKIAkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CiAJXSwKIAkncGdiZW5j aCBzY2FsZSAxIGluaXRpYWxpemF0aW9uJyk7CitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xp ZW50LXNpZGUgKGFsbCBvcHRpb25zKScpOwogCiAjIFRlc3QgaW50ZXJhY3Rpb24gb2YgLS1pbml0 LXN0ZXBzIHdpdGggbGVnYWN5IHN0ZXAtc2VsZWN0aW9uIG9wdGlvbnMKICRub2RlLT5wZ2JlbmNo KApAQCAtMTY0LDYgKzE3MCwzOCBAQCAkbm9kZS0+cGdiZW5jaCgKICMgQ2hlY2sgZGF0YSBzdGF0 ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgogY2hlY2tfZGF0YV9zdGF0ZSgk bm9kZSwgJ3NlcnZlci1zaWRlJyk7CiAKKyMgVGVzdCBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIHdp dGggVU5ORVNUCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1k dEknLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJ cXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGVc KX0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0 ZXBzIHNlcnZlci1zaWRlIFVOTkVTVCcpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNl cnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2 ZXItc2lkZSAodW5uZXN0KScpOworCisjIFRlc3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlvbiB3aXRo IFVOTkVTVAorJG5vZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRD JywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFy e2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlXCl9 LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVw cyBjbGllbnQtc2lkZSBCSU5BUlknKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2 ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50 LXNpZGUgKGJpbmFyeSknKTsKKwogIyBSdW4gYWxsIGJ1aWx0aW4gc2NyaXB0cywgZm9yIGEgZmV3 IHRyYW5zYWN0aW9ucyBlYWNoCiAkbm9kZS0+cGdiZW5jaCgKIAknLS10cmFuc2FjdGlvbnM9NSAt RGZvbz1ibGEgLS1jbGllbnQ9MiAtLXByb3RvY29sPXNpbXBsZSAtLWJ1aWx0aW49dCcKLS0gCjIu NDMuMAoKRnJvbSBiM2YyYmNlMzQyMzJkMjk5YWJjNzY0NGE4NTc5ZjBjZTQ5YzhjOWQ2IE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBNaXJvbm92IDxib3Jpcy5taXJvbm92QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAyMyBOb3YgMjAyNSAxNDowNTo1OSArMDcwMApTdWJqZWN0OiBb UEFUQ0ggdjggMTIvMjNdIEZpeGluZyBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgcHJv Y2VkdXJlcyBieQogcmVtb3Zpbmcgb3IgY29tbWVudGluZyB0aGVtIG91dCBhcyB0aGV5IG1pZ2h0 IGJlIG5lZWRlZCBhIGJpdCBsYXRlcgoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwg MzEgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5z ZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNo L3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMGEzYmEyMWRjYzku LjY4MmRiNjFmZjYxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTUyMDEsNyArNTIwMSw3IEBAIGluaXRHZW5l cmF0ZURhdGFDbGllbnRTaWRlVGV4dChQR2Nvbm4gKmNvbikKIAogLyoKICAqIER1bXBzIGJpbmFy eSBidWZmZXIgdG8gZmlsZSAocHVyZWx5IGZvciBkZWJ1Z2dpbmcpCi0gKi8KKyAqCiBzdGF0aWMg dm9pZAogZHVtcEJ1ZmZlclRvRmlsZShjaGFyICpmaWxlbmFtZSkKIHsKQEAgLTUyMjYsNiArNTIy Niw3IEBAIGR1bXBCdWZmZXJUb0ZpbGUoY2hhciAqZmlsZW5hbWUpCiAKIAlmY2xvc2UoZmlsZV9w dHIpOwogfQorICovCiAKIC8qCiAgKiBTYXZlIGNoYXIgZGF0YSB0byBidWZmZXIKQEAgLTUyNzEs MzcgKzUyNzIsMTQgQEAgYWRkQ29sdW1uQ291bnRlcihpbnQxNl90IG4pCiAKIC8qCiAgKiBhZGRz IGNvbHVtbiB3aXRoIE5VTEwgdmFsdWUKLSAqLworICoKIHN0YXRpYyB2b2lkCiBhZGROdWxsQ29s dW1uKCkKIHsKIAlpbnQzMl90IG51bGwgPSAtMTsKIAlidWZmZXJEYXRhKCh2b2lkICopICZudWxs LCBzaXplb2YobnVsbCkpOwogfQotCi0vKgotICogYWRkcyBjb2x1bW4gd2l0aCBpbnQ4IHZhbHVl CiAgKi8KLXN0YXRpYyB2b2lkCi1hZGRJbnQ4Q29sdW1uKGludDhfdCB2YWx1ZSkKLXsKLQlpbnQ4 X3QJZGF0YSA9IHZhbHVlOwotCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsKLQlidWZmZXJE YXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOwotCWJ1ZmZlckRhdGEoKHZvaWQgKikg JmRhdGEsIHNpemVvZihkYXRhKSk7Ci19Ci0KLS8qCi0gKiBhZGRzIGNvbHVtbiB3aXRoIGludDE2 IHZhbHVlCi0gKi8KLXN0YXRpYyB2b2lkCi1hZGRJbnQxNkNvbHVtbihpbnQxNl90IHZhbHVlKQot ewotCWludDE2X3QJZGF0YSA9IHZhbHVlOwotCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsK LQlidWZmZXJEYXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOwotCWJ1ZmZlckRhdGEo KHZvaWQgKikgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci19CiAKIC8qCiAgKiBhZGRzIGNvbHVtbiB3 aXRoIGludGkzMiB2YWx1ZQpAQCAtNTMyOSw3ICs1MzA3LDcgQEAgYWRkSW50NjRDb2x1bW4oaW50 NjRfdCB2YWx1ZSkKIAogLyoKICAqIGFkZHMgY29sdW1uIHdpdGggY2hhciB2YWx1ZQotICovCisg Kgogc3RhdGljIHZvaWQKIGFkZENoYXJDb2x1bW4oY2hhciAqdmFsdWUpCiB7CkBAIC01MzM3LDYg KzUzMTUsNyBAQCBhZGRDaGFyQ29sdW1uKGNoYXIgKnZhbHVlKQogCWJ1ZmZlckRhdGEoKHZvaWQg KikgJnNpemUsIHNpemVvZihzaXplKSk7CiAJYnVmZmVyQ2hhckRhdGEodmFsdWUsIHNpemUpOwog fQorICovCiAKIC8qCiAgKiBTdGFydHMgY29tbXVuaWNhdGlvbiB3aXRoIHNlcnZlciBmb3IgQ09Q WSBGUk9NIEJJTkFSWSBzdGF0ZW1lbnQKLS0gCjIuNDMuMAoKRnJvbSA5YWI3ZmUzMDJiYTdkZTQw NTkzZTdjYmE4ZWExY2EzYjg3NmMxZWE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBC b3JpcyBNaXJvbm92IDxib3Jpcy5taXJvbm92QGdtYWlsLmNvbT4KRGF0ZTogVGh1LCAyOSBKYW4g MjAyNiAxOToyMjoxNiArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjggMTMvMjNdIE1vdmluZyBQUWNs ZWFyIGNhbGwgdG8gdGhlIGVuZCBvZiBwcm9jZWR1cmUgdG8gYXZvaWQKIGFjY2VzcyB0byBwcmV2 aW91c2x5IHJlbGVhc2VkIG1lbW9yeQoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwg MjcgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0 aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggNjgyZGI2MWZmNjEuLjM2 ODdiNjU4NzFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3Ny Yy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTUzNjMsMTEgKzUzNjMsMTEgQEAgc3RhdGljIHZv aWQKIGluaXRCcmFuY2hCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3Qg Y3VyciwgaW50MzJfdCBwYXJlbnQpCiB7CiAJLyoKLQkgKiBFYWNoIHJvdyBoYXMgZm9sbG93aW5n IGV4dHJhIGJ5dGVzOgorCSAqIEVhY2ggcm93IG9mIGJyYW5jaCB0YWJsZSBoYXMgZm9sbG93aW5n IGV4dHJhIGJ5dGVzOgogCSAqIC0gMiBieXRlcyBmb3IgbnVtYmVyIG9mIGNvbHVtbnMKLQkgKiAt IDQgYnl0ZXMgYXMgbGVuZ3RoIGZvciBlYWNoIGNvbHVtbgorCSAqIC0gNCBieXRlcyBhcyBsZW5n dGggZm9yIGVhY2ggb2YgdGFibGUncyAzIGNvbHVtbnMKIAkgKi8KLQlpbnQxNl90CW1heF9yb3df bGVuID0gIDM1ICsgMiArIDQqMzsgLyogbWF4IHJvdyBzaXplIGlzIDMyICovCisJaW50MTZfdAlt YXhfcm93X2xlbiA9ICAzNSArIDIgKyA0KjM7IC8qIG1heCByb3cgc2l6ZSBpcyAzNSAqLwogCiAJ Zmx1c2hCdWZmZXIoY29uLCByZXMsIG1heF9yb3dfbGVuKTsKIApAQCAtNTM4NCw5ICs1Mzg0LDkg QEAgc3RhdGljIHZvaWQKIGluaXRUZWxsZXJCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpy ZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiB7CiAJLyoKLQkgKiBFYWNoIHJvdyBo YXMgZm9sbG93aW5nIGV4dHJhIGJ5dGVzOgorCSAqIEVhY2ggcm93IG9mIHRlbGxlcnMgdGFibGUg aGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKIAkgKiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBj b2x1bW5zCi0JICogLSA0IGJ5dGVzIGFzIGxlbmd0aCBmb3IgZWFjaCBjb2x1bW4KKwkgKiAtIDQg Ynl0ZXMgYXMgbGVuZ3RoIGZvciBlYWNoIG9mIHRhYmxlJ3MgNCBjb2x1bW5zCiAJICovCiAJaW50 MTZfdAltYXhfcm93X2xlbiA9ICA0MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6ZSBpcyA0MCAq LwogCkBAIC01NDA2LDkgKzU0MDYsOSBAQCBzdGF0aWMgdm9pZAogaW5pdEFjY291bnRCaW5hcnko UEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQp CiB7CiAJLyoKLQkgKiBFYWNoIHJvdyBoYXMgZm9sbG93aW5nIGV4dHJhIGJ5dGVzOgorCSAqIEVh Y2ggcm93IG9mIGFjY291bnRzIHRhYmxlIGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CiAJICog LSAyIGJ5dGVzIGZvciBudW1iZXIgb2YgY29sdW1ucwotCSAqIC0gNCBieXRlcyBhcyBsZW5ndGgg Zm9yIGVhY2ggY29sdW1uCisJICogLSA0IGJ5dGVzIGFzIGxlbmd0aCBmb3IgZWFjaCBvZiB0YWJs ZSdzIDQgY29sdW1ucwogCSAqLwogCWludDE2X3QJbWF4X3Jvd19sZW4gPSAyNTAgKyAyICsgNCo0 OyAvKiBtYXggcm93IHNpemUgaXMgMjUwIGZvciBpbnQ2NCAqLwogCkBAIC01NDU1LDExICs1NDU1 LDExIEBAIGluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KFBHY29ubiAqY29uLCBjaGFyICp0YWJsZSwg Y2hhciAqY29sdW1ucywKIAogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlf SU4pCiAJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNvcHkgaW4gcmVzdWx0OiAlcyIsIFBRZXJyb3JN ZXNzYWdlKGNvbikpOwotCVBRY2xlYXIocmVzKTsKIAogCiAJc2VuZEJpbmFyeUNvcHlIZWFkZXIo Y29uKTsKIAorCiAJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFzZTsgaSsr KQogCXsKIAkJaW5pdF9yb3coY29uLCByZXMsIGksIGJhc2UpOwpAQCAtNTQ3MCw4ICs1NDcwLDEw IEBAIGluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KFBHY29ubiAqY29uLCBjaGFyICp0YWJsZSwgY2hh ciAqY29sdW1ucywKIAllbHNlCiAJCWZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBtb2RlICVk IGluc3RlYWQgb2YgJWRcbiIsIFBRcmVzdWx0U3RhdHVzKHJlcyksIFBHUkVTX0NPUFlfSU4pOwog CisKIAlzZW5kQmluYXJ5Q29weVRyYWlsZXIoY29uKTsKIAorCiAJaWYgKFBRcmVzdWx0U3RhdHVz KHJlcykgPT0gUEdSRVNfQ09QWV9JTikKIAl7CiAJCWlmIChQUXB1dENvcHlFbmQoY29uLCBOVUxM KSA9PSAxKSAvKiBzdWNjZXNzICovCkBAIC01NDg0LDYgKzU0ODYsOCBAQCBpbml0UG9wdWxhdGVU YWJsZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCiAJCWVs c2UKIAkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6ICVzXG4iLCBQUWVycm9yTWVzc2FnZShjb24p KTsKIAl9CisKKwlQUWNsZWFyKHJlcyk7CiB9CiAKIC8qCkBAIC01NDk5LDggKzU1MDMsOSBAQCBp bml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeShQR2Nvbm4gKmNvbikKIAliaW5fY29weV9i dWZmZXJfbGVuZ3RoID0gMDsKIAogCS8qCi0JICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRy YW5zYWN0aW9uIHRvIGVuYWJsZSB0aGUgYmFja2VuZCdzCi0JICogZGF0YS1sb2FkaW5nIG9wdGlt aXphdGlvbnMKKwkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBtdWx0aXBsZSB0cmFuc2FjdGlvbnMK KwkgKiB0byBtaW5pbWl6ZSBsb2FkIG9uIERCIHNlcnZlciBhbmQgcGVyaGFwcworCSAqIGluIGZ1 dHVyZSBhbGxvdyBsb2FkIGluIHBhcmFsbGVsIHNlc3Npb25zCiAJICovCiAJZXhlY3V0ZVN0YXRl bWVudChjb24sICJiZWdpbiIpOwogCkBAIC01NTExLDYgKzU1MTYsOCBAQCBpbml0R2VuZXJhdGVE YXRhQ2xpZW50U2lkZUJpbmFyeShQR2Nvbm4gKmNvbikKIAogCWZvciAoaW50IGkgPSAwOyBpIDwg c2NhbGU7IGkrKykKIAl7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKwogCQlp bml0UG9wdWxhdGVUYWJsZUJpbmFyeShjb24sICJwZ2JlbmNoX2JyYW5jaGVzIiwgImJpZCwgYmJh bGFuY2UiLAogCQkJCQkJCQlpLCBuYnJhbmNoZXMsIGluaXRCcmFuY2hCaW5hcnkpOwogCQlpbml0 UG9wdWxhdGVUYWJsZUJpbmFyeShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCAgInRpZCwgYmlkLCB0 YmFsYW5jZSIsCi0tIAoyLjQzLjAKCkZyb20gM2Q3YjJjNTNiM2ZhNDViODg0ODM2OWJmYmM0OWEw YzdlNTg1NDMwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQm9yaXMgTWlyb25vdiA8 Ym9yaXMubWlyb25vdkBnbWFpbC5jb20+CkRhdGU6IFRodSwgMjkgSmFuIDIwMjYgMTk6NDc6MjYg KzA3MDAKU3ViamVjdDogW1BBVENIIHY4IDE0LzIzXSBGaXhpbmcgZXJyb3IgYWJvdXQgZnJlZWlu ZyBtZW1vcnkgdHdpY2UKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDQgKystLQog MSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2gu YwppbmRleCAzNjg3YjY1ODcxZS4uNmY0MjQzOGQ5NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtNTQ2Miw2 ICs1NDYyLDcgQEAgaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRh YmxlLCBjaGFyICpjb2x1bW5zLAogCiAJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0 ICsgYmFzZTsgaSsrKQogCXsKKwkJcmVzID0gUFFnZXRSZXN1bHQoY29uKTsKIAkJaW5pdF9yb3co Y29uLCByZXMsIGksIGJhc2UpOwogCX0KIApAQCAtNTQ3Myw3ICs1NDc0LDcgQEAgaW5pdFBvcHVs YXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAog CiAJc2VuZEJpbmFyeUNvcHlUcmFpbGVyKGNvbik7CiAKLQorCXJlcyA9IFBRZ2V0UmVzdWx0KGNv bik7CiAJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKIAl7CiAJCWlm IChQUXB1dENvcHlFbmQoY29uLCBOVUxMKSA9PSAxKSAvKiBzdWNjZXNzICovCkBAIC01NDgxLDcg KzU0ODIsNiBAQCBpbml0UG9wdWxhdGVUYWJsZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFi bGUsIGNoYXIgKmNvbHVtbnMsCiAJCQlyZXMgPSBQUWdldFJlc3VsdChjb24pOwogCQkJaWYgKFBR cmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKIAkJCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yOiAlc1xuIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7Ci0JCQlQUWNsZWFyKHJlcyk7 CiAJCX0KIAkJZWxzZQogCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIFBRZXJyb3JN ZXNzYWdlKGNvbikpOwotLSAKMi40My4wCgpGcm9tIGE3MWM5MGY1NTZiYTE0MzMzNWQ5NjMxZWJi ZGY5NmI3MTIwYzZkMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlzIE1pcm9u b3YgPGJvcmlzLm1pcm9ub3ZAZ21haWwuY29tPgpEYXRlOiBUaHUsIDI5IEphbiAyMDI2IDIwOjI0 OjU0ICswNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAxNS8yM10gRml4aW5nIG1lbW9yeSBsZWFrIGR1 cmluZyBkYXRhIGZsdXNoIGluIENPUFkgQklOQVJZCiB0ZXN0CgotLS0KIHNyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmMgfCAyNiArKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDE2IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDZm NDI0MzhkOTcwLi44ZWNhNTM3YjcxOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC04NzEsNyArODcxLDcgQEAg c3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQg aWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWlsZCByb3dzIGZvciBDT1BZIGR1cmluZyBk YXRhIGxvYWRpbmcgKi8KIHR5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRob2QpCQkoUFFFeHBCdWZm ZXJEYXRhICpzcWwsIGludDY0IGN1cnIpOwotdHlwZWRlZiB2b2lkICgqaW5pdFJvd01ldGhvZEJp bikJKFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFy ZW50KTsKK3R5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRob2RCaW4pCShQR2Nvbm4gKmNvbiwgaW50 NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCk7CiAKIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3Ig b3VyIGZsZXggbGV4ZXIgKi8KIHN0YXRpYyBjb25zdCBQc3FsU2NhbkNhbGxiYWNrcyBwZ2JlbmNo X2NhbGxiYWNrcyA9IHsKQEAgLTUzNDUsMTMgKzUzNDUsMTggQEAgc2VuZEJpbmFyeUNvcHlUcmFp bGVyKFBHY29ubiAqY29uKQogICogRmxhc2hlcyBjdXJyZW50IGJ1ZmZlciBvdmVyIG5ldHdvcmsg aWYgbmVlZGVkCiAgKi8KIHN0YXRpYyB2b2lkCi1mbHVzaEJ1ZmZlcihQR2Nvbm4gKmNvbiwgUEdy ZXN1bHQgKnJlcywgaW50MTZfdCByb3dfbGVuKQorZmx1c2hCdWZmZXIoUEdjb25uICpjb24sIGlu dDE2X3Qgcm93X2xlbikKIHsKKwlQR3Jlc3VsdCAqcmVzOworCiAJaWYgKGJpbl9jb3B5X2J1ZmZl cl9sZW5ndGggKyByb3dfbGVuID4gQklOX0NPUFlfQlVGX1NJWkUpCiAJeworCQlyZXMgPSBQUWdl dFJlc3VsdChjb24pOwogCQkvKiBmbHVzaCBjdXJyZW50IGJ1ZmZlciAqLwogCQlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzKSA9PSBQR1JFU19DT1BZX0lOKQogCQkJUFFwdXRDb3B5RGF0YShjb24sIChj aGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCk7CisJCWVsc2UK KwkJCXBnX2ZhdGFsKCJJdCBpcyBOT1QgYSBDT1BZIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkg cnVubmluZyIpOwogCQliaW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsKIAl9CiB9CkBAIC01MzYw LDcgKzUzNjUsNyBAQCBmbHVzaEJ1ZmZlcihQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywgaW50 MTZfdCByb3dfbGVuKQogICogU2VuZHMgY3VycmVudCBicmFuY2ggcm93IHRvIGJ1ZmZlcgogICov CiBzdGF0aWMgdm9pZAotaW5pdEJyYW5jaEJpbmFyeShQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJl cywgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKK2luaXRCcmFuY2hCaW5hcnkoUEdjb25u ICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiB7CiAJLyoKIAkgKiBFYWNoIHJv dyBvZiBicmFuY2ggdGFibGUgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKQEAgLTUzNjksNyAr NTM3NCw3IEBAIGluaXRCcmFuY2hCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGlu dDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiAJICovCiAJaW50MTZfdAltYXhfcm93X2xlbiA9 ICAzNSArIDIgKyA0KjM7IC8qIG1heCByb3cgc2l6ZSBpcyAzNSAqLwogCi0JZmx1c2hCdWZmZXIo Y29uLCByZXMsIG1heF9yb3dfbGVuKTsKKwlmbHVzaEJ1ZmZlcihjb24sIG1heF9yb3dfbGVuKTsK IAogCWFkZENvbHVtbkNvdW50ZXIoMik7CiAKQEAgLTUzODEsNyArNTM4Niw3IEBAIGluaXRCcmFu Y2hCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJf dCBwYXJlbnQpCiAgKiBTZW5kcyBjdXJyZW50IHRlbGxlciByb3cgdG8gYnVmZmVyCiAgKi8KIHN0 YXRpYyB2b2lkCi1pbml0VGVsbGVyQmluYXJ5KFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBp bnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQoraW5pdFRlbGxlckJpbmFyeShQR2Nvbm4gKmNv biwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKIHsKIAkvKgogCSAqIEVhY2ggcm93IG9m IHRlbGxlcnMgdGFibGUgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKQEAgLTUzOTAsNyArNTM5 NSw3IEBAIGluaXRUZWxsZXJCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0 X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiAJICovCiAJaW50MTZfdAltYXhfcm93X2xlbiA9ICA0 MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6ZSBpcyA0MCAqLwogCi0JZmx1c2hCdWZmZXIoY29u LCByZXMsIG1heF9yb3dfbGVuKTsKKwlmbHVzaEJ1ZmZlcihjb24sIG1heF9yb3dfbGVuKTsKIAog CWFkZENvbHVtbkNvdW50ZXIoMyk7CiAKQEAgLTU0MDMsNyArNTQwOCw3IEBAIGluaXRUZWxsZXJC aW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBw YXJlbnQpCiAgKiBTZW5kcyBjdXJyZW50IGFjY291bnQgcm93IHRvIGJ1ZmZlcgogICovCiBzdGF0 aWMgdm9pZAotaW5pdEFjY291bnRCaW5hcnkoUEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGlu dDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCitpbml0QWNjb3VudEJpbmFyeShQR2Nvbm4gKmNv biwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKIHsKIAkvKgogCSAqIEVhY2ggcm93IG9m IGFjY291bnRzIHRhYmxlIGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CkBAIC01NDEyLDcgKzU0 MTcsNyBAQCBpbml0QWNjb3VudEJpbmFyeShQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywgaW50 NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKIAkgKi8KIAlpbnQxNl90CW1heF9yb3dfbGVuID0g MjUwICsgMiArIDQqNDsgLyogbWF4IHJvdyBzaXplIGlzIDI1MCBmb3IgaW50NjQgKi8KIAotCWZs dXNoQnVmZmVyKGNvbiwgcmVzLCBtYXhfcm93X2xlbik7CisJZmx1c2hCdWZmZXIoY29uLCBtYXhf cm93X2xlbik7CiAKIAlhZGRDb2x1bW5Db3VudGVyKDMpOwogCkBAIC01NDYyLDEwICs1NDY3LDEw IEBAIGluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KFBHY29ubiAqY29uLCBjaGFyICp0YWJsZSwgY2hh ciAqY29sdW1ucywKIAogCWZvciAoaW50NjRfdCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGJhc2U7 IGkrKykKIAl7Ci0JCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbik7Ci0JCWluaXRfcm93KGNvbiwgcmVz LCBpLCBiYXNlKTsKKwkJaW5pdF9yb3coY29uLCBpLCBiYXNlKTsKIAl9CiAKKwlyZXMgPSBQUWdl dFJlc3VsdChjb24pOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4p CiAJCVBRcHV0Q29weURhdGEoY29uLCAoY2hhciAqKSBiaW5fY29weV9idWZmZXIsIGJpbl9jb3B5 X2J1ZmZlcl9sZW5ndGgpOwogCWVsc2UKQEAgLTU0NzQsNiArNTQ3OSw3IEBAIGluaXRQb3B1bGF0 ZVRhYmxlQmluYXJ5KFBHY29ubiAqY29uLCBjaGFyICp0YWJsZSwgY2hhciAqY29sdW1ucywKIAog CXNlbmRCaW5hcnlDb3B5VHJhaWxlcihjb24pOwogCisKIAlyZXMgPSBQUWdldFJlc3VsdChjb24p OwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCiAJewotLSAKMi40 My4wCgpGcm9tIGE1OTMzZjQwYmUwZjNkNDA4YmI5MjBmMjk2ZmI1MTE5YzNlYzI4ZjQgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlzIE1pcm9ub3YgPGJvcmlzLm1pcm9ub3ZAZ21h aWwuY29tPgpEYXRlOiBGcmksIDMwIEphbiAyMDI2IDEzOjU5OjM2ICswNzAwClN1YmplY3Q6IFtQ QVRDSCB2OCAxNi8yM10gRml4aW5nIG1lbW9yeSBsZWFrIHNob3duIGJ5IHZhbGdyaW5kCgotLS0K IHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCA2ICsrKysrLQogMSBmaWxlIGNoYW5nZWQsIDUg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDhlY2E1MzdiNzE4 Li40NjZkOTAyM2Q3MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysg Yi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC01MzU3LDYgKzUzNTcsOCBAQCBmbHVzaEJ1 ZmZlcihQR2Nvbm4gKmNvbiwgaW50MTZfdCByb3dfbGVuKQogCQkJUFFwdXRDb3B5RGF0YShjb24s IChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCk7CiAJCWVs c2UKIAkJCXBnX2ZhdGFsKCJJdCBpcyBOT1QgYSBDT1BZIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50 bHkgcnVubmluZyIpOworCisJCVBRY2xlYXIocmVzKTsKIAkJYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCA9IDA7CiAJfQogfQpAQCAtNTQ2MCw2ICs1NDYyLDcgQEAgaW5pdFBvcHVsYXRlVGFibGVCaW5h cnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAogCiAJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09QWV9JTikKIAkJcGdfZmF0YWwoInVuZXhwZWN0ZWQg Y29weSBpbiByZXN1bHQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CisJUFFjbGVhcihyZXMp OwogCiAKIAlzZW5kQmluYXJ5Q29weUhlYWRlcihjb24pOwpAQCAtNTQ3NSw2ICs1NDc4LDcgQEAg aW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpj b2x1bW5zLAogCQlQUXB1dENvcHlEYXRhKGNvbiwgKGNoYXIgKikgYmluX2NvcHlfYnVmZmVyLCBi aW5fY29weV9idWZmZXJfbGVuZ3RoKTsKIAllbHNlCiAJCWZwcmludGYoc3RkZXJyLCAiVW5leHBl Y3RlZCBtb2RlICVkIGluc3RlYWQgb2YgJWRcbiIsIFBRcmVzdWx0U3RhdHVzKHJlcyksIFBHUkVT X0NPUFlfSU4pOworCVBRY2xlYXIocmVzKTsKIAogCiAJc2VuZEJpbmFyeUNvcHlUcmFpbGVyKGNv bik7CkBAIC01NDg1LDYgKzU0ODksNyBAQCBpbml0UG9wdWxhdGVUYWJsZUJpbmFyeShQR2Nvbm4g KmNvbiwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCiAJewogCQlpZiAoUFFwdXRDb3B5RW5k KGNvbiwgTlVMTCkgPT0gMSkgLyogc3VjY2VzcyAqLwogCQl7CisJCQlQUWNsZWFyKHJlcyk7CiAJ CQlyZXMgPSBQUWdldFJlc3VsdChjb24pOwogCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0g UEdSRVNfQ09NTUFORF9PSykKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAlc1xuIiwgUFFl cnJvck1lc3NhZ2UoY29uKSk7CkBAIC01NDkyLDcgKzU0OTcsNiBAQCBpbml0UG9wdWxhdGVUYWJs ZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCiAJCWVsc2UK IAkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6ICVzXG4iLCBQUWVycm9yTWVzc2FnZShjb24pKTsK IAl9Ci0KIAlQUWNsZWFyKHJlcyk7CiB9CiAKLS0gCjIuNDMuMAoKRnJvbSA2YTMwMzZmODk4YjA1 MGQ1ZTcxZTcwZWFjZWNjZDYzMDAzYWE2NDQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9t OiBCb3JpcyBNaXJvbm92IDxib3Jpcy5taXJvbm92QGdtYWlsLmNvbT4KRGF0ZTogRnJpLCA2IEZl YiAyMDI2IDEzOjUzOjA3ICswNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAxNy8yM10gQWRkaW5nIGFi aWxpdHkgdG8gc3dpdGNoIGRhdGEgaW5pdCBiZXR3ZWVuIHNpbmdsZQogYW5kIG11bHRpcGxlIHRy YW5zYWN0aW9ucwoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAg ICAgICB8IDE5MiArKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdi ZW5jaF93aXRoX3NlcnZlci5wbCB8ICA5MyArKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTcz IGluc2VydGlvbnMoKyksIDExMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn YmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCA0NjZkOTAy M2Q3Mi4uYWY3MWUzNThlNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMK KysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtMTU5LDkgKzE1OSw4IEBAIHR5cGVk ZWYgc3RydWN0IHNvY2tldF9zZXQKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzb21lIGNvbmZpZ3VyYWJs ZSBwYXJhbWV0ZXJzICovCi0KLSNkZWZpbmUgREVGQVVMVF9JTklUX1NURVBTICJkdGd2cCIJLyog ZGVmYXVsdCAtSSBzZXR0aW5nICovCi0jZGVmaW5lIEFMTF9JTklUX1NURVBTICJkdGdDR2lJdnBm IgkvKiBhbGwgcG9zc2libGUgc3RlcHMgKi8KKyNkZWZpbmUgREVGQVVMVF9JTklUX1NURVBTICJk dGd2cCIJCS8qIGRlZmF1bHQgLUkgc2V0dGluZyAqLworI2RlZmluZSBBTExfSU5JVF9TVEVQUyAi ZHRnTVNjR1V2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLwogCiAjZGVmaW5lIExPR19TVEVQ X1NFQ09ORFMJNQkvKiBzZWNvbmRzIGJldHdlZW4gbG9nIG1lc3NhZ2VzICovCiAjZGVmaW5lIERF RkFVTFRfTlhBQ1RTCQkxMAkvKiBkZWZhdWx0IG54YWN0cyAqLwpAQCAtMTcxLDE0ICsxNzAsMTcg QEAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogI2RlZmluZSBNSU5fWklQRklBTl9QQVJBTQkJ MS4wMDEJLyogbWluaW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KICNkZWZpbmUgTUFYX1pJ UEZJQU5fUEFSQU0JCTEwMDAuMAkvKiBtYXhpbXVtIHBhcmFtZXRlciBmb3IgemlwZmlhbiAqLwog Ci0vKiBvcmlnaW5hbCBzaW5nbGUgdHJhbnNhY3Rpb24gc2VydmVyLXNpZGUgbWV0aG9kICovCi0j ZGVmaW5lIEdFTl9UWVBFX0lOU0VSVF9PUklHSU5BTAknRycJLyogdXNlIElOU0VSVCAuLiBTRUxF Q1QgZ2VuZXJhdGVfc2VyaWVzIHRvIGdlbmVyYXRlIGRhdGEgKi8KLS8qICdvbmUgdHJhbnNhY3Rp b24gcGVyIHNjYWxlJyBzZXJ2ZXItc2lkZSBtZXRob2RzICovCi0jZGVmaW5lIEdFTl9UWVBFX0lO U0VSVF9TRVJJRVMJCSdpJwkvKiB1c2UgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMg dG8gZ2VuZXJhdGUgZGF0YSAqLwotI2RlZmluZSBHRU5fVFlQRV9JTlNFUlRfVU5ORVNUICAJJ0kn CS8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdCB0byBnZW5lcmF0ZSBkYXRhICovCi0jZGVm aW5lIEdFTl9UWVBFX0NPUFlfT1JJR0lOQUwJCSdnJyAvKiB1c2UgQ09QWSAuLiBGUk9NIFNURElO IC4uIFRFWFQgdG8gZ2VuZXJhdGUgZGF0YSAqLwotI2RlZmluZSBHRU5fVFlQRV9DT1BZX0JJTkFS WQkJJ0MnIC8qIHVzZSBDT1BZIC4uIEZST00gU1RESU4gLi4gQklOQVJZIHRvIGdlbmVyYXRlIGRh dGEgKi8KLQorLyogc2VydmVyLXNpZGUgbWV0aG9kcyB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVm aW5lIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTCSdHJwkvKiB1c2UgSU5TRVJUIC4u IFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMgdG8gZ2VuZXJhdGUgZGF0YSAqLworI2RlZmluZSBJTklU X1NURVBfR0VOX1RZUEVfSU5TRVJUX1VOTkVTVAknVScJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1Qg dW5uZXN0IHRvIGdlbmVyYXRlIGRhdGEgKi8KKy8qIGNsaWVudC1zaWRlIG1ldGhvZHMgdG8gZ2Vu ZXJhdGUgZGF0YSAqLworI2RlZmluZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9URVhUCQknZycg LyogdXNlIENPUFkgLi4gRlJPTSBTVERJTiAuLiBURVhUIHRvIGdlbmVyYXRlIGRhdGEgKi8KKyNk ZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZCQknYycgLyogdXNlIENPUFkgLi4g RlJPTSBTVERJTiAuLiBCSU5BUlkgdG8gZ2VuZXJhdGUgZGF0YSAqLworLyogZGF0YSBpbml0IHBz ZXVkbyBzdGVwcyAqLworI2RlZmluZSBJTklUX1NURVBfR0VOX1RZUEVfU0lOR0xFX1hBQ1QJCSdT JyAvKiBzd2l0Y2ggdG8gaW5pdCBkYXRhIGFzIHNpbmdsZSB0cmFuc2FjdGlvbiAqLworI2RlZmlu ZSBJTklUX1NURVBfR0VOX1RZUEVfTVVMVElfWEFDVAkJJ00nIC8qIHN3aXRjaCB0byBpbml0IGRh dGEgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zICovCisKK3N0YXRpYyBib29sIG11bHRpX3hhY3Qg PSBmYWxzZTsJLyogaW5pdCBkYXRhIHR5cGUgKGFzIHNpbmdsZSBvciBtdWx0aXBsZSB0cmFuc2Fj dGlvbnMpICovCiBzdGF0aWMgaW50CW54YWN0cyA9IDA7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyBwZXIgY2xpZW50ICovCiBzdGF0aWMgaW50CWR1cmF0aW9uID0gMDsJCS8qIGR1cmF0aW9u IGluIHNlY29uZHMgKi8KIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0 b3AgaW4gbWljcm8gc2Vjb25kcywgdW5kZXIgLVQgKi8KQEAgLTE5Miw3ICsxOTQsNyBAQCBzdGF0 aWMgaW50CXNjYWxlID0gMTsKIC8qCiAgKiBtb2RlIG9mIGRhdGEgZ2VuZXJhdGlvbiB0byB1c2UK ICAqLwotc3RhdGljIGNoYXIJZGF0YV9nZW5lcmF0aW9uX3R5cGUgPSBHRU5fVFlQRV9DT1BZX09S SUdJTkFMOworc3RhdGljIGNoYXIJZGF0YV9nZW5lcmF0aW9uX3R5cGUgPSBJTklUX1NURVBfR0VO X1RZUEVfQ09QWV9URVhUOwogCiAvKgogICogQ09QWSBGUk9NIEJJTkFSWSBleGVjdXRpb24gYnVm ZmVyCkBAIC05MzQsMTEgKzkzNiwxMyBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgcnVuIHNlbGVjdGVkIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBpbiB0aGUg c3BlY2lmaWVkIG9yZGVyXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBk cm9wIGFueSBleGlzdGluZyBwZ2JlbmNoIHRhYmxlc1xuIgogCQkgICAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgdDogY3JlYXRlIHRoZSB0YWJsZXMgdXNlZCBieSB0aGUgc3RhbmRhcmQgcGdi ZW5jaCBzY2VuYXJpb1xuIgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZ2Vu ZXJhdGUgZGF0YSwgY2xpZW50LXNpZGVcbiIKLQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIEM6ICAgY2xpZW50LXNpZGUgKHNpbmdsZSBUTlgpIENPUFkgLi4gRlJPTSBTVERJTiAuLiBC SU5BUllcbiIKLQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6IGdlbmVyYXRlIGRh dGEsIHNlcnZlci1zaWRlIGluIHNpbmdsZSB0cmFuc2FjdGlvblxuIgotCQkgICAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgaTogICBzZXJ2ZXItc2lkZSAobXVsdGlwbGUgVFhOcykgSU5TRVJU IC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXNcbiIKLQkJICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEk6ICAgc2VydmVyLXNpZGUgKG11bHRpcGxlIFRYTnMpIElOU0VSVCAuLiBTRUxFQ1Qg dW5uZXN0XG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZW5lcmF0ZSBk YXRhLCBjbGllbnQtc2lkZTpcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZzogICBDT1BZIC4uIEZST00gU1RESU4gLi4gVEVYVFxuIgorCQkgICAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjOiAgIENPUFkgLi4gRlJPTSBTVERJTiAuLiBCSU5BUllcbiIKKwkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGRhdGEsIHNlcnZlci1zaWRl OlxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHOiAgIElOU0VSVCAuLiBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzXG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFU6ICAgSU5TRVJUIC4uIFNFTEVDVCB1bm5lc3RcbiIKKwkJICAgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgIE06IHVzZSBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgdG8gaW5pdGlhbGl6ZSBk YXRhXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiBpbnZva2UgVkFDVVVN IG9uIHRoZSBzdGFuZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHA6IGNyZWF0ZSBwcmltYXJ5IGtleSBpbmRleGVzIG9uIHRoZSBzdGFuZGFyZCB0YWJsZXNc biIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IGNyZWF0ZSBmb3JlaWduIGtl eXMgYmV0d2VlbiB0aGUgc3RhbmRhcmQgdGFibGVzXG4iCkBAIC01MDQ5LDggKzUwNTMsOCBAQCBp bml0QWNjb3VudChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3VycikKIH0KIAogc3RhdGlj IHZvaWQKLWluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJsZSwg aW50NjQgYmFzZSwKLQkJCQkgIGluaXRSb3dNZXRob2QgaW5pdF9yb3cpCitpbml0UG9wdWxhdGVU YWJsZVRleHQoUEdjb25uICpjb24sIGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCBiYXNlLAorCQkJ CQkgIGluaXRSb3dNZXRob2QgaW5pdF9yb3cpCiB7CiAJaW50CQkJbjsKIAlpbnQ2NAkJazsKQEAg LTUxNzgsNiArNTE4Miw5IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dChQR2Nvbm4g KmNvbikKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlRFWFQgbW9kZS4uLlxuIik7CiAKKwlpZiAobXVs dGlfeGFjdCkKKwkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HISBNdWx0aXBsZSB0cmFuc2FjdGlv bnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBtb2RlXG4iKTsKKwogCS8qCiAJICogd2UgZG8g YWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJsZSB0aGUgYmFja2VuZCdzCiAJ ICogZGF0YS1sb2FkaW5nIG9wdGltaXphdGlvbnMKQEAgLTUxOTEsOSArNTE5OCw5IEBAIGluaXRH ZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dChQR2Nvbm4gKmNvbikKIAkgKiBmaWxsIGJyYW5jaGVz LCB0ZWxsZXJzLCBhY2NvdW50cyBpbiB0aGF0IG9yZGVyIGluIGNhc2UgZm9yZWlnbiBrZXlzCiAJ ICogYWxyZWFkeSBleGlzdAogCSAqLwotCWluaXRQb3B1bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hf YnJhbmNoZXMiLCBuYnJhbmNoZXMsIGluaXRCcmFuY2gpOwotCWluaXRQb3B1bGF0ZVRhYmxlKGNv biwgInBnYmVuY2hfdGVsbGVycyIsICBudGVsbGVycywgIGluaXRUZWxsZXIpOwotCWluaXRQb3B1 bGF0ZVRhYmxlKGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCBuYWNjb3VudHMsIGluaXRBY2NvdW50 KTsKKwlpbml0UG9wdWxhdGVUYWJsZVRleHQoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsIG5icmFu Y2hlcywgaW5pdEJyYW5jaCk7CisJaW5pdFBvcHVsYXRlVGFibGVUZXh0KGNvbiwgInBnYmVuY2hf dGVsbGVycyIsICBudGVsbGVycywgIGluaXRUZWxsZXIpOworCWluaXRQb3B1bGF0ZVRhYmxlVGV4 dChjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgbmFjY291bnRzLCBpbml0QWNjb3VudCk7CiAKIAll eGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwogfQpAQCAtNTQ1MCw3ICs1NDU3LDggQEAg aW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpj b2x1bW5zLAogCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpFIG9uIHYxNCBhbmQgbGF0ZXIgZm9yIGFs bCBvcmRpbmFyeSB0YWJsZXMgKi8KIAlpZiAoKFBRc2VydmVyVmVyc2lvbihjb24pID49IDE0MDAw MCkgJiYKIAkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJsZSkgPT0gUkVMS0lORF9SRUxBVElP TikKLQkJY29weV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgKCVzKSBmcm9tIHN0ZGluIHdpdGgg KGZvcm1hdCBiaW5hcnkpIjsKKwkJaWYgKCFtdWx0aV94YWN0KQorCQkJY29weV9zdGF0ZW1lbnRf Zm10ID0gImNvcHkgJXMgKCVzKSBmcm9tIHN0ZGluIHdpdGggKGZvcm1hdCBiaW5hcnksIGZyZWV6 ZSBvbikiOwogCiAJbiA9IHBnX3NucHJpbnRmKGNvcHlfc3RhdGVtZW50LCBzaXplb2YoY29weV9z dGF0ZW1lbnQpLCBjb3B5X3N0YXRlbWVudF9mbXQsIHRhYmxlLCBjb2x1bW5zKTsKIAlpZiAobiA+ PSBzaXplb2YoY29weV9zdGF0ZW1lbnQpKQpAQCAtNTUyMiwxMSArNTUzMCwxMyBAQCBpbml0R2Vu ZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeShQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5 IGFueSBvbGQgZGF0YSAqLwogCWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCi0JZXhlY3V0ZVN0 YXRlbWVudChjb24sICJjb21taXQiKTsKKwlpZiAobXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRl bWVudChjb24sICJjb21taXQiKTsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgc2NhbGU7IGkrKykK IAl7Ci0JCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKwkJaWYgKG11bHRpX3hhY3Qp CisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CiAKIAkJaW5pdFBvcHVsYXRlVGFi bGVCaW5hcnkoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsICJiaWQsIGJiYWxhbmNlIiwKIAkJCQkJ CQkJaSwgbmJyYW5jaGVzLCBpbml0QnJhbmNoQmluYXJ5KTsKQEAgLTU1MzUsOSArNTU0NSwxMyBA QCBpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeShQR2Nvbm4gKmNvbikKIAkJaW5pdFBv cHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5jaF9hY2NvdW50cyIsICJhaWQsIGJpZCwgYWJh bGFuY2UiLAogCQkJCQkJCQlpLCBuYWNjb3VudHMsIGluaXRBY2NvdW50QmluYXJ5KTsKIAotCQll eGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCQlpZiAobXVsdGlfeGFjdCkKKwkJCWV4 ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CiAJfQogCisJaWYgKCFtdWx0aV94YWN0KQor CQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCiAJcGdfZnJlZShiaW5fY29weV9i dWZmZXIpOwogfQogCkBAIC01NTQ3LDE0ICs1NTYxLDE1IEBAIGluaXRHZW5lcmF0ZURhdGFDbGll bnRTaWRlQmluYXJ5KFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGluaXRHZW5lcmF0ZURhdGFD bGllbnRTaWRlKFBHY29ubiAqY29uKQogewotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBk YXRhIChjbGllbnQtc2lkZSkgaW4gIik7CisJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRh dGEgKGNsaWVudC1zaWRlIGFzICVzIHRyYW5zYWN0aW9uJXMpIGluICIsCisJCQltdWx0aV94YWN0 ID8gIm11bHRpcGxlIiA6ICJzaW5nbGUiLCBtdWx0aV94YWN0ID8gInMiIDogIiIpOwogCiAJc3dp dGNoIChkYXRhX2dlbmVyYXRpb25fdHlwZSkKIAl7Ci0JCWNhc2UgR0VOX1RZUEVfQ09QWV9PUklH SU5BTDoKKwkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9URVhUOgogCQkJaW5pdEdlbmVy YXRlRGF0YUNsaWVudFNpZGVUZXh0KGNvbik7CiAJCQlicmVhazsKLQkJY2FzZSBHRU5fVFlQRV9D T1BZX0JJTkFSWToKKwkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9CSU5BUlk6CiAJCQlp bml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeShjb24pOwogCQkJYnJlYWs7CiAJfQpAQCAt NTU2Miw1OCArNTU3Nyw3IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29u KQogCiAvKgogICogR2VuZXJhdGluZyBkYXRhIHZpYSBJTlNFUlQgLi4gU0VMRUNUIC4uIEZST00g Z2VuZXJhdGVfc2VyaWVzCi0gKiB3aG9sZSBkYXRhc2V0IGluIHNpbmdsZSB0cmFuc2FjdGlvbgot ICovCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVEYXRhSW5zZXJ0U2luZ2xlVFhOKFBHY29ubiAqY29u KQotewotCVBRRXhwQnVmZmVyRGF0YSBzcWw7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgInZpYSBJTlNF UlQgLi4gU0VMRUNUIGdlbmVyYXRlX3Nlcmllcy4uLiBpbiBzaW5nbGUgVFhOXG4iKTsKLQotCi0J LyoKLQkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRo ZSBiYWNrZW5kJ3MKLQkgKiBkYXRhLWxvYWRpbmcgb3B0aW1pemF0aW9ucwotCSAqLwotCWV4ZWN1 dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKLQotCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBk YXRhICovCi0JaW5pdFRydW5jYXRlVGFibGVzKGNvbik7Ci0KLQlpbml0UFFFeHBCdWZmZXIoJnNx bCk7Ci0KLQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJpbnNlcnQgaW50byBwZ2Jl bmNoX2JyYW5jaGVzKGJpZCwgYmJhbGFuY2UpICIKLQkJCQkJICAic2VsZWN0IGJpZCwgMCAiCi0J CQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICVkKSBhcyBiaWQiLAotCQkJCQkgIHNjYWxl ICogbmJyYW5jaGVzKTsKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwotCi0JcHJp bnRmUFFFeHBCdWZmZXIoJnNxbCwKLQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJz KHRpZCwgYmlkLCB0YmFsYW5jZSkgIgotCQkJCQkgICJzZWxlY3QgdGlkICsgMSwgdGlkIC8gJWQg KyAxLCAwICIKLQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgJWQpIGFzIHRpZCIsCi0J CQkJCSAgbnRlbGxlcnMsIChzY2FsZSAqIG50ZWxsZXJzKSAtIDEpOwotCWV4ZWN1dGVTdGF0ZW1l bnQoY29uLCBzcWwuZGF0YSk7Ci0KLQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJp bnNlcnQgaW50byBwZ2JlbmNoX2FjY291bnRzKGFpZCwgYmlkLCBhYmFsYW5jZSwgIgotCQkJCQkJ CQkgICAiZmlsbGVyKSAiCi0JCQkJCSAgInNlbGVjdCBhaWQgKyAxLCBhaWQgLyAlZCArIDEsIDAs ICcnICIKLQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgIiBJTlQ2NF9GT1JNQVQgIikg YXMgYWlkIiwKLQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgKHNjYWxlICogbmFjY291bnRzKSAt IDEpOwotCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7Ci0KLQlleGVjdXRlU3RhdGVt ZW50KGNvbiwgImNvbW1pdCIpOwotCi0JdGVybVBRRXhwQnVmZmVyKCZzcWwpOwotfQotCi0KLS8q Ci0gKiBHZW5lcmF0aW5nIGRhdGEgdmlhIElOU0VSVCAuLiBTRUxFQ1QgLi4gRlJPTSBnZW5lcmF0 ZV9zZXJpZXMKLSAqIE9uZSB0cmFuc2FjdGlvbiBwZXIgJ3NjYWxlJworICogUG9zc2libHkgYXMg Ik9uZSB0cmFuc2FjdGlvbiBwZXIgc2NhbGUiIGluIG11bHRpLXRyYW5zYWN0aW9uIG1vZGUKICAq Lwogc3RhdGljIHZvaWQKIGdlbmVyYXRlRGF0YUluc2VydFNlcmllcyhQR2Nvbm4gKmNvbikKQEAg LTU2MjksMTEgKzU1OTMsMTMgQEAgZ2VuZXJhdGVEYXRhSW5zZXJ0U2VyaWVzKFBHY29ubiAqY29u KQogCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCiAJaW5pdFRydW5jYXRlVGFibGVz KGNvbik7CiAKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCWlmIChtdWx0aV94 YWN0KQorCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwogCiAJZm9yIChpbnQgaSA9 IDA7IGkgPCBzY2FsZTsgaSsrKQogCXsKLQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIp OworCQlpZiAobXVsdGlfeGFjdCkKKwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsK IAogCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAogCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5j aF9icmFuY2hlcyhiaWQsIGJiYWxhbmNlKSAiCkBAIC01NjU3LDE1ICs1NjIzLDE5IEBAIGdlbmVy YXRlRGF0YUluc2VydFNlcmllcyhQR2Nvbm4gKmNvbikKIAkJCQkJCSAgKGludDY0KSAoaSArIDEp ICogbmFjY291bnRzIC0gMSk7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CiAK LQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwkJaWYgKG11bHRpX3hhY3QpCisJ CQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwogCX0KIAorCWlmICghbXVsdGlfeGFj dCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwogCXRlcm1QUUV4cEJ1ZmZl cigmc3FsKTsKIH0KIAogLyoKICAqIEdlbmVyYXRpbmcgZGF0YSB2aWEgSU5TRVJUIC4uIFNFTEVD VCAuLiBGUk9NIHVubmVzdAotICogT25lIHRyYW5zYWN0aW9uIHBlciAnc2NhbGUnCisgKiBQb3Nz aWJseSBhcyAiT25lIHRyYW5zYWN0aW9uIHBlciBzY2FsZSIgaW4gbXVsdGktdGFuc2FjdGlvbiBt b2RlCiAgKi8KIHN0YXRpYyB2b2lkCiBnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3QoUEdjb25uICpj b24pCkBAIC01NjgxLDExICs1NjUxLDEzIEBAIGdlbmVyYXRlRGF0YUluc2VydFVubmVzdChQR2Nv bm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwogCWluaXRUcnVuY2F0 ZVRhYmxlcyhjb24pOwogCi0JZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwlpZiAo bXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKIAogCWZvciAo aW50IHMgPSAwOyBzIDwgc2NhbGU7IHMrKykKIAl7Ci0JCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAi YmVnaW4iKTsKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJl Z2luIik7CiAKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKIAkJCQkJCSAgImluc2VydCBpbnRv IHBnYmVuY2hfYnJhbmNoZXMoYmlkLGJiYWxhbmNlKSAiCkBAIC01NzE0LDE0ICs1Njg2LDE4IEBA IGdlbmVyYXRlRGF0YUluc2VydFVubmVzdChQR2Nvbm4gKmNvbikKIAkJCQkJCSAgKGludDY0KSAo cyArIDEpICogbmFjY291bnRzLCBuYWNjb3VudHMpOwogCQlleGVjdXRlU3RhdGVtZW50KGNvbiwg c3FsLmRhdGEpOwogCi0JCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisJCWlmICht dWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKIAl9CiAKKwlp ZiAoIW11bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKIAl0 ZXJtUFFFeHBCdWZmZXIoJnNxbCk7CiB9CiAKIC8qCi0gKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJs ZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIKKyAqIEZpbGwgdGhlIHN0 YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUgZGF0YSBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciBzaWRl CiAgKgogICogQXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIHRoZSBjbGllbnQtc2lkZSBkYXRhIGdl bmVyYXRpb24sIHRoZSBmaWxsZXIKICAqIGNvbHVtbiBkZWZhdWx0cyB0byBOVUxMIGluIHBnYmVu Y2hfYnJhbmNoZXMgYW5kIHBnYmVuY2hfdGVsbGVycywKQEAgLTU3MzAsMTcgKzU3MDYsMTUgQEAg Z2VuZXJhdGVEYXRhSW5zZXJ0VW5uZXN0KFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGluaXRH ZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQogewotCWZwcmludGYoc3RkZXJyLCAi Z2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSkgIik7CisJZnByaW50ZihzdGRlcnIsICJnZW5l cmF0aW5nIGRhdGEgKHNlcnZlci1zaWRlIGFzICVzIHRyYW5zYWN0aW9uJXMpICIsCisJCQltdWx0 aV94YWN0ID8gIm11bHRpcGxlIiA6ICJzaW5nbGUiLCBtdWx0aV94YWN0ID8gInMiIDogIiIpOwog CiAJc3dpdGNoIChkYXRhX2dlbmVyYXRpb25fdHlwZSkKIAl7Ci0JCWNhc2UgR0VOX1RZUEVfSU5T RVJUX09SSUdJTkFMOgotCQkJZ2VuZXJhdGVEYXRhSW5zZXJ0U2luZ2xlVFhOKGNvbik7Ci0JCQli cmVhazsKLQkJY2FzZSBHRU5fVFlQRV9JTlNFUlRfU0VSSUVTOgorCQljYXNlIElOSVRfU1RFUF9H RU5fVFlQRV9JTlNFUlRfU0VSSUVTOgogCQkJZ2VuZXJhdGVEYXRhSW5zZXJ0U2VyaWVzKGNvbik7 CiAJCQlicmVhazsKLQkJY2FzZSBHRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgorCQljYXNlIElOSVRf U1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgogCQkJZ2VuZXJhdGVEYXRhSW5zZXJ0VW5uZXN0 KGNvbik7CiAJCQlicmVhazsKIAl9CkBAIC01ODQ1LDE5ICs1ODE5LDIwIEBAIGNoZWNrSW5pdFN0 ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiAKIAkJc3dpdGNoICgqc3RlcCkKIAkJ ewotCQkJY2FzZSAnZyc6Ci0JCQljYXNlICdDJzoKLQkJCWNhc2UgJ0cnOgotCQkJY2FzZSAnaSc6 Ci0JCQljYXNlICdJJzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfVEVYVDoKKwkJ CWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZOgorCQkJY2FzZSBJTklUX1NURVBf R0VOX1RZUEVfSU5TRVJUX1NFUklFUzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VS VF9VTk5FU1Q6CiAJCQkJZGF0YV9pbml0X3R5cGUrKzsKIAkJCQlkYXRhX2dlbmVyYXRpb25fdHlw ZSA9ICpzdGVwOwogCQkJCWJyZWFrOwogCQl9CiAJfQogCisJaWYgKGRhdGFfaW5pdF90eXBlID09 IDApCisJCXBnX2xvZ19lcnJvcigiV0FSTklORyEgTm8gZGF0YSBnZW5lcmF0aW9uIHR5cGUgaXMg cHJvdmlkZWQiKTsKIAlpZiAoZGF0YV9pbml0X3R5cGUgPiAxKQotCQlwZ19sb2dfZXJyb3IoIldB Uk5JTkchIE1vcmUgdGhhbiBvbmUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24g aXMgcmVxdWVzdGVkIik7CisJCXBnX2xvZ19lcnJvcigiV0FSTklORyEgTW9yZSB0aGFuIG9uZSB0 eXBlIG9mIGRhdGEgaW5pdGlhbGl6YXRpb24gaXMgcmVxdWVzdGVkIik7CiB9CiAKIC8qCkBAIC01 ODk1LDE3ICs1ODcwLDIyIEBAIHJ1bkluaXRTdGVwcyhjb25zdCBjaGFyICppbml0aWFsaXplX3N0 ZXBzKQogCQkJCW9wID0gImNyZWF0ZSB0YWJsZXMiOwogCQkJCWluaXRDcmVhdGVUYWJsZXMoY29u KTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ2cnOgotCQkJY2FzZSAnQyc6CisJCQljYXNlIElOSVRf U1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQ6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZ X0JJTkFSWToKIAkJCQlvcCA9ICJjbGllbnQtc2lkZSBnZW5lcmF0ZSI7CiAJCQkJaW5pdEdlbmVy YXRlRGF0YUNsaWVudFNpZGUoY29uKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ0cnOgotCQkJY2Fz ZSAnaSc6Ci0JCQljYXNlICdJJzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9T RVJJRVM6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgogCQkJCW9w ID0gInNlcnZlci1zaWRlIGdlbmVyYXRlIjsKIAkJCQlpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lk ZShjb24pOwogCQkJCWJyZWFrOworCQkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfU0lOR0xFX1hB Q1Q6CisJCQkJbXVsdGlfeGFjdCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJY2FzZSBJTklUX1NU RVBfR0VOX1RZUEVfTVVMVElfWEFDVDoKKwkJCQltdWx0aV94YWN0ID0gdHJ1ZTsKKwkJCQlicmVh azsKIAkJCWNhc2UgJ3YnOgogCQkJCW9wID0gInZhY3V1bSI7CiAJCQkJaW5pdFZhY3V1bShjb24p OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIu cGwgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbAppbmRleCBh Mzc3MDQ4ZWFkMS4uYWNiMWUzMWQzZTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAw MV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2Jl bmNoX3dpdGhfc2VydmVyLnBsCkBAIC0xMTcsNiArMTE3LDcgQEAgJG5vZGUtPnBnYmVuY2goCiAJ W3Fye1BlcmhhcHMgeW91IG5lZWQgdG8gZG8gaW5pdGlhbGl6YXRpb259XSwKIAkncnVuIHdpdGhv dXQgaW5pdCcpOwogCisKICMgSW5pdGlhbGl6ZSBwZ2JlbmNoIHRhYmxlcyBzY2FsZSAxCiAkbm9k ZS0+cGdiZW5jaCgKIAknLWknLCAwLApAQCAtMTYwLDcgKzE2MSw3IEBAICRub2RlLT5wZ2JlbmNo KAogCQlxcntjcmVhdGluZyB0YWJsZXN9LAogCQlxcntjcmVhdGluZyAzIHBhcnRpdGlvbnN9LAog CQlxcntjcmVhdGluZyBwcmltYXJ5IGtleXN9LAotCQlxcntnZW5lcmF0aW5nIGRhdGEgXChzZXJ2 ZXItc2lkZVwpfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgc2luZ2xl IHRyYW5zYWN0aW9uXCl9LAogCQlxcntjcmVhdGluZyBmb3JlaWduIGtleXN9LAogCQlxcnsoPyF2 YWN1dW1pbmcpfSwgICAgIyBubyB2YWN1dW0KIAkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CkBA IC0xNzAsMTUgKzE3MSwxNiBAQCAkbm9kZS0+cGdiZW5jaCgKICMgQ2hlY2sgZGF0YSBzdGF0ZSwg YWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgogY2hlY2tfZGF0YV9zdGF0ZSgkbm9k ZSwgJ3NlcnZlci1zaWRlJyk7CiAKKwogIyBUZXN0IHNlcnZlci1zaWRlIGdlbmVyYXRpb24gd2l0 aCBVTk5FU1QKICRub2RlLT5wZ2JlbmNoKAotCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0 SScsCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRVJywKIAkwLAogCVtxcnteJH1dLAog CVsKIAkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCiAJCXFye2NyZWF0aW5nIHRhYmxlc30sCi0J CXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlXCl9LAorCQlxcntnZW5lcmF0aW5nIGRh dGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCiAJCXFye2RvbmUgaW4g XGQrXC5cZFxkIHMgfQogCV0sCiAJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIHNlcnZlci1zaWRlIFVO TkVTVCcpOwpAQCAtMTg2LDE1ICsxODgsNDggQEAgJG5vZGUtPnBnYmVuY2goCiAjIENoZWNrIGRh dGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KIGNoZWNrX2RhdGFf c3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAodW5uZXN0KScpOwogCi0jIFRlc3Qgc2VydmVyLXNp ZGUgZ2VuZXJhdGlvbiB3aXRoIFVOTkVTVAorCisjIFRlc3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlv biB3aXRoIENPUFkgVEVYVAorJG5vZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQt c3RlcHM9ZHRnJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxl c30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVu dC1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvbn0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMg fQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIFRFWFQnKTsKKworIyBD aGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVj a19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKHRleHQpJyk7CisKKyRub2RlLT5wZ2Jl bmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWcnLAorCTAsCisJW3Fye14kfV0s CisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwK KwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rp b25zfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQt c3RlcHMgY2xpZW50LXNpZGUgVEVYVCcpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNl cnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGll bnQtc2lkZSAodGV4dCknKTsKKworCisjIFRlc3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlvbiB3aXRo IENPUFkgQklOQVJZCiAkbm9kZS0+cGdiZW5jaCgKLQknLS1pbml0aWFsaXplIC0taW5pdC1zdGVw cz1kdEMnLAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0YycsCiAJMCwKIAlbcXJ7XiR9 XSwKIAlbCiAJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAogCQlxcntjcmVhdGluZyB0YWJsZXN9 LAotCQlxcntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZVwpfSwKKwkJcXJ7Z2VuZXJhdGlu ZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9ufSwKIAkJcXJ7ZG9uZSBp biBcZCtcLlxkXGQgcyB9CiAJXSwKIAkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUg QklOQVJZJyk7CkBAIC0yMDIsNiArMjM3LDUyIEBAICRub2RlLT5wZ2JlbmNoKAogIyBDaGVjayBk YXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCiBjaGVja19kYXRh X3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGJpbmFyeSknKTsKIAorJG5vZGUtPnBnYmVuY2go CisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRTYycsCisJMCwKKwlbcXJ7XiR9XSwKKwlb CisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlx cntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb259LAor CQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBj bGllbnQtc2lkZSBCSU5BUlknKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXIt c2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNp ZGUgKGJpbmFyeSknKTsKKworJG5vZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQt c3RlcHM9ZHRNYycsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJs ZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChjbGll bnQtc2lkZSBhcyBtdWx0aXBsZSB0cmFuc2FjdGlvbnN9LAorCQlxcntkb25lIGluIFxkK1wuXGRc ZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBCSU5BUlknKTsK KworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24u CitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGJpbmFyeSknKTsKKworJG5v ZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRNYycsCisJMCwKKwlb cXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0 YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBtdWx0aXBsZSB0 cmFuc2FjdGlvbnN9LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNo IC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBCSU5BUlknKTsKKworIyBDaGVjayBkYXRhIHN0YXRl LCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRu b2RlLCAnY2xpZW50LXNpZGUgKGJpbmFyeSknKTsKKworCiAjIFJ1biBhbGwgYnVpbHRpbiBzY3Jp cHRzLCBmb3IgYSBmZXcgdHJhbnNhY3Rpb25zIGVhY2gKICRub2RlLT5wZ2JlbmNoKAogCSctLXRy YW5zYWN0aW9ucz01IC1EZm9vPWJsYSAtLWNsaWVudD0yIC0tcHJvdG9jb2w9c2ltcGxlIC0tYnVp bHRpbj10JwotLSAKMi40My4wCgpGcm9tIDI0NzFiYjQ3YmY3MTU0MDJlY2U2MWIwODRiNjlhZmUz YmI1Mzc0MmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlzIE1pcm9ub3YgPGJv cmlzLm1pcm9ub3ZAZ21haWwuY29tPgpEYXRlOiBGcmksIDYgRmViIDIwMjYgMTM6NTU6NDcgKzA3 MDAKU3ViamVjdDogW1BBVENIIHY4IDE4LzIzXSBSZW1vdmluZyBjb21tZW50ZWQgb3V0IHByb2Nl ZHVyZXMKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDUyIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUyIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jCmluZGV4IGFmNzFlMzU4ZTcxLi4zNDQ2NGI3MDM3YyAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j CkBAIC01MjA2LDM1ICs1MjA2LDYgQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVUZXh0KFBH Y29ubiAqY29uKQogfQogCiAKLS8qCi0gKiBEdW1wcyBiaW5hcnkgYnVmZmVyIHRvIGZpbGUgKHB1 cmVseSBmb3IgZGVidWdnaW5nKQotICoKLXN0YXRpYyB2b2lkCi1kdW1wQnVmZmVyVG9GaWxlKGNo YXIgKmZpbGVuYW1lKQotewotCUZJTEUgKmZpbGVfcHRyOwotCXNpemVfdCBieXRlc193cml0dGVu OwotCi0JZmlsZV9wdHIgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7Ci0JaWYgKGZpbGVfcHRyID09 IE5VTEwpCi0JewotCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgZmlsZSAlc1xuIiwg ZmlsZW5hbWUpOwotCQlyZXR1cm47IC8vIEVYSVRfRkFJTFVSRTsKLQl9Ci0KLQlieXRlc193cml0 dGVuID0gZndyaXRlKGJpbl9jb3B5X2J1ZmZlciwgMSwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCwg ZmlsZV9wdHIpOwotCi0JaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCkKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igd3JpdGluZyB0byBmaWxlIG9yIGluY29t cGxldGUgd3JpdGVcbiIpOwotCQlmY2xvc2UoZmlsZV9wdHIpOwotCQlyZXR1cm47IC8vIEVYSVRf RkFJTFVSRTsKLQl9Ci0KLQlmY2xvc2UoZmlsZV9wdHIpOwotfQotICovCi0KIC8qCiAgKiBTYXZl IGNoYXIgZGF0YSB0byBidWZmZXIKICAqLwpAQCAtNTI3NywxNyArNTI0OCw2IEBAIGFkZENvbHVt bkNvdW50ZXIoaW50MTZfdCBuKQogCWJ1ZmZlckRhdGEoKHZvaWQgKikgJm4sIHNpemVvZihuKSk7 CiB9CiAKLS8qCi0gKiBhZGRzIGNvbHVtbiB3aXRoIE5VTEwgdmFsdWUKLSAqCi1zdGF0aWMgdm9p ZAotYWRkTnVsbENvbHVtbigpCi17Ci0JaW50MzJfdCBudWxsID0gLTE7Ci0JYnVmZmVyRGF0YSgo dm9pZCAqKSAmbnVsbCwgc2l6ZW9mKG51bGwpKTsKLX0KLSAqLwotCiAvKgogICogYWRkcyBjb2x1 bW4gd2l0aCBpbnRpMzIgdmFsdWUKICAqLwpAQCAtNTMxMiwxOCArNTI3Miw2IEBAIGFkZEludDY0 Q29sdW1uKGludDY0X3QgdmFsdWUpCiAJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9m KGRhdGEpKTsKIH0KIAotLyoKLSAqIGFkZHMgY29sdW1uIHdpdGggY2hhciB2YWx1ZQotICoKLXN0 YXRpYyB2b2lkCi1hZGRDaGFyQ29sdW1uKGNoYXIgKnZhbHVlKQotewotCWludDMyX3QJc2l6ZSA9 IHN0cmxlbih2YWx1ZSk7Ci0JYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKHNpemUp KTsKLQlidWZmZXJDaGFyRGF0YSh2YWx1ZSwgc2l6ZSk7Ci19Ci0gKi8KLQogLyoKICAqIFN0YXJ0 cyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZST00gQklOQVJZIHN0YXRlbWVu dAogICovCi0tIAoyLjQzLjAKCkZyb20gMTBkZmE2MjJiMDljNDIwZDc5ZGE4Nzc0YzkzMjFmOTE1 NDBjODYwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQm9yaXMgTWlyb25vdiA8Ym9y aXMubWlyb25vdkBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTYgRmViIDIwMjYgMDk6MDg6MTcgKzA3 MDAKU3ViamVjdDogW1BBVENIIHY4IDE5LzIzXSBTbWFsbCBjaGFuZ2VzIGR1ZSB0byBiaWcgY29k ZSByZXZpZXcKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDcxICsrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM5IGluc2VydGlv bnMoKyksIDMyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2Jl bmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDM0NDY0YjcwMzdjLi45ZjNk N2Y5OWEyNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC04NzMsNyArODczLDcgQEAgc3RhdGljIGJvb2wgc29j a2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQgaWR4KTsKIAogLyogY2Fs bGJhY2sgdXNlZCB0byBidWlsZCByb3dzIGZvciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8K IHR5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRob2QpCQkoUFFFeHBCdWZmZXJEYXRhICpzcWwsIGlu dDY0IGN1cnIpOwotdHlwZWRlZiB2b2lkICgqaW5pdFJvd01ldGhvZEJpbikJKFBHY29ubiAqY29u LCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KTsKK3R5cGVkZWYgdm9pZCAoKmluaXRSb3dN ZXRob2RCaW5hcnkpCShQR2Nvbm4gKmNvbiwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCwg aW50OF90IGNvbHVtbkNvdW50ZXIpOwogCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBm bGV4IGxleGVyICovCiBzdGF0aWMgY29uc3QgUHNxbFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxs YmFja3MgPSB7CkBAIC05NDIsNyArOTQyLDggQEAgdXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGRhdGEsIHNlcnZlci1zaWRlOlxuIgogCQkg ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHOiAgIElOU0VSVCAuLiBTRUxFQ1QgZ2Vu ZXJhdGVfc2VyaWVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU6ICAg SU5TRVJUIC4uIFNFTEVDVCB1bm5lc3RcbiIKLQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIE06IHVzZSBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgdG8gaW5pdGlhbGl6ZSBkYXRhXG4iCisJ CSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBTOiBmbGFnIHRvIHVzZSBzaW5nbGUgdHJh bnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBkYXRhXG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICBNOiBmbGFnIHRvIHVzZSBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgdG8gaW5pdGlhbGl6 ZSBkYXRhXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiBpbnZva2UgVkFD VVVNIG9uIHRoZSBzdGFuZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHA6IGNyZWF0ZSBwcmltYXJ5IGtleSBpbmRleGVzIG9uIHRoZSBzdGFuZGFyZCB0YWJs ZXNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IGNyZWF0ZSBmb3JlaWdu IGtleXMgYmV0d2VlbiB0aGUgc3RhbmRhcmQgdGFibGVzXG4iCkBAIC01MDUzLDggKzUwNTQsOCBA QCBpbml0QWNjb3VudChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3VycikKIH0KIAogc3Rh dGljIHZvaWQKLWluaXRQb3B1bGF0ZVRhYmxlVGV4dChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAq dGFibGUsIGludDY0IGJhc2UsCi0JCQkJCSAgaW5pdFJvd01ldGhvZCBpbml0X3JvdykKK2luaXRQ b3B1bGF0ZVRhYmxlQ29weVRleHQoUEdjb25uICpjb24sIGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2 NCBiYXNlLAorCQkJCQkJICBpbml0Um93TWV0aG9kIGluaXRfcm93KQogewogCWludAkJCW47CiAJ aW50NjQJCWs7CkBAIC01MTc4LDcgKzUxNzksNyBAQCBpbml0UG9wdWxhdGVUYWJsZVRleHQoUEdj b25uICpjb24sIGNvbnN0IGNoYXIgKnRhYmxlLCBpbnQ2NCBiYXNlLAogICogYSBibGFuay1wYWRk ZWQgc3RyaW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0R2Vu ZXJhdGVEYXRhQ2xpZW50U2lkZVRleHQoUEdjb25uICpjb24pCitpbml0R2VuZXJhdGVEYXRhQ2xp ZW50U2lkZVRleHRGcm10KFBHY29ubiAqY29uKQogewogCWZwcmludGYoc3RkZXJyLCAiVEVYVCBt b2RlLi4uXG4iKTsKIApAQCAtNTE5OCw5ICs1MTk5LDkgQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVu dFNpZGVUZXh0KFBHY29ubiAqY29uKQogCSAqIGZpbGwgYnJhbmNoZXMsIHRlbGxlcnMsIGFjY291 bnRzIGluIHRoYXQgb3JkZXIgaW4gY2FzZSBmb3JlaWduIGtleXMKIAkgKiBhbHJlYWR5IGV4aXN0 CiAJICovCi0JaW5pdFBvcHVsYXRlVGFibGVUZXh0KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCBu YnJhbmNoZXMsIGluaXRCcmFuY2gpOwotCWluaXRQb3B1bGF0ZVRhYmxlVGV4dChjb24sICJwZ2Jl bmNoX3RlbGxlcnMiLCAgbnRlbGxlcnMsICBpbml0VGVsbGVyKTsKLQlpbml0UG9wdWxhdGVUYWJs ZVRleHQoY29uLCAicGdiZW5jaF9hY2NvdW50cyIsIG5hY2NvdW50cywgaW5pdEFjY291bnQpOwor CWluaXRQb3B1bGF0ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsIG5icmFu Y2hlcywgaW5pdEJyYW5jaCk7CisJaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChjb24sICJwZ2Jl bmNoX3RlbGxlcnMiLCAgbnRlbGxlcnMsICBpbml0VGVsbGVyKTsKKwlpbml0UG9wdWxhdGVUYWJs ZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCBuYWNjb3VudHMsIGluaXRBY2NvdW50 KTsKIAogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CiB9CkBAIC01MjEyLDYgKzUy MTMsOCBAQCBpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHQoUEdjb25uICpjb24pCiBzdGF0 aWMgdm9pZAogYnVmZmVyQ2hhckRhdGEoY2hhciAqc3JjLCBpbnQzMl90IGxlbikKIHsKKwlBc3Nl cnQoYmluX2NvcHlfYnVmZmVyX2xlbmd0aCArIGxlbiA8PSBCSU5fQ09QWV9CVUZfU0laRSk7CisK IAltZW1jcHkoKGNoYXIgKikgYmluX2NvcHlfYnVmZmVyICsgYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCwgKGNoYXIgKikgc3JjLCBsZW4pOwogCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggKz0gbGVuOwog fQpAQCAtNTIyNywxMyArNTIzMCwxNiBAQCBidWZmZXJEYXRhKHZvaWQgKnNyYywgaW50MzJfdCBs ZW4pCiAJYnVmZmVyQ2hhckRhdGEoc3JjLCBsZW4pOwogI2Vsc2UKIAlpZiAobGVuID09IDEpCisJ ewogCQlidWZmZXJDaGFyRGF0YShzcmMsIGxlbik7Ci0JZWxzZQotCQlmb3IgKGludDMyX3QgaSA9 IDA7IGkgPCBsZW47IGkrKykKLQkJewotCQkJKChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJp bl9jb3B5X2J1ZmZlcl9sZW5ndGgpW2ldID0KLQkJCQkoKGNoYXIgKikgc3JjKVtsZW4gLSBpIC0g MV07Ci0JCX0KKwkJcmV0dXJuOworCX0KKworCWZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbjsg aSsrKQorCXsKKwkJKChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJpbl9jb3B5X2J1ZmZlcl9s ZW5ndGgpW2ldID0KKwkJCSgoY2hhciAqKSBzcmMpW2xlbiAtIGkgLSAxXTsKKwl9CiAKIAliaW5f Y29weV9idWZmZXJfbGVuZ3RoICs9IGxlbjsKICNlbmRpZgpAQCAtNTMyMiw3ICs1MzI4LDcgQEAg Zmx1c2hCdWZmZXIoUEdjb25uICpjb24sIGludDE2X3Qgcm93X2xlbikKICAqIFNlbmRzIGN1cnJl bnQgYnJhbmNoIHJvdyB0byBidWZmZXIKICAqLwogc3RhdGljIHZvaWQKLWluaXRCcmFuY2hCaW5h cnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCitpbml0QnJhbmNo QmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50LCBpbnQ4X3Qg Y29sdW1uQ291bnRlcikKIHsKIAkvKgogCSAqIEVhY2ggcm93IG9mIGJyYW5jaCB0YWJsZSBoYXMg Zm9sbG93aW5nIGV4dHJhIGJ5dGVzOgpAQCAtNTMzMyw3ICs1MzM5LDcgQEAgaW5pdEJyYW5jaEJp bmFyeShQR2Nvbm4gKmNvbiwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKIAogCWZsdXNo QnVmZmVyKGNvbiwgbWF4X3Jvd19sZW4pOwogCi0JYWRkQ29sdW1uQ291bnRlcigyKTsKKwlhZGRD b2x1bW5Db3VudGVyKGNvbHVtbkNvdW50ZXIpOwogCiAJYWRkSW50MzJDb2x1bW4oY3VyciArIDEp OwogCWFkZEludDMyQ29sdW1uKDApOwpAQCAtNTM0Myw3ICs1MzQ5LDcgQEAgaW5pdEJyYW5jaEJp bmFyeShQR2Nvbm4gKmNvbiwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKICAqIFNlbmRz IGN1cnJlbnQgdGVsbGVyIHJvdyB0byBidWZmZXIKICAqLwogc3RhdGljIHZvaWQKLWluaXRUZWxs ZXJCaW5hcnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCitpbml0 VGVsbGVyQmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50LCBp bnQ4X3QgY29sdW1uQ291bnRlcikKIHsKIAkvKgogCSAqIEVhY2ggcm93IG9mIHRlbGxlcnMgdGFi bGUgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKQEAgLTUzNTQsNyArNTM2MCw3IEBAIGluaXRU ZWxsZXJCaW5hcnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiAK IAlmbHVzaEJ1ZmZlcihjb24sIG1heF9yb3dfbGVuKTsKIAotCWFkZENvbHVtbkNvdW50ZXIoMyk7 CisJYWRkQ29sdW1uQ291bnRlcihjb2x1bW5Db3VudGVyKTsKIAogCWFkZEludDMyQ29sdW1uKGN1 cnIgKyAxKTsKIAlhZGRJbnQzMkNvbHVtbihjdXJyIC8gcGFyZW50ICsgMSk7CkBAIC01MzY1LDcg KzUzNzEsNyBAQCBpbml0VGVsbGVyQmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGlu dDMyX3QgcGFyZW50KQogICogU2VuZHMgY3VycmVudCBhY2NvdW50IHJvdyB0byBidWZmZXIKICAq Lwogc3RhdGljIHZvaWQKLWluaXRBY2NvdW50QmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1 cnIsIGludDMyX3QgcGFyZW50KQoraW5pdEFjY291bnRCaW5hcnkoUEdjb25uICpjb24sIGludDY0 X3QgY3VyciwgaW50MzJfdCBwYXJlbnQsIGludDhfdCBjb2x1bW5Db3VudGVyKQogewogCS8qCiAJ ICogRWFjaCByb3cgb2YgYWNjb3VudHMgdGFibGUgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoK QEAgLTUzNzYsNyArNTM4Miw3IEBAIGluaXRBY2NvdW50QmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2 NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQogCiAJZmx1c2hCdWZmZXIoY29uLCBtYXhfcm93X2xl bik7CiAKLQlhZGRDb2x1bW5Db3VudGVyKDMpOworCWFkZENvbHVtbkNvdW50ZXIoY29sdW1uQ291 bnRlcik7CiAKIAlpZiAoc2NhbGUgPD0gU0NBTEVfMzJCSVRfVEhSRVNIT0xEKQogCQlhZGRJbnQz MkNvbHVtbihjdXJyICsgMSk7CkBAIC01MzkxLDggKzUzOTcsOSBAQCBpbml0QWNjb3VudEJpbmFy eShQR2Nvbm4gKmNvbiwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKICAqIFVuaXZlcnNh bCB3cmFwcGVyIGZvciBzZW5kaW5nIGRhdGEgaW4gYmluYXJ5IGZvcm1hdAogICovCiBzdGF0aWMg dm9pZAotaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBj aGFyICpjb2x1bW5zLAotCQkJCQkJaW50IGNvdW50ZXIsIGludDY0X3QgYmFzZSwgaW5pdFJvd01l dGhvZEJpbiBpbml0X3JvdykKK2luaXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShQR2Nvbm4gKmNv biwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCisJCQkJCQkJaW50IGNvdW50ZXIsIGludDY0 X3QgYmFzZSwgaW5pdFJvd01ldGhvZEJpbmFyeSBpbml0X3JvdywKKwkJCQkJCQlpbnQgY29sdW1u Q291bnRlcikKIHsKIAlpbnQJCQkgbjsKIAlQR3Jlc3VsdAkqcmVzOwpAQCAtNTQyNiw3ICs1NDMz LDcgQEAgaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBj aGFyICpjb2x1bW5zLAogCiAJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFz ZTsgaSsrKQogCXsKLQkJaW5pdF9yb3coY29uLCBpLCBiYXNlKTsKKwkJaW5pdF9yb3coY29uLCBp LCBiYXNlLCBjb2x1bW5Db3VudGVyKTsKIAl9CiAKIAlyZXMgPSBQUWdldFJlc3VsdChjb24pOwpA QCAtNTQ2MCw3ICs1NDY3LDcgQEAgaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoUEdjb25uICpjb24s IGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAogICogV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEg bG9hZAogICovCiBzdGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnko UEdjb25uICpjb24pCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeUZybXQoUEdjb25u ICpjb24pCiB7CiAKIAlmcHJpbnRmKHN0ZGVyciwgIkJJTkFSWSBtb2RlLi4uXG4iKTsKQEAgLTU0 ODYsMTIgKzU0OTMsMTIgQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnkoUEdjb25u ICpjb24pCiAJCWlmIChtdWx0aV94YWN0KQogCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdp biIpOwogCi0JCWluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMi LCAiYmlkLCBiYmFsYW5jZSIsCi0JCQkJCQkJCWksIG5icmFuY2hlcywgaW5pdEJyYW5jaEJpbmFy eSk7Ci0JCWluaXRQb3B1bGF0ZVRhYmxlQmluYXJ5KGNvbiwgInBnYmVuY2hfdGVsbGVycyIsICAi dGlkLCBiaWQsIHRiYWxhbmNlIiwKLQkJCQkJCQkJaSwgbnRlbGxlcnMsICBpbml0VGVsbGVyQmlu YXJ5KTsKLQkJaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5jaF9hY2NvdW50cyIs ICJhaWQsIGJpZCwgYWJhbGFuY2UiLAotCQkJCQkJCQlpLCBuYWNjb3VudHMsIGluaXRBY2NvdW50 QmluYXJ5KTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KGNvbiwgInBnYmVuY2hfYnJh bmNoZXMiLCAiYmlkLCBiYmFsYW5jZSIsCisJCQkJCQkJCQlpLCBuYnJhbmNoZXMsIGluaXRCcmFu Y2hCaW5hcnksIDIpOworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoY29uLCAicGdiZW5j aF90ZWxsZXJzIiwgICJ0aWQsIGJpZCwgdGJhbGFuY2UiLAorCQkJCQkJCQkJaSwgbnRlbGxlcnMs ICBpbml0VGVsbGVyQmluYXJ5LCAzKTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KGNv biwgInBnYmVuY2hfYWNjb3VudHMiLCAiYWlkLCBiaWQsIGFiYWxhbmNlIiwKKwkJCQkJCQkJCWks IG5hY2NvdW50cywgaW5pdEFjY291bnRCaW5hcnksIDMpOwogCiAJCWlmIChtdWx0aV94YWN0KQog CQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKQEAgLTU1MTUsMTAgKzU1MjIsMTAg QEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoUEdjb25uICpjb24pCiAJc3dpdGNoIChkYXRh X2dlbmVyYXRpb25fdHlwZSkKIAl7CiAJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfVEVY VDoKLQkJCWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dChjb24pOworCQkJaW5pdEdlbmVy YXRlRGF0YUNsaWVudFNpZGVUZXh0RnJtdChjb24pOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5JVF9T VEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZOgotCQkJaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVC aW5hcnkoY29uKTsKKwkJCWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlQmluYXJ5RnJtdChjb24p OwogCQkJYnJlYWs7CiAJfQogfQotLSAKMi40My4wCgpGcm9tIGQ5NWM1M2Q0MTJmZjBlOTRlMTYy ZWFmMzk5MDIzM2ZhZTAwN2FlM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlz IE1pcm9ub3YgPGJvcmlzLm1pcm9ub3ZAZ21haWwuY29tPgpEYXRlOiBNb24sIDE2IEZlYiAyMDI2 IDEwOjA3OjEzICswNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAyMC8yM10gUnVubmluZyBpbmRlbnQg dG8gZml4IGNvZGUgZm9ybWF0dGluZwoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIHwg MTExICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgNjIgaW5zZXJ0aW9ucygrKSwgNDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggOWYz ZDdmOTlhMjUuLjgxOThmMWQ0YzlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5j aC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTE1OSw3ICsxNTksNyBAQCB0 eXBlZGVmIHN0cnVjdCBzb2NrZXRfc2V0CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogc29tZSBjb25maWd1 cmFibGUgcGFyYW1ldGVycyAqLwotI2RlZmluZSBERUZBVUxUX0lOSVRfU1RFUFMgImR0Z3ZwIgkJ LyogZGVmYXVsdCAtSSBzZXR0aW5nICovCisjZGVmaW5lIERFRkFVTFRfSU5JVF9TVEVQUyAiZHRn dnAiCS8qIGRlZmF1bHQgLUkgc2V0dGluZyAqLwogI2RlZmluZSBBTExfSU5JVF9TVEVQUyAiZHRn TVNjR1V2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLwogCiAjZGVmaW5lIExPR19TVEVQX1NF Q09ORFMJNQkvKiBzZWNvbmRzIGJldHdlZW4gbG9nIG1lc3NhZ2VzICovCkBAIC0xNzEsMTYgKzE3 MSwyNCBAQCB0eXBlZGVmIHN0cnVjdCBzb2NrZXRfc2V0CiAjZGVmaW5lIE1BWF9aSVBGSUFOX1BB UkFNCQkxMDAwLjAJLyogbWF4aW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KIAogLyogc2Vy dmVyLXNpZGUgbWV0aG9kcyB0byBnZW5lcmF0ZSBkYXRhICovCi0jZGVmaW5lIElOSVRfU1RFUF9H RU5fVFlQRV9JTlNFUlRfU0VSSUVTCSdHJwkvKiB1c2UgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMgdG8gZ2VuZXJhdGUgZGF0YSAqLwotI2RlZmluZSBJTklUX1NURVBfR0VOX1RZUEVf SU5TRVJUX1VOTkVTVAknVScJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0IHRvIGdlbmVy YXRlIGRhdGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9TRVJJRVMJJ0cn IC8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUCisJCQkJCQkJCQkJCQkgKiBnZW5lcmF0ZV9zZXJpZXMg dG8gZ2VuZXJhdGUKKwkJCQkJCQkJCQkJCSAqIGRhdGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dF Tl9UWVBFX0lOU0VSVF9VTk5FU1QJJ1UnIC8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdAor CQkJCQkJCQkJCQkJICogdG8gZ2VuZXJhdGUgZGF0YSAqLwogLyogY2xpZW50LXNpZGUgbWV0aG9k cyB0byBnZW5lcmF0ZSBkYXRhICovCi0jZGVmaW5lIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RF WFQJCSdnJyAvKiB1c2UgQ09QWSAuLiBGUk9NIFNURElOIC4uIFRFWFQgdG8gZ2VuZXJhdGUgZGF0 YSAqLwotI2RlZmluZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9CSU5BUlkJCSdjJyAvKiB1c2Ug Q09QWSAuLiBGUk9NIFNURElOIC4uIEJJTkFSWSB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5l IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQJCSdnJyAvKiB1c2UgQ09QWSAuLiBGUk9NIFNU RElOIC4uCisJCQkJCQkJCQkJCQkgKiBURVhUIHRvIGdlbmVyYXRlIGRhdGEgKi8KKyNkZWZpbmUg SU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZCQknYycgLyogdXNlIENPUFkgLi4gRlJPTSBT VERJTiAuLgorCQkJCQkJCQkJCQkJICogQklOQVJZIHRvIGdlbmVyYXRlIGRhdGEgKi8KIC8qIGRh dGEgaW5pdCBwc2V1ZG8gc3RlcHMgKi8KLSNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX1NJTkdM RV9YQUNUCQknUycgLyogc3dpdGNoIHRvIGluaXQgZGF0YSBhcyBzaW5nbGUgdHJhbnNhY3Rpb24g Ki8KLSNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX01VTFRJX1hBQ1QJCSdNJyAvKiBzd2l0Y2gg dG8gaW5pdCBkYXRhIGFzIG11bHRpcGxlIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSBJTklUX1NU RVBfR0VOX1RZUEVfU0lOR0xFX1hBQ1QJCSdTJyAvKiBzd2l0Y2ggdG8gaW5pdCBkYXRhIGFzCisJ CQkJCQkJCQkJCQkgKiBzaW5nbGUgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dF Tl9UWVBFX01VTFRJX1hBQ1QJCSdNJyAvKiBzd2l0Y2ggdG8gaW5pdCBkYXRhIGFzCisJCQkJCQkJ CQkJCQkgKiBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgKi8KIAotc3RhdGljIGJvb2wgbXVsdGlfeGFj dCA9IGZhbHNlOwkvKiBpbml0IGRhdGEgdHlwZSAoYXMgc2luZ2xlIG9yIG11bHRpcGxlIHRyYW5z YWN0aW9ucykgKi8KK3N0YXRpYyBib29sIG11bHRpX3hhY3QgPSBmYWxzZTsgLyogaW5pdCBkYXRh IHR5cGUgKGFzIHNpbmdsZSBvciBtdWx0aXBsZQorCQkJCQkJCQkgKiB0cmFuc2FjdGlvbnMpICov CiBzdGF0aWMgaW50CW54YWN0cyA9IDA7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIg Y2xpZW50ICovCiBzdGF0aWMgaW50CWR1cmF0aW9uID0gMDsJCS8qIGR1cmF0aW9uIGluIHNlY29u ZHMgKi8KIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWlj cm8gc2Vjb25kcywgdW5kZXIgLVQgKi8KQEAgLTE5NCwxNCArMjAyLDE1IEBAIHN0YXRpYyBpbnQJ c2NhbGUgPSAxOwogLyoKICAqIG1vZGUgb2YgZGF0YSBnZW5lcmF0aW9uIHRvIHVzZQogICovCi1z dGF0aWMgY2hhcglkYXRhX2dlbmVyYXRpb25fdHlwZSA9IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZ X1RFWFQ7CitzdGF0aWMgY2hhciBkYXRhX2dlbmVyYXRpb25fdHlwZSA9IElOSVRfU1RFUF9HRU5f VFlQRV9DT1BZX1RFWFQ7CiAKIC8qCiAgKiBDT1BZIEZST00gQklOQVJZIGV4ZWN1dGlvbiBidWZm ZXIKICAqLwotI2RlZmluZSBCSU5fQ09QWV9CVUZfU0laRQkxMDI0MDAJCQkJLyogbWF4aW11bSBi dWZmZXIgc2l6ZSBmb3IgQ09QWSBGUk9NIEJJTkFSWSAqLwotc3RhdGljIGNoYXIJCSpiaW5fY29w eV9idWZmZXIgPSBOVUxMOwkJLyogYnVmZmVyIGZvciBDT1BZIEZST00gQklOQVJZICovCi1zdGF0 aWMgaW50MzJfdAkgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCA9IDA7CS8qIGN1cnJlbnQgYnVmZmVy IHNpemUgKi8KKyNkZWZpbmUgQklOX0NPUFlfQlVGX1NJWkUJMTAyNDAwCS8qIG1heGltdW0gYnVm ZmVyIHNpemUgZm9yIENPUFkgRlJPTQorCQkJCQkJCQkJICogQklOQVJZICovCitzdGF0aWMgY2hh ciAqYmluX2NvcHlfYnVmZmVyID0gTlVMTDsJLyogYnVmZmVyIGZvciBDT1BZIEZST00gQklOQVJZ ICovCitzdGF0aWMgaW50MzJfdCBiaW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsJLyogY3VycmVu dCBidWZmZXIgc2l6ZSAqLwogCiAvKgogICogZmlsbGZhY3Rvci4gZm9yIGV4YW1wbGUsIGZpbGxm YWN0b3IgPSA5MCB3aWxsIHVzZSBvbmx5IDkwIHBlcmNlbnQKQEAgLTg3Miw4ICs4ODEsOCBAQCBz dGF0aWMgaW50CXdhaXRfb25fc29ja2V0X3NldChzb2NrZXRfc2V0ICpzYSwgaW50NjQgdXNlY3Mp Owogc3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpzYSwgaW50IGZkLCBp bnQgaWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWlsZCByb3dzIGZvciBDT1BZIGR1cmlu ZyBkYXRhIGxvYWRpbmcgKi8KLXR5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRob2QpCQkoUFFFeHBC dWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpOwotdHlwZWRlZiB2b2lkICgqaW5pdFJvd01ldGhv ZEJpbmFyeSkJKFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50LCBpbnQ4 X3QgY29sdW1uQ291bnRlcik7Cit0eXBlZGVmIHZvaWQgKCppbml0Um93TWV0aG9kKSAoUFFFeHBC dWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpOwordHlwZWRlZiB2b2lkICgqaW5pdFJvd01ldGhv ZEJpbmFyeSkgKFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50LCBpbnQ4 X3QgY29sdW1uQ291bnRlcik7CiAKIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3Igb3VyIGZsZXgg bGV4ZXIgKi8KIHN0YXRpYyBjb25zdCBQc3FsU2NhbkNhbGxiYWNrcyBwZ2JlbmNoX2NhbGxiYWNr cyA9IHsKQEAgLTUyMDAsNyArNTIwOSw3IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4 dEZybXQoUEdjb25uICpjb24pCiAJICogYWxyZWFkeSBleGlzdAogCSAqLwogCWluaXRQb3B1bGF0 ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsIG5icmFuY2hlcywgaW5pdEJy YW5jaCk7Ci0JaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChjb24sICJwZ2JlbmNoX3RlbGxlcnMi LCAgbnRlbGxlcnMsICBpbml0VGVsbGVyKTsKKwlpbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KGNv biwgInBnYmVuY2hfdGVsbGVycyIsIG50ZWxsZXJzLCBpbml0VGVsbGVyKTsKIAlpbml0UG9wdWxh dGVUYWJsZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCBuYWNjb3VudHMsIGluaXRB Y2NvdW50KTsKIAogCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CkBAIC01MjYwLDgg KzUyNjksOSBAQCBhZGRDb2x1bW5Db3VudGVyKGludDE2X3QgbikKIHN0YXRpYyB2b2lkCiBhZGRJ bnQzMkNvbHVtbihpbnQzMl90IHZhbHVlKQogewotCWludDMyX3QJZGF0YSA9IHZhbHVlOwotCWlu dDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsKKwlpbnQzMl90CQlkYXRhID0gdmFsdWU7CisJaW50 MzJfdAkJc2l6ZSA9IHNpemVvZihkYXRhKTsKKwogCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUs IHNpemVvZihzaXplKSk7CiAJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9mKGRhdGEp KTsKIH0KQEAgLTUyNzIsOCArNTI4Miw5IEBAIGFkZEludDMyQ29sdW1uKGludDMyX3QgdmFsdWUp CiBzdGF0aWMgdm9pZAogYWRkSW50NjRDb2x1bW4oaW50NjRfdCB2YWx1ZSkKIHsKLQlpbnQ2NF90 CWRhdGEgPSB2YWx1ZTsKLQlpbnQzMl90CXNpemUgPSBzaXplb2YoZGF0YSk7CisJaW50NjRfdAkJ ZGF0YSA9IHZhbHVlOworCWludDMyX3QJCXNpemUgPSBzaXplb2YoZGF0YSk7CisKIAlidWZmZXJE YXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOwogCWJ1ZmZlckRhdGEoKHZvaWQgKikg JmRhdGEsIHNpemVvZihkYXRhKSk7CiB9CkBAIC01Mjg0LDkgKzUyOTUsOSBAQCBhZGRJbnQ2NENv bHVtbihpbnQ2NF90IHZhbHVlKQogc3RhdGljIHZvaWQKIHNlbmRCaW5hcnlDb3B5SGVhZGVyKFBH Y29ubiAqY29uKQogewotCWNoYXIgaGVhZGVyW10gPSB7J1AnLCdHJywnQycsJ08nLCdQJywnWScs J1xuJywnXDM3NycsJ1xyJywnXG4nLCdcMCcsCi0JCQkJCSAnXDAnLCdcMCcsJ1wwJywnXDAnLAot CQkJCQkgJ1wwJywnXDAnLCdcMCcsJ1wwJyB9OworCWNoYXIJCWhlYWRlcltdID0geydQJywgJ0cn LCAnQycsICdPJywgJ1AnLCAnWScsICdcbicsICdcMzc3JywgJ1xyJywgJ1xuJywgJ1wwJywKKwkJ J1wwJywgJ1wwJywgJ1wwJywgJ1wwJywKKwknXDAnLCAnXDAnLCAnXDAnLCAnXDAnfTsKIAogCVBR cHV0Q29weURhdGEoY29uLCBoZWFkZXIsIDE5KTsKIH0KQEAgLTUyOTcsNyArNTMwOCw3IEBAIHNl bmRCaW5hcnlDb3B5SGVhZGVyKFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIHNlbmRCaW5hcnlD b3B5VHJhaWxlcihQR2Nvbm4gKmNvbikKIHsKLQlzdGF0aWMgY2hhciB0cmFpbGVyW10gPSB7IDB4 RkYsIDB4RkYgfTsKKwlzdGF0aWMgY2hhciB0cmFpbGVyW10gPSB7MHhGRiwgMHhGRn07CiAKIAlQ UXB1dENvcHlEYXRhKGNvbiwgdHJhaWxlciwgMik7CiB9CkBAIC01MzA4LDcgKzUzMTksNyBAQCBz ZW5kQmluYXJ5Q29weVRyYWlsZXIoUEdjb25uICpjb24pCiBzdGF0aWMgdm9pZAogZmx1c2hCdWZm ZXIoUEdjb25uICpjb24sIGludDE2X3Qgcm93X2xlbikKIHsKLQlQR3Jlc3VsdCAqcmVzOworCVBH cmVzdWx0ICAgKnJlczsKIAogCWlmIChiaW5fY29weV9idWZmZXJfbGVuZ3RoICsgcm93X2xlbiA+ IEJJTl9DT1BZX0JVRl9TSVpFKQogCXsKQEAgLTUzMzAsMTIgKzUzNDEsMTMgQEAgZmx1c2hCdWZm ZXIoUEdjb25uICpjb24sIGludDE2X3Qgcm93X2xlbikKIHN0YXRpYyB2b2lkCiBpbml0QnJhbmNo QmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50LCBpbnQ4X3Qg Y29sdW1uQ291bnRlcikKIHsKLQkvKgorCS8qLS0tCiAJICogRWFjaCByb3cgb2YgYnJhbmNoIHRh YmxlIGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CiAJICogLSAyIGJ5dGVzIGZvciBudW1iZXIg b2YgY29sdW1ucwogCSAqIC0gNCBieXRlcyBhcyBsZW5ndGggZm9yIGVhY2ggb2YgdGFibGUncyAz IGNvbHVtbnMKKwkgKi0tLQogCSAqLwotCWludDE2X3QJbWF4X3Jvd19sZW4gPSAgMzUgKyAyICsg NCozOyAvKiBtYXggcm93IHNpemUgaXMgMzUgKi8KKwlpbnQxNl90CQltYXhfcm93X2xlbiA9IDM1 ICsgMiArIDQgKiAzOwkvKiBtYXggcm93IHNpemUgaXMgMzUgKi8KIAogCWZsdXNoQnVmZmVyKGNv biwgbWF4X3Jvd19sZW4pOwogCkBAIC01MzUxLDEyICs1MzYzLDEzIEBAIGluaXRCcmFuY2hCaW5h cnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQsIGludDhfdCBjb2x1 bW5Db3VudGVyCiBzdGF0aWMgdm9pZAogaW5pdFRlbGxlckJpbmFyeShQR2Nvbm4gKmNvbiwgaW50 NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCwgaW50OF90IGNvbHVtbkNvdW50ZXIpCiB7Ci0JLyoK KwkvKi0tLQogCSAqIEVhY2ggcm93IG9mIHRlbGxlcnMgdGFibGUgaGFzIGZvbGxvd2luZyBleHRy YSBieXRlczoKIAkgKiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zCiAJICogLSA0IGJ5 dGVzIGFzIGxlbmd0aCBmb3IgZWFjaCBvZiB0YWJsZSdzIDQgY29sdW1ucworCSAqLS0tCiAJICov Ci0JaW50MTZfdAltYXhfcm93X2xlbiA9ICA0MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6ZSBp cyA0MCAqLworCWludDE2X3QJCW1heF9yb3dfbGVuID0gNDAgKyAyICsgNCAqIDQ7CS8qIG1heCBy b3cgc2l6ZSBpcyA0MCAqLwogCiAJZmx1c2hCdWZmZXIoY29uLCBtYXhfcm93X2xlbik7CiAKQEAg LTUzNzMsMTIgKzUzODYsMTMgQEAgaW5pdFRlbGxlckJpbmFyeShQR2Nvbm4gKmNvbiwgaW50NjRf dCBjdXJyLCBpbnQzMl90IHBhcmVudCwgaW50OF90IGNvbHVtbkNvdW50ZXIKIHN0YXRpYyB2b2lk CiBpbml0QWNjb3VudEJpbmFyeShQR2Nvbm4gKmNvbiwgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBh cmVudCwgaW50OF90IGNvbHVtbkNvdW50ZXIpCiB7Ci0JLyoKKwkvKi0tLQogCSAqIEVhY2ggcm93 IG9mIGFjY291bnRzIHRhYmxlIGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CiAJICogLSAyIGJ5 dGVzIGZvciBudW1iZXIgb2YgY29sdW1ucwogCSAqIC0gNCBieXRlcyBhcyBsZW5ndGggZm9yIGVh Y2ggb2YgdGFibGUncyA0IGNvbHVtbnMKIAkgKi8KLQlpbnQxNl90CW1heF9yb3dfbGVuID0gMjUw ICsgMiArIDQqNDsgLyogbWF4IHJvdyBzaXplIGlzIDI1MCBmb3IgaW50NjQgKi8KKwlpbnQxNl90 CQltYXhfcm93X2xlbiA9IDI1MCArIDIgKyA0ICogNDsJLyogbWF4IHJvdyBzaXplIGlzIDI1MCBm b3IKKwkJCQkJCQkJCQkJCSAqIGludDY0ICovCiAKIAlmbHVzaEJ1ZmZlcihjb24sIG1heF9yb3df bGVuKTsKIApAQCAtNTQwMSwxMSArNTQxNSwxMSBAQCBpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5h cnkoUEdjb25uICpjb24sIGNoYXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAogCQkJCQkJCWludCBj b3VudGVyLCBpbnQ2NF90IGJhc2UsIGluaXRSb3dNZXRob2RCaW5hcnkgaW5pdF9yb3csCiAJCQkJ CQkJaW50IGNvbHVtbkNvdW50ZXIpCiB7Ci0JaW50CQkJIG47Ci0JUEdyZXN1bHQJKnJlczsKLQlj aGFyCQkgY29weV9zdGF0ZW1lbnRbMjU2XTsKLQljb25zdCBjaGFyCSpjb3B5X3N0YXRlbWVudF9m bXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gKGZvcm1hdCBiaW5hcnkpIjsKLQlpbnQ2NF90 CQkgc3RhcnQgPSBiYXNlICogY291bnRlcjsKKwlpbnQJCQluOworCVBHcmVzdWx0ICAgKnJlczsK KwljaGFyCQljb3B5X3N0YXRlbWVudFsyNTZdOworCWNvbnN0IGNoYXIgKmNvcHlfc3RhdGVtZW50 X2ZtdCA9ICJjb3B5ICVzICglcykgZnJvbSBzdGRpbiAoZm9ybWF0IGJpbmFyeSkiOworCWludDY0 X3QJCXN0YXJ0ID0gYmFzZSAqIGNvdW50ZXI7CiAKIAliaW5fY29weV9idWZmZXJfbGVuZ3RoID0g MDsKIApAQCAtNTQ1MCw3ICs1NDY0LDcgQEAgaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KFBH Y29ubiAqY29uLCBjaGFyICp0YWJsZSwgY2hhciAqY29sdW1ucywKIAlyZXMgPSBQUWdldFJlc3Vs dChjb24pOwogCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCiAJewot CQlpZiAoUFFwdXRDb3B5RW5kKGNvbiwgTlVMTCkgPT0gMSkgLyogc3VjY2VzcyAqLworCQlpZiAo UFFwdXRDb3B5RW5kKGNvbiwgTlVMTCkgPT0gMSkJLyogc3VjY2VzcyAqLwogCQl7CiAJCQlQUWNs ZWFyKHJlcyk7CiAJCQlyZXMgPSBQUWdldFJlc3VsdChjb24pOwpAQCAtNTQ3Niw5ICs1NDkwLDgg QEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnlGcm10KFBHY29ubiAqY29uKQogCWJp bl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwogCiAJLyoKLQkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBp biBtdWx0aXBsZSB0cmFuc2FjdGlvbnMKLQkgKiB0byBtaW5pbWl6ZSBsb2FkIG9uIERCIHNlcnZl ciBhbmQgcGVyaGFwcwotCSAqIGluIGZ1dHVyZSBhbGxvdyBsb2FkIGluIHBhcmFsbGVsIHNlc3Np b25zCisJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIG1p bmltaXplIGxvYWQgb24gREIKKwkgKiBzZXJ2ZXIgYW5kIHBlcmhhcHMgaW4gZnV0dXJlIGFsbG93 IGxvYWQgaW4gcGFyYWxsZWwgc2Vzc2lvbnMKIAkgKi8KIAlleGVjdXRlU3RhdGVtZW50KGNvbiwg ImJlZ2luIik7CiAKQEAgLTU0OTUsOCArNTUwOCw4IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRT aWRlQmluYXJ5RnJtdChQR2Nvbm4gKmNvbikKIAogCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5h cnkoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsICJiaWQsIGJiYWxhbmNlIiwKIAkJCQkJCQkJCWks IG5icmFuY2hlcywgaW5pdEJyYW5jaEJpbmFyeSwgMik7Ci0JCWluaXRQb3B1bGF0ZVRhYmxlQ29w eUJpbmFyeShjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCAgInRpZCwgYmlkLCB0YmFsYW5jZSIsCi0J CQkJCQkJCQlpLCBudGVsbGVycywgIGluaXRUZWxsZXJCaW5hcnksIDMpOworCQlpbml0UG9wdWxh dGVUYWJsZUNvcHlCaW5hcnkoY29uLCAicGdiZW5jaF90ZWxsZXJzIiwgInRpZCwgYmlkLCB0YmFs YW5jZSIsCisJCQkJCQkJCQlpLCBudGVsbGVycywgaW5pdFRlbGxlckJpbmFyeSwgMyk7CiAJCWlu aXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgImFpZCwg YmlkLCBhYmFsYW5jZSIsCiAJCQkJCQkJCQlpLCBuYWNjb3VudHMsIGluaXRBY2NvdW50QmluYXJ5 LCAzKTsKIApAQCAtNTU3MCwxMCArNTU4MywxMCBAQCBnZW5lcmF0ZURhdGFJbnNlcnRTZXJpZXMo UEdjb25uICpjb24pCiAKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKIAkJCQkJCSAgImluc2Vy dCBpbnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLCBiaWQsIGFiYWxhbmNlLCAiCi0JCQkJCQkJCQkg ICAiZmlsbGVyKSAiCisJCQkJCQkgICJmaWxsZXIpICIKIAkJCQkJCSAgInNlbGVjdCBhaWQgKyAx LCBhaWQgLyAlZCArIDEsIDAsICcnICIKIAkJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKCIg SU5UNjRfRk9STUFUICIsICIKLQkJCQkJCQkJSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCisJCQkJ CQkgIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAogCQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkg aSAqIG5hY2NvdW50cywKIAkJCQkJCSAgKGludDY0KSAoaSArIDEpICogbmFjY291bnRzIC0gMSk7 CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CkBAIC01NjIyLDcgKzU2MzUsNyBA QCBnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3QoUEdjb25uICpjb24pCiAJCXByaW50ZlBRRXhwQnVm ZmVyKCZzcWwsCiAJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX3RlbGxlcnModGlkLCBiaWQs IHRiYWxhbmNlKSAiCiAJCQkJCQkgICJzZWxlY3QgdW5uZXN0KGFycmF5X2FnZyhzLmkgb3JkZXIg Ynkgcy5pKSkgYXMgdGlkLCAiCi0JCQkJCQkJCSAgIiVkIGFzIGJpZCwgMCBhcyB0YmFsYW5jZSAi CisJCQkJCQkgICIlZCBhcyBiaWQsIDAgYXMgdGJhbGFuY2UgIgogCQkJCQkJICAiZnJvbSBnZW5l cmF0ZV9zZXJpZXMoJWQsICVkKSBhcyBzKGkpIiwKIAkJCQkJCSAgcyArIDEsIHMgKiBudGVsbGVy cyArIDEsIChzICsgMSkgKiBudGVsbGVycyk7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwu ZGF0YSk7CkBAIC01NjMwLDEzICs1NjQzLDEzIEBAIGdlbmVyYXRlRGF0YUluc2VydFVubmVzdChQ R2Nvbm4gKmNvbikKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKIAkJCQkJCSAgIndpdGggZGF0 YSBhcyAoIgogCQkJCQkJICAiICAgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygiIElOVDY0X0ZPUk1B VCAiLCAiCi0JCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgaSkgIgorCQkJCQkJICBJTlQ2NF9G T1JNQVQgIikgYXMgaSkgIgogCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhh aWQsIGJpZCwgIgotCQkJCQkJCQkJICAiYWJhbGFuY2UsIGZpbGxlcikgIgorCQkJCQkJICAiYWJh bGFuY2UsIGZpbGxlcikgIgogCQkJCQkJICAic2VsZWN0IHVubmVzdChhaWQpLCB1bm5lc3QoYmlk KSwgMCBhcyBhYmFsYW5jZSwgIgotCQkJCQkJCQkgICInJyBhcyBmaWxsZXIgIgorCQkJCQkJICAi JycgYXMgZmlsbGVyICIKIAkJCQkJCSAgImZyb20gKHNlbGVjdCBhcnJheV9hZ2coaSsxKSBhaWQs ICIKLQkJCQkJCQkJCSAgICJhcnJheV9hZ2coaS8lZCArIDEpIGJpZCBmcm9tIGRhdGEpIiwKKwkJ CQkJCSAgImFycmF5X2FnZyhpLyVkICsgMSkgYmlkIGZyb20gZGF0YSkiLAogCQkJCQkJICAoaW50 NjQpIHMgKiBuYWNjb3VudHMgKyAxLAogCQkJCQkJICAoaW50NjQpIChzICsgMSkgKiBuYWNjb3Vu dHMsIG5hY2NvdW50cyk7CiAJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CkBAIC01 NzU4LDcgKzU3NzEsNyBAQCBpbml0Q3JlYXRlRktleXMoUEdjb25uICpjb24pCiBzdGF0aWMgdm9p ZAogY2hlY2tJbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVwcykKIHsKLQljaGFy CWRhdGFfaW5pdF90eXBlID0gMDsKKwljaGFyCQlkYXRhX2luaXRfdHlwZSA9IDA7CiAKIAlpZiAo aW5pdGlhbGl6ZV9zdGVwc1swXSA9PSAnXDAnKQogCQlwZ19mYXRhbCgibm8gaW5pdGlhbGl6YXRp b24gc3RlcHMgc3BlY2lmaWVkIik7Ci0tIAoyLjQzLjAKCkZyb20gMjcwZDJiZjE0YjY4NzNmZjY2 ZmMzN2NhMGE1ZGNjYzA1NWRhYjFmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQm9y aXMgTWlyb25vdiA8Ym9yaXMubWlyb25vdkBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTYgRmViIDIw MjYgMTQ6NTc6MTggKzA3MDAKU3ViamVjdDogW1BBVENIIHY4IDIxLzIzXSBSZW1vdmluZyBkZWJ1 Z2dpbmcgZmlsbGVyIHZhbHVlCgotLS0KIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgfCA4ICsr KystLS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCmluZGV4IDgxOThmMWQ0YzlhLi43MTBiMmE1YjcwZCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBA IC00OTU0LDggKzQ5NTQsOCBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogCXN0YXRp YyBjb25zdCBzdHJ1Y3QgZGRsaW5mbyBERExzW10gPSB7CiAJCXsKIAkJCSJwZ2JlbmNoX2hpc3Rv cnkiLAotCQkJInRpZCBpbnQsYmlkIGludCxhaWQgICAgaW50LGRlbHRhIGludCxtdGltZSB0aW1l c3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJz8nIiwKLQkJCSJ0aWQgaW50LGJpZCBpbnQs YWlkIGJpZ2ludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFyKDIyKSBkZWZh dWx0ICc/JyIsCisJCQkidGlkIGludCxiaWQgaW50LGFpZCAgICBpbnQsZGVsdGEgaW50LG10aW1l IHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikgZGVmYXVsdCAnJyIsCisJCQkidGlkIGludCxiaWQg aW50LGFpZCBiaWdpbnQsZGVsdGEgaW50LG10aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikg ZGVmYXVsdCAnJyIsCiAJCQkwCiAJCX0sCiAJCXsKQEAgLTQ5NjYsOCArNDk2Niw4IEBAIGluaXRD cmVhdGVUYWJsZXMoUEdjb25uICpjb24pCiAJCX0sCiAJCXsKIAkJCSJwZ2JlbmNoX2FjY291bnRz IiwKLQkJCSJhaWQgICAgaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBj aGFyKDg0KSBkZWZhdWx0ICc/JyIsCi0JCQkiYWlkIGJpZ2ludCBub3QgbnVsbCxiaWQgaW50LGFi YWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAnPyciLAorCQkJImFpZCAgICBpbnQg bm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIGRlZmF1bHQgJyci LAorCQkJImFpZCBiaWdpbnQgbm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNo YXIoODQpIGRlZmF1bHQgJyciLAogCQkJMQogCQl9LAogCQl7Ci0tIAoyLjQzLjAKCkZyb20gODZh MTExYzYzZTcwMDZkNDgwMWNlN2JiNTk0YTViNzdkODdiNDJiMCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogQm9yaXMgTWlyb25vdiA8Ym9yaXMubWlyb25vdkBnbWFpbC5jb20+CkRhdGU6 IE1vbiwgMjMgRmViIDIwMjYgMTY6MTU6MDYgKzA3MDAKU3ViamVjdDogW1BBVENIIHY4IDIyLzIz XSBNb3Zpbmcgb3V0IGxvZ2ljIHNob3dpbmcgZGF0YSBsb2FkIHByb2dyZXNzIGludG8gb3duCiBw cm9jZWR1cmUKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyB8IDE0MiArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc1IGluc2VydGlv bnMoKyksIDY3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2Jl bmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDcxMGIyYTViNzBkLi5lM2Uw ZTA3Mzc5MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC00ODcsNiArNDg3LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3RhdHNEYXRhCiAgKi8KIHN0YXRpYyBwZ190aW1lX3VzZWNfdCBlcG9jaF9zaGlmdDsKIAorLyog dXNlZCB0byB0cmFjayBlbGFwc2VkIHRpbWUgYW5kIGVzdGltYXRlIG9mIHRoZSByZW1haW5pbmcg dGltZSBvZiBkYXRhIGxvYWQgKi8KK3N0YXRpYyBwZ190aW1lX3VzZWNfdCBkYXRhX2xvYWRfc3Rh cnQ7CisKIC8qCiAgKiBFcnJvciBzdGF0dXMgZm9yIGVycm9ycyBkdXJpbmcgc2NyaXB0IGV4ZWN1 dGlvbi4KICAqLwpAQCAtNTA2MiwyNyArNTA2NSw4MiBAQCBpbml0QWNjb3VudChQUUV4cEJ1ZmZl ckRhdGEgKnNxbCwgaW50NjQgY3VycikKIAkJCQkJICBjdXJyICsgMSwgY3VyciAvIG5hY2NvdW50 cyArIDEpOwogfQogCitzdGF0aWMgdm9pZAorc2hvd1BvcHVsYXRlVGFibGVDb3B5UHJvZ3Jlc3Mo Y29uc3QgY2hhciAqdGFibGUsIGludDY0IGN1cnJlbnQsIGludDY0IHRvdGFsKQoreworCXN0YXRp YyBpbnQJY2hhcnMgPSAwOworCXN0YXRpYyBpbnQJcHJldl9jaGFycyA9IDA7CisJc3RhdGljIGlu dAlsb2dfaW50ZXJ2YWwgPSAxOworCisJLyogU3RheSBvbiB0aGUgc2FtZSBsaW5lIGlmIHJlcG9y dGluZyB0byBhIHRlcm1pbmFsICovCisJY2hhcgkJZW9sID0gaXNhdHR5KGZpbGVubyhzdGRlcnIp KSA/ICdccicgOiAnXG4nOworCisJZG91YmxlCQllbGFwc2VkX3NlYyA9IFBHX1RJTUVfR0VUX0RP VUJMRShwZ190aW1lX25vdygpIC0gZGF0YV9sb2FkX3N0YXJ0KTsKKwlkb3VibGUJCXJlbWFpbmlu Z19zZWMgPSAoKGRvdWJsZSkgdG90YWwgLSBjdXJyZW50KSAqIGVsYXBzZWRfc2VjIC8gY3VycmVu dDsKKworCS8qCisJICogSWYgd2Ugd2FudCB0byBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBsb2dn aW5nLCBwcmludCBhIG1lc3NhZ2UgZWFjaAorCSAqIDEwMGsgaW5zZXJ0ZWQgcm93cy4KKwkgKi8K KwlpZiAoKCF1c2VfcXVpZXQpICYmIChjdXJyZW50ICUgMTAwMDAwID09IDApKQorCXsKKwkJY2hh cnMgPSBmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0 dXBsZXMgKCVkJSUpIG9mICVzIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBz KSIsCisJCQkJCQljdXJyZW50LCB0b3RhbCwKKwkJCQkJCShpbnQpICgoY3VycmVudCAqIDEwMCkg LyB0b3RhbCksCisJCQkJCQl0YWJsZSwgZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOworCisJ CS8qCisJCSAqIElmIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvbmdlciB0aGFu IHRoZSBjdXJyZW50IG9uZSwKKwkJICogYWRkIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lIHRv IGZ1bGx5IG92ZXJ3cml0ZSBhbnkgcmVtYWluaW5nCisJCSAqIGNoYXJhY3RlcnMgZnJvbSB0aGUg cHJldmlvdXMgbWVzc2FnZS4KKwkJICovCisJCWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCisJCQlm cHJpbnRmKHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKKwkJZnB1dGMo ZW9sLCBzdGRlcnIpOworCQlwcmV2X2NoYXJzID0gY2hhcnM7CisJfQorCS8qIGxldCdzIG5vdCBj YWxsIHRoZSB0aW1pbmcgZm9yIGVhY2ggcm93LCBidXQgb25seSBlYWNoIDEwMCByb3dzICovCisJ ZWxzZSBpZiAodXNlX3F1aWV0ICYmIChjdXJyZW50ICUgMTAwID09IDApKQorCXsKKwkJLyogaGF2 ZSB3ZSByZWFjaGVkIHRoZSBuZXh0IGludGVydmFsIChvciBlbmQpPyAqLworCQlpZiAoKGN1cnJl bnQgPT0gdG90YWwpIHx8IChlbGFwc2VkX3NlYyA+PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9T RUNPTkRTKSkKKwkJeworCQkJY2hhcnMgPSBmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIg b2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIG9mICVzIGRvbmUgKGVsYXBzZWQgJS4y ZiBzLCByZW1haW5pbmcgJS4yZiBzKSIsCisJCQkJCQkJY3VycmVudCwgdG90YWwsCisJCQkJCQkJ KGludCkgKChjdXJyZW50ICogMTAwKSAvIHRvdGFsKSwKKwkJCQkJCQl0YWJsZSwgZWxhcHNlZF9z ZWMsIHJlbWFpbmluZ19zZWMpOworCisJCQkvKgorCQkJICogSWYgdGhlIHByZXZpb3VzIHByb2dy ZXNzIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQKKwkJCSAqIG9uZSwgYWRkIHNw YWNlcyB0byB0aGUgY3VycmVudCBsaW5lIHRvIGZ1bGx5IG92ZXJ3cml0ZSBhbnkKKwkJCSAqIHJl bWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZpb3VzIG1lc3NhZ2UuCisJCQkgKi8KKwkJ CWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCisJCQkJZnByaW50ZihzdGRlcnIsICIlKmMiLCBwcmV2 X2NoYXJzIC0gY2hhcnMsICcgJyk7CisJCQlmcHV0Yyhlb2wsIHN0ZGVycik7CisJCQlwcmV2X2No YXJzID0gY2hhcnM7CisKKwkJCS8qIHNraXAgdG8gdGhlIG5leHQgaW50ZXJ2YWwgKi8KKwkJCWxv Z19pbnRlcnZhbCA9IChpbnQpIGNlaWwoZWxhcHNlZF9zZWMgLyBMT0dfU1RFUF9TRUNPTkRTKTsK KwkJfQorCX0KKworCWlmIChjdXJyZW50ID09IHRvdGFsICYmIGNoYXJzICE9IDAgJiYgZW9sICE9 ICdcbicpCisJCWZwcmludGYoc3RkZXJyLCAiJSpjXHIiLCBjaGFycywgJyAnKTsJLyogQ2xlYXIg dGhlIGN1cnJlbnQgbGluZSAqLworfQorCiBzdGF0aWMgdm9pZAogaW5pdFBvcHVsYXRlVGFibGVD b3B5VGV4dChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFibGUsIGludDY0IGJhc2UsCiAJCQkJ CQkgIGluaXRSb3dNZXRob2QgaW5pdF9yb3cpCiB7CiAJaW50CQkJbjsKIAlpbnQ2NAkJazsKLQlp bnQJCQljaGFycyA9IDA7Ci0JaW50CQkJcHJldl9jaGFycyA9IDA7CiAJUEdyZXN1bHQgICAqcmVz OwogCVBRRXhwQnVmZmVyRGF0YSBzcWw7CiAJY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKIAlj b25zdCBjaGFyICpjb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyBmcm9tIHN0ZGluIjsKIAlp bnQ2NAkJdG90YWwgPSBiYXNlICogc2NhbGU7CiAKLQkvKiB1c2VkIHRvIHRyYWNrIGVsYXBzZWQg dGltZSBhbmQgZXN0aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lICovCi0JcGdfdGltZV91c2Vj X3Qgc3RhcnQ7Ci0JaW50CQkJbG9nX2ludGVydmFsID0gMTsKLQotCS8qIFN0YXkgb24gdGhlIHNh bWUgbGluZSBpZiByZXBvcnRpbmcgdG8gYSB0ZXJtaW5hbCAqLwotCWNoYXIJCWVvbCA9IGlzYXR0 eShmaWxlbm8oc3RkZXJyKSkgPyAnXHInIDogJ1xuJzsKLQogCWluaXRQUUV4cEJ1ZmZlcigmc3Fs KTsKIAogCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpFIG9uIHYxNCBhbmQgbGF0ZXIgZm9yIGFsbCBv cmRpbmFyeSB0YWJsZXMgKi8KQEAgLTUxMDMsMTIgKzUxNjEsOCBAQCBpbml0UG9wdWxhdGVUYWJs ZUNvcHlUZXh0KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJsZSwgaW50NjQgYmFzZSwKIAkJ cGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiByZXN1bHQ6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29uKSk7CiAJUFFjbGVhcihyZXMpOwogCi0Jc3RhcnQgPSBwZ190aW1lX25vdygpOwotCiAJZm9y IChrID0gMDsgayA8IHRvdGFsOyBrKyspCiAJewotCQlpbnQ2NAkJaiA9IGsgKyAxOwotCiAJCWlu aXRfcm93KCZzcWwsIGspOwogCQlpZiAoUFFwdXRsaW5lKGNvbiwgc3FsLmRhdGEpKQogCQkJcGdf ZmF0YWwoIlBRcHV0bGluZSBmYWlsZWQiKTsKQEAgLTUxMTYsNjIgKzUxNzAsOSBAQCBpbml0UG9w dWxhdGVUYWJsZUNvcHlUZXh0KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJsZSwgaW50NjQg YmFzZSwKIAkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCWJyZWFrOwogCi0JCS8qCi0JCSAqIElm IHdlIHdhbnQgdG8gc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgbG9nZ2luZywgcHJpbnQgYSBtZXNz YWdlIGVhY2gKLQkJICogMTAwayBpbnNlcnRlZCByb3dzLgotCQkgKi8KLQkJaWYgKCghdXNlX3F1 aWV0KSAmJiAoaiAlIDEwMDAwMCA9PSAwKSkKLQkJewotCQkJZG91YmxlCQllbGFwc2VkX3NlYyA9 IFBHX1RJTUVfR0VUX0RPVUJMRShwZ190aW1lX25vdygpIC0gc3RhcnQpOwotCQkJZG91YmxlCQly ZW1haW5pbmdfc2VjID0gKChkb3VibGUpIHRvdGFsIC0gaikgKiBlbGFwc2VkX3NlYyAvIGo7Ci0K LQkJCWNoYXJzID0gZnByaW50ZihzdGRlcnIsIElOVDY0X0ZPUk1BVCAiIG9mICIgSU5UNjRfRk9S TUFUICIgdHVwbGVzICglZCUlKSBvZiAlcyBkb25lIChlbGFwc2VkICUuMmYgcywgcmVtYWluaW5n ICUuMmYgcykiLAotCQkJCQkJCWosIHRvdGFsLAotCQkJCQkJCShpbnQpICgoaiAqIDEwMCkgLyB0 b3RhbCksCi0JCQkJCQkJdGFibGUsIGVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjKTsKLQotCQkJ LyoKLQkJCSAqIElmIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvbmdlciB0aGFu IHRoZSBjdXJyZW50Ci0JCQkgKiBvbmUsIGFkZCBzcGFjZXMgdG8gdGhlIGN1cnJlbnQgbGluZSB0 byBmdWxseSBvdmVyd3JpdGUgYW55Ci0JCQkgKiByZW1haW5pbmcgY2hhcmFjdGVycyBmcm9tIHRo ZSBwcmV2aW91cyBtZXNzYWdlLgotCQkJICovCi0JCQlpZiAocHJldl9jaGFycyA+IGNoYXJzKQot CQkJCWZwcmludGYoc3RkZXJyLCAiJSpjIiwgcHJldl9jaGFycyAtIGNoYXJzLCAnICcpOwotCQkJ ZnB1dGMoZW9sLCBzdGRlcnIpOwotCQkJcHJldl9jaGFycyA9IGNoYXJzOwotCQl9Ci0JCS8qIGxl dCdzIG5vdCBjYWxsIHRoZSB0aW1pbmcgZm9yIGVhY2ggcm93LCBidXQgb25seSBlYWNoIDEwMCBy b3dzICovCi0JCWVsc2UgaWYgKHVzZV9xdWlldCAmJiAoaiAlIDEwMCA9PSAwKSkKLQkJewotCQkJ ZG91YmxlCQllbGFwc2VkX3NlYyA9IFBHX1RJTUVfR0VUX0RPVUJMRShwZ190aW1lX25vdygpIC0g c3RhcnQpOwotCQkJZG91YmxlCQlyZW1haW5pbmdfc2VjID0gKChkb3VibGUpIHRvdGFsIC0gaikg KiBlbGFwc2VkX3NlYyAvIGo7Ci0KLQkJCS8qIGhhdmUgd2UgcmVhY2hlZCB0aGUgbmV4dCBpbnRl cnZhbCAob3IgZW5kKT8gKi8KLQkJCWlmICgoaiA9PSB0b3RhbCkgfHwgKGVsYXBzZWRfc2VjID49 IGxvZ19pbnRlcnZhbCAqIExPR19TVEVQX1NFQ09ORFMpKQotCQkJewotCQkJCWNoYXJzID0gZnBy aW50ZihzdGRlcnIsIElOVDY0X0ZPUk1BVCAiIG9mICIgSU5UNjRfRk9STUFUICIgdHVwbGVzICgl ZCUlKSBvZiAlcyBkb25lIChlbGFwc2VkICUuMmYgcywgcmVtYWluaW5nICUuMmYgcykiLAotCQkJ CQkJCQlqLCB0b3RhbCwKLQkJCQkJCQkJKGludCkgKChqICogMTAwKSAvIHRvdGFsKSwKLQkJCQkJ CQkJdGFibGUsIGVsYXBzZWRfc2VjLCByZW1haW5pbmdfc2VjKTsKLQotCQkJCS8qCi0JCQkJICog SWYgdGhlIHByZXZpb3VzIHByb2dyZXNzIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJl bnQKLQkJCQkgKiBvbmUsIGFkZCBzcGFjZXMgdG8gdGhlIGN1cnJlbnQgbGluZSB0byBmdWxseSBv dmVyd3JpdGUgYW55Ci0JCQkJICogcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGUgcHJldmlv dXMgbWVzc2FnZS4KLQkJCQkgKi8KLQkJCQlpZiAocHJldl9jaGFycyA+IGNoYXJzKQotCQkJCQlm cHJpbnRmKHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKLQkJCQlmcHV0 Yyhlb2wsIHN0ZGVycik7Ci0JCQkJcHJldl9jaGFycyA9IGNoYXJzOwotCi0JCQkJLyogc2tpcCB0 byB0aGUgbmV4dCBpbnRlcnZhbCAqLwotCQkJCWxvZ19pbnRlcnZhbCA9IChpbnQpIGNlaWwoZWxh cHNlZF9zZWMgLyBMT0dfU1RFUF9TRUNPTkRTKTsKLQkJCX0KLQkJfQorCQlzaG93UG9wdWxhdGVU YWJsZUNvcHlQcm9ncmVzcyh0YWJsZSwgayArIDEsIHRvdGFsKTsKIAl9CiAKLQlpZiAoY2hhcnMg IT0gMCAmJiBlb2wgIT0gJ1xuJykKLQkJZnByaW50ZihzdGRlcnIsICIlKmNcciIsIGNoYXJzLCAn ICcpOwkvKiBDbGVhciB0aGUgY3VycmVudCBsaW5lICovCiAKIAlpZiAoUFFwdXRsaW5lKGNvbiwg IlxcLlxuIikpCiAJCXBnX2ZhdGFsKCJ2ZXJ5IGxhc3QgUFFwdXRsaW5lIGZhaWxlZCIpOwpAQCAt NTQ0OCw2ICs1NDQ5LDExIEBAIGluaXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShQR2Nvbm4gKmNv biwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCiAJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsg aSA8IHN0YXJ0ICsgYmFzZTsgaSsrKQogCXsKIAkJaW5pdF9yb3coY29uLCBpLCBiYXNlLCBjb2x1 bW5Db3VudGVyKTsKKworCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQorCQkJYnJlYWs7CisKKwkJc2hv d1BvcHVsYXRlVGFibGVDb3B5UHJvZ3Jlc3ModGFibGUsIGksIGJhc2UgKiBzY2FsZSk7CiAJfQog CiAJcmVzID0gUFFnZXRSZXN1bHQoY29uKTsKQEAgLTU1MzIsNiArNTUzOCw4IEBAIGluaXRHZW5l cmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQogCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJh dGluZyBkYXRhIChjbGllbnQtc2lkZSBhcyAlcyB0cmFuc2FjdGlvbiVzKSBpbiAiLAogCQkJbXVs dGlfeGFjdCA/ICJtdWx0aXBsZSIgOiAic2luZ2xlIiwgbXVsdGlfeGFjdCA/ICJzIiA6ICIiKTsK IAorCWRhdGFfbG9hZF9zdGFydCA9IHBnX3RpbWVfbm93KCk7CisKIAlzd2l0Y2ggKGRhdGFfZ2Vu ZXJhdGlvbl90eXBlKQogCXsKIAkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9URVhUOgot LSAKMi40My4wCgpGcm9tIGFmZTNmNjliMjMxOTBmMzc1YjU3ZDVjZjBhM2VhZTJjZDhlNDBjYWEg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEJvcmlzIE1pcm9ub3YgPGJvcmlzLm1pcm9u b3ZAZ21haWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDE3OjA3OjE2ICswNzAwClN1Ympl Y3Q6IFtQQVRDSCB2OCAyMy8yM10gQWRkaW5nIG11bHRpLXRyYW5zYWN0aW9uIG1vZGUgdG8gY2xp ZW50LXNpZGUgZGF0YQogZ2VuZXJhdGlvbgoKLS0tCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j ICAgICAgICAgICAgICAgICAgICB8IDUyICsrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmluL3Bn YmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbCB8IDQ3ICsrKysrKysrKy0tLS0tLS0t LQogMiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYwppbmRleCBlM2UwZTA3Mzc5Mi4uMWI3M2RhOTA0YWQgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAt NTEzMCwyMiArNTEzMCwyMiBAQCBzaG93UG9wdWxhdGVUYWJsZUNvcHlQcm9ncmVzcyhjb25zdCBj aGFyICp0YWJsZSwgaW50NjQgY3VycmVudCwgaW50NjQgdG90YWwpCiB9CiAKIHN0YXRpYyB2b2lk Ci1pbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJs ZSwgaW50NjQgYmFzZSwKK2luaXRQb3B1bGF0ZVRhYmxlQ29weVRleHQoUEdjb25uICpjb24sIGNv bnN0IGNoYXIgKnRhYmxlLCBpbnQgY291bnRlciwgaW50NjQgYmFzZSwKIAkJCQkJCSAgaW5pdFJv d01ldGhvZCBpbml0X3JvdykKIHsKIAlpbnQJCQluOwotCWludDY0CQlrOwogCVBHcmVzdWx0ICAg KnJlczsKIAlQUUV4cEJ1ZmZlckRhdGEgc3FsOwogCWNoYXIJCWNvcHlfc3RhdGVtZW50WzI1Nl07 CiAJY29uc3QgY2hhciAqY29weV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgZnJvbSBzdGRpbiI7 Ci0JaW50NjQJCXRvdGFsID0gYmFzZSAqIHNjYWxlOworCWludDY0CQlzdGFydCA9IGJhc2UgKiBj b3VudGVyOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOwogCiAJLyogVXNlIENPUFkgd2l0aCBG UkVFWkUgb24gdjE0IGFuZCBsYXRlciBmb3IgYWxsIG9yZGluYXJ5IHRhYmxlcyAqLwogCWlmICgo UFFzZXJ2ZXJWZXJzaW9uKGNvbikgPj0gMTQwMDAwKSAmJgotCQlnZXRfdGFibGVfcmVsa2luZChj b24sIHRhYmxlKSA9PSBSRUxLSU5EX1JFTEFUSU9OKQorCQlnZXRfdGFibGVfcmVsa2luZChjb24s IHRhYmxlKSA9PSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCSFtdWx0aV94YWN0KQogCQljb3B5X3N0 YXRlbWVudF9mbXQgPSAiY29weSAlcyBmcm9tIHN0ZGluIHdpdGggKGZyZWV6ZSBvbikiOwogCiAK QEAgLTUxNjEsMTYgKzUxNjEsMTYgQEAgaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChQR2Nvbm4g KmNvbiwgY29uc3QgY2hhciAqdGFibGUsIGludDY0IGJhc2UsCiAJCXBnX2ZhdGFsKCJ1bmV4cGVj dGVkIGNvcHkgaW4gcmVzdWx0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOwogCVBRY2xlYXIo cmVzKTsKIAotCWZvciAoayA9IDA7IGsgPCB0b3RhbDsgaysrKQorCWZvciAoaW50NjRfdCBpID0g c3RhcnQ7IGkgPCBzdGFydCArIGJhc2U7IGkrKykKIAl7Ci0JCWluaXRfcm93KCZzcWwsIGspOwor CQlpbml0X3Jvdygmc3FsLCBpKTsKIAkJaWYgKFBRcHV0bGluZShjb24sIHNxbC5kYXRhKSkKIAkJ CXBnX2ZhdGFsKCJQUXB1dGxpbmUgZmFpbGVkIik7CiAKIAkJaWYgKENhbmNlbFJlcXVlc3RlZCkK IAkJCWJyZWFrOwogCi0JCXNob3dQb3B1bGF0ZVRhYmxlQ29weVByb2dyZXNzKHRhYmxlLCBrICsg MSwgdG90YWwpOworCQlzaG93UG9wdWxhdGVUYWJsZUNvcHlQcm9ncmVzcyh0YWJsZSwgaSwgYmFz ZSAqIHNjYWxlKTsKIAl9CiAKIApAQCAtNTE5Myw5ICs1MTkzLDYgQEAgaW5pdEdlbmVyYXRlRGF0 YUNsaWVudFNpZGVUZXh0RnJtdChQR2Nvbm4gKmNvbikKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlRF WFQgbW9kZS4uLlxuIik7CiAKLQlpZiAobXVsdGlfeGFjdCkKLQkJZnByaW50ZihzdGRlcnIsICJX QVJOSU5HISBNdWx0aXBsZSB0cmFuc2FjdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBt b2RlXG4iKTsKLQogCS8qCiAJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9u IHRvIGVuYWJsZSB0aGUgYmFja2VuZCdzCiAJICogZGF0YS1sb2FkaW5nIG9wdGltaXphdGlvbnMK QEAgLTUyMDUsMTUgKzUyMDIsMjggQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVUZXh0RnJt dChQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwogCWluaXRU cnVuY2F0ZVRhYmxlcyhjb24pOwogCi0JLyoKLQkgKiBmaWxsIGJyYW5jaGVzLCB0ZWxsZXJzLCBh Y2NvdW50cyBpbiB0aGF0IG9yZGVyIGluIGNhc2UgZm9yZWlnbiBrZXlzCi0JICogYWxyZWFkeSBl eGlzdAotCSAqLwotCWluaXRQb3B1bGF0ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5jaF9icmFu Y2hlcyIsIG5icmFuY2hlcywgaW5pdEJyYW5jaCk7Ci0JaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4 dChjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCBudGVsbGVycywgaW5pdFRlbGxlcik7Ci0JaW5pdFBv cHVsYXRlVGFibGVDb3B5VGV4dChjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgbmFjY291bnRzLCBp bml0QWNjb3VudCk7CisJaWYgKG11bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAi Y29tbWl0Iik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNjYWxlOyBpKyspCisJeworCQlpZiAo bXVsdGlfeGFjdCkKKwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCQkvKgor CQkgKiBmaWxsIGJyYW5jaGVzLCB0ZWxsZXJzLCBhY2NvdW50cyBpbiB0aGF0IG9yZGVyIGluIGNh c2UgZm9yZWlnbiBrZXlzCisJCSAqIGFscmVhZHkgZXhpc3QKKwkJICovCisJCWluaXRQb3B1bGF0 ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsIGksIG5icmFuY2hlcywgaW5p dEJyYW5jaCk7CisJCWluaXRQb3B1bGF0ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5jaF90ZWxs ZXJzIiwgaSwgbnRlbGxlcnMsIGluaXRUZWxsZXIpOworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlU ZXh0KGNvbiwgInBnYmVuY2hfYWNjb3VudHMiLCBpLCBuYWNjb3VudHMsIGluaXRBY2NvdW50KTsK IAotCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisJCWlmIChtdWx0aV94YWN0KQor CQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAoIW11bHRpX3hh Y3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CiB9CiAKIApAQCAtNTQyNiw5 ICs1NDM2LDkgQEAgaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KFBHY29ubiAqY29uLCBjaGFy ICp0YWJsZSwgY2hhciAqY29sdW1ucywKIAogCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpFIG9uIHYx NCBhbmQgbGF0ZXIgZm9yIGFsbCBvcmRpbmFyeSB0YWJsZXMgKi8KIAlpZiAoKFBRc2VydmVyVmVy c2lvbihjb24pID49IDE0MDAwMCkgJiYKLQkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJsZSkg PT0gUkVMS0lORF9SRUxBVElPTikKLQkJaWYgKCFtdWx0aV94YWN0KQotCQkJY29weV9zdGF0ZW1l bnRfZm10ID0gImNvcHkgJXMgKCVzKSBmcm9tIHN0ZGluIHdpdGggKGZvcm1hdCBiaW5hcnksIGZy ZWV6ZSBvbikiOworCQlnZXRfdGFibGVfcmVsa2luZChjb24sIHRhYmxlKSA9PSBSRUxLSU5EX1JF TEFUSU9OICYmCisJCSFtdWx0aV94YWN0KQorCQljb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAl cyAoJXMpIGZyb20gc3RkaW4gd2l0aCAoZm9ybWF0IGJpbmFyeSwgZnJlZXplIG9uKSI7CiAKIAlu ID0gcGdfc25wcmludGYoY29weV9zdGF0ZW1lbnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksIGNv cHlfc3RhdGVtZW50X2ZtdCwgdGFibGUsIGNvbHVtbnMpOwogCWlmIChuID49IHNpemVvZihjb3B5 X3N0YXRlbWVudCkpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93 aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVy LnBsCmluZGV4IGFjYjFlMzFkM2U4Li40NjU2OWIwZWIzNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKKysrIGIvc3JjL2Jpbi9wZ2JlbmNo L3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKQEAgLTE4OSw3ICsxODksNyBAQCAkbm9kZS0+ cGdiZW5jaCgKIGNoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAodW5uZXN0KScp OwogCiAKLSMgVGVzdCBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIHdpdGggQ09QWSBURVhUCisjIFRl c3QgY2xpZW50LXNpZGUgZ2VuZXJhdGlvbiB3aXRoIENPUFkgVEVYVAogJG5vZGUtPnBnYmVuY2go CiAJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRnJywKIAkwLApAQCAtMjAwLDQ1ICsyMDAs NDggQEAgJG5vZGUtPnBnYmVuY2goCiAJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRl IGFzIHNpbmdsZSB0cmFuc2FjdGlvbn0sCiAJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQogCV0s Ci0JJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIFRFWFQnKTsKKwkncGdiZW5jaCAt LWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVYVCAoc2luZ2xlIFhBQ1QgIzEpJyk7CiAKLSMgQ2hl Y2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorIyBDaGVj ayBkYXRhIHN0YXRlLCBhZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCiBjaGVja19k YXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKHRleHQpJyk7CiAKICRub2RlLT5wZ2JlbmNo KAotCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWcnLAorCSctLWluaXRpYWxpemUgLS1p bml0LXN0ZXBzPWR0U2cnLAogCTAsCiAJW3Fye14kfV0sCiAJWwogCQlxcntkcm9wcGluZyBvbGQg dGFibGVzfSwKIAkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKLQkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwo Y2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zfSwKKwkJcXJ7Z2VuZXJhdGluZyBk YXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9ufSwKKwkJcXJ7XGQgb2YgXGQr IHR1cGxlcyBcKFxkJVwpIG9mIHBnYmVuY2hfYnJhbmNoZXMgZG9uZX0sCisJCXFye1xkIG9mIFxk KyB0dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX3RlbGxlcnMgZG9uZX0sCisJCXFye1xkIG9mIFxk KyB0dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX2FjY291bnRzIGRvbmV9LAogCQlxcntkb25lIGlu IFxkK1wuXGRcZCBzIH0KIAldLAotCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBU RVhUJyk7CisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIFRFWFQgKHNpbmdsZSBY QUNUICMyKScpOwogCi0jIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEg Z2VuZXJhdGlvbi4KKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0YSBn ZW5lcmF0aW9uLgogY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlICh0ZXh0KScp OwogCi0KLSMgVGVzdCBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIHdpdGggQ09QWSBCSU5BUlkKICRu b2RlLT5wZ2JlbmNoKAotCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0YycsCisJJy0taW5p dGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRNZycsCiAJMCwKIAlbcXJ7XiR9XSwKIAlbCiAJCXFye2Ry b3BwaW5nIG9sZCB0YWJsZXN9LAogCQlxcntjcmVhdGluZyB0YWJsZXN9LAotCQlxcntnZW5lcmF0 aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb259LAorCQlxcntnZW5l cmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBtdWx0aXBsZSB0cmFuc2FjdGlvbnN9LAogCQlx cntkb25lIGluIFxkK1wuXGRcZCBzIH0KIAldLAotCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGll bnQtc2lkZSBCSU5BUlknKTsKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVY VCAobXVsdGlwbGUgWEFDVHMpJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50 LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1z aWRlICh0ZXh0KScpOwogCi0jIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRh dGEgZ2VuZXJhdGlvbi4KLWNoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmlu YXJ5KScpOwogCisjIFRlc3QgY2xpZW50LXNpZGUgZ2VuZXJhdGlvbiB3aXRoIENPUFkgQklOQVJZ CiAkbm9kZS0+cGdiZW5jaCgKLQknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdFNjJywKKwkn LS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdGMnLAogCTAsCiAJW3Fye14kfV0sCiAJWwpAQCAt MjQ3LDI0ICsyNTAsMjQgQEAgJG5vZGUtPnBnYmVuY2goCiAJCXFye2dlbmVyYXRpbmcgZGF0YSBc KGNsaWVudC1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvbn0sCiAJCXFye2RvbmUgaW4gXGQrXC5c ZFxkIHMgfQogCV0sCi0JJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIEJJTkFSWScp OworCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBCSU5BUlkgKHNpbmdsZSBYQUNU ICMxKScpOwogCi0jIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEgZ2Vu ZXJhdGlvbi4KKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0YSBnZW5l cmF0aW9uLgogY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlIChiaW5hcnkpJyk7 CiAKICRub2RlLT5wZ2JlbmNoKAotCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWMnLAor CSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0U2MnLAogCTAsCiAJW3Fye14kfV0sCiAJWwog CQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKIAkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKLQkJcXJ7 Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zfSwK KwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9u fSwKIAkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CiAJXSwKLQkncGdiZW5jaCAtLWluaXQtc3Rl cHMgY2xpZW50LXNpZGUgQklOQVJZJyk7CisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1z aWRlIEJJTkFSWSAoc2luZ2xlIFhBQ1QgIzIpJyk7CiAKLSMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0 ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRl ciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCiBjaGVja19kYXRhX3N0YXRlKCRub2RlLCAn Y2xpZW50LXNpZGUgKGJpbmFyeSknKTsKIAogJG5vZGUtPnBnYmVuY2goCkBAIC0yNzksNyArMjgy LDcgQEAgJG5vZGUtPnBnYmVuY2goCiAJXSwKIAkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50 LXNpZGUgQklOQVJZJyk7CiAKLSMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUg ZGF0YSBnZW5lcmF0aW9uLgorIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBjbGllbnQtc2lkZSBk YXRhIGdlbmVyYXRpb24uCiBjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGJp bmFyeSknKTsKIAogCi0tIAoyLjQzLjAKCg== --_004_PH0PR08MB70208182284EBA18F64228798877APH0PR08MB7020namp_--