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 1nvb8G-0003Gr-0W for pgsql-hackers@arkaria.postgresql.org; Mon, 30 May 2022 08:52:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nvb8E-0002yW-KB for pgsql-hackers@arkaria.postgresql.org; Mon, 30 May 2022 08:52:10 +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 1nvb8D-0002xb-W9 for pgsql-hackers@lists.postgresql.org; Mon, 30 May 2022 08:52:10 +0000 Received: from esa15.fujitsucc.c3s2.iphmx.com ([68.232.156.107]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nvb89-0003Aq-IA for pgsql-hackers@lists.postgresql.org; Mon, 30 May 2022 08:52:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1653900725; x=1685436725; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=KSeznpE3ZUjGIc01TU3ijqI+3CVoZwMXNteQ5T2E8t8=; b=EbPvXo6rMkZBcJe/ZJ8tV22Ot0UhrrVKb640SE3+l5XEMeQm0GNh0fZj IN9dL5WPA07M6u+lIj1tP+fAenBUyo3XzAwu0xlYri98YkGVIt13t8lRT zu5JWEic+Dkac7BGMj1q5W9mH0DSb1XouISZJhgqBPRzXrLtqqzIvm61i bwpe85AYZkHA5ayP6HjkOCFfyjeyxd1efQ7k0WBoG427+4vq3Gx0uugb/ YCUUBhP6W3ieaEJJo64Lgyy2KaT4u7U9Vubzuxo/qGo/vVO/+ByAhRAHs gRr22SHkdORkTMSotvNgjSeCHxTixpiY53/sZM0ICLfqmcNi2ad4VpId1 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10362"; a="56842832" X-IronPort-AV: E=Sophos;i="5.91,262,1647270000"; d="scan'208,223";a="56842832" Received: from mail-os0jpn01lp2112.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.112]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2022 17:52:03 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mAyhJfLbimHe0qoJMA0kb8TpSwSYWZ49E5/ZzCL1oLyijVjC4+lo/sNHnVcDujkpaQaYRCqCDyZGB06vsQkm9bZ7tYpROg8vtqrR0Jc05woGF8c0mwlUXPtzG1Qyk4wyi+9m5ATi/DFDClihOo4PSINcVpj9Q5buME30MRVgTT53SUaw5aqjn73/iwYkIjrty+vEKY0XoeeRYyhqmq9Ge0NwjX91HT7QrxY+jDKyt1lsZ5vcpBw0oFQdlfXJcStOe91VCCq8vWzS0HNeicor/tGAsXqjF/txijLU4cBOb8fC9WU0PfuaX2mZfEDcQzF/1pAeN4xBF1iOUEOJJ95yMg== 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=uco5zL+04uae+plSuS73TowjTl/y01E4AhWfUv3/8BI=; b=Z7wSipUdOE8QRF3Dia8GSRC2aH/a6ox7UZPP/wXyR1R7s+psBkb0PQ7PFA0QseEgx24AIc9jhdLC8eqQOQ2aDYXnw5mGrmagPp9v2WuTnr8NlkL3QnfI3Urp5EkG2mc7rO3RLyhMVqmKhZhJRo0KzK6dvvaHifv4izlifba/tvYlGvDOSXzmxqw7S8PgiFnBys6SR/4wTEgu17DezC8i76ntPksTnjMJ5hMxR97WU802wvGmngKryCKmB4pIQO0GZhXaVlegyEiL5zxKbOzpVTIva6XB+77u7oUmzuhLhXsyxU82Zsef4p8Qjs95FDCLx861foVDJalwI01XJgK4iA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uco5zL+04uae+plSuS73TowjTl/y01E4AhWfUv3/8BI=; b=pK3P5yKmzx4R2nMsYrGAnhyy7PPAzpOT9qT3C7mOK2wjq+2Bhlc/wN50Uf183l9J1BZMwU6gtwNkAUGzpLHM+cfRv9+zRLNZ6htoytMdfiF1/BJos33QrZ4kfKaGZAk0l+CJgcQGJvBohBUAGsbd6aK+X42V4xy6JlIokVowcaQ= Received: from OS3PR01MB6275.jpnprd01.prod.outlook.com (2603:1096:604:f1::8) by OS3PR01MB9383.jpnprd01.prod.outlook.com (2603:1096:604:1cf::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13; Mon, 30 May 2022 08:51:59 +0000 Received: from OS3PR01MB6275.jpnprd01.prod.outlook.com ([fe80::5d40:5c2d:b875:f813]) by OS3PR01MB6275.jpnprd01.prod.outlook.com ([fe80::5d40:5c2d:b875:f813%8]) with mapi id 15.20.5293.019; Mon, 30 May 2022 08:51:59 +0000 From: "wangw.fnst@fujitsu.com" To: Peter Smith , "shiy.fnst@fujitsu.com" CC: "houzj.fnst@fujitsu.com" , Amit Kapila , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX4/KZEbPJKjUy7J1pJS8eGYazlvxQAgAkRYICACBI2gIABs50AgAA5UwCAApvIgIAFAGuAgAXc1wCAADa7gIALO/aAgAsRZICAB606AIAS9tXQ Date: Mon, 30 May 2022 08:51:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3df0230d-8ace-445b-1659-08da4219a861 x-ms-traffictypediagnostic: OS3PR01MB9383:EE_ 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: kChO2/JGblAGKXUSNsDF0P6L2KwdbuVkNPBMmiTjLP+wnuNJt+zvdvtMNuDEaRXBW7EaN9IS2Tv3xXI1OX/5CvPgRP8QLxxG1UfycsCsBymZrLFZhvjYs/YilfvrtsMVJzGJQ++3DQeaoFiDkwmbccJKH0DpUwRRbJLQk1wFPSOPuuTZ+Bln/Vvpr6Ib/REf12mGPwJjPOrvDNjs6CMG30pAh7TbRgddgGEV26iGjeo38LV39VCDhcPaof7dP7qRpDDU+73tEgZ7isNNMgNe0JOhCp2a9Uk8tu2RQQl71r0HOMFQmra+WW7Pvit//NsfU00LQw5gkxi6ioKqWvRAk+ziwL7FmSBlKQsISbDxho7s/kEhvPLzgu5oPbHNEqtPJdVzfzSusSGkbgYgiUVphzFumRWVN8Nj4x4duBgDx32S3h2xeOIbluJmQsoNsabaRz66yrC6ND7yH0TLrNSK3DUnyaQiFb0P01y0vgHhGEdqHIBwpzznAgLMoZWM7Xs9B+DCDSMSAw5o9B5vZzUWszo2lCLxbQOCMdKtVrRsOFpU0XHYb8krA6cBRmBu8wkGCwwl818R64VdA+KbIu1EVI97bp2aohtJkRnQZ3pFVA8wgSqQomKz2qH4fQlxR8e7bmdzIiZVJIPoiDFiFXBHCPDujedbAM87qpUjrtHfQjJvURNrC8a+g+tRyIDPH+99pkyOMgYOdOkQoso5LfRShpMWaj+E/pHc3d6E+wKNGU+VmUXJAr3+XkJ7upoBqmRWgnC4Of8UzrAewhYIE9tjCjE4o9x/FUlu5cE7igcpAAI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3PR01MB6275.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(71200400001)(6636002)(6506007)(38070700005)(53546011)(99936003)(5660300002)(33656002)(83380400001)(54906003)(110136005)(38100700002)(122000001)(966005)(316002)(76116006)(4326008)(55016003)(66476007)(66946007)(66556008)(64756008)(66446008)(2906002)(82960400001)(9686003)(86362001)(8936002)(26005)(8676002)(508600001)(52536014)(7696005)(85182001)(186003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dDZXWURIRnZxUmhMMjZWaWFleVM0UUt0WGRuRjZkV0Y1eTE0NmY5WUZ0bTR3?= =?utf-8?B?RHhNVk43UFkxUWJ5TTlyMU1pR3BKb2hDTXhPSVUwRlc4Q01kbVdVQWlwSmdZ?= =?utf-8?B?aDlNYnprUkxWTEFoMFkyUGRkRDJDaXNMQjZsMHdYMnZtbXI3ZFpaUGYvYmVG?= =?utf-8?B?c3FxZVd2WW94QVZPRk5oTFkzelpQMjI0MWNKYWQyZEVVRUJsRlorYlZHUmR5?= =?utf-8?B?b3pZUEErN0FJRmRhaTRkazJuL1lVU1VRc0MwZ2tjM2NrVDRYUDEyTE5yWVJp?= =?utf-8?B?OUlZa3dkQlpKZkFsWWZoNi90NjAxcVJkNnZMUDlKU0tGc3Q0WG9ldlR5dUdZ?= =?utf-8?B?RGw0U1FUUzdRQnlnZlVWWVdMM0tKaGk4UU5yaFl0eTRzNFVYMUJTeVdhSE9t?= =?utf-8?B?UTVZeFpwZHRHazdRUG83YmVtZTF6cVp1ZG9tdFNmQTJXZ3NsTjlZdlZHRmor?= =?utf-8?B?Situc21VdW9qMlNVOU5xWUs3OWY1SHJnZWt0b2trQjVIZzlUYWl2RTZQenB6?= =?utf-8?B?YWhBUnJzT3Q4MFV0ZzAzeXQ2M3M3UktnZjRLcnNINWFSY3VGR0U5TmFKcGVZ?= =?utf-8?B?VHZqK2ZjdzdDR2hiallRR1d3blJHOXR3bi9OSVdONWh1RVJMWnVRMmY4eXY5?= =?utf-8?B?bHZ0K1YwSm1ielRVTi9FVy9nNUdSNzM1UzdPY0FNU0tzWWNuYmxWUVNROUx2?= =?utf-8?B?WGE1d1l1YlpFMGJsZ3djQjg2NXJzN2dJNEV3cm03eDJsVXpibVYwSDN0SHdq?= =?utf-8?B?SDNzWnNnUTRmc3VZVlRzTTRYNDlzbGZEUFZZK1dxZWdmVjBXRXBTQVV0blNP?= =?utf-8?B?WE8zb1BaelZyeHV0clMwbUNvN09RTUFmN3gySEgwcWVYZkNlbUJySUcvYzJD?= =?utf-8?B?WHJpaDljVWRkWTdVOThmZDZoYXBZZ3N0Y3VDTXdOL1FpQnZ3WkxjTWxrVkJI?= =?utf-8?B?cHlMeU5BU2xtdE83MXA3ckFJejRkVjdOQnd4ZHdoTWtYSHZzQnVYaHpwWU1E?= =?utf-8?B?aVlQK2gyQWJESzJtNTFac2NoSkZ4Vzhnd3ptcnJzcTdKdU9CNm54TjA1eFhZ?= =?utf-8?B?Ly9iUnVHajNSV3ZVS1BoMWpkUmZINy9McHpaV09ESlEvTWZLNXZFcTJJcU0v?= =?utf-8?B?aUcxQUhjeU1MSnNuUitJUy9rSHRNY1FWN0JjYjJ3TjhONXMvb2VwbjBlRGpp?= =?utf-8?B?V1o3TjA2V3pJdG1JUS9WTWRKYU41RUw2QzNpdGt6WnZmNUp2S09WOHdzZEZq?= =?utf-8?B?SzRibEVpVVNSaHQrT05hS2FGbWZTN2dwZGF6UmgwbzRGVjByY2hSVG5lN2VI?= =?utf-8?B?eTZNTDlMZEZMcHEvUzlwNk1iT2J2b2R1ODRqMjZGaHdydjV1eWwvTVV1aEhi?= =?utf-8?B?dVNvYWNnazNPMTdJMURjUEFvQUdFNnZXa3k2Smk5YVBPSUlNYldWaUZhWWxm?= =?utf-8?B?VFZzQmpWOWhhQW12Qk96NXlxaWdSZysyZzFFWTJsSHFtRXpjTy9OaTQvYXYw?= =?utf-8?B?SkdKOHpUeEoydVJEbkdaMEkvclBrNXhobVZIN09LcEs1dmROdTRaMDcwUStu?= =?utf-8?B?VnRYcnZlbDhiVEdzZDE1Y3ByQ3BnTzIzcmJMVWJrc0k3YzNVa2xmblNjV1ho?= =?utf-8?B?Vy9WSlV5M0VNdmZ0VjY4VzVjNVY3WVZTZ3ZQeWVMVzZyaXREd05oYVF3RU9x?= =?utf-8?B?VzRLTjdSZGVsaWI1SkNsR0hnL2VJMVBqMDV6UFhhWEJrUGVvb2t1cndLZ0l1?= =?utf-8?B?My9wL3kvNm5yRzN2VkZLRzFvOFRXQXhmNENXZmIra2FTTHU0cTlGM3lFaVlY?= =?utf-8?B?UmRvRkIwdnNXNVc5SjNTRTYvWHQ4dU5EU2kxTWNnRTZsZVRmeCt0cnlRelhZ?= =?utf-8?B?bHRyVmhwWU5xZWYxSk4reFJEb3RGZU9LU082SXo0TjVZZS9oQ3psais3QjZW?= =?utf-8?B?b2Qralo2NHZTWVgvaVl0blJqaG5pbmhEMjNmSTN1ZmtnM3lmYU00dGJ5WDgy?= =?utf-8?B?cXhjQXFMUlE1YnArMkxGM1Q5WTNNUGkrTzl5d09hbDByQm5HMzBEZ3pMcDhX?= =?utf-8?B?bTRLZE5MUjl4SVUzT0VxajcvYTl3YWpvU2xDVFptaFdDMkF6TUY3KzhKOFRa?= =?utf-8?B?VERaMy9kQ3k0TERaN3dzeXpWNzFXLzJoVmhOOTBlN0t2bDA0ajhwSXVtRWlj?= =?utf-8?B?aVEwWXNkK3IxbkxwSXp3blZLb3Y4NVAxYjlhbzA0VUh0bHg1bitiblV4TldR?= =?utf-8?B?N2hKVmpZUldrR3pPb3B4MVlMQ1prWFBqYXFUZnViL1ZOemNpSnl1VktCSHha?= =?utf-8?B?Sk5iZHRZUGpTWUhVdndtekxoK3ZzWDRkd2p1YWZSdk4vUGI1OWJrZz09?= Content-Type: multipart/mixed; boundary="_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS3PR01MB6275.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3df0230d-8ace-445b-1659-08da4219a861 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 May 2022 08:51:59.2272 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9hs+Y8CCS10/3iSx0RnaA8Ek5c+1mViwCXUhr7TOfAE7F+f0TD3zZqiUEq6u1ah1gWwV5QMbLX/K3AmcN22EQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB9383 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkLCBNYXkgMTgsIDIwMjIgMzoxMSBQTSBQZXRlciBTbWl0aCA8c21pdGhwYjIyNTBAZ21h aWwuY29tPiB3cm90ZToNCj4gIkhlcmUgYXJlIG15IHJldmlldyBjb21tZW50cyBmb3IgdjYtMDAw MS4NClRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4NCg0KPiA3LiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgLSBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFs DQo+IA0KPiArDQo+ICsgQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KSk7DQo+ICsNCj4gDQo+IEkgdGhpbmsgdGhlcmUgc2hvdWxkIGJlIGEgY29tbWVudCBoZXJlIHRv IHNheSB0aGF0IHRoaXMgbG9jayBpcw0KPiByZXF1aXJlZC9leHBlY3RlZCB0byBiZSByZWxlYXNl ZCBieSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uDQpJTUhPLCBpdCBtYXliZSBub3QgYSBw cm9ibGVtIHRvIHJlYWQgY29kZSBoZXJlLg0KSW4gYWRkaXRpb24sIGtlZXAgY29uc2lzdGVudCB3 aXRoIG90aGVyIHBsYWNlcyB3aGVyZSBpbnZva2UgdGhpcyBmdW5jdGlvbiBpbg0KdGhlIHNhbWUg ZmlsZS4gU28gSSBkaWQgbm90IGNoYW5nZSB0aGlzLg0KDQo+IDkuIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgLSBHZW5lcmFsDQo+IA0KPiBTb21lIG9mIHRoZSBsb2dz IGhhdmUgYSBwcmVmaXggIltBcHBseSBCR1cgIyV1XSIgYW5kIHNvbWUgZG8gbm90OyBJDQo+IGRp ZCBub3QgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHlvdSBkZWNpZGVkIHRvIHByZWZpeCBvciBub3Qg c28gSSBkaWQNCj4gbm90IGNvbW1lbnQgYWJvdXQgdGhlbSBpbmRpdmlkdWFsbHkuIEFyZSB0aGV5 IGFsbCBPSz8gUGVyaGFwcyBpZiB5b3UNCj4gY2FuIGV4cGxhaW4gdGhlIHJlYXNvbiBmb3IgdGhl IGNob2ljZXMgSSBjYW4gcmV2aWV3IGl0IGJldHRlciBuZXh0DQo+IHRpbWUuDQpJIHRoaW5rIG1v c3Qgb2YgdGhlc2UgbG9ncyBzaG91bGQgYmUgbG9nZ2VkIGluIGRlYnVnIG1vZGUuIFNvIEkgY2hh bmdlZCB0aGVtIHRvDQoiREVCVUcxIiBsZXZlbC4NCkFuZCBJIGFkZGVkIHRoZSBwcmVmaXggdG8g YWxsIG1lc3NhZ2VzIGxvZ2dlZCBieSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBhbmQNCmRlbGV0 ZWQgc29tZSBsb2dzIHRoYXQgSSB0aGluayBtYXliZSBub3QgdmVyeSBoZWxwZnVsLiANCg0KPiAx MS4gc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAtIGZpbGUgaGVhZGVy IGNvbW1lbnQNCj4gDQo+IFRoZSB3aG9sZSBjb21tZW50IGlzIHNpbWlsYXIgdG8gdGhlIGNvbW1p dCBtZXNzYWdlIHNvIGFueSBjaGFuZ2VzIG1hZGUNCj4gdGhlcmUgKGZvciAjMiwgIzMpIHNob3Vs ZCBiZSBtYWRlIGhlcmUgYWxzby4NCkltcHJvdmUgdGhlIGNvbW1lbnRzIGFzIHN1Z2dlc3RlZCBp biAjMi4NClNvcnJ5IGJ1dCBJIGRpZCBub3QgZmluZCBzYW1lIG1lc3NhZ2UgYXMgIzIgaGVyZS4N Cg0KPiAxMy4gc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYw0KPiANCj4g V29ya2VyU3RhdGUNCj4gV29ya2VyRW50cnkNCj4gDQo+IEkgZmVsdCB0aGF0IHRoZXNlIHN0cnVj dCBuYW1lcyBzZWVtIHRvbyBnZW5lcmljIC0gc2hvdWxkbid0IHRoZXkgYmUNCj4gc29tZXRoaW5n IG1vcmUgbGlrZSBBcHBseUJnd29ya2VyU3RhdGUsIEFwcGx5Qmd3b3JrZXJFbnRyeQ0KPiANCj4g fn5+DQpJIHRoaW5rIHdlIGhhdmUgdXNlZCAiQXBwbHlCZ3dvcmtlclN0YXRlIiBpbiB0aGUgcGF0 Y2guIFNvIEkgaW1wcm92ZWQgdGhpcyB3aXRoDQp0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6 DQpgYGANCkFwcGx5Qmd3b3JrZXJTdGF0ZSAtPiBBcHBseUJnd29ya2VyU3RhdHVzDQpXb3JrZXJT dGF0ZSAtPiBBcHBseUJnd29ya2VyU3RhdGUNCldvcmtlckVudHJ5IC0+IEFwcGx5Qmd3b3JrZXJF bnRyeQ0KYGBgDQpCVFcsIEkgYWxzbyBtb2RpZmllZCB0aGUgcmVsZXZhbnQgY29tbWVudHMgYW5k IHZhcmlhYmxlIG5hbWVzLg0KDQo+IDE2LiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jIC0gaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uDQo+IA0KPiArICogRm9yIHRo ZSBtYWluIGFwcGx5IHdvcmtlciwgaWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJlY2VpdmluZyBhIGJs b2NrIG9mDQo+ICsgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlIHNlbmQgdGhlIGRhdGEgdG8g dGhlIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLg0KPiArICoNCj4gKyAqIEZvciB0aGUgYXBwbHkg YmFja2dyb3VuZCB3b3JrZXIsIGRlZmluZSBhIHNhdmVwb2ludCBpZiBuZXcgc3VidHJhbnNhY3Rp b24NCj4gKyAqIHdhcyBzdGFydGVkLg0KPiAgICoNCj4gICAqIFJldHVybnMgdHJ1ZSBmb3Igc3Ry ZWFtZWQgdHJhbnNhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2UgKHJlZ3VsYXIgbW9kZSkuDQo+ICAg Ki8NCj4gIHN0YXRpYyBib29sDQo+ICBoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNh bFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpDQo+IA0KPiAxNmEuDQo+IFR5cG86ICJp ZiBuZXcgc3VidHJhbnNhY3Rpb24iIC0+ICJpZiBhIG5ldyBzdWJ0cmFuc2FjdGlvbiINCj4gDQo+ IDE2Yi4NCj4gVGhhdCAicmVndWxhciBtb2RlIiBjb21tZW50IHNlZW1zIG5vdCBxdWl0ZSByaWdo dCBiZWNhdXNlIElJVUMgaXQgYWxzbw0KPiByZXR1cm5zIGZhbHNlIGFsc28gZm9yIGEgYmd3b3Jr ZXIgKHdoaWNoIGhhcmRseSBzZWVtcyBsaWtlIGEgInJlZ3VsYXINCj4gbW9kZSIpDQoxNmEuIElt cHJvdmVkIGl0IGFzIHN1Z2dlc3RlZC4NCjE2Yi4gQ2hhbmdlZCB0aGUgY29tbWVudCBhcyBmb2xs b3dzOg0KRnJvbToNCmBgYA0KKiBSZXR1cm5zIHRydWUgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9u cywgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFyIG1vZGUpLg0KYGBgDQpUbzoNCmBgYA0KICogRm9y IG5vbi1zdHJlYW1lZCB0cmFuc2FjdGlvbnMsIHJldHVybnMgZmFsc2U7DQogKiBGb3Igc3RyZWFt ZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIHRydWUgaWYgaW4gbWFpbiBhcHBseSB3b3JrZXIsIGZh bHNlDQogKiBvdGhlcndpc2UuDQpgYGANCg0KPiAxOS4gc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYyAtIGZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3b3JrZXINCj4gDQo+ICsg aWYgKGZvdW5kKQ0KPiArIHsNCj4gKyBlbnRyeS0+d3N0YXRlLT5wc3RhdGUtPnN0YXRlID0gQVBQ TFlfQkdXT1JLRVJfQlVTWTsNCj4gKyByZXR1cm4gZW50cnktPndzdGF0ZTsNCj4gKyB9DQo+ICsg ZWxzZSBpZiAoIXN0YXJ0KQ0KPiArIHJldHVybiBOVUxMOw0KPiArDQo+ICsgLyogSWYgdGhlcmUg aXMgYXQgbGVhc3Qgb25lIHdvcmtlciBpbiB0aGUgaWRsZSBsaXN0LCB0aGVuIHRha2Ugb25lLiAq Lw0KPiArIGlmIChsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNJZGxlTGlzdCkgPiAwKQ0KPiANCj4g SSBmZWx0IHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgY29tbWVudCAoYWZ0ZXIgdGhlIHJldHVybiBO VUxMKSB0aGF0IHNheXM6DQo+IA0KPiAvKg0KPiAgKiBTdGFydCBhIG5ldyBhcHBseSBiYWNrZ3Jv dW5kIHdvcmtlcg0KPiAgKi8NCj4gDQo+IH5+fg0KSW1wcm92ZSB0aGlzIGNvbW1lbnQgaGVyZS4N CkFmdGVyIHRoZSBjb2RlIHRoYXQgeW91IG1lbnRpb25lZCwgaXQgd2lsbCB0cnkgdG8gZ2V0IGEg YXBwbHkgYmFja2dyb3VuZA0Kd29ya2VyICh0cnkgdG8gc3RhcnQgb25lIG9yIHRha2Ugb25lIGZy b20gaWRsZSBsaXN0KS4gU28gSSBjaGFuZ2UgdGhlIGNvbW1lbnQNCmFzIGZvbGxvd3M6DQpGcm9t Og0KYGBgDQovKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgd29ya2VyIGluIHRoZSBpZGxlIGxp c3QsIHRoZW4gdGFrZSBvbmUuICovDQpgYGANClRvOg0KYGBgDQovKg0KICogTm93LCB3ZSB0cnkg dG8gZ2V0IGEgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuDQogKiBJZiB0aGVyZSBpcyBhdCBsZWFz dCBvbmUgd29ya2VyIGluIHRoZSBpZGxlIGxpc3QsIHRoZW4gdGFrZSBvbmUuDQogKiBPdGhlcndp c2UsIHdlIHRyeSB0byBzdGFydCBhIG5ldyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4NCiAqLw0K YGBgDQoNCj4gMjIuIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgLSBh cHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0DQo+IA0KPiAgIC8qDQo+IC0gKiBJbml0aWFsaXplIHRo ZSB3b3JrZXIncyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcyB3aWxsIGJl DQo+IC0gKiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28gY3Jl YXRlIGl0IGluIGEgcGVybWFuZW50DQo+IC0gKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0 aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQ0KPiAtICogdHJhbnNhY3Rp b24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlzIGFuZCBvdGhlciBzdHJlYW1pbmcgdHJhbnNhY3Rp b25zLg0KPiAtICogTm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFydCBv ZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0DQo+IC0gKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhh dCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4NCj4gKyAqIElmIHdlIGFyZSBpbiBtYWluIGFwcGx5IHdv cmtlciwgY2hlY2sgaWYgdGhlcmUgaXMgYW55IGZyZWUgYmd3b3JrZXINCj4gKyAqIHdlIGNhbiB1 c2UgdG8gcHJvY2VzcyB0aGlzIHRyYW5zYWN0aW9uLg0KPiAgICovDQo+IC0gaWYgKE15TG9naWNh bFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkNCj4gKyBzdHJlYW1fYXBwbHlfd29y a2VyID0gYXBwbHlfYmd3b3JrZXJfZmluZF9vcl9zdGFydChzdHJlYW1feGlkLA0KPiBmaXJzdF9z ZWdtZW50KTsNCj4gDQo+IDIyYS4NCj4gVHlwbzogImluIG1haW4gYXBwbHkgd29ya2VyIiAtPiAi aW4gdGhlIG1haW4gYXBwbHkgd29ya2VyIg0KPiANCj4gMjJiLg0KPiBTaW5jZSB0aGlzIGlzIG5v dCBpZi9lbHNlIGNvZGUsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBwdXQNCj4gQXNzZXJ0KCFhbV9h cHBseV9iZ3dvcmtlcigpKTsgYWJvdmUgdGhpcyBqdXN0IHRvIG1ha2UgaXQgbW9yZSBjbGVhci4N CjIyYS4gSW1wcm92ZWQgaXQgYXMgc3VnZ2VzdGVkLg0KMjJiLiANCklNSE8sIHNpbmNlIHdlIGhh dmUgYGlmIChhbV9hcHBseV9iZ3dvcmtlcigpKWAgYWJvdmUgYW5kIGl0IHdpbGwgcmV0dXJuIGlu IHRoaXMNCmlmLWNvbmRpdGlvbiwgc28gSSBqdXN0IHRoaW5rIEFzc2VydCgpIG1pZ2h0IGJlIGEg Yml0IHJlZHVuZGFudCBoZXJlLg0KU28gSSBkaWQgbm90IGNoYW5nZSB0aGlzLg0KIA0KPiAyNi4g c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAtIGFwcGx5X2hhbmRsZV9z dHJlYW1fYWJvcnQNCj4gDQo+ICsgaWYgKGZvdW5kKQ0KPiArIHsNCj4gKyBlbG9nKExPRywgInJv bGxlZCBiYWNrIHRvIHNhdmVwb2ludCAlcyIsIHNwbmFtZSk7DQo+ICsgUm9sbGJhY2tUb1NhdmVw b2ludChzcG5hbWUpOw0KPiArIENvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOw0KPiArIHN1Ynhh Y3RsaXN0ID0gbGlzdF90cnVuY2F0ZShzdWJ4YWN0bGlzdCwgaSArIDEpOw0KPiArIH0NCj4gDQo+ IERvZXMgdGhpcyBuZWVkIHRvIGxvZyBhbnl0aGluZyBpZiBub3RoaW5nIHdhcyBmb3VuZD8gT3Ig aXMgaXQgb2sgdG8NCj4gbGVhdmUgYXMtaXMgYW5kIHNpbGVudGx5IGlnbm9yZSBpdD8NClllcywg SSB0aGluayBpdCBpcyBva2F5Lg0KDQo+IDMzLiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jIC0gY2hlY2tfd29ya2Vyc19zdGF0dXMNCj4gDQo+ICsvKiBTZXQgdGhlIHN0 YXRlIG9mIGFwcGx5IGJhY2tncm91bmQgd29ya2VyICovDQo+ICtzdGF0aWMgdm9pZA0KPiArYXBw bHlfYmd3b3JrZXJfc2V0X3N0YXRlKGNoYXIgc3RhdGUpDQo+IA0KPiBNYXliZSBPSywgb3IgcGVy aGFwcyBjaG9vc2UgZnJvbSBvbmUgb2Y6DQo+IC0gIlNldCB0aGUgc3RhdGUgb2YgYW4gYXBwbHkg YmFja2dyb3VuZCB3b3JrZXIiDQo+IC0gIlNldCB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIg c3RhdGUiDQpJbXByb3ZlIGl0IGJ5IHVzaW5nIHRoZSBzZWNvbmQgb25lLg0KDQo+IDM0LiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jIC0gZ2V0U3Vic2NyaXB0aW9ucw0KPiANCj4gQEAgLTQ0NTAs NyArNDQ1MCw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkNCj4gICBpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApDQo+ICAgYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICIgcy5zdWJzdHJlYW0sXG4iKTsNCj4gICBlbHNlDQo+IC0gYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIgZmFsc2UgQVMgc3Vic3RyZWFtLFxuIik7DQo+ICsgYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICIgJ2YnIEFTIHN1YnN0cmVhbSxcbiIpOw0KPiANCj4gDQo+IElzIHRoYXQg bG9naWMgcmlnaHQ/IEJlZm9yZSB0aGlzIHBhdGNoIHRoZSBhdHRyaWJ1dGUgd2FzIGJvb2w7IG5v dyBpdA0KPiBpcyBjaGFyLiBTbyBkb2Vzbid0IHRoZXJlIG5lZWQgdG8gYmUgc29tZSBjb252ZXJz aW9uL21hcHBpbmcgaGVyZSBmb3INCj4gd2hlbiB5b3UgcmVhZCBmcm9tID49IDE0MDAwMCBidXQg aXQgd2FzIHN0aWxsIGJvb2wgc28geW91IG5lZWQgdG8NCj4gY29udmVydCAnZmFsc2UnIC0+ICdm JyBhbmQgJ3RydWUnIC0+ICd0Jz8NClllcywgSSB0aGluayBpdCBpcyByaWdodC4NCldlIGNvdWxk IGhhbmRsZSB0aGUgaW5wdXQgb2Ygb3B0aW9uICJzdHJlYW1pbmciIDogb24vdHJ1ZS9vZmYvZmFs c2UvYXBwbHkuDQoNClRoZSByZXN0IG9mIHRoZSBjb21tZW50cyBhcmUgaW1wcm92ZWQgYXMgc3Vn Z2VzdGVkLg0KDQoNCkFuZCB0aGFua3MgZm9yIFNoaSBZdSB0byBpbXByb3ZlIHRoZSBwYXRjaCAw MDAyIGJ5IGFkZHJlc3NpbmcgdGhlIGNvbW1lbnRzIGluDQpbMV0uDQoNCkF0dGFjaCB0aGUgbmV3 IHBhdGNoZXMob25seSBjaGFuZ2VkIDAwMDEgYW5kIDAwMDIpDQoNClsxXSAtIGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FIdXQlMkJQdl8wbmZVeHJpd3hCUW5aVE9GNWR5 NW5mRzVOdFdNcjhlMDBtUHJ0MlZqenclNDBtYWlsLmdtYWlsLmNvbQ0KDQpSZWdhcmRzLA0KV2Fu ZyB3ZWkNCg== --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v7-0001-Perform-streaming-logical-transactions-by-backgro.patch" Content-Description: v7-0001-Perform-streaming-logical-transactions-by-backgro.patch Content-Disposition: attachment; filename="v7-0001-Perform-streaming-logical-transactions-by-backgro.patch"; size=76455; creation-date="Mon, 30 May 2022 08:48:00 GMT"; modification-date="Mon, 30 May 2022 08:51:56 GMT" Content-Transfer-Encoding: base64 RnJvbSAwMzIyZTM3ZGE3ZGNhOWIzZmVkYWU0Mzk1NTFiNjQxYzEwMTAzMGMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY3IDEvNF0gUGVyZm9ybSBzdHJlYW1pbmcgbG9naWNhbCB0cmFuc2FjdGlvbnMgYnkgYmFja2dy b3VuZAogd29ya2VycwoKQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVi bGlzaGVyIHNlbmRzIHRoZSBkYXRhIGluIG11bHRpcGxlCnN0cmVhbXMgKGNoYW5nZXMgZGl2aWRl ZCBpbnRvIGNodW5rcyBkZXBlbmRpbmcgdXBvbiBsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtKSwK YW5kIHRoZW4gb24gdGhlIHN1YnNjcmliZXItc2lkZSwgdGhlIGFwcGx5IHdvcmtlciB3cml0ZXMg dGhlIGNoYW5nZXMgaW50bwp0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQgcmVjZWl2ZXMgdGhl IGNvbW1pdCwgaXQgcmVhZHMgZnJvbSB0aGUgZmlsZSBhbmQKYXBwbGllcyB0aGUgZW50aXJlIHRy YW5zYWN0aW9uLiBUbyBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoCnRyYW5zYWN0aW9u cywgd2UgY2FuIGluc3RlYWQgYWxsb3cgdGhlbSB0byBiZSBhcHBsaWVkIHZpYSBiYWNrZ3JvdW5k IHdvcmtlcnMuCgpJbiB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgYXBwbHkgYmFja2dy b3VuZCB3b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMKc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0IHN0 cmVhbSBpcyByZWNlaXZlZCBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdpbGwgc2VuZApjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyIHdpbGwKZGlyZWN0bHkgYXBwbHkgdGhlIGNoYW5nZSBpbnN0ZWFkIG9mIHdy aXRpbmcgaXQgdG8gdGVtcG9yYXJ5IGZpbGVzLiBXZSBrZWVwCnRoaXMgd29ya2VyIGFzc2lnbmVk IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZv cgp0aGUgd29ya2VyIHRvIGZpbmlzaCBhdCBjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBv cmRlcmluZyBhbmQgYXZvaWRzCndyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSBmaWxlIGluIG1v c3QgY2FzZXMuIFdlIHN0aWxsIG5lZWQgdG8gc3BpbGwgaWYgdGhlcmUKaXMgbm8gd29ya2VyIGF2 YWlsYWJsZS4gV2UgYWxzbyBuZWVkIHRvIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5 IHRoZQphcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB0byBhdm9pZCBkZWFkbG9ja3MgYmVjYXVzZSBU LTEncyBjdXJyZW50IHN0cmVhbSBvZgpjaGFuZ2VzIGNhbiB1cGRhdGUgcm93cyBpbiBjb25mbGlj dGluZyBvcmRlciB3aXRoIFQtMidzIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuCgpUaGlzIHBhdGNo IGFsc28gZXh0ZW5kcyB0aGUgU1VCU0NSSVBUSU9OICdzdHJlYW1pbmcnIG9wdGlvbiBzbyB0aGF0 IHRoZSB1c2VyCmNhbiBjb250cm9sIHdoZXRoZXIgdG8gYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFu c2FjdGlvbiBpbiBhbiBhcHBseSBiYWNrZ3JvdW5kCndvcmtlciBvciBzcGlsbCB0aGUgY2hhbmdl IHRvIGRpc2suIFVzZXIgY2FuIHNldCB0aGUgc3RyZWFtaW5nIG9wdGlvbiB0bwonb24vb2ZmJywg J2FwcGx5Jy4gRm9yIG5vdywgJ2FwcGx5JyBtZWFucyB0aGUgc3RyZWFtaW5nIHdpbGwgYmUgYXBw bGllZCB2aWEgYQphcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhdmFpbGFibGUuICdvbicgbWVh bnMgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsCmJlIHNwaWxsZWQgdG8gZGlzay4KLS0t CiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAgIHwgICAxMCArLQog ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgICB8ICAgMjQgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAgICAgfCAgIDY2ICstCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgIHwgICA4NiArLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgfCAgIDEwICstCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgIHwgMTQwMiArKysrKysrKysrKysrKysrKy0t CiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgICAgIHwgICAgMyArCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCAgICAgICB8ICAgMTcgKy0KIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCAgICAgfCAgICAxICsKIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgIHwgICAxNCArLQogc3JjL2luY2x1ZGUv dXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0ICB8ICAgIDIgKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgfCAgICA0ICsKIDE3IGZpbGVzIGNoYW5nZWQsIDE0 NjUgaW5zZXJ0aW9ucygrKSwgMTkyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggYzAw YzkzZGQ3Yi4uNWNiMzliMThiZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTc4NzMsMTEgKzc4NzMsMTUg QEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3Jl cGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKIAogICAgICA8cm93PgogICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4K LSAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+Ym9vbDwv dHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+ Y2hhcjwvdHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIElmIHRydWUs IHRoZSBzdWJzY3JpcHRpb24gd2lsbCBhbGxvdyBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MKLSAg ICAgICB0cmFuc2FjdGlvbnMKKyAgICAgICBDb250cm9scyBob3cgdG8gaGFuZGxlIHRoZSBzdHJl YW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zOgorICAgICAgIDxsaXRlcmFsPmY8L2xp dGVyYWw+ID0gZGlzYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucywK KyAgICAgICA8bGl0ZXJhbD50PC9saXRlcmFsPiA9IHNwaWxsIHRoZSBjaGFuZ2VzIG9mIGluLXBy b2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFwcGx5IGF0IG9uY2UgYWZ0 ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAgICAgICBwdWJsaXNoZXIs CisgICAgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gPSBhcHBseSBjaGFuZ2VzIGRpcmVjdGx5IHVz aW5nIGEgYmFja2dyb3VuZCB3b3JrZXIKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jv dz4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAppbmRleCAyMDNi YjQxODQ0Li4yMmJkODE4MDBkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9z dWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRp b24uc2dtbApAQCAtMjE3LDEzICsyMTcsMjkgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxhY2VhYmwKICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgIDx0 ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KTwv dGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+ ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICA8cGFyYT4K ICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgc3RyZWFtaW5nIG9mIGluLXBy b2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0aGlzIHN1YnNjcmlwdGlvbi4gIEJ5 IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBhcmUgZnVsbHkgZGVjb2RlZCBv biB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0byB0aGUKLSAgICAgICAgICBzdWJz Y3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAgVGhl IGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiwKKyAgICAgICAgICBhbGwg dHJhbnNhY3Rpb25zIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIgYW5kIG9ubHkg dGhlbgorICAgICAgICAgIHNlbnQgdG8gdGhlIHN1YnNjcmliZXIgYXMgYSB3aG9sZS4KKyAgICAg ICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0IHRvIDxsaXRl cmFsPm9uPC9saXRlcmFsPiwgdGhlIGNoYW5nZXMgb2YgdHJhbnNhY3Rpb24gYXJlCisgICAgICAg ICAgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBhdCBvbmNlIGFm dGVyIHRoZQorICAgICAgICAgIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUgcHVibGlz aGVyLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBz ZXQgdG8gPGxpdGVyYWw+YXBwbHk8L2xpdGVyYWw+IGluY29taW5nCisgICAgICAgICAgY2hhbmdl cyBhcmUgZGlyZWN0bHkgYXBwbGllZCB2aWEgb25lIG9mIHRoZSBiYWNrZ3JvdW5kIHdvcmtlcnMs IGlmCisgICAgICAgICAgYXZhaWxhYmxlLiBJZiBubyBiYWNrZ3JvdW5kIHdvcmtlciBpcyBmcmVl IHRvIGhhbmRsZSBzdHJlYW1pbmcKKyAgICAgICAgICB0cmFuc2FjdGlvbiB0aGVuIHRoZSBjaGFu Z2VzIGFyZSB3cml0dGVuIHRvIGEgZmlsZSBhbmQgYXBwbGllZCBhZnRlcgorICAgICAgICAgIHRo ZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5z IHdoZW4KKyAgICAgICAgICBhcHBseWluZyBjaGFuZ2VzIGluIGEgYmFja2dyb3VuZCB3b3JrZXIs IGl0IG1pZ2h0IG5vdCByZXBvcnQgdGhlCisgICAgICAgICAgZmluaXNoIExTTiBvZiB0aGUgcmVt b3RlIHRyYW5zYWN0aW9uIGluIHRoZSBzZXJ2ZXIgbG9nLgogICAgICAgICAgPC9wYXJhPgogICAg ICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDY5MGNkYWE0MjYuLjc5NTE5Y2Y2OTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTgzLDcgKzgzLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgU3ViT3B0cwogCWJvb2wJCWNvcHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwog CWJvb2wJCWJpbmFyeTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJv b2wJCXR3b3BoYXNlOwogCWJvb2wJCWRpc2FibGVvbmVycjsKIAlYTG9nUmVjUHRyCWxzbjsKQEAg LTk1LDYgKzk1LDYyIEBAIHN0YXRpYyBMaXN0ICptZXJnZV9wdWJsaWNhdGlvbnMoTGlzdCAqb2xk cHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9vbCBhZGRwdWIsCiBzdGF0aWMgdm9pZCBSZXBv cnRTbG90Q29ubmVjdGlvbkVycm9yKExpc3QgKnJzdGF0ZXMsIE9pZCBzdWJpZCwgY2hhciAqc2xv dG5hbWUsIGNoYXIgKmVycik7CiAKIAorLyoKKyAqIEV4dHJhY3QgdGhlIHN0cmVhbWluZyBtb2Rl IHZhbHVlIGZyb20gYSBEZWZFbGVtLiAgVGhpcyBpcyBsaWtlCisgKiBkZWZHZXRCb29sZWFuKCkg YnV0IGFsc28gYWNjZXB0cyB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAiYXBwbHkiLgorICovCitzdGF0 aWMgY2hhcgorZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoKKwkgKiBJ ZiBubyBwYXJhbWV0ZXIgZ2l2ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQuCisJICovCisJaWYg KGRlZi0+YXJnID09IE5VTEwpCisJCXJldHVybiBTVUJTVFJFQU1fT047CisKKwkvKgorCSAqIEFs bG93IDAsIDEsICJ0cnVlIiwgImZhbHNlIiwgIm9uIiwgIm9mZiIgb3IgImFwcGx5Ii4KKwkgKi8K Kwlzd2l0Y2ggKG5vZGVUYWcoZGVmLT5hcmcpKQorCXsKKwkJY2FzZSBUX0ludGVnZXI6CisJCQlz d2l0Y2ggKGludFZhbChkZWYtPmFyZykpCisJCQl7CisJCQkJY2FzZSAwOgorCQkJCQlyZXR1cm4g U1VCU1RSRUFNX09GRjsKKwkJCQljYXNlIDE6CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJ CQkJZGVmYXVsdDoKKwkJCQkJLyogb3RoZXJ3aXNlLCBlcnJvciBvdXQgYmVsb3cgKi8KKwkJCQkJ YnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQljaGFyCSpzdmFs ID0gZGVmR2V0U3RyaW5nKGRlZik7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBzZXQgb2Ygc3RyaW5n cyBhY2NlcHRlZCBoZXJlIHNob3VsZCBtYXRjaCB1cCB3aXRoIHRoZQorCQkJCSAqIGdyYW1tYXIn cyBvcHRfYm9vbGVhbl9vcl9zdHJpbmcgcHJvZHVjdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGdf c3RyY2FzZWNtcChzdmFsLCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3Zh bCwgIm9mZiIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fT0ZGOworCQkJCWlmIChwZ19z dHJjYXNlY21wKHN2YWwsICJ0cnVlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWws ICJvbiIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNh c2VjbXAoc3ZhbCwgImFwcGx5IikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9BUFBMWTsK KwkJCX0KKwkJCWJyZWFrOworCX0KKwllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCQkgZXJybXNnKCIlcyByZXF1aXJlcyBhIEJvb2xlYW4gdmFs dWUgb3IgXCJhcHBseVwiIiwKKwkJCQkJZGVmLT5kZWZuYW1lKSkpOworCXJldHVybiBTVUJTVFJF QU1fT0ZGOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CisKIC8qCiAgKiBDb21tb24gb3B0 aW9uIHBhcnNpbmcgZnVuY3Rpb24gZm9yIENSRUFURSBhbmQgQUxURVIgU1VCU0NSSVBUSU9OIGNv bW1hbmRzLgogICoKQEAgLTEzMiw3ICsxODgsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9u cyhQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAlpZiAoSXNTZXQoc3Vw cG9ydGVkX29wdHMsIFNVQk9QVF9CSU5BUlkpKQogCQlvcHRzLT5iaW5hcnkgPSBmYWxzZTsKIAlp ZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQotCQlvcHRzLT5zdHJl YW1pbmcgPSBmYWxzZTsKKwkJb3B0cy0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAlpZiAo SXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50 d29waGFzZSA9IGZhbHNlOwogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FC TEVfT05fRVJSKSkKQEAgLTIzMyw3ICsyODksNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9u cyhQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZs aWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMg fD0gU1VCT1BUX1NUUkVBTUlORzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4o ZGVmZWwpOworCQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7 CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0g MCkKIAkJewpAQCAtNjAxLDcgKzY1Nyw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdf c3Vic2NyaXB0aW9uX3N1Ym93bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2 YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVt KG9wdHMuZW5hYmxlZCk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAt IDFdID0gQm9vbEdldERhdHVtKG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3Jp cHRpb25fc3Vic3RyZWFtIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZh bHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShv cHRzLnN0cmVhbWluZyk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNl c3RhdGUgLSAxXSA9CiAJCUNoYXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lD QUxSRVBfVFdPUEhBU0VfU1RBVEVfUEVORElORyA6CkBAIC0xMDYwLDcgKzExMTYsNyBAQCBBbHRl clN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAq c3RtdCwKIAkJCQlpZiAoSXNTZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlO RykpCiAJCQkJewogCQkJCQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0g MV0gPQotCQkJCQkJQm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXRE YXR1bShvcHRzLnN0cmVhbWluZyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9u X3N1YnN0cmVhbSAtIDFdID0gdHJ1ZTsKIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YwppbmRleCA0MDYwMWFlZmQ5Li40MGNjYjg5OTNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtl ci5jCkBAIC0xMjgsNiArMTI4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdAogCX0sCiAJewogCQki QXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3JrZXJNYWluCisJfSwKKwl7CisJCSJBcHBseUJnd29y a2VyTWFpbiIsIEFwcGx5Qmd3b3JrZXJNYWluCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IGJkNWY3OGNmOWEuLjU4MzM3YmVmOTEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTczLDYgKzcz LDcgQEAgc3RhdGljIHZvaWQgbG9naWNhbHJlcF9sYXVuY2hlcl9vbmV4aXQoaW50IGNvZGUsIERh dHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9vbmV4aXQoaW50IGNvZGUs IERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCk7 CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxSZXBXb3JrZXIg Kndvcmtlcik7CitzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExv Z2ljYWxSZXBXb3JrZXIgKndvcmtlcik7CiAKIHN0YXRpYyBib29sIG9uX2NvbW1pdF9sYXVuY2hl cl93YWtldXAgPSBmYWxzZTsKIApAQCAtMjIzLDYgKzIyNCwxMCBAQCBsb2dpY2FscmVwX3dvcmtl cl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKIAl7CiAJCUxv Z2ljYWxSZXBXb3JrZXIgKncgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKIAorCQkvKiBX ZSBvbmx5IG5lZWQgbWFpbiBhcHBseSB3b3JrZXIgb3IgdGFibGUgc3luYyB3b3JrZXIgaGVyZSAq LworCQlpZiAody0+c3Vid29ya2VyKQorCQkJY29udGludWU7CisKIAkJaWYgKHctPmluX3VzZSAm JiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9PSByZWxpZCAmJgogCQkJKCFvbmx5X3J1 bm5pbmcgfHwgdy0+cHJvYykpCiAJCXsKQEAgLTI1OSwxMSArMjY0LDExIEBAIGxvZ2ljYWxyZXBf d29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiB9CiAKIC8qCi0gKiBT dGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgorICogU3RhcnQg bmV3IGJhY2tncm91bmQgd29ya2VyLCBpZiBwb3NzaWJsZS4KICAqLwotdm9pZAorYm9vbAogbG9n aWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1 Ym5hbWUsIE9pZCB1c2VyaWQsCi0JCQkJCQkgT2lkIHJlbGlkKQorCQkJCQkJIE9pZCByZWxpZCwg ZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKQogewogCUJhY2tncm91bmRXb3JrZXIgYmd3OwogCUJh Y2tncm91bmRXb3JrZXJIYW5kbGUgKmJnd19oYW5kbGU7CkBAIC0yNzMsNiArMjc4LDEwIEBAIGxv Z2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpz dWJuYW1lLCBPaWQgdXNlcmlkLAogCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciA9IE5VTEw7CiAJ aW50CQkJbnN5bmN3b3JrZXJzOwogCVRpbWVzdGFtcFR6IG5vdzsKKwlib29sCQlpc19zdWJ3b3Jr ZXIgPSAoc3Vid29ya2VyX2RzbSAhPSBEU01fSEFORExFX0lOVkFMSUQpOworCisJLyogV2UgZG9u J3Qgc3VwcG9ydCB0YWJsZSBzeW5jIGluIHN1YndvcmtlciAqLworCUFzc2VydCghKGlzX3N1Yndv cmtlciAmJiBPaWRJc1ZhbGlkKHJlbGlkKSkpOwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJy bXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vi c2NyaXB0aW9uIFwiJXNcIiIsCkBAIC0zNTAsNyArMzU5LDcgQEAgcmV0cnk6CiAJaWYgKE9pZElz VmFsaWQocmVsaWQpICYmIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJ cmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NCw3ICszNzMsNyBAQCBy ZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQp LAogCQkJCSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBzbG90cyIp LAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9naWNhbF9y ZXBsaWNhdGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAogCS8qIFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzc5LDYgKzM4OCw3IEBAIHJl dHJ5OgogCXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3b3JrZXIt PnJlbHN0YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2ZpbGVz ZXQgPSBOVUxMOworCXdvcmtlci0+c3Vid29ya2VyID0gaXNfc3Vid29ya2VyOwogCXdvcmtlci0+ bGFzdF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3JrZXIt Pmxhc3Rfc2VuZF90aW1lKTsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3JrZXItPmxhc3RfcmVjdl90 aW1lKTsKQEAgLTM5NiwxOSArNDA2LDMwIEBAIHJldHJ5OgogCQlCR1dPUktFUl9CQUNLRU5EX0RB VEFCQVNFX0NPTk5FQ1RJT047CiAJYmd3LmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9S ZWNvdmVyeUZpbmlzaGVkOwogCXNucHJpbnRmKGJndy5iZ3dfbGlicmFyeV9uYW1lLCBCR1dfTUFY TEVOLCAicG9zdGdyZXMiKTsKLQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19N QVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsKKworCWlmICghaXNfc3Vid29ya2VyKQorCQlzbnBy aW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtlck1haW4i KTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwg IkFwcGx5Qmd3b3JrZXJNYWluIik7CisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJCXNucHJp bnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24g d29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7Ci0JZWxz ZQorCWVsc2UgaWYgKCFpc19zdWJ3b3JrZXIpCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdX X01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRp b24gJXUiLCBzdWJpZCk7CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhM RU4sCisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0 aW9uICV1Iiwgc3ViaWQpOwogCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxv Z2ljYWwgcmVwbGljYXRpb24gd29ya2VyIik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJH V19ORVZFUl9SRVNUQVJUOwogCWJndy5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAliZ3cu Ymd3X21haW5fYXJnID0gSW50MzJHZXREYXR1bShzbG90KTsKIAorCWlmIChpc19zdWJ3b3JrZXIp CisJCW1lbWNweShiZ3cuYmd3X2V4dHJhLCAmc3Vid29ya2VyX2RzbSwgc2l6ZW9mKGRzbV9oYW5k bGUpKTsKKwogCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcigmYmd3LCAmYmd3 X2hhbmRsZSkpCiAJewogCQkvKiBGYWlsZWQgdG8gc3RhcnQgd29ya2VyLCBzbyBjbGVhbiB1cCB0 aGUgd29ya2VyIHNsb3QuICovCkBAIC00MjEsMTEgKzQ0MiwxMyBAQCByZXRyeToKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2co Im91dCBvZiBiYWNrZ3JvdW5kIHdvcmtlciBzbG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWln aHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfd29ya2VyX3Byb2Nlc3Nlcy4iKSkpOwotCQlyZXR1cm47 CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBOb3cgd2FpdCB1bnRpbCBpdCBhdHRhY2hlcy4g Ki8KIAlXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBnZW5lcmF0aW9uLCBi Z3dfaGFuZGxlKTsKKworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtNDM2LDcgKzQ1OSw2IEBA IHZvaWQKIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7CiAJ TG9naWNhbFJlcFdvcmtlciAqd29ya2VyOwotCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAogCUxXTG9j a0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKQEAgLTQ0OSw2ICs0 NzEsMjIgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAkJ cmV0dXJuOwogCX0KIAorCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyKTsK KworCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworfQorCisvKgorICogV29y a2hvcnNlIGZvciBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKCkgYW5kIGxvZ2ljYWxyZXBfd29ya2Vy X2RldGFjaCgpLiBTdG9wCisgKiB0aGUgd29ya2VyIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuCisg Ki8KK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxS ZXBXb3JrZXIgKndvcmtlcikKK3sKKwl1aW50MTYJCWdlbmVyYXRpb247CisKKwlBc3NlcnQoTFdM b2NrSGVsZEJ5TWUoTG9naWNhbFJlcFdvcmtlckxvY2spKTsKKwogCS8qCiAJICogUmVtZW1iZXIg d2hpY2ggZ2VuZXJhdGlvbiB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4gY2hlY2sgaWYgd2hhdCB3 ZSBzZWUKIAkgKiBpcyBzdGlsbCB0aGUgc2FtZSBvbmUuCkBAIC00ODUsMTAgKzUyMyw3IEBAIGxv Z2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiAJCSAqIGRpZmZlcmVu dCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50IHdvcmtlciBoYXMgdGFrZW4gdGhlIHNsb3QuCiAJ CSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+Z2VuZXJhdGlvbiAhPSBnZW5l cmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIAkJ CXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtlciBoYXMgYXNzaWduZWQgcHJvYywgc28gaXQgaGFz IHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXItPnByb2MpCkBAIC01MjIsOCArNTU3LDYgQEAgbG9n aWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAogCQlMV0xvY2tBY3F1 aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCX0KLQotCUxXTG9ja1JlbGVh c2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogfQogCiAvKgpAQCAtNTk5LDYgKzYzMiwyOCBAQCBs b2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiBzdGF0aWMgdm9pZAogbG9naWNhbHJl cF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyoKKwkgKiBJZiB3ZSBhcmUgdGhlIG1haW4gYXBw bHkgd29ya2VyLCBzdG9wIGFsbCB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXJzCisJICogd2Ug c3RhcnRlZCBiZWZvcmUuCisJICovCisJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Yndvcmtl cikKKwl7CisJCUxpc3QJICp3b3JrZXJzOworCQlMaXN0Q2VsbCAqbGM7CisKKwkJTFdMb2NrQWNx dWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCQl3b3JrZXJzID0gbG9n aWNhbHJlcF93b3JrZXJzX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgdHJ1ZSk7CisJ CWZvcmVhY2gobGMsIHdvcmtlcnMpCisJCXsKKwkJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAoTG9n aWNhbFJlcFdvcmtlciAqKSBsZmlyc3QobGMpOworCQkJaWYgKHctPnN1YndvcmtlcikKKwkJCQls b2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHcpOworCQl9CisKKwkJTFdMb2NrUmVsZWFz ZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisJfQorCiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nl c3MuICovCiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZF KTsKIApAQCAtNjIxLDYgKzY3Niw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNh bFJlcFdvcmtlciAqd29ya2VyKQogCXdvcmtlci0+dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3Jr ZXItPnN1YmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3 b3JrZXItPnN1YndvcmtlciA9IGZhbHNlOwogfQogCiAvKgpAQCAtODY4LDcgKzkyNCw3IEBAIEFw cGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3YWl0X3RpbWUgPSB3YWxfcmV0 cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKHN1 Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkJIHN1Yi0+b3duZXIsIElu dmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCwgRFNNX0hBTkRM RV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L29yaWdpbi5jCmluZGV4IDIxOTM3YWIyZDMuLmUxY2ZhNDk1ZjggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAgUmVwbGljYXRp b25PcmlnaW5FeGl0Q2xlYW51cChpbnQgY29kZSwgRGF0dW0gYXJnKQogICogd2l0aCByZXBsb3Jp Z2luX3Nlc3Npb25fcmVzZXQoKS4KICAqLwogdm9pZAotcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVw KFJlcE9yaWdpbklkIG5vZGUpCityZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQg bm9kZSwgYm9vbCBtdXN0X2FjcXVpcmUpCiB7CiAJc3RhdGljIGJvb2wgcmVnaXN0ZXJlZF9jbGVh bnVwOwogCWludAkJCWk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCByZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKIAkJaWYgKGN1cnN0YXRlLT5yb2lkZW50ICE9IG5vZGUp CiAJCQljb250aW51ZTsKIAotCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCkK KwkJZWxzZSBpZiAoY3Vyc3RhdGUtPmFjcXVpcmVkX2J5ICE9IDAgJiYgbXVzdF9hY3F1aXJlKQog CQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9JTl9V U0UpLApAQCAtMTMyMSw3ICsxMzIxLDcgQEAgcGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Npb25f c2V0dXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCW5hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoKHRleHQg KikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgwKSkpOwogCW9yaWdpbiA9IHJlcGxv cmlnaW5fYnlfbmFtZShuYW1lLCBmYWxzZSk7Ci0JcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9y aWdpbik7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbiwgdHJ1ZSk7CiAKIAlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA5OTRjN2EwOWQ5Li41ZWI2MDMyN2I2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTU2OCw3ICs1 NjgsOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJl bnRfbHNuKQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJCQkJCQkJCQkJCQkg TXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT51 c2VyaWQsCi0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJCQkJCQkgcnN0YXRl LT5yZWxpZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCQkJaGVudHJ5 LT5sYXN0X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC01ODksNiArNTkwLDkg QEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xz bikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikK IHsKKwlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJ3b3JrZXIpCisJCXJldHVybjsKKwogCWlm IChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX3N5 bmMoY3VycmVudF9sc24pOwogCWVsc2UKQEAgLTEyNjksNyArMTI3Myw3IEBAIExvZ2ljYWxSZXBT eW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCSAqIHRpbWUgdGhp cyB0YWJsZXN5bmMgd2FzIGxhdW5jaGVkLgogCQkgKi8KIAkJb3JpZ2luaWQgPSByZXBsb3JpZ2lu X2J5X25hbWUob3JpZ2lubmFtZSwgZmFsc2UpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAo b3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRydWUpOwog CQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCSpvcmlnaW5fc3RhcnRw b3MgPSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsKIApAQCAtMTM4MCw3 ICsxMzg0LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9z dGFydHBvcykKIAkJCQkJCSAgIHRydWUgLyogZ28gYmFja3dhcmQgKi8gLCB0cnVlIC8qIFdBTCBs b2cgKi8gKTsKIAkJVW5sb2NrUmVsYXRpb25PaWQoUmVwbGljYXRpb25PcmlnaW5SZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKIAotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu aWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRydWUpOwogCQlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGZjMjEwYTllN2IuLjc4OGMxYzY1Yzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjIsOCArMjIs MjUgQEAKICAqIFNUUkVBTUVEIFRSQU5TQUNUSU9OUwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBTdHJlYW1lZCB0cmFuc2FjdGlvbnMgKGxhcmdlIHRyYW5zYWN0aW9ucyBleGNlZWRpbmcg YSBtZW1vcnkgbGltaXQgb24gdGhlCi0gKiB1cHN0cmVhbSkgYXJlIG5vdCBhcHBsaWVkIGltbWVk aWF0ZWx5LCBidXQgaW5zdGVhZCwgdGhlIGRhdGEgaXMgd3JpdHRlbgotICogdG8gdGVtcG9yYXJ5 IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBmaW5hbCBjb21taXQgYXJy aXZlcy4KKyAqIHVwc3RyZWFtKSBhcmUgYXBwbGllZCB2aWEgb25lIG9mIHR3byBhcHByb2FjaGVz LgorICoKKyAqIDEpIFNlcGFyYXRlIGJhY2tncm91bmQgd29ya2VycworICoKKyAqIEFzc2lnbiBh IG5ldyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciAoaWYgYXZhaWxhYmxlKSBhcyBzb29uIGFzIHRo ZSB4YWN0J3MKKyAqIGZpcnN0IHN0cmVhbSBpcyByZWNlaXZlZCBhbmQgdGhlIG1haW4gYXBwbHkg d29ya2VyIHdpbGwgc2VuZCBjaGFuZ2VzIHRvIHRoaXMKKyAqIG5ldyB3b3JrZXIgdmlhIHNoYXJl ZCBtZW1vcnkuIFdlIGtlZXAgdGhpcyB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUKKyAqIHRyYW5z YWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRv IGZpbmlzaCBhdAorICogY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3JkZXJpbmcgYW5k IGF2b2lkcyB3cml0aW5nIHRvIGFuZCByZWFkaW5nCisgKiBmcm9tIGZpbGUgaW4gbW9zdCBjYXNl cy4gV2Ugc3RpbGwgbmVlZCB0byBzcGlsbCBpZiB0aGVyZSBpcyBubyB3b3JrZXIKKyAqIGF2YWls YWJsZS4gV2UgYWxzbyBuZWVkIHRvIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5IHRo ZSBiYWNrZ3JvdW5kCisgKiB3b3JrZXIgdG8gYXZvaWQgZGVhZGxvY2tzIGJlY2F1c2UgVC0xJ3Mg Y3VycmVudCBzdHJlYW0gb2YgY2hhbmdlcyBjYW4gdXBkYXRlCisgKiByb3dzIGluIGNvbmZsaWN0 aW5nIG9yZGVyIHdpdGggVC0yJ3MgbmV4dCBzdHJlYW0gb2YgY2hhbmdlcy4KKyAqCisgKiAyKSBX cml0ZSB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFwcGx5IHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBh cnJpdmVzCisgKgorICogSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSB0byBoYW5kbGUgc3RyZWFt ZWQgdHJhbnNhY3Rpb24sIHRoZSBkYXRhIGlzCisgKiB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxl cyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29tbWl0CisgKiBhcnJp dmVzLgogICoKICAqIFVubGlrZSB0aGUgcmVndWxhciAobm9uLXN0cmVhbWVkKSBjYXNlLCBoYW5k bGluZyBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgaGFzCiAgKiB0byBoYW5kbGUgYWJvcnRzIG9mIGJv dGggdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uIGFuZCBzdWJ0cmFuc2FjdGlvbnMuIFRoaXMKQEAg LTE3NCwxMSArMTkxLDE1IEBACiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgi CisjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2htX21xLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCkBAIC0xOTgsNiAr MjE5LDg3IEBACiAKICNkZWZpbmUgTkFQVElNRV9QRVJfQ1lDTEUgMTAwMAkvKiBtYXggc2xlZXAg dGltZSBiZXR3ZWVuIGN5Y2xlcyAoMXMpICovCiAKKyNkZWZpbmUgUEdfTE9HSUNBTF9BUFBMWV9T SE1fTUFHSUMgMHg3OWZiMjQ0NyAvLyBUT0RPIENvbnNpZGVyIGNoYW5nZQorCisvKgorICogRFNN IGtleXMgZm9yIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLiAgVW5saWtlIG90aGVyIHBhcmFsbGVs IGV4ZWN1dGlvbiBjb2RlLAorICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBE U00ga2V5cyBjb25mbGljdGluZyB3aXRoIHBsYW5fbm9kZV9pZCB3ZQorICogY2FuIHVzZSBzbWFs bCBpbnRlZ2Vycy4KKyAqLworI2RlZmluZSBBUFBMWV9CR1dPUktFUl9LRVlfU0hBUkVECTEKKyNk ZWZpbmUgQVBQTFlfQkdXT1JLRVJfS0VZX01RCQkyCisKKy8qCisgKiBTdGF0dXMgZm9yIGFwcGx5 IGJhY2tncm91bmQgd29ya2VyLgorICovCit0eXBlZGVmIGVudW0gQXBwbHlCZ3dvcmtlclN0YXR1 cworeworCUFQUExZX0JHV09SS0VSX0FUVEFDSEVEID0gMCwKKwlBUFBMWV9CR1dPUktFUl9SRUFE WSwKKwlBUFBMWV9CR1dPUktFUl9CVVNZLAorCUFQUExZX0JHV09SS0VSX0ZJTklTSEVELAorCUFQ UExZX0JHV09SS0VSX0VYSVQKK30gQXBwbHlCZ3dvcmtlclN0YXR1czsKKworLyoKKyAqIFNoYXJl ZCBpbmZvcm1hdGlvbiBhbW9uZyBhcHBseSB3b3JrZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBB cHBseUJnd29ya2VyU2hhcmVkCit7CisJc2xvY2tfdAltdXRleDsKKworCS8qIFN0YXR1cyBmb3Ig YXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuICovCisJQXBwbHlCZ3dvcmtlclN0YXR1cwlzdGF0dXM7 CisKKwlUcmFuc2FjdGlvbklkCXN0cmVhbV94aWQ7CisJdWludDMyCW47CS8qIGlkIG9mIGFwcGx5 IGJhY2tncm91bmQgd29ya2VyICovCit9IEFwcGx5Qmd3b3JrZXJTaGFyZWQ7CisKKy8qCisgKiBT dHJ1Y3QgZm9yIG1haW50YWluaW5nIGFuIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLgorICovCit0 eXBlZGVmIHN0cnVjdCBBcHBseUJnd29ya2VyU3RhdGUKK3sKKwlzaG1fbXFfaGFuZGxlCQkJKm1x X2hhbmRsZTsKKwlkc21fc2VnbWVudAkJCQkqZHNtX3NlZzsKKwlBcHBseUJnd29ya2VyU2hhcmVk IHZvbGF0aWxlCSpwc3RhdGU7Cit9IEFwcGx5Qmd3b3JrZXJTdGF0ZTsKKworLyoKKyAqIGVudHJ5 IGZvciBhIGhhc2ggdGFibGUgd2UgdXNlIHRvIG1hcCBmcm9tIHhpZCB0byBvdXIgYXBwbHkgYmFj a2dyb3VuZCB3b3JrZXIKKyAqIHN0YXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBBcHBseUJnd29y a2VyRW50cnkKK3sKKwlUcmFuc2FjdGlvbklkCXhpZDsKKwlBcHBseUJnd29ya2VyU3RhdGUJKndz dGF0ZTsKK30gQXBwbHlCZ3dvcmtlckVudHJ5OworCisvKiBBcHBseSBiYWNrZ3JvdW5kIHdvcmtl cnMgaGFzaCB0YWJsZSAoaW5pdGlhbGl6ZWQgb24gZmlyc3QgdXNlKSAqLworc3RhdGljIEhUQUIg KkFwcGx5V29ya2Vyc0hhc2ggPSBOVUxMOworc3RhdGljIExpc3QgKkFwcGx5V29ya2Vyc0ZyZWVM aXN0ID0gTklMOworc3RhdGljIExpc3QgKkFwcGx5V29ya2Vyc0xpc3QgPSBOSUw7CisKKy8qIEZp ZWxkcyB2YWxpZCBvbmx5IGZvciBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgKi8KK3ZvbGF0aWxl IEFwcGx5Qmd3b3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTdGF0ZSA9IE5VTEw7CitzdGF0aWMgTGlz dCAqc3VieGFjdGxpc3QgPSBOSUw7CisKKy8qIFRoZSBudW1iZXIgb2YgY2hhbmdlcyBkdXJpbmcg b25lIHN0cmVhbWluZyBibG9jayAqLworc3RhdGljIHVpbnQzMiBuY2hhbmdlcyA9IDA7CisKKy8q IFdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitzdGF0aWMgQXBwbHlCZ3dvcmtlclN0 YXRlICphcHBseV9iZ3dvcmtlcl9zZXR1cCh2b2lkKTsKK3N0YXRpYyBBcHBseUJnd29ya2VyU3Rh dGUgKmFwcGx5X2Jnd29ya2VyX2ZpbmRfb3Jfc3RhcnQoVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJ CQkJCQkJCQkgYm9vbCBzdGFydCk7CitzdGF0aWMgdm9pZCBhcHBseV9iZ3dvcmtlcl9zZXR1cF9k c20oQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3Jr ZXJfd2FpdF9mb3IoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUsCisJCQkJCQkJCQlBcHBseUJn d29ya2VyU3RhdHVzIHdhaXRfZm9yX3N0YXR1cyk7CitzdGF0aWMgdm9pZCBhcHBseV9iZ3dvcmtl cl9zZW5kX2RhdGEoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUsIFNpemUgbmJ5dGVzLAorCQkJ CQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfZnJl ZShBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZSk7CitzdGF0aWMgdm9pZCBhcHBseV9iZ3dvcmtl cl9jaGVja19zdGF0dXModm9pZCk7CitzdGF0aWMgdm9pZCBhcHBseV9iZ3dvcmtlcl9zZXRfc3Rh dHVzKEFwcGx5Qmd3b3JrZXJTdGF0dXMgc3RhdHVzKTsKKwogdHlwZWRlZiBzdHJ1Y3QgRmx1c2hQ b3NpdGlvbgogewogCWRsaXN0X25vZGUJbm9kZTsKQEAgLTI2MCwxOCArMzYyLDIzIEBAIHN0YXRp YyBYTG9nUmVjUHRyIHJlbW90ZV9maW5hbF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIHN0YXRp YyBib29sIGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIHN0YXRpYyBUcmFuc2Fj dGlvbklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKK3N0YXRpYyBBcHBseUJn d29ya2VyU3RhdGUgKnN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisvKiBjaGVjayBpZiB3 ZSBhcmUgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uIGluIGFwcGx5IGJhY2tncm91bmQgd29ya2Vy ICovCisjZGVmaW5lIGFwcGx5X2Jnd29ya2VyX2FjdGl2ZSgpIChpbl9zdHJlYW1lZF90cmFuc2Fj dGlvbiAmJiBzdHJlYW1fYXBwbHlfd29ya2VyICE9IE5VTEwpCiAKIC8qCiAgKiBXZSBlbmFibGUg c2tpcHBpbmcgYWxsIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgKElOU0VSVCwgVVBEQVRFLCBl dGMuKSBmb3IKICAqIHRoZSBzdWJzY3JpcHRpb24gaWYgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbidz IGZpbmlzaCBMU04gbWF0Y2hlcyB0aGUgc3Vic2tpcGxzbi4KICAqIE9uY2Ugd2Ugc3RhcnQgc2tp cHBpbmcgY2hhbmdlcywgd2UgZG9uJ3Qgc3RvcCBpdCB1bnRpbCB3ZSBza2lwIGFsbCBjaGFuZ2Vz IG9mCiAgKiB0aGUgdHJhbnNhY3Rpb24gZXZlbiBpZiBwZ19zdWJzY3JpcHRpb24gaXMgdXBkYXRl ZCBhbmQgTXlTdWJzY3JpcHRpb24tPnNraXBsc24KLSAqIGdldHMgY2hhbmdlZCBvciByZXNldCBk dXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGNhc2VzLCB3ZQotICog ZG9uJ3Qgc2tpcCByZWNlaXZpbmcgYW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRl Y2lkZSB3aGV0aGVyIG9yIG5vdAorICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0 LiBBbHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gY2FzZXMgKHN0cmVhbWluZyA9IG9uKSwK KyAqIHdlIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9vbGluZyB0aGUgY2hhbmdlcyBzaW5j ZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKICAqIHRvIHNraXAgYXBwbHlpbmcgdGhlIGNoYW5n ZXMgd2hlbiBzdGFydGluZyB0byBhcHBseSBjaGFuZ2VzLiBUaGUgc3Vic2tpcGxzbiBpcwogICog Y2xlYXJlZCBhZnRlciBzdWNjZXNzZnVsbHkgc2tpcHBpbmcgdGhlIHRyYW5zYWN0aW9uIG9yIGFw cGx5aW5nIG5vbi1lbXB0eQogICogdHJhbnNhY3Rpb24uIFRoZSBsYXR0ZXIgcHJldmVudHMgdGhl IG1pc3Rha2VubHkgc3BlY2lmaWVkIHN1YnNraXBsc24gZnJvbQotICogYmVpbmcgbGVmdC4KKyAq IGJlaW5nIGxlZnQuIE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGluIGFwcGx5IG1vZGUsCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBnZXQgdGhlIGZpbmlz aCBMU04gYmVmb3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2VzLgogICovCiBzdGF0aWMgWExvZ1JlY1B0 ciBza2lwX3hhY3RfZmluaXNoX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogI2RlZmluZSBpc19z a2lwcGluZ19jaGFuZ2VzKCkgKHVubGlrZWx5KCFYTG9nUmVjUHRySXNJbnZhbGlkKHNraXBfeGFj dF9maW5pc2hfbHNuKSkpCkBAIC00MjYsNDMgKzUzMywxMDQgQEAgZW5kX3JlcGxpY2F0aW9uX3N0 ZXAodm9pZCkKIH0KIAogLyoKLSAqIEhhbmRsZSBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCisgKiBI YW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGZvciBib3RoIG1haW4gYXBwbHkgd29ya2VyIGFu ZCBhcHBseSBiYWNrZ3JvdW5kCisgKiB3b3JrZXIuCisgKgorICogRm9yIHRoZSBtYWluIGFwcGx5 IHdvcmtlciwgaWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJlY2VpdmluZyBhIGJsb2NrIG9mCisgKiBz dHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNlaXZpbmcgYSBi bG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVkaXJlY3QgaXQg dG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorICogRm9yIHRo ZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgZGVmaW5lIGEgc2F2ZXBvaW50IGlmIGEgbmV3IHN1 YnRyYW5zYWN0aW9uCisgKiB3YXMgc3RhcnRlZC4KICAqCi0gKiBSZXR1cm5zIHRydWUgZm9yIHN0 cmVhbWVkIHRyYW5zYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFyIG1vZGUpLgorICog Rm9yIG5vbi1zdHJlYW1lZCB0cmFuc2FjdGlvbnMsIHJldHVybnMgZmFsc2U7CisgKiBGb3Igc3Ry ZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIHRydWUgaWYgaW4gbWFpbiBhcHBseSB3b3JrZXIs IGZhbHNlCisgKiBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0J VHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCi0JLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9z dHJlYW1lZF90cmFuc2FjdGlvbikKKwkvKgorCSAqIFJldHVybiBpZiBub3QgaW4gc3RyZWFtaW5n IG1vZGUgKHVubGVzcyB0aGlzIGlzIGFuIGFwcGx5IGJhY2tncm91bmQKKwkgKiB3b3JrZXIpLgor CSAqLworCWlmICghKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uIHx8IGFtX2FwcGx5X2Jnd29ya2Vy KCkpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAKIAkvKgogCSAqIFdlIHNo b3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFydCBv ZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dldG1z Z2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlmICgh VHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGN1 cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RP Q09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2FjdGlv biBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBBZGQg dGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLwot CXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkKKwl7CisJ CS8qCisJCSAqIEluc2lkZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB3ZSBjYW4gZmlndXJlIG91 dCB0aGF0IG5ldworCQkgKiBzdWJ0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCBpZiBuZXcgY2hhbmdl IGFycml2ZWQgd2l0aCBkaWZmZXJlbnQgeGlkLgorCQkgKiBJbiB0aGF0IGNhc2Ugd2UgY2FuIGRl ZmluZSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2Ugd2VyZSBhYmxlIHRvCisJCSAqIGNvbW1p dC9yb2xsYmFjayBpdCBzZXBhcmF0ZWx5IGxhdGVyLgorCQkgKgorCQkgKiBTcGVjaWFsIGNhc2Ug aXMgaWYgdGhlIGZpcnN0IGNoYW5nZSBjb21lcyBmcm9tIHN1YnRyYW5zYWN0aW9uLCB0aGVuCisJ CSAqIHdlIGNoZWNrIHRoYXQgY3VycmVudF94aWQgZGlmZmVycyBmcm9tIHN0cmVhbV94aWQuCisJ CSAqLworCQlpZiAoY3VycmVudF94aWQgIT0gc3RyZWFtX3hpZCAmJgorCQkJIWxpc3RfbWVtYmVy X2ludChzdWJ4YWN0bGlzdCwgKGludCkgY3VycmVudF94aWQpKQorCQl7CisJCQlNZW1vcnlDb250 ZXh0CW9sZGN0eDsKKwkJCWNoYXIJCQlzcG5hbWVbTUFYUEdQQVRIXTsKKworCQkJc25wcmludGYo c3BuYW1lLCBNQVhQR1BBVEgsICJzYXZlcG9pbnRfZm9yX3hpZF8ldSIsIGN1cnJlbnRfeGlkKTsK KworCQkJZWxvZyhERUJVRzEsICJbQXBwbHkgQkdXICMldV0gZGVmaW5pbmcgc2F2ZXBvaW50ICVz IiwKKwkJCQkgTXlQYXJhbGxlbFN0YXRlLT5uLCBzcG5hbWUpOworCisJCQlEZWZpbmVTYXZlcG9p bnQoc3BuYW1lKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlvbGRjdHgg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJCXN1YnhhY3RsaXN0ID0g bGFwcGVuZF9pbnQoc3VieGFjdGxpc3QsIChpbnQpIGN1cnJlbnRfeGlkKTsKKwkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQl9CisJfQorCWVsc2UgaWYgKGFwcGx5X2Jnd29ya2Vy X2FjdGl2ZSgpKQorCXsKKwkJLyoKKwkJICogSWYgd2UgZGVjaWRlZCB0byBhcHBseSB0aGUgY2hh bmdlcyBvZiB0aGlzIHRyYW5zYWN0aW9uIGluIGFuIGFwcGx5CisJCSAqIGJhY2tncm91bmQgd29y a2VyLCBwYXNzIHRoZSBkYXRhIHRvIHRoZSB3b3JrZXIuCisJCSAqLworCQlhcHBseV9iZ3dvcmtl cl9zZW5kX2RhdGEoc3RyZWFtX2FwcGx5X3dvcmtlciwgcy0+bGVuLCBzLT5kYXRhKTsKKwkJbmNo YW5nZXMgKz0gMTsKKworCQkvKgorCQkgKiBYWFggVGhlIHB1Ymxpc2hlciBzaWRlIGRvZXNuJ3Qg YWx3YXlzIHNlbmQgcmVsYXRpb24gdXBkYXRlIG1lc3NhZ2VzCisJCSAqIGFmdGVyIHRoZSBzdHJl YW1pbmcgdHJhbnNhY3Rpb24sIHNvIHVwZGF0ZSB0aGUgcmVsYXRpb24gaW4gbWFpbgorCQkgKiBh cHBseSB3b3JrZXIgaGVyZS4KKwkJICovCisJCWlmIChhY3Rpb24gPT0gTE9HSUNBTF9SRVBfTVNH X1JFTEFUSU9OKQorCQl7CisJCQlMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCA9IGxvZ2ljYWxyZXBf cmVhZF9yZWwocyk7CisJCQlsb2dpY2FscmVwX3JlbG1hcF91cGRhdGUocmVsKTsKKwkJfQorCX0K KwllbHNlCisJeworCQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNz IGFscmVhZHkgdGhlcmUpLiAqLworCQlzdWJ4YWN0X2luZm9fYWRkKGN1cnJlbnRfeGlkKTsKIAot CS8qIHdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLwotCXN0cmVhbV93cml0 ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwkJLyogd3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVu dCBmaWxlICovCisJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwl9CiAKLQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gIWFtX2FwcGx5X2Jnd29ya2VyKCk7CiB9CiAKIC8qCkBAIC04NDQs NiArMTAxMiw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCiAJYXBwbHlf aGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwogCisJLyogQ2hlY2sgdGhlIHN0 YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlfYmd3b3Jr ZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVp bmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMo Y29tbWl0X2RhdGEuZW5kX2xzbik7CiAKQEAgLTg5OCw3ICsxMDY5LDkgQEAgYXBwbHlfaGFuZGxl X3ByZXBhcmVfaW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSAqcHJlcGFyZV9kYXRh KQogCSAqIEJlZ2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNlc3NhcnkgdG8gYmFsYW5jZSB0aGUg RW5kVHJhbnNhY3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRoaW4gdGhlIFByZXBhcmVUcmFuc2Fj dGlvbkJsb2NrIGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOworCWlmICgh SXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOworCiAJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5nIEJlZ2lu IGNvbW1hbmQuICovCiAKIAkvKgpAQCAtOTUwLDYgKzExMjMsOSBAQCBhcHBseV9oYW5kbGVfcHJl cGFyZShTdHJpbmdJbmZvIHMpCiAKIAlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAor CS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYgYW55LiAq LworCWFwcGx5X2Jnd29ya2VyX2NoZWNrX3N0YXR1cygpOworCiAJLyogUHJvY2VzcyBhbnkgdGFi bGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNz X3N5bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKIApAQCAtMTA2MywxMSArMTIz OSwxMzMgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIH0K IAogLyoKLSAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KKyAqIExvb2sgdXAgd29ya2VyIGluc2lk ZSBBcHBseVdvcmtlcnNIYXNoIGZvciByZXF1ZXN0ZWQgeGlkLgogICoKLSAqIExvZ2ljIGlzIGlu IHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucwotICog Mi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKKyAqIElmIHN0YXJ0IGZsYWcgaXMg dHJ1ZSwgdHJ5IHRvIHN0YXJ0IGEgbmV3IHdvcmtlciBpZiBub3QgZm91bmQgaW4gaGFzaCB0YWJs ZS4KKyAqLworc3RhdGljIEFwcGx5Qmd3b3JrZXJTdGF0ZSAqCithcHBseV9iZ3dvcmtlcl9maW5k X29yX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIHN0YXJ0KQoreworCWJvb2wgZm91bmQ7 CisJQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGU7CisJQXBwbHlCZ3dvcmtlckVudHJ5ICplbnRy eSA9IE5VTEw7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBO VUxMOworCisJLyoKKwkgKiBXZSBkb24ndCBzdGFydCBuZXcgYmFja2dyb3VuZCB3b3JrZXIgaWYg d2UgYXJlIG5vdCBpbiBzdHJlYW1pbmcgYXBwbHkKKwkgKiBtb2RlLgorCSAqLworCWlmIChNeVN1 YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVBTV9BUFBMWSkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKgorCSAqIFdlIGRvbid0IHN0YXJ0IG5ldyBiYWNrZ3JvdW5kIHdvcmtlciBpZiB1c2VyIGhh cyBzZXQgc2tpcGxzbiBhcyBpdCdzCisJICogcG9zc2libGUgdGhhdCB1c2VyIHdhbnQgdG8gc2tp cCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBGb3Igc3RyZWFtaW5nCisJICogdHJhbnNhY3Rp b24sIHdlIG5lZWQgdG8gc3BpbGwgdGhlIHRyYW5zYWN0aW9uIHRvIGRpc2sgc28gdGhhdCB3ZSBj YW4gZ2V0CisJICogdGhlIGxhc3QgTFNOIG9mIHRoZSB0cmFuc2FjdGlvbiB0byBqdWRnZSB3aGV0 aGVyIHRvIHNraXAgYmVmb3JlIHN0YXJ0aW5nCisJICogdG8gYXBwbHkgdGhlIGNoYW5nZS4KKwkg Ki8KKwlpZiAoc3RhcnQgJiYgIVhMb2dSZWNQdHJJc0ludmFsaWQoTXlTdWJzY3JpcHRpb24tPnNr aXBsc24pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2Fj dGlvbnMgdGhhdCBhcmUgYmVpbmcgYXBwbGllZCBpbiBhcHBseSBiYWNrZ3JvdW5kCisJICogd29y a2VyLCB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYSBy ZWxhdGlvbiB0aGF0CisJICogaXMgbm90IGluIHRoZSBSRUFEWSBzdGF0ZSAoc2VlIHNob3VsZF9h cHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdvbid0CisJICoga25vdyByZW1vdGVfZmluYWxf bHNuIGJ5IHRoYXQgdGltZS4gU28sIHdlIGRvbid0IHN0YXJ0IG5ldyBhcHBseQorCSAqIGJhY2tn cm91bmQgd29ya2VyIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoc3RhcnQgJiYgIUFsbFRhYmxl c3luY3NSZWFkeSgpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwg aW5pdGlhbGl6ZSBhcHBseSB3b3JrZXJzIGhhc2h0YWJsZSAqLworCWlmIChBcHBseVdvcmtlcnNI YXNoID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0KCZjdGwsIDAsIHNp emVvZihjdGwpKTsKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJCWN0 bC5lbnRyeXNpemUgPSBzaXplb2YoQXBwbHlCZ3dvcmtlckVudHJ5KTsKKwkJY3RsLmhjeHQgPSBB cHBseUNvbnRleHQ7CisKKwkJQXBwbHlXb3JrZXJzSGFzaCA9IGhhc2hfY3JlYXRlKCJsb2dpY2Fs IGFwcGx5IHdvcmtlcnMgaGFzaCIsIDgsICZjdGwsCisJCQkJCQkJCQkgICBIQVNIX0VMRU0gfCBI QVNIX0JMT0JTIHwgSEFTSF9DT05URVhUKTsKKwl9CisKKwkvKgorCSAqIEZpbmQgZW50cnkgZm9y IHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4KKwkgKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKEFwcGx5 V29ya2Vyc0hhc2gsICZ4aWQsIHN0YXJ0ID8gSEFTSF9FTlRFUiA6IEhBU0hfRklORCwKKwkJCQkJ CSZmb3VuZCk7CisJaWYgKGZvdW5kKQorCXsKKwkJZW50cnktPndzdGF0ZS0+cHN0YXRlLT5zdGF0 dXMgPSBBUFBMWV9CR1dPUktFUl9CVVNZOworCQlyZXR1cm4gZW50cnktPndzdGF0ZTsKKwl9CisJ ZWxzZSBpZiAoIXN0YXJ0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTm93LCB3ZSB0cnkg dG8gZ2V0IGEgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuCisJICogSWYgdGhlcmUgaXMgYXQgbGVh c3Qgb25lIHdvcmtlciBpbiB0aGUgaWRsZSBsaXN0LCB0aGVuIHRha2Ugb25lLgorCSAqIE90aGVy d2lzZSwgd2UgdHJ5IHRvIHN0YXJ0IGEgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyLgorCSAq LworCWlmIChsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNGcmVlTGlzdCkgPiAwKQorCXsKKwkJd3N0 YXRlID0gKEFwcGx5Qmd3b3JrZXJTdGF0ZSAqKSBsbGFzdChBcHBseVdvcmtlcnNGcmVlTGlzdCk7 CisJCUFwcGx5V29ya2Vyc0ZyZWVMaXN0ID0gbGlzdF9kZWxldGVfbGFzdChBcHBseVdvcmtlcnNG cmVlTGlzdCk7CisJfQorCWVsc2UKKwl7CisJCXdzdGF0ZSA9IGFwcGx5X2Jnd29ya2VyX3NldHVw KCk7CisKKwkJaWYgKHdzdGF0ZSA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIGFw cGx5IGJhY2tncm91bmQgd29ya2VyIGNhbm5vdCBiZSBsYXVuY2hlZCwgcmVtb3ZlIGVudHJ5CisJ CQkgKiBpbiBoYXNoIHRhYmxlLgorCQkJICovCisJCQloYXNoX3NlYXJjaChBcHBseVdvcmtlcnNI YXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgJmZvdW5kKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJ fQorCisJLyogRmlsbCB1cCB0aGUgaGFzaCBlbnRyeSAqLworCXdzdGF0ZS0+cHN0YXRlLT5zdGF0 dXMgPSBBUFBMWV9CR1dPUktFUl9CVVNZOworCXdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlkID0g eGlkOworCWVudHJ5LT53c3RhdGUgPSB3c3RhdGU7CisJZW50cnktPnhpZCA9IHhpZDsKKworCXJl dHVybiB3c3RhdGU7Cit9CisKKy8qCisgKiBBZGQgdGhlIHdvcmtlciB0byB0aGUgZnJlZSBsaXN0 IGFuZCByZW1vdmUgdGhlIGVudHJ5IGZyb20gaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQK K2FwcGx5X2Jnd29ya2VyX2ZyZWUoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUpCit7CisJTWVt b3J5Q29udGV4dCBvbGRjdHg7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSB3c3RhdGUtPnBzdGF0ZS0+ c3RyZWFtX3hpZDsKKworCUFzc2VydCh3c3RhdGUtPnBzdGF0ZS0+c3RhdHVzID09IEFQUExZX0JH V09SS0VSX0ZJTklTSEVEKTsKKworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBs eUNvbnRleHQpOworCisJaGFzaF9zZWFyY2goQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFTSF9S RU1PVkUsIE5VTEwpOworCisJZWxvZyhERUJVRzEsICJhZGRpbmcgZmluaXNoZWQgYXBwbHkgd29y a2VyICMldSBmb3IgeGlkICV1IHRvIHRoZSBpZGxlIGxpc3QiLAorCQkgd3N0YXRlLT5wc3RhdGUt Pm4sIHdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlkKTsKKworCUFwcGx5V29ya2Vyc0ZyZWVMaXN0 ID0gbGFwcGVuZChBcHBseVdvcmtlcnNGcmVlTGlzdCwgd3N0YXRlKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjdHgpOworfQorCisvKgorICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgog ICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8g cykKQEAgLTEwODgsMjQgKzEzODYsNzAgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0 cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX3ByZXBhcmUocywgJnByZXBhcmVf ZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChwcmVwYXJlX2RhdGEueGlkLCBw cmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JZWxvZyhERUJVRzEsICJyZWNlaXZlZCBwcmVw YXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHByZXBhcmVfZGF0YS54aWQpOworCWlm IChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMg cHJlcGFyZWQuICovCisJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVwYXJlX2Rh dGEpOwogCi0JLyogUmVwbGF5IGFsbCB0aGUgc3Bvb2xlZCBvcGVyYXRpb25zLiAqLwotCWFwcGx5 X3Nwb29sZWRfbWVzc2FnZXMocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRhLnByZXBhcmVf bHNuKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQkvKiBNYXJrIHRoZSB0cmFu c2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgm cHJlcGFyZV9kYXRhKTsKKwkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCUNvbW1pdFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOworCQlzdWJ4YWN0 bGlzdCA9IE5JTDsKIAotCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisJCWFwcGx5X2Jnd29y a2VyX3NldF9zdGF0dXMoQVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCX0KKwllbHNlCisJewor CQlBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZSA9IGFwcGx5X2Jnd29ya2VyX2ZpbmRfb3Jfc3Rh cnQocHJlcGFyZV9kYXRhLnhpZCwgZmFsc2UpOwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJl cGFyZV9kYXRhLmVuZF9sc24pOworCQllbG9nKERFQlVHMSwgInJlY2VpdmVkIHByZXBhcmUgZm9y IHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwKKwkJCSBwcmVwYXJlX2RhdGEueGlkKTsKKworCQkv KgorCQkgKiBUaGlzIGlzIHRoZSBtYWluIGFwcGx5IHdvcmtlci4gQ2hlY2sgaWYgd2UgYXJlIHBy b2Nlc3NpbmcgdGhpcworCQkgKiB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5IGJhY2tncm91bmQgd29y a2VyLgorCQkgKi8KKwkJaWYgKHdzdGF0ZSkKKwkJeworCQkJYXBwbHlfYmd3b3JrZXJfc2VuZF9k YXRhKHdzdGF0ZSwgcy0+bGVuLCBzLT5kYXRhKTsKKworCQkJYXBwbHlfYmd3b3JrZXJfd2FpdF9m b3Iod3N0YXRlLCBBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJCQlhcHBseV9iZ3dvcmtlcl9m cmVlKHdzdGF0ZSk7CisKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisJCQlzdG9yZV9m bHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCX0KKwkJZWxzZQorCQl7CisJ CQkvKgorCQkJICogVGhpcyBpcyB0aGUgbWFpbiBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2Fj dGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLCByZXBsYXkgYWxsIHRoZSBz cG9vbGVkIG9wZXJhdGlvbnMuCisJCQkgKi8KKwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMocHJl cGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRhLnByZXBhcmVfbHNuKTsKKworCQkJLyogTWFyayB0 aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9p bnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7 CisKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0 aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0g ZmFsc2U7CisKKwkJCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMg YW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCQl9CisJfQogCiAJaW5fcmVtb3Rl X3RyYW5zYWN0aW9uID0gZmFsc2U7CisJc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CiAKLQkv KiB1bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGlu Zm8uICovCi0Jc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg cHJlcGFyZV9kYXRhLnhpZCk7CisJLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3Jv dW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CiAK IAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBh cmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24p OwpAQCAtMTE1NSwxNSArMTQ5OSw2IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5n SW5mbyBzKQogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkg ZXJybXNnX2ludGVybmFsKCJkdXBsaWNhdGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UiKSkpOwogCi0J LyoKLQkgKiBTdGFydCBhIHRyYW5zYWN0aW9uIG9uIHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2Fj dGlvbiB3aWxsIGJlIGNvbW1pdHRlZAotCSAqIG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQg aXMgYSB0YWJsZXN5bmMgd29ya2VyIGluIHdoaWNoIGNhc2UgaXQKLQkgKiB3aWxsIGJlIGNvbW1p dHRlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhlCi0JICog dHJhbnNhY3Rpb24gZm9yIGhhbmRsaW5nIHRoZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemlu ZyB0aGUKLQkgKiBzdHJlYW1pbmcgZGF0YSBhbmQgc3VieGFjdCBpbmZvLgotCSAqLwotCWJlZ2lu X3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQogCS8qIG5vdGlmeSBoYW5kbGUgbWV0aG9kcyB3ZSdyZSBw cm9jZXNzaW5nIGEgcmVtb3RlIHRyYW5zYWN0aW9uICovCiAJaW5fc3RyZWFtZWRfdHJhbnNhY3Rp b24gPSB0cnVlOwogCkBAIC0xMTc3LDM2ICsxNTEyLDkxIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1f c3RhcnQoU3RyaW5nSW5mbyBzKQogCiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdHJl YW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkK Kwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgaGFuZGxlIGFwcGx5X2Rpc3BhdGNoIG1ldGhv ZHMgYXJlIGF3YXJlIHdlJ3JlIGluIGEKKwkJICogcmVtb3RlIHRyYW5zYWN0aW9uLgorCQkgKi8K KwkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gdHJ1ZTsKKworCQkvKiBJZiB3ZSBhcmUgaW4gYSBh cHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgYmVnaW4gdGhlIHRyYW5zYWN0aW9uICovCisJCUFjY2Vw dEludmFsaWRhdGlvbk1lc3NhZ2VzKCk7CisJCW1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24oKTsK KworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQlCZWdpblRyYW5zYWN0aW9uQmxvY2so KTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJcmV0dXJuOworCX0KKwogCS8q Ci0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4n dCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2Yg dGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKLQkgKiBjb250ZXh0LiBXZSBj cmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQot CSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFt aW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQg dGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKLQkgKiB0aGVuIHdlIHdvbid0IGJl IHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKiBUaGlzIGlzIHRoZSBtYWluIGFw cGx5IHdvcmtlci4gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IGZyZWUgYXBwbHkKKwkgKiBiYWNrZ3Jv dW5kIHdvcmtlciB3ZSBjYW4gdXNlIHRvIHByb2Nlc3MgdGhpcyB0cmFuc2FjdGlvbi4KIAkgKi8K LQlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9PSBOVUxMKQorCXN0cmVh bV9hcHBseV93b3JrZXIgPSBhcHBseV9iZ3dvcmtlcl9maW5kX29yX3N0YXJ0KHN0cmVhbV94aWQs IGZpcnN0X3NlZ21lbnQpOworCisJaWYgKHN0cmVhbV9hcHBseV93b3JrZXIpCiAJewotCQlNZW1v cnlDb250ZXh0IG9sZGN0eDsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmb3VuZCBhIGZyZWUgd29y a2VyIG9yIGlmIHdlIGFyZSBhbHJlYWR5IGFwcGx5aW5nIHRoaXMKKwkJICogdHJhbnNhY3Rpb24g aW4gYW4gYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIHRoZW4gd2UgcGFzcyB0aGUgZGF0YSB0bwor CQkgKiB0aGF0IHdvcmtlci4KKwkJICovCisJCWlmIChmaXJzdF9zZWdtZW50KQorCQkJYXBwbHlf Ymd3b3JrZXJfc2VuZF9kYXRhKHN0cmVhbV9hcHBseV93b3JrZXIsIHMtPmxlbiwgcy0+ZGF0YSk7 CisKKwkJbmNoYW5nZXMgPSAwOworCQllbG9nKERFQlVHMSwgInN0YXJ0aW5nIHN0cmVhbWluZyBv ZiB4aWQgJXUiLCBzdHJlYW1feGlkKTsKKwl9CisKKwkvKgorCSAqIElmIG5vIHdvcmtlciBpcyBh dmFpbGFibGUgZm9yIHRoZSBmaXJzdCBzdHJlYW0gc3RhcnQsIHdlIHN0YXJ0IHRvCisJICogc2Vy aWFsaXplIGFsbCB0aGUgY2hhbmdlcyBvZiB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJZWxzZQor CXsKKwkJLyoKKwkJICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMg dHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQKKwkJICogb24gdGhlIHN0cmVhbSBzdG9wIHVu bGVzcyBpdCBpcyBhIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdAorCQkgKiB3aWxs IGJlIGNvbW1pdHRlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUgbWVzc2FnZXMuIFdlIG5lZWQg dGhlCisJCSAqIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Ig c2VyaWFsaXppbmcgdGhlCisJCSAqIHN0cmVhbWluZyBkYXRhIGFuZCBzdWJ4YWN0IGluZm8uCisJ CSAqLworCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6 ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2ls bCBiZQorCQkgKiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28g Y3JlYXRlIGl0IGluIGEgcGVybWFuZW50CisJCSAqIGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9u IHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWluZyBtZXNzYWdlIGZyb20gYW55CisJCSAqIHRyYW5zYWN0 aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0 aW9ucy4KKwkJICogTm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFydCBv ZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0CisJCSAqIHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0 IGl0IHdpbGwgZXZlciBiZSB1c2VkLgorCQkgKi8KKwkJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwkJeworCQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAK LQkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJCQlvbGRj dHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIAotCQlNeUxvZ2ljYWxS ZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0JCUZp bGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCQkJTXlMb2dp Y2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2YoRmlsZVNldCkpOwor CQkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKLQkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7Ci0JfQorCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN0eCk7CisJCX0KIAotCS8qIG9wZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJh bnNhY3Rpb24gKi8KLQlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQs IHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOworCQkvKiBvcGVuIHRoZSBzcG9vbCBmaWxlIGZv ciB0aGlzIHRyYW5zYWN0aW9uICovCisJCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CiAKLQkvKiBpZiB0aGlzIGlz IG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUgKi8KLQlp ZiAoIWZpcnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQkvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2Vn bWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUgKi8KKwkJaWYgKCFmaXJzdF9zZWdtZW50 KQorCQkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFt X3hpZCk7CiAKLQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOwor CQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCX0KIAotCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7 CisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBOVUxMKTsKIH0KIAogLyoK QEAgLTEyMjAsNDQgKzE2MTAsNDcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0lu Zm8gcykKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVy cm1zZ19pbnRlcm5hbCgiU1RSRUFNIFNUT1AgbWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVEFSVCIp KSk7CiAKLQkvKgotCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBh bmQgc2VyaWFsaXplIGluZm9ybWF0aW9uIGFib3V0Ci0JICogc3VieGFjdHMgZm9yIHRoZSB0b3Bs ZXZlbCB0cmFuc2FjdGlvbi4KLQkgKi8KLQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVw V29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7Ci0Jc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKwlpZiAo YXBwbHlfYmd3b3JrZXJfYWN0aXZlKCkpCisJeworCQljaGFyCWFjdGlvbiA9IExPR0lDQUxfUkVQ X01TR19TVFJFQU1fU1RPUDsKIAotCS8qIFdlIG11c3QgYmUgaW4gYSB2YWxpZCB0cmFuc2FjdGlv biBzdGF0ZSAqLwotCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJCWFwcGx5X2Jnd29y a2VyX3NlbmRfZGF0YShzdHJlYW1fYXBwbHlfd29ya2VyLCAxLCAmYWN0aW9uKTsKKwkJYXBwbHlf Ymd3b3JrZXJfd2FpdF9mb3Ioc3RyZWFtX2FwcGx5X3dvcmtlciwgQVBQTFlfQkdXT1JLRVJfUkVB RFkpOwogCi0JLyogQ29tbWl0IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICovCi0JQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCWVsb2coREVCVUcxLCAic3RvcHBlZCBzdHJlYW1pbmcg b2YgeGlkICV1LCAldSBjaGFuZ2VzIHN0cmVhbWVkIiwgc3RyZWFtX3hpZCwgbmNoYW5nZXMpOwor CX0KKwllbHNlCisJeworCQkvKgorCQkgKiBDbG9zZSB0aGUgZmlsZSB3aXRoIHNlcmlhbGl6ZWQg Y2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbgorCQkgKiBhYm91dCBzdWJ4YWN0cyBm b3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJc3VieGFjdF9pbmZvX3dyaXRl KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQlzdHJlYW1fY2xvc2Vf ZmlsZSgpOwogCi0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKwkJLyogV2UgbXVz dCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCisJCUFzc2VydChJc1RyYW5zYWN0 aW9uU3RhdGUoKSk7CisKKwkJLyogQ29tbWl0IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICov CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCS8qIFJlc2V0IHBlci1zdHJlYW0g Y29udGV4dCAqLworCQlNZW1vcnlDb250ZXh0UmVzZXQoTG9naWNhbFN0cmVhbWluZ0NvbnRleHQp OworCX0KIAotCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwotCU1lbW9yeUNvbnRleHRS ZXNldChMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCk7CisJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24g PSBmYWxzZTsKKwlzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKIAogCXBnc3RhdF9yZXBvcnRf YWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CiAJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9p bmZvKCk7CiB9CiAKIC8qCi0gKiBIYW5kbGUgU1RSRUFNIGFib3J0IG1lc3NhZ2UuCisgKiBIYW5k bGUgU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2hlbiB0aGUgdHJhbnNhY3Rpb24gd2FzIHNwaWxsZWQg dG8gZGlzay4KICAqLwogc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3Ry aW5nSW5mbyBzKQorc2VyaWFsaXplX3N0cmVhbV9hYm9ydChUcmFuc2FjdGlvbklkIHhpZCwgVHJh bnNhY3Rpb25JZCBzdWJ4aWQpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0JVHJhbnNhY3Rpb25J ZCBzdWJ4aWQ7Ci0KLQlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCi0JCWVyZXBvcnQoRVJS T1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJt c2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkp OwotCi0JbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmeGlkLCAmc3VieGlkKTsKLQog CS8qCiAJICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBmYWN0IGFib3J0 IG9mIHRvcGxldmVsIHhhY3QsIHNvCiAJICoganVzdCBkZWxldGUgdGhlIGZpbGVzIHdpdGggc2Vy aWFsaXplZCBpbmZvLgpAQCAtMTMzOSw0MyArMTczMiwxNTIgQEAgYXBwbHlfaGFuZGxlX3N0cmVh bV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCX0KLQotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRf aW5mbygpOwogfQogCiAvKgotICogQ29tbW9uIHNwb29sZmlsZSBwcm9jZXNzaW5nLgorICogSGFu ZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlLgogICovCiBzdGF0aWMgdm9pZAotYXBwbHlfc3Bvb2xl ZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCithcHBseV9oYW5k bGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIHsKLQlTdHJpbmdJbmZvRGF0YSBzMjsKLQlp bnQJCQluY2hhbmdlczsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JY2hhcgkgICAqYnVmZmVy ID0gTlVMTDsKLQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlCdWZGaWxlICAgICpmZDsKKwlUcmFu c2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKIAotCW1heWJlX3N0YXJ0X3Nr aXBwaW5nX2NoYW5nZXMobHNuKTsKKwlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAor CQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFN IFNUT1AiKSkpOwogCi0JLyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFuc2FjdGlvbiAq LwotCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fi b3J0KHMsICZ4aWQsICZzdWJ4aWQpOwogCi0JLyoKLQkgKiBBbGxvY2F0ZSBmaWxlIGhhbmRsZSBh bmQgbWVtb3J5IHJlcXVpcmVkIHRvIHByb2Nlc3MgYWxsIHRoZSBtZXNzYWdlcyBpbgotCSAqIFRv cFRyYW5zYWN0aW9uQ29udGV4dCB0byBhdm9pZCB0aGVtIGdldHRpbmcgcmVzZXQgYWZ0ZXIgZWFj aCBtZXNzYWdlIGlzCi0JICogcHJvY2Vzc2VkLgotCSAqLwotCW9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCWlmIChhbV9hcHBseV9iZ3dvcmtl cigpKQorCXsKKwkJZWxvZyhERUJVRzEsICJbQXBwbHkgQkdXICMldV0gYWJvcnRpbmcgY3VycmVu dCB0cmFuc2FjdGlvbiB4aWQ9JXUsIHN1YnhpZD0ldSIsCisJCQkgTXlQYXJhbGxlbFN0YXRlLT5u LCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZElmQW55KCksIEdldEN1cnJlbnRTdWJUcmFuc2FjdGlv bklkKCkpOwogCi0JLyogT3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhlIGNvbW1pdHRlZC9wcmVw YXJlZCB0cmFuc2FjdGlvbiAqLwotCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVw V29ya2VyLT5zdWJpZCwgeGlkKTsKLQllbG9nKERFQlVHMSwgInJlcGxheWluZyBjaGFuZ2VzIGZy b20gZmlsZSBcIiVzXCIiLCBwYXRoKTsKKwkJLyoKKwkJICogSWYgdGhlIHR3byBYSURzIGFyZSB0 aGUgc2FtZSwgaXQncyBpbiBmYWN0IGFib3J0IG9mIHRvcGxldmVsIHhhY3QsCisJCSAqIHNvIGp1 c3QgZnJlZSB0aGUgc3VieGFjdGxpc3QuCisJCSAqLworCQlpZiAoc3VieGlkID09IHhpZCkKKwkJ eworCQkJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIEludmFsaWRYTG9nUmVj UHRyKTsKIAotCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3Ry ZWFtX2ZpbGVzZXQsIHBhdGgsIE9fUkRPTkxZLAotCQkJCQkJCWZhbHNlKTsKKwkJCUFib3J0Q3Vy cmVudFRyYW5zYWN0aW9uKCk7CiAKLQlidWZmZXIgPSBwYWxsb2MoQkxDS1NaKTsKKwkJCUVuZFRy YW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisK KwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQlsaXN0X2ZyZWUoc3VieGFj dGxpc3QpOworCQkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJCWFwcGx5X2Jnd29ya2VyX3NldF9z dGF0dXMoQVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoK KwkJCSAqIE9LLCBzbyBpdCdzIGEgc3VieGFjdC4gUm9sbGJhY2sgdG8gdGhlIHNhdmVwb2ludC4K KwkJCSAqCisJCQkgKiBXZSBhbHNvIG5lZWQgdG8gcmVhZCB0aGUgc3VieGFjdGxpc3QsIGRldGVy bWluZSB0aGUgb2Zmc2V0CisJCQkgKiB0cmFja2VkIGZvciB0aGUgc3VieGFjdCwgYW5kIHRydW5j YXRlIHRoZSBsaXN0LgorCQkJICovCisJCQlpbnQJCWk7CisJCQlib29sCWZvdW5kID0gZmFsc2U7 CisJCQljaGFyCXNwbmFtZVtNQVhQR1BBVEhdOworCisJCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4 dF94YWN0KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOworCQkJc25wcmludGYoc3BuYW1lLCBN QVhQR1BBVEgsICJzYXZlcG9pbnRfZm9yX3hpZF8ldSIsIHN1YnhpZCk7CisKKwkJCWVsb2coREVC VUcxLCAiW0FwcGx5IEJHVyAjJXVdIHJvbGxpbmcgYmFjayB0byBzYXZlcG9pbnQgJXMiLAorCQkJ CSBNeVBhcmFsbGVsU3RhdGUtPm4sIHNwbmFtZSk7CisKKwkJCWZvciAoaSA9IGxpc3RfbGVuZ3Ro KHN1YnhhY3RsaXN0KSAtIDE7IGkgPj0gMDsgaS0tKQorCQkJeworCQkJCXhpZCA9IChUcmFuc2Fj dGlvbklkKSBsaXN0X250aF9pbnQoc3VieGFjdGxpc3QsIGkpOworCQkJCWlmICh4aWQgPT0gc3Vi eGlkKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9 CisKKwkJCWlmIChmb3VuZCkKKwkJCXsKKwkJCQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7 CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkJc3VieGFjdGxpc3QgPSBsaXN0 X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsgMSk7CisJCQl9CisKKwkJCWFwcGx5X2Jnd29ya2Vy X3NldF9zdGF0dXMoQVBQTFlfQkdXT1JLRVJfUkVBRFkpOworCQl9CisKKwkJcmVzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF9pbmZvKCk7CisJfQorCWVsc2UKKwl7CisJCUFwcGx5Qmd3b3JrZXJTdGF0 ZSAqd3N0YXRlID0gYXBwbHlfYmd3b3JrZXJfZmluZF9vcl9zdGFydCh4aWQsIGZhbHNlKTsKKwor CQkvKgorCQkgKiBUaGlzIGlzIHRoZSBtYWluIGFwcGx5IHdvcmtlci4gQ2hlY2sgaWYgd2UgYXJl IHByb2Nlc3NpbmcgdGhpcworCQkgKiB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5IGJhY2tncm91bmQg d29ya2VyLgorCQkgKi8KKwkJaWYgKHdzdGF0ZSkKKwkJeworCQkJYXBwbHlfYmd3b3JrZXJfc2Vu ZF9kYXRhKHdzdGF0ZSwgcy0+bGVuLCBzLT5kYXRhKTsKKworCQkJaWYgKHN1YnhpZCA9PSB4aWQp CisJCQl7CisJCQkJYXBwbHlfYmd3b3JrZXJfd2FpdF9mb3Iod3N0YXRlLCBBUFBMWV9CR1dPUktF Ul9GSU5JU0hFRCk7CisJCQkJYXBwbHlfYmd3b3JrZXJfZnJlZSh3c3RhdGUpOworCQkJfQorCQkJ ZWxzZQorCQkJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJf UkVBRFkpOworCQl9CisKKwkJLyoKKwkJICogV2UgYXJlIGluIG1haW4gYXBwbHkgd29ya2VyIGFu ZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZAorCQkgKiB0byBmaWxlLgorCQkg Ki8KKwkJZWxzZQorCQkJc2VyaWFsaXplX3N0cmVhbV9hYm9ydCh4aWQsIHN1YnhpZCk7CisJfQor fQorCisvKgorICogQ29tbW9uIHNwb29sZmlsZSBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgdm9p ZAorYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24pCit7CisJU3RyaW5nSW5mb0RhdGEgczI7CisJaW50CQkJbmNoYW5nZXM7CisJY2hhcgkJcGF0 aFtNQVhQR1BBVEhdOworCWNoYXIJICAgKmJ1ZmZlciA9IE5VTEw7CisJTWVtb3J5Q29udGV4dCBv bGRjeHQ7CisJQnVmRmlsZSAgICAqZmQ7CisKKwltYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2Vz KGxzbik7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBvcGVuIHRyYW5zYWN0aW9uICovCisJ YmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBmaWxlIGhhbmRs ZSBhbmQgbWVtb3J5IHJlcXVpcmVkIHRvIHByb2Nlc3MgYWxsIHRoZSBtZXNzYWdlcyBpbgorCSAq IFRvcFRyYW5zYWN0aW9uQ29udGV4dCB0byBhdm9pZCB0aGVtIGdldHRpbmcgcmVzZXQgYWZ0ZXIg ZWFjaCBtZXNzYWdlIGlzCisJICogcHJvY2Vzc2VkLgorCSAqLworCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJLyogT3BlbiB0aGUgc3Bv b2wgZmlsZSBmb3IgdGhlIGNvbW1pdHRlZC9wcmVwYXJlZCB0cmFuc2FjdGlvbiAqLworCWNoYW5n ZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKwllbG9n KERFQlVHMSwgInJlcGxheWluZyBjaGFuZ2VzIGZyb20gZmlsZSBcIiVzXCIiLCBwYXRoKTsKKwor CWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVz ZXQsIHBhdGgsIE9fUkRPTkxZLAorCQkJCQkJCWZhbHNlKTsKKworCWJ1ZmZlciA9IHBhbGxvYyhC TENLU1opOwogCWluaXRTdHJpbmdJbmZvKCZzMik7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKQEAgLTE0NjIsNDAgKzE5NjQsNiBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAlyZXR1cm47CiB9CiAKLS8qCi0gKiBI YW5kbGUgU1RSRUFNIENPTU1JVCBtZXNzYWdlLgotICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFu ZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQotewotCVRyYW5zYWN0aW9uSWQgeGlkOwot CUxvZ2ljYWxSZXBDb21taXREYXRhIGNvbW1pdF9kYXRhOwotCi0JaWYgKGluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQ09NTUlUIG1lc3Nh Z2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3Ry ZWFtX2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwotCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hh Y3QoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKLQotCWVsb2coREVCVUcxLCAicmVjZWl2 ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7Ci0KLQlhcHBseV9z cG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7Ci0KLQlhcHBseV9o YW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7Ci0KLQkvKiB1bmxpbmsgdGhlIGZp bGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8gKi8KLQlzdHJlYW1f Y2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCi0JLyogUHJv Y2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4g Ki8KLQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwotCi0JcGdz dGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKLQotCXJlc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfaW5mbygpOwotfQotCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBhcHBs eV9oYW5kbGVfY29tbWl0IGFuZCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdC4KICAqLwpAQCAt MjQ0NSw2ICsyOTEzLDEwMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQog CWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisgKiBIYW5kbGUgU1RSRUFNIENPTU1J VCBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQo U3RyaW5nSW5mbyBzKQoreworCUxvZ2ljYWxSZXBDb21taXREYXRhIGNvbW1pdF9kYXRhOworCVRy YW5zYWN0aW9uSWQgeGlkOworCisJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJ CQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQ09NTUlUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0g U1RPUCIpKSk7CisKKwl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAmY29t bWl0X2RhdGEpOworCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRfZGF0 YS5jb21taXRfbHNuKTsKKworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJLyoKKwkJ ICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBj b3JyZWN0CisJCSAqIHBvc2l0aW9uIGluIGNhc2Ugb2YgY3Jhc2guCisJCSAqLworCQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IGNvbW1pdF9kYXRhLmVuZF9sc247CisJCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gY29tbWl0X2RhdGEuY29tbWl0dGltZTsKKwor CQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxz ZSk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWluX3JlbW90ZV90cmFuc2Fj dGlvbiA9IGZhbHNlOworCisJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisKKwkJbGlzdF9m cmVlKHN1YnhhY3RsaXN0KTsKKwkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJYXBwbHlfYmd3b3Jr ZXJfc2V0X3N0YXR1cyhBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJfQorCWVsc2UKKwl7CisJ CS8qCisJCSAqIFRoaXMgaXMgdGhlIG1haW4gYXBwbHkgd29ya2VyLiBDaGVjayBpZiB3ZSBhcmUg cHJvY2Vzc2luZyB0aGlzCisJCSAqIHRyYW5zYWN0aW9uIGluIGFuIGFwcGx5IGJhY2tncm91bmQg d29ya2VyLgorCQkgKi8KKwkJQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUgPSBhcHBseV9iZ3dv cmtlcl9maW5kX29yX3N0YXJ0KHhpZCwgZmFsc2UpOworCisJCWVsb2coREVCVUcxLCAicmVjZWl2 ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7CisKKwkJaWYgKHdz dGF0ZSkKKwkJeworCQkJLyogU2VuZCBjb21taXQgbWVzc2FnZSAqLworCQkJYXBwbHlfYmd3b3Jr ZXJfc2VuZF9kYXRhKHdzdGF0ZSwgcy0+bGVuLCBzLT5kYXRhKTsKKworCQkJLyogV2FpdCBmb3Ig YXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgdG8gZmluaXNoICovCisJCQlhcHBseV9iZ3dvcmtlcl93 YWl0X2Zvcih3c3RhdGUsIEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKworCQkJcGdzdGF0X3Jl cG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRhLmVu ZF9sc24pOworCQkJc3RvcF9za2lwcGluZ19jaGFuZ2VzKCk7CisKKwkJCWFwcGx5X2Jnd29ya2Vy X2ZyZWUod3N0YXRlKTsKKworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBpcyBlaXRoZXIg bm9uLWVtcHR5IG9yIHNraXBwZWQsIHNvIHdlIGNsZWFyIHRoZQorCQkJICogc3Vic2tpcGxzbi4K KwkJCSAqLworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKGNvbW1pdF9kYXRhLmNvbW1p dF9sc24pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIG1haW4g YXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4KKwkJCSAqIHNlcmlhbGl6 ZWQgdG8gZmlsZSwgcmVwbGF5IGFsbCB0aGUgc3Bvb2xlZCBvcGVyYXRpb25zLgorCQkJICovCisJ CQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisK KwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJLyog dW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZv ICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4 aWQpOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5k IHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKKwkv KiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFs bGVsLiAqLworCXByb2Nlc3Nfc3luY2luZ190YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7CisK KwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCisJcmVzZXRfYXBw bHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9u IHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI2MTgsNiArMzE4MCwxMCBAQCBzdG9y ZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyIHJlbW90ZV9sc24pCiB7CiAJRmx1c2hQb3NpdGlv biAqZmx1c2hwb3M7CiAKKwkvKiBXZSBvbmx5IG5lZWQgdG8gY29sbGVjdCB0aGUgTFNOIGluIG1h aW4gYXBwbHkgd29ya2VyICovCisJaWYgKGFtX2FwcGx5X2Jnd29ya2VyKCkpCisJCXJldHVybjsK KwogCS8qIE5lZWQgdG8gZG8gdGhpcyBpbiBwZXJtYW5lbnQgY29udGV4dCAqLwogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOwogCkBAIC0yNzk0LDYgKzMzNjAsOSBAQCBMb2dp Y2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAkJCUFjY2VwdEludmFs aWRhdGlvbk1lc3NhZ2VzKCk7CiAJCQltYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKCk7CiAKKwkJ CS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYgYW55LiAq LworCQkJYXBwbHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkJCS8qIFByb2Nlc3MgYW55 IHRhYmxlIHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzLiAqLwogCQkJcHJvY2Vzc19zeW5jaW5nX3Rh YmxlcyhsYXN0X3JlY2VpdmVkKTsKIAkJfQpAQCAtMzY5MSw3ICs0MjYwLDcgQEAgQXBwbHlXb3Jr ZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShv cmlnaW5uYW1lLCB0cnVlKTsKIAkJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKIAkJCW9yaWdp bmlkID0gcmVwbG9yaWdpbl9jcmVhdGUob3JpZ2lubmFtZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lv bl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwg dHJ1ZSk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJb3JpZ2lu X3N0YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtMzczOCw3ICs0MzA3LDcgQEAgQXBwbHlXb3Jr ZXJNYWluKERhdHVtIG1haW5fYXJnKQogCiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnB1YmxpY2F0 aW9uX25hbWVzID0gTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9uczsKIAlvcHRpb25zLnByb3Rv LmxvZ2ljYWwuYmluYXJ5ID0gTXlTdWJzY3JpcHRpb24tPmJpbmFyeTsKLQlvcHRpb25zLnByb3Rv LmxvZ2ljYWwuc3RyZWFtaW5nID0gTXlTdWJzY3JpcHRpb24tPnN0cmVhbTsKKwlvcHRpb25zLnBy b3RvLmxvZ2ljYWwuc3RyZWFtaW5nID0gKE15U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gU1VCU1RS RUFNX09GRik7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnR3b3BoYXNlID0gZmFsc2U7CiAKIAlp ZiAoIWFtX3RhYmxlc3luY193b3JrZXIoKSkKQEAgLTM4OTYsNyArNDQ2NSw4IEBAIGNsZWFyX3N1 YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiAJWExvZ1JlY1B0cglt eXNraXBsc24gPSBNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbjsKIAlib29sCQlzdGFydGVkX3R4ID0g ZmFsc2U7CiAKLQlpZiAobGlrZWx5KFhMb2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkpCisJ aWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpIHx8CisJCWFtX2FwcGx5 X2Jnd29ya2VyKCkpCiAJCXJldHVybjsKIAogCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCkBA IC00MDMyLDMgKzQ2MDIsNTMzIEBAIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lk KQogCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfeGFjdChJbnZhbGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFhMb2dS ZWNQdHIpOwogfQorCisvKiBBcHBseSBCYWNrZ3JvdW5kIFdvcmtlciBtYWluIGxvb3AgKi8KK3N0 YXRpYyB2b2lkCitMb2dpY2FsQXBwbHlCZ3dMb29wKHNobV9tcV9oYW5kbGUgKm1xaCwgdm9sYXRp bGUgQXBwbHlCZ3dvcmtlclNoYXJlZCAqcHN0KQoreworCXNobV9tcV9yZXN1bHQJCXNobXFfcmVz OworCVBHUFJPQwkJCQkqcmVnaXN0cmFudDsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxs YmFjazsKKwlYTG9nUmVjUHRyCQkJbGFzdF9yZWNlaXZlZCA9IEludmFsaWRYTG9nUmVjUHRyOwor CisJcmVnaXN0cmFudCA9IEJhY2tlbmRQaWRHZXRQcm9jKE15Qmd3b3JrZXJFbnRyeS0+Ymd3X25v dGlmeV9waWQpOworCVNldExhdGNoKCZyZWdpc3RyYW50LT5wcm9jTGF0Y2gpOworCisJLyoKKwkg KiBQdXNoIGFwcGx5IGVycm9yIGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZpbGxl ZCBkdXJpbmcKKwkgKiBhcHBseWluZyBhIGNoYW5nZS4KKwkgKi8KKwllcnJjYWxsYmFjay5jYWxs YmFjayA9IGFwcGx5X2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJy b3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOwor CisJZm9yICg7OykKKwl7CisJCXZvaWQgKmRhdGE7CisJCVNpemUgIGxlbjsKKwkJaW50ICAgYzsK KwkJU3RyaW5nSW5mb0RhdGEgczsKKwkJTWVtb3J5Q29udGV4dAlvbGRjdHg7CisJCVhMb2dSZWNQ dHIJc3RhcnRfbHNuOworCQlYTG9nUmVjUHRyCWVuZF9sc247CisJCVRpbWVzdGFtcFR6IHNlbmRf dGltZTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIEVuc3VyZSB3ZSBhcmUg cmVhZGluZyB0aGUgZGF0YSBpbnRvIG91ciBtZW1vcnkgY29udGV4dC4gKi8KKwkJb2xkY3R4ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5TWVzc2FnZUNvbnRleHQpOworCisJCXNobXFfcmVz ID0gc2htX21xX3JlY2VpdmUobXFoLCAmbGVuLCAmZGF0YSwgZmFsc2UpOworCisJCWlmIChzaG1x X3JlcyAhPSBTSE1fTVFfU1VDQ0VTUykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNn KCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIG1haW4gYXBwbHkgd29ya2VyIikpKTsKKworCQlpZiAo bGVuID09IDApCisJCQlicmVhazsKKworCQlzLmN1cnNvciA9IDA7CisJCXMubWF4bGVuID0gLTE7 CisJCXMuZGF0YSA9IChjaGFyICopIGRhdGE7CisJCXMubGVuID0gbGVuOworCisJCS8qCisJCSAq IFdlIHVzZSBmaXJzdCBieXRlIG9mIG1lc3NhZ2UgZm9yIGFkZGl0aW9uYWwgY29tbXVuaWNhdGlv biBiZXR3ZWVuCisJCSAqIG1haW4gTG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgYW5kIGFwcGx5 IGJnd29ya2Vycywgc28gaWYgaXQKKwkJICogZGlmZmVycyBmcm9tICd3JywgdGhlbiBwcm9jZXNz IGl0IGZpcnN0LgorCQkgKi8KKwkJYyA9IHBxX2dldG1zZ2J5dGUoJnMpOworCQlzd2l0Y2ggKGMp CisJCXsKKwkJCS8qIEVuZCBtZXNzYWdlIG9mIHN0cmVhbWluZyBjaHVuayAqLworCQkJY2FzZSBM T0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUT1A6CisJCQkJZWxvZyhERUJVRzEsICJbQXBwbHkgQkdX ICMldV0gZW5kZWQgcHJvY2Vzc2luZyBzdHJlYW1pbmcgY2h1bmssIgorCQkJCQkgIndhaXRpbmcg b24gc2htX21xX3JlY2VpdmUiLCBwc3QtPm4pOworCisJCQkJYXBwbHlfYmd3b3JrZXJfc2V0X3N0 YXR1cyhBUFBMWV9CR1dPUktFUl9SRUFEWSk7CisKKwkJCQlTZXRMYXRjaCgmcmVnaXN0cmFudC0+ cHJvY0xhdGNoKTsKKworCQkJCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisJCQkJ cGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKwkJCQljb250aW51ZTsK KwkJCWNhc2UgJ3cnOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAi W0FwcGx5IEJHVyAjJXVdIHVuZXhwZWN0ZWQgbWVzc2FnZSBcIiVjXCIiLAorCQkJCQkgcHN0LT5u LCBjKTsKKwkJCQlicmVhazsKKwkJfQorCisJCXN0YXJ0X2xzbiA9IHBxX2dldG1zZ2ludDY0KCZz KTsKKwkJZW5kX2xzbiA9IHBxX2dldG1zZ2ludDY0KCZzKTsKKwkJc2VuZF90aW1lID0gcHFfZ2V0 bXNnaW50NjQoJnMpOworCisJCWlmIChsYXN0X3JlY2VpdmVkIDwgc3RhcnRfbHNuKQorCQkJbGFz dF9yZWNlaXZlZCA9IHN0YXJ0X2xzbjsKKworCQlpZiAobGFzdF9yZWNlaXZlZCA8IGVuZF9sc24p CisJCQlsYXN0X3JlY2VpdmVkID0gZW5kX2xzbjsKKworCQkvKgorCQkgKiBUTyBJTVBST1ZFOiBE byB3ZSBuZWVkIHRvIGRpc3BsYXkgdGhlIGFwcGx5IGJhY2tncm91bmQgd29ya2VyJ3MKKwkJICog aW5mb3JtYXRpb24gaW4gcGdfc3RhdF9yZXBsaWNhdGlvbiA/CisJCSAqLworCQlVcGRhdGVXb3Jr ZXJTdGF0cyhsYXN0X3JlY2VpdmVkLCBzZW5kX3RpbWUsIGZhbHNlKTsKKworCQlhcHBseV9kaXNw YXRjaCgmcyk7CisKKwkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJCXsKKwkJCUNvbmZpZ1Jl bG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwor CQl9CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJCU1lbW9yeUNvbnRleHRS ZXNldChBcHBseU1lc3NhZ2VDb250ZXh0KTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wTWVtb3J5Q29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJlc2V0KEFwcGx5Q29udGV4dCk7CisK KwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNr ID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisKKwllbG9nKERFQlVHMSwgIltBcHBseSBCR1cgIyV1 XSBleGl0aW5nIiwgcHN0LT5uKTsKKworCS8qIFNpZ25hbCBtYWluIHByb2Nlc3MgdGhhdCB3ZSBh cmUgZG9uZS4gKi8KKwlTZXRMYXRjaCgmcmVnaXN0cmFudC0+cHJvY0xhdGNoKTsKK30KKworLyoK KyAqIFNldCB0aGUgZXhpdCBzdGF0dXMgc28gdGhhdCB0aGUgbWFpbiBhcHBseSB3b3JrZXIgY2Fu IHJlYWxpemUgd2UgaGF2ZQorICogc2h1dGRvd24uCisgKi8KK3N0YXRpYyB2b2lkCitBcHBseUJn d1NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZNeVBh cmFsbGVsU3RhdGUtPm11dGV4KTsKKwlNeVBhcmFsbGVsU3RhdGUtPnN0YXR1cyA9IEFQUExZX0JH V09SS0VSX0VYSVQ7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4KTsK KworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50ICopIERhdHVtR2V0UG9pbnRlcihhcmcpKTsKK30K KworLyoKKyAqIEFwcGx5IEJhY2tncm91bmQgV29ya2VyIGVudHJ5IHBvaW50CisgKi8KK3ZvaWQK K0FwcGx5Qmd3b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQoreworCXZvbGF0aWxlIEFwcGx5Qmd3 b3JrZXJTaGFyZWQgKnBzdDsKKworCWRzbV9oYW5kbGUJCQloYW5kbGU7CisJZHNtX3NlZ21lbnQJ CQkqc2VnOworCXNobV90b2MJCQkJKnRvYzsKKwlzaG1fbXEJCQkJKm1xOworCXNobV9tcV9oYW5k bGUJCSptcWg7CisJTWVtb3J5Q29udGV4dAkJIG9sZGNvbnRleHQ7CisJUmVwT3JpZ2luSWQJCQlv cmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcpOwor CWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCisJLyogQXR0YWNoIHRvIHNsb3QgKi8K Kwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJLyogTG9hZCB0aGUgc3Vic2NyaXB0aW9u IGludG8gcGVyc2lzdGVudCBtZW1vcnkgY29udGV4dC4gKi8KKwlBcHBseUNvbnRleHQgPSBBbGxv Y1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgIkFwcGx5Q29u dGV4dCIsCisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBJ bml0IHRoZSBBcHBseU1lc3NhZ2VDb250ZXh0IHdoaWNoIHdlIGNsZWFuIHVwIGFmdGVyIGVhY2gg cmVwbGljYXRpb24KKwkgKiBwcm90b2NvbCBtZXNzYWdlLgorCSAqLworCUFwcGx5TWVzc2FnZUNv bnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJCQkJ IkFwcGx5TWVzc2FnZUNvbnRleHQiLAorCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNp Z25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJ QmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKgorCSAqIENvbm5lY3QgdG8g dGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgorCSAqCisJICogVGhlIGJhY2tlbmQg dGhhdCByZWdpc3RlcmVkIHRoaXMgd29ya2VyIHBhc3NlZCB1cyB0aGUgSUQgb2YgYSBzaGFyZWQK KwkgKiBtZW1vcnkgc2VnbWVudCB0byB3aGljaCB3ZSBtdXN0IGF0dGFjaCBmb3IgZnVydGhlciBp bnN0cnVjdGlvbnMuICBJbgorCSAqIG9yZGVyIHRvIGF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBt ZW1vcnksIHdlIG5lZWQgYSByZXNvdXJjZSBvd25lci4KKwkgKiBPbmNlIHdlJ3ZlIG1hcHBlZCB0 aGUgc2VnbWVudCBpbiBvdXIgYWRkcmVzcyBzcGFjZSwgYXR0YWNoIHRvIHRoZSB0YWJsZQorCSAq IG9mIGNvbnRlbnRzIHNvIHdlIGNhbiBsb2NhdGUgdGhlIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVz IHdlJ2xsIG5lZWQgdG8KKwkgKiBmaW5kIHdpdGhpbiB0aGUgc2VnbWVudC4KKwkgKi8KKwlDdXJy ZW50UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJDcmVhdGUoTlVMTCwgIkxvZ2ljYWwgYXBw bHkgd29ya2VyIik7CisJbWVtY3B5KCZoYW5kbGUsIE15Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4dHJh LCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRzbV9hdHRhY2goaGFuZGxlKTsKKwlpZiAo c2VnID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpF Q1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygidW5hYmxlIHRvIG1h cCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisJdG9jID0gc2htX3RvY19hdHRh Y2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7 CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImJhZCBt YWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJYmVm b3JlX3NobWVtX2V4aXQoQXBwbHlCZ3dTaHV0ZG93biwgUG9pbnRlckdldERhdHVtKHNlZykpOwor CisJLyogTG9vayB1cCB0aGUgcGFyYWxsZWwgc3RhdGUuICovCisJcHN0ID0gc2htX3RvY19sb29r dXAodG9jLCBBUFBMWV9CR1dPUktFUl9LRVlfU0hBUkVELCBmYWxzZSk7CisJTXlQYXJhbGxlbFN0 YXRlID0gcHN0OworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICov CisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIEFQUExZX0JHV09SS0VSX0tFWV9NUSwgZmFsc2Up OworCXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisJbXFoID0gc2htX21xX2F0dGFj aChtcSwgc2VnLCBOVUxMKTsKKworCS8qIENvbm5lY3QgdG8gb3VyIGRhdGFiYXNlLiAqLworCUJh Y2tncm91bmRXb3JrZXJJbml0aWFsaXplQ29ubmVjdGlvbkJ5T2lkKE15TG9naWNhbFJlcFdvcmtl ci0+ZGJpZCwKKwkJCQkJCQkJCQkJICBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJ CQkJCQkJICAwKTsKKworCS8qCisJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgdG8gdGhlIGRh dGFiYXNlIGVuY29kaW5nLCBzaW5jZSB0aGF0IGlzIHdoYXQKKwkgKiB0aGUgbGVhZGVyIHdpbGwg ZXhwZWN0LgorCSAqLworCVNldENsaWVudEVuY29kaW5nKEdldERhdGFiYXNlRW5jb2RpbmcoKSk7 CisKKwlzdHJlYW1feGlkID0gcHN0LT5zdHJlYW1feGlkOworCisJU3RhcnRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4 dCk7CisKKwlNeVN1YnNjcmlwdGlvbiA9IEdldFN1YnNjcmlwdGlvbihNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLCB0cnVlKTsKKwlpZiAoIU15U3Vic2NyaXB0aW9uKQorCXsKKwkJZXJlcG9ydChM T0csCisJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCisJCQkJCQkic3RhcnQgYmVjYXVzZSB0aGUgc3Vic2Ny aXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCU15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQpKSk7CisJCXByb2NfZXhpdCgwKTsKKwl9CisKKwlNeVN1YnNjcmlwdGlvblZh bGlkID0gdHJ1ZTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBT ZXR1cCBzeW5jaHJvbm91cyBjb21taXQgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3Mgd2lzaGVzICov CisJU2V0Q29uZmlnT3B0aW9uKCJzeW5jaHJvbm91c19jb21taXQiLCBNeVN1YnNjcmlwdGlvbi0+ c3luY2NvbW1pdCwKKwkJCQkJUEdDX0JBQ0tFTkQsIFBHQ19TX09WRVJSSURFKTsKKworCS8qIEtl ZXAgdXMgaW5mb3JtZWQgYWJvdXQgc3Vic2NyaXB0aW9uIGNoYW5nZXMuICovCisJQ2FjaGVSZWdp c3RlclN5c2NhY2hlQ2FsbGJhY2soU1VCU0NSSVBUSU9OT0lELAorCQkJCQkJCQkgIHN1YnNjcmlw dGlvbl9jaGFuZ2VfY2IsCisJCQkJCQkJCSAgKERhdHVtKSAwKTsKKworCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJLyogU2V0dXAgcmVwbGljYXRpb24gb3JpZ2luIHRyYWNraW5nLiAq LworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJc25wcmludGYob3JpZ2lubmFtZSwgc2l6 ZW9mKG9yaWdpbm5hbWUpLCAicGdfJXUiLCBNeVN1YnNjcmlwdGlvbi0+b2lkKTsKKwlvcmlnaW5p ZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1lLCB0cnVlKTsKKwlpZiAoIU9pZElzVmFs aWQob3JpZ2luaWQpKQorCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fY3JlYXRlKG9yaWdpbm5hbWUp OworCisJLyoKKwkgKiBUaGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgZG9lc24ndCBuZWVkIHRv IG1vbm9wb2xpemUgdGhpcyByZXBsaWNhdGlvbgorCSAqIG9yaWdpbiB3aGljaCB3YXMgYWxyZWFk eSBhY3F1aXJlZCBieSBpdHMgbGVhZGVyIHByb2Nlc3MuCisJICovCisJcmVwbG9yaWdpbl9zZXNz aW9uX3NldHVwKG9yaWdpbmlkLCBmYWxzZSk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9 IG9yaWdpbmlkOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBBbGxv Y2F0ZSB0aGUgb3JpZ2luIG5hbWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJvciBjb250 ZXh0CisJICogbWVzc2FnZS4KKwkgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2lu X25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJ CSAgIG9yaWdpbm5hbWUpOworCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHdlJ3JlIGZ1bGx5IGlu aXRpYWxpemVkIGFuZCByZWFkeSB0byBiZWdpbiB0aGUgbWFpbiBwYXJ0CisJICogb2YgdGhlIGFw cGx5IG9wZXJhdGlvbi4KKwkgKi8KKwlhcHBseV9iZ3dvcmtlcl9zZXRfc3RhdHVzKEFQUExZX0JH V09SS0VSX0FUVEFDSEVEKTsKKworCWVsb2coREVCVUcxLCAiW0FwcGx5IEJHVyAjJXVdIHN0YXJ0 ZWQiLCBwc3QtPm4pOworCisJUEdfVFJZKCk7CisJeworCQlMb2dpY2FsQXBwbHlCZ3dMb29wKG1x aCwgcHN0KTsKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCS8qCisJCSAqIFJlcG9ydCB0aGUgd29y a2VyIGZhaWxlZCB3aGlsZSBhcHBseWluZyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24KKwkJICogY2hh bmdlcy4gQWJvcnQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCB0aGUgc3RhdHMgbWVz c2FnZSBpcworCQkgKiBzZW50IGluIGFuIGlkbGUgc3RhdGUuCisJCSAqLworCQlBYm9ydE91dE9m QW55VHJhbnNhY3Rpb24oKTsKKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlT dWJzY3JpcHRpb24tPm9pZCwgZmFsc2UpOworCisJCVBHX1JFX1RIUk9XKCk7CisJfQorCVBHX0VO RF9UUlkoKTsKKworCS8qCisJICogV2UncmUgZG9uZS4gIEV4cGxpY2l0bHkgZGV0YWNoIHRoZSBz aGFyZWQgbWVtb3J5IHNlZ21lbnQgc28gdGhhdCB3ZQorCSAqIGRvbid0IGdldCBhIHJlc291cmNl IGxlYWsgd2FybmluZyBhdCBjb21taXQgdGltZS4gIFRoaXMgd2lsbCBmaXJlIGFueQorCSAqIG9u X2RzbV9kZXRhY2ggY2FsbGJhY2tzIHdlJ3ZlIHJlZ2lzdGVyZWQsIGFzIHdlbGwuICBPbmNlIHRo YXQncyBkb25lLAorCSAqIHdlIGNhbiBnbyBhaGVhZCBhbmQgZXhpdC4KKwkgKi8KKwlkc21fZGV0 YWNoKHNlZyk7CisJcHJvY19leGl0KDApOworfQorCisvKgorICogU2V0IHVwIGEgZHluYW1pYyBz aGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29udHJvbCByZWdpb24g dGhhdCBjb250YWlucyBhIEFwcGx5Qmd3b3JrZXJTaGFyZWQsCisgKiBwbHVzIG9uZSByZWdpb24g cGVyIG1lc3NhZ2UgcXVldWUuIFRoZXJlIGFyZSBhcyBtYW55IG1lc3NhZ2UgcXVldWVzIGFzCisg KiB0aGUgbnVtYmVyIG9mIHdvcmtlcnMuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9iZ3dvcmtl cl9zZXR1cF9kc20oQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUpCit7CisJc2htX3RvY19lc3Rp bWF0b3IJIGU7CisJU2l6ZQkJCQkgc2Vnc2l6ZTsKKwlkc21fc2VnbWVudAkJCSpzZWc7CisJc2ht X3RvYwkJCQkqdG9jOworCUFwcGx5Qmd3b3JrZXJTaGFyZWQJCSpwc3Q7CisJc2htX21xCQkJCSpt cTsKKwlpbnQ2NAkJCQkgcXVldWVfc2l6ZSA9IDE2MDAwMDAwMDsgLyogMTYgTUIgZm9yIG5vdyAq LworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJ ICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBh ZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNo IGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIg dGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB3ZSBuZWVkCisJICogYW5vdGhlciBrZXkg dG8gdHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIHF1ZXVlLgorCSAqLworCXNobV90 b2NfaW5pdGlhbGl6ZV9lc3RpbWF0b3IoJmUpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUs IHNpemVvZihBcHBseUJnd29ya2VyU2hhcmVkKSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygm ZSwgKFNpemUpIHF1ZXVlX3NpemUpOworCisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZlLCAxICsg MSk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmUpOworCisJLyogQ3JlYXRlIHRoZSBz aGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlzaCBhIHRhYmxlIG9mIGNvbnRlbnRzLiAq LworCXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3RpbWF0ZSgmZSksIDApOworCXRvYyA9IHNo bV90b2NfY3JlYXRlKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRy ZXNzKHNlZyksCisJCQkJCQkgc2Vnc2l6ZSk7CisKKwkvKiBTZXQgdXAgdGhlIGhlYWRlciByZWdp b24uICovCisJcHN0ID0gc2htX3RvY19hbGxvY2F0ZSh0b2MsIHNpemVvZihBcHBseUJnd29ya2Vy U2hhcmVkKSk7CisJU3BpbkxvY2tJbml0KCZwc3QtPm11dGV4KTsKKwlwc3QtPnN0YXR1cyA9IEFQ UExZX0JHV09SS0VSX0JVU1k7CisJcHN0LT5zdHJlYW1feGlkID0gc3RyZWFtX3hpZDsKKwlwc3Qt Pm4gPSBsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNMaXN0KSArIDE7CisKKwlzaG1fdG9jX2luc2Vy dCh0b2MsIEFQUExZX0JHV09SS0VSX0tFWV9TSEFSRUQsIHBzdCk7CisKKwkvKiBTZXQgdXAgb25l IG1lc3NhZ2UgcXVldWUgcGVyIHdvcmtlciwgcGx1cyBvbmUuICovCisJbXEgPSBzaG1fbXFfY3Jl YXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCAoU2l6ZSkgcXVldWVfc2l6ZSksCisJCQkJCQkoU2l6 ZSkgcXVldWVfc2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBBUFBMWV9CR1dPUktFUl9LRVlf TVEsIG1xKTsKKwlzaG1fbXFfc2V0X3NlbmRlcihtcSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0 aGUgcXVldWVzLiAqLworCXdzdGF0ZS0+bXFfaGFuZGxlID0gc2htX21xX2F0dGFjaChtcSwgc2Vn LCBOVUxMKTsKKworCS8qIFJldHVybiByZXN1bHRzIHRvIGNhbGxlci4gKi8KKwl3c3RhdGUtPmRz bV9zZWcgPSBzZWc7CisJd3N0YXRlLT5wc3RhdGUgPSBwc3Q7Cit9CisKKy8qCisgKiBTdGFydCBh cHBseSBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNzIGFuZCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5 IGZvciBpdC4KKyAqLworc3RhdGljIEFwcGx5Qmd3b3JrZXJTdGF0ZSAqCithcHBseV9iZ3dvcmtl cl9zZXR1cCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQJCW9sZGNvbnRleHQ7CisJYm9vbAkJCQls YXVuY2hlZDsKKwlBcHBseUJnd29ya2VyU3RhdGUJCSAgICp3c3RhdGU7CisKKwllbG9nKERFQlVH MSwgInNldHRpbmcgdXAgYXBwbHkgd29ya2VyICMldSIsIGxpc3RfbGVuZ3RoKEFwcGx5V29ya2Vy c0xpc3QpICsgMSk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5 Q29udGV4dCk7CisKKwl3c3RhdGUgPSAoQXBwbHlCZ3dvcmtlclN0YXRlICopIHBhbGxvYzAoc2l6 ZW9mKEFwcGx5Qmd3b3JrZXJTdGF0ZSkpOworCisJLyogU2V0dXAgc2hhcmVkIG1lbW9yeSAqLwor CWFwcGx5X2Jnd29ya2VyX3NldHVwX2RzbSh3c3RhdGUpOworCisJbGF1bmNoZWQgPSBsb2dpY2Fs cmVwX3dvcmtlcl9sYXVuY2goTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCU15 U3Vic2NyaXB0aW9uLT5vaWQsCisJCQkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCQkJ CQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJSW52YWxpZE9pZCwK KwkJCQkJCQkJCQlkc21fc2VnbWVudF9oYW5kbGUod3N0YXRlLT5kc21fc2VnKSk7CisKKwlpZiAo bGF1bmNoZWQpCisJeworCQkvKiBXYWl0IGZvciB3b3JrZXIgdG8gYXR0YWNoLiAqLworCQlhcHBs eV9iZ3dvcmtlcl93YWl0X2Zvcih3c3RhdGUsIEFQUExZX0JHV09SS0VSX0FUVEFDSEVEKTsKKwor CQlBcHBseVdvcmtlcnNMaXN0ID0gbGFwcGVuZChBcHBseVdvcmtlcnNMaXN0LCB3c3RhdGUpOwor CX0KKwllbHNlCisJeworCQlwZnJlZSh3c3RhdGUpOworCQl3c3RhdGUgPSBOVUxMOworCX0KKwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiB3c3RhdGU7Cit9 CisKKy8qCisgKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYXBwbHkgYmFja2dyb3Vu ZCB3b3JrZXIgdmlhIHNoYXJlZC1tZW1vcnkgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBs eV9iZ3dvcmtlcl9zZW5kX2RhdGEoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUsIFNpemUgbmJ5 dGVzLCBjb25zdCB2b2lkICpkYXRhKQoreworCXNobV9tcV9yZXN1bHQgcmVzdWx0OworCisJcmVz dWx0ID0gc2htX21xX3NlbmQod3N0YXRlLT5tcV9oYW5kbGUsIG5ieXRlcywgZGF0YSwgZmFsc2Us IHRydWUpOworCisJaWYgKHJlc3VsdCAhPSBTSE1fTVFfU1VDQ0VTUykKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCB0dXBsZXMgdG8gc2hhcmVkLW1lbW9yeSBx dWV1ZSIpKSk7Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFj a2dyb3VuZCB3b3JrZXIgcmVhY2hlcyB0aGUKKyAqICd3YWl0X2Zvcl9zdGF0dXMnCisgKi8KK3N0 YXRpYyB2b2lkCithcHBseV9iZ3dvcmtlcl93YWl0X2ZvcihBcHBseUJnd29ya2VyU3RhdGUgKndz dGF0ZSwKKwkJCQkJCUFwcGx5Qmd3b3JrZXJTdGF0dXMgd2FpdF9mb3Jfc3RhdHVzKQoreworCWZv ciAoOzspCisJeworCQljaGFyIHN0YXR1czsKKworCQlTcGluTG9ja0FjcXVpcmUoJndzdGF0ZS0+ cHN0YXRlLT5tdXRleCk7CisJCXN0YXR1cyA9IHdzdGF0ZS0+cHN0YXRlLT5zdGF0dXM7CisJCVNw aW5Mb2NrUmVsZWFzZSgmd3N0YXRlLT5wc3RhdGUtPm11dGV4KTsKKworCQkvKiBEb25lIGlmIGFs cmVhZHkgaW4gY29ycmVjdCBzdGF0dXMuICovCisJCWlmIChzdGF0dXMgPT0gd2FpdF9mb3Jfc3Rh dHVzKQorCQkJYnJlYWs7CisKKwkJLyogSWYgYW55IHdvcmtlcnMgKG9yIHRoZSBwb3N0bWFzdGVy KSBoYXZlIGRpZWQsIHdlIGhhdmUgZmFpbGVkLiAqLworCQlpZiAoc3RhdHVzID09IEFQUExZX0JH V09SS0VSX0VYSVQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09C SkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiYmFja2dyb3Vu ZCB3b3JrZXIgJXUgZmFpbGVkIHRvIGFwcGx5IHRyYW5zYWN0aW9uICV1IiwKKwkJCQkJCQl3c3Rh dGUtPnBzdGF0ZS0+biwgd3N0YXRlLT5wc3RhdGUtPnN0cmVhbV94aWQpKSk7CisKKwkJLyogV2Fp dCB0byBiZSBzaWduYWxsZWQuICovCisJCVdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQg fCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAorCQkJCQkJCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBM WV9XT1JLRVJfU1RBVEVfQ0hBTkdFKTsKKworCQkvKiBSZXNldCB0aGUgbGF0Y2ggc28gd2UgZG9u J3Qgc3Bpbi4gKi8KKwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQkvKiBBbiBpbnRlcnJ1cHQg bWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nLiAqLworCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOworCX0KK30KKworLyoKKyAqIENoZWNrIHRoZSBzdGF0dXMgb2Ygd29ya2Vy cyBhbmQgcmVwb3J0IGFuIGVycm9yIGlmIGFueSBhcHBseSBiYWNrZ3JvdW5kCisgKiB3b3JrZXIg aGFzIGV4aXRlZCB1bmV4cGVjdGVkbHkuCisgKgorICogRXhpdCBpZiBhbnkgcmVsYXRpb24gaXMg bm90IGluIHRoZSBSRUFEWSBzdGF0ZSBhbmQgaWYgYW55IHdvcmtlciBpcyBoYW5kbGluZworICog dGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBhdCB0aGUgc2FtZSB0aW1lLiBCZWNhdXNlIGZvciBz dHJlYW1pbmcKKyAqIHRyYW5zYWN0aW9ucyB0aGF0IGlzIGJlaW5nIGFwcGxpZWQgaW4gYXBwbHkg YmFja2dyb3VuZCB3b3JrZXIsIHdlIGNhbm5vdAorICogZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkg dGhlIGNoYW5nZSBmb3IgYSByZWxhdGlvbiB0aGF0IGlzIG5vdCBpbiB0aGUgUkVBRFkKKyAqIHN0 YXRlIChzZWUgc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbCkgYXMgd2Ugd29uJ3Qga25vdyBy ZW1vdGVfZmluYWxfbHNuCisgKiBieSB0aGF0IHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBs eV9iZ3dvcmtlcl9jaGVja19zdGF0dXModm9pZCkKK3sKKwlMaXN0Q2VsbCAqbGM7CisKKwlpZiAo YW1fYXBwbHlfYmd3b3JrZXIoKSB8fCBNeVN1YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVB TV9BUFBMWSkKKwkJcmV0dXJuOworCisJZm9yZWFjaChsYywgQXBwbHlXb3JrZXJzTGlzdCkKKwl7 CisJCUFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0YXRlID0gKEFwcGx5Qmd3b3JrZXJTdGF0ZSAqKSBs Zmlyc3QobGMpOworCisJCS8qCisJCSAqIFdlIGRvbid0IGxvY2sgaGVyZSBhcyBpbiB0aGUgd29y c3QgY2FzZSB3ZSB3aWxsIGp1c3QgZGV0ZWN0IHRoZQorCQkgKiBmYWlsdXJlIG9mIHdvcmtlciBh IGJpdCBsYXRlci4KKwkJICovCisJCWlmICh3c3RhdGUtPnBzdGF0ZS0+c3RhdHVzID09IEFQUExZ X0JHV09SS0VSX0VYSVQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiYmFja2dy b3VuZCB3b3JrZXIgJXUgZXhpdGVkIHVuZXhwZWN0ZWRseSIsCisJCQkJCQkJd3N0YXRlLT5wc3Rh dGUtPm4pKSk7CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKEFwcGx5V29ya2Vyc0ZyZWVMaXN0KSAh PSBsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNMaXN0KSAmJgorCQkhQWxsVGFibGVzeW5jc1JlYWR5 KCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9u IGFwcGx5IHdvcmtlcnMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IiwKKwkJ CQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJDYW5ub3QgaGFuZGxl IHN0cmVhbWVkIHJlcGxpY2F0aW9uIHRyYW5zYWN0aW9uIGJ5IGFwcGx5ICIKKwkJCQkJCSAgICJi Z3dvcmtlcnMgdW50aWwgYWxsIHRhYmxlcyBhcmUgc3luY2hyb25pemVkIikpKTsKKworCQlwcm9j X2V4aXQoMCk7CisJfQorfQorCisvKiBTZXQgdGhlIGFwcGx5IGJhY2tncm91bmQgd29ya2VyIHN0 YXR1cyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jnd29ya2VyX3NldF9zdGF0dXMoQXBwbHlCZ3dv cmtlclN0YXR1cyBzdGF0dXMpCit7CisJaWYgKCFhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1 cm47CisKKwllbG9nKERFQlVHMSwgIltBcHBseSBCR1cgIyV1XSBzZXQgc3RhdHVzIHRvICVkIiwg TXlQYXJhbGxlbFN0YXRlLT5uLCBzdGF0dXMpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFs bGVsU3RhdGUtPm11dGV4KTsKKwlNeVBhcmFsbGVsU3RhdGUtPnN0YXR1cyA9IHN0YXR1czsKKwlT cGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTdGF0ZS0+bXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IDg3YzE1YjljNmYuLmJhNzgxZTZmMDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTM4OCw2ICszODgsOSBA QCBwZ3N0YXRfZ2V0X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KQogCQljYXNlIFdBSVRfRVZFTlRf SEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQ6CiAJCQlldmVudF9uYW1lID0gIkhhc2hHcm93QnVj a2V0c1JlaW5zZXJ0IjsKIAkJCWJyZWFrOworCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9BUFBM WV9XT1JLRVJfU1RBVEVfQ0hBTkdFOgorCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsQXBwbHlXb3Jr ZXJTdGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lO Q19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYwppbmRleCA3Y2M5YzcyZTQ5Li42ZjhiMzBhYmIwIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ0 NTAsNyArNDQ1MCw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiIHMuc3Vic3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiBmYWxzZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICIgJ2YnIEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24g Pj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ1ODAsOCArNDU4 MCwxMCBAQCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlv bkluZm8gKnN1YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnksICJ0IikgPT0g MCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsKIAot CWlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNtcChz dWJpbmZvLT5zdWJzdHJlYW0sICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICIsIHN0cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0 cmVhbSwgImEiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFt aW5nID0gYXBwbHkiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2VzdGF0ZSwg dHdvX3BoYXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwg IiwgdHdvX3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf c3Vic2NyaXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmlu ZGV4IGQxMjYwZjU5MGMuLjliMzk0YTQ1ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfc3Vic2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3Jp cHRpb24uaApAQCAtNjgsNyArNjgsOCBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1 YnNjcmlwdGlvblJlbGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCWJvb2wJ CXN1YmJpbmFyeTsJCS8qIFRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUKIAkJCQkJ CQkJICogcHVibGlzaGVyIHRvIHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJCXN1YnN0 cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3Vi c3RyZWFtOwkJLyogU3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKwkJCQkJCQkJICog U2VlIFNVQlNUUkVBTV94eHggY29uc3RhbnRzLiAqLwogCiAJY2hhcgkJc3VidHdvcGhhc2VzdGF0 ZTsJLyogU3RyZWFtIHR3by1waGFzZSB0cmFuc2FjdGlvbnMgKi8KIApAQCAtMTA5LDcgKzExMCw3 IEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbgogCWJvb2wJCWVuYWJsZWQ7CQkvKiBJbmRp Y2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkICovCiAJYm9vbAkJYmluYXJ5OwkJ CS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIGRhdGEgaW4KIAkJCQkJCQkJ ICogYmluYXJ5IGZvcm1hdCAqLwotCWJvb2wJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJlYW1pbmcg aW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN0cmVhbTsJCQkvKiBBbGxvdyBz dHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLwogCWNoYXIJCXR3b3BoYXNlc3Rh dGU7CS8qIEFsbG93IHN0cmVhbWluZyB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAJYm9vbAkJ ZGlzYWJsZW9uZXJyOwkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUK IAkJCQkJCQkJICogYXV0b21hdGljYWxseSBkaXNhYmxlZCBpZiBhIHdvcmtlciBlcnJvcgpAQCAt MTIwLDYgKzEyMSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlMaXN0CSAgICpw dWJsaWNhdGlvbnM7CS8qIExpc3Qgb2YgcHVibGljYXRpb24gbmFtZXMgdG8gc3Vic2NyaWJlIHRv ICovCiB9IFN1YnNjcmlwdGlvbjsKIAorLyogRGlzYWxsb3cgc3RyZWFtaW5nIGluLXByb2dyZXNz IHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSBTVUJTVFJFQU1fT0ZGCSdmJworCisvKgorICogU3Ry ZWFtaW5nIHRyYW5zYWN0aW9ucyBhcmUgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCBh cHBsaWVkIG9ubHkKKyAqIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gdXBz dHJlYW0uCisgKi8KKyNkZWZpbmUgU1VCU1RSRUFNX09OCSd0JworCisvKiBTdHJlYW1pbmcgdHJh bnNhY3Rpb25zIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHZpYSBhIGJhY2tncm91bmQgd29ya2Vy ICovCisjZGVmaW5lIFNVQlNUUkVBTV9BUFBMWQknYScKKwogZXh0ZXJuIFN1YnNjcmlwdGlvbiAq R2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiB2b2lk IEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlzYWJs ZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdv cmtlci5oCmluZGV4IGNkMWI2ZThhZmMuLjZhMWFmN2YxM2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTE9HSUNBTFdP UktFUl9ICiAKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7Citl eHRlcm4gdm9pZCBBcHBseUJnd29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CiAKIGV4dGVybiBi b29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRl eCAyZDFiNWU1YzI4Li5jNzM4OWI0MGE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAt NTMsNyArNTMsNyBAQCBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhS ZXBPcmlnaW5JZCBub2RlLCBib29sIGZsdXNoKTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9z ZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0ciByZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBsb2NhbF9jb21taXQpOwotZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3Nl dHVwKFJlcE9yaWdpbklkIG5vZGUpOworZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3Nl dHVwKFJlcE9yaWdpbklkIG5vZGUsIGJvb2wgbXVzdF9hY3F1aXJlKTsKIGV4dGVybiB2b2lkIHJl cGxvcmlnaW5fc2Vzc2lvbl9yZXNldCh2b2lkKTsKIGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmln aW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoYm9vbCBmbHVzaCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggOTAxODQ1YWJjMi4uMWZlYWZjY2FmNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTYwLDYgKzYwLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCSAqLwogCUZpbGVTZXQgICAgKnN0 cmVhbV9maWxlc2V0OwogCisJLyogSW5kaWNhdGVzIGlmIHRoaXMgc2xvdCBpcyB1c2VkIGZvciBh biBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4gKi8KKwlib29sCQlzdWJ3b3JrZXI7CisKIAkvKiBT dGF0cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNuOwogCVRpbWVzdGFtcFR6IGxhc3Rfc2VuZF90 aW1lOwpAQCAtODQsOCArODcsOSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9hdHRh Y2goaW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBfd29ya2Vy X2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmlu Zyk7CiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29s IG9ubHlfcnVubmluZyk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lk IGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKLQkJCQkJCQkJCSBPaWQgdXNl cmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9p ZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQkJCQkJCQkgT2lkIHVz ZXJpZCwgT2lkIHJlbGlkLAorCQkJCQkJCQkJIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSk7CiBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxp ZCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlcik7CkBAIC0xMDksNCArMTEzLDEwIEBAIGFtX3RhYmxlc3luY193b3JrZXIo dm9pZCkKIAlyZXR1cm4gT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKTsKIH0K IAorc3RhdGljIGlubGluZSBib29sCithbV9hcHBseV9iZ3dvcmtlcih2b2lkKQoreworCXJldHVy biBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YndvcmtlcjsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdP UktFUl9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2 ZW50LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggYjU3OGUyZWM3NS4u YzJkMmExMTRkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtMTA1LDYgKzEwNSw3IEBAIHR5 cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfQUxMT0NBVEUsCiAJV0FJ VF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19FTEVDVCwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19C VUNLRVRTX1JFSU5TRVJULAorCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9XT1JLRVJfU1RBVEVf Q0hBTkdFLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEEsCiAJV0FJVF9FVkVOVF9MT0dJ Q0FMX1NZTkNfU1RBVEVfQ0hBTkdFLAogCVdBSVRfRVZFTlRfTVFfSU5URVJOQUwsCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKaW5kZXggN2ZjZmFkMTU5MS4uZjc2 OTgzNWFmMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRp b24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dApA QCAtMTk3LDcgKzE5Nyw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VU IChzbG90X25hbWUgPSBOT05FKTsKIERST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsK IC0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFuCiBDUkVBVEUgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qn IFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSBm b28pOwotRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlCitFUlJPUjog IHN0cmVhbWluZyByZXF1aXJlcyBhIEJvb2xlYW4gdmFsdWUgb3IgImFwcGx5IgogLS0gbm93IGl0 IHdvcmtzCiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29u bmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSB0cnVlKTsKIFdBUk5JTkc6ICB0YWJsZXMgd2VyZSBu b3Qgc3Vic2NyaWJlZCwgeW91IHdpbGwgaGF2ZSB0byBydW4gQUxURVIgU1VCU0NSSVBUSU9OIC4u LiBSRUZSRVNIIFBVQkxJQ0FUSU9OIHRvIHN1YnNjcmliZSB0aGUgdGFibGVzCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDRmYjc0NjkzMGEuLjEyOTQwZDZmNGYgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xMTYsNiArMTE2LDEwIEBAIEFwcGVuZAogQXBwZW5kUGF0aAogQXBw ZW5kUmVsSW5mbwogQXBwZW5kU3RhdGUKK0FwcGx5Qmd3b3JrZXJFbnRyeQorQXBwbHlCZ3dvcmtl clNoYXJlZAorQXBwbHlCZ3dvcmtlclN0YXRlCitBcHBseUJnd29ya2VyU3RhdHVzCiBBcHBseUVy cm9yQ2FsbGJhY2tBcmcKIEFwcGx5RXhlY3V0aW9uRGF0YQogQXBwbHlTdWJYYWN0RGF0YQotLSAK Mi4yMy4wLndpbmRvd3MuMQoK --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v7-0002-Test-streaming-apply-option-in-tap-test.patch" Content-Description: v7-0002-Test-streaming-apply-option-in-tap-test.patch Content-Disposition: attachment; filename="v7-0002-Test-streaming-apply-option-in-tap-test.patch"; size=66227; creation-date="Mon, 30 May 2022 08:48:00 GMT"; modification-date="Mon, 30 May 2022 08:51:57 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MDQ5ZWY2OWQzYWFjNzRiMTZiNzE5Nzg3ZjE3MzNhZWMxZjE5M2Y4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2N10g VGVzdCBzdHJlYW1pbmcgYXBwbHkgb3B0aW9uIGluIHRhcCB0ZXN0CgpDaGFuZ2UgYWxsIFRBUCB0 ZXN0cyB1c2luZyB0aGUgU1VCU0NSSVBUSU9OICJzdHJlYW1pbmciIG9wdGlvbiwgc28gdGhleQpu b3cgdGVzdCBib3RoICdvbicgYW5kICdhcHBseScgdmFsdWVzLgotLS0KIHNyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAgICB8IDE3NiArKysrLS0tCiBzcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgfCAgOTggKystLQogc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgICAgIHwgMTY5ICsrKystLS0KIC4uLi90 LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgICAgICAgICB8IDE3NiArKysrLS0tCiAu Li4vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsICAgICAgICAgfCAgODkgKysrLQog Li4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsICAgIHwgMzMwICsrKysr Ky0tLS0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwgICAgIHwg NDcyICsrKysrKysrKystLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA4NzcgaW5zZXJ0aW9ucygr KSwgNjMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmlu ZGV4IDY1NjFiMTg5ZGUuLmM4YjExN2M3ODAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0 cmVhbS5wbApAQCAtOCw2ICs4LDk2IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwog dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgRW5jYXBz dWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3Ry ZWFtaW5nIiBvcHRpb24KKyMgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRo ZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1hcHBseQorIyBjYXNlcy4KK3N1YiB0ZXN0X3N0 cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBu YW1lKSA9IEBfOworCisJIyBJbnRlcmxlYXZlIGEgcGFpciBvZiB0cmFuc2FjdGlvbnMsIGVhY2gg ZXhjZWVkaW5nIHRoZSA2NGtCIGxpbWl0LgorCW15ICRpbiAgPSAnJzsKKwlteSAkb3V0ID0gJyc7 CisKKwlteSAkdGltZXIgPSBJUEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM6OnRpbWVvdXRfZGVmYXVsdCk7CisKKwlteSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dy b3VuZF9wc3FsKCdwb3N0Z3JlcycsIFwkaW4sIFwkb3V0LCAkdGltZXIsCisJCW9uX2Vycm9yX3N0 b3AgPT4gMCk7CisKKwkkaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJfTsKKwkkaC0+cHVtcF9u YjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJF R0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkaW4gLj0gcXsKKwlDT01NSVQ7CisJ XHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5leHQgdGVzdCBmYWls LCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQg PSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCks ICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKworCSMgVGVz dCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFy eSA9IG9uKSIpOworCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRv IGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJ J3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBzKGkpOworCVVQ REFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkkcmVzdWx0ID0K KwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRy ZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycpOworCisJIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0 cmEgY29sdW1ucyBvbiB0aGUgc3Vic2NyaWJlciwKKwkjIHVwZGF0ZSBwdWJsaXNoZXIsIGFuZCBj aGVjayB0aGF0IHN1YnNjcmliZXIgcmV0YWlucyB0aGUgZXhwZWN0ZWQKKwkjIHZhbHVlcy4gVGhp cyBpcyB0byBlbnN1cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKKwkj IHByb3Blcmx5IGFmdGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vw b2NoJzo6dGltZXN0YW1wdHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgorCSk7CisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoZXh0cmFjdChlcG9jaCBmcm9t IGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIKKwkpOworCWlz KCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEK Kwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9w dWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwog JG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAg LTM3LDYgKzEyNywxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog CSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkg JGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJD UkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3Ry IGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3Ry ZWFtaW5nID0gb24pIgogKTsKQEAgLTU0LDgyICsxNDgsMjQgQEAgbXkgJHJlc3VsdCA9CiAJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK IGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRv IHN1YnNjcmliZXInKTsKIAotIyBJbnRlcmxlYXZlIGEgcGFpciBvZiB0cmFuc2FjdGlvbnMsIGVh Y2ggZXhjZWVkaW5nIHRoZSA2NGtCIGxpbWl0LgotbXkgJGluICA9ICcnOwotbXkgJG91dCA9ICcn OwotCi1teSAkdGltZXIgPSBJUEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM6OnRpbWVvdXRfZGVmYXVsdCk7Ci0KLW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJywgXCRpbiwgXCRvdXQsICR0aW1lciwKLQlvbl9lcnJvcl9zdG9w ID0+IDApOwotCi0kaW4gLj0gcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLX07Ci0kaC0+cHVtcF9uYjsKLQotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg1MDAxLCA5OTk5KSBzKGkpOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7 Ci1DT01NSVQ7Ci19KTsKLQotJGluIC49IHF7Ci1DT01NSVQ7Ci1ccQotfTsKLSRoLT5maW5pc2g7 ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5leHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJl Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMo JHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWlu IGxvY2FsIGRlZmF1bHRzJyk7Ci0KLSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2Rl Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NS SVBUSU9OIHRhcF9zdWIgU0VUIChiaW5hcnkgPSBvbikiKTsKLQotIyBJbnNlcnQsIHVwZGF0ZSBh bmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAw MSwgMTAwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09N TUlUOwotfSk7Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmli ZXIsICRhcHBuYW1lKTsKIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksICdjaGVjayBleHRyYSBj b2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ2FwcGx5JworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBs aWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAn c3RyZWFtaW5nJzsiCispOwogCi0jIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRy YSBjb2x1bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAotIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hl Y2sgdGhhdCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCi0jIHZhbHVlcy4gVGhpcyBp cyB0byBlbnN1cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKLSMgcHJv cGVybHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCiAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6 dGltZXN0YW1wdHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgorCSJBTFRFUiBTVUJTQ1JJ UFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gYXBwbHksIGJpbmFyeSA9IG9mZikiCiApOwot JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFi IFNFVCBiID0gbWQ1KGE6OnRleHQpIik7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3Rh cnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGV4 dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNvdW50KGQgPSA5OTkpIEZST00gdGVz dF90YWIiCi0pOwotaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLAotCSdjaGVjayBleHRy YSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEnKTsKK3Rlc3Rfc3RyZWFtaW5n KCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCiAkbm9kZV9z dWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCmluZGV4IGYyN2YxNjk0ZjIuLjY0YTRk NTRjYzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3Vi eGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3Qu cGwKQEAgLTgsNiArOCw1NCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIEVuY2Fwc3VsYXRl IGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWlu ZyIgb3B0aW9uCisjIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3Ry ZWFtaW5nPW9uIGFuZCBzdHJlYW1pbmc9YXBwbHkKKyMgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1p bmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSkg PSBAXzsKKworCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNl ZWQgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVz JywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKCAgICAzLCAgNTAwKSBzKGkpOworCVVQREFURSB0ZXN0 X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwg IDEwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FW RVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgIDE1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFi IFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwgIDIw MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIp ID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBP SU5UIHM0OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgxNjY3 fDE2Njd8MTY2NyksCisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBz dHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7 CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKK30KKwogIyBD cmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiArODUsMTAgQEAgJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBt b2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3Vi IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1l JyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC01NCw0 MSArMTA2LDI1IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdj aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgSW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoICAgIDMsICA1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsICAxMDAwKSBzKGkpOwotVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgIDE1 MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5U IHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3NlcmllcygxNTAxLCAgMjAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDApIHMoaSk7Ci1V UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Cit0ZXN0X3N0 cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lKTsKIAot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ2Fw cGx5JworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00g cGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBB TkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispOwogCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDE2Njd8MTY2 N3wxNjY3KSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFt aW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04g dGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gYXBwbHkpIgogKTsKIAorJG5vZGVfcHVibGlzaGVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9N IHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScg QU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0 aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisK K3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5h bWUpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwog CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCmluZGV4IDBiY2U2M2I3 MTYuLjUwYjcxZGZhNDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19z dHJlYW1fZGRsLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRs LnBsCkBAIC04LDYgKzgsOTMgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBFbmNhcHN1bGF0 ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1p bmciIG9wdGlvbgorIyBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0 cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPWFwcGx5CisjIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUp ID0gQF87CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwg YW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxewor CUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMywgbWQ1KDM6OnRleHQpKTsK KwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOworCVNBVkVQT0lOVCBzMTsK KwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0Ojp0ZXh0KSwgLTQpOworCUNP TU1JVDsKKwl9KTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBh bmQgRE1MCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNSwgMTAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Rh YiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MDEsIDIwMDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJIyBhIHNtYWxsIChub24tc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDIwMDEsIG1kNSgyMDAxOjp0ZXh0KSwgLTIwMDEsIDIqMjAwMSk7CisJQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElO VE8gdGVzdF90YWIgVkFMVUVTICgyMDAyLCBtZDUoMjAwMjo6dGV4dCksIC0yMDAyLCAyKjIwMDIs IC0zKjIwMDIpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291 bnQoZCksIGNvdW50KGUpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgyMDAyfDE5 OTl8MTAwMnwxKSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0 cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwu IE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAorCSMgYWZ0ZXIgRE1MIHRvIGVuc3VyZSB0aGF0 IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZvciB0ZXN0X3RhYiBzbyB0aGF0CisJIyB0 aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUgc2NoZW1hIGFnYWluLgorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFi IEFERCBDT0xVTU4gZiBJTlQ7CisJQ09NTUlUOworCX0pOworCisJIyBBIHNtYWxsIHRyYW5zYWN0 aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoYXQg d2UKKwkjIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byByZWZsZWN0IHRoZSBsYXN0IGNvbHVtbiBh ZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK KwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0KmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo NTAwMSw1MDA1KSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCksIGNvdW50KGUpLCBjb3VudChmKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3Vs dCwgcXEoNTAwNXw1MDAyfDQwMDV8MzAwNHw1KSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWluZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2Fj dGlvbnMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgKGEgPiAyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjLCBEUk9QIENP TFVNTiBkLCBEUk9QIENPTFVNTiBlLCBEUk9QIENPTFVNTiBmOworCX0pOworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hl ciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzEyNCwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUg dGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAn JHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9O IHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTU0LDc2ICsxNDUsMjQgQEAg bXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MHwwKSwgJ2NoZWNrIGluaXRpYWwg ZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBhIHNtYWxsIChub24tc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMywgbWQ1KDM6OnRleHQpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0 Ojp0ZXh0KSwgLTQpOwotQ09NTUlUOwotfSk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2Fj dGlvbiB3aXRoIERETCBhbmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1LCAxMDAwKSBzKGkpOwotQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBkIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMTAwMSwgMjAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0jIGEgc21hbGwgKG5vbi1z dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICgyMDAxLCBtZDUoMjAwMTo6dGV4dCksIC0yMDAxLCAyKjIwMDEpOwotQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFZBTFVFUyAoMjAwMiwgbWQ1KDIwMDI6OnRleHQpLCAtMjAwMiwgMioyMDAyLCAt MyoyMDAyKTsKLUNPTU1JVDsKLX0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAk bm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSk7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCks IGNvdW50KGUpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDIwMDJ8MTk5OXwxMDAy fDEpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcg bW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAn YXBwbHknCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKLSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRy YW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwuIE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAot IyBhZnRlciBETUwgdG8gZW5zdXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQg Zm9yIHRlc3RfdGFiIHNvIHRoYXQKLSMgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIHRvIHNlbmQg dGhlIHNjaGVtYSBhZ2Fpbi4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jl cycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCksIC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOwot QUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBmIElOVDsKLUNPTU1JVDsKLX0pOwotCi0j IEEgc21hbGwgdHJhbnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMganVz dCB0byBlbnN1cmUgdGhhdCB3ZQotIyBzZW5kIHRoZSBzY2hlbWEgYWdhaW4gdG8gcmVmbGVjdCB0 aGUgbGFzdCBjb2x1bW4gYWRkZWQgaW4gdGhlIHByZXZpb3VzIHRlc3QuCi0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0KmkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoNTAwMSw1MDA1KSBzKGkpOwotQ09NTUlUOwotfSk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIg U0VUKHN0cmVhbWluZyA9IGFwcGx5KSIKKyk7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlv biBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFt aW5nJzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJl c3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9Ci0gICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkKSwgY291bnQoZSksIGNvdW50KGYpIEZST00gdGVzdF90YWIiKTsKLWlz KCRyZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSksCi0JJ2NoZWNrIGRhdGEgd2FzIGNv cGllZCB0byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWluZyBhbmQgbm9uLXN0cmVhbWluZyB0 cmFuc2FjdGlvbnMnCi0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9z dWJzY3JpYmVyLCAkYXBwbmFtZSk7CiAKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9w dWJsaXNoZXItPnN0b3A7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThf c3RyZWFtX3N1YnhhY3RfYWJvcnQucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3Ry ZWFtX3N1YnhhY3RfYWJvcnQucGwKaW5kZXggNzE1NTQ0MmU3Ni4uMWMzYjhhM2U5OCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBs CisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5w bApAQCAtOCw2ICs4LDk1IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgRW5jYXBzdWxhdGUg YWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5n IiBvcHRpb24KKyMgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJl YW1pbmc9b24gYW5kIHN0cmVhbWluZz1hcHBseQorIyBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWlu ZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lKSA9 IEBfOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5k IFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBx eworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNTAxLDEwMDApIHMoaSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBz KGkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlST0xMQkFD SyBUTyBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsMjUwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMTsKKwlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDI1MDEsMzAwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1 MDApIHMoaSk7CisJU0FWRVBPSU5UIHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkpOworCUNP TU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJ aXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3 YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2Nh bCBkZWZhdWx0cycKKwkpOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGgg c3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0cmFuc2FjdGlvbiBST0xM QkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg1MDAxLDU1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNjAwMSw2NTAwKSBz KGkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkgcyhpKTsKKwlSRUxFQVNF IHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoODAwMSw4NTAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMxOworCUNPTU1J VDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoMjUwMHwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlv biB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NTAxLDkwMDAp IHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBzKGkpOworCVNBVkVQ T0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDk1MDEsMTAwMDApIHMoaSk7CisJUk9MTEJBQ0s7CisJfSk7CisK Kwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJJHJlc3Vs dCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDI1 MDB8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKwor CSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkkbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENyZWF0ZSBw dWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3Ry ZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNiw2ICsxMjUsMTAgQEAgJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9S IFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdv bicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5F Q1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJM SUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC01Myw4MSArMTQ2 LDI0IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVz dF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNv cGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3 aXRoIERETCwgRE1MIGFuZCBST0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAot CSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7Ci1TQVZFUE9JTlQg czE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAx LDE1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKLVJP TExCQUNLIFRPIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLDI1MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMjUwMSwzMDAwKSBzKGkpOwotU0FWRVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1 MDApIHMoaSk7Ci1TQVZFUE9JTlQgczU7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDM1MDEsNDAwMCkgcyhpKTsKLUNPTU1J VDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSk7CiAKLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgyMDAwfDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxl Y3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVs dHMnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0 cmVhbWluZyBtb2RlICdhcHBseScKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAotIyBsYXJnZSAo c3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9y ZGVyCi0jIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcwotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg0MDAxLDQ1MDApIHMoaSk7Ci1T QVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNjAwMSw2NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg3MDAxLDc1MDAp IHMoaSk7Ci1SRUxFQVNFIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4MDAxLDg1MDApIHMoaSk7Ci1ST0xMQkFDSyBU TyBzMTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwot aXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwKLQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdh cyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNh Y3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyByb2xsYmFjawotJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NTAxLDkwMDAp IHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDkwMDEsOTUwMCkgcyhpKTsKLVNBVkVQT0lO VCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKLVJPTExCQUNLOwotfSk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRh cF9zdWIgU0VUKHN0cmVhbWluZyA9IGFwcGx5KSIKKyk7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50 aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBs aWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAn c3RyZWFtaW5nJzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5 IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9Ci0g ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksICdj aGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFt aW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCiAkbm9k ZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwK aW5kZXggZGJkMGZjYTRkMS4uYzUzMmY4NjJkYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCkBAIC05LDYgKzks NTEgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1v biB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciIG9wdGlvbgorIyBz byB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQg c3RyZWFtaW5nPWFwcGx5CisjIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpID0gQF87CisKKwkjIGxh cmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCisJ JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygzLDUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMg SU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlBTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBzMjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEwMDEsMTUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1 MDEsMjAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOworCVJP TExCQUNLIFRPIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQ09NTUlUOworCX0p OworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCW15 ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0 LCBxcSgxMDAwfDUwMCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxl Y3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVs dHMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUg KGEgPiAyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOworCX0pOworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRl IHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19z dHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzgyLDEwIEBAICRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZP UiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAn b24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05O RUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVC TElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNTQsMzUgKzEw MywyNSBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRl c3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBj b3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24g d2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK LQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOwotQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVfc2VyaWVz KDUwMSwxMDAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBkIElOVDsK LVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkpOwotQUxURVIg VEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgRFJP UCBDT0xVTU4gYzsKLVJPTExCQUNLIFRPIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsK LUNPTU1JVDsKLX0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJz Y3JpYmVyLCAkYXBwbmFtZSk7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVz aW5nIHN0cmVhbWluZyBtb2RlICdhcHBseScKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRp b25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKTsKIAotJHJl c3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDEw MDB8NTAwKSwKLQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24g c3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElP TiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBhcHBseSkiCiApOwogCiskbm9kZV9wdWJsaXNoZXIt PnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l JyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsK KwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBw bmFtZSk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7 CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNj YWRlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwK aW5kZXggN2E3OTdmMzdiYS4uNjYzODA4YWNiOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwKQEAgLTExLDYgKzExLDE3NSBAQCB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVz ZSBUZXN0OjpNb3JlOwogCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMg d2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIgb3B0aW9uCisjIHNvIHRoZSBzYW1lIGNv ZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZCBzdHJlYW1pbmc9YXBw bHkKKyMgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfQSwgJG5vZGVf QiwgJG5vZGVfQywgJGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJHN0cmVhbWluZ19tb2RlKSA9IEBf OworCisJbXkgJG9sZHBpZF9CID0gJG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAi CisJCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0 aW9uX25hbWUgPSAnJGFwcG5hbWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7CisJbXkg JG9sZHBpZF9DID0gJG5vZGVfQi0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVD VCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUg PSAnJGFwcG5hbWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7CisKKwkjIFNldHVwIGxv Z2ljYWwgcmVwbGljYXRpb24gc3RyZWFtaW5nIG1vZGUKKworCSRub2RlX0ItPnNhZmVfcHNxbCgK KwkJJ3Bvc3RncmVzJywgIgorCQlBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9CCisJCVNFVCAo c3RyZWFtaW5nID0gJHN0cmVhbWluZ19tb2RlKTsiKTsKKwkkbm9kZV9DLT5zYWZlX3BzcWwoCisJ CSdwb3N0Z3JlcycsICIKKwkJQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQworCQlTRVQgKHN0 cmVhbWluZyA9ICRzdHJlYW1pbmdfbW9kZSkiKTsKKworCSMgV2FpdCBmb3Igc3Vic2NyaWJlcnMg dG8gZmluaXNoIGluaXRpYWxpemF0aW9uCisKKwkkbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAor CQkncG9zdGdyZXMnLCAiCisJCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZST00gcGdfc3RhdF9y ZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBz dGF0ZSA9ICdzdHJlYW1pbmcnOyIKKwkpIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIGFwcGx5IHRvIHJlc3RhcnQiOworCSRub2RlX0ItPnBvbGxfcXVlcnlfdW50aWwoCisJCSdw b3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0X3JlcGxp Y2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0YXRl ID0gJ3N0cmVhbWluZyc7IgorCSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Ig YXBwbHkgdG8gcmVzdGFydCI7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJ IyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0YSBpcyBzdHJl YW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVk LgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykg YWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkj IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtC IGxpbWl0LgorCSMgVGhlbiAyUEMgUFJFUEFSRQorCSRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0 ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwkjIGNo ZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCisJ bXkgJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAn dHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJ ICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQKKwkkbm9kZV9BLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWIn OyIpOworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9C LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0 aW9uIHdhcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQgPSAkbm9kZV9CLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMz NCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVy IEIsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCisJKTsKKwkkcmVzdWx0 ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo MzMzNHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQg b24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRzJwor CSk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3Jp YmVyKHMpCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1 bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0 aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFD SyBUTyBTQVZFUE9JTlQuCisJIyAwLiBDbGVhbnVwIGZyb20gcHJldmlvdXMgdGVzdCBsZWF2aW5n IG9ubHkgMiByb3dzLgorCSMgMS4gSW5zZXJ0IG9uZSBtb3JlIHJvdy4KKwkjIDIuIFJlY29yZCBh IFNBVkVQT0lOVC4KKwkjIDMuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgorCSMgNC4gRG8g cm9sbGJhY2sgdG8gU0FWRVBPSU5UIHByaW9yIHRvIHRoZSBzdHJlYW1lZCBpbnNlcnRzLgorCSMg NS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0IGRhdGEgYWZ0ZXIgdGhlIFNB VkVQT0lOVCBpcyBhYm9ydGVkIGxlYXZpbmcgb25seSAzIHJvd3MgKD0gMiBvcmlnaW5hbCArIDEg ZnJvbSBzdGVwIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmly c3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAoZGVsZXRlIHdpbGwgYmUgcmVw bGljYXRlZCkKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVkIFJP TExCQUNLIFRPIFNBVkVQT0lOVAorCSRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywg IgorCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5LCAnZm9vYmFy Jyk7CisJCVNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlV UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxF VEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVJPTExCQUNLIFRPIFNBVkVQ T0lOVCBzcF9pbm5lcjsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAnb3V0ZXInOworCQkiKTsKKwor CSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRl IHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0ID0KKwkgICRub2RlX0ItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7 Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJz Y3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3Vs dCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKwor CSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBS RVBBUkVEICdvdXRlcic7Iik7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l X0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwkjIGNoZWNr IHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9 CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9N IHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24g aXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAkbm9kZV9DLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3Rz OyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2Ny aWJlciBDJyk7CisKKwkjIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihz KS4KKwkjIEFsbCB0aGUgc3RyZWFtZWQgZGF0YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hv dWxkIGJlIHJvbGxlZCBiYWNrLgorCSMgKDk5OTksICdmb29iYXInKSBzaG91bGQgYmUgY29tbWl0 dGVkLgorCSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKKwlpcygkcmVz dWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicp OworCSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfdGFiOyIpOworCWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0 ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hl cmUgYiA9ICdmb29iYXInOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQg YXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7CisJaXMo JHJlc3VsdCwgcXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVy IEMnKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwkkbm9k ZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQyk7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ICMgU2V0dXAgYSBjYXNjYWRlIG9mIHB1Yi9zdWIgbm9kZXMuCiAjIG5vZGVfQSAtPiBub2RlX0Ig LT4gbm9kZV9DCkBAIC0yNjAsMTYwICs0MjksMTUgQEAgaXMoJHJlc3VsdCwgcXEoMjEpLCAnUm93 cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CiAjIDJQQyArIFNUUkVB TUlORyBURVNUUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotbXkgJG9sZHBpZF9CID0gJG5v ZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZST00gcGdfc3Rh dF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQicgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7Ci1teSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9u Ci0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3Ry ZWFtaW5nJzsiKTsKLQotIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIChzdHJlYW1pbmcgPSBv bikKLQotJG5vZGVfQi0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlBTFRFUiBTVUJTQ1JJ UFRJT04gdGFwX3N1Yl9CCi0JU0VUIChzdHJlYW1pbmcgPSBvbik7Iik7Ci0kbm9kZV9DLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0MKLQlT RVQgKHN0cmVhbWluZyA9IG9uKSIpOwotCi0jIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlz aCBpbml0aWFsaXphdGlvbgotCi0kbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3Jl cycsICIKLQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQiBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24K LQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJl YW1pbmcnOyIKLSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8g cmVzdGFydCI7Ci0kbm9kZV9CLT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3JlcycsICIKLQlT RUxFQ1QgcGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK LSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7 Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAv IENPTU1JVCBQUkVQQVJFRC4KLSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2Fj dGlvbi4KLSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0 YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRl IGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgVGhlbiAyUEMgUFJFUEFS RQotJG5vZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwot CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfQS0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVz aW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAk YXBwbmFtZV9DLCAnb24nKTsKIAotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgcHJl cGFyZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1p cygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIg QicpOwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwg J3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIDJQQyBDT01N SVQKLSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVf Qik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gd2FzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0g JG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8 MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciBCLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRzJwotKTsKLSRy ZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop LCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwg cXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRl ZCBvbiBzdWJzY3JpYmVyIEMsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMn Ci0pOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3Jp YmVyKHMpCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDAp LCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9 Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00g cGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8gU0FW RVBPSU5ULgotIyAwLiBDbGVhbnVwIGZyb20gcHJldmlvdXMgdGVzdCBsZWF2aW5nIG9ubHkgMiBy b3dzLgotIyAxLiBJbnNlcnQgb25lIG1vcmUgcm93LgotIyAyLiBSZWNvcmQgYSBTQVZFUE9JTlQu Ci0jIDMuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyA0LiBEbyByb2xsYmFjayB0byBT QVZFUE9JTlQgcHJpb3IgdG8gdGhlIHN0cmVhbWVkIGluc2VydHMuCi0jIDUuIFRoZW4gQ09NTUlU IFBSRVBBUkVELgotIwotIyBFeHBlY3QgZGF0YSBhZnRlciB0aGUgU0FWRVBPSU5UIGlzIGFib3J0 ZWQgbGVhdmluZyBvbmx5IDMgcm93cyAoPSAyIG9yaWdpbmFsICsgMSBmcm9tIHN0ZXAgMSkuCi0j IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0 YSBleGNlcHQgZm9yIDIgcm93cyAoZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX0Et PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7 Iik7Ci0KLSMgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQK LSRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JQkVHSU47Ci0JSU5TRVJUIElO VE8gdGVzdF90YWIgVkFMVUVTICg5OTk5LCAnZm9vYmFyJyk7Ci0JU0FWRVBPSU5UIHNwX2lubmVy OwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChh LDMpID0gMDsKLQlST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JUFJFUEFSRSBUUkFO U0FDVElPTiAnb3V0ZXInOwotCSIpOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lX0IpOwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKLQotIyBjaGVj ayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgcHJlcGFyZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3Vs dCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9u IGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFj dHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1 YnNjcmliZXIgQycpOwotCi0jIDJQQyBDT01NSVQKLSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0Mp OwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3JpYmVy Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVf Qy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJl ZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24g c3Vic2NyaWJlciBDJyk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZSBhdCBzdWJzY3Jp YmVyKHMpLgotIyBBbGwgdGhlIHN0cmVhbWVkIGRhdGEgKHByaW9yIHRvIHRoZSBTQVZFUE9JTlQp IHNob3VsZCBiZSByb2xsZWQgYmFjay4KLSMgKDk5OTksICdmb29iYXInKSBzaG91bGQgYmUgY29t bWl0dGVkLgotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7Ci1pcygkcmVz dWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicp OwotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIEZST00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVk IGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBi ID0gJ2Zvb2Jhcic7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBw cmVzZW50IG9uIHN1YnNjcmliZXIgQycpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0 LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1p bmcgbW9kZSAnYXBwbHknCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVz dF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVfQywgJGFwcG5hbWVfQiwgJGFwcG5h bWVfQywgJ2FwcGx5Jyk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgY2hl Y2sgYWxsIHRoZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MjNfdHdvcGhhc2Vfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbAppbmRleCBkODQ3NWQyNWE0Li4zMDIwMGQ1OTM3IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCisrKyBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKQEAgLTgsNiArOCwyNDMg QEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0 ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciIG9wdGlvbgorIyBzbyB0 aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQgc3Ry ZWFtaW5nPWFwcGx5CisjIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2Rl X3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpID0gQF87CisKKwkjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBS RVBBUkVELgorCSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KKwkj IDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyBy ZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNh dGVkIHRvIHN1YnNjcmliZXIKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJv d3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwor CQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNB Q1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4g cHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By ZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJl cGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0 ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBS RVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNv bW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9 IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwK KwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFu ZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKwkkcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJFUEFSRUQu CisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNh dGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkj IDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sg bGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dz ICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBUaGVuIGlu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlC RUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisK KwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2Ny aWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1 bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJ IyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7 Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJ IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygk cmVzdWx0LCBxcSgyfDJ8MiksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJh Y2ssIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzJyk7CisKKwkkcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQg cHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSMgMi4gVGhlbiBzZXJ2 ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIyAz LiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsK KwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVk X3RhYic7fSk7CisKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9k ZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFy dDsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworCSMgY29tbWl0IHBvc3QgdGhlIHJlc3Rh cnQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBS RVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZQorCSRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlp cygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBo YXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJworCSk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJ IyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJF RC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxp Y2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgor CSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQ QVJFLgorCSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgorCSMKKwkjIEV4cGVjdCB0 aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3Jp YmVyCisJIyAodGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAy IHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkjIFRo ZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0 a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7 CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJl ZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBz dWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMo JHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7 CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0 aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBo b2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXRl IHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdmb29iYXInKSIpOworCisJIyAy UEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7 CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlciwKKwkjIGJ1dCB0 aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3YXMgcmVwbGljYXRlZAor CSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK KwlpcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0aGUgb3V0c2lkZSBpbnNlcnQgd2FzIGNv cGllZCB0byBzdWJzY3JpYmVyJyk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94 YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24g c3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8g SU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgQ09NTUlUIFBSRVBBUkVELgorCSMg MS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAzLiBB IHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCisJ IyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgorCSMKKwkjIEV4cGVjdCAyUEMgZGF0YSAr IHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3JpYmVyCisJIyAodGhlIDMzMzQgKyBpbnNl cnRlZCAxID0gMzMzNSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBG aXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0 ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBk ZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNh Y3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJl bnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkj IE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ug c3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29t bWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1J VCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM1fDMzMzV8MzMz NSksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2VsbCBhcyBvdXRzaWRlIGluc2VydCkg aGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycKKwkpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFj dHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24g c3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUg YSA+IDI7Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsK K30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cAogIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDgsNiArMjg1LDEwIEBAICRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZP UiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAn b24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsICIKIAlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIK QEAgLTcwLDIzNiArMzExLDI5IEBAIG15ICR0d29waGFzZV9xdWVyeSA9CiAkbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICR0d29waGFzZV9xdWVyeSkKICAgb3Ig ZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBlbmFibGUgdHdv cGhhc2UiOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIGluaXRp YWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKIG15ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdh cyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIERhdGEgaXMg c3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRoZW4gZG8gY29tbWl0IHByZXBh cmVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNp ZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQot IyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgotIyBJbnNlcnQs IHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4K LSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0J SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0 IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5z YWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2Rl X3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCi0jIDJQQyB0cmFuc2Fj dGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFu c2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMz MzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNj cmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2Rl ICdhcHBseScKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlk ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFt ZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBSRVBBUkVELgotIyAxLiBUYWJsZSBpcyBk ZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIu Ci0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBEbyByb2xsYmFjayBwcmVw YXJlZC4KLSMKLSMgRXhwZWN0IGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgdGhlIG9yaWdp bmFsIDIgcm93cy4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwg ZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0k bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkp OwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0J REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNB Q1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHBy ZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9u IHN1YnNjcmliZXInKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJFRCAndGVz dF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs Ci0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90 YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJl IHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cycpOwotCi0kcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0 cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwotIyBDaGVjayB0aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVj b2RlZCBwcm9wZXJseSBvbiBjcmFzaCByZXN0YXJ0LgotIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQg ZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgMi4gVGhlbiBz ZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0j IDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJlc3RhcnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlciBkbyBjcmFzaC9yZXN0YXJ0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJF R0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7 Ci0KLSRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwotJG5vZGVfcHVibGlzaGVy LT5zdG9wKCdpbW1lZGlhdGUnKTsKLQotJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKLSRub2RlX3N1 YnNjcmliZXItPnN0YXJ0OwotCi0jIGNvbW1pdCBwb3N0IHRoZSByZXN0YXJ0Ci0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJl cGFyZWRfdGFiJzsiKTsKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZQotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMz MzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNj cmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRh cF9zdWIgU0VUKHN0cmVhbWluZyA9IGFwcGx5KSIKICk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKLSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9M TEJBQ0sgUFJFUEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hp Y2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1 c2luZyAyUEMuCi0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRl ciB0aGUgUFJFUEFSRS4KLSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgotIwotIyBF eHBlY3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUg c3Vic2NyaWJlcgotIyAodGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KLSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBm b3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMg VGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUg NjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQg YiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQot IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmli ZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBx cSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNl cnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFu c2FjdGlvbikKLSMgTm90ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9j a3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5 Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0 ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24g Z2V0cyBhYm9ydGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJS T0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyLAotIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRz aWRlIG9mIHRoZSAyUEMgc3RpbGwgd2FzIHJlcGxpY2F0ZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoM3wzfDMp LCAnY2hlY2sgdGhlIG91dHNpZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwot Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEo MCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0 IGJlZm9yZSBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAy IHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBz dHJlYW1lZCB1c2luZyAyUEMuCi0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGlj aCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KLSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4K LSMKLSMgRXhwZWN0IDJQQyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmli ZXIKLSMgKHRoZSAzMzM0ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJv d3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGlu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJ TjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1 KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwot Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNr IHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAn dHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRp ZmZlcmVudCByZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9u KQotIyBOb3RlOiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBt YWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoOTk5OTksICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNv bW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlU IFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50 aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBs aWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAn c3RyZWFtaW5nJzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5 IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotIyBjaGVjayB0aGF0 IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMz MzV8MzMzNXwzMzM1KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lk ZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5z IGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCi0pOwotCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBh cmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQgb24gc3Vic2NyaWJlcicpOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9k ZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKICMgY2hlY2sgYWxsIHRoZSBjbGVhbnVwCi0tIAoyLjI0LjAud2luZG93cy4yCgo= --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v7-0003-Add-some-checks-before-using-apply-background-wor.patch" Content-Description: v7-0003-Add-some-checks-before-using-apply-background-wor.patch Content-Disposition: attachment; filename="v7-0003-Add-some-checks-before-using-apply-background-wor.patch"; size=18219; creation-date="Mon, 30 May 2022 08:48:00 GMT"; modification-date="Mon, 30 May 2022 08:51:57 GMT" Content-Transfer-Encoding: base64 RnJvbSBkOGNjODFmNTE3YzRlZTdjYWQyNjk1YWJiNWFlMzMwNDM0NDAwNWEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3YW5ndyA8d2FuZ3cuZm5zdEBmdWppdHN1LmNvbT4KRGF0ZTog TW9uLCAzMCBNYXkgMjAyMiAxMzo0OTo1NSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjcgMy80XSBB ZGQgc29tZSBjaGVja3MgYmVmb3JlIHVzaW5nIGFwcGx5IGJhY2tncm91bmQgd29ya2VyCiB0byBh cHBseSBjaGFuZ2VzLgoKSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGFyZSB2aW9sYXRl ZCwgYW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZC4KMS4gVGhlIHVuaXF1ZSBjb2x1bW5zIGJldHdl ZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGFyZSBkaWZmZXJlbmNlLgoyLiBUaGVyZSBpcyBh bnkgbm9uLWltbXV0YWJsZSBmdW5jdGlvbiBwcmVzZW50IGluIGV4cHJlc3Npb24gaW4gc3Vic2Ny aWJlcidzCnJlbGF0aW9uLiBDaGVjayBmcm9tIHRoZSBmb2xsb3dpbmcgMyBpdGVtczoKICAgIGEu IFRoZSBmdW5jdGlvbiBpbiB0cmlnZ2VyczsKICAgIGIuIENvbHVtbiBkZWZhdWx0IHZhbHVlIGV4 cHJlc3Npb25zIGFuZCBkb21haW4gY29uc3RyYWludHM7CiAgICBjLiBDb25zdHJhaW50IGV4cHJl c3Npb25zLgotLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAg ICB8ICA2MCArKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YyAgICB8IDE3OSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAgNDcgKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5 cGNhY2hlLmMgICAgICAgICAgICB8ICAxNyArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxyZWxhdGlvbi5oICAgICB8ICAxNSArKwogc3JjL2luY2x1ZGUvdXRpbHMvdHlwY2FjaGUuaCAg ICAgICAgICAgICAgICAgIHwgICAyICsKIC4uLi9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2Vf Y2FzY2FkZS5wbCAgICB8ICAgNyArCiA5IGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCsp LCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpp bmRleCBmZjg1MTNlMmQyLi43ZGEwZGViODMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9wcm90by5jCkBAIC0yMyw3ICsyMyw4IEBACiAvKgogICogUHJvdG9jb2wgbWVzc2FnZSBm bGFncy4KICAqLwotI2RlZmluZSBMT0dJQ0FMUkVQX0lTX1JFUExJQ0FfSURFTlRJVFkgMQorI2Rl ZmluZSBMT0dJQ0FMUkVQX0lTX1JFUExJQ0FfSURFTlRJVFkJCTB4MDAwMQorI2RlZmluZSBMT0dJ Q0FMUkVQX0lTX1VOSVFVRQkJCQkweDAwMDIKIAogI2RlZmluZSBNRVNTQUdFX1RSQU5TQUNUSU9O QUwgKDE8PDApCiAjZGVmaW5lIFRSVU5DQVRFX0NBU0NBREUJCSgxPDwwKQpAQCAtOTMzLDExICs5 MzQsNTMgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24g cmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiAJVHVwbGVEZXNjCWRlc2M7CiAJaW50CQkJaTsKIAl1 aW50MTYJCW5saXZlYXR0cyA9IDA7Ci0JQml0bWFwc2V0ICAqaWRhdHRycyA9IE5VTEw7CisJQml0 bWFwc2V0ICAqaWRhdHRycyA9IE5VTEwsCisJCQkgICAqYXR0dW5pcXVlID0gTlVMTDsKIAlib29s CQlyZXBsaWRlbnRmdWxsOwogCiAJZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKIAorCWlm IChyZWwtPnJkX3JlbC0+cmVsaGFzaW5kZXgpCisJeworCQlMaXN0CSAgICppbmRleG9pZGxpc3Qg PSBSZWxhdGlvbkdldEluZGV4TGlzdChyZWwpOworCQlMaXN0Q2VsbCAgICppbmRleG9pZHNjYW47 CisJCWZvcmVhY2goaW5kZXhvaWRzY2FuLCBpbmRleG9pZGxpc3QpCisJCXsKKwkJCU9pZAkJCWlu ZGV4b2lkID0gbGZpcnN0X29pZChpbmRleG9pZHNjYW4pOworCQkJUmVsYXRpb24JaW5kZXhSZWw7 CisKKwkJCS8qIExvb2sgdXAgdGhlIGRlc2NyaXB0aW9uIGZvciBpbmRleCAqLworCQkJaW5kZXhS ZWwgPSBSZWxhdGlvbklkR2V0UmVsYXRpb24oaW5kZXhvaWQpOworCisJCQlpZiAoIVJlbGF0aW9u SXNWYWxpZChpbmRleFJlbCkpCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBvcGVuIHJlbGF0 aW9uIHdpdGggT0lEICV1IiwgaW5kZXhvaWQpOworCisJCQlpZiAoaW5kZXhSZWwtPnJkX2luZGV4 LT5pbmRpc3VuaXF1ZSkKKwkJCXsKKwkJCQlpbnQJCWk7CisJCQkJLyogQWRkIHJlZmVyZW5jZWQg YXR0cmlidXRlcyB0byBpZGluZGV4YXR0cnMgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhS ZWwtPnJkX2luZGV4LT5pbmRuYXR0czsgaSsrKQorCQkJCXsKKwkJCQkJaW50CQkJYXR0cm51bSA9 IGluZGV4UmVsLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXTsKKworCQkJCQkvKgorCQkJCQkg KiBXZSBkb24ndCBpbmNsdWRlIG5vbi1rZXkgY29sdW1ucyBpbnRvIGlkaW5kZXhhdHRycyBiaXRt YXBzLiBTZWUKKwkJCQkJICogUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAuCisJCQkJCSAqLwor CQkJCQlpZiAoYXR0cm51bSAhPSAwKQorCQkJCQl7CisJCQkJCQlpZiAoaSA8IGluZGV4UmVsLT5y ZF9pbmRleC0+aW5kbmtleWF0dHMgJiYKKwkJCQkJCQkhYm1zX2lzX21lbWJlcihhdHRybnVtIC0g Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwgYXR0dW5pcXVlKSkKKwkJCQkJCQlh dHR1bmlxdWUgPSBibXNfYWRkX21lbWJlcihhdHR1bmlxdWUsCisJCQkJCQkJCQkJCQkJCSAgYXR0 cm51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJCQl9CisJCQkJ fQorCQkJfQorCQkJUmVsYXRpb25DbG9zZShpbmRleFJlbCk7CisJCX0KKwkJbGlzdF9mcmVlKGlu ZGV4b2lkbGlzdCk7CisJfQorCiAJLyogc2VuZCBudW1iZXIgb2YgbGl2ZSBhdHRyaWJ1dGVzICov CiAJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5hdHRzOyBpKyspCiAJewpAQCAtOTc2LDYgKzEwMTks MTAgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVs LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiAJCQkJCQkgIGlkYXR0cnMpKQogCQkJZmxhZ3MgfD0gTE9H SUNBTFJFUF9JU19SRVBMSUNBX0lERU5USVRZOwogCisJCWlmIChibXNfaXNfbWVtYmVyKGF0dC0+ YXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKKwkJCQkJCSAgYXR0 dW5pcXVlKSkKKwkJCWZsYWdzIHw9IExPR0lDQUxSRVBfSVNfVU5JUVVFOworCiAJCXBxX3NlbmRi eXRlKG91dCwgZmxhZ3MpOwogCiAJCS8qIGF0dHJpYnV0ZSBuYW1lICovCkBAIC0xMDAxLDcgKzEw NDgsOCBAQCBsb2dpY2FscmVwX3JlYWRfYXR0cnMoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFJl bGF0aW9uICpyZWwpCiAJaW50CQkJbmF0dHM7CiAJY2hhcgkgICoqYXR0bmFtZXM7CiAJT2lkCQkg ICAqYXR0dHlwczsKLQlCaXRtYXBzZXQgICphdHRrZXlzID0gTlVMTDsKKwlCaXRtYXBzZXQgICph dHRrZXlzID0gTlVMTCwKKwkJCSAgICphdHR1bmlxdWUgPSBOVUxMOwogCiAJbmF0dHMgPSBwcV9n ZXRtc2dpbnQoaW4sIDIpOwogCWF0dG5hbWVzID0gcGFsbG9jKG5hdHRzICogc2l6ZW9mKGNoYXIg KikpOwpAQCAtMTAxMiwxMSArMTA2MCwxNCBAQCBsb2dpY2FscmVwX3JlYWRfYXR0cnMoU3RyaW5n SW5mbyBpbiwgTG9naWNhbFJlcFJlbGF0aW9uICpyZWwpCiAJewogCQl1aW50OAkJZmxhZ3M7CiAK LQkJLyogQ2hlY2sgZm9yIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1uICovCisJCS8qIENoZWNrIGZv ciByZXBsaWNhIGlkZW50aXR5IGFuZCB1bmlxdWUgY29sdW1uICovCiAJCWZsYWdzID0gcHFfZ2V0 bXNnYnl0ZShpbik7CiAJCWlmIChmbGFncyAmIExPR0lDQUxSRVBfSVNfUkVQTElDQV9JREVOVElU WSkKIAkJCWF0dGtleXMgPSBibXNfYWRkX21lbWJlcihhdHRrZXlzLCBpKTsKIAorCQlpZiAoZmxh Z3MgJiBMT0dJQ0FMUkVQX0lTX1VOSVFVRSkKKwkJCWF0dHVuaXF1ZSA9IGJtc19hZGRfbWVtYmVy KGF0dHVuaXF1ZSwgaSk7CisKIAkJLyogYXR0cmlidXRlIG5hbWUgKi8KIAkJYXR0bmFtZXNbaV0g PSBwc3RyZHVwKHBxX2dldG1zZ3N0cmluZyhpbikpOwogCkBAIC0xMDMwLDYgKzEwODEsNyBAQCBs b2dpY2FscmVwX3JlYWRfYXR0cnMoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFJlbGF0aW9uICpy ZWwpCiAJcmVsLT5hdHRuYW1lcyA9IGF0dG5hbWVzOwogCXJlbC0+YXR0dHlwcyA9IGF0dHR5cHM7 CiAJcmVsLT5hdHRrZXlzID0gYXR0a2V5czsKKwlyZWwtPmF0dHVuaXF1ZSA9IGF0dHVuaXF1ZTsK IAlyZWwtPm5hdHRzID0gbmF0dHM7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYwppbmRleCA4MGZiNTYxYTlhLi5kMDM4ZjdkYzdhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC0xOSwxMiArMTksMTggQEAKIAog I2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb25fcmVsLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRl ICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxl ci5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90eXBjYWNo ZS5oIgogCiAKIHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2ljYWxSZXBSZWxNYXBDb250ZXh0ID0g TlVMTDsKQEAgLTkxLDYgKzk3LDIzIEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2ludmFsaWRhdGVfY2Io RGF0dW0gYXJnLCBPaWQgcmVsb2lkKQogCX0KIH0KIAorLyoKKyAqIFJlc2V0IHRoZSBmbGFnIHZv bGF0aWxpdHkgb2YgYWxsIGV4aXN0aW5nIGVudHJ5IGluIHRoZSByZWxhdGlvbiBtYXAgY2FjaGUu CisgKi8KK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3JlbG1hcF9yZXNldF92b2xhdGlsaXR5X2Ni KERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCit7CisJSEFTSF9TRVFf U1RBVFVTIGhhc2hfc2VxOworCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnk7CisKKwlpZiAo TG9naWNhbFJlcFJlbE1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwloYXNoX3NlcV9pbml0KCZo YXNoX3NlcSwgTG9naWNhbFJlcFJlbE1hcCk7CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3Nl YXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCQllbnRyeS0+dm9sYXRpbGl0eSA9IEZVTkNUSU9O X1VOS05PV047Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSByZWxhdGlvbiBtYXAgY2FjaGUu CiAgKi8KQEAgLTExNiw2ICsxMzksOSBAQCBsb2dpY2FscmVwX3JlbG1hcF9pbml0KHZvaWQpCiAJ LyogV2F0Y2ggZm9yIGludmFsaWRhdGlvbiBldmVudHMuICovCiAJQ2FjaGVSZWdpc3RlclJlbGNh Y2hlQ2FsbGJhY2sobG9naWNhbHJlcF9yZWxtYXBfaW52YWxpZGF0ZV9jYiwKIAkJCQkJCQkJICAo RGF0dW0pIDApOworCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBST0NPSUQsCisJCQkJ CQkJCSAgbG9naWNhbHJlcF9yZWxtYXBfcmVzZXRfdm9sYXRpbGl0eV9jYiwKKwkJCQkJCQkJICAo RGF0dW0pIDApOwogfQogCiAvKgpAQCAtMTQyLDYgKzE2OCw3IEBAIGxvZ2ljYWxyZXBfcmVsbWFw X2ZyZWVfZW50cnkoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKIAkJcGZyZWUocmVtb3Rl cmVsLT5hdHR0eXBzKTsKIAl9CiAJYm1zX2ZyZWUocmVtb3RlcmVsLT5hdHRrZXlzKTsKKwlibXNf ZnJlZShyZW1vdGVyZWwtPmF0dHVuaXF1ZSk7CiAKIAlpZiAoZW50cnktPmF0dHJtYXApCiAJCXBm cmVlKGVudHJ5LT5hdHRybWFwKTsKQEAgLTE5MCw2ICsyMTcsNyBAQCBsb2dpY2FscmVwX3JlbG1h cF91cGRhdGUoTG9naWNhbFJlcFJlbGF0aW9uICpyZW1vdGVyZWwpCiAJfQogCWVudHJ5LT5yZW1v dGVyZWwucmVwbGlkZW50ID0gcmVtb3RlcmVsLT5yZXBsaWRlbnQ7CiAJZW50cnktPnJlbW90ZXJl bC5hdHRrZXlzID0gYm1zX2NvcHkocmVtb3RlcmVsLT5hdHRrZXlzKTsKKwllbnRyeS0+cmVtb3Rl cmVsLmF0dHVuaXF1ZSA9IGJtc19jb3B5KHJlbW90ZXJlbC0+YXR0dW5pcXVlKTsKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0KIApAQCAtMzA3LDcgKzMzNSw4IEBAIGxvZ2ljYWxy ZXBfcmVsX29wZW4oTG9naWNhbFJlcFJlbElkIHJlbW90ZWlkLCBMT0NLTU9ERSBsb2NrbW9kZSkK IAlpZiAoIWVudHJ5LT5sb2NhbHJlbHZhbGlkKQogCXsKIAkJT2lkCQkJcmVsaWQ7Ci0JCUJpdG1h cHNldCAgKmlka2V5OworCQlCaXRtYXBzZXQgICppZGtleSwKKwkJCQkgICAqdWtleTsKIAkJVHVw bGVEZXNjCWRlc2M7CiAJCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCQlpbnQJCQlpOwpAQCAtNDE1 LDYgKzQ0NCwxNTMgQEAgbG9naWNhbHJlcF9yZWxfb3BlbihMb2dpY2FsUmVwUmVsSWQgcmVtb3Rl aWQsIExPQ0tNT0RFIGxvY2ttb2RlKQogCQkJfQogCQl9CiAKKwkJLyoKKwkJICogQ2hlY2sgd2hl dGhlciB0aGUgdW5pcXVlIGluZGV4IG9mIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBhcmUKKwkJ ICogY29uc2lzdGVudC4KKwkJICovCisJCWVudHJ5LT5zYW1ldW5pcXVlID0gdHJ1ZTsKKwkJdWtl eSA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKGVudHJ5LT5sb2NhbHJlbCwKKwkJCQkJCQkJ CQkgIElOREVYX0FUVFJfQklUTUFQX0tFWSk7CisKKwkJaWYgKHVrZXkpCisJCXsKKwkJCWkgPSAt MTsKKwkJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih1a2V5LCBpKSkgPj0gMCkKKwkJCXsK KwkJCQlpbnQJCQlhdHRudW0gPSBpICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJl cjsKKworCQkJCWF0dG51bSA9IEF0dHJOdW1iZXJHZXRBdHRyT2Zmc2V0KGF0dG51bSk7CisKKwkJ CQlpZiAoZW50cnktPmF0dHJtYXAtPmF0dG51bXNbYXR0bnVtXSA8IDAgfHwKKwkJCQkJIWJtc19p c19tZW1iZXIoZW50cnktPmF0dHJtYXAtPmF0dG51bXNbYXR0bnVtXSwgcmVtb3RlcmVsLT5hdHR1 bmlxdWUpKQorCQkJCXsKKwkJCQkJZW50cnktPnNhbWV1bmlxdWUgPSBmYWxzZTsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGVudHJ5LT52b2xhdGlsaXR5ID09IEZVTkNU SU9OX1VOS05PV04pCisJCXsKKwkJCS8qCisJCQkgKiBDaGVjayBmcm9tIHRoZSBmb2xsb3dpbmcg cG9pbnRzOgorCQkJICoKKwkJCSAqIGEuIFRoZSBmdW5jdGlvbiBpbiB0cmlnZ2VyczsKKwkJCSAq IGIuIENvbHVtbiBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb25zIGFuZCBkb21haW4gY29uc3RyYWlu dHM7CisJCQkgKiBjLiBDb25zdHJhaW50IGV4cHJlc3Npb25zLgorCQkJICovCisJCQlib29sCW5v bmltbXV0YWJsZSA9IGZhbHNlOworCisJCQkvKiBDaGVjayB0aGUgdHJpZ2dlciBmdW5jdGlvbnMu ICovCisJCQlpZiAoIW5vbmltbXV0YWJsZSkKKwkJCXsKKwkJCQlpbnQJaTsKKworCQkJCWlmIChl bnRyeS0+bG9jYWxyZWwtPnRyaWdkZXNjICE9IE5VTEwpCisJCQkJCWZvciAoaSA9IDA7IGkgPCBl bnRyeS0+bG9jYWxyZWwtPnRyaWdkZXNjLT5udW10cmlnZ2VyczsgaSsrKQorCQkJCQl7CisJCQkJ CQlUcmlnZ2VyCQkqdHJpZyA9IGVudHJ5LT5sb2NhbHJlbC0+dHJpZ2Rlc2MtPnRyaWdnZXJzICsg aTsKKworCQkJCQkJaWYgKGZ1bmNfdm9sYXRpbGUodHJpZy0+dGdmb2lkKSAhPSBQUk9WT0xBVElM RV9JTU1VVEFCTEUpCisJCQkJCQl7CisJCQkJCQkJbm9uaW1tdXRhYmxlID0gdHJ1ZTsKKwkJCQkJ CQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJfQorCisJCQkvKiBDaGVjayB0aGUgY29sdW1u cy4gKi8KKwkJCWlmICghbm9uaW1tdXRhYmxlKQorCQkJeworCQkJCVR1cGxlRGVzYwl0dXBkZXNj ID0gUmVsYXRpb25HZXREZXNjcihlbnRyeS0+bG9jYWxyZWwpOworCQkJCWludAkJCWF0dG51bTsK KworCQkJCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgdHVwZGVzYy0+bmF0dHM7IGF0dG51bSsr KQorCQkJCXsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCBhdHRudW0pOworCisJCQkJCS8qIGJyZWFrIGlmIHdlIHNldCBub25pbW11dGFibGUgaW4g bGFzdCBjaGVjayBmb3IgZG9tYWluLiAqLworCQkJCQlpZiAobm9uaW1tdXRhYmxlKQorCQkJCQkJ YnJlYWs7CisKKwkJCQkJLyogV2UgZG9uJ3QgbmVlZCBpbmZvIGZvciBkcm9wcGVkIG9yIGdlbmVy YXRlZCBhdHRyaWJ1dGVzICovCisJCQkJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0 dGdlbmVyYXRlZCkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8qIFdlIGRvbid0IG5lZWQgdG8g Y2hlY2sgY29sdW1ucyB0aGF0IG9ubHkgZXhpc3Qgb24gdGhlIHN1YnNjcmliZXIgKi8KKwkJCQkJ aWYgKGVudHJ5LT5hdHRybWFwLT5hdHRudW1zW2F0dG51bV0gPCAwKQorCQkJCQkJY29udGludWU7 CisKKwkJCQkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJCQl7CisJCQkJCQlOb2RlCSAgICpkZWZh dWx0ZXhwcjsKKworCQkJCQkJZGVmYXVsdGV4cHIgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChlbnRy eS0+bG9jYWxyZWwsIGF0dG51bSArIDEpOworCQkJCQkJaWYgKGNvbnRhaW5fbXV0YWJsZV9mdW5j dGlvbnMoZGVmYXVsdGV4cHIpKQorCQkJCQkJeworCQkJCQkJCW5vbmltbXV0YWJsZSA9IHRydWU7 CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBJZiB0 aGUgY29sdW1uIGlzIG9mIGEgRE9NQUlOIHR5cGUsIGRldGVybWluZSB3aGV0aGVyIHRoYXQKKwkJ CQkJICogZG9tYWluIGhhcyBhbnkgQ0hFQ0sgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGltbXV0 YWJsZS4KKwkJCQkJICovCisJCQkJCWlmIChnZXRfdHlwdHlwZShhdHQtPmF0dHR5cGlkKSA9PSBU WVBUWVBFX0RPTUFJTikKKwkJCQkJeworCQkJCQkJTGlzdAkJICAgKmRvbWFpbl9jb25zdHJhaW50 czsKKwkJCQkJCUxpc3RDZWxsCSAgICpsYzsKKworCQkJCQkJZG9tYWluX2NvbnN0cmFpbnRzID0g R2V0RG9tYWluQ29uc3RyYWludHMoYXR0LT5hdHR0eXBpZCk7CisKKwkJCQkJCWZvcmVhY2gobGMs IGRvbWFpbl9jb25zdHJhaW50cykKKwkJCQkJCXsKKwkJCQkJCQlEb21haW5Db25zdHJhaW50U3Rh dGUgKmNvbiA9IChEb21haW5Db25zdHJhaW50U3RhdGUgKikgbGZpcnN0KGxjKTsKKworCQkJCQkJ CWlmIChjb24tPmNoZWNrX2V4cHIgJiYgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9ucygoTm9kZSAq KSBjb24tPmNoZWNrX2V4cHIpKQorCQkJCQkJCXsKKwkJCQkJCQkJbm9uaW1tdXRhYmxlID0gdHJ1 ZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJ fQorCisJCQkvKiBDaGVjayB0aGUgY29uc3RyYWludHMuICovCisJCQlpZiAoIW5vbmltbXV0YWJs ZSkKKwkJCXsKKwkJCQlUdXBsZURlc2MJCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGVudHJ5 LT5sb2NhbHJlbCk7CisKKwkJCQlpZiAodHVwZGVzYy0+Y29uc3RyKQorCQkJCXsKKwkJCQkJQ29u c3RyQ2hlY2sJICAgKmNoZWNrID0gdHVwZGVzYy0+Y29uc3RyLT5jaGVjazsKKwkJCQkJaW50CQkJ CWk7CisKKwkJCQkJLyoKKwkJCQkJICogRGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgQ0hFQ0sg Y29uc3RyYWludHMgd2hpY2ggY29udGFpbnMKKwkJCQkJICogbm9uLWltbXV0YWJsZSBmdW5jdGlv bi4KKwkJCQkJICovCisJCQkJCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5jb25zdHItPm51bV9j aGVjazsgaSsrKQorCQkJCQl7CisJCQkJCQlFeHByCSAgICpjaGVja19leHByID0gc3RyaW5nVG9O b2RlKGNoZWNrW2ldLmNjYmluKTsKKworCQkJCQkJaWYgKGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlv bnMoKE5vZGUgKikgY2hlY2tfZXhwcikpCisJCQkJCQl7CisJCQkJCQkJbm9uaW1tdXRhYmxlID0g dHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJ aWYgKG5vbmltbXV0YWJsZSkKKwkJCQllbnRyeS0+dm9sYXRpbGl0eSA9IEZVTkNUSU9OX05PTklN TVVUQUJMRTsKKwkJCWVsc2UKKwkJCQllbnRyeS0+dm9sYXRpbGl0eSA9IEZVTkNUSU9OX0lNTVVU QUJMRTsKKwkJfQorCiAJCWVudHJ5LT5sb2NhbHJlbHZhbGlkID0gdHJ1ZTsKIAl9CiAKQEAgLTU3 MCw2ICs3NDYsNyBAQCBsb2dpY2FscmVwX3BhcnRpdGlvbl9vcGVuKExvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqcm9vdCwKIAl9CiAJZW50cnktPnJlbW90ZXJlbC5yZXBsaWRlbnQgPSByZW1vdGVyZWwt PnJlcGxpZGVudDsKIAllbnRyeS0+cmVtb3RlcmVsLmF0dGtleXMgPSBibXNfY29weShyZW1vdGVy ZWwtPmF0dGtleXMpOworCWVudHJ5LT5yZW1vdGVyZWwuYXR0dW5pcXVlID0gYm1zX2NvcHkocmVt b3RlcmVsLT5hdHR1bmlxdWUpOwogCiAJZW50cnktPmxvY2FscmVsID0gcGFydHJlbDsKIAllbnRy eS0+bG9jYWxyZWxvaWQgPSBwYXJ0T2lkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvdGFibGVzeW5jLmMKaW5kZXggNWViNjAzMjdiNi4uNDg4NWVhYTA3OCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCkBAIC04ODAsNiArODgwLDcgQEAg ZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAls cmVsLT5hdHRuYW1lcyA9IHBhbGxvYzAoTWF4VHVwbGVBdHRyaWJ1dGVOdW1iZXIgKiBzaXplb2Yo Y2hhciAqKSk7CiAJbHJlbC0+YXR0dHlwcyA9IHBhbGxvYzAoTWF4VHVwbGVBdHRyaWJ1dGVOdW1i ZXIgKiBzaXplb2YoT2lkKSk7CiAJbHJlbC0+YXR0a2V5cyA9IE5VTEw7CisJbHJlbC0+YXR0dW5p cXVlID0gTlVMTDsKIAogCS8qCiAJICogU3RvcmUgdGhlIGNvbHVtbnMgYXMgYSBsaXN0IG9mIG5h bWVzLiAgSWdub3JlIHRob3NlIHRoYXQgYXJlIG5vdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKaW5kZXggNzg4YzFjNjVjOS4uNDBjODExYWEwZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0yOTksNiArMjk5LDcgQEAgc3RhdGlj IHZvaWQgYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKEFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0YXRl LCBTaXplIG5ieXRlcywKIHN0YXRpYyB2b2lkIGFwcGx5X2Jnd29ya2VyX2ZyZWUoQXBwbHlCZ3dv cmtlclN0YXRlICp3c3RhdGUpOwogc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfY2hlY2tfc3Rh dHVzKHZvaWQpOwogc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXR1cyhBcHBseUJn d29ya2VyU3RhdHVzIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBhcHBseV9iZ3dvcmtlcl9yZWxhdGlv bl9jaGVjayhMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCk7CiAKIHR5cGVkZWYgc3RydWN0IEZs dXNoUG9zaXRpb24KIHsKQEAgLTIxNDIsNiArMjE0Myw4IEBAIGFwcGx5X2hhbmRsZV9pbnNlcnQo U3RyaW5nSW5mbyBzKQogCS8qIFNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KIAlh cHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gcmVsOwogCisJYXBwbHlfYmd3b3JrZXJfcmVs YXRpb25fY2hlY2socmVsKTsKKwogCS8qIEluaXRpYWxpemUgdGhlIGV4ZWN1dG9yIHN0YXRlLiAq LwogCWVkYXRhID0gY3JlYXRlX2VkYXRhX2Zvcl9yZWxhdGlvbihyZWwpOwogCWVzdGF0ZSA9IGVk YXRhLT5lc3RhdGU7CkBAIC0yMjc4LDYgKzIyODEsOCBAQCBhcHBseV9oYW5kbGVfdXBkYXRlKFN0 cmluZ0luZm8gcykKIAkvKiBDaGVjayBpZiB3ZSBjYW4gZG8gdGhlIHVwZGF0ZS4gKi8KIAljaGVj a19yZWxhdGlvbl91cGRhdGFibGUocmVsKTsKIAorCWFwcGx5X2Jnd29ya2VyX3JlbGF0aW9uX2No ZWNrKHJlbCk7CisKIAkvKiBJbml0aWFsaXplIHRoZSBleGVjdXRvciBzdGF0ZS4gKi8KIAllZGF0 YSA9IGNyZWF0ZV9lZGF0YV9mb3JfcmVsYXRpb24ocmVsKTsKIAllc3RhdGUgPSBlZGF0YS0+ZXN0 YXRlOwpAQCAtMjQ0Niw2ICsyNDUxLDggQEAgYXBwbHlfaGFuZGxlX2RlbGV0ZShTdHJpbmdJbmZv IHMpCiAJLyogQ2hlY2sgaWYgd2UgY2FuIGRvIHRoZSBkZWxldGUuICovCiAJY2hlY2tfcmVsYXRp b25fdXBkYXRhYmxlKHJlbCk7CiAKKwlhcHBseV9iZ3dvcmtlcl9yZWxhdGlvbl9jaGVjayhyZWwp OworCiAJLyogSW5pdGlhbGl6ZSB0aGUgZXhlY3V0b3Igc3RhdGUuICovCiAJZWRhdGEgPSBjcmVh dGVfZWRhdGFfZm9yX3JlbGF0aW9uKHJlbCk7CiAJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKQEAg LTUxMzIsMyArNTEzOSw0MyBAQCBhcHBseV9iZ3dvcmtlcl9zZXRfc3RhdHVzKEFwcGx5Qmd3b3Jr ZXJTdGF0dXMgc3RhdHVzKQogCU15UGFyYWxsZWxTdGF0ZS0+c3RhdHVzID0gc3RhdHVzOwogCVNw aW5Mb2NrUmVsZWFzZSgmTXlQYXJhbGxlbFN0YXRlLT5tdXRleCk7CiB9CisKKy8qCisgKiBDaGVj ayBpZiBjaGFuZ2VzIG9uIHRoaXMgbG9naWNhbCByZXBsaWNhdGlvbiByZWxhdGlvbiAgY2FuIGJl IGFwcGxpZWQgYnkKKyAqIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLgorICovCitzdGF0aWMgdm9p ZAorYXBwbHlfYmd3b3JrZXJfcmVsYXRpb25fY2hlY2soTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpy ZWwpCit7CisJLyogQ2hlY2sgb25seSB3ZSBhcmUgaW4gYXBwbHkgYmd3b3JrZXIuICovCisJaWYg KCFhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZJWE1FOiBDaGVj a3Mgb24gcGFydGl0aW9uZWQgdGFibGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKwkg KiBBZGRpbmcgdGhpcyBjaGVjayByZXF1aXJlcyBhZGRpdGlvbmFsIGZpeGVzIGZvciBvdGhlciBp c3N1ZXMuCisJICogSSB3aWxsIGFkZCB0aGlzIGxhdGVyLCBhZnRlciB0aGUgcmVsYXRlZCBpc3N1 ZXMgYXJlIGZpeGVkLgorCSAqLworCWlmIChyZWwtPmxvY2FscmVsLT5yZF9yZWwtPnJlbGtpbmQg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBh bnkgdW5pcXVlIGluZGV4IGV4aXN0LCBjaGVjayB0aGF0IHRoZXkgYXJlIHNhbWUgYXMgcmVtb3Rl cmVsLgorCSAqLworCWlmICghcmVsLT5zYW1ldW5pcXVlKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJj YW5ub3QgcmVwbGljYXRlIHJlbGF0aW9uIHdpdGggZGlmZmVyZW50IHVuaXF1ZSBpbmRleCIpLAor CQkJCSBlcnJoaW50KCJQbGVhc2UgY2hhbmdlIHRoZSBzdHJlYW1pbmcgb3B0aW9uIHRvICdvbicg aW5zdGVhZCBvZiAnYXBwbHknLiIpKSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIGlzIGFu eSBub24taW1tdXRhYmxlIGZ1bmN0aW9uIHByZXNlbnQgaW4gZXhwcmVzc2lvbiBpbgorCSAqIHRo aXMgcmVsYXRpb24uCisJICovCisJaWYgKHJlbC0+dm9sYXRpbGl0eSA9PSBGVU5DVElPTl9OT05J TU1VVEFCTEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNhbm5vdCByZXBsaWNhdGUgcmVsYXRpb24u IFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBub24taW1tdXRhYmxlIGZ1bmN0aW9uIiksCisJCQkJIGVy cmhpbnQoIlBsZWFzZSBjaGFuZ2UgdGhlIHN0cmVhbWluZyBvcHRpb24gdG8gJ29uJyBpbnN0ZWFk IG9mICdhcHBseScuIikpKTsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvdHlwY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKaW5kZXgg ODA4ZjllYmQwZC4uYjI0ODg5OWQ4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvdHlwY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5jCkBA IC0yNTQwLDYgKzI1NDAsMjMgQEAgY29tcGFyZV92YWx1ZXNfb2ZfZW51bShUeXBlQ2FjaGVFbnRy eSAqdGNhY2hlLCBPaWQgYXJnMSwgT2lkIGFyZzIpCiAJCXJldHVybiAwOwogfQogCisvKgorICog R2V0RG9tYWluQ29uc3RyYWludHMgLS0tIGdldCBEb21haW5Db25zdHJhaW50U3RhdGUgbGlzdCBv ZiBzcGVjaWZpZWQgZG9tYWluIHR5cGUKKyAqLworTGlzdCAqCitHZXREb21haW5Db25zdHJhaW50 cyhPaWQgdHlwZV9pZCkKK3sKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnk7CisJTGlzdAkJICAg KmNvbnN0cmFpbnRzID0gTklMOworCisJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZSh0eXBl X2lkLCBUWVBFQ0FDSEVfRE9NQUlOX0NPTlNUUl9JTkZPKTsKKworCWlmKHR5cGVudHJ5LT5kb21h aW5EYXRhICE9IE5VTEwpCisJCWNvbnN0cmFpbnRzID0gdHlwZW50cnktPmRvbWFpbkRhdGEtPmNv bnN0cmFpbnRzOworCisJcmV0dXJuIGNvbnN0cmFpbnRzOworfQorCiAvKgogICogTG9hZCAob3Ig cmUtbG9hZCkgdGhlIGVudW1EYXRhIG1lbWJlciBvZiB0aGUgdHlwY2FjaGUgZW50cnkuCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggYTc3MWFiOGZmMy4uYTg4 NTM1ODIwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTEwOCw2 ICsxMDgsNyBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwUmVsYXRpb24KIAljaGFyCQlyZXBs aWRlbnQ7CQkvKiByZXBsaWNhIGlkZW50aXR5ICovCiAJY2hhcgkJcmVsa2luZDsJCS8qIHJlbW90 ZSByZWxhdGlvbiBraW5kICovCiAJQml0bWFwc2V0ICAqYXR0a2V5czsJCS8qIEJpdG1hcCBvZiBr ZXkgY29sdW1ucyAqLworCUJpdG1hcHNldCAgKmF0dHVuaXF1ZTsJCS8qIEJpdG1hcCBvZiB1bmlx dWUgY29sdW1ucyAqLwogfSBMb2dpY2FsUmVwUmVsYXRpb247CiAKIC8qIFR5cGUgbWFwcGluZyBp bmZvICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRp b24uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oCmluZGV4IDdi ZjhjZDIyYmQuLjlmNTY4ZTljMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxyZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxy ZWxhdGlvbi5oCkBAIC0xNSw2ICsxNSwxNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9hdHRtYXAuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCIKIAorLyoKKyAqCVN0YXRlcyB0 byBkZXRlcm1pbmUgdm9sYXRpbGl0eSBvZiB0aGUgZnVuY3Rpb24gaW4gZXhwcmVzc2lvbnMgaW4g b25lCisgKglyZWxhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIFJlbEZ1bmNWb2xhdGlsaXR5Cit7 CisJRlVOQ1RJT05fVU5LTk9XTiA9IDAsCS8qIGluaXRpYWxpemluZyAgKi8KKwlGVU5DVElPTl9J TU1VVEFCTEUsCQkvKiBhbGwgZnVuY3Rpb25zIGFyZSBpbW11dGFibGUgZnVuY3Rpb24gKi8KKwlG VU5DVElPTl9OT05JTU1VVEFCTEUJLyogYXQgbGVhc3Qgb25lIG5vbi1pbW11dGFibGUgZnVuY3Rp b24gKi8KK30gUmVsRnVuY1ZvbGF0aWxpdHk7CisKIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBS ZWxNYXBFbnRyeQogewogCUxvZ2ljYWxSZXBSZWxhdGlvbiByZW1vdGVyZWw7CS8qIGtleSBpcyBy ZW1vdGVyZWwucmVtb3RlaWQgKi8KQEAgLTMxLDYgKzQyLDEwIEBAIHR5cGVkZWYgc3RydWN0IExv Z2ljYWxSZXBSZWxNYXBFbnRyeQogCVJlbGF0aW9uCWxvY2FscmVsOwkJLyogcmVsY2FjaGUgZW50 cnkgKE5VTEwgd2hlbiBjbG9zZWQpICovCiAJQXR0ck1hcCAgICAqYXR0cm1hcDsJCS8qIG1hcCBv ZiBsb2NhbCBhdHRyaWJ1dGVzIHRvIHJlbW90ZSBvbmVzICovCiAJYm9vbAkJdXBkYXRhYmxlOwkJ LyogQ2FuIGFwcGx5IHVwZGF0ZXMvZGVsZXRlcz8gKi8KKwlib29sCQlzYW1ldW5pcXVlOwkJLyog SXMgdGhlIHVuaXF1ZSBjb2x1bW4gb2YgbG9jYWwgYW5kIHJlbW90ZQorCQkJCQkJCQkgICBjb25z aXN0ZW50PyAqLworCVJlbEZ1bmNWb2xhdGlsaXR5CXZvbGF0aWxpdHk7CQkvKiBhbGwgZnVuY3Rp b25zIGluIGxvY2FscmVsIGFyZQorCQkJCQkJCQkgICBpbW11dGFibGUgZnVuY3Rpb24/ICovCiAK IAkvKiBTeW5jIHN0YXRlLiAqLwogCWNoYXIJCXN0YXRlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvdHlwY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKaW5kZXgg NDMxYWQ3ZjFiMy4uZWQ3YzJlN2Y0OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdHlw Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90eXBjYWNoZS5oCkBAIC0xOTksNiArMTk5 LDggQEAgZXh0ZXJuIHVpbnQ2NCBhc3NpZ25fcmVjb3JkX3R5cGVfaWRlbnRpZmllcihPaWQgdHlw ZV9pZCwgaW50MzIgdHlwbW9kKTsKIAogZXh0ZXJuIGludAljb21wYXJlX3ZhbHVlc19vZl9lbnVt KFR5cGVDYWNoZUVudHJ5ICp0Y2FjaGUsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiAKK2V4dGVybiBM aXN0ICpHZXREb21haW5Db25zdHJhaW50cyhPaWQgdHlwZV9pZCk7CisKIGV4dGVybiBzaXplX3Qg U2hhcmVkUmVjb3JkVHlwbW9kUmVnaXN0cnlFc3RpbWF0ZSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQg U2hhcmVkUmVjb3JkVHlwbW9kUmVnaXN0cnlJbml0KFNoYXJlZFJlY29yZFR5cG1vZFJlZ2lzdHJ5 ICosCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2Fz Y2FkZS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBs CmluZGV4IDY2MzgwOGFjYjkuLmIzMTcxNDQyMzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCkBAIC0zOCw2ICszOCwxMyBAQCBzdWIgdGVz dF9zdHJlYW1pbmcKIAkJQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQwogCQlTRVQgKHN0cmVh bWluZyA9ICRzdHJlYW1pbmdfbW9kZSkiKTsKIAorCWlmICgkc3RyZWFtaW5nX21vZGUgZXEgJ2Fw cGx5JykKKwl7CisJCSRub2RlX0MtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlBTFRF UiBUQUJMRSB0ZXN0X3RhYiBBTFRFUiBjIERST1AgREVGQVVMVCIpOworCX0KKwogCSMgV2FpdCBm b3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uCiAKIAkkbm9kZV9BLT5wb2xs X3F1ZXJ5X3VudGlsKAotLSAKMi4yMy4wLndpbmRvd3MuMQoK --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v7-0004-Add-a-GUC-max_apply_bgworkers_per_subscription-to.patch" Content-Description: v7-0004-Add-a-GUC-max_apply_bgworkers_per_subscription-to.patch Content-Disposition: attachment; filename="v7-0004-Add-a-GUC-max_apply_bgworkers_per_subscription-to.patch"; size=7037; creation-date="Mon, 30 May 2022 08:48:00 GMT"; modification-date="Mon, 30 May 2022 08:51:58 GMT" Content-Transfer-Encoding: base64 RnJvbSBhOTc1YjMzYjI2MTQ3YjAzOTUyNGMyNjc4OWNhYjRlZWZkMThlNGFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3YW5ndyA8d2FuZ3cuZm5zdEBmdWppdHN1LmNvbT4KRGF0ZTog TW9uLCAzMCBNYXkgMjAyMiAxMzo0Mjo0MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjcgNC80XSBB ZGQgYSBHVUMgIm1heF9hcHBseV9iZ3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiIgdG8KIGNvbnRy b2wgcGFyYWxsZWxpc20uCgpUaGlzIEdVQyBjb250cm9scyBob3cgbWFueSBhcHBseSBiYWNrZ3Jv dW5kIHdvcmtlcnMgY2FuIGJlIGxhdW5jaGVkIHBlcgpzdWJzY3JpcHRpb24uCi0tLQogZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgMjUgKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwg MjUgKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgIHwgIDkgKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAg ICAgICAgICAgICAgICAgIHwgMTIgKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FsbGF1bmNoZXIuaCAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaCAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwKaW5kZXggNWI3Y2U2NTMxZC4uY2U3ZjY4MjdmMiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDk3 MCw2ICs0OTcwLDMxIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5 bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4 LWFwcGx5LWJnd29ya2Vycy1wZXItc3Vic2NyaXB0aW9uIiB4cmVmbGFiZWw9Im1heF9hcHBseV9i Z3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiI+CisgICAgICA8dGVybT48dmFybmFtZT5tYXhfYXBw bHlfYmd3b3JrZXJzX3Blcl9zdWJzY3JpcHRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90 eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X2Fw cGx5X2Jnd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBh cHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgcGVyIHN1YnNjcmlwdGlvbi4gVGhpcworICAgICAgICBw YXJhbWV0ZXIgY29udHJvbHMgdGhlIGFtb3VudCBvZiBwYXJhbGxlbGlzbSBvZiB0aGUgc3RyZWFt aW5nIG9mCisgICAgICAgIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyBpZiB3ZSBzZXQgc3Vic2Ny aXB0aW9uIG9wdGlvbgorICAgICAgICA8bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+IHRvIDxs aXRlcmFsPmFwcGx5PC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFRoZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgYXJlIHRha2VuIGZyb20gdGhlIHBv b2wgZGVmaW5lZCBieQorICAgICAgICA8dmFybmFtZT5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93 b3JrZXJzPC92YXJuYW1lPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAg IFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBp biB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUg b3Igb24gdGhlIHNlcnZlciBjb21tYW5kCisgICAgICAgIGxpbmUuCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJs ZWxpc3Q+CiAgICAgPC9zZWN0Mj4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s YXVuY2hlci5jCmluZGV4IDU4MzM3YmVmOTEuLmRkNzVlMTZjYmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTU0LDYgKzU0LDcgQEAKIAogaW50CQkJ bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQ7CiBpbnQJCQltYXhfc3luY193b3Jr ZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOworaW50CQkJbWF4X2FwcGx5X2Jnd29ya2Vyc19wZXJf c3Vic2NyaXB0aW9uID0gMzsKIAogTG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2FsUmVwV29ya2Vy ID0gTlVMTDsKIApAQCAtNzM1LDYgKzczNiwzMCBAQCBsb2dpY2FscmVwX3N5bmNfd29ya2VyX2Nv dW50KE9pZCBzdWJpZCkKIAlyZXR1cm4gcmVzOwogfQogCisvKgorICogQ291bnQgdGhlIG51bWJl ciBvZiByZWdpc3RlcmVkIChub3QgbmVjZXNzYXJpbHkgcnVubmluZykgYXBwbHkgYmFja2dyb3Vu ZAorICogd29ya2VyIGZvciBhIHN1YnNjcmlwdGlvbi4KKyAqLworaW50Citsb2dpY2FscmVwX2Fw cGx5X2JhY2tncm91bmRfd29ya2VyX2NvdW50KE9pZCBzdWJpZCkKK3sKKwlpbnQJCQlpOworCWlu dAkJCXJlcyA9IDA7CisKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWUoTG9naWNhbFJlcFdvcmtlckxv Y2spKTsKKworCS8qIFNlYXJjaCBmb3IgYXR0YWNoZWQgd29ya2VyIGZvciBhIGdpdmVuIHN1YnNj cmlwdGlvbiBpZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25f d29ya2VyczsgaSsrKQorCXsKKwkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZMb2dpY2FsUmVwQ3R4 LT53b3JrZXJzW2ldOworCisJCWlmICh3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5zdWJ3b3JrZXIp CisJCQlyZXMrKzsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCiAvKgogICogQXBwbHlMYXVuY2hl clNobWVtU2l6ZQogICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciByZXBsaWNhdGlvbiBsYXVu Y2hlciBzaGFyZWQgbWVtb3J5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwppbmRleCA0MGM4MTFhYTBlLi4xYmE0ZGY0NGI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE4MCw2ICsxODAsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxs YXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWx3b3JrZXIuaCIKQEAgLTQ5ODksOSArNDk5MCwxNyBAQCBhcHBseV9iZ3dvcmtlcl9z ZXR1cCh2b2lkKQogCU1lbW9yeUNvbnRleHQJCW9sZGNvbnRleHQ7CiAJYm9vbAkJCQlsYXVuY2hl ZDsKIAlBcHBseUJnd29ya2VyU3RhdGUJCSAgICp3c3RhdGU7CisJaW50CQkJCQluYXBwbHl3b3Jr ZXJzOwogCiAJZWxvZyhERUJVRzEsICJzZXR0aW5nIHVwIGFwcGx5IHdvcmtlciAjJXUiLCBsaXN0 X2xlbmd0aChBcHBseVdvcmtlcnNMaXN0KSArIDEpOwogCisJLyogQ2hlY2sgSWYgdGhlcmUgYXJl IGZyZWUgd29ya2VyIHNsb3QocykgKi8KKwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJM b2NrLCBMV19TSEFSRUQpOworCW5hcHBseXdvcmtlcnMgPSBsb2dpY2FscmVwX2FwcGx5X2JhY2tn cm91bmRfd29ya2VyX2NvdW50KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQpOworCUxXTG9ja1Jl bGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworCWlmIChuYXBwbHl3b3JrZXJzID49IG1heF9h cHBseV9iZ3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKKwkJcmV0dXJuIE5VTEw7CisKIAlvbGRj b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CiAKIAl3c3RhdGUg PSAoQXBwbHlCZ3dvcmtlclN0YXRlICopIHBhbGxvYzAoc2l6ZW9mKEFwcGx5Qmd3b3JrZXJTdGF0 ZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggNTVkNDFhZTdkNi4uNTM5ZWMwN2ZmNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jCkBAIC0zMjIwLDYgKzMyMjAsMTggQEAgc3RhdGljIHN0cnVjdCBjb25maWdf aW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsK KwkJeyJtYXhfYXBwbHlfYmd3b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24iLAorCQkJUEdDX1NJR0hV UCwKKwkJCVJFUExJQ0FUSU9OX1NVQlNDUklCRVJTLAorCQkJZ2V0dGV4dF9ub29wKCJNYXhpbXVt IG51bWJlciBvZiBhcHBseSBiYWNrZ3JhbmQgd29ya2VycyBwZXIgc3Vic2NyaXB0aW9uLiIpLAor CQkJTlVMTCwKKwkJfSwKKwkJJm1heF9hcHBseV9iZ3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiwK KwkJMywgMCwgTUFYX0JBQ0tFTkRTLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCXsKIAkJ eyJsb2dfcm90YXRpb25fYWdlIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEVSRSwKIAkJCWdldHRl eHRfbm9vcCgiU2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2luZyAi CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1w bGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXgg NDhhZDgwY2YyZS4uYjcxMzQwNTQ5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzYwLDYgKzM2MCw3IEBACiAjbWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2VycyA9IDQJIyB0YWtlbiBmcm9tIG1heF93b3JrZXJfcHJvY2Vzc2VzCiAJ CQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI21heF9zeW5jX3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtl cnMKKyNtYXhfYXBwbHlfYmd3b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAzCSMgdGFrZW4gZnJv bSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCiAKIAogIy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAppbmRleCBmMWUy ODIxZTI1Li5hYzhlZjk0MzgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1 bmNoZXIuaApAQCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9s b2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9z eW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4 X2FwcGx5X2Jnd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOwogCiBleHRlcm4gdm9pZCBBcHBseUxh dW5jaGVyUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyTWFpbihEYXR1 bSBtYWluX2FyZyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmlu ZGV4IDFmZWFmY2NhZjYuLmYxYjlhMjQyYzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dv cmtlcl9pbnRlcm5hbC5oCkBAIC05NSw2ICs5NSw3IEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcik7CiAKIGV4dGVy biBpbnQJbG9naWNhbHJlcF9zeW5jX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOworZXh0ZXJuIGlu dAlsb2dpY2FscmVwX2FwcGx5X2JhY2tncm91bmRfd29ya2VyX2NvdW50KE9pZCBzdWJpZCk7CiAK IGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvclRhYmxlc3luYyhPaWQgc3Vib2lk LCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCSAgY2hhciAqb3JpZ2lubmFtZSwgaW50IHN6b3JnbmFt ZSk7Ci0tIAoyLjIzLjAud2luZG93cy4xCgo= --_005_OS3PR01MB6275797F66EF0A47EEB2D8FC9EDD9OS3PR01MB6275jpnp_--