From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D23CCC433FE for ; Tue, 7 Dec 2021 18:28:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240596AbhLGScZ (ORCPT ); Tue, 7 Dec 2021 13:32:25 -0500 Received: from mx07-001d1705.pphosted.com ([185.132.183.11]:46598 "EHLO mx07-001d1705.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231339AbhLGScW (ORCPT ); Tue, 7 Dec 2021 13:32:22 -0500 Received: from pps.filterd (m0209328.ppops.net [127.0.0.1]) by mx08-001d1705.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1B7IBbh1002331; Tue, 7 Dec 2021 18:28:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sony.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=S1; bh=+tPHQXWfAye6XdZQNXgYDDJ1iY2kPavm4F2CS0KgoGY=; b=OM2giNwAaA6spBeSozk2bGbAMEEaZknh3RZzLU9g43ZXrW1Ys8tMupvtIrABWrPTZqZT G5NBn3H5lEOIwiOZJQPI9u2Iz2Erv6BJR9rIyIZKFROO7Ob8oeBVIlLETQ7PIBTCW9wa sPThG1OqlQz9p/OyFFFTob1ojuU2LI008+v313SXcDCZvKswrSa9K3dIAOChvVhhR71l ubW3kuf92T3a4kKuz/HN5+qofH/zahIGjQ0D+z5hf3egF6Gk/iSmSIKBLpjvCuJtOjoR kTtPO2+r1QCi155w8LsgXnVhDtXJY4YzRp2ulcU11139+jK9rB439btqbycktsw2SnOJ VA== Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2109.outbound.protection.outlook.com [104.47.70.109]) by mx08-001d1705.pphosted.com with ESMTP id 3csvjw0p3j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 07 Dec 2021 18:28:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n7oIIdBGy7USTOAt6LlB60ZPKe8SS0OHaA4ylGE+Wj5SKKD7ljYUcrs4gQhKi43Nlto0EIstkRhSMCDYFVZdL7AgXAVCyRwYz0RCdMP59PuzsIlaEv01+bYvq7P8OLjWqdotLBX/uoIl1jrmmzU4j+8esnj1Rx6XD8OpJj9n4EXyOQF1NUjoBvJ2167ODfNT+p164g5+wVgj7Jp+7epuNk3uSmjfjG0pZeuZVq8pAyAsMf8/QzN7hajjJG9tVPPrXVmcpbbEwvEMxrPkTdgoomBZfzWvJL5nNwRBKr62Wl3NdpYLbsDgi0QtAQczDybhLioQPcAOfIzmuJnyYMQ9DQ== 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=+tPHQXWfAye6XdZQNXgYDDJ1iY2kPavm4F2CS0KgoGY=; b=nNkPBrNEcYfrWsng77O6Pvqr4poeldbTZqQDukW/0XLb4G/cZlRTVCNllGj3AGvAo6oB8039w3MpgaobMcf1mrUxXawqTQYAPvcfPg1jHjYirzGb/8Erdxf6CPX5opsvYQsubjLKrizZeSx96tzYMNpOBykKjrbfvAozFfcsP5IV7GYPfHG/cAvpONuhAysDZqz8Xd2tctrJGR6iz2AOTBVrMlWj+/6BncCmFrqd9bN1ICSVqQYpsBFH/8iPeTyQHWJj9uIm1mSXGOdVpugRwhlijID45zJxRia5LzCA9Tvod1Ci+KZt49VkE7XPz1QLWn2kcEx0cxsj6hknjIHcpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sony.com; dmarc=pass action=none header.from=sony.com; dkim=pass header.d=sony.com; arc=none Received: from BYAPR13MB2503.namprd13.prod.outlook.com (2603:10b6:a02:cd::33) by SJ0PR13MB5287.namprd13.prod.outlook.com (2603:10b6:a03:3d4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Tue, 7 Dec 2021 18:28:31 +0000 Received: from BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::88c2:9770:40f:4f8]) by BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::88c2:9770:40f:4f8%7]) with mapi id 15.20.4778.007; Tue, 7 Dec 2021 18:28:31 +0000 From: To: , , , , CC: , , , Subject: RE: [PATCH v2 5/7] Documentation: KUnit: Rework writing page to focus on writing tests Thread-Topic: [PATCH v2 5/7] Documentation: KUnit: Rework writing page to focus on writing tests Thread-Index: AQHX6y0G2Mj8SFCDEEmshz+ICJq6QawnSq2g Date: Tue, 7 Dec 2021 18:28:31 +0000 Message-ID: References: <20211207054019.1455054-1-sharinder@google.com> <20211207054019.1455054-6-sharinder@google.com> In-Reply-To: <20211207054019.1455054-6-sharinder@google.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bcdc65cb-c5f4-47cd-9f46-08d9b9af5eee x-ms-traffictypediagnostic: SJ0PR13MB5287:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rpTRm2GuE6BZWSlD5rG1rgNct10G6CeUZglxjgwAmQimNjAsKQnaiX5BruOFh84GuTCaFFzZgVWOsDdfZcHAcnOWLTtXDq1AjF5MKApbrBSrg7hVBc1cvHmcoDbMbcISGzK/LaBcKeJZh2pNEyApXmLXTpiIsijOXpYCcEfCUzAxOHd5VZlhhqs81XXacZ5pEW7va5lzFSFcKphBix0NxXg1jLYsw2PTbrSlimaT+4RWERXBfZHyHUOIVIojufXEW495mOgLcjpY472/q6Ckt+YuLaqE1w5eJ5Tjwn4tIa4D/3LIyM08Rh0Mc4Fm9kyk+x0vXFpyvf1sxMZCO1UzcbEEFJ5apnvOyyDTgCUijEPWjon2a9l9jJfWwYO4s6DuoWlnsiDQEYCVPfE81+irXmCbgnHu7PlltrwRks0CDvtzcVQdb8c7phgrxepcFPTttEYg0CahzIPfvOaTSoxF76EutXeGz/3KYCBP3NvrpZjdRH6qDQJmGljav2yNY9yecwjy5acaZSQj/lHmajtsSx6ml2CUrC+9pL2/w744zESJPp04yNbdl3B2S10xyeDYBseEdTSt+IQW9qX/zFdymiainNQ2rauvHfniGvvH0Ji06qEPUNXlWIqY4QfG8dAbstnMem7W77R4iZ85LmizCDAaUG9gkD2GjH/33yx/FTpDGlqMTHzOLWSWKiWKrQw4u/IxD4U7A/kf3a3UfNvSR11W2AGUF80giWe6vCZD90M9cjlaluBlpbFUKkXU9vMDYG2VQXtUxxbBBLGa6Z59W/fTM+aubqSR8iReRkV8pOl9vB1njwPAWHFpw4r8jyao x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR13MB2503.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(86362001)(110136005)(7696005)(316002)(9686003)(83380400001)(122000001)(66946007)(66476007)(66556008)(508600001)(64756008)(76116006)(82960400001)(66446008)(8936002)(38100700002)(30864003)(38070700005)(5660300002)(55016003)(8676002)(186003)(54906003)(4326008)(6506007)(52536014)(26005)(33656002)(71200400001)(2906002)(431254002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Sm9zOFhFZWtwdHdTVkRXUk5TL1grQ3RWaGtiSFV1NkU4MkNjbWVLdWNJeVVt?= =?utf-8?B?cHlsZDROR3RGbXpyWWR1dnVOUVhwWlBWOFRISlhGZnNwK1ZLbEU4L0RWN2I2?= =?utf-8?B?eEJuUVJkTVlEOEZ1YWYrVW5KYjZtbkE4aU9QNGtYLzRLVHUwOHdMY1JnRTZH?= =?utf-8?B?OXlxQWkvSjNIQndmL0hsb1FZZmRBQVNjNFBEaVNHYS9pYW9pbjBzSXF2Rmtk?= =?utf-8?B?OENkYTB6NEtJSHVMWGp6WEtTdnFhUk9NZkc1Y0dJbS9teUVuRXRkOFJxNkJF?= =?utf-8?B?eW5FSmt2eS9LcENJdk0zcERGVm0vbTY0a21tVVJwcHNROTJldk01cXpaTkVh?= =?utf-8?B?S2d2TU5SUURkL0picWE5SzBpMGs2VUxwcXRpU1BER3QxYm11d3VSaDNvTWlr?= =?utf-8?B?NElMdkZPS2F5L241RnRpc2ZNWHRRTGEra0xZUms0Yitod1paRjZnMnhUck9H?= =?utf-8?B?Q3NvZVNEeTFVN25kQjNpcU1jMld1U2NoZG13ZnBSTXNOTS9zN3VQT3U4THlz?= =?utf-8?B?MUJUZVhDYy8yZDU5SG5LZzQyZ3JTWXovTm1OUEtuTGxwMkoxL3RHUVQ1cUcw?= =?utf-8?B?MTh0dVdnZDBJV3JTV1ZoVjdkalZTNklyOS9JSmlRRS9YYWJmWlltaCtyWFZx?= =?utf-8?B?c2gxMThRZlFiRlpGbFl0aG95dzQrSmw4bGRMaDJOYlBYTnllZHIwNFJlVU9w?= =?utf-8?B?NlJ6UjJIV0MrTU1JSlJpbUFESVhkeXVLbUtZYTNtLzFXWjZKaXlod1pCTC93?= =?utf-8?B?UWgvSEdWSng2NW1DR2pySDE0RjVXRjJPSy91bysxeHRwQmR6bVpqWVBuNm1q?= =?utf-8?B?NU16SVEwRVNWQUR6NDUrSTBjeVNGOVBPaUJ2eDZ1OFE2VmZMV1kxV1VaN2ph?= =?utf-8?B?YTc4ZGFJdm1hV2xBMklpZEFTaWt6dU1jNWg3RXhYRjRGQm9rNWRINVQ0azd5?= =?utf-8?B?cUZ0MU9jSUU2NzNrVG5OTzBJL2pGeENXdlRWVUhuREk0L0VVVHpXaDVmbFRo?= =?utf-8?B?OTJOS3oxMnExcXdwWEFPWHZhLzR1V3NTZmJTdnpsZENXcVVJU3BJaU5KWDU4?= =?utf-8?B?M0x2dDZVaExEWDJob05GWkg0czVkMWwyNStibmlxZXpDeXRETFYrZElaNGFZ?= =?utf-8?B?T2NpeGY3OXdERU56UVZIV3hzb09XcERzTmU5akNFdHJYZkRqVG0zRTZrYzF6?= =?utf-8?B?VjdWV3NQM1kvWmEwd05qMERSYjlxT09KL3FCOHVPUXBVVHl3T2NuZDVSd05O?= =?utf-8?B?b29FTGdDUm1BV3A0ZUJlQTVNd01vWk01OG0zZmVKN0tsQWhxUWhZandNTHRW?= =?utf-8?B?QVNpc2FQajFIb1FUaFVGMXplUkhRMHVNMWJBeGlPQ3VnQ2hPdkZUM3VxMC9M?= =?utf-8?B?NW1nL2NlVzFIVGxFdjI3bEhUbS9Uc1BjcEFCbHYrOXFlWTJSeUtGU1JBc1Q0?= =?utf-8?B?bnE3MmZoVGVzZjFPYVAxRUFxdmtMR1ZGd2QrVmordXlzTkRDT0FkTzJ4K1pM?= =?utf-8?B?bkVMbkxySS9tVEY1b0Q4SWVIbTh6ZzkvQWxWMDJIMDR6NTA3UE5GaGNUVnNp?= =?utf-8?B?OFJ0YlVrU0xVOHMrcGN5MHVyMitJYmVpaXVLdzJ6YVBxMjJibC9NRXpYS2t6?= =?utf-8?B?WG53R3NnT3F6UU1ldTIvdkZibi9XVUQ1V3ljeXBjVUZWMk5YVWllb3MwYW9V?= =?utf-8?B?MlZtamt2dFJIOTdnb1BiUDBrdE91d2x5NTRjeDRTUDZSWEFaSnlsbW90Z0Jl?= =?utf-8?B?Q0lHNm5waFIyWUdoemNhSCs4K3hMcmFSc3FPLzRoa2c5TFU4NUdrc1k5WWhF?= =?utf-8?B?SHQ3TlB1ekhqR1FkM1pqa0NFQ1FsYkdLSXNmdHpWMGtiMTN5TVcxSnErenow?= =?utf-8?B?SlB3WFR0b0ZBd3NUUU1oOXdPQitwS09HV3lpZjV0YlYzR3ZodkxjMFozL1dE?= =?utf-8?B?VTNwN0tLNXBCN3hlVUxkSE9SQTBzczI3RTVsN0tTUzE1SkdlYXNFSVRkSWxu?= =?utf-8?B?VjhKeTVQdU90UStMc1F3TVI2NzNQZEowVUluU21kVjdEeThaWElWNkY1MHJa?= =?utf-8?B?M3F4aDByZWZZWXV5Zkk3eGVaNFAzcWtkVkhTS2hqV2VmbFdDN3RoWkhFdkh4?= =?utf-8?B?YXlXWk5OR3IwOGtVOThlelN4cmFOeFVWdVV6M1RxWTFjbjhJSWxMVGFnWm1E?= =?utf-8?Q?qbowsywHdjpfVqrBziJeUNc=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR13MB2503.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bcdc65cb-c5f4-47cd-9f46-08d9b9af5eee X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Dec 2021 18:28:31.1478 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 66c65d8a-9158-4521-a2d8-664963db48e4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eIFdD6pP0awzINW2xNp160W2kf8kfw6xdafHEEzCIrJuCvMeIixDBV+tltLmDhCJYL97s2Xr3GR3d3xO2TG4Hw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR13MB5287 X-Proofpoint-ORIG-GUID: JfeRG59VeKCgcV_NDsiiroCuwOoQMow_ X-Proofpoint-GUID: JfeRG59VeKCgcV_NDsiiroCuwOoQMow_ X-Sony-Outbound-GUID: JfeRG59VeKCgcV_NDsiiroCuwOoQMow_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2021-12-07_07,2021-12-06_02,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 mlxscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 priorityscore=1501 mlxlogscore=999 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112070114 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIYXJpbmRlciBTaW5naCA8c2hh cmluZGVyQGdvb2dsZS5jb20+DQo+IA0KPiBXZSBub3cgaGF2ZSBkZWRpY2F0ZWQgcGFnZXMgb24g cnVubmluZyB0ZXN0cy4gVGhlcmVmb3JlIHJlZm9jdXMgdGhlDQo+IHVzYWdlIHBhZ2Ugb24gd3Jp dGluZyB0ZXN0cyBhbmQgYWRkIGNvbnRlbnQgZnJvbSB0aXBzIHBhZ2UgYW5kDQo+IGluZm9ybWF0 aW9uIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBIYXJpbmRl ciBTaW5naCA8c2hhcmluZGVyQGdvb2dsZS5jb20+DQo+IC0tLQ0KPiAgRG9jdW1lbnRhdGlvbi9k ZXYtdG9vbHMva3VuaXQvaW5kZXgucnN0IHwgICAyICstDQo+ICBEb2N1bWVudGF0aW9uL2Rldi10 b29scy9rdW5pdC9zdGFydC5yc3QgfCAgIDIgKy0NCj4gIERvY3VtZW50YXRpb24vZGV2LXRvb2xz L2t1bml0L3VzYWdlLnJzdCB8IDU3MCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0NCj4gIDMgZmls ZXMgY2hhbmdlZCwgMjQ3IGluc2VydGlvbnMoKyksIDMyNyBkZWxldGlvbnMoLSkNCj4gDQo+IGRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9pbmRleC5yc3QgYi9Eb2N1 bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9pbmRleC5yc3QNCj4gaW5kZXggYzBkMWZkNzQ5Y2Qy Li43NmM5NzA0ZDZhMWEgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1 bml0L2luZGV4LnJzdA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9pbmRl eC5yc3QNCj4gQEAgLTEwMiw3ICsxMDIsNyBAQCBIb3cgZG8gSSB1c2UgaXQ/DQo+ICAqICAgRG9j dW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvYXJjaGl0ZWN0dXJlLnJzdCAtIEtVbml0IGFyY2hp dGVjdHVyZS4NCj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9ydW5fd3JhcHBl ci5yc3QgLSBydW4ga3VuaXRfdG9vbC4NCj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9r dW5pdC9ydW5fbWFudWFsLnJzdCAtIHJ1biB0ZXN0cyB3aXRob3V0IGt1bml0X3Rvb2wuDQo+IC0q ICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0IC0gS1VuaXQgZmVhdHVy ZXMuDQo+ICsqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0IC0gd3Jp dGUgdGVzdHMuDQo+ICAqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdGlwcy5yc3Qg LSBiZXN0IHByYWN0aWNlcyB3aXRoDQo+ICAgICAgZXhhbXBsZXMuDQo+ICAqICAgRG9jdW1lbnRh dGlvbi9kZXYtdG9vbHMva3VuaXQvYXBpL2luZGV4LnJzdCAtIEtVbml0IEFQSXMNCj4gZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0LnJzdCBiL0RvY3VtZW50 YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0LnJzdA0KPiBpbmRleCBhZjEzZjQ0M2M5NzYuLmE4 NThhYjAwOTk0NCAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQv c3RhcnQucnN0DQo+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0LnJz dA0KPiBAQCAtMjQzLDcgKzI0Myw3IEBAIE5leHQgU3RlcHMNCj4gICogICBEb2N1bWVudGF0aW9u L2Rldi10b29scy9rdW5pdC9hcmNoaXRlY3R1cmUucnN0IC0gS1VuaXQgYXJjaGl0ZWN0dXJlLg0K PiAgKiAgIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3J1bl93cmFwcGVyLnJzdCAtIHJ1 biBrdW5pdF90b29sLg0KPiAgKiAgIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3J1bl9t YW51YWwucnN0IC0gcnVuIHRlc3RzIHdpdGhvdXQga3VuaXRfdG9vbC4NCj4gLSogICBEb2N1bWVu dGF0aW9uL2Rldi10b29scy9rdW5pdC91c2FnZS5yc3QgLSBLVW5pdCBmZWF0dXJlcy4NCj4gKyog ICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC91c2FnZS5yc3QgLSB3cml0ZSB0ZXN0cy4N Cj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC90aXBzLnJzdCAtIGJlc3QgcHJh Y3RpY2VzIHdpdGgNCj4gICAgICBleGFtcGxlcy4NCj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10 b29scy9rdW5pdC9hcGkvaW5kZXgucnN0IC0gS1VuaXQgQVBJcw0KPiBkaWZmIC0tZ2l0IGEvRG9j dW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9kZXYt dG9vbHMva3VuaXQvdXNhZ2UucnN0DQo+IGluZGV4IDYzZjFiYjg5ZWJmNS4uYjMyMTg3Nzc5N2Yw IDEwMDY0NA0KPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC91c2FnZS5yc3QN Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0DQo+IEBAIC0x LDU3ICsxLDEzIEBADQo+ICAuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiAN Cj4gLT09PT09PT09PT09DQo+IC1Vc2luZyBLVW5pdA0KPiAtPT09PT09PT09PT0NCj4gLQ0KPiAt VGhlIHB1cnBvc2Ugb2YgdGhpcyBkb2N1bWVudCBpcyB0byBkZXNjcmliZSB3aGF0IEtVbml0IGlz LCBob3cgaXQgd29ya3MsIGhvdyBpdA0KPiAtaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCwgYW5kIGFs bCB0aGUgY29uY2VwdHMgYW5kIHRlcm1pbm9sb2d5IHRoYXQgYXJlIG5lZWRlZCB0bw0KPiAtdW5k ZXJzdGFuZCBpdC4gVGhpcyBndWlkZSBhc3N1bWVzIGEgd29ya2luZyBrbm93bGVkZ2Ugb2YgdGhl IExpbnV4IGtlcm5lbCBhbmQNCj4gLXNvbWUgYmFzaWMga25vd2xlZGdlIG9mIHRlc3RpbmcuDQo+ IC0NCj4gLUZvciBhIGhpZ2ggbGV2ZWwgaW50cm9kdWN0aW9uIHRvIEtVbml0LCBpbmNsdWRpbmcg c2V0dGluZyB1cCBLVW5pdCBmb3IgeW91cg0KPiAtcHJvamVjdCwgc2VlIERvY3VtZW50YXRpb24v ZGV2LXRvb2xzL2t1bml0L3N0YXJ0LnJzdC4NCj4gLQ0KPiAtT3JnYW5pemF0aW9uIG9mIHRoaXMg ZG9jdW1lbnQNCj4gLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0NCj4gLVRoaXMg ZG9jdW1lbnQgaXMgb3JnYW5pemVkIGludG8gdHdvIG1haW4gc2VjdGlvbnM6IFRlc3RpbmcgYW5k IENvbW1vbiBQYXR0ZXJucy4NCj4gLVRoZSBmaXJzdCBjb3ZlcnMgd2hhdCB1bml0IHRlc3RzIGFy ZSBhbmQgaG93IHRvIHVzZSBLVW5pdCB0byB3cml0ZSB0aGVtLiBUaGUNCj4gLXNlY29uZCBjb3Zl cnMgY29tbW9uIHRlc3RpbmcgcGF0dGVybnMsIGUuZy4gaG93IHRvIGlzb2xhdGUgY29kZSBhbmQg bWFrZSBpdA0KPiAtcG9zc2libGUgdG8gdW5pdCB0ZXN0IGNvZGUgdGhhdCB3YXMgb3RoZXJ3aXNl IHVuLXVuaXQtdGVzdGFibGUuDQo+IC0NCj4gLVRlc3RpbmcNCj4gLT09PT09PT0NCj4gLQ0KPiAt V2hhdCBpcyBLVW5pdD8NCj4gLS0tLS0tLS0tLS0tLS0tDQo+IC0NCj4gLSJLIiBpcyBzaG9ydCBm b3IgImtlcm5lbCIgc28gIktVbml0IiBpcyB0aGUgIihMaW51eCkgS2VybmVsIFVuaXQgVGVzdGlu Zw0KPiAtRnJhbWV3b3JrLiIgS1VuaXQgaXMgaW50ZW5kZWQgZmlyc3QgYW5kIGZvcmVtb3N0IGZv ciB3cml0aW5nIHVuaXQgdGVzdHM7IGl0IGlzDQo+IC1nZW5lcmFsIGVub3VnaCB0aGF0IGl0IGNh biBiZSB1c2VkIHRvIHdyaXRlIGludGVncmF0aW9uIHRlc3RzOyBob3dldmVyLCB0aGlzIGlzDQo+ IC1hIHNlY29uZGFyeSBnb2FsLiBLVW5pdCBoYXMgbm8gYW1iaXRpb24gb2YgYmVpbmcgdGhlIG9u bHkgdGVzdGluZyBmcmFtZXdvcmsgZm9yDQo+IC10aGUga2VybmVsOyBmb3IgZXhhbXBsZSwgaXQg ZG9lcyBub3QgaW50ZW5kIHRvIGJlIGFuIGVuZC10by1lbmQgdGVzdGluZw0KPiAtZnJhbWV3b3Jr Lg0KPiAtDQo+IC1XaGF0IGlzIFVuaXQgVGVzdGluZz8NCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiAtDQo+IC1BIGB1bml0IHRlc3QgPGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9V bml0VGVzdC5odG1sPmBfIGlzIGEgdGVzdCB0aGF0DQo+IC10ZXN0cyBjb2RlIGF0IHRoZSBzbWFs bGVzdCBwb3NzaWJsZSBzY29wZSwgYSAqdW5pdCogb2YgY29kZS4gSW4gdGhlIEMNCj4gLXByb2dy YW1taW5nIGxhbmd1YWdlIHRoYXQncyBhIGZ1bmN0aW9uLg0KPiAtDQo+IC1Vbml0IHRlc3RzIHNo b3VsZCBiZSB3cml0dGVuIGZvciBhbGwgdGhlIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb25zIGlu IGENCj4gLWNvbXBpbGF0aW9uIHVuaXQ7IHNvIHRoYXQgaXMgYWxsIHRoZSBmdW5jdGlvbnMgdGhh dCBhcmUgZXhwb3J0ZWQgaW4gZWl0aGVyIGENCj4gLSpjbGFzcyogKGRlZmluZWQgYmVsb3cpIG9y IGFsbCBmdW5jdGlvbnMgd2hpY2ggYXJlICoqbm90Kiogc3RhdGljLg0KPiAtDQo+ICBXcml0aW5n IFRlc3RzDQo+IC0tLS0tLS0tLS0tLS0tDQo+ICs9PT09PT09PT09PT09DQo+IA0KPiAgVGVzdCBD YXNlcw0KPiAtfn5+fn5+fn5+fg0KPiArLS0tLS0tLS0tLQ0KPiANCj4gIFRoZSBmdW5kYW1lbnRh bCB1bml0IGluIEtVbml0IGlzIHRoZSB0ZXN0IGNhc2UuIEEgdGVzdCBjYXNlIGlzIGEgZnVuY3Rp b24gd2l0aA0KPiAtdGhlIHNpZ25hdHVyZSBgYHZvaWQgKCopKHN0cnVjdCBrdW5pdCAqdGVzdClg YC4gSXQgY2FsbHMgYSBmdW5jdGlvbiB0byBiZSB0ZXN0ZWQNCj4gK3RoZSBzaWduYXR1cmUgYGB2 b2lkICgqKShzdHJ1Y3Qga3VuaXQgKnRlc3QpYGAuIEl0IGNhbGxzIHRoZSBmdW5jdGlvbiB1bmRl ciB0ZXN0DQo+ICBhbmQgdGhlbiBzZXRzICpleHBlY3RhdGlvbnMqIGZvciB3aGF0IHNob3VsZCBo YXBwZW4uIEZvciBleGFtcGxlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IEBAIC02NSwx OCArMjEsMTkgQEAgYW5kIHRoZW4gc2V0cyAqZXhwZWN0YXRpb25zKiBmb3Igd2hhdCBzaG91bGQg aGFwcGVuLiBGb3IgZXhhbXBsZToNCj4gIAkJS1VOSVRfRkFJTCh0ZXN0LCAiVGhpcyB0ZXN0IG5l dmVyIHBhc3Nlcy4iKTsNCj4gIAl9DQo+IA0KPiAtSW4gdGhlIGFib3ZlIGV4YW1wbGUgYGBleGFt cGxlX3Rlc3Rfc3VjY2Vzc2BgIGFsd2F5cyBwYXNzZXMgYmVjYXVzZSBpdCBkb2VzDQo+IC1ub3Ro aW5nOyBubyBleHBlY3RhdGlvbnMgYXJlIHNldCwgc28gYWxsIGV4cGVjdGF0aW9ucyBwYXNzLiBP biB0aGUgb3RoZXIgaGFuZA0KPiAtYGBleGFtcGxlX3Rlc3RfZmFpbHVyZWBgIGFsd2F5cyBmYWls cyBiZWNhdXNlIGl0IGNhbGxzIGBgS1VOSVRfRkFJTGBgLCB3aGljaCBpcw0KPiAtYSBzcGVjaWFs IGV4cGVjdGF0aW9uIHRoYXQgbG9ncyBhIG1lc3NhZ2UgYW5kIGNhdXNlcyB0aGUgdGVzdCBjYXNl IHRvIGZhaWwuDQo+ICtJbiB0aGUgYWJvdmUgZXhhbXBsZSwgYGBleGFtcGxlX3Rlc3Rfc3VjY2Vz c2BgIGFsd2F5cyBwYXNzZXMgYmVjYXVzZSBpdCBkb2VzDQo+ICtub3RoaW5nOyBubyBleHBlY3Rh dGlvbnMgYXJlIHNldCwgYW5kIHRoZXJlZm9yZSBhbGwgZXhwZWN0YXRpb25zIHBhc3MuIE9uIHRo ZQ0KPiArb3RoZXIgaGFuZCBgYGV4YW1wbGVfdGVzdF9mYWlsdXJlYGAgYWx3YXlzIGZhaWxzIGJl Y2F1c2UgaXQgY2FsbHMgYGBLVU5JVF9GQUlMYGAsDQo+ICt3aGljaCBpcyBhIHNwZWNpYWwgZXhw ZWN0YXRpb24gdGhhdCBsb2dzIGEgbWVzc2FnZSBhbmQgY2F1c2VzIHRoZSB0ZXN0IGNhc2UgdG8N Cj4gK2ZhaWwuDQo+IA0KPiAgRXhwZWN0YXRpb25zDQo+ICB+fn5+fn5+fn5+fn4NCj4gLUFuICpl eHBlY3RhdGlvbiogaXMgYSB3YXkgdG8gc3BlY2lmeSB0aGF0IHlvdSBleHBlY3QgYSBwaWVjZSBv ZiBjb2RlIHRvIGRvDQo+IC1zb21ldGhpbmcgaW4gYSB0ZXN0LiBBbiBleHBlY3RhdGlvbiBpcyBj YWxsZWQgbGlrZSBhIGZ1bmN0aW9uLiBBIHRlc3QgaXMgbWFkZQ0KPiAtYnkgc2V0dGluZyBleHBl Y3RhdGlvbnMgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGllY2Ugb2YgY29kZSB1bmRlciB0ZXN0 OyB3aGVuDQo+IC1vbmUgb3IgbW9yZSBvZiB0aGUgZXhwZWN0YXRpb25zIGZhaWwsIHRoZSB0ZXN0 IGNhc2UgZmFpbHMgYW5kIGluZm9ybWF0aW9uIGFib3V0DQo+IC10aGUgZmFpbHVyZSBpcyBsb2dn ZWQuIEZvciBleGFtcGxlOg0KPiArQW4gKmV4cGVjdGF0aW9uKiBzcGVjaWZpZXMgdGhhdCB3ZSBl eHBlY3QgYSBwaWVjZSBvZiBjb2RlIHRvIGRvIHNvbWV0aGluZyBpbiBhDQo+ICt0ZXN0LiBBbiBl eHBlY3RhdGlvbiBpcyBjYWxsZWQgbGlrZSBhIGZ1bmN0aW9uLiBBIHRlc3QgaXMgbWFkZSBieSBz ZXR0aW5nDQo+ICtleHBlY3RhdGlvbnMgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGllY2Ugb2Yg Y29kZSB1bmRlciB0ZXN0LiBXaGVuIG9uZSBvciBtb3JlDQo+ICtleHBlY3RhdGlvbnMgZmFpbCwg dGhlIHRlc3QgY2FzZSBmYWlscyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhaWx1cmUgaXMN Cj4gK2xvZ2dlZC4gRm9yIGV4YW1wbGU6DQo+IA0KPiAgLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+ IEBAIC04NiwyOSArNDMsMjggQEAgdGhlIGZhaWx1cmUgaXMgbG9nZ2VkLiBGb3IgZXhhbXBsZToN Cj4gIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDIsIGFkZCgxLCAxKSk7DQo+ICAJfQ0KPiANCj4g LUluIHRoZSBhYm92ZSBleGFtcGxlIGBgYWRkX3Rlc3RfYmFzaWNgYCBtYWtlcyBhIG51bWJlciBv ZiBhc3NlcnRpb25zIGFib3V0IHRoZQ0KPiAtYmVoYXZpb3Igb2YgYSBmdW5jdGlvbiBjYWxsZWQg YGBhZGRgYDsgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhbHdheXMgb2YgdHlwZQ0KPiAtYGBzdHJ1 Y3Qga3VuaXQgKmBgLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVu dCB0ZXN0IGNvbnRleHQ7DQo+IC10aGUgc2Vjb25kIHBhcmFtZXRlciwgaW4gdGhpcyBjYXNlLCBp cyB3aGF0IHRoZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZTsgdGhlDQo+ICtJbiB0aGUgYWJvdmUg ZXhhbXBsZSwgYGBhZGRfdGVzdF9iYXNpY2BgIG1ha2VzIGEgbnVtYmVyIG9mIGFzc2VydGlvbnMg YWJvdXQgdGhlDQo+ICtiZWhhdmlvciBvZiBhIGZ1bmN0aW9uIGNhbGxlZCBgYGFkZGBgLiBUaGUg Zmlyc3QgcGFyYW1ldGVyIGlzIGFsd2F5cyBvZiB0eXBlDQo+ICtgYHN0cnVjdCBrdW5pdCAqYGAs IHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHRlc3QgY29udGV4 dC4NCj4gK1RoZSBzZWNvbmQgcGFyYW1ldGVyLCBpbiB0aGlzIGNhc2UsIGlzIHdoYXQgdGhlIHZh bHVlIGlzIGV4cGVjdGVkIHRvIGJlLiBUaGUNCj4gIGxhc3QgdmFsdWUgaXMgd2hhdCB0aGUgdmFs dWUgYWN0dWFsbHkgaXMuIElmIGBgYWRkYGAgcGFzc2VzIGFsbCBvZiB0aGVzZQ0KPiAgZXhwZWN0 YXRpb25zLCB0aGUgdGVzdCBjYXNlLCBgYGFkZF90ZXN0X2Jhc2ljYGAgd2lsbCBwYXNzOyBpZiBh bnkgb25lIG9mIHRoZXNlDQo+ICBleHBlY3RhdGlvbnMgZmFpbHMsIHRoZSB0ZXN0IGNhc2Ugd2ls bCBmYWlsLg0KPiANCj4gLUl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgYSB0ZXN0 IGNhc2UgKmZhaWxzKiB3aGVuIGFueSBleHBlY3RhdGlvbiBpcw0KPiAtdmlvbGF0ZWQ7IGhvd2V2 ZXIsIHRoZSB0ZXN0IHdpbGwgY29udGludWUgcnVubmluZywgcG90ZW50aWFsbHkgdHJ5aW5nIG90 aGVyDQo+IC1leHBlY3RhdGlvbnMgdW50aWwgdGhlIHRlc3QgY2FzZSBlbmRzIG9yIGlzIG90aGVy d2lzZSB0ZXJtaW5hdGVkLiBUaGlzIGlzIGFzDQo+IC1vcHBvc2VkIHRvICphc3NlcnRpb25zKiB3 aGljaCBhcmUgZGlzY3Vzc2VkIGxhdGVyLg0KPiArQSB0ZXN0IGNhc2UgKmZhaWxzKiB3aGVuIGFu eSBleHBlY3RhdGlvbiBpcyB2aW9sYXRlZDsgaG93ZXZlciwgdGhlIHRlc3Qgd2lsbA0KPiArY29u dGludWUgdG8gcnVuLCBhbmQgdHJ5IG90aGVyIGV4cGVjdGF0aW9ucyB1bnRpbCB0aGUgdGVzdCBj YXNlIGVuZHMgb3IgaXMNCj4gK290aGVyd2lzZSB0ZXJtaW5hdGVkLiBUaGlzIGlzIGFzIG9wcG9z ZWQgdG8gKmFzc2VydGlvbnMqIHdoaWNoIGFyZSBkaXNjdXNzZWQNCj4gK2xhdGVyLg0KPiANCj4g LVRvIGxlYXJuIGFib3V0IG1vcmUgZXhwZWN0YXRpb25zIHN1cHBvcnRlZCBieSBLVW5pdCwgc2Vl DQo+IC1Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QuDQo+ICtUbyBs ZWFybiBhYm91dCBtb3JlIEtVbml0IGV4cGVjdGF0aW9ucywgc2VlIERvY3VtZW50YXRpb24vZGV2 LXRvb2xzL2t1bml0L2FwaS90ZXN0LnJzdC4NCj4gDQo+ICAuLiBub3RlOjoNCj4gLSAgIEEgc2lu Z2xlIHRlc3QgY2FzZSBzaG91bGQgYmUgcHJldHR5IHNob3J0LCBwcmV0dHkgZWFzeSB0byB1bmRl cnN0YW5kLA0KPiAtICAgZm9jdXNlZCBvbiBhIHNpbmdsZSBiZWhhdmlvci4NCj4gKyAgIEEgc2lu Z2xlIHRlc3QgY2FzZSBzaG91bGQgYmUgc2hvcnQsIGVhc3kgdG8gdW5kZXJzdGFuZCwgYW5kIGZv Y3VzZWQgb24gYQ0KPiArICAgc2luZ2xlIGJlaGF2aW9yLg0KPiANCj4gLUZvciBleGFtcGxlLCBp ZiB3ZSB3YW50ZWQgdG8gcHJvcGVybHkgdGVzdCB0aGUgYWRkIGZ1bmN0aW9uIGFib3ZlLCB3ZSB3 b3VsZA0KPiAtY3JlYXRlIGFkZGl0aW9uYWwgdGVzdHMgY2FzZXMgd2hpY2ggd291bGQgZWFjaCB0 ZXN0IGEgZGlmZmVyZW50IHByb3BlcnR5IHRoYXQgYW4NCj4gLWFkZCBmdW5jdGlvbiBzaG91bGQg aGF2ZSBsaWtlIHRoaXM6DQo+ICtGb3IgZXhhbXBsZSwgaWYgd2Ugd2FudCB0byByaWdvcm91c2x5 IHRlc3QgdGhlIGBgYWRkYGAgZnVuY3Rpb24gYWJvdmUsIGNyZWF0ZQ0KPiArYWRkaXRpb25hbCB0 ZXN0cyBjYXNlcyB3aGljaCB3b3VsZCB0ZXN0IGVhY2ggcHJvcGVydHkgdGhhdCBhbiBgYGFkZGBg IGZ1bmN0aW9uDQo+ICtzaG91bGQgaGF2ZSBhcyBzaG93biBiZWxvdzoNCj4gDQo+ICAuLiBjb2Rl LWJsb2NrOjogYw0KPiANCj4gQEAgLTEzNCw1NiArOTAsNDMgQEAgYWRkIGZ1bmN0aW9uIHNob3Vs ZCBoYXZlIGxpa2UgdGhpczoNCj4gIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIElOVF9NSU4sIGFk ZChJTlRfTUFYLCAxKSk7DQo+ICAJfQ0KPiANCj4gLU5vdGljZSBob3cgaXQgaXMgaW1tZWRpYXRl bHkgb2J2aW91cyB3aGF0IGFsbCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIGFyZSB0ZXN0aW5nDQo+ IC1mb3IgYXJlLg0KPiAtDQo+ICBBc3NlcnRpb25zDQo+ICB+fn5+fn5+fn5+DQo+IA0KPiAtS1Vu aXQgYWxzbyBoYXMgdGhlIGNvbmNlcHQgb2YgYW4gKmFzc2VydGlvbiouIEFuIGFzc2VydGlvbiBp cyBqdXN0IGxpa2UgYW4NCj4gLWV4cGVjdGF0aW9uIGV4Y2VwdCB0aGUgYXNzZXJ0aW9uIGltbWVk aWF0ZWx5IHRlcm1pbmF0ZXMgdGhlIHRlc3QgY2FzZSBpZiBpdCBpcw0KPiAtbm90IHNhdGlzZmll ZC4NCj4gLQ0KPiAtRm9yIGV4YW1wbGU6DQo+ICtBbiBhc3NlcnRpb24gaXMgbGlrZSBhbiBleHBl Y3RhdGlvbiwgZXhjZXB0IHRoYXQgdGhlIGFzc2VydGlvbiBpbW1lZGlhdGVseQ0KPiArdGVybWlu YXRlcyB0aGUgdGVzdCBjYXNlIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IHNhdGlzZmllZC4gRm9y IGV4YW1wbGU6DQo+IA0KPiAgLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+IC0Jc3RhdGljIHZvaWQg bW9ja190ZXN0X2RvX2V4cGVjdF9kZWZhdWx0X3JldHVybihzdHJ1Y3Qga3VuaXQgKnRlc3QpDQo+ ICsJc3RhdGljIHZvaWQgdGVzdF9zb3J0KHN0cnVjdCBrdW5pdCAqdGVzdCkNCj4gIAl7DQo+IC0J CXN0cnVjdCBtb2NrX3Rlc3RfY29udGV4dCAqY3R4ID0gdGVzdC0+cHJpdjsNCj4gLQkJc3RydWN0 IG1vY2sgKm1vY2sgPSBjdHgtPm1vY2s7DQo+IC0JCWludCBwYXJhbTAgPSA1LCBwYXJhbTEgPSAt NTsNCj4gLQkJY29uc3QgY2hhciAqdHdvX3BhcmFtX3R5cGVzW10gPSB7ImludCIsICJpbnQifTsN Cj4gLQkJY29uc3Qgdm9pZCAqdHdvX3BhcmFtc1tdID0geyZwYXJhbTAsICZwYXJhbTF9Ow0KPiAt CQljb25zdCB2b2lkICpyZXQ7DQo+IC0NCj4gLQkJcmV0ID0gbW9jay0+ZG9fZXhwZWN0KG1vY2ss DQo+IC0JCQkJICAgICAgInRlc3RfcHJpbnRrIiwgdGVzdF9wcmludGssDQo+IC0JCQkJICAgICAg dHdvX3BhcmFtX3R5cGVzLCB0d29fcGFyYW1zLA0KPiAtCQkJCSAgICAgIEFSUkFZX1NJWkUodHdv X3BhcmFtcykpOw0KPiAtCQlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIHJldCk7 DQo+IC0JCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCAtNCwgKigoaW50ICopIHJldCkpOw0KPiArCQlp bnQgKmEsIGksIHIgPSAxOw0KPiArCQlhID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCBURVNU X0xFTiwgc2l6ZW9mKCphKSwgR0ZQX0tFUk5FTCk7DQo+ICsJCUtVTklUX0FTU0VSVF9OT1RfRVJS X09SX05VTEwodGVzdCwgYSk7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBURVNUX0xFTjsgaSsrKSB7 DQo+ICsJCQlyID0gKHIgKiA3MjU4NjEpICUgNjU5OTsNCj4gKwkJCWFbaV0gPSByOw0KPiArCQl9 DQo+ICsJCXNvcnQoYSwgVEVTVF9MRU4sIHNpemVvZigqYSksIGNtcGludCwgTlVMTCk7DQo+ICsJ CWZvciAoaSA9IDA7IGkgPCBURVNUX0xFTi0xOyBpKyspDQo+ICsJCQlLVU5JVF9FWFBFQ1RfTEUo dGVzdCwgYVtpXSwgYVtpICsgMV0pOw0KPiAgCX0NCj4gDQo+IC1JbiB0aGlzIGV4YW1wbGUsIHRo ZSBtZXRob2QgdW5kZXIgdGVzdCBzaG91bGQgcmV0dXJuIGEgcG9pbnRlciB0byBhIHZhbHVlLCBz bw0KPiAtaWYgdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG1ldGhvZCBpcyBudWxsIG9yIGFu IGVycm5vLCB3ZSBkb24ndCB3YW50IHRvDQo+IC1ib3RoZXIgY29udGludWluZyB0aGUgdGVzdCBz aW5jZSB0aGUgZm9sbG93aW5nIGV4cGVjdGF0aW9uIGNvdWxkIGNyYXNoIHRoZSB0ZXN0DQo+IC1j YXNlLiBgQVNTRVJUX05PVF9FUlJfT1JfTlVMTCguLi4pYCBhbGxvd3MgdXMgdG8gYmFpbCBvdXQg b2YgdGhlIHRlc3QgY2FzZSBpZg0KPiAtdGhlIGFwcHJvcHJpYXRlIGNvbmRpdGlvbnMgaGF2ZSBu b3QgYmVlbiBzYXRpc2ZpZWQgdG8gY29tcGxldGUgdGhlIHRlc3QuDQo+ICtJbiB0aGlzIGV4YW1w bGUsIHRoZSBtZXRob2QgdW5kZXIgdGVzdCBzaG91bGQgcmV0dXJuIHBvaW50ZXIgdG8gYSB2YWx1 ZS4gSWYgdGhlDQo+ICtwb2ludGVyIHJldHVybnMgbnVsbCBvciBhbiBlcnJubywgd2Ugd2FudCB0 byBzdG9wIHRoZSB0ZXN0IHNpbmNlIHRoZSBmb2xsb3dpbmcNCj4gK2V4cGVjdGF0aW9uIGNvdWxk IGNyYXNoIHRoZSB0ZXN0IGNhc2UuIGBBU1NFUlRfTk9UX0VSUl9PUl9OVUxMKC4uLilgIGFsbG93 cyB1cw0KPiArdG8gYmFpbCBvdXQgb2YgdGhlIHRlc3QgY2FzZSBpZiB0aGUgYXBwcm9wcmlhdGUg Y29uZGl0aW9ucyBhcmUgbm90IHNhdGlzZmllZCB0bw0KPiArY29tcGxldGUgdGhlIHRlc3QuDQo+ IA0KPiAgVGVzdCBTdWl0ZXMNCj4gIH5+fn5+fn5+fn5+DQo+IA0KPiAtTm93IG9idmlvdXNseSBv bmUgdW5pdCB0ZXN0IGlzbid0IHZlcnkgaGVscGZ1bDsgdGhlIHBvd2VyIGNvbWVzIGZyb20gaGF2 aW5nDQo+IC1tYW55IHRlc3QgY2FzZXMgY292ZXJpbmcgYWxsIG9mIGEgdW5pdCdzIGJlaGF2aW9y cy4gQ29uc2VxdWVudGx5IGl0IGlzIGNvbW1vbg0KPiAtdG8gaGF2ZSBtYW55ICpzaW1pbGFyKiB0 ZXN0czsgaW4gb3JkZXIgdG8gcmVkdWNlIGR1cGxpY2F0aW9uIGluIHRoZXNlIGNsb3NlbHkNCj4g LXJlbGF0ZWQgdGVzdHMgbW9zdCB1bml0IHRlc3RpbmcgZnJhbWV3b3JrcyAtIGluY2x1ZGluZyBL VW5pdCAtIHByb3ZpZGUgdGhlDQo+IC1jb25jZXB0IG9mIGEgKnRlc3Qgc3VpdGUqLiBBICp0ZXN0 IHN1aXRlKiBpcyBqdXN0IGEgY29sbGVjdGlvbiBvZiB0ZXN0IGNhc2VzDQo+IC1mb3IgYSB1bml0 IG9mIGNvZGUgd2l0aCBhIHNldCB1cCBmdW5jdGlvbiB0aGF0IGdldHMgaW52b2tlZCBiZWZvcmUg ZXZlcnkgdGVzdA0KPiAtY2FzZSBhbmQgdGhlbiBhIHRlYXIgZG93biBmdW5jdGlvbiB0aGF0IGdl dHMgaW52b2tlZCBhZnRlciBldmVyeSB0ZXN0IGNhc2UNCj4gLWNvbXBsZXRlcy4NCj4gLQ0KPiAt RXhhbXBsZToNCj4gK1dlIG5lZWQgbWFueSB0ZXN0IGNhc2VzIGNvdmVyaW5nIGFsbCB0aGUgdW5p dCdzIGJlaGF2aW9ycy4gSXQgaXMgY29tbW9uIHRvIGhhdmUNCj4gK21hbnkgc2ltaWxhciB0ZXN0 cy4gSW4gb3JkZXIgdG8gcmVkdWNlIGR1cGxpY2F0aW9uIGluIHRoZXNlIGNsb3NlbHkgcmVsYXRl ZA0KPiArdGVzdHMsIG1vc3QgdW5pdCB0ZXN0aW5nIGZyYW1ld29ya3MgKGluY2x1ZGluZyBLVW5p dCkgcHJvdmlkZSB0aGUgY29uY2VwdCBvZiBhDQo+ICsqdGVzdCBzdWl0ZSouIEEgdGVzdCBzdWl0 ZSBpcyBhIGNvbGxlY3Rpb24gb2YgdGVzdCBjYXNlcyBmb3IgYSB1bml0IG9mIGNvZGUNCj4gK3dp dGggYSBzZXR1cCBmdW5jdGlvbiB0aGF0IGdldHMgaW52b2tlZCBiZWZvcmUgZXZlcnkgdGVzdCBj YXNlIGFuZCB0aGVuIGEgdGVhcg0KPiArZG93biBmdW5jdGlvbiB0aGF0IGdldHMgaW52b2tlZCBh ZnRlciBldmVyeSB0ZXN0IGNhc2UgY29tcGxldGVzLiBGb3IgZXhhbXBsZToNCj4gDQo+ICAuLiBj b2RlLWJsb2NrOjogYw0KPiANCj4gQEAgLTIwMiwyMyArMTQ1LDQ4IEBAIEV4YW1wbGU6DQo+ICAJ fTsNCj4gIAlrdW5pdF90ZXN0X3N1aXRlKGV4YW1wbGVfdGVzdF9zdWl0ZSk7DQo+IA0KPiAtSW4g dGhlIGFib3ZlIGV4YW1wbGUgdGhlIHRlc3Qgc3VpdGUsIGBgZXhhbXBsZV90ZXN0X3N1aXRlYGAs IHdvdWxkIHJ1biB0aGUgdGVzdA0KPiAtY2FzZXMgYGBleGFtcGxlX3Rlc3RfZm9vYGAsIGBgZXhh bXBsZV90ZXN0X2JhcmBgLCBhbmQgYGBleGFtcGxlX3Rlc3RfYmF6YGA7DQo+IC1lYWNoIHdvdWxk IGhhdmUgYGBleGFtcGxlX3Rlc3RfaW5pdGBgIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgaXQg YW5kIHdvdWxkDQo+IC1oYXZlIGBgZXhhbXBsZV90ZXN0X2V4aXRgYCBjYWxsZWQgaW1tZWRpYXRl bHkgYWZ0ZXIgaXQuDQo+ICtJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIHRlc3Qgc3VpdGUgYGBl eGFtcGxlX3Rlc3Rfc3VpdGVgYCB3b3VsZCBydW4gdGhlIHRlc3QNCj4gK2Nhc2VzIGBgZXhhbXBs ZV90ZXN0X2Zvb2BgLCBgYGV4YW1wbGVfdGVzdF9iYXJgYCwgYW5kIGBgZXhhbXBsZV90ZXN0X2Jh emBgLiBFYWNoDQo+ICt3b3VsZCBoYXZlIGBgZXhhbXBsZV90ZXN0X2luaXRgYCBjYWxsZWQgaW1t ZWRpYXRlbHkgYmVmb3JlIGl0IGFuZA0KPiArYGBleGFtcGxlX3Rlc3RfZXhpdGBgIGNhbGxlZCBp bW1lZGlhdGVseSBhZnRlciBpdC4NCj4gIGBga3VuaXRfdGVzdF9zdWl0ZShleGFtcGxlX3Rlc3Rf c3VpdGUpYGAgcmVnaXN0ZXJzIHRoZSB0ZXN0IHN1aXRlIHdpdGggdGhlDQo+ICBLVW5pdCB0ZXN0 IGZyYW1ld29yay4NCj4gDQo+ICAuLiBub3RlOjoNCj4gLSAgIEEgdGVzdCBjYXNlIHdpbGwgb25s eSBiZSBydW4gaWYgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdGVzdCBzdWl0ZS4NCj4gKyAgIEEg dGVzdCBjYXNlIHdpbGwgb25seSBydW4gaWYgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdGVzdCBz dWl0ZS4NCj4gDQo+IC1gYGt1bml0X3Rlc3Rfc3VpdGUoLi4uKWBgIGlzIGEgbWFjcm8gd2hpY2gg dGVsbHMgdGhlIGxpbmtlciB0byBwdXQgdGhlIHNwZWNpZmllZA0KPiAtdGVzdCBzdWl0ZSBpbiBh IHNwZWNpYWwgbGlua2VyIHNlY3Rpb24gc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IEtVbml0IGVp dGhlcg0KPiAtYWZ0ZXIgbGF0ZV9pbml0LCBvciB3aGVuIHRoZSB0ZXN0IG1vZHVsZSBpcyBsb2Fk ZWQgKGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQ0KPiAtdGVzdCB3YXMgYnVpbHQgaW4gb3Igbm90 KS4NCj4gK2Bga3VuaXRfdGVzdF9zdWl0ZSguLi4pYGAgaXMgYSBtYWNybyB3aGljaCB0ZWxscyB0 aGUgbGlua2VyIHRvIHB1dCB0aGUNCj4gK3NwZWNpZmllZCB0ZXN0IHN1aXRlIGluIGEgc3BlY2lh bCBsaW5rZXIgc2VjdGlvbiBzbyB0aGF0IGl0IGNhbiBiZSBydW4gYnkgS1VuaXQNCj4gK2VpdGhl ciBhZnRlciBgYGxhdGVfaW5pdGBgLCBvciB3aGVuIHRoZSB0ZXN0IG1vZHVsZSBpcyBsb2FkZWQg KGlmIHRoZSB0ZXN0IHdhcw0KPiArYnVpbHQgYXMgYSBtb2R1bGUpLg0KPiANCj4gLUZvciBtb3Jl IGluZm9ybWF0aW9uIG9uIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBzZWUgdGhlDQo+IC1Eb2N1bWVu dGF0aW9uL2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QuDQo+ICtGb3IgbW9yZSBpbmZvcm1h dGlvbiwgc2VlIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS90ZXN0LnJzdC4NCj4g Kw0KPiArV3JpdGluZyBUZXN0cyBGb3IgT3RoZXIgQXJjaGl0ZWN0dXJlcw0KPiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArDQo+ICtBbHdheXMgcHJlZmVyIHRlc3Rz IHRoYXQgcnVuIG9uIFVNTCB0byB0ZXN0cyB0aGF0IG9ubHkgcnVuIHVuZGVyIGEgcGFydGljdWxh cg0KQWx3YXlzIHByZWZlciB0ZXN0cyAtPiBJdCBpcyBiZXR0ZXIgdG8gd3JpdGUgdGVzdHMNCg0K PiArYXJjaGl0ZWN0dXJlLiBJbiBhZGRpdGlvbiwgcHJlZmVyIHRlc3RzIHRoYXQgcnVuIHVuZGVy IFFFTVUgb3IgYW5vdGhlciBlYXN5DQpwcmVmZXIgdGVzdHMgLT4gaXQgaXMgYmV0dGVyIHRvIHdy aXRlIHRlc3RzDQoNCj4gKyhhbmQgbW9uZXRhcmlseSBmcmVlKSB0byBvYnRhaW4gc29mdHdhcmUg ZW52aXJvbm1lbnQgdG8gYSBzcGVjaWZpYyBwaWVjZSBvZg0KZWFzeSAoYW5kIG1vbmV0YXJpbHkg ZnJlZSkgdG8gb2J0YWluIHNvZnR3YXJlIGVudmlyb25tZW50IC0+DQogIGVhc3kgdG8gb2J0YWlu IChhbmQgbW9uZXRhcmlseSBmcmVlKSBzb2Z0d2FyZSBlbnZpcm9ubWVudA0KDQooaWUgLSB5b3Ug c2hvdWxkbid0IHNwbGl0IHVwICdlYXN5IHRvIG9idGFpbicpDQoNCmVudmlyb25tZW50IHRvIGEg c3BlY2lmaWMgLT4gcmF0aGVyIHRoYW4gdGVzdHMgdGhhdCByZXF1aXJlIGEgc3BlY2lmaWMNCg0K PiAraGFyZHdhcmUuDQo+ICsNCj4gK05ldmVydGhlbGVzcywgdGhlcmUgYXJlIHN0aWxsIHZhbGlk IHJlYXNvbnMgdG8gd3JpdGUgYW4gYXJjaGl0ZWN0dXJlIG9yDQoNCmFuIGFyY2hpdGVjdHVyZSBv ciBoYXJkd2FyZSBzcGVjaWZpYyB0ZXN0IC0+DQogIGEgdGVzdCB0aGF0IGlzIGFyY2hpdGVjdHVy ZSBvciBoYXJkd2FyZSBzcGVjaWZpYw0KDQo+ICtoYXJkd2FyZSBzcGVjaWZpYyB0ZXN0LiBGb3Ig ZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byB0ZXN0IGNvZGUgdGhhdCByZWFsbHkNCj4gK2JlbG9u Z3MgaW4gYGBhcmNoL3NvbWUtYXJjaC8qYGAuIEV2ZW4gc28sIHRyeSB0byB3cml0ZSB0aGUgdGVz dCBzbyB0aGF0IGl0IGRvZXMNCj4gK25vdCBkZXBlbmQgb24gcGh5c2ljYWwgaGFyZHdhcmUuIFNv bWUgb2Ygb3VyIHRlc3QgY2FzZXMgbWF5IG5vdCBuZWVkIGhhcmR3YXJlLA0KPiArb25seSBmZXcg dGVzdHMgYWN0dWFsbHkgcmVxdWlyZSB0aGUgaGFyZHdhcmUgdG8gdGVzdCBpdC4gV2hlbiBoYXJk d2FyZSBpcyBub3QNCj4gK2F2YWlsYWJsZSwgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGVzdHMsIHdl IGNhbiBza2lwIHRoZW0uDQo+ICsNCj4gK05vdyB0aGF0IHdlIGhhdmUgbmFycm93ZWQgZG93biBl eGFjdGx5IHdoYXQgYml0cyBhcmUgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZQ0KPiArYWN0dWFsIHBy b2NlZHVyZSBmb3Igd3JpdGluZyBhbmQgcnVubmluZyB0aGUgdGVzdHMgaXMgc2FtZSBhcyB3cml0 aW5nIG5vcm1hbA0KPiArS1VuaXQgdGVzdHMuDQo+ICsNCj4gKy4uIGltcG9ydGFudDo6DQo+ICsg ICBXZSBtYXkgaGF2ZSB0byByZXNldCBoYXJkd2FyZSBzdGF0ZS4gSWYgdGhpcyBpcyBub3QgcG9z c2libGUsIHdlIG1heSBvbmx5DQo+ICsgICBiZSBhYmxlIHRvIHJ1biBvbmUgdGVzdCBjYXNlIHBl ciBpbnZvY2F0aW9uLg0KPiArDQo+ICsuLiBUT0RPKGJyZW5kYW5oaWdnaW5zQGdvb2dsZS5jb20p OiBBZGQgYW4gYWN0dWFsIGV4YW1wbGUgb2YgYW4gYXJjaGl0ZWN0dXJlLQ0KPiArICAgZGVwZW5k ZW50IEtVbml0IHRlc3QuDQo+IA0KPiAgQ29tbW9uIFBhdHRlcm5zDQo+ICA9PT09PT09PT09PT09 PT0NCj4gQEAgLTIyNiw0MyArMTk0LDM5IEBAIENvbW1vbiBQYXR0ZXJucw0KPiAgSXNvbGF0aW5n IEJlaGF2aW9yDQo+ICAtLS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC1UaGUgbW9zdCBpbXBvcnRh bnQgYXNwZWN0IG9mIHVuaXQgdGVzdGluZyB0aGF0IG90aGVyIGZvcm1zIG9mIHRlc3RpbmcgZG8g bm90DQo+IC1wcm92aWRlIGlzIHRoZSBhYmlsaXR5IHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgY29k ZSB1bmRlciB0ZXN0IHRvIGEgc2luZ2xlIHVuaXQuDQo+IC1JbiBwcmFjdGljZSwgdGhpcyBpcyBv bmx5IHBvc3NpYmxlIGJ5IGJlaW5nIGFibGUgdG8gY29udHJvbCB3aGF0IGNvZGUgZ2V0cyBydW4N Cj4gLXdoZW4gdGhlIHVuaXQgdW5kZXIgdGVzdCBjYWxscyBhIGZ1bmN0aW9uIGFuZCB0aGlzIGlz IHVzdWFsbHkgYWNjb21wbGlzaGVkDQo+IC10aHJvdWdoIHNvbWUgc29ydCBvZiBpbmRpcmVjdGlv biB3aGVyZSBhIGZ1bmN0aW9uIGlzIGV4cG9zZWQgYXMgcGFydCBvZiBhbiBBUEkNCj4gLXN1Y2gg dGhhdCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGNhbiBiZSBjaGFuZ2VkIHdpdGhv dXQgYWZmZWN0aW5nIHRoZQ0KPiAtcmVzdCBvZiB0aGUgY29kZSBiYXNlLiBJbiB0aGUga2VybmVs IHRoaXMgcHJpbWFyaWx5IGNvbWVzIGZyb20gdHdvIGNvbnN0cnVjdHMsDQo+IC1jbGFzc2VzLCBz dHJ1Y3RzIHRoYXQgY29udGFpbiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGFyZSBwcm92aWRlZCBi eSB0aGUNCj4gLWltcGxlbWVudGVyLCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9u cyB3aGljaCBoYXZlIGRlZmluaXRpb25zIHNlbGVjdGVkDQo+IC1hdCBjb21waWxlIHRpbWUuDQo+ ICtVbml0IHRlc3RpbmcgbGltaXRzIHRoZSBhbW91bnQgb2YgY29kZSB1bmRlciB0ZXN0IHRvIGEg c2luZ2xlIHVuaXQuIEl0IGNvbnRyb2xzDQo+ICt3aGF0IGNvZGUgZ2V0cyBydW4gd2hlbiB0aGUg dW5pdCB1bmRlciB0ZXN0IGNhbGxzIGEgZnVuY3Rpb24uIFdoZXJlIGEgZnVuY3Rpb24NCj4gK2lz IGV4cG9zZWQgYXMgcGFydCBvZiBhbiBBUEkgc3VjaCB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIHRo YXQgZnVuY3Rpb24gY2FuIGJlDQo+ICtjaGFuZ2VkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSByZXN0 IG9mIHRoZSBjb2RlIGJhc2UuIEluIHRoZSBrZXJuZWwsIHRoaXMgY29tZXMNCj4gK2Zyb20gdHdv IGNvbnN0cnVjdHM6IGNsYXNzZXMsIHN0cnVjdHMuIHRoYXQgY29udGFpbiBmdW5jdGlvbiBwb2lu dGVycyBwcm92aWRlZA0KDQo/Pz8gSSBjb3VsZG4ndCBwYXJzZSB0aGlzLg0KDQpjbGFzc2VzLCBz dHJ1Y3RzLiB0aGF0IGNvbnRhaW4gLT4NCiAgIGNsYXNzZXMsIHdoaWNoIGFyZSBzdHJ1Y3RzIHRo YXQgY29udGFpbg0KDQo+ICtieSB0aGUgaW1wbGVtZW50ZXIgYW5kIGFyY2hpdGVjdHVyZSBzcGVj aWZpYyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkZWZpbml0aW9ucw0KDQpieSB0aGUgaW1wbGVtZW50 ZXIgYW5kIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSAtPg0KICBi eSB0aGUgaW1wbGVtZW50ZXIsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zLCB3 aGljaCBoYXZlDQoNCj4gK3NlbGVjdGVkIGF0IGNvbXBpbGUgdGltZS4NCg0KSSdtIG5vdCBzdXJl IGlmIHRoZSBzZWNvbmQgY29tbWEgaXMgbmVlZGVkLiAgSXQgZGVwZW5kcyBvbiB3aGV0aGVyIHRo ZSBjbGF1c2UNCid3aGljaCBoYXZlIGRlZmluaXRpb25zIHNlbGVjdGVkIGF0IGNvbXBpbGUgdGlt ZScgaXMgaW50ZW5kZWQgdG8gZGVzY3JpYmUgdGhlDQphcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVu Y3Rpb25zLCBvciBjb25zdHJhaW4gdGhlbS4NCg0KPiANCj4gIENsYXNzZXMNCj4gIH5+fn5+fn4N Cj4gDQo+ICBDbGFzc2VzIGFyZSBub3QgYSBjb25zdHJ1Y3QgdGhhdCBpcyBidWlsdCBpbnRvIHRo ZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlOw0KPiAtaG93ZXZlciwgaXQgaXMgYW4gZWFzaWx5IGRl cml2ZWQgY29uY2VwdC4gQWNjb3JkaW5nbHksIHByZXR0eSBtdWNoIGV2ZXJ5IHByb2plY3QNCj4g LXRoYXQgZG9lcyBub3QgdXNlIGEgc3RhbmRhcmRpemVkIG9iamVjdCBvcmllbnRlZCBsaWJyYXJ5 IChsaWtlIEdOT01FJ3MgR09iamVjdCkNCj4gLWhhcyB0aGVpciBvd24gc2xpZ2h0bHkgZGlmZmVy ZW50IHdheSBvZiBkb2luZyBvYmplY3Qgb3JpZW50ZWQgcHJvZ3JhbW1pbmc7IHRoZQ0KPiAtTGlu dXgga2VybmVsIGlzIG5vIGV4Y2VwdGlvbi4NCj4gK2hvd2V2ZXIsIGl0IGlzIGFuIGVhc2lseSBk ZXJpdmVkIGNvbmNlcHQuIEFjY29yZGluZ2x5LCBpbiBtb3N0IGNhc2VzLCBldmVyeQ0KPiArcHJv amVjdCB0aGF0IGRvZXMgbm90IHVzZSBhIHN0YW5kYXJkaXplZCBvYmplY3Qgb3JpZW50ZWQgbGli cmFyeSAobGlrZSBHTk9NRSdzDQo+ICtHT2JqZWN0KSBoYXMgdGhlaXIgb3duIHNsaWdodGx5IGRp ZmZlcmVudCB3YXkgb2YgZG9pbmcgb2JqZWN0IG9yaWVudGVkDQo+ICtwcm9ncmFtbWluZzsgdGhl IExpbnV4IGtlcm5lbCBpcyBubyBleGNlcHRpb24uDQo+IA0KPiAgVGhlIGNlbnRyYWwgY29uY2Vw dCBpbiBrZXJuZWwgb2JqZWN0IG9yaWVudGVkIHByb2dyYW1taW5nIGlzIHRoZSBjbGFzcy4gSW4g dGhlDQo+ICBrZXJuZWwsIGEgKmNsYXNzKiBpcyBhIHN0cnVjdCB0aGF0IGNvbnRhaW5zIGZ1bmN0 aW9uIHBvaW50ZXJzLiBUaGlzIGNyZWF0ZXMgYQ0KPiAgY29udHJhY3QgYmV0d2VlbiAqaW1wbGVt ZW50ZXJzKiBhbmQgKnVzZXJzKiBzaW5jZSBpdCBmb3JjZXMgdGhlbSB0byB1c2UgdGhlDQo+IC1z YW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSB3aXRob3V0IGhhdmluZyB0byBjYWxsIHRoZSBmdW5jdGlv biBkaXJlY3RseS4gSW4gb3JkZXINCj4gLWZvciBpdCB0byB0cnVseSBiZSBhIGNsYXNzLCB0aGUg ZnVuY3Rpb24gcG9pbnRlcnMgbXVzdCBzcGVjaWZ5IHRoYXQgYSBwb2ludGVyDQo+IC10byB0aGUg Y2xhc3MsIGtub3duIGFzIGEgKmNsYXNzIGhhbmRsZSosIGJlIG9uZSBvZiB0aGUgcGFyYW1ldGVy czsgdGhpcyBtYWtlcw0KPiAtaXQgcG9zc2libGUgZm9yIHRoZSBtZW1iZXIgZnVuY3Rpb25zIChh bHNvIGtub3duIGFzICptZXRob2RzKikgdG8gaGF2ZSBhY2Nlc3MNCj4gLXRvIG1lbWJlciB2YXJp YWJsZXMgKG1vcmUgY29tbW9ubHkga25vd24gYXMgKmZpZWxkcyopIGFsbG93aW5nIHRoZSBzYW1l DQo+IC1pbXBsZW1lbnRhdGlvbiB0byBoYXZlIG11bHRpcGxlICppbnN0YW5jZXMqLg0KPiAtDQo+ IC1UeXBpY2FsbHkgYSBjbGFzcyBjYW4gYmUgKm92ZXJyaWRkZW4qIGJ5ICpjaGlsZCBjbGFzc2Vz KiBieSBlbWJlZGRpbmcgdGhlDQo+IC0qcGFyZW50IGNsYXNzKiBpbiB0aGUgY2hpbGQgY2xhc3Mu IFRoZW4gd2hlbiBhIG1ldGhvZCBwcm92aWRlZCBieSB0aGUgY2hpbGQNCj4gLWNsYXNzIGlzIGNh bGxlZCwgdGhlIGNoaWxkIGltcGxlbWVudGF0aW9uIGtub3dzIHRoYXQgdGhlIHBvaW50ZXIgcGFz c2VkIHRvIGl0IGlzDQo+IC1vZiBhIHBhcmVudCBjb250YWluZWQgd2l0aGluIHRoZSBjaGlsZDsg YmVjYXVzZSBvZiB0aGlzLCB0aGUgY2hpbGQgY2FuIGNvbXB1dGUNCj4gLXRoZSBwb2ludGVyIHRv IGl0c2VsZiBiZWNhdXNlIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgaXMgYWx3YXlzIGEgZml4 ZWQgb2Zmc2V0DQo+IC1mcm9tIHRoZSBwb2ludGVyIHRvIHRoZSBjaGlsZDsgdGhpcyBvZmZzZXQg aXMgdGhlIG9mZnNldCBvZiB0aGUgcGFyZW50IGNvbnRhaW5lZA0KPiAtaW4gdGhlIGNoaWxkIHN0 cnVjdC4gRm9yIGV4YW1wbGU6DQo+ICtzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSB3aXRob3V0IGhh dmluZyB0byBjYWxsIHRoZSBmdW5jdGlvbiBkaXJlY3RseS4gVG8gYmUgYQ0KPiArY2xhc3MsIHRo ZSBmdW5jdGlvbiBwb2ludGVycyBtdXN0IHNwZWNpZnkgdGhhdCBhIHBvaW50ZXIgdG8gdGhlIGNs YXNzLCBrbm93biBhcw0KPiArYSAqY2xhc3MgaGFuZGxlKiwgYmUgb25lIG9mIHRoZSBwYXJhbWV0 ZXJzLiBUaHVzIHRoZSBtZW1iZXIgZnVuY3Rpb25zIChhbHNvDQo+ICtrbm93biBhcyAqbWV0aG9k cyopIGhhdmUgYWNjZXNzIHRvIG1lbWJlciB2YXJpYWJsZXMgKGFsc28ga25vd24gYXMgKmZpZWxk cyopDQo+ICthbGxvd2luZyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiB0byBoYXZlIG11bHRpcGxl ICppbnN0YW5jZXMqLg0KPiArDQo+ICtBIGNsYXNzIGNhbiBiZSAqb3ZlcnJpZGRlbiogYnkgKmNo aWxkIGNsYXNzZXMqIGJ5IGVtYmVkZGluZyB0aGUgKnBhcmVudCBjbGFzcyoNCj4gK2luIHRoZSBj aGlsZCBjbGFzcy4gVGhlbiB3aGVuIHRoZSBjaGlsZCBjbGFzcyAqbWV0aG9kKiBpcyBjYWxsZWQs IHRoZSBjaGlsZA0KPiAraW1wbGVtZW50YXRpb24ga25vd3MgdGhhdCB0aGUgcG9pbnRlciBwYXNz ZWQgdG8gaXQgaXMgb2YgYSBwYXJlbnQgY29udGFpbmVkDQo+ICt3aXRoaW4gdGhlIGNoaWxkLiBU aHVzLCB0aGUgY2hpbGQgY2FuIGNvbXB1dGUgdGhlIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2Ug dGhlDQo+ICtwb2ludGVyIHRvIHRoZSBwYXJlbnQgaXMgYWx3YXlzIGEgZml4ZWQgb2Zmc2V0IGZy b20gdGhlIHBvaW50ZXIgdG8gdGhlIGNoaWxkLg0KPiArVGhpcyBvZmZzZXQgaXMgdGhlIG9mZnNl dCBvZiB0aGUgcGFyZW50IGNvbnRhaW5lZCBpbiB0aGUgY2hpbGQgc3RydWN0LiBGb3INCj4gK2V4 YW1wbGU6DQo+IA0KPiAgLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+IEBAIC0yOTAsOCArMjU0LDgg QEAgaW4gdGhlIGNoaWxkIHN0cnVjdC4gRm9yIGV4YW1wbGU6DQo+ICAJCXNlbGYtPndpZHRoID0g d2lkdGg7DQo+ICAJfQ0KPiANCj4gLUluIHRoaXMgZXhhbXBsZSAoYXMgaW4gbW9zdCBrZXJuZWwg Y29kZSkgdGhlIG9wZXJhdGlvbiBvZiBjb21wdXRpbmcgdGhlIHBvaW50ZXINCj4gLXRvIHRoZSBj aGlsZCBmcm9tIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgaXMgZG9uZSBieSBgYGNvbnRhaW5l cl9vZmBgLg0KPiArSW4gdGhpcyBleGFtcGxlLCBjb21wdXRpbmcgdGhlIHBvaW50ZXIgdG8gdGhl IGNoaWxkIGZyb20gdGhlIHBvaW50ZXIgdG8gdGhlDQo+ICtwYXJlbnQgaXMgZG9uZSBieSBgYGNv bnRhaW5lcl9vZmBgLg0KPiANCj4gIEZha2luZyBDbGFzc2VzDQo+ICB+fn5+fn5+fn5+fn5+fg0K PiBAQCAtMzAwLDE0ICsyNjQsMTEgQEAgSW4gb3JkZXIgdG8gdW5pdCB0ZXN0IGEgcGllY2Ugb2Yg Y29kZSB0aGF0IGNhbGxzIGEgbWV0aG9kIGluIGEgY2xhc3MsIHRoZQ0KPiAgYmVoYXZpb3Igb2Yg dGhlIG1ldGhvZCBtdXN0IGJlIGNvbnRyb2xsYWJsZSwgb3RoZXJ3aXNlIHRoZSB0ZXN0IGNlYXNl cyB0byBiZSBhDQo+ICB1bml0IHRlc3QgYW5kIGJlY29tZXMgYW4gaW50ZWdyYXRpb24gdGVzdC4N Cj4gDQo+IC1BIGZha2UganVzdCBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHBpZWNl IG9mIGNvZGUgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbg0KPiAtd2hhdCBydW5zIGluIGEgcHJvZHVj dGlvbiBpbnN0YW5jZSwgYnV0IGJlaGF2ZXMgaWRlbnRpY2FsbHkgZnJvbSB0aGUgc3RhbmRwb2lu dA0KPiAtb2YgdGhlIGNhbGxlcnM7IHRoaXMgaXMgdXN1YWxseSBkb25lIHRvIHJlcGxhY2UgYSBk ZXBlbmRlbmN5IHRoYXQgaXMgaGFyZCB0bw0KPiAtZGVhbCB3aXRoLCBvciBpcyBzbG93Lg0KPiAt DQo+IC1BIGdvb2QgZXhhbXBsZSBmb3IgdGhpcyBtaWdodCBiZSBpbXBsZW1lbnRpbmcgYSBmYWtl IEVFUFJPTSB0aGF0IGp1c3Qgc3RvcmVzIHRoZQ0KPiAtImNvbnRlbnRzIiBpbiBhbiBpbnRlcm5h bCBidWZmZXIuIEZvciBleGFtcGxlLCBsZXQncyBhc3N1bWUgd2UgaGF2ZSBhIGNsYXNzIHRoYXQN Cj4gLXJlcHJlc2VudHMgYW4gRUVQUk9NOg0KPiArQSBmYWtlIGNsYXNzIGltcGxlbWVudHMgYSBw aWVjZSBvZiBjb2RlIHRoYXQgaXMgZGlmZmVyZW50IHRoYW4gd2hhdCBydW5zIGluIGENCj4gK3By b2R1Y3Rpb24gaW5zdGFuY2UsIGJ1dCBiZWhhdmVzIGlkZW50aWNhbCBmcm9tIHRoZSBzdGFuZHBv aW50IG9mIHRoZSBjYWxsZXJzLg0KPiArVGhpcyBpcyBkb25lIHRvIHJlcGxhY2UgYSBkZXBlbmRl bmN5IHRoYXQgaXMgaGFyZCB0byBkZWFsIHdpdGgsIG9yIGlzIHNsb3cuIEZvcg0KPiArZXhhbXBs ZSwgaW1wbGVtZW50aW5nIGEgZmFrZSBFRVBST00gdGhhdCBzdG9yZXMgdGhlICJjb250ZW50cyIg aW4gYW4NCj4gK2ludGVybmFsIGJ1ZmZlci4gQXNzdW1lIHdlIGhhdmUgYSBjbGFzcyB0aGF0IHJl cHJlc2VudHMgYW4gRUVQUk9NOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiBAQCAt MzE2LDcgKzI3Nyw3IEBAIHJlcHJlc2VudHMgYW4gRUVQUk9NOg0KPiAgCQlzc2l6ZV90ICgqd3Jp dGUpKHN0cnVjdCBlZXByb20gKnRoaXMsIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKmJ1ZmZl ciwgc2l6ZV90IGNvdW50KTsNCj4gIAl9Ow0KPiANCj4gLUFuZCB3ZSB3YW50IHRvIHRlc3Qgc29t ZSBjb2RlIHRoYXQgYnVmZmVycyB3cml0ZXMgdG8gdGhlIEVFUFJPTToNCj4gK1dlIHdhbnQgdG8g dGVzdCBjb2RlIHRoYXQgYnVmZmVycyB3cml0ZXMgdG8gdGhlIEVFUFJPTToNCg0KV2UgLT4gQW5k IHdlDQoNCihQbGVhc2UgbGVhdmUgdGhlICdhbmQnKQ0KDQo+IA0KPiAgLi4gY29kZS1ibG9jazo6 IGMNCj4gDQo+IEBAIC0zMjksNyArMjkwLDcgQEAgQW5kIHdlIHdhbnQgdG8gdGVzdCBzb21lIGNv ZGUgdGhhdCBidWZmZXJzIHdyaXRlcyB0byB0aGUgRUVQUk9NOg0KPiAgCXN0cnVjdCBlZXByb21f YnVmZmVyICpuZXdfZWVwcm9tX2J1ZmZlcihzdHJ1Y3QgZWVwcm9tICplZXByb20pOw0KPiAgCXZv aWQgZGVzdHJveV9lZXByb21fYnVmZmVyKHN0cnVjdCBlZXByb20gKmVlcHJvbSk7DQo+IA0KPiAt V2UgY2FuIGVhc2lseSB0ZXN0IHRoaXMgY29kZSBieSAqZmFraW5nIG91dCogdGhlIHVuZGVybHlp bmcgRUVQUk9NOg0KPiArV2UgY2FuIHRlc3QgdGhpcyBjb2RlIGJ5ICpmYWtpbmcgb3V0KiB0aGUg dW5kZXJseWluZyBFRVBST006DQo+IA0KPiAgLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+IEBAIC00 NTYsMTQgKzQxNywxNCBAQCBXZSBjYW4gbm93IHVzZSBpdCB0byB0ZXN0IGBgc3RydWN0IGVlcHJv bV9idWZmZXJgYDoNCj4gIAkJZGVzdHJveV9lZXByb21fYnVmZmVyKGN0eC0+ZWVwcm9tX2J1ZmZl cik7DQo+ICAJfQ0KPiANCj4gLVRlc3RpbmcgYWdhaW5zdCBtdWx0aXBsZSBpbnB1dHMNCj4gK1Rl c3RpbmcgQWdhaW5zdCBNdWx0aXBsZSBJbnB1dHMNCj4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCj4gDQo+IC1UZXN0aW5nIGp1c3QgYSBmZXcgaW5wdXRzIG1pZ2h0IG5vdCBiZSBl bm91Z2ggdG8gaGF2ZSBjb25maWRlbmNlIHRoYXQgdGhlIGNvZGUNCj4gLXdvcmtzIGNvcnJlY3Rs eSwgZS5nLiBmb3IgYSBoYXNoIGZ1bmN0aW9uLg0KPiArVGVzdGluZyBqdXN0IGEgZmV3IGlucHV0 cyBpcyBub3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIHdvcmtzIGNvcnJlY3RseSwN Cj4gK2ZvciBleGFtcGxlOiB0ZXN0aW5nIGEgaGFzaCBmdW5jdGlvbi4NCj4gDQo+IC1JbiBzdWNo IGNhc2VzLCBpdCBjYW4gYmUgaGVscGZ1bCB0byBoYXZlIGEgaGVscGVyIG1hY3JvIG9yIGZ1bmN0 aW9uLCBlLmcuIHRoaXMNCj4gLWZpY3RpdGlvdXMgZXhhbXBsZSBmb3IgYGBzaGExc3VtKDEpYGAN Cj4gK1dlIGNhbiB3cml0ZSBhIGhlbHBlciBtYWNybyBvciBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9u IGlzIGNhbGxlZCBmb3IgZWFjaCBpbnB1dC4NCj4gK0ZvciBleGFtcGxlLCB0byB0ZXN0IGBgc2hh MXN1bSgxKWBgLCB3ZSBjYW4gd3JpdGU6DQo+IA0KPiAgLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+ IEBAIC00NzUsMTYgKzQzNiwxNSBAQCBmaWN0aXRpb3VzIGV4YW1wbGUgZm9yIGBgc2hhMXN1bSgx KWBgDQo+ICAJVEVTVF9TSEExKCJoZWxsbyB3b3JsZCIsICAiMmFhZTZjMzVjOTRmY2ZiNDE1ZGJl OTVmNDA4YjljZTkxZWU4NDZlZCIpOw0KPiAgCVRFU1RfU0hBMSgiaGVsbG8gd29ybGQhIiwgIjQz MGNlMzRkMDIwNzI0ZWQ3NWExOTZkZmMyYWQ2N2M3Nzc3MmQxNjkiKTsNCj4gDQo+ICtOb3RlIHRo ZSB1c2Ugb2YgdGhlIGBgX01TR2BgIHZlcnNpb24gb2YgYGBLVU5JVF9FWFBFQ1RfU1RSRVFgYCB0 byBwcmludCBhIG1vcmUNCj4gK2RldGFpbGVkIGVycm9yIGFuZCBtYWtlIHRoZSBhc3NlcnRpb25z IGNsZWFyZXIgd2l0aGluIHRoZSBoZWxwZXIgbWFjcm9zLg0KPiANCj4gLU5vdGUgdGhlIHVzZSBv ZiBgYEtVTklUX0VYUEVDVF9TVFJFUV9NU0dgYCB0byBnaXZlIG1vcmUgY29udGV4dCB3aGVuIGl0 IGZhaWxzDQo+IC1hbmQgbWFrZSBpdCBlYXNpZXIgdG8gdHJhY2sgZG93bi4gKFllcywgaW4gdGhp cyBleGFtcGxlLCBgYHdhbnRgYCBpcyBsaWtlbHkNCj4gLWdvaW5nIHRvIGJlIHVuaXF1ZSBlbm91 Z2ggb24gaXRzIG93bikuDQo+ICtUaGUgYGBfTVNHYGAgdmFyaWFudHMgYXJlIHVzZWZ1bCB3aGVu IHRoZSBzYW1lIGV4cGVjdGF0aW9uIGlzIGNhbGxlZCBtdWx0aXBsZQ0KPiArdGltZXMgKGluIGEg bG9vcCBvciBoZWxwZXIgZnVuY3Rpb24pIGFuZCB0aHVzIHRoZSBsaW5lIG51bWJlciBpcyBub3Qg ZW5vdWdoIHRvDQo+ICtpZGVudGlmeSB3aGF0IGZhaWxlZCwgYXMgc2hvd24gYmVsb3cuDQo+IA0K PiAtVGhlIGBgX01TR2BgIHZhcmlhbnRzIGFyZSBldmVuIG1vcmUgdXNlZnVsIHdoZW4gdGhlIHNh bWUgZXhwZWN0YXRpb24gaXMgY2FsbGVkDQo+IC1tdWx0aXBsZSB0aW1lcyAoaW4gYSBsb29wIG9y IGhlbHBlciBmdW5jdGlvbikgYW5kIHRodXMgdGhlIGxpbmUgbnVtYmVyIGlzbid0DQo+IC1lbm91 Z2ggdG8gaWRlbnRpZnkgd2hhdCBmYWlsZWQsIGxpa2UgYmVsb3cuDQo+IC0NCj4gLUluIHNvbWUg Y2FzZXMsIGl0IGNhbiBiZSBoZWxwZnVsIHRvIHdyaXRlIGEgKnRhYmxlLWRyaXZlbiB0ZXN0KiBp bnN0ZWFkLCBlLmcuDQo+ICtJbiBjb21wbGljYXRlZCBjYXNlcywgd2UgcmVjb21tZW5kIHVzaW5n IGEgKnRhYmxlLWRyaXZlbiB0ZXN0KiBjb21wYXJlZCB0byB0aGUNCj4gK2hlbHBlciBtYWNybyB2 YXJpYXRpb24sIGZvciBleGFtcGxlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiBA QCAtNTEzLDE3ICs0NzMsMTggQEAgSW4gc29tZSBjYXNlcywgaXQgY2FuIGJlIGhlbHBmdWwgdG8g d3JpdGUgYSAqdGFibGUtZHJpdmVuIHRlc3QqIGluc3RlYWQsIGUuZy4NCj4gIAl9DQo+IA0KPiAN Cj4gLVRoZXJlJ3MgbW9yZSBib2lsZXJwbGF0ZSBpbnZvbHZlZCwgYnV0IGl0IGNhbjoNCj4gK1Ro ZXJlIGlzIG1vcmUgYm9pbGVycGxhdGUgY29kZSBpbnZvbHZlZCwgYnV0IGl0IGNhbjoNCj4gKw0K PiArKiBiZSBtb3JlIHJlYWRhYmxlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGlucHV0cy9vdXRw dXRzIChkdWUgdG8gZmllbGQgbmFtZXMpLg0KPiANCj4gLSogYmUgbW9yZSByZWFkYWJsZSB3aGVu IHRoZXJlIGFyZSBtdWx0aXBsZSBpbnB1dHMvb3V0cHV0cyB0aGFua3MgdG8gZmllbGQgbmFtZXMs DQo+ICsgICogRm9yIGV4YW1wbGUsIHNlZSBgYGZzL2V4dDQvaW5vZGUtdGVzdC5jYGAuDQo+IA0K PiAtICAqIEUuZy4gc2VlIGBgZnMvZXh0NC9pbm9kZS10ZXN0LmNgYCBmb3IgYW4gZXhhbXBsZSBv ZiBib3RoLg0KPiAtKiByZWR1Y2UgZHVwbGljYXRpb24gaWYgdGVzdCBjYXNlcyBjYW4gYmUgc2hh cmVkIGFjcm9zcyBtdWx0aXBsZSB0ZXN0cy4NCj4gKyogcmVkdWNlIGR1cGxpY2F0aW9uIGlmIHRl c3QgY2FzZXMgYXJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGVzdHMuDQo+IA0KPiAtICAqIEUu Zy4gaWYgd2Ugd2FudGVkIHRvIGFsc28gdGVzdCBgYHNoYTI1NnN1bWBgLCB3ZSBjb3VsZCBhZGQg YSBgYHNoYTI1NmBgDQo+ICsgICogRm9yIGV4YW1wbGU6IGlmIHdlIHdhbnQgdG8gdGVzdCBgYHNo YTI1NnN1bWBgLCB3ZSBjb3VsZCBhZGQgYSBgYHNoYTI1NmBgDQo+ICAgICAgZmllbGQgYW5kIHJl dXNlIGBgY2FzZXNgYC4NCj4gDQo+IC0qIGJlIGNvbnZlcnRlZCB0byBhICJwYXJhbWV0ZXJpemVk IHRlc3QiLCBzZWUgYmVsb3cuDQo+ICsqIGJlIGNvbnZlcnRlZCB0byBhICJwYXJhbWV0ZXJpemVk IHRlc3QiLg0KPiANCj4gIFBhcmFtZXRlcml6ZWQgVGVzdGluZw0KPiAgfn5+fn5+fn5+fn5+fn5+ fn5+fn5+DQo+IEBAIC01MzEsNyArNDkyLDcgQEAgUGFyYW1ldGVyaXplZCBUZXN0aW5nDQo+ICBU aGUgdGFibGUtZHJpdmVuIHRlc3RpbmcgcGF0dGVybiBpcyBjb21tb24gZW5vdWdoIHRoYXQgS1Vu aXQgaGFzIHNwZWNpYWwNCj4gIHN1cHBvcnQgZm9yIGl0Lg0KPiANCj4gLVJldXNpbmcgdGhlIHNh bWUgYGBjYXNlc2BgIGFycmF5IGZyb20gYWJvdmUsIHdlIGNhbiB3cml0ZSB0aGUgdGVzdCBhcyBh DQo+ICtCeSByZXVzaW5nIHRoZSBzYW1lIGBgY2FzZXNgYCBhcnJheSBmcm9tIGFib3ZlLCB3ZSBj YW4gd3JpdGUgdGhlIHRlc3QgYXMgYQ0KPiAgInBhcmFtZXRlcml6ZWQgdGVzdCIgd2l0aCB0aGUg Zm9sbG93aW5nLg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IEBAIC01ODIsMTkzICs1NDMs MTUyIEBAIFJldXNpbmcgdGhlIHNhbWUgYGBjYXNlc2BgIGFycmF5IGZyb20gYWJvdmUsIHdlIGNh biB3cml0ZSB0aGUgdGVzdCBhcyBhDQo+IA0KPiAgLi4gX2t1bml0LW9uLW5vbi11bWw6DQo+IA0K PiAtS1VuaXQgb24gbm9uLVVNTCBhcmNoaXRlY3R1cmVzDQo+IC09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCj4gLQ0KPiAtQnkgZGVmYXVsdCBLVW5pdCB1c2VzIFVNTCBhcyBhIHdheSB0 byBwcm92aWRlIGRlcGVuZGVuY2llcyBmb3IgY29kZSB1bmRlciB0ZXN0Lg0KPiAtVW5kZXIgbW9z dCBjaXJjdW1zdGFuY2VzIEtVbml0J3MgdXNhZ2Ugb2YgVU1MIHNob3VsZCBiZSB0cmVhdGVkIGFz IGFuDQo+IC1pbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgaG93IEtVbml0IHdvcmtzIHVuZGVyIHRo ZSBob29kLiBOZXZlcnRoZWxlc3MsIHRoZXJlDQo+IC1hcmUgaW5zdGFuY2VzIHdoZXJlIGJlaW5n IGFibGUgdG8gcnVuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIG9yIHRlc3QNCj4gLWFnYWlu c3QgcmVhbCBoYXJkd2FyZSBpcyBkZXNpcmFibGUuIEZvciB0aGVzZSByZWFzb25zIEtVbml0IHN1 cHBvcnRzIHJ1bm5pbmcgb24NCj4gLW90aGVyIGFyY2hpdGVjdHVyZXMuDQo+IC0NCj4gLVJ1bm5p bmcgZXhpc3RpbmcgS1VuaXQgdGVzdHMgb24gbm9uLVVNTCBhcmNoaXRlY3R1cmVzDQo+IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArRXhp dGluZyBFYXJseSBvbiBGYWlsZWQgRXhwZWN0YXRpb25zDQo+ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC1UaGVyZSBhcmUgc29tZSBzcGVjaWFsIGNvbnNpZGVy YXRpb25zIHdoZW4gcnVubmluZyBleGlzdGluZyBLVW5pdCB0ZXN0cyBvbg0KPiAtbm9uLVVNTCBh cmNoaXRlY3R1cmVzOg0KPiArV2UgY2FuIHVzZSBgYEtVTklUX0VYUEVDVF9FUWBgIHRvIG1hcmsg dGhlIHRlc3QgYXMgZmFpbGVkIGFuZCBjb250aW51ZQ0KPiArZXhlY3V0aW9uLiAgSW4gc29tZSBj YXNlcywgaXQgaXMgdW5zYWZlIHRvIGNvbnRpbnVlLiBXZSBjYW4gdXNlIHRoZQ0KPiArYGBLVU5J VF9BU1NFUlRgYCB2YXJpYW50IHRvIGV4aXQgb24gZmFpbHVyZS4NCj4gDQo+IC0qICAgSGFyZHdh cmUgbWF5IG5vdCBiZSBkZXRlcm1pbmlzdGljLCBzbyBhIHRlc3QgdGhhdCBhbHdheXMgcGFzc2Vz IG9yIGZhaWxzDQo+IC0gICAgd2hlbiBydW4gdW5kZXIgVU1MIG1heSBub3QgYWx3YXlzIGRvIHNv IG9uIHJlYWwgaGFyZHdhcmUuDQo+IC0qICAgSGFyZHdhcmUgYW5kIFZNIGVudmlyb25tZW50cyBt YXkgbm90IGJlIGhlcm1ldGljLiBLVW5pdCB0cmllcyBpdHMgYmVzdCB0bw0KPiAtICAgIHByb3Zp ZGUgYSBoZXJtZXRpYyBlbnZpcm9ubWVudCB0byBydW4gdGVzdHM7IGhvd2V2ZXIsIGl0IGNhbm5v dCBtYW5hZ2Ugc3RhdGUNCj4gLSAgICB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBvdXRzaWRl IG9mIHRoZSBrZXJuZWwuIENvbnNlcXVlbnRseSwgdGVzdHMgdGhhdA0KPiAtICAgIG1heSBiZSBo ZXJtZXRpYyBvbiBVTUwgbWF5IG5vdCBiZSBoZXJtZXRpYyBvbiBvdGhlciBhcmNoaXRlY3R1cmVz Lg0KPiAtKiAgIFNvbWUgZmVhdHVyZXMgYW5kIHRvb2xpbmcgbWF5IG5vdCBiZSBzdXBwb3J0ZWQg b3V0c2lkZSBvZiBVTUwuDQo+IC0qICAgSGFyZHdhcmUgYW5kIFZNcyBhcmUgc2xvd2VyIHRoYW4g VU1MLg0KPiArLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+IC1Ob25lIG9mIHRoZXNlIGFyZSByZWFz b25zIG5vdCB0byBydW4geW91ciBLVW5pdCB0ZXN0cyBvbiByZWFsIGhhcmR3YXJlOyB0aGV5IGFy ZQ0KPiAtb25seSB0aGluZ3MgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkb2luZyBzby4NCj4gKwl2b2lk IGV4YW1wbGVfdGVzdF91c2VyX2FsbG9jX2Z1bmN0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdCkNCj4g Kwl7DQo+ICsJCXZvaWQgKm9iamVjdCA9IGFsbG9jX3NvbWVfb2JqZWN0X2Zvcl9tZSgpOw0KPiAN Cj4gLUN1cnJlbnRseSwgdGhlIEtVbml0IFdyYXBwZXIgKGBgdG9vbHMvdGVzdGluZy9rdW5pdC9r dW5pdC5weWBgKSAoYWthDQo+IC1rdW5pdF90b29sKSBvbmx5IGZ1bGx5IHN1cHBvcnRzIHJ1bm5p bmcgdGVzdHMgaW5zaWRlIG9mIFVNTCBhbmQgUUVNVTsgaG93ZXZlciwNCj4gLXRoaXMgaXMgb25s eSBkdWUgdG8gb3VyIG93biB0aW1lIGxpbWl0YXRpb25zIGFzIGh1bWFucyB3b3JraW5nIG9uIEtV bml0LiBJdCBpcw0KPiAtZW50aXJlbHkgcG9zc2libGUgdG8gc3VwcG9ydCBvdGhlciBlbXVsYXRv cnMgYW5kIGV2ZW4gYWN0dWFsIGhhcmR3YXJlLCBidXQgZm9yDQo+IC1ub3cgUUVNVSBhbmQgVU1M IGlzIHdoYXQgaXMgZnVsbHkgc3VwcG9ydGVkIHdpdGhpbiB0aGUgS1VuaXQgV3JhcHBlci4gQWdh aW4sIHRvDQo+IC1iZSBjbGVhciwgdGhpcyBpcyBqdXN0IHRoZSBXcmFwcGVyLiBUaGUgYWN0dWFs eSBLVW5pdCB0ZXN0cyBhbmQgdGhlIEtVbml0DQo+IC1saWJyYXJ5IHRoZXkgYXJlIHdyaXR0ZW4g aW4gaXMgZnVsbHkgYXJjaGl0ZWN0dXJlIGFnbm9zdGljIGFuZCBjYW4gYmUgdXNlZCBpbg0KPiAt dmlydHVhbGx5IGFueSBzZXR1cCwgeW91IGp1c3Qgd29uJ3QgaGF2ZSB0aGUgYmVuZWZpdCBvZiB0 eXBpbmcgYSBzaW5nbGUgY29tbWFuZA0KPiAtb3V0IG9mIHRoZSBib3ggYW5kIGhhdmluZyBldmVy eXRoaW5nIG1hZ2ljYWxseSB3b3JrIHBlcmZlY3RseS4NCj4gKwkJLyogTWFrZSBzdXJlIHdlIGdv dCBhIHZhbGlkIHBvaW50ZXIgYmFjay4gKi8NCj4gKwkJS1VOSVRfQVNTRVJUX05PVF9FUlJfT1Jf TlVMTCh0ZXN0LCBvYmplY3QpOw0KPiArCQlkb19zb21ldGhpbmdfd2l0aF9vYmplY3Qob2JqZWN0 KTsNCj4gKwl9DQo+IA0KPiAtQWdhaW4sIGFsbCBjb3JlIEtVbml0IGZyYW1ld29yayBmZWF0dXJl cyBhcmUgZnVsbHkgc3VwcG9ydGVkIG9uIGFsbA0KPiAtYXJjaGl0ZWN0dXJlcywgYW5kIHVzaW5n IHRoZW0gaXMgc3RyYWlnaHRmb3J3YXJkOiBNb3N0IHBvcHVsYXIgYXJjaGl0ZWN0dXJlcw0KPiAt YXJlIHN1cHBvcnRlZCBkaXJlY3RseSBpbiB0aGUgS1VuaXQgV3JhcHBlciB2aWEgUUVNVS4gQ3Vy cmVudGx5LCBzdXBwb3J0ZWQNCj4gLWFyY2hpdGVjdHVyZXMgb24gUUVNVSBpbmNsdWRlOg0KPiAr QWxsb2NhdGluZyBNZW1vcnkNCj4gKy0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiAtKiAgIGkzODYN Cj4gLSogICB4ODZfNjQNCj4gLSogICBhcm0NCj4gLSogICBhcm02NA0KPiAtKiAgIGFscGhhDQo+ IC0qICAgcG93ZXJwYw0KPiAtKiAgIHJpc2N2DQo+IC0qICAgczM5MA0KPiAtKiAgIHNwYXJjDQo+ ICtXZSBjYW4gdXNlIGBga3phbGxvY2BgLCB5b3Ugc2hvdWxkIHByZWZlciBgYGt1bml0X2t6YWxs b2NgYCBhbmQgS1VuaXQgd2lsbA0KDQo/Pz8NCg0KV2UgY2FuIHVzZSBgYGt6YWxsb2NgYCwgeW91 IHNob3VsZCBwcmVmZXIgYGBrdW5pdF9remFsbG9jYGAgYW5kIEtVbml0IHdpbGwgLT4NCiAgV2hl cmUgeW91IG1pZ2h0IHVzZSBgYGt6YWxsb2NgYCwgeW91IGNhbiBpbnN0ZWFkIHVzZSBgYGt1bml0 X2t6YWxsb2NgYCBhbmQgS1VuaXQgd2lsbA0KDQo+ICtlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IGlz IGZyZWVkIG9uY2UgdGhlIHRlc3QgY29tcGxldGVzLg0KPiANCj4gLUluIG9yZGVyIHRvIHJ1biBL VW5pdCB0ZXN0cyBvbiBvbmUgb2YgdGhlc2UgYXJjaGl0ZWN0dXJlcyB2aWEgUUVNVSB3aXRoIHRo ZQ0KPiAtS1VuaXQgd3JhcHBlciwgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIHNwZWNpZnkgdGhlIGZs YWdzIGBgLS1hcmNoYGAgYW5kDQo+IC1gYC0tY3Jvc3NfY29tcGlsZWBgIHdoZW4gaW52b2tpbmcg dGhlIEtVbml0IFdyYXBwZXIuIEZvciBleGFtcGxlLCB3ZSBjb3VsZCBydW4NCj4gLXRoZSBkZWZh dWx0IEtVbml0IHRlc3RzIG9uIEFSTSBpbiB0aGUgZm9sbG93aW5nIG1hbm5lciAoYXNzdW1pbmcg d2UgaGF2ZSBhbiBBUk0NCj4gLXRvb2xjaGFpbiBpbnN0YWxsZWQpOg0KPiArVGhpcyBpcyB1c2Vm dWwgYmVjYXVzZSBpdCBsZXRzIHVzIHVzZSB0aGUgYGBLVU5JVF9BU1NFUlRfRVFgYCBtYWNyb3Mg dG8gZXhpdA0KPiArZWFybHkgZnJvbSBhIHRlc3Qgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJv dXQgcmVtZW1iZXJpbmcgdG8gY2FsbCBgYGtmcmVlYGAuDQo+ICtGb3IgZXhhbXBsZToNCj4gDQo+ IC0uLiBjb2RlLWJsb2NrOjogYmFzaA0KPiArLi4gY29kZS1ibG9jazo6IGMNCj4gDQo+IC0JdG9v bHMvdGVzdGluZy9rdW5pdC9rdW5pdC5weSBydW4gLS10aW1lb3V0PTYwIC0tam9icz0xMiAtLWFy Y2g9YXJtIC0tY3Jvc3NfY29tcGlsZT1hcm0tbGludXgtZ251ZWFiaWhmLQ0KPiArCXZvaWQgZXhh bXBsZV90ZXN0X2FsbG9jYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KQ0KPiArCXsNCj4gKwkJY2hh ciAqYnVmZmVyID0ga3VuaXRfa3phbGxvYyh0ZXN0LCAxNiwgR0ZQX0tFUk5FTCk7DQo+ICsJCS8q IEVuc3VyZSBhbGxvY2F0aW9uIHN1Y2NlZWRlZC4gKi8NCj4gKwkJS1VOSVRfQVNTRVJUX05PVF9F UlJfT1JfTlVMTCh0ZXN0LCBidWZmZXIpOw0KPiANCj4gLUFsdGVybmF0aXZlbHksIGlmIHlvdSB3 YW50IHRvIHJ1biB5b3VyIHRlc3RzIG9uIHJlYWwgaGFyZHdhcmUgb3IgaW4gc29tZSBvdGhlcg0K PiAtZW11bGF0aW9uIGVudmlyb25tZW50LCBhbGwgeW91IG5lZWQgdG8gZG8gaXMgdG8gdGFrZSB5 b3VyIGt1bml0Y29uZmlnLCB5b3VyDQo+IC1LY29uZmlnIG9wdGlvbnMgZm9yIHRoZSB0ZXN0cyB5 b3Ugd291bGQgbGlrZSB0byBydW4sIGFuZCBtZXJnZSB0aGVtIGludG8NCj4gLXdoYXRldmVyIGNv bmZpZyB5b3VyIGFyZSB1c2luZyBmb3IgeW91ciBwbGF0Zm9ybS4gVGhhdCdzIGl0IQ0KPiArCQlL VU5JVF9BU1NFUlRfU1RSRVEodGVzdCwgYnVmZmVyLCAiIik7DQo+ICsJfQ0KPiANCj4gLUZvciBl eGFtcGxlLCBsZXQncyBzYXkgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBrdW5pdGNvbmZpZzoNCj4g DQo+IC0uLiBjb2RlLWJsb2NrOjogbm9uZQ0KPiArVGVzdGluZyBTdGF0aWMgRnVuY3Rpb25zDQo+ ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC0JQ09ORklHX0tVTklUPXkNCj4gLQlD T05GSUdfS1VOSVRfRVhBTVBMRV9URVNUPXkNCj4gK0lmIHdlIGRvIG5vdCB3YW50IHRvIGV4cG9z ZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGZvciB0ZXN0aW5nLCBvbmUgb3B0aW9uIGlzIHRvDQo+ ICtjb25kaXRpb25hbGx5IGBgI2luY2x1ZGVgYCB0aGUgdGVzdCBmaWxlIGF0IHRoZSBlbmQgb2Yg eW91ciAuYyBmaWxlLiBGb3INCj4gK2V4YW1wbGU6DQo+IA0KPiAtSWYgeW91IHdhbnRlZCB0byBy dW4gdGhpcyB0ZXN0IG9uIGFuIHg4NiBWTSwgeW91IG1pZ2h0IGFkZCB0aGUgZm9sbG93aW5nIGNv bmZpZw0KPiAtb3B0aW9ucyB0byB5b3VyIGBgLmNvbmZpZ2BgOg0KPiArLi4gY29kZS1ibG9jazo6 IGMNCj4gDQo+IC0uLiBjb2RlLWJsb2NrOjogbm9uZQ0KPiArCS8qIEluIG15X2ZpbGUuYyAqLw0K PiANCj4gLQlDT05GSUdfS1VOSVQ9eQ0KPiAtCUNPTkZJR19LVU5JVF9FWEFNUExFX1RFU1Q9eQ0K PiAtCUNPTkZJR19TRVJJQUxfODI1MD15DQo+IC0JQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9 eQ0KPiArCXN0YXRpYyBpbnQgZG9faW50ZXJlc3RpbmdfdGhpbmcoKTsNCj4gDQo+IC1BbGwgdGhl c2UgbmV3IG9wdGlvbnMgZG8gaXMgZW5hYmxlIHN1cHBvcnQgZm9yIGEgY29tbW9uIHNlcmlhbCBj b25zb2xlIG5lZWRlZA0KPiAtZm9yIGxvZ2dpbmcuDQo+ICsJI2lmZGVmIENPTkZJR19NWV9LVU5J VF9URVNUDQo+ICsJI2luY2x1ZGUgIm15X2t1bml0X3Rlc3QuYyINCj4gKwkjZW5kaWYNCj4gDQo+ IC1OZXh0LCB5b3UgY291bGQgYnVpbGQgYSBrZXJuZWwgd2l0aCB0aGVzZSB0ZXN0cyBhcyBmb2xs b3dzOg0KPiArSW5qZWN0aW5nIFRlc3QtT25seSBDb2RlDQo+ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gDQo+ICtTaW1pbGFyIHRvIGFzIHNob3duIGFib3ZlLCB3ZSBjYW4gYWRkIHRlc3Qt c3BlY2lmaWMgbG9naWMuIEZvciBleGFtcGxlOg0KPiANCj4gLS4uIGNvZGUtYmxvY2s6OiBiYXNo DQo+ICsuLiBjb2RlLWJsb2NrOjogYw0KPiANCj4gLQltYWtlIEFSQ0g9eDg2IG9sZGRlZmNvbmZp Zw0KPiAtCW1ha2UgQVJDSD14ODYNCj4gKwkvKiBJbiBteV9maWxlLmggKi8NCj4gDQo+IC1PbmNl IHlvdSBoYXZlIGJ1aWx0IGEga2VybmVsLCB5b3UgY291bGQgcnVuIGl0IG9uIFFFTVUgYXMgZm9s bG93czoNCj4gKwkjaWZkZWYgQ09ORklHX01ZX0tVTklUX1RFU1QNCj4gKwkvKiBEZWZpbmVkIGlu IG15X2t1bml0X3Rlc3QuYyAqLw0KPiArCXZvaWQgdGVzdF9vbmx5X2hvb2sodm9pZCk7DQo+ICsJ I2Vsc2UNCj4gKwl2b2lkIHRlc3Rfb25seV9ob29rKHZvaWQpIHsgfQ0KPiArCSNlbmRpZg0KPiAN Cj4gLS4uIGNvZGUtYmxvY2s6OiBiYXNoDQo+ICtUaGlzIHRlc3Qtb25seSBjb2RlIGNhbiBiZSBt YWRlIG1vcmUgdXNlZnVsIGJ5IGFjY2Vzc2luZyB0aGUgY3VycmVudCBgYGt1bml0X3Rlc3RgYA0K PiArYXMgc2hvd24gaW4gbmV4dCBzZWN0aW9uOiAqQWNjZXNzaW5nIFRoZSBDdXJyZW50IFRlc3Qq Lg0KPiANCj4gLQlxZW11LXN5c3RlbS14ODZfNjQgLWVuYWJsZS1rdm0gXA0KPiAtCQkJICAgLW0g MTAyNCBcDQo+IC0JCQkgICAta2VybmVsIGFyY2gveDg2XzY0L2Jvb3QvYnpJbWFnZSBcDQo+IC0J CQkgICAtYXBwZW5kICdjb25zb2xlPXR0eVMwJyBcDQo+IC0JCQkgICAtLW5vZ3JhcGhpYw0KPiAr QWNjZXNzaW5nIFRoZSBDdXJyZW50IFRlc3QNCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQo+IA0KPiAtSW50ZXJzcGVyc2VkIGluIHRoZSBrZXJuZWwgbG9ncyB5b3UgbWlnaHQgc2VlIHRo ZSBmb2xsb3dpbmc6DQo+ICtJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIHRvIGNhbGwgdGVzdC1vbmx5 IGNvZGUgZnJvbSBvdXRzaWRlIHRoZSB0ZXN0IGZpbGUuDQo+ICtGb3IgZXhhbXBsZSwgc2VlIGV4 YW1wbGUgaW4gc2VjdGlvbiAqSW5qZWN0aW5nIFRlc3QtT25seSBDb2RlKiBvciBpZg0KPiArd2Ug YXJlIHByb3ZpZGluZyBhIGZha2UgaW1wbGVtZW50YXRpb24gb2YgYW4gb3BzIHN0cnVjdC4gVXNp bmcNCj4gK2Bga3VuaXRfdGVzdGBgIGZpZWxkIGluIGBgdGFza19zdHJ1Y3RgYCwgd2UgY2FuIGFj Y2VzcyBpdCB2aWENCj4gK2BgY3VycmVudC0+a3VuaXRfdGVzdGBgLg0KPiANCj4gLS4uIGNvZGUt YmxvY2s6OiBub25lDQo+ICtCZWxvdyBleGFtcGxlIGluY2x1ZGVzIGhvdyB0byBpbXBsZW1lbnQg Im1vY2tpbmciOg0KDQpCZWxvdyBleGFtcGxlIC0+IFRoZSBleGFtcGxlIGJlbG93DQoNCj4gDQo+ IC0JVEFQIHZlcnNpb24gMTQNCj4gLQkJIyBTdWJ0ZXN0OiBleGFtcGxlDQo+IC0JCTEuLjENCj4g LQkJIyBleGFtcGxlX3NpbXBsZV90ZXN0OiBpbml0aWFsaXppbmcNCj4gLQkJb2sgMSAtIGV4YW1w bGVfc2ltcGxlX3Rlc3QNCj4gLQlvayAxIC0gZXhhbXBsZQ0KPiArLi4gY29kZS1ibG9jazo6IGMN Cj4gDQo+IC1Db25ncmF0dWxhdGlvbnMsIHlvdSBqdXN0IHJhbiBhIEtVbml0IHRlc3Qgb24gdGhl IHg4NiBhcmNoaXRlY3R1cmUhDQo+ICsJI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBj dXJyZW50ICovDQo+IA0KPiAtSW4gYSBzaW1pbGFyIG1hbm5lciwga3VuaXQgYW5kIGt1bml0IHRl c3RzIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIG1vZHVsZXMsDQo+IC1zbyBpZiB5b3Ugd2FudGVkIHRv IHJ1biB0ZXN0cyBpbiB0aGlzIHdheSB5b3UgbWlnaHQgYWRkIHRoZSBmb2xsb3dpbmcgY29uZmln DQo+IC1vcHRpb25zIHRvIHlvdXIgYGAuY29uZmlnYGA6DQo+ICsJc3RydWN0IHRlc3RfZGF0YSB7 DQo+ICsJCWludCBmb29fcmVzdWx0Ow0KPiArCQlpbnQgd2FudF9mb29fY2FsbGVkX3dpdGg7DQo+ ICsJfTsNCj4gDQo+IC0uLiBjb2RlLWJsb2NrOjogbm9uZQ0KPiArCXN0YXRpYyBpbnQgZmFrZV9m b28oaW50IGFyZykNCj4gKwl7DQo+ICsJCXN0cnVjdCBrdW5pdCAqdGVzdCA9IGN1cnJlbnQtPmt1 bml0X3Rlc3Q7DQo+ICsJCXN0cnVjdCB0ZXN0X2RhdGEgKnRlc3RfZGF0YSA9IHRlc3QtPnByaXY7 DQo+IA0KPiAtCUNPTkZJR19LVU5JVD1tDQo+IC0JQ09ORklHX0tVTklUX0VYQU1QTEVfVEVTVD1t DQo+ICsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0ZXN0X2RhdGEtPndhbnRfZm9vX2NhbGxlZF93 aXRoLCBhcmcpOw0KPiArCQlyZXR1cm4gdGVzdF9kYXRhLT5mb29fcmVzdWx0Ow0KPiArCX0NCj4g DQo+IC1PbmNlIHRoZSBrZXJuZWwgaXMgYnVpbHQgYW5kIGluc3RhbGxlZCwgYSBzaW1wbGUNCj4g KwlzdGF0aWMgdm9pZCBleGFtcGxlX3NpbXBsZV90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdCkNCj4g Kwl7DQo+ICsJCS8qIEFzc3VtZSBwcml2IGlzIGFsbG9jYXRlZCBpbiB0aGUgc3VpdGUncyAuaW5p dCAqLw0KPiArCQlzdHJ1Y3QgdGVzdF9kYXRhICp0ZXN0X2RhdGEgPSB0ZXN0LT5wcml2Ow0KDQpJ IGZvdW5kIHRoaXMgZGVzY3JpcHRpb24gYW5kIGV4YW1wbGUgaGFyZCB0byBmb2xsb3cuICBUaGlz IGlzIHBvc3NpYmx5IGR1ZQ0KdG8gdGhlIHBhdGNoIGJlaW5nIGludGVybWluZ2xlZCB3aXRoIHRo ZSBkZWxldGlvbiBvZiBjb21wbGV0ZWx5IHVucmVsYXRlZA0KbGluZXMuDQoNCkRvZXMgJ3ByaXYn IHN0YW5kIGZvciBwcml2aWxlZ2UsIG9yIHByaXZhdGU/ICBJIGFzc3VtZSB0aGUgbGF0dGVyLCBi dXQgbWF5YmUgbWVudGlvbg0KdGhlIG1lYW5pbmcgb2YgdGhpcz8gIElzICdwcml2JyBhIGZpZWxk IHJlc2VydmVkIGluIHRoZSBrdW5pdF90ZXN0IHN0cnVjdHVyZSBmb3IgcGFzc2luZw0KYXJiaXRy YXJ5IGRhdGEgdG8gdGhlIHRlc3QgZnVuY3Rpb24/DQoNClRoZSBsaWZlY3ljbGUgb2YgdGhlIGRh dGEgaW4gdGVzdC0+cHJpdiBpcyBhIHVuY2xlYXIgdG8gbWUuICBIZXJlLCB0aGUgZGF0YSBhcHBl YXJzDQp0byBiZSBzdGF0aWMsIGJ1dCBpdCdzIHVuY2xlYXIgd2h5IHlvdSB3b3VsZCBuZWVkIHRv IHBhc3MgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBzdGF0aWMgZGF0YQ0KdG8gdGhlIHRlc3QgZnVu Y3Rpb24uICBXb3VsZCB0aGUgZGF0YSBmb3IgdGhlc2UgZmllbGRzICh3YW50X2Zvb19jYWxsZWRf d2l0aCBhbmQgZm9vX3Jlc3VsdCkNCmJlIGZpbGxlZCBpbiBhdCB0ZXN0IGludm9jYXRpb24gdGlt ZSBmcm9tIGEgbGlzdCAobGlrZSBmcm9tIHBhcmFtZXRlcml6ZWQgdGVzdHMpPw0KDQo+IA0KPiAt Li4gY29kZS1ibG9jazo6IGJhc2gNCj4gKwkJdGVzdF9kYXRhLT5mb29fcmVzdWx0ID0gNDI7DQo+ ICsJCXRlc3RfZGF0YS0+d2FudF9mb29fY2FsbGVkX3dpdGggPSAxOw0KPiANCj4gLQltb2Rwcm9i ZSBleGFtcGxlLXRlc3QNCj4gKwkJLyogSW4gYSByZWFsIHRlc3QsIHdlJ2QgcHJvYmFibHkgcGFz cyBhIHBvaW50ZXIgdG8gZmFrZV9mb28gc29tZXdoZXJlDQo+ICsJCSAqIGxpa2UgYW4gb3BzIHN0 cnVjdCwgZXRjLiBpbnN0ZWFkIG9mIGNhbGxpbmcgaXQgZGlyZWN0bHkuICovDQo+ICsJCUtVTklU X0VYUEVDVF9FUSh0ZXN0LCBmYWtlX2ZvbygxKSwgNDIpOw0KPiArCX0NCg0KT0sgLSBJJ20gdG90 YWxseSBsb3N0IGF0IHRoaXMgcG9pbnQuDQoNCj4gDQo+IC0uLi53aWxsIHJ1biB0aGUgdGVzdHMu DQo+IA0KPiAtLi4gbm90ZTo6DQo+IC0gICBOb3RlIHRoYXQgeW91IHNob3VsZCBtYWtlIHN1cmUg eW91ciB0ZXN0IGRlcGVuZHMgb24gYGBLVU5JVD15YGAgaW4gS2NvbmZpZw0KPiAtICAgaWYgdGhl IHRlc3QgZG9lcyBub3Qgc3VwcG9ydCBtb2R1bGUgYnVpbGQuICBPdGhlcndpc2UsIGl0IHdpbGwg dHJpZ2dlcg0KPiAtICAgY29tcGlsZSBlcnJvcnMgaWYgYGBDT05GSUdfS1VOSVRgYCBpcyBgYG1g YC4NCj4gK05vdGU6IGhlcmUgd2UgYXJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCB1c2luZyBgYHRl c3QtPnByaXZgYCwgYnV0IGlmIHdlIHdhbnQNCj4gK3NvbWV0aGluZyBtb3JlIGZsZXhpYmxlIHdl IGNvdWxkIHVzZSBhIG5hbWVkIGBga3VuaXRfcmVzb3VyY2VgYCwgc2VlDQo+ICtEb2N1bWVudGF0 aW9uL2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QuDQo+IA0KPiAtV3JpdGluZyBuZXcgdGVz dHMgZm9yIG90aGVyIGFyY2hpdGVjdHVyZXMNCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ICtGYWlsaW5nIFRoZSBDdXJyZW50IFRlc3QNCj4gKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gLVRoZSBmaXJzdCB0aGluZyB5b3UgbXVzdCBkbyBpcyBh c2sgeW91cnNlbGYgd2hldGhlciBpdCBpcyBuZWNlc3NhcnkgdG8gd3JpdGUgYQ0KPiAtS1VuaXQg dGVzdCBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIGFuZCB0aGVuIHdoZXRoZXIgaXQgaXMg bmVjZXNzYXJ5IHRvDQo+IC13cml0ZSB0aGF0IHRlc3QgZm9yIGEgcGFydGljdWxhciBwaWVjZSBv ZiBoYXJkd2FyZS4gSW4gZ2VuZXJhbCwgd3JpdGluZyBhIHRlc3QNCj4gLXRoYXQgZGVwZW5kcyBv biBoYXZpbmcgYWNjZXNzIHRvIGEgcGFydGljdWxhciBwaWVjZSBvZiBoYXJkd2FyZSBvciBzb2Z0 d2FyZSAobm90DQo+IC1pbmNsdWRlZCBpbiB0aGUgTGludXggc291cmNlIHJlcG8pIHNob3VsZCBi ZSBhdm9pZGVkIGF0IGFsbCBjb3N0cy4NCj4gK0lmIHdlIHdhbnQgdG8gZmFpbCB0aGUgY3VycmVu dCB0ZXN0LCB3ZSBjYW4gdXNlIGBga3VuaXRfZmFpbF9jdXJyZW50X3Rlc3QoZm10LCBhcmdzLi4u KWBgDQo+ICt3aGljaCBpcyBkZWZpbmVkIGluIGBgPGt1bml0L3Rlc3QtYnVnLmg+YGAgYW5kIGRv ZXMgbm90IHJlcXVpcmUgcHVsbGluZyBpbiBgYDxrdW5pdC90ZXN0Lmg+YGAuDQo+ICtGb3IgZXhh bXBsZSwgd2UgaGF2ZSBhbiBvcHRpb24gdG8gZW5hYmxlIHNvbWUgZXh0cmEgZGVidWcgY2hlY2tz IG9uIHNvbWUgZGF0YQ0KPiArc3RydWN0dXJlcyBhcyBzaG93biBiZWxvdzoNCj4gDQo+IC1FdmVu IGlmIHlvdSBvbmx5IGV2ZXIgcGxhbiBvbiBydW5uaW5nIHlvdXIgS1VuaXQgdGVzdCBvbiB5b3Vy IGhhcmR3YXJlDQo+IC1jb25maWd1cmF0aW9uLCBvdGhlciBwZW9wbGUgbWF5IHdhbnQgdG8gcnVu IHlvdXIgdGVzdHMgYW5kIG1heSBub3QgaGF2ZSBhY2Nlc3MNCj4gLXRvIHlvdXIgaGFyZHdhcmUu IElmIHlvdSB3cml0ZSB5b3VyIHRlc3QgdG8gcnVuIG9uIFVNTCwgdGhlbiBhbnlvbmUgY2FuIHJ1 biB5b3VyDQo+IC10ZXN0cyB3aXRob3V0IGtub3dpbmcgYW55dGhpbmcgYWJvdXQgeW91ciBwYXJ0 aWN1bGFyIHNldHVwLCBhbmQgeW91IGNhbiBzdGlsbA0KPiAtcnVuIHlvdXIgdGVzdHMgb24geW91 ciBoYXJkd2FyZSBzZXR1cCBqdXN0IGJ5IGNvbXBpbGluZyBmb3IgeW91ciBhcmNoaXRlY3R1cmUu DQo+ICsuLiBjb2RlLWJsb2NrOjogYw0KPiANCj4gLS4uIGltcG9ydGFudDo6DQo+IC0gICBBbHdh eXMgcHJlZmVyIHRlc3RzIHRoYXQgcnVuIG9uIFVNTCB0byB0ZXN0cyB0aGF0IG9ubHkgcnVuIHVu ZGVyIGEgcGFydGljdWxhcg0KPiAtICAgYXJjaGl0ZWN0dXJlLCBhbmQgYWx3YXlzIHByZWZlciB0 ZXN0cyB0aGF0IHJ1biB1bmRlciBRRU1VIG9yIGFub3RoZXIgZWFzeQ0KPiAtICAgKGFuZCBtb25l dGFyaWx5IGZyZWUpIHRvIG9idGFpbiBzb2Z0d2FyZSBlbnZpcm9ubWVudCB0byBhIHNwZWNpZmlj IHBpZWNlIG9mDQo+IC0gICBoYXJkd2FyZS4NCj4gLQ0KPiAtTmV2ZXJ0aGVsZXNzLCB0aGVyZSBh cmUgc3RpbGwgdmFsaWQgcmVhc29ucyB0byB3cml0ZSBhbiBhcmNoaXRlY3R1cmUgb3IgaGFyZHdh cmUNCj4gLXNwZWNpZmljIHRlc3Q6IGZvciBleGFtcGxlLCB5b3UgbWlnaHQgd2FudCB0byB0ZXN0 IHNvbWUgY29kZSB0aGF0IHJlYWxseSBiZWxvbmdzDQo+IC1pbiBgYGFyY2gvc29tZS1hcmNoLypg YC4gRXZlbiBzbywgdHJ5IHlvdXIgYmVzdCB0byB3cml0ZSB0aGUgdGVzdCBzbyB0aGF0IGl0DQo+ IC1kb2VzIG5vdCBkZXBlbmQgb24gcGh5c2ljYWwgaGFyZHdhcmU6IGlmIHNvbWUgb2YgeW91ciB0 ZXN0IGNhc2VzIGRvbid0IG5lZWQgdGhlDQo+IC1oYXJkd2FyZSwgb25seSByZXF1aXJlIHRoZSBo YXJkd2FyZSBmb3IgdGVzdHMgdGhhdCBhY3R1YWxseSBuZWVkIGl0Lg0KPiAtDQo+IC1Ob3cgdGhh dCB5b3UgaGF2ZSBuYXJyb3dlZCBkb3duIGV4YWN0bHkgd2hhdCBiaXRzIGFyZSBoYXJkd2FyZSBz cGVjaWZpYywgdGhlDQo+IC1hY3R1YWwgcHJvY2VkdXJlIGZvciB3cml0aW5nIGFuZCBydW5uaW5n IHRoZSB0ZXN0cyBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcw0KPiAtd3JpdGluZyBub3JtYWwg S1VuaXQgdGVzdHMuIE9uZSBzcGVjaWFsIGNhdmVhdCBpcyB0aGF0IHlvdSBoYXZlIHRvIHJlc2V0 DQo+IC1oYXJkd2FyZSBzdGF0ZSBpbiBiZXR3ZWVuIHRlc3QgY2FzZXM7IGlmIHRoaXMgaXMgbm90 IHBvc3NpYmxlLCB5b3UgbWF5IG9ubHkgYmUNCj4gLWFibGUgdG8gcnVuIG9uZSB0ZXN0IGNhc2Ug cGVyIGludm9jYXRpb24uDQo+ICsJI2luY2x1ZGUgPGt1bml0L3Rlc3QtYnVnLmg+DQo+IA0KPiAt Li4gVE9ETyhicmVuZGFuaGlnZ2luc0Bnb29nbGUuY29tKTogQWRkIGFuIGFjdHVhbCBleGFtcGxl IG9mIGFuIGFyY2hpdGVjdHVyZS0NCj4gLSAgIGRlcGVuZGVudCBLVW5pdCB0ZXN0Lg0KPiArCSNp ZmRlZiBDT05GSUdfRVhUUkFfREVCVUdfQ0hFQ0tTDQo+ICsJc3RhdGljIHZvaWQgdmFsaWRhdGVf bXlfZGF0YShzdHJ1Y3QgZGF0YSAqZGF0YSkNCj4gKwl7DQo+ICsJCWlmIChpc192YWxpZChkYXRh KSkNCj4gKwkJCXJldHVybjsNCj4gDQo+IC1LVW5pdCBkZWJ1Z2ZzIHJlcHJlc2VudGF0aW9uDQo+ IC09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC1XaGVuIGt1bml0IHRlc3Qgc3VpdGVz IGFyZSBpbml0aWFsaXplZCwgdGhleSBjcmVhdGUgYW4gYXNzb2NpYXRlZCBkaXJlY3RvcnkNCj4g LWluIGBgL3N5cy9rZXJuZWwvZGVidWcva3VuaXQvPHRlc3Qtc3VpdGU+YGAuICBUaGUgZGlyZWN0 b3J5IGNvbnRhaW5zIG9uZSBmaWxlDQo+ICsJCWt1bml0X2ZhaWxfY3VycmVudF90ZXN0KCJkYXRh ICVwIGlzIGludmFsaWQiLCBkYXRhKTsNCj4gDQo+IC0tIHJlc3VsdHM6ICJjYXQgcmVzdWx0cyIg ZGlzcGxheXMgcmVzdWx0cyBvZiBlYWNoIHRlc3QgY2FzZSBhbmQgdGhlIHJlc3VsdHMNCj4gLSAg b2YgdGhlIGVudGlyZSBzdWl0ZSBmb3IgdGhlIGxhc3QgdGVzdCBydW4uDQo+ICsJCS8qIE5vcm1h bCwgbm9uLUtVbml0LCBlcnJvciByZXBvcnRpbmcgY29kZSBoZXJlLiAqLw0KPiArCX0NCj4gKwkj ZWxzZQ0KPiArCXN0YXRpYyB2b2lkIG15X2RlYnVnX2Z1bmN0aW9uKHZvaWQpIHsgfQ0KPiArCSNl bmRpZg0KPiANCj4gLVRoZSBkZWJ1Z2ZzIHJlcHJlc2VudGF0aW9uIGlzIHByaW1hcmlseSBvZiB1 c2Ugd2hlbiBrdW5pdCB0ZXN0IHN1aXRlcyBhcmUNCj4gLXJ1biBpbiBhIG5hdGl2ZSBlbnZpcm9u bWVudCwgZWl0aGVyIGFzIG1vZHVsZXMgb3IgYnVpbHRpbi4gIEhhdmluZyBhIHdheQ0KPiAtdG8g ZGlzcGxheSByZXN1bHRzIGxpa2UgdGhpcyBpcyB2YWx1YWJsZSBhcyBvdGhlcndpc2UgcmVzdWx0 cyBjYW4gYmUNCj4gLWludGVybWl4ZWQgd2l0aCBvdGhlciBldmVudHMgaW4gZG1lc2cgb3V0cHV0 LiAgVGhlIG1heGltdW0gc2l6ZSBvZiBlYWNoDQo+IC1yZXN1bHRzIGZpbGUgaXMgS1VOSVRfTE9H X1NJWkUgYnl0ZXMgKGRlZmluZWQgaW4gYGBpbmNsdWRlL2t1bml0L3Rlc3QuaGBgKS4NCj4gLS0N Cj4gMi4zNC4xLjQwMC5nYTI0NTYyMGZhZGItZ29vZw0KDQoNClBsZWFzZSBwcm92aWRlIHNvbWUg bW9yZSBleHBsYW5hdGlvbiBhYm91dCANCmFjY2Vzc2luZyB0aGUgS1VuaXQgdGVzdCBhdCBydW50 aW1lLiAgSSBjb3VsZG4ndA0KZm9sbG93IHdoYXQgd2FzIGdvaW5nIG9uIGluIHRoYXQgc2VjdGlv bi4NCiAtLSBUaW0NCg0K