Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1naJtu-0002lI-5K for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Apr 2022 16:13:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1naJtr-0003RI-TC for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Apr 2022 16:13:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1naJtr-0003R7-5q for pgsql-hackers@lists.postgresql.org; Fri, 01 Apr 2022 16:13:23 +0000 Received: from mail-eopbgr70125.outbound.protection.outlook.com ([40.107.7.125] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1naJti-0002Gj-Ek for pgsql-hackers@lists.postgresql.org; Fri, 01 Apr 2022 16:13:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LjdmAjuoDEnqhWFPawsAwyxHSBSPi/hnuVz9aLrkp+aJT6GXXGobwFBzCLlW8DEki+lGnYr2cIL2VCvS5WoGat6kMjLynMsD+ed+dtGrPDGMBGCOoN5SYEq4msjFdEGKgIZY2U8KBMZO0iM4VegrB0mx7sPMaoCCQYLh75hUD9G/w6xGnoRXBV294ahlTOpVms3pvHgN3hob6IIu7Me65rmDrL25D0/vuI8PldFC5WjOEK1oxcZhdQ5LanjtC9B4yQdc91vdDU7B/1nqANRKOpvxsQj5cyre7PIaYShAJNWuC6bo1OASt3xuq1Zhr6GHTwfIO6ws7nwS0C0zMqscvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=C9ZWbTB47filOjeo0jRZV0mkP6ahXOmdkHvCF43CC5M=; b=NQIMuWnxITlBIG1sV43hkSETHpwXtmviHEgGLNKRpqXBta1Bp+ErDN7wT9adtEby+IxtEqlS+Wo/1wM7bF+eylXp7tNjC0sLfDnjDiav+elp62rulN4b0+timsCCAaPai0yCmcE+3xbqWcq0CkSvvclyam9i0ZGqrTTgqcpJCsYPjEWcOZfUiBKHM5OvlNcDim4D6tUylzaneQvh+ASj09pv/SwroBQ6sbIYB9D6tZJthNsHWpeTi2MzAyDA0yBB4oIXs2hcf0D4JMBhZvNFm3EWLDRaV0ANnXmFKk7TMw+/x4Uy7Bzj85J1uUAno/4wa2q/BHwQktIJBuc44sokmw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C9ZWbTB47filOjeo0jRZV0mkP6ahXOmdkHvCF43CC5M=; b=HkCb7qL34+gj6EDa/gOW2jWYf0ftA9ftsg0G/DW18XP/fOTFelbk22Y/ONTra/r32we9RMa0y6aVG/HbsoGzhVHC3ttRw0uIyizFdVMHvV18FQ/QPpX20n3NdP76qKOaQJKT9yHTpkGdGZ6WDUn/45YWMMFee6wrb0WjDWoHq2Y= Received: from HE1PR8303MB0073.EURPRD83.prod.outlook.com (2603:10a6:23:17::20) by DB7PR83MB0265.EURPRD83.prod.outlook.com (2603:10a6:10:c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.9; Fri, 1 Apr 2022 16:13:07 +0000 Received: from HE1PR8303MB0073.EURPRD83.prod.outlook.com ([fe80::20ae:da80:7a50:8a0e]) by HE1PR8303MB0073.EURPRD83.prod.outlook.com ([fe80::20ae:da80:7a50:8a0e%12]) with mapi id 15.20.5144.016; Fri, 1 Apr 2022 16:13:07 +0000 From: Jelte Fennema To: Justin Pryzby CC: Tom Lane , Robert Haas , Andres Freund , Jacob Champion , "pgsql-hackers@lists.postgresql.org" Subject: Re: Add non-blocking version of PQcancel Thread-Topic: Add non-blocking version of PQcancel Thread-Index: AQHYReNf4fx8DGCPWkeBY7c0mwFEGg== Date: Fri, 1 Apr 2022 16:13:07 +0000 Message-ID: References: <3150365.1648158113@sss.pgh.pa.us> <20220324224909.4tnubqv2owmfoyoc@alap3.anarazel.de> <3453535.1648234019@sss.pgh.pa.us> <3457746.1648236890@sss.pgh.pa.us> <20220331054704.GL28503@telsasoft.com> In-Reply-To: <20220331054704.GL28503@telsasoft.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-04-01T16:13:06.169Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 12a103fd-6c38-4df7-b00d-08da13fa821f x-ms-traffictypediagnostic: DB7PR83MB0265:EE_ x-ms-exchange-atpmessageproperties: SA|SL x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: im1LnLsJO56lucYshvIMPpbo13cqknVQ/iXuVQbZ6G95vS/mu5dPhRwVK3RLC4tlMHqfeJwtYuygsMgVX729nPZzXLjQlDMClGFbcXgRgyOnj1Pk13MluwdZqCcptiB7CCqPNn2QTg/3+Ul3eRea0bsYGoZOsYrjLcRljzT6hs3Z6ouWJShox/ZAIRjoBdU+hNKeREXVWGv8Gs1hdZps5ZVp4u24B7IgJFJBZcpHpw8covgeJp92gOUOwpHDW23tWvTE+XK1CXrhJBgbZ8Tul1xsK+hI3vgReUy5LLlDhvppWAfnlozDI33qCCLEtRUivColH/+0QbvkFjbFj+IiyVR4WLKupvgjYN2VjCJiWtEISejjeYZFWZKRThvN1jMC8UFVq4gwTGifqmouG0TcrcGe+2rEFjtcR3r49cutPTJkE2laKsQAF+jxiiNaZbvWzV/sPXDUzyYczqpVWlJ7s3JrQXxRxhpw5FALy08MdZ99VkDV62qkOECFpWRpbtvn2B0moPsEgqe5A5eCku3HhRKCFWOn5YNXlDzTL2VXL9SmNFeD7sX6NOSMyQK4x0rGLHvgWZZQSKVjHZyp73k1OaNvJZppWaScKDdaHyt9FzJvWwpCFo8GsWbPYpJhCaOhJ6A5ttd7R/bPNS7bdq5HMVLE+Me/t/TS97EoqJYU9gUhQ9mvjKgl06dzQ+s9etUUbDSEqA6v/i+o9pTM3hqroGeKsTBFVSBF4FBYcq7TfzGzCeEB1nqI131ytv6lPCuIVR9hMkKs/y7YGYdJzKR++Fz1bcGXQGRonIDz1B0VkWAGQv1ogICicqyBZbhZx11LG1U6yC/zRXOoYOa+mm4YzA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR8303MB0073.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(451199009)(10290500003)(82950400001)(54906003)(4326008)(6916009)(38070700005)(91956017)(33656002)(966005)(64756008)(508600001)(76116006)(66476007)(66446008)(38100700002)(55016003)(71200400001)(82960400001)(122000001)(66946007)(8990500004)(86362001)(316002)(66556008)(8676002)(26005)(186003)(99936003)(9686003)(52536014)(2906002)(7696005)(6506007)(5660300002)(8936002)(83380400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ZVpmrPOObK7b9SvncaKQPJjBOD81qhJsmF5LYryWrTSJG2ol3ULQHmmLR3?= =?iso-8859-1?Q?EiexzOZzz8ZiDkCaO8A+9zQBjW6lFfAg/3/jr7EtyuGOrxeF9AuxOb/cRd?= =?iso-8859-1?Q?N0p8G1/D0Z1HoboXGyIVRxQztHyqFJztBXTAkMqG9QftzsCUS7ZjFu7rWq?= =?iso-8859-1?Q?L9hi79Fm6/CmFwRPaZJQnrrQYEKpqgcgbmP04ePqCt0tyLngK9i1iAyCkC?= =?iso-8859-1?Q?rvBYRR3AUQZSfvt9Ca8XsPAIkhEv3ZHBSndMtv0jEfi+nTLGW36+Wrw7Yg?= =?iso-8859-1?Q?6N0t2SpsIumoSBJst58wrvs2BdJFYW3v2260DVGCxnrDB7auLliXALPYQ/?= =?iso-8859-1?Q?OpOUu8ggg/P5GlFZEHlz9Txn9Yq1GIJA6A97wbV7cm8yOoQOSfj5QRhgVn?= =?iso-8859-1?Q?55AouMu3mbMEEecIV0d/QiMX8FSWDPJsERanoGGUI4qWx9MRpgp6CRkJum?= =?iso-8859-1?Q?7XDuDBy3QO7vw1M6QteolqN7JesZ3Vx7JGCBqZwqBNRD+Rn9kNT/4HtVXs?= =?iso-8859-1?Q?Tz67NELrRcc91oA6CHD/2KiEsdvJ2vl2pvqvmCy0TJKdgO3ZLox+MrcOoR?= =?iso-8859-1?Q?0R0gUhR+Ti8qMkmpVcBeHUJ1okPKJmT+fYPaGsOTqbwErzqjjBMNYowkIK?= =?iso-8859-1?Q?3w0zsT4JAgh8xjTLnMHGp1wJfuvjj2DwxZ57emLtL523X5/KW9wEE5qSxc?= =?iso-8859-1?Q?bBkFdDF3o3Vs20IKUyQdOxxtv4VsRMAk2RiD7aZAAWvQb2dq5TiVF1OrU2?= =?iso-8859-1?Q?vpdodsSgTog/LWNtnDhuJre83+G0vtFgyo/T+H9P6y7nSUo6lIjE/T4fNo?= =?iso-8859-1?Q?fd28lz7oSucLbQW0ptM0HK62oTjPuCc5AZBiVaRdHk40pdrHBNreis/RhP?= =?iso-8859-1?Q?tTuzcHGh4dLkRpDjoGezJ+CkIEaYHmbz9dgXiY1a+Sp+4VY2z+GXlz1hgH?= =?iso-8859-1?Q?f4tWXXg2/6TQF4eln0mnr7S5UK8EFXcLVRDnESd7ePHN0/o8N+qiEjhAyn?= =?iso-8859-1?Q?BFt1f+l7GXWeKOhOrKjJnB0Y5GEYr5ChPdQt/0yDF+QtrHiijGeNdjMmdb?= =?iso-8859-1?Q?8LVkqrMw5i38yLKEgTBfuBANe/3q7P7NguQKSczsARMjebkn+jh2BSI94E?= =?iso-8859-1?Q?bUbgNGEBPhG//Ddg2oRPnJqprO8hxVF77A3srvRTSQItQN1hyDe/zX+XNj?= =?iso-8859-1?Q?WWct7S3zvKCsM3v4Di2DltDhDPbtIcBPttic120jFYHFc1TjJr0KzT5IeR?= =?iso-8859-1?Q?bxeSbVDrgEuDt1XPHwLrvL++j9AZt1slkaSlztvFB5q5bHsVDvf8DFYm7O?= =?iso-8859-1?Q?ecCebi6hZseZyX2M9fenzpquhWtFUcZNDuCfe/RznkAQQQjpszqtlXqL82?= =?iso-8859-1?Q?QTxAz3LVMrVmoIityMZaFq9FXGK+zsDlp0TyL9hUeyWtEITGB9xlovz+yW?= =?iso-8859-1?Q?asjAF7H/2qnvk+gGGS0dSfy6or9iIHiyY88gAAr6HqnsWHjLrs6pTZVkOr?= =?iso-8859-1?Q?Yfwbbg9/UXf3baJFqaHigzMXeuUk6QcCUOcZkXq7x0qxpYExS4gTDeAo9j?= =?iso-8859-1?Q?/6T6nRsFsurGJKZeFDgT5gNlwhRZctON2c8/bO34ZLiE/ZR80C6MuAzGGT?= =?iso-8859-1?Q?uqXJ6bMUPicbuoVA7TbT0GFkMXNAmSCaWXYcD7TH8DEZS9vRLQaaAKEBtT?= =?iso-8859-1?Q?7JyBVFGc+OIUC6WDRDwyrK0+//l54AIIGOHlFoV6cCIyoM1l4jPbWIke7s?= =?iso-8859-1?Q?Lh7xDGKAdXyR5sdxe/RhvtFMVIOKOjuBKFl5JVGSM4xl8aVBcgke157oUP?= =?iso-8859-1?Q?cQYD9n1sOQ=3D=3D?= Content-Type: multipart/mixed; boundary="_002_HE1PR8303MB00732A831BE871DF360A293CF7E09HE1PR8303MB0073_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: HE1PR8303MB0073.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12a103fd-6c38-4df7-b00d-08da13fa821f X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Apr 2022 16:13:07.0663 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: a4WpDwnDcQiR5DyUPEUuvNmaUmNYDLWaAD8iLGNgtVBxp6yjxMNOBCiypSo0w8oVV2xHXr9pEfOUkhUJGp6WDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR83MB0265 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_HE1PR8303MB00732A831BE871DF360A293CF7E09HE1PR8303MB0073_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Attached is the latest version of this patch, which I think is now in a sta= te=0A= in which it could be merged. The changes are:=0A= =0A= 1. Don't do host and address discovery for cancel connections. It now =0A= reuses raddr and whichhost from the original connection. This makes=0A= sure the cancel always goes to the right server, even when DNS records = =0A= change or another server would be chosen now in case of connnection=0A= strings containing multiple hosts.=0A= 2. Fix the windows CI failure. This is done by both using the threadsafe co= de =0A= in the the dblink cancellation code, and also by not erroring a cancella= tion=0A= connection on windows in case of any errors. This last one is to work ar= ound=0A= the issue described in this thread:=0A= https://www.postgresql.org/message-id/flat/90b34057-4176-7bb0-0dbb-9822a= 5f6425b%40greiz-reinsdorf.de=0A= =0A= I also went over most of the functions that take a PGconn, to see if they n= eeded=0A= extra checks to guard against being executed on cancel. So far all seemed f= ine,=0A= either they should be okay to execute against a cancellation connection, or= =0A= they failed already anyway because a cancellation connection never reaches= =0A= the CONNECTION_OK state. So I didn't add any checks specifically for cancel= =0A= connections. I'll do this again next week with a fresh head, to see if I ha= ven't =0A= missed any cases.=0A= =0A= I'll try to find some time early next week to implement non-blocking cancel= lation=0A= usage in postgres_fdw, i.e. the bonus task I mentioned in my previous email= . But =0A= I don't think it's necessary to have that implemented before merging.= --_002_HE1PR8303MB00732A831BE871DF360A293CF7E09HE1PR8303MB0073_ Content-Type: application/octet-stream; name="0002-Add-non-blocking-version-of-PQcancel.patch" Content-Description: 0002-Add-non-blocking-version-of-PQcancel.patch Content-Disposition: attachment; filename="0002-Add-non-blocking-version-of-PQcancel.patch"; size=46580; creation-date="Fri, 01 Apr 2022 16:12:45 GMT"; modification-date="Fri, 01 Apr 2022 16:12:45 GMT" Content-Transfer-Encoding: base64 RnJvbSA4Mjc3YzNmNWVlYWYxM2YwMThhYjliNTg5OTY1MGYxMDljNGE0NWI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDk6NTI6MDUgKzAxMDAKU3ViamVjdDogW1BB VENIIDIvMl0gQWRkIG5vbi1ibG9ja2luZyB2ZXJzaW9uIG9mIFBRY2FuY2VsCgpUaGlzIHBhdGNo IGRvZXMgdHdvIHRoaW5nczoKMS4gQ2hhbmdlIFBRcmVxdWVzdENhbmNlbCB0byB1c2UgdGhlIHJl Z3VsYXIgY29ubmVjdGlvbiBlc3RhYmxpc2hlbWVudCwKICAgdG8gYWRkcmVzcyBhIGZldyBzZWN1 cml0eSBpc3N1ZXMuCjIuIEFkZCBQUXJlcXVlc3RDYW5jZWxTdGFydCB3aGljaCBpcyBhIHRocmVh ZCBzYWZlIGFuZCBub24gYmxvY2tpbmcKICAgdmVyc2lvbiBvZiB0aGlzIG5ldyBQUXJlcXVlc3RD YW5jZWwgaW1wbGVtZW50YXRpb24uCgpUaGUgZXhpc3RpbmcgUFFjYW5jZWwgQVBJIGlzIHVzaW5n IGJsb2NraW5nIElPLiBUaGlzIG1ha2VzIFBRY2FuY2VsCmltcG9zc2libGUgdG8gdXNlIGluIGFu IGV2ZW50IGxvb3AgYmFzZWQgY29kZWJhc2UsIHdpdGhvdXQgYmxvY2tpbmcgdGhlCmV2ZW50IGxv b3AgdW50aWwgdGhlIGNhbGwgcmV0dXJucy4KClRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBjYW5jZWxs YXRpb24gQVBJIHRvIGxpYnBxIHdoaWNoIGlzIGNhbGxlZApQUXJlcXVlc3RDYW5jZWxTdGFydC4g VGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gc2VuZCBjYW5jZWxsYXRpb25zIGluIGEKbm9uLWJsb2Nr aW5nIGZhc2hpb24uCgpUaGlzIHBhdGNoIGFsc28gaW5jbHVkZXMgYSB0ZXN0IGZvciB0aGlzIGFs bCBvZiBsaWJwcSBjYW5jZWxsYXRpb24gQVBJcy4KVGhlIHRlc3QgY2FuIGJlIGVhc2lseSBydW4g bGlrZSB0aGlzOgoKICAgIGNkIHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUKICAgIG1h a2UgJiYgLi9saWJwcV9waXBlbGluZSBjYW5jZWwKLS0tCiBjb250cmliL2RibGluay9kYmxpbmsu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgMzEgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L2Nv bm5lY3Rpb24uYyAgICAgICAgICAgICB8ICAxOSArLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgIHwgMjEyICsrKysrKysrKy0tCiBzcmMvZmVfdXRpbHMvY29u bmVjdF91dGlscy5jICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2V4cG9ydHMudHh0ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAzNDEgKysrKysrKysrKysrKysrLS0tCiBzcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMgICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgICAgICB8ICAgMiArLQogc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLmMgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWZlLmggICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtaW50LmggICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L2lz b2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYyAgICAgICAgICB8ICAyOCArLQogLi4uL21vZHVsZXMv bGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxpbmUuYyAgIHwgMjE0ICsrKysrKysrKystCiAxMyBm aWxlcyBjaGFuZ2VkLCA3NDMgaW5zZXJ0aW9ucygrKSwgMTUwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvZGJsaW5rL2RibGluay5jIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMK aW5kZXggYTA2ZDRiZDEyZC4uZjM5MzUzMzFmNiAxMDA2NDQKLS0tIGEvY29udHJpYi9kYmxpbmsv ZGJsaW5rLmMKKysrIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKQEAgLTEzODAsMjIgKzEzODAs MzUgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShkYmxpbmtfY2FuY2VsX3F1ZXJ5KTsKIERhdHVtCiBk YmxpbmtfY2FuY2VsX3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JaW50CQkJcmVzOwogCVBH Y29ubgkgICAqY29ubjsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07 CisJUEdjb25uCSAgICpjYW5jZWxDb25uOworCWNoYXIJICAgKm1zZzsKIAogCWRibGlua19pbml0 KCk7CiAJY29ubiA9IGRibGlua19nZXRfbmFtZWRfY29ubih0ZXh0X3RvX2NzdHJpbmcoUEdfR0VU QVJHX1RFWFRfUFAoMCkpKTsKLQljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwljYW5jZWxD b25uID0gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoY29ubik7CisJaWYgKCFjYW5jZWxDb25uKQorCXsK KwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoIm91dCBvZiBtZW1vcnkiKSk7CisJ fQogCi0JcmVzID0gUFFjYW5jZWwoY2FuY2VsLCBlcnJidWYsIDI1Nik7Ci0JUFFmcmVlQ2FuY2Vs KGNhbmNlbCk7CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQor CXsKKwkJbXNnID0gcGNob21wKFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwkJUFFmaW5p c2goY2FuY2VsQ29ubik7CisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KG1zZykp OworCX0KIAotCWlmIChyZXMgPT0gMSkKLQkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3Rl eHQoIk9LIikpOworCWlmIChQUWNvbm5lY3RDb21wbGV0ZShjYW5jZWxDb25uKSkKKwl7CisJCW1z ZyA9ICJPSyI7CisJfQogCWVsc2UKLQkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQo ZXJyYnVmKSk7CisJeworCQltc2cgPSBwY2hvbXAoUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikp OworCX0KKwlQUWZpbmlzaChjYW5jZWxDb25uKTsKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdf dG9fdGV4dChtc2cpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9j b25uZWN0aW9uLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKaW5kZXggMTI5 Y2E3OTIyMS4uOGFkODEwZDYyMSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29u bmVjdGlvbi5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwpAQCAtMTI2 Myw4ICsxMjYzLDYgQEAgcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShDb25uQ2FjaGVFbnRyeSAqZW50 cnksIGJvb2wgdG9wbGV2ZWwpCiBzdGF0aWMgYm9vbAogcGdmZHdfY2FuY2VsX3F1ZXJ5KFBHY29u biAqY29ubikKIHsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07CiAJ UEdyZXN1bHQgICAqcmVzdWx0ID0gTlVMTDsKIAlUaW1lc3RhbXBUeiBlbmR0aW1lOwogCWJvb2wJ CXRpbWVkX291dDsKQEAgLTEyNzksMTggKzEyNzcsMTMgQEAgcGdmZHdfY2FuY2VsX3F1ZXJ5KFBH Y29ubiAqY29ubikKIAkgKiBJc3N1ZSBjYW5jZWwgcmVxdWVzdC4gIFVuZm9ydHVuYXRlbHksIHRo ZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gbGltaXQgdGhlCiAJICogYW1vdW50IG9mIHRpbWUgdGhhdCB3 ZSBtaWdodCBibG9jayBpbnNpZGUgUFFnZXRDYW5jZWwoKS4KIAkgKi8KLQlpZiAoKGNhbmNlbCA9 IFBRZ2V0Q2FuY2VsKGNvbm4pKSkKKwlpZiAoIVBRcmVxdWVzdENhbmNlbChjb25uKSkKIAl7Ci0J CWlmICghUFFjYW5jZWwoY2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSkKLQkJewotCQkJ ZXJlcG9ydChXQVJOSU5HLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVS RSksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAlcyIsCi0J CQkJCQkJZXJyYnVmKSkpOwotCQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7Ci0JCQlyZXR1cm4gZmFs c2U7Ci0JCX0KLQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisJCWVyZXBvcnQoV0FSTklORywKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJIGVycm1zZygiY291 bGQgbm90IHNlbmQgY2FuY2VsIHJlcXVlc3Q6ICVzIiwKKwkJCQkJCXBjaG9tcChQUWVycm9yTWVz c2FnZShjb25uKSkpKSk7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBHZXQgYW5kIGRpc2Nh cmQgdGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkuICovCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bGlicHEuc2dtbCBiL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCmluZGV4IDFjMjA5MDFjM2MuLjQ1 ZjgwMDFmYmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9saWJwcS5zZ21sCkBAIC0yNjUsNyArMjY1LDcgQEAgUEdjb25uICpQUXNldGRiKGNo YXIgKnBnaG9zdCwKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNvbm5lY3RTdGFydFBh cmFtcyI+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFydFBhcmFtczwvZnVuY3Rp b24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydFBhcmFtczwvcHJpbWFyeT48L2lu ZGV4dGVybT48L3Rlcm0+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFydDwvZnVu Y3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydDwvcHJpbWFyeT48L2luZGV4 dGVybT48L3Rlcm0+Ci0gICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RQb2xsPC9mdW5jdGlv bj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdFBvbGw8L3ByaW1hcnk+PC9pbmRleHRlcm0+ PC90ZXJtPgorICAgICA8dGVybSBpZD0ibGlicHEtUFFjb25uZWN0UG9sbCI+PGZ1bmN0aW9uPlBR Y29ubmVjdFBvbGw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZWN0UG9sbDwv cHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJh PgogICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+bm9uYmxvY2tpbmcgY29ubmVjdGlvbjwvcHJp bWFyeT48L2luZGV4dGVybT4KQEAgLTQ5OSw2ICs0OTksMzAgQEAgc3dpdGNoKFBRc3RhdHVzKGNv bm4pKQogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgPHZhcmxp c3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZWN0Q29tcGxldGUiPgorICAgICA8dGVybT48ZnVuY3Rp b24+UFFjb25uZWN0Q29tcGxldGU8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25u ZWN0Q29tcGxldGU8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+ CisgICAgICA8cGFyYT4KKyAgICAgICBDb21wbGV0ZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IG9u IGEgbm9uYmxvY2tpbmcgY29ubmVjdGlvbiBhbmQgYmxvY2sKKyAgICAgICB1bnRpbCBpdCBpcyBj b21wbGV0ZWQuCisKKzxzeW5vcHNpcz4KK2ludCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubik7 Cis8L3N5bm9wc2lzPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBUaGlz IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJs aWJwcS1QUWNvbm5lY3RQb2xsIi8+CisgICAgICAgdG8gY29tcGxldGUgYSBjb25uZWN0aW9uIHRo YXQgd2FzIGluaXRpYWxseSBzdGFydGVkIGluIGEgbm9uIGJsb2NraW5nCisgICAgICAgbWFubmVy LiBIb3dldmVyLCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgdG8gY29tcGxldGUgdGhlIGNvbm5lY3Rp b24gaW4gYQorICAgICAgIG5vbiBibG9ja2luZyB3YXksIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3 aWxsIGJsb2NrIHVudGlsIHRoZSBjb25uZWN0aW9uCisgICAgICAgaXMgY29tcGxldGVkLiBUaGlz IGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvIGNvbXBsZXRlIGNvbm5lY3Rpb25zIHRoYXQgd2VyZQor ICAgICAgIHN0YXJ0ZWQgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsU3Rh cnQiLz4uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNvbm5kZWZhdWx0cyI+CiAgICAg IDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5kZWZhdWx0czwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJp bWFyeT5QUWNvbm5kZWZhdWx0czwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAgICAgIDxs aXN0aXRlbT4KQEAgLTY2MCw3ICs2ODQsNyBAQCB2b2lkIFBRcmVzZXQoUEdjb25uICpjb25uKTsK IAogICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRcmVzZXRTdGFydCI+CiAgICAgIDx0ZXJt PjxmdW5jdGlvbj5QUXJlc2V0U3RhcnQ8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFy ZXNldFN0YXJ0PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KLSAgICAgPHRlcm0+PGZ1bmN0 aW9uPlBRcmVzZXRQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVzZXRQb2xs PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKyAgICAgPHRlcm0gaWQ9ImxpYnBxLVBRcmVz ZXRQb2xsIj48ZnVuY3Rpb24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1h cnk+UFFyZXNldFBvbGw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogICAgICA8bGlzdGl0 ZW0+CiAgICAgICA8cGFyYT4KICAgICAgICBSZXNldCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVs IHRvIHRoZSBzZXJ2ZXIsIGluIGEgbm9uYmxvY2tpbmcgbWFubmVyLgpAQCAtNTYxNywxMyArNTY0 MSwxMzcgQEAgaW50IFBRc2V0U2luZ2xlUm93TW9kZShQR2Nvbm4gKmNvbm4pOwogICAgdGhpcyBz ZWN0aW9uLgogCiAgICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBx LVBRcmVxdWVzdENhbmNlbCI+CisgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJlcXVlc3RDYW5jZWw8 L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFyZXF1ZXN0Q2FuY2VsPC9wcmltYXJ5Pjwv aW5kZXh0ZXJtPjwvdGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAg ICBSZXF1ZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgYWJhbmRvbnMgcHJvY2Vzc2luZyBvZiB0aGUgY3Vy cmVudCBjb21tYW5kLgorPHN5bm9wc2lzPgoraW50IFBRcmVxdWVzdENhbmNlbChQR2Nvbm4gKmNv bm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAg VGhpcyByZXF1ZXN0IGlzIG1hZGUgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB1c2VzIHRoZSBzYW1l IGNvbm5lY3Rpb24KKyAgICAgICBvcHRpb25zIGFzIHRoZSB0aGUgb3JpZ2luYWwgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPi4gU28gd2hlbiB0aGUKKyAgICAgICBvcmlnaW5hbCBjb25u ZWN0aW9uIGlzIGVuY3J5cHRlZCAodXNpbmcgVExTIG9yIEdTUyksIHRoZSBjb25uZWN0aW9uIGZv cgorICAgICAgIHRoZSBjYW5jZWwgcmVxdWVzdCBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCBpbiB0 aGUgc2FtZS4gQW55IGNvbm5lY3Rpb24KKyAgICAgICBvcHRpb25zIHRoYXQgb25seSBtYWtlIHNl bnNlIGZvciBhdXRoZW50aWNhdGlvbiBvciBhZnRlciBhdXRoZW50aWNhdGlvbgorICAgICAgIGFy ZSBpZ25vcmVkIHRob3VnaCwgYmVjYXVzZSBjYW5jZWxsYXRpb24gcmVxdWVzdHMgZG8gbm90IHJl cXVpcmUKKyAgICAgICBhdXRoZW50aWNhdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBh cmE+CisgICAgICAgVGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGUgPHN0cnVj dG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPgorICAgICAgIG9iamVjdCwgYW5kIGluIGNhc2Ugb2Yg ZmFpbHVyZSBzdG9yZXMgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlCisgICAgICAgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QgKHdoZW5jZSBpdCBjYW4gYmUgcmV0cmlldmVk CisgICAgICAgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3NhZ2UiLz4pLiBUaGlz IGJlaGF2aW91ciBtYWtlcyB0aGlzCisgICAgICAgZnVuY3Rpb24gdW5zYWZlIHRvIGNhbGwgZnJv bSB3aXRoaW4gbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgb3IKKyAgICAgICBzaWduYWwgaGFuZGxl cnMsIHNpbmNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgb3ZlcndyaXRpbmcgdGhlCisgICAgICAgPHN0 cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPidzIGVycm9yIG1lc3NhZ2Ugd2lsbAorICAgICAg IG1lc3MgdXAgdGhlIG9wZXJhdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3Mgb24gdGhlIGNvbm5l Y3Rpb24gaW4gYW5vdGhlcgorICAgICAgIHRocmVhZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyAxIGlmIHRoZSBjYW5jZWwgcmVxdWVz dCB3YXMgc3VjY2Vzc2Z1bGx5CisgICAgICAgZGlzcGF0Y2hlZCBhbmQgMCBpZiBub3QuIFN1Y2Nl c3NmdWwgZGlzcGF0Y2ggaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlCisgICAgICAgcmVxdWVzdCB3 aWxsIGhhdmUgYW55IGVmZmVjdCwgaG93ZXZlci4gSWYgdGhlIGNhbmNlbGxhdGlvbiBpcyBlZmZl Y3RpdmUsCisgICAgICAgdGhlIGN1cnJlbnQgY29tbWFuZCB3aWxsIHRlcm1pbmF0ZSBlYXJseSBh bmQgcmV0dXJuIGFuIGVycm9yIHJlc3VsdC4gSWYKKyAgICAgICB0aGUgY2FuY2VsbGF0aW9uIGZh aWxzIChzYXksIGJlY2F1c2UgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBkb25lCisgICAgICAgcHJv Y2Vzc2luZyB0aGUgY29tbWFuZCksIHRoZW4gdGhlcmUgd2lsbCBiZSBubyB2aXNpYmxlIHJlc3Vs dCBhdAorICAgICAgIGFsbC4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRcmVxdWVzdENh bmNlbFN0YXJ0Ij4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRcmVxdWVzdENhbmNlbFN0YXJ0PC9m dW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVxdWVzdENhbmNlbFN0YXJ0PC9wcmltYXJ5 PjwvaW5kZXh0ZXJtPjwvdGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICBBIHZlcnNpb24gb2YKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RD YW5jZWwiLz4KKyAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGluIHRocmVhZC1zYWZlIGFuZC9vciBu b24tYmxvY2tpbmcgbWFubmVyLgorPHN5bm9wc2lzPgorUEdjb25uICpQUXJlcXVlc3RDYW5jZWxT dGFydChQR2Nvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IDxzdHJ1Y3RuYW1lPlBH Y29ubjwvc3RydWN0bmFtZT4uIFRoaXMKKyAgICAgICBjb25uZWN0aW9uIG9iamVjdCBjYW4gYmUg dXNlZCB0byBjYW5jZWwgdGhlIHF1ZXJ5IHRoYXQncyBydW5uaW5nIG9uIHRoZQorICAgICAgIG9y aWdpbmFsIGNvbm5lY3Rpb24gaW4gYSB0aHJlYWQtc2FmZSB3YXkuIFRvIGRvIHNvCisgICAgICAg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+CisgICAgICAgbXVzdCBiZSBj YWxsZWQgd2hpbGUgbm8gb3RoZXIgdGhyZWFkIGlzIHVzaW5nIHRoZSBvcmlnaW5hbCBQR2Nvbm4u IFRoZW4KKyAgICAgICB0aGUgcmV0dXJuZWQgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1l PgorICAgICAgIGNhbiBiZSB1c2VkIGF0IGEgbGF0ZXIgcG9pbnQgaW4gYW55IHRocmVhZCB0byBz ZW5kIGEgY2FuY2VsIHJlcXVlc3QuCisgICAgICAgQSBjYW5jZWwgcmVxdWVzdCBjYW4gYmUgc2Vu dCB1c2luZyB0aGUgcmV0dXJuZWQgUEdjb25uIGluIHR3byB3YXlzLAorICAgICAgIG5vbi1ibG9j a2luZyB1c2luZyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+CisgICAgICAg b3IgYmxvY2tpbmcgdXNpbmcgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY29ubmVjdENvbXBsZXRl Ii8+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBJbiBhZGRpdGlvbiB0 byBhbGwgdGhlIHN0YXR1c2VzIHRoYXQgYSByZWd1bGFyCisgICAgICAgPHN0cnVjdG5hbWU+UEdj b25uPC9zdHJ1Y3RuYW1lPgorICAgICAgIGNhbiBoYXZlIHJldHVybmVkIGNvbm5lY3Rpb24gY2Fu IGhhdmUgdHdvIGFkZGl0aW9uYWwgc3RhdHVzZXM6CisKKyAgICAgICA8dmFyaWFibGVsaXN0Pgor ICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1jb25uZWN0aW9uLXN0YXJ0aW5nIj4KKyAg ICAgICAgIDx0ZXJtPjxzeW1ib2w+Q09OTkVDVElPTl9TVEFSVElORzwvc3ltYm9sPjwvdGVybT4K KyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgV2FpdGlu ZyBmb3IgdGhlIGZpcnN0IGNhbGwgdG8gPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25uZWN0UG9s bCIvPiwKKyAgICAgICAgICAgdG8gYWN0dWFsbHkgb3BlbiB0aGUgc29ja2V0LiBUaGlzIGlzIHRo ZSBjb25uZWN0aW9uIHN0YXRlIHJpZ2h0IGFmdGVyCisgICAgICAgICAgIGNhbGxpbmcgPHhyZWYg bGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+LiBObyBjb25uZWN0aW9uIHRvIHRoZQor ICAgICAgICAgICBzZXJ2ZXIgaGFzIGJlZW4gaW5pdGlhdGVkIHlldCBhdCB0aGlzIHBvaW50LiBU byBzdGFydCBjYW5jZWwgcmVxdWVzdAorICAgICAgICAgICBpbml0aWF0aW9uIHVzZSA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+CisgICAgICAgICAgIGZvciBub24tYmxvY2tp bmcgYmVoYXZpb3VyIGFuZCA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21wbGV0ZSIv PgorICAgICAgICAgICBmb3IgYmxvY2tpbmcgYmVoYXZpb3VyLgorICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLWNvbm5lY3Rpb24tY2FuY2VsLWZpbmlzaGVkIj4KKyAg ICAgICAgIDx0ZXJtPjxzeW1ib2w+Q09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQ8L3N5bWJvbD48 L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAg IENhbmNlbCByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4gSXQncyBub3QgcG9zc2libGUg dG8gY29udGludWUKKyAgICAgICAgICAgdXNpbmcgdGhlIGNhbmNlbGxhdGlvbiBjb25uZWN0aW9u IG5vdywgc28gaXQgc2hvdWxkIGJlIGZyZWVkIHVzaW5nCisgICAgICAgICAgIDx4cmVmIGxpbmtl bmQ9ImxpYnBxLVBRZmluaXNoIi8+LiBJdCdzIGFsc28gcG9zc2libGUgdG8gcmVzZXQgdGhlCisg ICAgICAgICAgIGNhbmNlbGxhdGlvbiBjb25uZWN0aW9uIGluc3RlYWQgdXNpbmcKKyAgICAgICAg ICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXNldFN0YXJ0Ii8+LCB0aGF0IHdheSBpdCBjYW4g YmUgcmV1c2VkIHRvCisgICAgICAgICAgIGNhbmNlbCBhIGZ1dHVyZSBxdWVyeSBvbiB0aGUgc2Ft ZSBjb25uZWN0aW9uLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgPC9w YXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBTaW5jZSB0aGlzIG9iamVjdCByZXByZXNlbnRz IGEgY29ubmVjdGlvbiBvbmx5IG1lYW50IGZvciBjYW5jZWxsYXRpb25zIGl0CisgICAgICAgY2Fu IG9ubHkgYmUgdXNlZCB3aXRoIGEgbGltaXRlZCBzdWJzZXQgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0 IGNhbiBiZSB1c2VkCisgICAgICAgZm9yIGEgcmVndWxhciA8c3RydWN0bmFtZT5QR2Nvbm48L3N0 cnVjdG5hbWU+IG9iamVjdC4gVGhlIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgdGhpcyBvYmplY3Qg Y2FuIGJlIHBhc3NlZCB0byBhcmUKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXN0YXR1 cyIvPiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWVycm9yTWVzc2FnZSIvPiwKKyAg ICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21wbGV0ZSIvPiwKKyAgICAgICA8 eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+LAorICAgICAgIDx4cmVmIGxpbmtl bmQ9ImxpYnBxLVBRc29ja2V0Ii8+LAorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVz ZXRTdGFydCIvPiwgYW5kCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFmaW5pc2giLz4u CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWdldENhbmNlbCI+CiAgICAgIDx0ZXJtPjxm dW5jdGlvbj5QUWdldENhbmNlbDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWdldENh bmNlbDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAKICAgICAgPGxpc3RpdGVtPgogICAg ICAgPHBhcmE+CiAgICAgICAgQ3JlYXRlcyBhIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhl IGluZm9ybWF0aW9uIG5lZWRlZCB0byBjYW5jZWwKLSAgICAgICBhIGNvbW1hbmQgaXNzdWVkIHRo cm91Z2ggYSBwYXJ0aWN1bGFyIGRhdGFiYXNlIGNvbm5lY3Rpb24uCisgICAgICAgYSBjb21tYW5k IHVzaW5nIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgogPHN5bm9wc2lzPgogUEdj YW5jZWwgKlBRZ2V0Q2FuY2VsKFBHY29ubiAqY29ubik7CiA8L3N5bm9wc2lzPgpAQCAtNTY2NSw3 ICs1ODEzLDkgQEAgdm9pZCBQUWZyZWVDYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCk7CiAKICAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgUmVxdWVzdHMgdGhhdCB0aGUgc2VydmVy IGFiYW5kb24gcHJvY2Vzc2luZyBvZiB0aGUgY3VycmVudCBjb21tYW5kLgorICAgICAgIEEgbGVz cyBzZWN1cmUgdmVyc2lvbiBvZgorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVz dENhbmNlbCIvPgorICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgc2FmZWx5IGZyb20gd2l0aGluIGEg c2lnbmFsIGhhbmRsZXIuCiA8c3lub3BzaXM+CiBpbnQgUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNl bCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiA8L3N5bm9wc2lzPgpAQCAtNTY3OSwx NSArNTgyOSw2IEBAIGludCBQUWNhbmNlbChQR2NhbmNlbCAqY2FuY2VsLCBjaGFyICplcnJidWYs IGludCBlcnJidWZzaXplKTsKICAgICAgICByZWNvbW1lbmRlZCBzaXplIGlzIDI1NiBieXRlcyku CiAgICAgICA8L3BhcmE+CiAKLSAgICAgIDxwYXJhPgotICAgICAgIFN1Y2Nlc3NmdWwgZGlzcGF0 Y2ggaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHJlcXVlc3Qgd2lsbCBoYXZlCi0gICAgICAgYW55 IGVmZmVjdCwgaG93ZXZlci4gIElmIHRoZSBjYW5jZWxsYXRpb24gaXMgZWZmZWN0aXZlLCB0aGUg Y3VycmVudAotICAgICAgIGNvbW1hbmQgd2lsbCB0ZXJtaW5hdGUgZWFybHkgYW5kIHJldHVybiBh biBlcnJvciByZXN1bHQuICBJZiB0aGUKLSAgICAgICBjYW5jZWxsYXRpb24gZmFpbHMgKHNheSwg YmVjYXVzZSB0aGUgc2VydmVyIHdhcyBhbHJlYWR5IGRvbmUKLSAgICAgICBwcm9jZXNzaW5nIHRo ZSBjb21tYW5kKSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIHZpc2libGUgcmVzdWx0IGF0Ci0gICAg ICAgYWxsLgotICAgICAgPC9wYXJhPgotCiAgICAgICA8cGFyYT4KICAgICAgICA8eHJlZiBsaW5r ZW5kPSJsaWJwcS1QUWNhbmNlbCIvPiBjYW4gc2FmZWx5IGJlIGludm9rZWQgZnJvbSBhIHNpZ25h bAogICAgICAgIGhhbmRsZXIsIGlmIHRoZSA8cGFyYW1ldGVyPmVycmJ1ZjwvcGFyYW1ldGVyPiBp cyBhIGxvY2FsIHZhcmlhYmxlIGluIHRoZQpAQCAtNTY5NiwzMyArNTgzNywyNCBAQCBpbnQgUFFj YW5jZWwoUEdjYW5jZWwgKmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiAg ICAgICAgYWxzbyBiZSBpbnZva2VkIGZyb20gYSB0aHJlYWQgdGhhdCBpcyBzZXBhcmF0ZSBmcm9t IHRoZSBvbmUKICAgICAgICBtYW5pcHVsYXRpbmcgdGhlIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3Ry dWN0bmFtZT4gb2JqZWN0LgogICAgICAgPC9wYXJhPgotICAgICA8L2xpc3RpdGVtPgotICAgIDwv dmFybGlzdGVudHJ5PgotICAgPC92YXJpYWJsZWxpc3Q+Ci0KLSAgIDx2YXJpYWJsZWxpc3Q+Ci0g ICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIj4KLSAgICAgPHRlcm0+ PGZ1bmN0aW9uPlBRcmVxdWVzdENhbmNlbDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5Q UXJlcXVlc3RDYW5jZWw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgotCi0gICAgIDxsaXN0 aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVz dENhbmNlbCIvPiBpcyBhIGRlcHJlY2F0ZWQgdmFyaWFudCBvZgotICAgICAgIDx4cmVmIGxpbmtl bmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgotPHN5bm9wc2lzPgotaW50IFBRcmVxdWVzdENhbmNlbChQ R2Nvbm4gKmNvbm4pOwotPC9zeW5vcHNpcz4KLSAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+ Ci0gICAgICAgUmVxdWVzdHMgdGhhdCB0aGUgc2VydmVyIGFiYW5kb24gcHJvY2Vzc2luZyBvZiB0 aGUgY3VycmVudAotICAgICAgIGNvbW1hbmQuICBJdCBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGUK LSAgICAgICA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+IG9iamVjdCwgYW5kIGluIGNh c2Ugb2YgZmFpbHVyZSBzdG9yZXMgdGhlCi0gICAgICAgZXJyb3IgbWVzc2FnZSBpbiB0aGUgPHN0 cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QgKHdoZW5jZSBpdCBjYW4KLSAgICAg ICBiZSByZXRyaWV2ZWQgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3NhZ2UiLz4p LiAgQWx0aG91Z2gKLSAgICAgICB0aGUgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSwgdGhpcyBh cHByb2FjaCBpcyBub3Qgc2FmZSB3aXRoaW4KLSAgICAgICBtdWx0aXBsZS10aHJlYWQgcHJvZ3Jh bXMgb3Igc2lnbmFsIGhhbmRsZXJzLCBzaW5jZSBpdCBpcyBwb3NzaWJsZQotICAgICAgIHRoYXQg b3ZlcndyaXRpbmcgdGhlIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4ncyBlcnJvciBt ZXNzYWdlIHdpbGwKLSAgICAgICBtZXNzIHVwIHRoZSBvcGVyYXRpb24gY3VycmVudGx5IGluIHBy b2dyZXNzIG9uIHRoZSBjb25uZWN0aW9uLgorICAgICAgIFRvIGFjaGlldmUgc2lnbmFsLXNhZmV0 eSwgc29tZSBjb25jZXNzaW9ucyBuZWVkZWQgdG8gYmUgbWFkZSBpbiB0aGUKKyAgICAgICBpbXBs ZW1lbnRhdGlvbiBvZiA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4gTm90IGFsbCBj b25uZWN0aW9uCisgICAgICAgb3B0aW9ucyBvZiB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbiBhcmUg dXNlZCB3aGVuIGVzdGFibGlzaGluZyBhCisgICAgICAgY29ubmVjdGlvbiBmb3IgdGhlIGNhbmNl bGxhdGlvbiByZXF1ZXN0LiBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhCisgICAgICAgY29u bmVjdGlvbiBpcyBtYWRlIHRvIHRoZSBwb3N0Z3JlcyBob3N0IHVzaW5nIHRoZSBzYW1lIHBvcnQu IFRoZSBvbmx5CisgICAgICAgY29ubmVjdGlvbiBvcHRpb25zIHRoYXQgYXJlIGhvbm9yZWQgZHVy aW5nIHRoaXMgY29ubmVjdGlvbiBhcmUKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzPC92YXJu YW1lPiwKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzX2lkbGU8L3Zhcm5hbWU+LAorICAgICAg IDx2YXJuYW1lPmtlZXBhbGl2ZXNfaW50ZXJ2YWw8L3Zhcm5hbWU+LAorICAgICAgIDx2YXJuYW1l PmtlZXBhbGl2ZXNfY291bnQ8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT50Y3BfdXNl cl90aW1lb3V0PC92YXJuYW1lPi4KKyAgICAgICBTbywgZm9yIGV4YW1wbGUKKyAgICAgICA8dmFy bmFtZT5jb25uZWN0X3RpbWVvdXQ8L3Zhcm5hbWU+LAorICAgICAgIDx2YXJuYW1lPmdzc2VuY21v ZGU8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT5zc2xtb2RlPC92YXJuYW1lPiBhcmUg aWdub3JlZC4gVGhpcyBtZWFucyB0aGUgY29ubmVjdGlvbgorICAgICAgIGlzIG5ldmVyIGVuY3J5 cHRlZCB1c2luZyBUTFMgb3IgR1NTLgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgog ICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtODg1MCwxMCArODk4MiwxMCBAQCBpbnQgUFFpc3RocmVh ZHNhZmUoKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIGRlcHJlY2F0ZWQgZnVuY3Rp b25zIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPiBhbmQKKyAgIFRoZSBm dW5jdGlvbnMgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+IGFuZAogICAg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFvaWRTdGF0dXMiLz4gYXJlIG5vdCB0aHJlYWQtc2FmZSBh bmQgc2hvdWxkIG5vdCBiZQogICAgdXNlZCBpbiBtdWx0aXRocmVhZCBwcm9ncmFtcy4gIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPgotICAgY2FuIGJlIHJlcGxhY2VkIGJ5 IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgorICAgY2FuIGJlIHJlcGxhY2VkIGJ5 IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbFN0YXJ0Ii8+LgogICAgPHhyZWYg bGlua2VuZD0ibGlicHEtUFFvaWRTdGF0dXMiLz4gY2FuIGJlIHJlcGxhY2VkIGJ5CiAgICA8eHJl ZiBsaW5rZW5kPSJsaWJwcS1QUW9pZFZhbHVlIi8+LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9z cmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5jIGIvc3JjL2ZlX3V0aWxzL2Nvbm5lY3RfdXRpbHMu YwppbmRleCBhMzBjNjZmMTNhLi5mZjE4ZGFiMDQzIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMv Y29ubmVjdF91dGlscy5jCisrKyBiL3NyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMKQEAgLTE2 MiwxOSArMTYyLDExIEBAIGNvbm5lY3RNYWludGVuYW5jZURhdGFiYXNlKENvbm5QYXJhbXMgKmNw YXJhbXMsCiB2b2lkCiBkaXNjb25uZWN0RGF0YWJhc2UoUEdjb25uICpjb25uKQogewotCWNoYXIJ CWVycmJ1ZlsyNTZdOwotCiAJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CiAKIAlpZiAoUFF0cmFuc2Fj dGlvblN0YXR1cyhjb25uKSA9PSBQUVRSQU5TX0FDVElWRSkKIAl7Ci0JCVBHY2FuY2VsICAgKmNh bmNlbDsKLQotCQlpZiAoKGNhbmNlbCA9IFBRZ2V0Q2FuY2VsKGNvbm4pKSkKLQkJewotCQkJKHZv aWQpIFBRY2FuY2VsKGNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JCQlQUWZyZWVD YW5jZWwoY2FuY2VsKTsKLQkJfQorCQkodm9pZCkgUFFyZXF1ZXN0Q2FuY2VsKGNvbm4pOwogCX0K IAogCVBRZmluaXNoKGNvbm4pOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhw b3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAppbmRleCBlOGJjYzg4 MzcwLi5mNzYwOWQwYzY0IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRz LnR4dAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dApAQCAtMTg2LDMgKzE4 Niw1IEBAIFBRcGlwZWxpbmVTdGF0dXMgICAgICAgICAgMTgzCiBQUXNldFRyYWNlRmxhZ3MgICAg ICAgICAgIDE4NAogUFFtYmxlbkJvdW5kZWQgICAgICAgICAgICAxODUKIFBRc2VuZEZsdXNoUmVx dWVzdCAgICAgICAgMTg2CitQUXJlcXVlc3RDYW5jZWxTdGFydCAgICAgIDE4NworUFFjb25uZWN0 Q29tcGxldGUgICAgICAgICAxODgKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRleCBjZjU1 NGQzODlmLi5lODM1NmU3NWEyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1j b25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC0zNzgs NiArMzc4LDcgQEAgc3RhdGljIGludAljb25uZWN0REJDb21wbGV0ZShQR2Nvbm4gKmNvbm4pOwog c3RhdGljIFBHUGluZyBpbnRlcm5hbF9waW5nKFBHY29ubiAqY29ubik7CiBzdGF0aWMgUEdjb25u ICptYWtlRW1wdHlQR2Nvbm4odm9pZCk7CiBzdGF0aWMgYm9vbCBmaWxsUEdjb25uKFBHY29ubiAq Y29ubiwgUFFjb25uaW5mb09wdGlvbiAqY29ubk9wdGlvbnMpOworc3RhdGljIGJvb2wgY29weVBH Y29ubihQR2Nvbm4gKnNyY0Nvbm4sIFBHY29ubiAqZHN0Q29ubik7CiBzdGF0aWMgdm9pZCBmcmVl UEdjb25uKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBjbG9zZVBHY29ubihQR2Nvbm4gKmNv bm4pOwogc3RhdGljIHZvaWQgcmVsZWFzZV9jb25uX2FkZHJpbmZvKFBHY29ubiAqY29ubik7CkBA IC02MDQsOCArNjA1LDE3IEBAIHBxRHJvcFNlcnZlckRhdGEoUEdjb25uICpjb25uKQogCWlmIChj b25uLT53cml0ZV9lcnJfbXNnKQogCQlmcmVlKGNvbm4tPndyaXRlX2Vycl9tc2cpOwogCWNvbm4t PndyaXRlX2Vycl9tc2cgPSBOVUxMOwotCWNvbm4tPmJlX3BpZCA9IDA7Ci0JY29ubi0+YmVfa2V5 ID0gMDsKKworCS8qCisJICogQ2FuY2VsIGNvbm5lY3Rpb25zIHNob3VsZCBzYXZlIHRoZWlyIGJl X3BpZCBhbmQgYmVfa2V5IGFjcm9zcworCSAqIFBRcmVzZXRTdGFydCBpbnZvY2F0aW9ucy4gT3Ro ZXJ3aXNlIHRoZXkgZG9uJ3Qga25vdyB0aGUgc2VjcmV0IHRva2VuIG9mCisJICogdGhlIGNvbm5l Y3Rpb24gdGhleSBhcmUgc3VwcG9zZWQgdG8gY2FuY2VsIGFueW1vcmUuCisJICovCisJaWYgKCFj b25uLT5jYW5jZWxSZXF1ZXN0KQorCXsKKwkJY29ubi0+YmVfcGlkID0gMDsKKwkJY29ubi0+YmVf a2V5ID0gMDsKKwl9CiB9CiAKIApAQCAtNzM3LDYgKzc0Nyw2OCBAQCBQUXBpbmcoY29uc3QgY2hh ciAqY29ubmluZm8pCiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqCQlQUWNhbmNlbENvbm5lY3RT dGFydAorICoKKyAqIEFzeW5jaHJvbm91c2x5IGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhlIGdpdmVu IGNvbm5lY3Rpb24uIFRoaXMgcmVxdWlyZXMKKyAqIHBvbGxpbmcgdGhlIHJldHVybmVkIFBHY29u biB0byBhY3R1YWxseSBjb21wbGV0ZSB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZQorICogcmVxdWVz dC4KKyAqLworUEdjb25uICoKK1BRcmVxdWVzdENhbmNlbFN0YXJ0KFBHY29ubiAqY29ubikKK3sK KwlQR2Nvbm4JICAgKmNhbmNlbENvbm4gPSBtYWtlRW1wdHlQR2Nvbm4oKTsKKworCWlmIChjYW5j ZWxDb25uID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogQ2hlY2sgd2UgaGF2ZSBhbiBv cGVuIGNvbm5lY3Rpb24gKi8KKwlpZiAoIWNvbm4pCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY2FuY2VsQ29ubi0+ZXJyb3JNZXNzYWdlLCBsaWJwcV9nZXR0ZXh0KCJwYXNzZWQgY29ubmVj dGlvbiB3YXMgTlVMTFxuIikpOworCQlyZXR1cm4gY2FuY2VsQ29ubjsKKwl9CisKKwlpZiAoY29u bi0+c29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNhbmNlbENvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dCgicGFzc2VkIGNvbm5lY3Rp b24gaXMgbm90IG9wZW5cbiIpKTsKKwkJcmV0dXJuIGNhbmNlbENvbm47CisJfQorCisJLyoKKwkg KiBJbmRpY2F0ZSB0aGF0IHRoaXMgY29ubmVjdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBjYW5jZWxs YXRpb24KKwkgKi8KKwljYW5jZWxDb25uLT5jYW5jZWxSZXF1ZXN0ID0gdHJ1ZTsKKworCWlmICgh Y29weVBHY29ubihjb25uLCBjYW5jZWxDb25uKSkKKwkJcmV0dXJuIChQR2Nvbm4gKikgY2FuY2Vs Q29ubjsKKworCS8qCisJICogQ29tcHV0ZSBkZXJpdmVkIG9wdGlvbnMKKwkgKi8KKwlpZiAoIWNv bm5lY3RPcHRpb25zMihjYW5jZWxDb25uKSkKKwkJcmV0dXJuIGNhbmNlbENvbm47CisKKwkvKgor CSAqIENvcHkgY2FuY2VsYXRpb24gdG9rZW4gZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCBjb25ubmVj dGlvbgorCSAqLworCWNhbmNlbENvbm4tPmJlX3BpZCA9IGNvbm4tPmJlX3BpZDsKKwljYW5jZWxD b25uLT5iZV9rZXkgPSBjb25uLT5iZV9rZXk7CisKKwkvKgorCSAqIENhbmNlbCByZXF1ZXN0cyBz aG91bGQgbm90IGl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libGUgaG9zdHMuIFRoZSByZXF1ZXN0CisJ ICogbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgZXhhY3QgaG9zdCBhbmQgYWRkcmVzcyB0aGF0IHRo ZSBvcmlnaW5hbAorCSAqIGNvbm5lY3Rpb24gdXNlZC4KKwkgKi8KKwltZW1jcHkoJmNhbmNlbENv bm4tPnJhZGRyLCAmY29ubi0+cmFkZHIsIHNpemVvZihTb2NrQWRkcikpOworCWNhbmNlbENvbm4t PndoaWNoaG9zdCA9IGNvbm4tPndoaWNoaG9zdDsKKwljb25uLT50cnlfbmV4dF9ob3N0ID0gZmFs c2U7CisJY29ubi0+dHJ5X25leHRfYWRkciA9IGZhbHNlOworCisJY2FuY2VsQ29ubi0+c3RhdHVz ID0gQ09OTkVDVElPTl9TVEFSVElORzsKKwlyZXR1cm4gY2FuY2VsQ29ubjsKK30KKwogLyoKICAq CQlQUWNvbm5lY3RTdGFydFBhcmFtcwogICoKQEAgLTkxNCw2ICs5ODYsNDYgQEAgZmlsbFBHY29u bihQR2Nvbm4gKmNvbm4sIFBRY29ubmluZm9PcHRpb24gKmNvbm5PcHRpb25zKQogCXJldHVybiB0 cnVlOwogfQogCisvKgorICogQ29weSBvdmVyIG9wdGlvbiB2YWx1ZXMgZnJvbSBzcmNDb25uIHRv IGRzdENvbm4KKyAqCisgKiBEb24ndCBwdXQgYW55dGhpbmcgY3V0ZSBoZXJlIC0tLSBpbnRlbGxp Z2VuY2Ugc2hvdWxkIGJlIGluCisgKiBjb25uZWN0T3B0aW9uczIgLi4uCisgKgorICogUmV0dXJu cyB0cnVlIG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsIHJldHVybnMgZmFsc2UgYW5kIHNldHMgZXJy b3IgbWVzc2FnZSBvZgorICogZHN0Q29ubi4KKyAqLworc3RhdGljIGJvb2wKK2NvcHlQR2Nvbm4o UEdjb25uICpzcmNDb25uLCBQR2Nvbm4gKmRzdENvbm4pCit7CisJY29uc3QgaW50ZXJuYWxQUWNv bm5pbmZvT3B0aW9uICpvcHRpb247CisKKwkvKiBjb3B5IG92ZXIgY29ubmVjdGlvbiBvcHRpb25z ICovCisJZm9yIChvcHRpb24gPSBQUWNvbm5pbmZvT3B0aW9uczsgb3B0aW9uLT5rZXl3b3JkOyBv cHRpb24rKykKKwl7CisJCWlmIChvcHRpb24tPmNvbm5vZnMgPj0gMCkKKwkJeworCQkJY29uc3Qg Y2hhciAqKnRtcCA9IChjb25zdCBjaGFyICoqKSAoKGNoYXIgKikgc3JjQ29ubiArIG9wdGlvbi0+ Y29ubm9mcyk7CisKKwkJCWlmICgqdG1wKQorCQkJeworCQkJCWNoYXIJICAqKmRzdENvbm5tZW1i ZXIgPSAoY2hhciAqKikgKChjaGFyICopIGRzdENvbm4gKyBvcHRpb24tPmNvbm5vZnMpOworCisJ CQkJaWYgKCpkc3RDb25ubWVtYmVyKQorCQkJCQlmcmVlKCpkc3RDb25ubWVtYmVyKTsKKwkJCQkq ZHN0Q29ubm1lbWJlciA9IHN0cmR1cCgqdG1wKTsKKwkJCQlpZiAoKmRzdENvbm5tZW1iZXIgPT0g TlVMTCkKKwkJCQl7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZkc3RDb25uLT5lcnJvck1l c3NhZ2UsCisJCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnlcbiIpKTsKKwkJ CQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30K KwogLyoKICAqCQljb25uZWN0T3B0aW9uczEKICAqCkBAIC0yMDgyLDEwICsyMTk0LDE3IEBAIGNv bm5lY3REQlN0YXJ0KFBHY29ubiAqY29ubikKIAkgKiBTZXQgdXAgdG8gdHJ5IHRvIGNvbm5lY3Qg dG8gdGhlIGZpcnN0IGhvc3QuICAoU2V0dGluZyB3aGljaGhvc3QgPSAtMSBpcwogCSAqIGEgYml0 IG9mIGEgY2hlYXQsIGJ1dCBQUWNvbm5lY3RQb2xsIHdpbGwgYWR2YW5jZSBpdCB0byAwIGJlZm9y ZQogCSAqIGFueXRoaW5nIGVsc2UgbG9va3MgYXQgaXQuKQorCSAqCisJICogQ2FuY2VsIHJlcXVl c3RzIGFyZSBzcGVjaWFsIHRob3VnaCwgdGhleSBzaG91bGQgb25seSB0cnkgb25lIGhvc3QsCisJ ICogd2hpY2ggaXMgZGV0ZXJtaW5lZCBpbiBQUWNhbmNlbENvbm5lY3RTdGFydC4gU28gbGVhdmUg dGhlc2Ugc2V0dGluZ3MKKwkgKiBhbG9uZSBmb3IgY2FuY2VsIHJlcXVlc3RzLgogCSAqLwotCWNv bm4tPndoaWNoaG9zdCA9IC0xOwotCWNvbm4tPnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsKLQljb25u LT50cnlfbmV4dF9ob3N0ID0gdHJ1ZTsKKwlpZiAoIWNvbm4tPmNhbmNlbFJlcXVlc3QpCisJewor CQljb25uLT53aGljaGhvc3QgPSAtMTsKKwkJY29ubi0+dHJ5X25leHRfaG9zdCA9IHRydWU7CisJ CWNvbm4tPnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsKKwl9CiAJY29ubi0+c3RhdHVzID0gQ09OTkVD VElPTl9ORUVERUQ7CiAKIAkvKiBBbHNvIHJlc2V0IHRoZSB0YXJnZXRfc2VydmVyX3R5cGUgc3Rh dGUgaWYgbmVlZGVkICovCkBAIC0yMTM0LDYgKzIyNTMsMTUgQEAgY29ubmVjdERCQ29tcGxldGUo UEdjb25uICpjb25uKQogCWlmIChjb25uID09IE5VTEwgfHwgY29ubi0+c3RhdHVzID09IENPTk5F Q1RJT05fQkFEKQogCQlyZXR1cm4gMDsKIAorCWlmIChjb25uLT5zdGF0dXMgPT0gQ09OTkVDVElP Tl9TVEFSVElORykKKwl7CisJCWlmICghY29ubmVjdERCU3RhcnQoY29ubikpCisJCXsKKwkJCWNv bm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKIAkv KgogCSAqIFNldCB1cCBhIHRpbWUgbGltaXQsIGlmIGNvbm5lY3RfdGltZW91dCBpc24ndCB6ZXJv LgogCSAqLwpAQCAtMjI3NCwxMyArMjQwMiwxNSBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29u bikKIAlzd2l0Y2ggKGNvbm4tPnN0YXR1cykKIAl7CiAJCQkvKgotCQkJICogV2UgcmVhbGx5IHNo b3VsZG4ndCBoYXZlIGJlZW4gcG9sbGVkIGluIHRoZXNlIHR3byBjYXNlcywgYnV0IHdlCi0JCQkg KiBjYW4gaGFuZGxlIGl0LgorCQkJICogV2UgcmVhbGx5IHNob3VsZG4ndCBoYXZlIGJlZW4gcG9s bGVkIGluIHRoZXNlIHRocmVlIGNhc2VzLCBidXQKKwkJCSAqIHdlIGNhbiBoYW5kbGUgaXQuCiAJ CQkgKi8KIAkJY2FzZSBDT05ORUNUSU9OX0JBRDoKIAkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZB SUxFRDsKIAkJY2FzZSBDT05ORUNUSU9OX09LOgogCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7 CisJCWNhc2UgQ09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQ6CisJCQlyZXR1cm4gUEdSRVNfUE9M TElOR19PSzsKIAogCQkJLyogVGhlc2UgYXJlIHJlYWRpbmcgc3RhdGVzICovCiAJCWNhc2UgQ09O TkVDVElPTl9BV0FJVElOR19SRVNQT05TRToKQEAgLTIyOTIsNiArMjQyMiwzNCBAQCBQUWNvbm5l Y3RQb2xsKFBHY29ubiAqY29ubikKIAkJCQkvKiBMb2FkIHdhaXRpbmcgZGF0YSAqLwogCQkJCWlu dAkJCW4gPSBwcVJlYWREYXRhKGNvbm4pOwogCisjaWZuZGVmIFdJTjMyCisJCQkJaWYgKG4gPT0g LTIgJiYgY29ubi0+Y2FuY2VsUmVxdWVzdCkKKyNlbHNlCisKKwkJCQkvKgorCQkJCSAqIFdpbmRv d3MgaXMgYSBiaXQgc3BlY2lhbCBpbiBpdHMgRU9GIGJlaGF2aW91ciBmb3IgVENQLgorCQkJCSAq IFNvbWV0aW1lcyBpdCB3aWxsIGVycm9yIHdpdGggYW4gRUNPTk5SRVNFVCB3aGVuIHRoZXJlIGlz IGEKKwkJCQkgKiBjbGVhbiBjb25uZWN0aW9uIGNsb3N1cmUuIFNlZSB0aGVzZSB0aHJlYWRzIGZv ciBkZXRhaWxzOgorCQkJCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQv ZmxhdC85MGIzNDA1Ny00MTc2LTdiYjAtMGRiYi05ODIyYTVmNjQyNWIlNDBncmVpei1yZWluc2Rv cmYuZGUKKwkJCQkgKgorCQkJCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2Ut aWQvZmxhdC9DQSUyQmhVS0clMkJPZW9FVFpRJTNEUXc1VWI1aDN0bXdRaEJtREElM0RudU5PM0tH JTNEeldmVXlwRkF3JTQwbWFpbC5nbWFpbC5jb20KKwkJCQkgKgorCQkJCSAqIFBRY2FuY2VsIGln bm9yZXMgc3VjaCBlcnJvcnMgYW5kIHJlcG9ydHMgc3VjY2VzcyBmb3IgdGhlCisJCQkJICogY2Fu Y2VsbGF0aW9uIGFueXdheSwgc28gZXZlbiBpZiB0aGlzIGlzIG5vdCBhbHdheXMgY29ycmVjdAor CQkJCSAqIHdlIGRvIHRoZSBzYW1lIGhlcmUuCisJCQkJICovCisJCQkJaWYgKG4gPCAwICYmIGNv bm4tPmNhbmNlbFJlcXVlc3QpCisjZW5kaWYKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMg aXMgdGhlIGV4cGVjdGVkIGVuZCBzdGF0ZSBmb3IgY2FuY2VsIGNvbm5lY3Rpb25zLgorCQkJCQkg KiBUaGV5IGFyZSBjbG9zZWQgb25jZSB0aGUgY2FuY2VsIGlzIHByb2Nlc3NlZCBieSB0aGUKKwkJ CQkJICogc2VydmVyLgorCQkJCQkgKi8KKwkJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9D QU5DRUxfRklOSVNIRUQ7CisJCQkJCXJlc2V0UFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2Fn ZSk7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX09LOworCQkJCX0KIAkJCQlpZiAobiA8IDAp CiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCWlmIChuID09IDApCkBAIC0yMzAxLDYgKzI0 NTksNyBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikKIAkJCX0KIAogCQkJLyogVGhlc2Ug YXJlIHdyaXRpbmcgc3RhdGVzLCBzbyB3ZSBqdXN0IHByb2NlZWQuICovCisJCWNhc2UgQ09OTkVD VElPTl9TVEFSVElORzoKIAkJY2FzZSBDT05ORUNUSU9OX1NUQVJURUQ6CiAJCWNhc2UgQ09OTkVD VElPTl9NQURFOgogCQkJYnJlYWs7CkBAIC0yMzI1LDYgKzI0ODQsMTQgQEAga2VlcF9nb2luZzoJ CQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJLyogVGlt ZSB0byBhZHZhbmNlIHRvIG5leHQgYWRkcmVzcywgb3IgbmV4dCBob3N0IGlmIG5vIG1vcmUgYWRk cmVzc2VzPyAqLwogCWlmIChjb25uLT50cnlfbmV4dF9hZGRyKQogCXsKKwkJLyoKKwkJICogQ2Fu Y2VsIHJlcXVlc3RzIG5ldmVyIGhhdmUgbW9yZSBhZGRyZXNzZXMgdG8gdHJ5LiBUaGV5IHNob3Vs ZCBvbmx5CisJCSAqIHRyeSBhIHNpbmdsZSBvbmUuCisJCSAqLworCQlpZiAoY29ubi0+Y2FuY2Vs UmVxdWVzdCkKKwkJeworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0KIAkJaWYgKGNvbm4tPmFk ZHJfY3VyICYmIGNvbm4tPmFkZHJfY3VyLT5haV9uZXh0KQogCQl7CiAJCQljb25uLT5hZGRyX2N1 ciA9IGNvbm4tPmFkZHJfY3VyLT5haV9uZXh0OwpAQCAtMjM0NCw2ICsyNTExLDE1IEBAIGtlZXBf Z29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwog CQlpbnQJCQlyZXQ7CiAJCWNoYXIJCXBvcnRzdHJbTUFYUEdQQVRIXTsKIAorCQkvKgorCQkgKiBD YW5jZWwgcmVxdWVzdHMgbmV2ZXIgaGF2ZSBtb3JlIGhvc3RzIHRvIHRyeS4gVGhleSBzaG91bGQg b25seSB0cnkKKwkJICogYSBzaW5nbGUgb25lLgorCQkgKi8KKwkJaWYgKGNvbm4tPmNhbmNlbFJl cXVlc3QpCisJCXsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisKIAkJaWYgKGNvbm4tPndo aWNoaG9zdCArIDEgPCBjb25uLT5uY29ubmhvc3QpCiAJCQljb25uLT53aGljaGhvc3QrKzsKIAkJ ZWxzZQpAQCAtMjUyOSwxOSArMjcwNSwyNyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwg Y29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJY2hhcgkJaG9zdF9hZGRyW05J X01BWEhPU1RdOwogCiAJCQkJCS8qCi0JCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCBwb3NzaWJsZSBo b3N0LCBpZiB3ZSd2ZSB0cmllZCBhbGwgb2YKLQkJCQkJICogdGhlIGFkZHJlc3NlcyBmb3IgdGhl IGN1cnJlbnQgaG9zdC4KKwkJCQkJICogQ2FuY2VsIHJlcXVlc3RzIGRvbid0IHVzZSBhZGRyX2N1 ciBhdCBhbGwuIFRoZXkgaGF2ZQorCQkJCQkgKiB0aGVpciByYWRkciBmaWVsZCBhbHJlYWR5IGZp bGxlZCBpbiBkdXJpbmcKKwkJCQkJICogaW5pdGlhbGl6YXRpb24gaW4gUFFjYW5jZWxDb25uZWN0 U3RhcnQuCiAJCQkJCSAqLwotCQkJCQlpZiAoYWRkcl9jdXIgPT0gTlVMTCkKKwkJCQkJaWYgKCFj b25uLT5jYW5jZWxSZXF1ZXN0KQogCQkJCQl7Ci0JCQkJCQljb25uLT50cnlfbmV4dF9ob3N0ID0g dHJ1ZTsKLQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKLQkJCQkJfQorCQkJCQkJLyoKKwkJCQkJCSAq IEFkdmFuY2UgdG8gbmV4dCBwb3NzaWJsZSBob3N0LCBpZiB3ZSd2ZSB0cmllZCBhbGwKKwkJCQkJ CSAqIG9mIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSBjdXJyZW50IGhvc3QuCisJCQkJCQkgKi8KKwkJ CQkJCWlmIChhZGRyX2N1ciA9PSBOVUxMKQorCQkJCQkJeworCQkJCQkJCWNvbm4tPnRyeV9uZXh0 X2hvc3QgPSB0cnVlOworCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJCX0KIAotCQkJCQkv KiBSZW1lbWJlciBjdXJyZW50IGFkZHJlc3MgZm9yIHBvc3NpYmxlIHVzZSBsYXRlciAqLwotCQkJ CQltZW1jcHkoJmNvbm4tPnJhZGRyLmFkZHIsIGFkZHJfY3VyLT5haV9hZGRyLAotCQkJCQkJICAg YWRkcl9jdXItPmFpX2FkZHJsZW4pOwotCQkJCQljb25uLT5yYWRkci5zYWxlbiA9IGFkZHJfY3Vy LT5haV9hZGRybGVuOworCQkJCQkJLyogUmVtZW1iZXIgY3VycmVudCBhZGRyZXNzIGZvciBwb3Nz aWJsZSB1c2UgbGF0ZXIgKi8KKwkJCQkJCW1lbWNweSgmY29ubi0+cmFkZHIuYWRkciwgYWRkcl9j dXItPmFpX2FkZHIsCisJCQkJCQkJICAgYWRkcl9jdXItPmFpX2FkZHJsZW4pOworCQkJCQkJY29u bi0+cmFkZHIuc2FsZW4gPSBhZGRyX2N1ci0+YWlfYWRkcmxlbjsKKwkJCQkJfQogCiAJCQkJCS8q CiAJCQkJCSAqIFNldCBjb25uaXAsIHRvby4gIE5vdGUgd2UgcHVycG9zZWx5IGlnbm9yZSBzdHJk dXAKQEAgLTI1NTcsNyArMjc0MSw3IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21l IGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCQkJY29ubi0+Y29ubmlwID0gc3RyZHVw KGhvc3RfYWRkcik7CiAKIAkJCQkJLyogVHJ5IHRvIGNyZWF0ZSB0aGUgc29ja2V0ICovCi0JCQkJ CWNvbm4tPnNvY2sgPSBzb2NrZXQoYWRkcl9jdXItPmFpX2ZhbWlseSwgU09DS19TVFJFQU0sIDAp OworCQkJCQljb25uLT5zb2NrID0gc29ja2V0KGNvbm4tPnJhZGRyLmFkZHIuc3NfZmFtaWx5LCBT T0NLX1NUUkVBTSwgMCk7CiAJCQkJCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJRF9TT0NLRVQp CiAJCQkJCXsKIAkJCQkJCWludAkJCWVycm9ybm8gPSBTT0NLX0VSUk5POwpAQCAtMjU2NywxMiAr Mjc1MSwxOCBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUg dW50aWwgdGhlcmUgaXMKIAkJCQkJCSAqIGFkZHJlc3NlcyB0byB0cnk7IHRoaXMgcmVkdWNlcyB1 c2VsZXNzIGNoYXR0ZXIgaW4KIAkJCQkJCSAqIGNhc2VzIHdoZXJlIHRoZSBhZGRyZXNzIGxpc3Qg aW5jbHVkZXMgYm90aCBJUHY0IGFuZAogCQkJCQkJICogSVB2NiBidXQga2VybmVsIG9ubHkgYWNj ZXB0cyBvbmUgZmFtaWx5LgorCQkJCQkJICoKKwkJCQkJCSAqIENhbmNlbCByZXF1ZXN0cyBuZXZl ciBoYXZlIG1vcmUgYWRkcmVzc2VzIHRvIHRyeS4KKwkJCQkJCSAqIFRoZXkgc2hvdWxkIG9ubHkg dHJ5IGEgc2luZ2xlIG9uZS4KIAkJCQkJCSAqLwotCQkJCQkJaWYgKGFkZHJfY3VyLT5haV9uZXh0 ICE9IE5VTEwgfHwKLQkJCQkJCQljb25uLT53aGljaGhvc3QgKyAxIDwgY29ubi0+bmNvbm5ob3N0 KQorCQkJCQkJaWYgKCFjb25uLT5jYW5jZWxSZXF1ZXN0KQogCQkJCQkJewotCQkJCQkJCWNvbm4t PnRyeV9uZXh0X2FkZHIgPSB0cnVlOwotCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJCQlp ZiAoYWRkcl9jdXItPmFpX25leHQgIT0gTlVMTCB8fAorCQkJCQkJCQljb25uLT53aGljaGhvc3Qg KyAxIDwgY29ubi0+bmNvbm5ob3N0KQorCQkJCQkJCXsKKwkJCQkJCQkJY29ubi0+dHJ5X25leHRf YWRkciA9IHRydWU7CisJCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJCQl9CiAJCQkJCQl9 CiAJCQkJCQllbWl0SG9zdElkZW50aXR5SW5mbyhjb25uLCBob3N0X2FkZHIpOwogCQkJCQkJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKQEAgLTI1OTUsNyArMjc4NSw3IEBA IGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVy ZSBpcwogCQkJCQkgKiBUQ1Agc29ja2V0cywgbm9uYmxvY2sgbW9kZSwgY2xvc2Utb24tZXhlYy4g IFRyeSB0aGUKIAkJCQkJICogbmV4dCBhZGRyZXNzIGlmIGFueSBvZiB0aGlzIGZhaWxzLgogCQkJ CQkgKi8KLQkJCQkJaWYgKGFkZHJfY3VyLT5haV9mYW1pbHkgIT0gQUZfVU5JWCkKKwkJCQkJaWYg KGNvbm4tPnJhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCiAJCQkJCXsKIAkJCQkJCWlm ICghY29ubmVjdE5vRGVsYXkoY29ubikpCiAJCQkJCQl7CkBAIC0yNjI0LDcgKzI4MTQsNyBAQCBr ZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUg aXMKIAkJCQkJfQogI2VuZGlmCQkJCQkJCS8qIEZfU0VURkQgKi8KIAotCQkJCQlpZiAoYWRkcl9j dXItPmFpX2ZhbWlseSAhPSBBRl9VTklYKQorCQkJCQlpZiAoY29ubi0+cmFkZHIuYWRkci5zc19m YW1pbHkgIT0gQUZfVU5JWCkKIAkJCQkJewogI2lmbmRlZiBXSU4zMgogCQkJCQkJaW50CQkJb24g PSAxOwpAQCAtMjcxOCw4ICsyOTA4LDkgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNv bWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCSAqIFN0YXJ0L21ha2UgY29ubmVj dGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBibG9jaywgc2luY2Ugd2UKIAkJCQkJICogYXJlIGluIG5v bmJsb2NrIG1vZGUuICBJZiBpdCBkb2VzLCB3ZWxsLCB0b28gYmFkLgogCQkJCQkgKi8KLQkJCQkJ aWYgKGNvbm5lY3QoY29ubi0+c29jaywgYWRkcl9jdXItPmFpX2FkZHIsCi0JCQkJCQkJCWFkZHJf Y3VyLT5haV9hZGRybGVuKSA8IDApCisJCQkJCWlmIChjb25uZWN0KGNvbm4tPnNvY2ssCisJCQkJ CQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm4tPnJhZGRyLmFkZHIsCisJCQkJCQkJCWNvbm4t PnJhZGRyLnNhbGVuKSA8IDApCiAJCQkJCXsKIAkJCQkJCWlmIChTT0NLX0VSUk5PID09IEVJTlBS T0dSRVNTIHx8CiAjaWZkZWYgV0lOMzIKQEAgLTI3NTgsNiArMjk0OSwxNiBAQCBrZWVwX2dvaW5n OgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQl9 CiAJCQl9CiAKKwkJY2FzZSBDT05ORUNUSU9OX1NUQVJUSU5HOgorCQkJeworCQkJCWlmICghY29u bmVjdERCU3RhcnQoY29ubikpCisJCQkJeworCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQl9 CisJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9TVEFSVEVEOworCQkJCXJldHVybiBQR1JF U19QT0xMSU5HX1dSSVRJTkc7CisJCQl9CisKIAkJY2FzZSBDT05ORUNUSU9OX1NUQVJURUQ6CiAJ CQl7CiAJCQkJc29ja2xlbl90CW9wdGxlbiA9IHNpemVvZihvcHR2YWwpOwpAQCAtMjk2Niw2ICsz MTY3LDI1IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1 bnRpbCB0aGVyZSBpcwogCQkJCX0KICNlbmRpZgkJCQkJCQkvKiBVU0VfU1NMICovCiAKKwkJCQlp ZiAoY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwkJCQl7CisJCQkJCUNhbmNlbFJlcXVlc3RQYWNrZXQg Y2FuY2VscGFja2V0OworCisJCQkJCXBhY2tldGxlbiA9IHNpemVvZihjYW5jZWxwYWNrZXQpOwor CQkJCQljYW5jZWxwYWNrZXQuY2FuY2VsUmVxdWVzdENvZGUgPSAoTXNnVHlwZSkgcGdfaHRvbjMy KENBTkNFTF9SRVFVRVNUX0NPREUpOworCQkJCQljYW5jZWxwYWNrZXQuYmFja2VuZFBJRCA9IHBn X2h0b24zMihjb25uLT5iZV9waWQpOworCQkJCQljYW5jZWxwYWNrZXQuY2FuY2VsQXV0aENvZGUg PSBwZ19odG9uMzIoY29ubi0+YmVfa2V5KTsKKwkJCQkJaWYgKHBxUGFja2V0U2VuZChjb25uLCAw LCAmY2FuY2VscGFja2V0LCBwYWNrZXRsZW4pICE9IFNUQVRVU19PSykKKwkJCQkJeworCQkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkJCQkgIGxpYnBx X2dldHRleHQoImNvdWxkIG5vdCBzZW5kIGNhbmNlbCBwYWNrZXQ6ICVzXG4iKSwKKwkJCQkJCQkJ CQkgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKKwkJ CQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCQl9CisJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5F Q1RJT05fQVdBSVRJTkdfUkVTUE9OU0U7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJ Tkc7CisJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBCdWlsZCB0aGUgc3RhcnR1cCBwYWNrZXQuCiAJ CQkJICovCkBAIC00MTk0LDYgKzQ0MTQsMTEgQEAgcmVsZWFzZV9jb25uX2FkZHJpbmZvKFBHY29u biAqY29ubikKIHN0YXRpYyB2b2lkCiBzZW5kVGVybWluYXRlQ29ubihQR2Nvbm4gKmNvbm4pCiB7 CisJaWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJeworCQlyZXR1cm47CisJfQorCiAJLyoKIAkg KiBOb3RlIHRoYXQgdGhlIHByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZCBUZXJtaW5h dGUgbWVzc2FnZXMKIAkgKiBkdXJpbmcgdGhlIHN0YXJ0dXAgcGhhc2UuCkBAIC00MzExLDYgKzQ1 MzYsMTIgQEAgUFFyZXNldFN0YXJ0KFBHY29ubiAqY29ubikKIAl7CiAJCWNsb3NlUEdjb25uKGNv bm4pOwogCisJCWlmIChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQl7CisJCQljb25uLT5zdGF0dXMg PSBDT05ORUNUSU9OX1NUQVJUSU5HOworCQkJcmV0dXJuIDE7CisJCX0KKwogCQlyZXR1cm4gY29u bmVjdERCU3RhcnQoY29ubik7CiAJfQogCkBAIC00NjYzLDYgKzQ4OTQsMjIgQEAgY2FuY2VsX2Vy clJldHVybjoKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBQUWNvbm5lY3RDb21wbGV0ZTog dGFrZXMgYSBub24gYmxvY2tpbmcgY2FuY2VsIGNvbm5lY3Rpb24gYW5kIGNvbXBsZXRlcyBpdAor ICogaW4gYSBibG9ja2luZyBtYW5uZXIuCisgKgorICogUmV0dXJucyAxIGlmIGFibGUgdG8gY29u bmVjdCBzdWNjZXNzZnVsbHkgYW5kIDAgaWYgbm90LgorICoKKyAqIFRoaXMgY2FuIHVzZWZ1bCBp ZiB5b3Ugb25seSBjYXJlIGFib3V0IHRoZSB0aHJlYWQgc2FmZXR5IG9mCisgKiBQUXJlcXVlc3RD YW5jZWxTdGFydCBhbmQgbm90IGFib3V0IGl0cyBub24gYmxvY2tpbmcgZnVuY3Rpb25hbGl0eS4K KyAqLworaW50CitQUWNvbm5lY3RDb21wbGV0ZShQR2Nvbm4gKmNhbmNlbENvbm4pCit7CisJY29u bmVjdERCQ29tcGxldGUoY2FuY2VsQ29ubik7CisJcmV0dXJuIGNhbmNlbENvbm4tPnN0YXR1cyAh PSBDT05ORUNUSU9OX0JBRDsKK30KKwogCiAvKgogICogUFFyZXF1ZXN0Q2FuY2VsOiBvbGQsIG5v dCB0aHJlYWQtc2FmZSBmdW5jdGlvbiBmb3IgcmVxdWVzdGluZyBxdWVyeSBjYW5jZWwKQEAgLTQ2 NzksNDUgKzQ5MjYsMzEgQEAgY2FuY2VsX2VyclJldHVybjoKIGludAogUFFyZXF1ZXN0Q2FuY2Vs KFBHY29ubiAqY29ubikKIHsKLQlpbnQJCQlyOwotCVBHY2FuY2VsICAgKmNhbmNlbDsKLQotCS8q IENoZWNrIHdlIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uICovCi0JaWYgKCFjb25uKQotCQlyZXR1 cm4gZmFsc2U7CisJUEdjb25uCSAgICpjYW5jZWxDb25uID0gTlVMTDsKIAotCWlmIChjb25uLT5z b2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCisJY2FuY2VsQ29ubiA9IFBRcmVxdWVzdENhbmNlbFN0 YXJ0KGNvbm4pOworCWlmICghY2FuY2VsQ29ubikKIAl7Ci0JCXN0cmxjcHkoY29ubi0+ZXJyb3JN ZXNzYWdlLmRhdGEsCi0JCQkJIlBRcmVxdWVzdENhbmNlbCgpIC0tIGNvbm5lY3Rpb24gaXMgbm90 IG9wZW5cbiIsCi0JCQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7Ci0JCWNvbm4tPmVycm9y TWVzc2FnZS5sZW4gPSBzdHJsZW4oY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEpOwotCQljb25uLT5l cnJvclJlcG9ydGVkID0gMDsKLQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JN ZXNzYWdlLCBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5XG4iKSk7CiAJCXJldHVybiBmYWxz ZTsKIAl9CiAKLQljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKLQlpZiAoY2FuY2VsKQotCXsK LQkJciA9IFBRY2FuY2VsKGNhbmNlbCwgY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEsCi0JCQkJCSBj b25uLT5lcnJvck1lc3NhZ2UubWF4bGVuKTsKLQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7Ci0JfQot CWVsc2UKKwlpZiAoY2FuY2VsQ29ubi0+c3RhdHVzID09IENPTk5FQ1RJT05fQkFEKQogCXsKLQkJ c3RybGNweShjb25uLT5lcnJvck1lc3NhZ2UuZGF0YSwgIm91dCBvZiBtZW1vcnkiLAotCQkJCWNv bm4tPmVycm9yTWVzc2FnZS5tYXhsZW4pOwotCQlyID0gZmFsc2U7CisJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsK KwkJZnJlZVBHY29ubihjYW5jZWxDb25uKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmICgh cikKKwlpZiAoIVBRY29ubmVjdENvbXBsZXRlKGNhbmNlbENvbm4pKQogCXsKLQkJY29ubi0+ZXJy b3JNZXNzYWdlLmxlbiA9IHN0cmxlbihjb25uLT5lcnJvck1lc3NhZ2UuZGF0YSk7Ci0JCWNvbm4t PmVycm9yUmVwb3J0ZWQgPSAwOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JN ZXNzYWdlLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJCWZyZWVQR2Nvbm4oY2FuY2Vs Q29ubik7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gcjsKKwlmcmVlUEdjb25uKGNh bmNlbENvbm4pOworCXJldHVybiB0cnVlOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLW1pc2MuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYwppbmRl eCBkNzZiYjM5NTdhLi5hOTQ0Y2IyYzEyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1taXNjLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCkBAIC01NTgs OCArNTU4LDExIEBAIHBxUHV0TXNnRW5kKFBHY29ubiAqY29ubikKICAqIFBvc3NpYmxlIHJldHVy biB2YWx1ZXM6CiAgKgkgMTogc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhdCBsZWFzdCBvbmUgbW9yZSBi eXRlCiAgKgkgMDogbm8gZGF0YSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlLCBidXQgbm8gZXJyb3Ig ZGV0ZWN0ZWQKLSAqCS0xOiBlcnJvciBkZXRlY3RlZCAoaW5jbHVkaW5nIEVPRiA9IGNvbm5lY3Rp b24gY2xvc3VyZSk7CisgKgktMTogZXJyb3IgZGV0ZWN0ZWQgKGV4Y2x1ZGluZyBFT0YgPSBjb25u ZWN0aW9uIGNsb3N1cmUpOwogICoJCWNvbm4tPmVycm9yTWVzc2FnZSBzZXQKKyAqCS0yOiBFT0Yg ZGV0ZWN0ZWQsIGNvbm5lY3Rpb24gaXMgY2xvc2VkCisgKgkJY29ubi0+ZXJyb3JNZXNzYWdlIHNl dAorICoKICAqIE5PVEU6IGNhbGxlcnMgbXVzdCBub3QgYXNzdW1lIHRoYXQgcG9pbnRlcnMgb3Ig aW5kZXhlcyBpbnRvIGNvbm4tPmluQnVmZmVyCiAgKiByZW1haW4gdmFsaWQgYWNyb3NzIHRoaXMg Y2FsbCEKICAqIC0tLS0tLS0tLS0KQEAgLTY0Miw3ICs2NDUsNyBAQCByZXRyeTM6CiAKIAkJCWRl ZmF1bHQ6CiAJCQkJLyogcHFzZWN1cmVfcmVhZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHVz ICovCi0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiBucmVhZDsKIAkJfQogCX0KIAlpZiAobnJl YWQgPiAwKQpAQCAtNzM3LDcgKzc0MCw3IEBAIHJldHJ5NDoKIAogCQkJZGVmYXVsdDoKIAkJCQkv KiBwcXNlY3VyZV9yZWFkIHNldCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdXMgKi8KLQkJCQlyZXR1 cm4gLTE7CisJCQkJcmV0dXJuIG5yZWFkOwogCQl9CiAJfQogCWlmIChucmVhZCA+IDApCkBAIC03 NTUsMTMgKzc1OCwxNyBAQCBkZWZpbml0ZWx5RU9GOgogCQkJCQkJIGxpYnBxX2dldHRleHQoInNl cnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5XG4iCiAJCQkJCQkJCQkgICAi XHRUaGlzIHByb2JhYmx5IG1lYW5zIHRoZSBzZXJ2ZXIgdGVybWluYXRlZCBhYm5vcm1hbGx5XG4i CiAJCQkJCQkJCQkgICAiXHRiZWZvcmUgb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC5c biIpKTsKKwkvKiBEbyAqbm90KiBkcm9wIGFueSBhbHJlYWR5LXJlYWQgZGF0YTsgY2FsbGVyIHN0 aWxsIHdhbnRzIGl0ICovCisJcHFEcm9wQ29ubmVjdGlvbihjb25uLCBmYWxzZSk7CisJY29ubi0+ c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CS8qIE5vIG1vcmUgY29ubmVjdGlvbiB0byBiYWNrZW5k ICovCisJcmV0dXJuIC0yOwogCiAJLyogQ29tZSBoZXJlIGlmIGxvd2VyLWxldmVsIGNvZGUgYWxy ZWFkeSBzZXQgYSBzdWl0YWJsZSBlcnJvck1lc3NhZ2UgKi8KIGRlZmluaXRlbHlGYWlsZWQ6CiAJ LyogRG8gKm5vdCogZHJvcCBhbnkgYWxyZWFkeS1yZWFkIGRhdGE7IGNhbGxlciBzdGlsbCB3YW50 cyBpdCAqLwogCXBxRHJvcENvbm5lY3Rpb24oY29ubiwgZmFsc2UpOwogCWNvbm4tPnN0YXR1cyA9 IENPTk5FQ1RJT05fQkFEOwkvKiBObyBtb3JlIGNvbm5lY3Rpb24gdG8gYmFja2VuZCAqLwotCXJl dHVybiAtMTsKKwlyZXR1cm4gbnJlYWQgPCAwID8gbnJlYWQgOiAtMTsKIH0KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jCmluZGV4IDI0YTU5OGI2ZTQuLjhhMmE3 YzExMmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3Ns LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwpAQCAtMjU1 LDcgKzI1NSw3IEBAIHJsb29wOgogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9y TWVzc2FnZSwKIAkJCQkJCQkJIGxpYnBxX2dldHRleHQoIlNTTCBjb25uZWN0aW9uIGhhcyBiZWVu IGNsb3NlZCB1bmV4cGVjdGVkbHlcbiIpKTsKIAkJCXJlc3VsdF9lcnJubyA9IEVDT05OUkVTRVQ7 Ci0JCQluID0gLTE7CisJCQluID0gLTI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWFwcGVu ZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1zZWN1cmUuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5j CmluZGV4IGExZGM3Yjc5NmQuLjk3NzE4MDVkZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLXNlY3VyZS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5j CkBAIC0yMDEsNiArMjAxLDEyIEBAIHBxc2VjdXJlX2Nsb3NlKFBHY29ubiAqY29ubikKICAqIE9u IGZhaWx1cmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFwcGVuZGluZyBhIHN1 aXRhYmxlIG1lc3NhZ2UKICAqIHRvIGNvbm4tPmVycm9yTWVzc2FnZS4gIFRoZSBjYWxsZXIgbXVz dCBzdGlsbCBpbnNwZWN0IGVycm5vLCBidXQgb25seQogICogdG8gZGV0ZXJtaW5lIHdoZXRoZXIg dG8gY29udGludWUvcmV0cnkgYWZ0ZXIgZXJyb3IuCisgKgorICogUmV0dXJucyAtMSBpbiBjYXNl IG9mIGZhaWx1cmVzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2Ygd2hlcmUgYSBmYWlsdXJlIG1lYW5z CisgKiB0aGF0IHRoZXJlIHdhcyBhIGNsZWFuIGNvbm5lY3Rpb24gY2xvc3VyZSwgaW4gdGhvc2Ug Y2FzZXMgLTIgaXMgcmV0dXJuLgorICogQ3VycmVudGx5IG9ubHkgdGhlIFRMUyBpbXBsZW1lbnRh dGlvbiBvZiBwcXNlY3VyZV9yZWFkIGV2ZXIgcmV0dXJucyAtMi4gRm9yCisgKiB0aGUgb3RoZXIg aW1wbGVtZW50YXRpb25zIGEgY2xlYW4gY29ubmVjdGlvbiBjbG9zdXJlIGlzIGRldGVjdGVkIGlu CisgKiBwcVJlYWREYXRhIGluc3RlYWQuCiAgKi8KIHNzaXplX3QKIHBxc2VjdXJlX3JlYWQoUEdj b25uICpjb25uLCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1mZS5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApp bmRleCA3OTg2NDQ1ZjFhLi4yNDY5NWE2MDI2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKQEAg LTU5LDEyICs1OSwxNSBAQCB0eXBlZGVmIGVudW0KIHsKIAlDT05ORUNUSU9OX09LLAogCUNPTk5F Q1RJT05fQkFELAorCUNPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVELAogCS8qIE5vbi1ibG9ja2lu ZyBtb2RlIG9ubHkgYmVsb3cgaGVyZSAqLwogCiAJLyoKIAkgKiBUaGUgZXhpc3RlbmNlIG9mIHRo ZXNlIHNob3VsZCBuZXZlciBiZSByZWxpZWQgdXBvbiAtIHRoZXkgc2hvdWxkIG9ubHkKIAkgKiBi ZSB1c2VkIGZvciB1c2VyIGZlZWRiYWNrIG9yIHNpbWlsYXIgcHVycG9zZXMuCiAJICovCisJQ09O TkVDVElPTl9TVEFSVElORywJCS8qIFdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gYXR0ZW1wdCB0byBi ZQorCQkJCQkJCQkgKiBzdGFydGVkLiAgKi8KIAlDT05ORUNUSU9OX1NUQVJURUQsCQkJLyogV2Fp dGluZyBmb3IgY29ubmVjdGlvbiB0byBiZSBtYWRlLiAgKi8KIAlDT05ORUNUSU9OX01BREUsCQkJ LyogQ29ubmVjdGlvbiBPSzsgd2FpdGluZyB0byBzZW5kLiAgICAgKi8KIAlDT05ORUNUSU9OX0FX QUlUSU5HX1JFU1BPTlNFLAkvKiBXYWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlCkBAIC0y ODIsNiArMjg1LDcgQEAgZXh0ZXJuIFBHY29ubiAqUFFjb25uZWN0U3RhcnQoY29uc3QgY2hhciAq Y29ubmluZm8pOwogZXh0ZXJuIFBHY29ubiAqUFFjb25uZWN0U3RhcnRQYXJhbXMoY29uc3QgY2hh ciAqY29uc3QgKmtleXdvcmRzLAogCQkJCQkJCQkJY29uc3QgY2hhciAqY29uc3QgKnZhbHVlcywg aW50IGV4cGFuZF9kYm5hbWUpOwogZXh0ZXJuIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgUFFj b25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pOworZXh0ZXJuIGludAlQUWNvbm5lY3RDb21wbGV0ZShQ R2Nvbm4gKmNvbm4pOwogCiAvKiBTeW5jaHJvbm91cyAoYmxvY2tpbmcpICovCiBleHRlcm4gUEdj b25uICpQUWNvbm5lY3RkYihjb25zdCBjaGFyICpjb25uaW5mbyk7CkBAIC0zMzAsOSArMzM0LDEy IEBAIGV4dGVybiB2b2lkIFBRZnJlZUNhbmNlbChQR2NhbmNlbCAqY2FuY2VsKTsKIC8qIGlzc3Vl IGEgY2FuY2VsIHJlcXVlc3QgKi8KIGV4dGVybiBpbnQJUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNl bCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiAKLS8qIGJhY2t3YXJkcyBjb21wYXRp YmxlIHZlcnNpb24gb2YgUFFjYW5jZWw7IG5vdCB0aHJlYWQtc2FmZSAqLworLyogbW9yZSBzZWN1 cmUgdmVyc2lvbiBvZiBQUWNhbmNlbDsgbm90IHRocmVhZC1zYWZlICovCiBleHRlcm4gaW50CVBR cmVxdWVzdENhbmNlbChQR2Nvbm4gKmNvbm4pOwogCisvKiBub24tYmxvY2tpbmcgYW5kIHRocmVh ZC1zYWZlIHZlcnNpb24gb2YgUFFyZXF1ZXN0Q2FuY2VsICovCitleHRlcm4gUEdjb25uICpQUXJl cXVlc3RDYW5jZWxTdGFydChQR2Nvbm4gKmNvbm4pOworCiAvKiBBY2Nlc3NvciBmdW5jdGlvbnMg Zm9yIFBHY29ubiBvYmplY3RzICovCiBleHRlcm4gY2hhciAqUFFkYihjb25zdCBQR2Nvbm4gKmNv bm4pOwogZXh0ZXJuIGNoYXIgKlBRdXNlcihjb25zdCBQR2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0 IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9saWJwcS1pbnQuaAppbmRleCBlMGNlZTRiMTQyLi41MGI2YTdiYzdkIDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9saWJwcS1pbnQuaApAQCAtMzk0LDYgKzM5NCwxMCBAQCBzdHJ1Y3QgcGdfY29ubgogCWNoYXIJ ICAgKnNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbjsJLyogbWF4aW11bSBUTFMgcHJvdG9jb2wgdmVy c2lvbiAqLwogCWNoYXIJICAgKnRhcmdldF9zZXNzaW9uX2F0dHJzOwkvKiBkZXNpcmVkIHNlc3Np b24gcHJvcGVydGllcyAqLwogCisJYm9vbAkJY2FuY2VsUmVxdWVzdDsJLyogdHJ1ZSBpZiB0aGlz IGNvbm5lY3Rpb24gaXMgdXNlZCB0byBzZW5kIGEKKwkJCQkJCQkJICogY2FuY2VsIHJlcXVlc3Qs IGluc3RlYWQgb2YgYmVpbmcgYSBub3JtYWwKKwkJCQkJCQkJICogY29ubmVjdGlvbiB0aGF0J3Mg dXNlZCBmb3IgcXVlcmllcyAqLworCiAJLyogT3B0aW9uYWwgZmlsZSB0byB3cml0ZSB0cmFjZSBp bmZvIHRvICovCiAJRklMRQkgICAqUGZkZWJ1ZzsKIAlpbnQJCQl0cmFjZUZsYWdzOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jIGIvc3JjL3Rlc3QvaXNv bGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCmluZGV4IDEyMTc5ZjI1MTQuLmIwNzMyMzUxOTcgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYworKysgYi9zcmMv dGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMKQEAgLTk0OCwyNiArOTQ4LDE4IEBAIHRy eV9jb21wbGV0ZV9zdGVwKFRlc3RTcGVjICp0ZXN0c3BlYywgUGVybXV0YXRpb25TdGVwICpwc3Rl cCwgaW50IGZsYWdzKQogCQkJICovCiAJCQlpZiAodGQgPiBtYXhfc3RlcF93YWl0ICYmICFjYW5j ZWxlZCkKIAkJCXsKLQkJCQlQR2NhbmNlbCAgICpjYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsK LQotCQkJCWlmIChjYW5jZWwgIT0gTlVMTCkKKwkJCQlpZiAoUFFyZXF1ZXN0Q2FuY2VsKGNvbm4p KQogCQkJCXsKLQkJCQkJY2hhcgkJYnVmWzI1Nl07Ci0KLQkJCQkJaWYgKFBRY2FuY2VsKGNhbmNl bCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCQkJCXsKLQkJCQkJCS8qCi0JCQkJCQkgKiBwcmludCB0 byBzdGRvdXQgbm90IHN0ZGVyciwgYXMgdGhpcyBzaG91bGQgYXBwZWFyCi0JCQkJCQkgKiBpbiB0 aGUgdGVzdCBjYXNlJ3MgcmVzdWx0cwotCQkJCQkJICovCi0JCQkJCQlwcmludGYoImlzb2xhdGlv bnRlc3RlcjogY2FuY2VsaW5nIHN0ZXAgJXMgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwKLQkJCQkJCQkg ICBzdGVwLT5uYW1lLCAoaW50KSAodGQgLyBVU0VDU19QRVJfU0VDKSk7Ci0JCQkJCQljYW5jZWxl ZCA9IHRydWU7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQkJZnByaW50ZihzdGRlcnIsICJQUWNh bmNlbCBmYWlsZWQ6ICVzXG4iLCBidWYpOwotCQkJCQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKKwkJ CQkJLyoKKwkJCQkJICogcHJpbnQgdG8gc3Rkb3V0IG5vdCBzdGRlcnIsIGFzIHRoaXMgc2hvdWxk IGFwcGVhciBpbgorCQkJCQkgKiB0aGUgdGVzdCBjYXNlJ3MgcmVzdWx0cworCQkJCQkgKi8KKwkJ CQkJcHJpbnRmKCJpc29sYXRpb250ZXN0ZXI6IGNhbmNlbGluZyBzdGVwICVzIGFmdGVyICVkIHNl Y29uZHNcbiIsCisJCQkJCQkgICBzdGVwLT5uYW1lLCAoaW50KSAodGQgLyBVU0VDU19QRVJfU0VD KSk7CisJCQkJCWNhbmNlbGVkID0gdHJ1ZTsKIAkJCQl9CisJCQkJZWxzZQorCQkJCQlmcHJpbnRm KHN0ZGVyciwgIlBRY2FuY2VsIGZhaWxlZDogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK IAkJCX0KIAogCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxp bmUvbGlicHFfcGlwZWxpbmUuYyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGli cHFfcGlwZWxpbmUuYwppbmRleCAwZmY1NjNmNTlhLi40ZTUzZDNjMTY1IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCkBAIC04Niw2ICs4 NiwyMTUgQEAgcGdfZmF0YWxfaW1wbChpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LC4uLikKIAll eGl0KDEpOwogfQogCitzdGF0aWMgdm9pZAorY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoUEdjb25u ICpjb25uKQoreworCVBHcmVzdWx0ICAgKnJlcyA9IE5VTEw7CisKKwlyZXMgPSBQUWdldFJlc3Vs dChjb25uKTsKKwlpZiAocmVzID09IE5VTEwpCisJCXBnX2ZhdGFsKCJQUWdldFJlc3VsdCByZXR1 cm5lZCBudWxsOiAlcyIsCisJCQkJIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19GQVRBTF9FUlJPUikKKwkJcGdfZmF0YWwoInF1ZXJ5IGRp ZCBub3QgZmFpbCB3aGVuIGl0IHdhcyBleHBlY3RlZCIpOworCWlmIChzdHJjbXAoUFFyZXN1bHRF cnJvckZpZWxkKHJlcywgUEdfRElBR19TUUxTVEFURSksICI1NzAxNCIpICE9IDApCisJCXBnX2Zh dGFsKCJxdWVyeSBmYWlsZWQgd2l0aCBhIGRpZmZlcmVudCBlcnJvciB0aGFuIGNhbmNlbGxhdGlv bjogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJUFFjbGVhcihyZXMpOworCXdoaWxlIChQ UWlzQnVzeShjb25uKSkKKwl7CisJCVBRY29uc3VtZUlucHV0KGNvbm4pOworCX0KK30KKworc3Rh dGljIHZvaWQKK3Rlc3RfY2FuY2VsKFBHY29ubiAqY29ubikKK3sKKwlQR2NhbmNlbCAgICpjYW5j ZWwgPSBOVUxMOworCVBHY29ubgkgICAqY2FuY2VsQ29ubiA9IE5VTEw7CisJY2hhcgkJZXJyb3Ji dWZbMjU2XTsKKworCWZwcmludGYoc3RkZXJyLCAidGVzdCBjYW5jZWxsYXRpb25zLi4uICIpOwor CisJaWYgKFBRc2V0bm9uYmxvY2tpbmcoY29ubiwgMSkgIT0gMCkKKwkJcGdfZmF0YWwoImZhaWxl ZCB0byBzZXQgbm9uYmxvY2tpbmcgbW9kZTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisK KwkvKiB0ZXN0IFBRY2FuY2VsICovCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdf c2xlZXAoMTApIikgIT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIHF1ZXJ5OiAlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwlp ZiAoIVBRY2FuY2VsKGNhbmNlbCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpKQorCXsKKwkJ cGdfZmF0YWwoImZhaWxlZCB0byBydW4gUFFjYW5jZWw6ICVzIiwgZXJyb3JidWYpOworCX07CisJ Y29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7CisKKwkvKiBQR2NhbmNlbCBvYmplY3QgY2Fu IGJlIHJldXNlZCBmb3IgdGhlIG5leHQgcXVlcnkgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwg IlNFTEVDVCBwZ19zbGVlcCgxMCkiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQg cXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWlmICghUFFjYW5jZWwoY2FuY2Vs LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSkpCisJeworCQlwZ19mYXRhbCgiZmFpbGVkIHRv IHJ1biBQUWNhbmNlbDogJXMiLCBlcnJvcmJ1Zik7CisJfTsKKwljb25maXJtX3F1ZXJ5X2NhbmNl bGxlZChjb25uKTsKKworCVBRZnJlZUNhbmNlbChjYW5jZWwpOworCisJLyogdGVzdCBQUXJlcXVl c3RDYW5jZWwgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBwZ19zbGVlcCgxMCki KSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCWlmICghUFFyZXF1ZXN0Q2FuY2VsKGNvbm4pKQorCQlwZ19mYXRhbCgi ZmFpbGVkIHRvIHJ1biBQUXJlcXVlc3RDYW5jZWw6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikp OworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pOworCisJLyogdGVzdCBQUXJlcXVlc3RD YW5jZWxTdGFydCBhbmQgdGhlbiBwb2xsaW5nIHdpdGggUFFjYW5jZWxDb25uZWN0UG9sbCAqLwor CWlmIChQUXNlbmRRdWVyeShjb25uLCAiU0VMRUNUIHBnX3NsZWVwKDEwKSIpICE9IDEpCisJCXBn X2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBxdWVyeTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7 CisJY2FuY2VsQ29ubiA9IFBRcmVxdWVzdENhbmNlbFN0YXJ0KGNvbm4pOworCWlmIChQUXN0YXR1 cyhjYW5jZWxDb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJcGdfZmF0YWwoImJhZCBjYW5jZWwg Y29ubmVjdGlvbjogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJd2hpbGUgKHRy dWUpCisJeworCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJZmRfc2V0CQlpbnB1dF9tYXNrOworCQlm ZF9zZXQJCW91dHB1dF9tYXNrOworCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHBvbGxyZXMg PSBQUWNvbm5lY3RQb2xsKGNhbmNlbENvbm4pOworCQlpbnQJCQlzb2NrID0gUFFzb2NrZXQoY2Fu Y2VsQ29ubik7CisKKwkJaWYgKHBvbGxyZXMgPT0gUEdSRVNfUE9MTElOR19PSykKKwkJeworCQkJ YnJlYWs7CisJCX0KKworCQlGRF9aRVJPKCZpbnB1dF9tYXNrKTsKKwkJRkRfWkVSTygmb3V0cHV0 X21hc2spOworCQlzd2l0Y2ggKHBvbGxyZXMpCisJCXsKKwkJCWNhc2UgUEdSRVNfUE9MTElOR19S RUFESU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciByZWFkc1xuIik7CisJCQkJRkRfU0VU KHNvY2ssICZpbnB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdSRVNfUE9MTElOR19X UklUSU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciB3cml0ZXNcbiIpOworCQkJCUZEX1NF VChzb2NrLCAmb3V0cHV0X21hc2spOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19m YXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENv bm4pKTsKKwkJfQorCisJCWlmIChzb2NrIDwgMCkKKwkJCXBnX2ZhdGFsKCJzb2NrIGRpZCBub3Qg ZXhpc3Q6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCisJCXR2LnR2X3NlYyA9 IDM7CisJCXR2LnR2X3VzZWMgPSAwOworCisJCXdoaWxlICh0cnVlKQorCQl7CisJCQlpZiAoc2Vs ZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgJm91dHB1dF9tYXNrLCBOVUxMLCAmdHYpIDwgMCkK KwkJCXsKKwkJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJCWNvbnRpbnVlOworCQkJCXBnX2Zh dGFsKCJzZWxlY3QoKSBmYWlsZWQ6ICVtIik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlp ZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgIT0gQ09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQpCisJ CXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNhbmNlbCBjb25uZWN0aW9uIHN0YXR1czogJXMiLCBQUWVy cm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7 CisKKwkvKgorCSAqIHRlc3QgUFFyZXNldFN0YXJ0IHdvcmtzIG9uIHRoZSBjYW5jZWwgY29ubmVj dGlvbiBhbmQgaXQgY2FuIGJlIHJldXNlZAorCSAqIGFmdGVyCisJICovCisJaWYgKCFQUXJlc2V0 U3RhcnQoY2FuY2VsQ29ubikpCisJeworCQlwZ19mYXRhbCgiY2FuY2VsIGNvbm5lY3Rpb24gcmVz ZXQgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl9CisKKwlpZiAo UFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBwZ19zbGVlcCgxMCkiKSAhPSAxKQorCQlwZ19mYXRh bCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWlm IChQUXN0YXR1cyhjYW5jZWxDb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJcGdfZmF0YWwoImJh ZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJ d2hpbGUgKHRydWUpCisJeworCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJZmRfc2V0CQlpbnB1dF9t YXNrOworCQlmZF9zZXQJCW91dHB1dF9tYXNrOworCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBl IHBvbGxyZXMgPSBQUXJlc2V0UG9sbChjYW5jZWxDb25uKTsKKwkJaW50CQkJc29jayA9IFBRc29j a2V0KGNhbmNlbENvbm4pOworCisJCWlmIChwb2xscmVzID09IFBHUkVTX1BPTExJTkdfT0spCisJ CXsKKwkJCWJyZWFrOworCQl9CisKKwkJRkRfWkVSTygmaW5wdXRfbWFzayk7CisJCUZEX1pFUk8o Jm91dHB1dF9tYXNrKTsKKwkJc3dpdGNoIChwb2xscmVzKQorCQl7CisJCQljYXNlIFBHUkVTX1BP TExJTkdfUkVBRElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3IgcmVhZHNcbiIpOworCQkJ CUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBHUkVTX1BP TExJTkdfV1JJVElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Igd3JpdGVzXG4iKTsKKwkJ CQlGRF9TRVQoc29jaywgJm91dHB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9yTWVzc2FnZShj YW5jZWxDb25uKSk7CisJCX0KKworCQlpZiAoc29jayA8IDApCisJCQlwZ19mYXRhbCgic29jayBk aWQgbm90IGV4aXN0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKworCQl0di50 dl9zZWMgPSAzOworCQl0di50dl91c2VjID0gMDsKKworCQl3aGlsZSAodHJ1ZSkKKwkJeworCQkJ aWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssICZvdXRwdXRfbWFzaywgTlVMTCwgJnR2 KSA8IDApCisJCQl7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCQljb250aW51ZTsKKwkJ CQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOworCQkJfQorCQkJYnJlYWs7CisJCX0K Kwl9CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklT SEVEKQorCQlwZ19mYXRhbCgidW5leHBlY3RlZCBjYW5jZWwgY29ubmVjdGlvbiBzdGF0dXM6ICVz IiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCWNvbmZpcm1fcXVlcnlfY2FuY2VsbGVk KGNvbm4pOworCisJUFFmaW5pc2goY2FuY2VsQ29ubik7CisKKwkvKiB0ZXN0IFBRY29ubmVjdENv bXBsZXRlICovCisJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMTApIikg IT0gMSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIHF1ZXJ5OiAlcyIsIFBRZXJyb3JNZXNz YWdlKGNvbm4pKTsKKwljYW5jZWxDb25uID0gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoY29ubik7CisJ aWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlwZ19mYXRhbCgi YmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsK KwlpZiAoIVBRY29ubmVjdENvbXBsZXRlKGNhbmNlbENvbm4pKQorCQlwZ19mYXRhbCgiZmFpbGVk IHRvIHNlbmQgY2FuY2VsOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwljb25m aXJtX3F1ZXJ5X2NhbmNlbGxlZChjb25uKTsKKworCS8qIHRlc3QgUFFjb25uZWN0Q29tcGxldGUg d2l0aCByZXNldCBjb25uZWN0aW9uICovCisJaWYgKCFQUXJlc2V0U3RhcnQoY2FuY2VsQ29ubikp CisJeworCQlwZ19mYXRhbCgiY2FuY2VsIGNvbm5lY3Rpb24gcmVzZXQgZmFpbGVkOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl9CisKKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwg IlNFTEVDVCBwZ19zbGVlcCgxMCkiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQg cXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCWlmIChQUXN0YXR1cyhjYW5jZWxD b25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlv bjogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJaWYgKCFQUWNvbm5lY3RDb21w bGV0ZShjYW5jZWxDb25uKSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIGNhbmNlbDogJXMi LCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQo Y29ubik7CisJUFFmaW5pc2goY2FuY2VsQ29ubik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIm9rXG4i KTsKK30KKwogc3RhdGljIHZvaWQKIHRlc3RfZGlzYWxsb3dlZF9pbl9waXBlbGluZShQR2Nvbm4g KmNvbm4pCiB7CkBAIC0xNTQ1LDYgKzE3NTQsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSkKIHN0YXRpYyB2b2lkCiBwcmludF90ZXN0X2xpc3Qodm9pZCkKIHsKKwlwcmludGYoImNhbmNl bFxuIik7CiAJcHJpbnRmKCJkaXNhbGxvd2VkX2luX3BpcGVsaW5lXG4iKTsKIAlwcmludGYoIm11 bHRpX3BpcGVsaW5lc1xuIik7CiAJcHJpbnRmKCJub3N5bmNcbiIpOwpAQCAtMTY0Miw3ICsxODUy LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlQUVRSQUNFX1NVUFBSRVNT X1RJTUVTVEFNUFMgfCBQUVRSQUNFX1JFR1JFU1NfTU9ERSk7CiAJfQogCi0JaWYgKHN0cmNtcCh0 ZXN0bmFtZSwgImRpc2FsbG93ZWRfaW5fcGlwZWxpbmUiKSA9PSAwKQorCWlmIChzdHJjbXAodGVz dG5hbWUsICJjYW5jZWwiKSA9PSAwKQorCQl0ZXN0X2NhbmNlbChjb25uKTsKKwllbHNlIGlmIChz dHJjbXAodGVzdG5hbWUsICJkaXNhbGxvd2VkX2luX3BpcGVsaW5lIikgPT0gMCkKIAkJdGVzdF9k aXNhbGxvd2VkX2luX3BpcGVsaW5lKGNvbm4pOwogCWVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwg Im11bHRpX3BpcGVsaW5lcyIpID09IDApCiAJCXRlc3RfbXVsdGlfcGlwZWxpbmVzKGNvbm4pOwot LSAKMi4xNy4xCgo= --_002_HE1PR8303MB00732A831BE871DF360A293CF7E09HE1PR8303MB0073_--