From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 788EE740039 for ; Fri, 17 May 2024 08:17:11 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=kuKm7ZHKtv7U6Vm5/6jM5BG0IhKUrhtKRX2gD4GnRhQ=; c=relaxed/simple; d=groups.io; h=From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:msip_labels:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20240206; t=1715933829; v=1; b=pm9S3pqdn/kHL9x1WhK4Gg7R/djnUeUAemrfo/X9sheC9pa+VsZkHeuhq7fe471FzAP9PBAN Yh5Ua+Zj9FR7QO2WI2F2efe0KSwTkBGQ8CkygplEzfyiYeIPrq+HUqhfp8X5nxSYCWx4yfDJfcu XswNS5FCQIhi+gXpaGpJLFPpstACM7StSQT3YafjB4xvsh5Jrggz5V6j/1R7K5sBkVStpEM25m5 fNj0Zsqh3P20krq0KeisqgGuxX+COSEoKyWUP8es6NFxaBq7FzxAnOs2RPio+UgZco5PS8t22EC ZtbKigG3TsCsiUEYhtpbCMwjHwj6Krpl3RJdZUWvRy2RA== X-Received: by 127.0.0.2 with SMTP id PHk0YY7687511xL8bavzzRPM; Fri, 17 May 2024 01:17:09 -0700 X-Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.107.243.47]) by mx.groups.io with SMTP id smtpd.web11.35641.1715933823890101551 for ; Fri, 17 May 2024 01:17:04 -0700 X-Received: from LV8PR12MB9452.namprd12.prod.outlook.com (2603:10b6:408:200::8) by DS7PR12MB6335.namprd12.prod.outlook.com (2603:10b6:8:94::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.28; Fri, 17 May 2024 08:16:58 +0000 X-Received: from LV8PR12MB9452.namprd12.prod.outlook.com ([fe80::9d67:b4b7:7bad:8c08]) by LV8PR12MB9452.namprd12.prod.outlook.com ([fe80::9d67:b4b7:7bad:8c08%4]) with mapi id 15.20.7544.052; Fri, 17 May 2024 08:16:58 +0000 From: "Chang, Abner via groups.io" To: Nhi Pham , Nickle Wang , "devel@edk2.groups.io" CC: "Attar, AbdulLateef (Abdul Lateef)" , Tinh Nguyen , Thang Nguyen OS , Mike Maslenkin Subject: Re: [edk2-devel] [edk2-platforms][PATCH v2] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Topic: [edk2-platforms][PATCH v2] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Index: AQHaptmd/RurvUTiUkmaJgOq6Glx+LGbD7qAgAAHlJA= Date: Fri, 17 May 2024 08:16:58 +0000 Message-ID: References: <20240515150629.236739-1-nicklew@nvidia.com> <7d928ca7-e312-4a2e-9470-cbd96fbdc643@os.amperecomputing.com> In-Reply-To: <7d928ca7-e312-4a2e-9470-cbd96fbdc643@os.amperecomputing.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_ActionId=30963273-dd64-4ff8-a883-c37e593b0e43;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_ContentBits=0;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Enabled=true;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Method=Standard;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Name=AMD Internal Distribution Only;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_SetDate=2024-05-17T08:16:22Z;MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LV8PR12MB9452:EE_|DS7PR12MB6335:EE_ x-ms-office365-filtering-correlation-id: 7e136512-4b48-4432-eac5-08dc7649b8c8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: =?utf-8?B?dktOd3N5QWxkU1p3SDQ4UmtjTXdIcnEvVVZEQUU4UUlvU0tzbnk5SDM0Wkgr?= =?utf-8?B?bTNJaGI0V2xHNkNnREFKS1ZLVTJ4emNsRTY2Q1RKOUNEU1c2UFRhNHZuVDlp?= =?utf-8?B?bDdhQVNta0R1SU9Sa240SWQ0TFdHUzJvcDJaanVjNGN5b3lVRzBhUjhXSFMv?= =?utf-8?B?TXBxYkFDbjFzYmV1MVJMSXZpaDFDSFI2cERHaTZwTW93ZmdrUXZTUGNLRWZE?= =?utf-8?B?aHdGbUFFanlOOEd6UFFvelhHZ3Z2T3VCVVFDSWh3SEc0UEFtL0FyZWp4MTBV?= =?utf-8?B?a0JVWGZmdjBMeHVqSWo2NmgyQUkyR2VDNFQrYWVNM3B3NHJOeWVEUUJod1Nu?= =?utf-8?B?ajFSaHhmb3BlY2E2Y01aNWhFaGFTUi9BTXNmRWVJZG11OXlMNGZYeW56Sm1u?= =?utf-8?B?L0tkYXdnc3pldmZaTzd0b1Y4cnJuNktYaStZbjVEOVg2MjgrMlA4aHZ1RXVF?= =?utf-8?B?VWdNUEpIM05tU3dnYThzMldXb0ZneUlub3kzUU5mUFFDT2V5OXI3YjEyeUpJ?= =?utf-8?B?L3FjYkNzc1BZU1JmMldzeVpiUStNOVFqSUZ0eXdWUWVXN2pPOW1BZGVEZ0lB?= =?utf-8?B?cWFCUnhYd0phZFR4cW9IOWxEMG8zNGFBSTh0L1VOcjR3YnpSY3NzOEJzeDRs?= =?utf-8?B?bk96U05BOWtHaFN4cjhoSnV4NkVQRzd2dTFWQUJwcmQyOVRqZnRnS2lPOHRy?= =?utf-8?B?TWZBZkZXd0dFdGU2TWdsZVE4Rkl0cTdjK3lpQm9XZ0RxaEw3THNqbCtRc0NT?= =?utf-8?B?MWgwTWpHYVNrTkZSa21yTWNPWUxsZzFHYzFuNHpnK0puZmplZjk2ZFhHc3Bt?= =?utf-8?B?MGFwU2YzOUtsUzgyMEZkVzhwYUE2RS9KYkpETjMyemlhSHhZTDkxN255SlhJ?= =?utf-8?B?SUJxM05UYlFidVZQYm8rVm81Ri92ZkpDb0VucGZ3VDFKZzdzUHpPVUpteTJZ?= =?utf-8?B?ekhpZHF2QjYxOUZwLyszcy9WRWJPQkpGcHZEc0FCTVBHK1l2NzlaYkpNMTdW?= =?utf-8?B?ejFsQ0k2elAvWXF4VHk3QnduSVZNM2hhMEV1b3NaKy9zYWFQSFdXRmcrOHF1?= =?utf-8?B?UVJhK1R3SEZLcDBmK3NRV0tBcXRUUWVzWk5mOHdHSGlraGRwbFVkYVVGVUs0?= =?utf-8?B?dWJjUVJyY25FNEFmMC8rRHVxVDdzdkR5VTdBZlBvVytyOEtERU83di8wei9M?= =?utf-8?B?Q3RDWm45OWRTV21ETFJNWjY2cHBUeTJKQ1MrNTFPT2VVYjVWTWpDNElTSnJV?= =?utf-8?B?b2NZU0xPbVNxSUlBcGJRbUNsNHNYeG9ianJJOURFdjFrVW5UZDFJQUE1Nzlm?= =?utf-8?B?b2lWdm4reVEzNlVCSGFYMGk3UFJ5YmNDTE1Cb3l4K0l4TnNZZzh4eU85UXB4?= =?utf-8?B?MngxSURnQXc5U1hKaW1GVitKQmJkei8veW02aHphMVZzTVcvVFBVMFZmYXR4?= =?utf-8?B?QUd3akVmS2M2RXFmYkZydGkrV2phWjVwQ2lDMnY2dmtvSWhyS0NSWjNDSVJh?= =?utf-8?B?elEvRTZFNDJWcjRVd3lROVpZamF5YTJJMExoYm5iMjlmbHE1cm1HcFRSSUVS?= =?utf-8?B?cWUrV0U4NnZFcWcvS3JaMDA0UGJJQkg3YTdweWl2VkNwaUZrNkY3VXFienB4?= =?utf-8?B?cXRoR0kveFVnWXFHWkxvNU5WcFlnejBLUjNQc0NFNnFHN0F1bzRJT1ZMNnJy?= =?utf-8?B?OFNmQi82UC9ZM0ZxQVNzak8vczd0K1dNV0c5QVhPb2RyVndpU25aZ2tBRE9z?= =?utf-8?Q?yapnSBSoc/VBQ1nNJ4=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TmxLWVlaS0JsaG1jVjl2QUNlaXhtZm1CdVNNa3R6TUxuMWtNL3hFUnlwbmtH?= =?utf-8?B?R1BFZmhzeHEwUEJmY0U1NWtVY2R6K0hpSjYxbEJ5UWdMTW5URkxzdXlOMFJD?= =?utf-8?B?ZG1kRm9MbFpScVhOUWF3dzROVWZuWS9kaHFFZHU5QmFQVDhkaEh3MG95dElR?= =?utf-8?B?U3FrRDN4a2tzNmxBTjY3MWJnS1RhRFIwVTBacGtLTlFQVnlBbXhNYzVPdnk2?= =?utf-8?B?TjFOSjBPbHJNV2dtd0c4V2pobTlpY0ZReFQ0c0p0eEFOSnBVUkFlMUtlWEFQ?= =?utf-8?B?TWw2SmtoQUZabEpGWUd4Q2xYa2pCMFdrNXlyNDZiZ2s0N0ZjZTBUT3lkNnYw?= =?utf-8?B?QlNxemRrOWRLbG14aVFuanhaaXg3Uy81UllEWld0OXRsTjFLL0NiYUF6Wnpq?= =?utf-8?B?VGMrT0NJNmpIbHIzM2QwcUdKenZtQ1p1T3ZVMXlmVUEyYjU3VzBHQWJLSnFr?= =?utf-8?B?YmZQaVdpNU1mS0FRMXNHOEo5R1gvM1NWcmQzNGgzU3lQUmIxQUNKTm5Xb1ZO?= =?utf-8?B?ZFFZWVZpNEVPM0RZZEdJNTJtL0dkUEJ3TjhEU3V5by9RMHFLUVlFRmF1WU9K?= =?utf-8?B?dTh0dGNsNDRybHF5dWRWYjM2TldRLzR2VjE5czhMWTRieGVSUjhxbjdNNVZ5?= =?utf-8?B?akFzT1FVeXdEUjNHc2NzbEZWYWdCbGRsYzNTbk9DZTVPekJzVnM4Z2xINCtQ?= =?utf-8?B?YXBxV3IvUTB4cmEvZlpTWHJzeVFXR05Na05NSjgrRnRyeTVOeEVWa3p0OUdk?= =?utf-8?B?TUhDMU5ZMEVLaW5aZ3BDWmNPVGQwNDBFMlZFWnFoOEViQzFFSFJsalUyTEw3?= =?utf-8?B?WlBxZGFuU1FmT29CSktYQkZiMFhXOUhENUo4QmRpeXpVOWM4TDkwd1RLWWtJ?= =?utf-8?B?Q3YvekRxWHFHMzZYVkVaemRVRDNnM1FTS0owSnZBb3JMR2xXam1HNnNMa3Fn?= =?utf-8?B?UnNKN3ZHK3J3aTVqM1Yza0txK2NBM2IzWjNEZU83aklZU01FNlJ1RHdZWHd0?= =?utf-8?B?d1BzUE5qdVNSVmMxVUhLUnpsQjFTSWJmdS9YWW51dG04MktzMEhmRVg5K1Jv?= =?utf-8?B?NlVZQlpEbjMzbUxidDlBVzA3Tk5XYkhPUFpXWGFFTlFya2dLTEtQRHNObFpp?= =?utf-8?B?bjNseTBnNnJTdENtRzU5UEl6Y3NWL1Axb3B2OGhzOCtKZDJwdlJHOGV2dnNl?= =?utf-8?B?cWk3K040ZjR0aXZSUU0xeVY2d0dJYmE2RGZ5VThKMEdnQ3FLekFRendsT29K?= =?utf-8?B?eFNqNkVYWGdaR2pEdDBqdmdUcGFiejlNOVJtcktEem1mN2hjWEZLK1U0eTE4?= =?utf-8?B?OUhaQ29vNzl2UVB6Y3hZYWxWc1FsNVFkYWZteWs5KzM5dGlRclIraW1wUDVr?= =?utf-8?B?ZWE1K0FkNGFTWDdqeE9jMnV4WllnNFJIOC8zUkxvMW9TNThFOGVwMGtvZUQx?= =?utf-8?B?azc4SlJvRi9Sb0RnR3JLbENoUkQ0N0o4eVR0SHBTU09WWHZ4MzUyOUs5a3lW?= =?utf-8?B?OTk0RmtMRlN5eFJxRW9JbkJ4dHlLVmZyZkdqQ2k2RXpRV3BBRFo2WVQ2ZGdV?= =?utf-8?B?Sy9PbkVsamtCeU4vTWZYNlpBdmdqL05rYkZpTFRkajlaQlR5d1I5OXhEMlg3?= =?utf-8?B?czd2cW5qNVlPS3dyQVJ0aEJkQi9nWlptMFhjOHdPY2cwZktWSXJGOUFkcDBD?= =?utf-8?B?eGpuRTMwellGc3N6SUN0SHl3MEhwNCtWeVhOc0lwallORGFRQmphR0dkM2pL?= =?utf-8?B?T0tUWWs4T2hQZzZjK2puRGhGN2h5RkVtMy9LMkRUcERiNGY4b2N4aTB6RnNl?= =?utf-8?B?NVZuS2tQUncyT1U1aGZZYnQ2T0FjdmJTOUx2enRYRDFESEtlUUhXWDRvOHht?= =?utf-8?B?WFVqWUpRK3RIalQ3dWUvRmE2Ym8wdFE3SnZ4dnFxZFZCWG04YU5zeDZYNGwr?= =?utf-8?B?RzU0cVBhMlNVUjZKVVR5OG1kYzRQSUF6WFk2aEdwUHVJcU1RTkVHQnptaTMz?= =?utf-8?B?WnlKRXE5bEk3eDhXNFg5ZlVlVXFLbG04Ni9NaUNuMHlocnBmQUwrRUk2ZENZ?= =?utf-8?B?aENSaDI0ZmVhYkFUZ0tGWDMvYk9oeDQ1SjMrWjlvWDZBSERNbWxMTEhRRHN5?= =?utf-8?Q?gKt8=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9452.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e136512-4b48-4432-eac5-08dc7649b8c8 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 May 2024 08:16:58.4292 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9Y1LPT4LJGdHe5co7puJDFfFkSrrOvcrQqvcm2jhFpRHhoMqsooTuUHvpJS7oSm8NddsAsHzRG9veCB2x+6KFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6335 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Fri, 17 May 2024 01:17:04 -0700 Resent-From: abner.chang@amd.com Reply-To: devel@edk2.groups.io,abner.chang@amd.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: npq3u9770LqLdlYCMn4z5NbCx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=pm9S3pqd; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEFNRCBJbnRlcm5hbCBEaXN0cmlidXRpb24gT25seV0N Cg0KSGkgTmhpLA0KSG93IG11Y2ggZWZmb3J0IHlvdSB0aGluayB0byBoYXZlIHRoZSBTU0lGIE1h bmFnZWFiaWxpdHlQa2cgcG9ydD8NCg0KUmVnYXJkcywNCkFibmVyDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmhpIFBoYW0gPG5oaUBvcy5hbXBlcmVjb21wdXRpbmcu Y29tPg0KPiBTZW50OiBGcmlkYXksIE1heSAxNywgMjAyNCAzOjQ5IFBNDQo+IFRvOiBOaWNrbGUg V2FuZyA8bmlja2xld0BudmlkaWEuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IENo YW5nLCBBYm5lciA8QWJuZXIuQ2hhbmdAYW1kLmNvbT47IEF0dGFyLCBBYmR1bExhdGVlZiAoQWJk dWwNCj4gTGF0ZWVmKSA8QWJkdWxMYXRlZWYuQXR0YXJAYW1kLmNvbT47IFRpbmggTmd1eWVuDQo+ IDx0aW5obmd1eWVuQGFtcGVyZW1haWwub25taWNyb3NvZnQuY29tPjsgVGhhbmcgTmd1eWVuIE9T DQo+IDx0aGFuZ0BhbXBlcmVtYWlsLm9ubWljcm9zb2Z0LmNvbT47IE1pa2UgTWFzbGVua2luDQo+ IDxtaWtlLm1hc2xlbmtpbkBnbWFpbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1wbGF0Zm9y bXNdW1BBVENIIHYyXSBNYW5hZ2VhYmlsaXR5UGtnOiBhZGQgc3VwcG9ydCBmb3INCj4gdGhlIHBo b3NwaG9yIGlwbWkgYmxvYiB0cmFuc2ZlciBwcm90b2NvbA0KPg0KPiBDYXV0aW9uOiBUaGlzIG1l c3NhZ2Ugb3JpZ2luYXRlZCBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZS4gVXNlIHByb3BlciBjYXV0 aW9uDQo+IHdoZW4gb3BlbmluZyBhdHRhY2htZW50cywgY2xpY2tpbmcgbGlua3MsIG9yIHJlc3Bv bmRpbmcuDQo+DQo+DQo+IEhpIE5pY2tsZSwNCj4NCj4gUGxlYXNlIHNlZSBteSBjb21tZW50cyBp bmxpbmUuLi4NCj4NCj4gUC9zOiBJIGp1c3QgcmVhbGl6ZWQgdGhhdCBJIGNhbiBub3QgdGVzdCB0 aGlzIHByb3RvY29sIHdpdGhvdXQgSVBNSSBTU0lGDQo+IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBN YW5hZ2VhYmlsaXR5UGtnIGZyYW1ld29yay4NCj4NCj4gT24gNS8xNS8yMDI0IDEwOjA2IFBNLCBO aWNrbGUgV2FuZyB3cm90ZToNCj4gPiBSRUY6aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3Jn L3Nob3dfYnVnLmNnaT9pZD00NzczDQo+ID4NCj4gPiBUaGlzIGNoYW5nZSBpbXBsZW1lbnRzIHRo ZSBibG9iIHRyYW5zZmVyIHByb3RvY29sIHVzZWQgaW4gT3BlbkJtYw0KPiA+IGRvY3VtZW50ZWQg aGVyZTogaHR0cHM6Ly9naXRodWIuY29tL29wZW5ibWMvcGhvc3Bob3ItaXBtaS1ibG9icw0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogTmljayBSYW1pcmV6IDxucmFtaXJlekBudmlkaWEuY29tPg0K PiA+IENvLWF1dGhvcmVkLWJ5OiBOaWNrbGUgV2FuZyA8bmlja2xld0BudmlkaWEuY29tPg0KPiA+ IENjOiBBYm5lciBDaGFuZyA8YWJuZXIuY2hhbmdAYW1kLmNvbT4NCj4gPiBDYzogQWJkdWwgTGF0 ZWVmIEF0dGFyIDxBYmR1bExhdGVlZi5BdHRhckBhbWQuY29tPg0KPiA+IENjOiBUaW5oIE5ndXll biA8dGluaG5ndXllbkBhbXBlcmVtYWlsLm9ubWljcm9zb2Z0LmNvbT4NCj4gPiBDYzogTmhpIFBo YW0gPG5oaUBvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiA+IENjOiBUaGFuZyBOZ3V5ZW4gT1Mg PHRoYW5nQGFtcGVyZW1haWwub25taWNyb3NvZnQuY29tPg0KPiA+IENjOiBNaWtlIE1hc2xlbmtp biA8bWlrZS5tYXNsZW5raW5AZ21haWwuY29tPg0KPiA+IC0tLQ0KPiA+ICAgLi4uL01hbmFnZWFi aWxpdHlQa2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMgICAgIHwgICAgMyArDQo+ID4gICAuLi4vSW5j bHVkZS9NYW5hZ2VhYmlsaXR5LmRzYyAgICAgICAgICAgICAgICAgfCAgICAyICsNCj4gPiAgIC4u Li9JcG1pQmxvYlRyYW5zZmVyRHhlLmluZiAgICAgICAgICAgICAgICAgICB8ICAgMzkgKw0KPiA+ ICAgLi4uL0lwbWlCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYgICAgIHwgICA0MCAr DQo+ID4gICAuLi4vSW5jbHVkZS9Qcm90b2NvbC9JcG1pQmxvYlRyYW5zZmVyLmggICAgICAgfCAg MjUzICsrKysNCj4gPiAgIC4uLi9JbnRlcm5hbElwbWlCbG9iVHJhbnNmZXIuaCAgICAgICAgICAg ICAgICB8ICA0MDcgKysrKysrDQo+ID4gICAuLi4vSXBtaUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxv YlRyYW5zZmVyRHhlLmMgfCAgODcyICsrKysrKysrKysrKysNCj4gPiAgIC4uLi9Vbml0VGVzdC9J cG1pQmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0cy5jICB8IDExMTMgKysrKysrKysrKysrKysrKysN Cj4gPiAgIC4uLi9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQgICB8ICAg MjQgKw0KPiA+ICAgOSBmaWxlcyBjaGFuZ2VkLCAyNzUzIGluc2VydGlvbnMoKykNCj4gPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJhbnNmZXINCj4gRHhlLmluZg0KPiA+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0DQo+IEZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lw bWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvSXBtaUJsbw0KPiBiVHJhbnNmZXJUZXN0VW5pdFRl c3RzSG9zdC5pbmYNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBGZWF0dXJlcy9NYW5hZ2Vh YmlsaXR5UGtnL0luY2x1ZGUvUHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oDQo+ID4gICBjcmVh dGUgbW9kZSAxMDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBt aUJsb2JUcmFuc2ZlckR4ZS9JbnRlcm5hbElwbWlCbG9iDQo+IFRyYW5zZmVyLmgNCj4gPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJhbnNmZXINCj4gRHhlLmMNCj4gPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NA0KPiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1p QmxvYlRyYW5zZmVyRHhlL1VuaXRUZXN0L0lwbWlCbG8NCj4gYlRyYW5zZmVyVGVzdFVuaXRUZXN0 cy5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBr Zy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL01hbmFnZWFiaWxpdHlQa2cuZGVjDQo+ IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9NYW5hZ2VhYmlsaXR5UGtnLmRlYw0KPiA+IGlu ZGV4IGViMGVlNjdjYmEuLmRjMWQwMDE2MmMgMTAwNjQ0DQo+ID4gLS0tIGEvRmVhdHVyZXMvTWFu YWdlYWJpbGl0eVBrZy9NYW5hZ2VhYmlsaXR5UGtnLmRlYw0KPiA+ICsrKyBiL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMNCj4gPiBAQCAtNCw2ICs0LDcgQEAN Cj4gPiAgICMgdGhvc2UgYXJlIHJlbGF0ZWQgdG8gdGhlIHBsYXRmb3JtIG1hbmFnZW1lbnQuDQo+ ID4gICAjDQo+ID4gICAjIENvcHlyaWdodCAoQykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAy NCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZl ZC4NCj4gPiAgICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gPiAgICMNCj4gPiAgICMjDQo+ID4gQEAgLTU4LDYgKzU5LDggQEANCj4gPiAgICAgZ0Vka2lp UGxkbVByb3RvY29sR3VpZCAgICAgICAgICAgICAgICA9IHsgMHg2MDk5NzYxNiwgMHhEQjcwLCAw eDRCNUYsIHsgMHg4NiwNCj4gMHhBNCwgMHgwOSwgMHg1OCwgMHhBMywgMHg3MSwgMHg0NywgMHhC NCB9IH0NCj4gPiAgICAgZ0Vka2lpUGxkbVNtYmlvc1RyYW5zZmVyUHJvdG9jb2xHdWlkICA9IHsg MHhGQTQzMUMzQywgMHg4MTZCLCAweDRCMzIsDQo+IHsgMHhBMywgMHhFMCwgMHhBRCwgMHg5Qiwg MHg3RiwgMHg2NCwgMHgyNywgMHgyRSB9IH0NCj4gPiAgICAgZ0Vka2lpTWN0cFByb3RvY29sR3Vp ZCAgICAgICAgICAgICAgICA9IHsgMHhFOTM0NjVDMSwgMHg5QTMxLCAweDRDOTYsIHsgMHg5MiwN Cj4gMHg1NiwgMHgyMiwgMHgwQSwgMHhFMSwgMHg4MCwgMHhCNCwgMHgxQiB9IH0NCj4gPiArICAj IyBJbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiA+ICsgIGdFZGtpaUlwbWlC bG9iVHJhbnNmZXJQcm90b2NvbEd1aWQgICAgPSB7IDB4MDU4MzdjNzUsIDB4MWQ2NSwgMHg0Njhi LA0KPiB7IDB4YjEsIDB4YzIsIDB4ODEsIDB4YWYsIDB4OWEsIDB4MzEsIDB4NWIsIDB4MmMgfSB9 DQo+ID4NCj4gPiAgIFtQY2RzRml4ZWRBdEJ1aWxkXQ0KPiA+ICAgICAjIyBUaGlzIHZhbHVlIGlz IHRoZSBNQ1RQIEludGVyZmFjZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVuZHBvaW50IElEIGZv cg0KPiB0cmFuc21pdGluZyBNQ1RQIG1lc3NhZ2UuDQo+ID4gZGlmZiAtLWdpdCBhL0ZlYXR1cmVz L01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9NYW5hZ2VhYmlsaXR5LmRzYw0KPiBiL0ZlYXR1cmVz L01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9NYW5hZ2VhYmlsaXR5LmRzYw0KPiA+IGluZGV4IDJl NDEwZGY5YmEuLmFhZTM0M2E3MzMgMTAwNjQ0DQo+ID4gLS0tIGEvRmVhdHVyZXMvTWFuYWdlYWJp bGl0eVBrZy9JbmNsdWRlL01hbmFnZWFiaWxpdHkuZHNjDQo+ID4gKysrIGIvRmVhdHVyZXMvTWFu YWdlYWJpbGl0eVBrZy9JbmNsdWRlL01hbmFnZWFiaWxpdHkuZHNjDQo+ID4gQEAgLTIsNiArMiw3 IEBADQo+ID4gICAjIENvbW1vbiBsaWJyYXJpZXMgZm9yIE1hbmFnZWFiaWx0eSBQYWNrYWdlDQo+ ID4gICAjDQo+ID4gICAjIENvcHlyaWdodCAoQykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAy NCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZl ZC4NCj4gPiAgICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gPiAgICMNCj4gPiAgICMjDQo+ID4gQEAgLTM3LDYgKzM4LDcgQEANCj4gPiAgIFtDb21wb25l bnRzLlg2NCwgQ29tcG9uZW50cy5BQVJDSDY0XQ0KPiA+ICAgIWlmIGdNYW5hZ2VhYmlsaXR5UGtn VG9rZW5TcGFjZUd1aWQuUGNkTWFuYWdlYWJpbGl0eUR4ZUlwbWlFbmFibGUgPT0NCj4gVFJVRQ0K PiA+ICAgICBNYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pUHJvdG9jb2wvRHhlL0lwbWlQ cm90b2NvbER4ZS5pbmYNCj4gPiArDQo+IE1hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlC bG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuc2ZlckR4ZS5pbmYNCj4gPiAgICFlbmRpZg0KPiA+ DQo+ID4gICBbQ29tcG9uZW50cy5YNjRdDQo+ID4gZGlmZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFu c2YNCj4gZXJEeGUuaW5mDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwv SXBtaUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW5zZg0KPiBlckR4ZS5pbmYNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjEwOGY0YmI1ZjgNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2 ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW5zZg0KPiBlckR4ZS5pbmYNCj4g PiBAQCAtMCwwICsxLDM5IEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgSVBNSSBCbG9iIFRyYW5z ZmVyIFByb3RvY29sIERYRSBEcml2ZXIuDQo+ID4gKyMNCj4gPiArIyAgQ29weXJpZ2h0IChjKSAy MDIyLTIwMjQsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4g cmVzZXJ2ZWQuDQo+ID4gKyMNCj4gPiArIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gPiArIw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5G X1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiA+ICsgIEJBU0VfTkFN RSAgICAgICAgICAgICAgICAgICAgICA9IElwbWlCbG9iVHJhbnNmZXJEeGUNCj4gPiArICBGSUxF X0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA2MzU3YzgwNC03OGJiLTRiMGMtYWJkZi1jNzVk Zjk0MmYzMTkNCj4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJ VkVSDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKyAg RU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlckR4ZURyaXZl ckVudHJ5UG9pbnQNCj4gPiArDQo+ID4gK1tTb3VyY2VzLmNvbW1vbl0NCj4gPiArICBJcG1pQmxv YlRyYW5zZmVyRHhlLmMNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBCYXNl TGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVnTGliDQo+ID4gKyAgSXBtaUxp Yg0KPiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiArICBQY2RMaWINCj4gPiArICBVZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPiA+ICsN Cj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKyAgTWRlTW9k dWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPiArICBNYW5hZ2VhYmlsaXR5UGtnL01hbmFnZWFi aWxpdHlQa2cuZGVjDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdFZGtpaUlwbWlC bG9iVHJhbnNmZXJQcm90b2NvbEd1aWQNCj4gPiArDQo+ID4gK1tEZXBleF0NCj4gPiArICBUUlVF DQo+ID4gZGlmZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2Fs L0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvSXBtaUINCj4gbG9iVHJhbnNmZXJUZXN0VW5p dFRlc3RzSG9zdC5pbmYNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pQmxvYlRyYW5zZmVyRHhlL1VuaXRUZXN0L0lwbWlCDQo+IGxvYlRyYW5zZmVyVGVzdFVuaXRU ZXN0c0hvc3QuaW5mDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwLi5kYWI2ODU4ZjA5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0KPiBiL0ZlYXR1cmVz L01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3Qv SXBtaUINCj4gbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYNCj4gPiBAQCAtMCwwICsx LDQwIEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgVW5pdCB0ZXN0cyBvZiB0aGUgSXBtaSBibG9i IHRyYW5zZmVyIGRyaXZlciB0aGF0IGFyZSBydW4gZnJvbSBhIGhvc3QNCj4gZW52aXJvbm1lbnQu DQo+ID4gKyMNCj4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMjAtMjAyNCwgTlZJRElBIENPUlBPUkFU SU9OICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gPiArIw0KPiA+ICsj IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMjDQo+ ID4gKw0KPiA+ICtbRGVmaW5lc10NCj4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAg ICAgPSAweDAwMDEwMDA2DQo+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0g SXBtaUJsb2JUcmFuc2ZlckR4ZVVuaXRUZXN0c0hvc3QNCj4gPiArICBGSUxFX0dVSUQgICAgICAg ICAgICAgICAgICAgICAgPSAxZjVkNDA5NS1lYTUyLTQzMmMtYjA3OC04NjA5N2ZlZjYwMDQNCj4g PiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBIT1NUX0FQUExJQ0FUSU9ODQo+ ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKw0KPiA+ICsj DQo+ID4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkN Cj4gPiArIyBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gPiArIw0KPiA+ ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IFg2NA0KPiA+ICsjDQo+ID4gKw0K PiA+ICtbU291cmNlc10NCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0cy5jDQo+ ID4gKw0KPiA+ICtbUGFja2FnZXNdDQo+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+ICsgIE1hbmFnZWFiaWxpdHlQa2cvTWFu YWdlYWJpbGl0eVBrZy5kZWMNCj4gPiArICBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZy YW1ld29ya1BrZy5kZWMNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBCYXNl TGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVnTGliDQo+ID4gKyAgVW5pdFRl c3RMaWINCj4gPiArICBJcG1pTGliDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdF ZGtpaUlwbWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQNCj4gPiBkaWZmIC0tZ2l0IGEvRmVhdHVy ZXMvTWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0K PiBiL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9Qcm90b2NvbC9JcG1pQmxvYlRy YW5zZmVyLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAu LjE0YjUyOTQzMTQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvRmVhdHVyZXMvTWFuYWdl YWJpbGl0eVBrZy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiA+IEBAIC0w LDAgKzEsMjUzIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBJUE1JIEJsb2IgVHJh bnNmZXIgZHJpdmVyDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBOVklE SUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLg0KPiA+ ICsNCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICsNCj4gPiArICBAUGFyOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmJtYy9waG9zcGhvci1p cG1pLQ0KPiBibG9icy9ibG9iL21hc3Rlci9SRUFETUUubWQNCj4gPiArKiovDQo+DQo+IExhY2sg b2YgaGVhZGVyIGd1YXJkDQo+ICNpZm5kZWYgSVBNSV9CTE9CX1RSQU5TRkVSX0hfDQo+DQo+ID4g KyNpbmNsdWRlIDxMaWJyYXJ5L0lwbWlMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVm aUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJk L0lwbWkuaD4NCj4gPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvSXBtaU5ldEZuT2VtLmg+ DQo+ID4gKw0KPiA+ICsjZGVmaW5lIElQTUlfT0VNX0JMT0JfVFJBTlNGRVJfQ01EICAweDgwDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIEJMT0JfVFJBTlNGRVJfU1RBVF9PUEVOX1IgICAgICAgIEJJVDAN Cj4gPiArI2RlZmluZSBCTE9CX1RSQU5TRkVSX1NUQVRfT1BFTl9XICAgICAgICBCSVQxDQo+ID4g KyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX0NPTU1JVElORyAgICAgQklUMg0KPiA+ICsjZGVm aW5lIEJMT0JfVFJBTlNGRVJfU1RBVF9DT01NSVRURUQgICAgIEJJVDMNCj4gPiArI2RlZmluZSBC TE9CX1RSQU5TRkVSX1NUQVRfQ09NTUlUX0VSUk9SICBCSVQ0DQo+ID4gKy8vIEJpdHMgNS03IGFy ZSByZXNlcnZlZA0KPiA+ICsvLyBCaXRzIDgtMTUgYXJlIGJsb2Itc3BlY2lmaWMgZGVmaW5pdGlv bnMNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIE9wZW5CTUMgT0VOIGNvZGUgaW4gbGl0dGxlIGVu ZGlhbiBmb3JtYXQNCj4gPiArLy8NCj4gPiArY29uc3QgVUlOVDggIE9wZW5CbWNPZW5bXSA9IHsg MHhDRiwgMHhDMiwgMHgwMCB9Ow0KPg0KPiBjb25zdCAtPiBDT05TVA0KPg0KPiBTaG91bGQgd2Ug YWRkIGEgUENEIGZvciB0aGUgT0VOIHRvIGJlIGNvbmZpZ3VyZWQgYnkgcGxhdGZvcm0gc3BlY2lm aWMNCj4gQk1DPyBPciB0aGlzIHByb3RvY29sIGlzIG9ubHkgdG8gc3VwcG9ydCBPcGVuQk1DLg0K Pg0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gIEJsb2IgVHJhbnNmZXIgRnVuY3Rpb24gUHJvdG90 eXBlcw0KPiA+ICsvLw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiByZXRy aWV2ZXMgdGhlIGNvdW50IG9mIGJsb2IgdHJhbnNmZXJzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQ0K PiBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgQ291bnQgICAgICAgVGhl IG51bWJlciBvZiBhY3RpdmUgYmxvYnMNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIG51bWJlciBvZiBhY3RpdmUN Cj4gYmxvYnMuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgIEFuIGVycm9y IG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr KEVGSUFQSSAqRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0dFVF9DT1VOVCkoDQo+ ID4gKyAgT1VUIFVJTlQzMiAqQ291bnQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiBlbnVtZXJhdGVzIGJsb2IgdHJhbnNmZXJzIGF2YWlsYWJsZSB0aHJv dWdoIHRoZSBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYkluZGV4 ICAgICAgIFRoZSAwLWJhc2VkIEluZGV4IG9mIHRoZSBibG9iIHRvIGVudW1lcmF0ZQ0KPiA+ICsg IEBwYXJhbVtvdXRdICAgICAgICBCbG9iSWQgICAgICAgICAgVGhlIElEIG9mIHRoZSBibG9iDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1 bGx5IGVudW1lcmF0ZWQgdGhlIGJsb2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAg ICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9U T0NPTF9FTlVNRVJBVEUpKA0KPiA+ICsgIElOICBVSU5UMzIgIEJsb2JJbmRleCwNCj4gPiArICBP VVQgQ0hBUjggICAqQmxvYklkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRo aXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gb3BlbiBhIHNlc3Npb24gZm9yIGEgc3BlY2lmaWMg YmxvYg0KPiA+ICsgIGlkZW50aWZpZWQgYnkgaXRzIElELCB1c2luZyB0aGUgSVBNSS4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUgSUQgb2YgdGhl IGJsb2IgdG8gb3Blbg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBGbGFncyAgICAgICAgICAg RmxhZ3MgdG8gY29udHJvbCBob3cgdGhlIGJsb2IgaXMgb3BlbmVkDQo+ID4gKyAgQHBhcmFtW291 dF0gICAgICAgIFNlc3Npb25JZCAgICAgICBBIHVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXINCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNjZXNzZnVs bHkgb3BlbmVkIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAg ICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xf T1BFTikoDQo+ID4gKyAgSU4gIENIQVI4ICAqQmxvYklkLA0KPiA+ICsgIElOICBVSU5UMTYgRmxh Z3MsDQo+ID4gKyAgT1VUIFVJTlQxNiAqU2Vzc2lvbklkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIGEgYmxvYiBvdmVyIHRo ZSBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAg IFRoZSBzZXNzaW9uIElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4g KyAgQHBhcmFtW2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBi bG9iIGZyb20gd2hpY2ggdG8gc3RhcnQNCj4gcmVhZGluZw0KPiA+ICsgIEBwYXJhbVtpbl0gICAg ICAgICBSZXF1ZXN0ZWRTaXplICAgVGhlIGxlbmd0aCBvZiBkYXRhIHRvIHJlYWQNCj4gPiArICBA cGFyYW1bb3V0XSAgICAgICAgRGF0YSAgICAgICAgICAgIERhdGEgcmVhZCBmcm9tIHRoZSBibG9i DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vz c2Z1bGx5IHJlYWQgZnJvbSB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAg ICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BS T1RPQ09MX1JFQUQpKA0KPiA+ICsgIElOICBVSU5UMTYgICAgICBTZXNzaW9uSWQsDQo+ID4gKyAg SU4gIFVJTlQzMiAgICAgIE9mZnNldCwNCj4gPiArICBJTiAgVUlOVDMyICAgICAgUmVxdWVzdGVk U2l6ZSwNCj4gPiArICBPVVQgVUlOVDggICAgICAgKkRhdGENCj4gPiArICApOw0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byBhIGJsb2Igb3ZlciB0 aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAg ICBUaGUgc2Vzc2lvbiBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiBCbG9iT3Blbg0KPiA+ ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUg YmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0DQo+IHdyaXRpbmcNCj4gPiArICBAcGFyYW1baW5dICAg ICAgICAgRGF0YSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSB0byB3cml0ZQ0KPiA+ ICsgIEBwYXJhbVtpbl0gICAgICAgICBXcml0ZUxlbmd0aCAgICAgVGhlIGxlbmd0aCB0byB3cml0 ZQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nl c3NmdWxseSB3cm90ZSB0byB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAg ICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BS T1RPQ09MX1dSSVRFKSgNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0KPiA+ICsg IElOICBVSU5UMzIgICAgICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICAgICpEYXRhLA0K PiA+ICsgIElOICBVSU5UMzIgICAgICBXcml0ZUxlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgZGF0YSB0byBhIGJsb2Igb3ZlciB0 aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAg ICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4g PiArICBAcGFyYW1baW5dICAgICAgICAgQ29tbWl0RGF0YUxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRh dGEgdG8gY29tbWl0IHRvIHRoZQ0KPiBibG9iDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIENv bW1pdERhdGEgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGNvbW1pdA0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWwgY29tbWl0 IHRvIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAg QW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICsoRUZJQVBJICpFREtJSV9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfQ09NTUlU KSgNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBVSU5UOCAg ICAgICBDb21taXREYXRhTGVuZ3RoLA0KPiA+ICsgIElOICBVSU5UOCAgICAgICAqQ29tbWl0RGF0 YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNsb3Nl IGEgc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggYSBibG9iIHRyYW5zZmVyIG92ZXIgdGhlIElQTUku DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhlIHNl c3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgY2xvc2Vk Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2Nj dXJyZWQNCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJ QVBJICpFREtJSV9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfQ0xPU0UpKA0KPiA+ICsgIElO ICBVSU5UMTYgICAgICBTZXNzaW9uSWQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiBkZWxldGVzIGEgc3BlY2lmaWMgYmxvYiBpZGVudGlmaWVkIGJ5IGl0 cyBJRCBvdmVyIHRoZSBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgQmxv YklkICAgICAgICAgIFRoZSBCbG9iSWQgdG8gYmUgZGVsZXRlZA0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIHdhcyBkZWxldGVkLg0KPiA+ ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQN Cj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpF REtJSV9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfREVMRVRFKSgNCj4gPiArICBJTiAgQ0hB UjggKkJsb2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0 aW9uIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBibG9iIGlkZW50aWZpZWQgYnkg QmxvYklkIGZyb20NCj4gYW4gSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAg IEJsb2JJZCAgICAgICAgICBUaGUgQmxvYiBJRCB0byBnYXRoZXIgc3RhdGlzdGljcyBmb3INCj4g PiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxvYlN0YXRlICAgICAgIFRoZSBjdXJyZW50IHN0YXRl IG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAgICBT aXplIGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIE1ldGFk YXRhTGVuZ3RoICBMZW5ndGggb2YgdGhlIG9wdGlvbmFsIG1ldGFkYXRhDQo+ID4gKyAgQHBhcmFt W291dF0gICAgICAgIE1ldGFkYXRhICAgICAgICBPcHRpb25hbCBibG9iLXNwZWNpZmljIG1ldGFk YXRhDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhl IGJsb2Igc3RhdGlzdGljcyB3ZXJlIHN1Y2Nlc3NmdWxseQ0KPiBnYXRoZXJlZC4NCj4gPiArICBA cmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4g KyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlf SVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NUQVQpKA0KPiA+ICsgIElOICBDSEFSOCAgKkJs b2JJZCwNCj4gPiArICBPVVQgVUlOVDE2ICpCbG9iU3RhdGUsDQo+ID4gKyAgT1VUIFVJTlQzMiAq U2l6ZSwNCj4gPiArICBPVVQgVUlOVDggICpNZXRhZGF0YUxlbmd0aCwNCj4gPiArICBPVVQgVUlO VDggICpNZXRhZGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1 bmN0aW9uIHF1ZXJ5IHRoZSBzdGF0dXMgb2YgYSBibG9iIHRyYW5zZmVyIHNlc3Npb24gaW4gYW4g SVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAgICBU aGUgSUQgb2YgdGhlIHNlc3Npb24gdG8gZ2F0aGVyIHN0YXRpc3RpY3MgZm9yDQo+ID4gKyAgQHBh cmFtW291dF0gICAgICAgIEJsb2JTdGF0ZSAgICAgICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUg YmxvYg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBTaXplICAgICAgICAgICAgU2l6ZSBpbiBi eXRlcyBvZiB0aGUgYmxvYg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBNZXRhZGF0YUxlbmd0 aCAgTGVuZ3RoIG9mIHRoZSBvcHRpb25hbCBtZXRhZGF0YQ0KPiA+ICsgIEBwYXJhbVtvdXRdICAg ICAgICBNZXRhZGF0YSAgICAgICAgT3B0aW9uYWwgYmxvYi1zcGVjaWZpYyBtZXRhZGF0YQ0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIHN0 YXRpc3RpY3Mgd2VyZSBzdWNjZXNzZnVsbHkNCj4gZ2F0aGVyZWQuDQo+ID4gKyAgQHJldHZhbCBP dGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4g PiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX0lQTUlfQkxP Ql9UUkFOU0ZFUl9QUk9UT0NPTF9TRVNTSU9OX1NUQVQpKA0KPiA+ICsgIElOICBVSU5UMTYgU2Vz c2lvbklkLA0KPiA+ICsgIE9VVCBVSU5UMTYgKkJsb2JTdGF0ZSwNCj4gPiArICBPVVQgVUlOVDMy ICpTaXplLA0KPiA+ICsgIE9VVCBVSU5UOCAgKk1ldGFkYXRhTGVuZ3RoLA0KPiA+ICsgIE9VVCBV SU5UOCAgKk1ldGFkYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMg ZnVuY3Rpb24gd3JpdGVzIG1ldGFkYXRhIHRvIGEgYmxvYiBhc3NvY2lhdGVkIHdpdGggYSBzZXNz aW9uIGluIGFuDQo+IElQTUkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNz aW9uSWQgICAgICAgVGhlIElEIG9mIHRoZSBzZXNzaW9uIHRvIHdyaXRlIG1ldGFkYXRhIGZvcg0K PiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0 aGUgbWV0YWRhdGEgdG8gd3JpdGUgdG8NCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgRGF0YSAg ICAgICAgICAgIFRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBtZXRhZGF0YQ0KPiA+ICsgIEBwYXJh bVtpbl0gICAgICAgICBXcml0ZUxlbmd0aCAgICAgVGhlIGxlbmd0aCB0byB3cml0ZQ0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIG1ldGFk YXRhIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAg ICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVm DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVS X1BST1RPQ09MX1dSSVRFX01FVEEpKA0KPiA+ICsgIElOICBVSU5UMTYgICAgICBTZXNzaW9uSWQs DQo+ID4gKyAgSU4gIFVJTlQzMiAgICAgIE9mZnNldCwNCj4gPiArICBJTiAgVUlOVDggICAgICAg KkRhdGEsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICAgIFdyaXRlTGVuZ3RoDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gKy8vDQo+ID4gKy8vIFN0cnVjdHVyZSBvZiBFREtJSV9JUE1JX0JMT0JfVFJBTlNG RVJfUFJPVE9DT0wNCj4gPiArLy8NCj4gPiArc3RydWN0IF9FREtJSV9JUE1JX0JMT0JfVFJBTlNG RVJfUFJPVE9DT0wgew0KPiA+ICsgIEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9H RVRfQ09VTlQgICAgICAgQmxvYkdldENvdW50Ow0KPiA+ICsgIEVES0lJX0lQTUlfQkxPQl9UUkFO U0ZFUl9QUk9UT0NPTF9FTlVNRVJBVEUNCj4gQmxvYkVudW1lcmF0ZTsNCj4gPiArICBFREtJSV9J UE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfT1BFTiAgICAgICAgICAgIEJsb2JPcGVuOw0KPiA+ ICsgIEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9SRUFEICAgICAgICAgICAgQmxv YlJlYWQ7DQo+ID4gKyAgRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1dSSVRFICAg ICAgICAgICBCbG9iV3JpdGU7DQo+ID4gKyAgRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RP Q09MX0NPTU1JVCAgICAgICAgICBCbG9iQ29tbWl0Ow0KPiA+ICsgIEVES0lJX0lQTUlfQkxPQl9U UkFOU0ZFUl9QUk9UT0NPTF9DTE9TRSAgICAgICAgICAgQmxvYkNsb3NlOw0KPiA+ICsgIEVES0lJ X0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9ERUxFVEUgICAgICAgICAgQmxvYkRlbGV0ZTsN Cj4gPiArICBFREtJSV9JUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfU1RBVCAgICAgICAgICAg IEJsb2JTdGF0Ow0KPiA+ICsgIEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9TRVNT SU9OX1NUQVQNCj4gQmxvYlNlc3Npb25TdGF0Ow0KPiA+ICsgIEVES0lJX0lQTUlfQkxPQl9UUkFO U0ZFUl9QUk9UT0NPTF9XUklURV9NRVRBDQo+IEJsb2JXcml0ZU1ldGE7DQo+ID4gK307DQo+ID4g Kw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBfRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09M DQo+IEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTDsNCj4gPiArDQo+ID4gK2V4dGVy biBFRklfR1VJRCAgZ0Vka2lpSXBtaUJsb2JUcmFuc2ZlclByb3RvY29sR3VpZDsNCj4gPiBkaWZm IC0tZ2l0DQo+IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JU cmFuc2ZlckR4ZS9JbnRlcm5hbElwbWlCbG8NCj4gYlRyYW5zZmVyLmgNCj4gYi9GZWF0dXJlcy9N YW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0ludGVybmFsSXBt aUJsDQo+IG9iVHJhbnNmZXIuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMC4uM2U5MGRjNjg3MQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4gYi9G ZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lu dGVybmFsSXBtaUJsDQo+IG9iVHJhbnNmZXIuaA0KPiA+IEBAIC0wLDAgKzEsNDA3IEBADQo+ID4g Ky8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBIZWFkZXJzIGZvciBJUE1JIEJsb2IgVHJhbnNmZXIg ZHJpdmVyDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBOVklESUEgQ09S UE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLg0KPiA+ICsNCj4g PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsN Cj4gPiArKiovDQo+ID4gKw0KPg0KPiBMYWNrIG9mIGhlYWRlciBndWFyZA0KPiAjaWZuZGVmIElO VEVSTkFMX0lQTUlfQkxPQl9UUkFOU0ZFUl9IXw0KPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9C YXNlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiAr I2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvSXBt aUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiA+ICsNCj4gPiArI2RlZmluZSBQUk9U T0NPTF9SRVNQT05TRV9PVkVSSEVBRCAgKDQgKiBzaXplb2YoVUlOVDgpKSAgICAgICAvLyAxDQo+ IGJ5dGUgY29tcGxldGlvbiBjb2RlICsgMyBieXRlcyBPRU4NCj4NCj4gTml0OiBBZGQgYSBzcGFj ZSBhZnRlciBzaXplb2YNCj4NCj4gPiArI2RlZmluZSBCTE9CX01BWF9EQVRBX1BFUl9QQUNLRVQg ICAgNjQNCj4NCj4gU2hvdWxkIGl0IGJlIG1vdmVkIHRvIEluY2x1ZGUvUHJvdG9jb2wvSXBtaUJs b2JUcmFuc2Zlci5oPyBUaGUgY2FsbGVyDQo+IGNvdWxkIG5lZWQgdG8gYmUgYXdhcmUgdGhlIG1h eCBsZW5ndGggb2YgdGhlIHBhY2thZ2UuDQo+DQo+ID4gKw0KPiA+ICsvLyBTdWJjb21tYW5kcyBm b3IgdGhpcyBwcm90b2NvbA0KPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ICsgIElwbWlCbG9iVHJh bnNmZXJTdWJjb21tYW5kR2V0Q291bnQgPSAwLA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJj b21tYW5kRW51bWVyYXRlLA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kT3BlbiwN Cj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFJlYWQsDQo+ID4gKyAgSXBtaUJsb2JU cmFuc2ZlclN1YmNvbW1hbmRXcml0ZSwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFu ZENvbW1pdCwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZENsb3NlLA0KPiA+ICsg IElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kRGVsZXRlLA0KPiA+ICsgIElwbWlCbG9iVHJhbnNm ZXJTdWJjb21tYW5kU3RhdCwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFNlc3Np b25TdGF0LA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3JpdGVNZXRhLA0KPiA+ ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9TVUJDT01NQU5EUzsNCj4gPiArDQo+ID4gKyNwcmFnbWEg cGFjaygxKQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQ4ICAgIE9F TlszXTsNCj4gPiArICBVSU5UOCAgICBTdWJDb21tYW5kOw0KPiA+ICt9IElQTUlfQkxPQl9UUkFO U0ZFUl9IRUFERVI7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBDb21tYW5kIDAgLSBCbWNCbG9i R2V0Q291bnQNCj4gPiArLy8gVGhlIEJtY0Jsb2JHZXRDb3VudCBjb21tYW5kIGV4cGVjdHMgdG8g cmVjZWl2ZSBhbiBlbXB0eSBib2R5Lg0KPiA+ICsvLyBUaGUgQk1DIHdpbGwgcmV0dXJuIHRoZSBu dW1iZXIgb2YgZW51bWVyYWJsZSBibG9icw0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ID4gKyAgVUlOVDMyICAgIEJsb2JDb3VudDsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJf R0VUX0NPVU5UX1JFU1BPTlNFOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCAxIC0g Qm1jQmxvYkVudW1lcmF0ZQ0KPiA+ICsvLyBUaGUgQm1jQmxvYkVudW1lcmF0ZSBjb21tYW5kIGV4 cGVjdHMgdG8gcmVjZWl2ZSBhIGJvZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0 IHsNCj4gPiArICBVSU5UMzIgICAgQmxvYkluZGV4OyAvLyAwLWJhc2VkIGluZGV4IG9mIGJsb2Ig dG8gcmVjZWl2ZQ0KPiA+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0VOVU1FUkFURV9TRU5E X0RBVEE7DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgQ0hBUjggICAgQmxv YklkW0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVS X0JMT0JfRU5VTUVSQVRFX1JFU1BPTlNFOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFu ZCAyIC0gQm1jQmxvYk9wZW4NCj4gPiArLy8gVGhlIEJtY0Jsb2JPcGVuIGNvbW1hbmQgZXhwZWN0 cyB0byByZWNlaXZlIGEgYm9keSBvZjoNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+ICsgIFVJTlQxNiAgICBGbGFnczsNCj4gPiArICBDSEFSOCAgICAgQmxvYklkW0JMT0JfTUFY X0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfT1BFTl9T RU5EX0RBVEE7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEJMT0JfT1BFTl9GTEFHX1JFQUQgICAwDQo+ ID4gKyNkZWZpbmUgQkxPQl9PUEVOX0ZMQUdfV1JJVEUgIDENCj4gPiArLy8gQml0cyAyLTcgYXJl IHJlc2VydmVkDQo+ID4gKy8vIEJpdHMgOC0xNSBhcmUgYmxvYi1zcGVjaWZpYyBkZWZpbml0aW9u cw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQxNiAgICBTZXNzaW9u SWQ7DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfT1BFTl9SRVNQT05TRTsNCj4gPiAr DQo+ID4gKy8vDQo+ID4gKy8vIENvbW1hbmQgMyAtIEJtY0Jsb2JSZWFkDQo+ID4gKy8vIFRoZSBC bWNCbG9iUmVhZCBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBhIGJvZHkgb2Y6DQo+ID4gKy8v DQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMTYgICAgU2Vzc2lvbklkOyAvLyBS ZXR1cm5lZCBmcm9tIEJsb2JPcGVuDQo+ID4gKyAgVUlOVDMyICAgIE9mZnNldDsNCj4gPiArICBV SU5UMzIgICAgUmVxdWVzdGVkU2l6ZTsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9S RUFEX1NFTkRfREFUQTsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5U OCAgICBEYXRhW0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RS QU5TRkVSX0JMT0JfUkVBRF9SRVNQT05TRTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIENvbW1h bmQgNCAtIEJtY0Jsb2JXcml0ZQ0KPiA+ICsvLyBUaGUgQm1jQmxvYldyaXRlIGNvbW1hbmQgZXhw ZWN0cyB0byByZWNlaXZlIGEgYm9keSBvZjoNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qg ew0KPiA+ICsgIFVJTlQxNiAgICBTZXNzaW9uSWQ7IC8vIFJldHVybmVkIGZyb20gQmxvYk9wZW4N Cj4gPiArICBVSU5UMzIgICAgT2Zmc2V0Ow0KPiA+ICsgIFVJTlQ4ICAgICBEYXRhW0JMT0JfTUFY X0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVf U0VORF9EQVRBOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCA1IC0gQm1jQmxvYkNv bW1pdA0KPiA+ICsvLyBUaGUgQm1jQmxvYkNvbW1pdCBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2 ZSBhIGJvZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5U MTYgICAgU2Vzc2lvbklkOyAvLyBSZXR1cm5lZCBmcm9tIEJsb2JPcGVuDQo+ID4gKyAgVUlOVDgg ICAgIENvbW1pdERhdGFMZW5ndGg7DQo+ID4gKyAgVUlOVDggICAgIENvbW1pdERhdGFbQkxPQl9N QVhfREFUQV9QRVJfUEFDS0VUXTsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9DT01N SVRfU0VORF9EQVRBOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCA2IC0gQm1jQmxv YkNsb3NlDQo+ID4gKy8vIFRoZSBCbWNCbG9iQ2xvc2UgY29tbWFuZCBleHBlY3RzIHRvIHJlY2Vp dmUgYSBib2R5IG9mOg0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlO VDE2ICAgIFNlc3Npb25JZDsgLy8gUmV0dXJuZWQgZnJvbSBCbG9iT3Blbg0KPiA+ICt9IElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX0NMT1NFX1NFTkRfREFUQTsNCj4gPiArDQo+ID4gKy8vDQo+ID4g Ky8vIENvbW1hbmQgNyAtIEJtY0Jsb2JEZWxldGUNCj4gPiArLy8gTk9URTogVGhpcyBjb21tYW5k IHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgb3BlbiBzZXNzaW9ucyBmb3IgdGhpcyBibG9iDQo+ID4g Ky8vIFRoZSBCbWNCbG9iRGVsZXRlIGNvbW1hbmQgZXhwZWN0cyB0byByZWNlaXZlIGEgYm9keSBv ZjoNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIENIQVI4ICAgIEJsb2JJ ZFtCTE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX0RFTEVURV9TRU5EX0RBVEE7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBDb21tYW5kIDgg LSBCbWNCbG9iU3RhdA0KPiA+ICsvLyBUaGlzIGNvbW1hbmQgcmV0dXJucyBzdGF0aXN0aWNzIGFi b3V0IGEgYmxvYi4NCj4gPiArLy8gVGhpcyBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBhIGJv ZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBDSEFSOCAgICBC bG9iSWRbQkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUXTsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNG RVJfQkxPQl9TVEFUX1NFTkRfREFUQTsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4g PiArICBVSU5UMTYgICAgQmxvYlN0YXRlOw0KPiA+ICsgIFVJTlQzMiAgICBTaXplOyAvLyBTaXpl IGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgVUlOVDggICAgIE1ldGFEYXRhTGVuOw0KPiA+ ICsgIFVJTlQ4ICAgICBNZXRhRGF0YVtCTE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+ICt9 IElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfUkVTUE9OU0U7DQo+ID4gKw0KPiA+ICsvLw0K PiA+ICsvLyBDb21tYW5kIDkgLSBCbWNCbG9iU2Vzc2lvblN0YXQNCj4gPiArLy8gUmV0dXJucyBz YW1lIGRhdGEgYXMgQm1jQmxvYlN0YXRlIGV4cGVjdCBmb3IgYSBzZXNzaW9uLCBub3QgYSBibG9i DQo+ID4gKy8vIFRoaXMgY29tbWFuZCBleHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+ ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsN Cj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfU0VORF9EQVRBOw0K PiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQxNiAgICBCbG9iU3RhdGU7 DQo+ID4gKyAgVUlOVDMyICAgIFNpemU7IC8vIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGJsb2INCj4g PiArICBVSU5UOCAgICAgTWV0YURhdGFMZW47DQo+ID4gKyAgVUlOVDggICAgIE1ldGFEYXRhW0JM T0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0Jf U0VTU0lPTl9TVEFUX1JFU1BPTlNFOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCAx MCAtIEJtY0Jsb2JXcml0ZU1ldGENCj4gPiArLy8gVGhlIEJtY0Jsb2JXcml0ZU1ldGEgY29tbWFu ZCBleHBlY3RzIHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ID4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsNCj4gPiArICBVSU5UMzIgICAgT2Zm c2V0Ow0KPiA+ICsgIFVJTlQ4ICAgICBEYXRhW0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfTUVUQV9TRU5EX0RBVEE7DQo+ID4g Kw0KPiA+ICsjZGVmaW5lIElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX01FVEFfUkVTUE9O U0UgIE5VTEwNCj4gPiArDQo+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBDYWxjdWxhdGUgQ1JDLTE2LUNDSVRUIHdpdGggcG9seSBvZiAweDEwMjENCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgRGF0YSAgICAgICAgICAgICAgVGhlIHRhcmdldCBkYXRhLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICAgICAgIFRoZSB0YXJnZXQgZGF0YSBzaXplLg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIFVJTlQxNiAgICAgVGhlIENSQzE2IHZhbHVlLg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtDYWxjdWxhdGVDcmMxNkNjaXR0ICgNCj4gPiAr ICBJTiBVSU5UOCAgKkRhdGEsDQo+ID4gKyAgSU4gVUlOVE4gIERhdGFTaXplDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZG9lcyBibG9iIHRyYW5zZmVy IG92ZXIgSVBNSSBjb21tYW5kLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBTdWJDb21tYW5k ICAgICAgICBUaGUgc3BlY2lmaWMgc3ViLWNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQNCj4gYXMgcGFy dCBvZg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBibG9iIHRyYW5z ZmVyIG9wZXJhdGlvbi4NCj4gPiArICBAcGFyYW1baW5dICBTZW5kRGF0YSAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlDQo+IGRhdGEgdG8gYmUg c2VudC4NCj4gPiArICBAcGFyYW1baW5dICBTZW5kRGF0YVNpemUgICAgICBUaGUgc2l6ZSBvZiB0 aGUgZGF0YSB0byBiZSBzZW50LCBpbiBieXRlcy4NCj4gPiArICBAcGFyYW1bb3V0XSBSZXNwb25z ZURhdGEgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0aGUgcmVzcG9uc2UNCj4g ZGF0YSB3aWxsIGJlIHN0b3JlZC4NCj4gPiArICBAcGFyYW1bb3V0XSBSZXNwb25zZURhdGFTaXpl ICBBIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgaG9sZCB0aGUNCj4gc2l6ZSBvZiB0 aGUgcmVzcG9uc2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHJl Y2VpdmVkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgU3Vj Y2Vzc2Z1bGx5IHNlbmRzIGJsb2IgZGF0YS4NCj4gPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTICAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuDQo+ID4gKyAgQHJldHZhbCBFRklfUFJP VE9DT0xfRVJST1IgICAgIENvbW11bmljYXRpb24gZXJyb3JzLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0NSQ19FUlJPUiAgICAgICAgICBEYXRhIGludGVncml0eSBjaGVja3MgZmFpbC4NCj4gPiArICBA cmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAo DQo+ID4gKyAgSU4gIFVJTlQ4ICAgU3ViQ29tbWFuZCwNCj4gPiArICBJTiAgVUlOVDggICAqU2Vu ZERhdGEsDQo+ID4gKyAgSU4gIFVJTlQzMiAgU2VuZERhdGFTaXplLA0KPiA+ICsgIE9VVCBVSU5U OCAgICpSZXNwb25zZURhdGEsDQo+ID4gKyAgT1VUIFVJTlQzMiAgKlJlc3BvbnNlRGF0YVNpemUN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2 ZXMgdGhlIGNvdW50IG9mIGJsb2IgdHJhbnNmZXJzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQ0KPiBJ UE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgQ291bnQgICAgICAgVGhlIG51 bWJlciBvZiBhY3RpdmUgYmxvYnMNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIG51bWJlciBvZiBhY3RpdmUNCj4g YmxvYnMuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9j Y3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJH ZXRDb3VudCAoDQo+ID4gKyAgT1VUIFVJTlQzMiAgKkNvdW50DQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZW51bWVyYXRlcyBibG9iIHRyYW5zZmVycyBh dmFpbGFibGUgdGhyb3VnaCB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICAgIEJsb2JJbmRleCAgICAgICBUaGUgMC1iYXNlZCBJbmRleCBvZiB0aGUgYmxvYiB0byBlbnVt ZXJhdGUNCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxvYklkICAgICAgICAgIFRoZSBJRCBv ZiB0aGUgYmxvYg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg ICAgIFN1Y2Nlc3NmdWxseSBlbnVtZXJhdGVkIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3Ro ZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAoDQo+ID4gKyAgSU4g IFVJTlQzMiAgQmxvYkluZGV4LA0KPiA+ICsgIE9VVCBDSEFSOCAgICpCbG9iSWQNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBv cGVuIGEgc2Vzc2lvbiBmb3IgYSBzcGVjaWZpYyBibG9iDQo+ID4gKyAgaWRlbnRpZmllZCBieSBp dHMgSUQsIHVzaW5nIHRoZSBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAg QmxvYklkICAgICAgICAgIFRoZSBJRCBvZiB0aGUgYmxvYiB0byBvcGVuDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgICAgIEZsYWdzICAgICAgICAgICBGbGFncyB0byBjb250cm9sIGhvdyB0aGUgYmxv YiBpcyBvcGVuZWQNCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgU2Vzc2lvbklkICAgICAgIEEg dW5pcXVlIHNlc3Npb24gaWRlbnRpZmllcg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBvcGVuZWQgdGhlIGJsb2IuDQo+ID4gKyAg QHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVyT3BlbiAoDQo+ID4g KyAgSU4gIENIQVI4ICAgKkJsb2JJZCwNCj4gPiArICBJTiAgVUlOVDE2ICBGbGFncywNCj4gPiAr ICBPVVQgVUlOVDE2ICAqU2Vzc2lvbklkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIGEgYmxvYiBvdmVyIHRoZSBJUE1JLg0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBzZXNz aW9uIElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBibG9iIGZyb20g d2hpY2ggdG8gc3RhcnQNCj4gcmVhZGluZw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBSZXF1 ZXN0ZWRTaXplICAgVGhlIGxlbmd0aCBvZiBkYXRhIHRvIHJlYWQNCj4gPiArICBAcGFyYW1bb3V0 XSAgICAgICAgRGF0YSAgICAgICAgICAgIERhdGEgcmVhZCBmcm9tIHRoZSBibG9iDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJl YWQgZnJvbSB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAg ICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lw bWlCbG9iVHJhbnNmZXJSZWFkICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4g KyAgSU4gIFVJTlQzMiAgT2Zmc2V0LA0KPiA+ICsgIElOICBVSU5UMzIgIFJlcXVlc3RlZFNpemUs DQo+ID4gKyAgT1VUIFVJTlQ4ICAgKkRhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byBhIGJsb2Igb3ZlciB0aGUgSVBNSS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAgICBUaGUgc2Vz c2lvbiBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiBCbG9iT3Blbg0KPiA+ICsgIEBwYXJh bVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUgYmxvYiBmcm9t IHdoaWNoIHRvIHN0YXJ0DQo+IHdyaXRpbmcNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgRGF0 YSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSB0byB3cml0ZQ0KPiA+ICsgIEBwYXJh bVtpbl0gICAgICAgICBXcml0ZUxlbmd0aCAgICAgVGhlIGxlbmd0aCB0byB3cml0ZQ0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB3 cm90ZSB0byB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAg ICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lw bWlCbG9iVHJhbnNmZXJXcml0ZSAoDQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+ ICsgIElOICBVSU5UMzIgIE9mZnNldCwNCj4gPiArICBJTiAgVUlOVDggICAqRGF0YSwNCj4gPiAr ICBJTiAgVUlOVDMyICBXcml0ZUxlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgZGF0YSB0byBhIGJsb2Igb3ZlciB0aGUgSVBNSS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAgICAgVGhlIHNl c3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4gPiArICBAcGFy YW1baW5dICAgICAgICAgQ29tbWl0RGF0YUxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gY29t bWl0IHRvIHRoZQ0KPiBibG9iDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIENvbW1pdERhdGEg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGNvbW1pdA0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWwgY29tbWl0IHRvIHRoZSBi bG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Ig b2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2Zl ckNvbW1pdCAoDQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBVSU5U OCAgIENvbW1pdERhdGFMZW5ndGgsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgKkNvbW1pdERhdGENCj4g PiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjbG9zZSBhIHNl c3Npb24gYXNzb2NpYXRlZCB3aXRoIGEgYmxvYiB0cmFuc2ZlciBvdmVyIHRoZSBJUE1JLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBzZXNzaW9u IElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2Igd2FzIGNsb3NlZC4NCj4g PiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVk DQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJDbG9zZSAo DQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHNwZWNpZmljIGJsb2IgaWRlbnRpZmll ZCBieSBpdHMgSUQgb3ZlciB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICAgIEJsb2JJZCAgICAgICAgICBUaGUgQmxvYklkIHRvIGJlIGRlbGV0ZWQNCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgZGVsZXRl ZC4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9j Y3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJE ZWxldGUgKA0KPiA+ICsgIElOICBDSEFSOCAgKkJsb2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSBzcGVj aWZpYyBibG9iIGlkZW50aWZpZWQgYnkgQmxvYklkIGZyb20NCj4gYW4gSVBNSS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUgQmxvYiBJRCB0byBn YXRoZXIgc3RhdGlzdGljcyBmb3INCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxvYlN0YXRl ICAgICAgIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0g ICAgICAgIFNpemUgICAgICAgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAg QHBhcmFtW291dF0gICAgICAgIE1ldGFkYXRhTGVuZ3RoICBMZW5ndGggb2YgdGhlIG9wdGlvbmFs IG1ldGFkYXRhDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIE1ldGFkYXRhICAgICAgICBPcHRp b25hbCBibG9iLXNwZWNpZmljIG1ldGFkYXRhDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2Igc3RhdGlzdGljcyB3ZXJlIHN1Y2Nlc3NmdWxs eQ0KPiBnYXRoZXJlZC4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAg IEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlC bG9iVHJhbnNmZXJTdGF0ICgNCj4gPiArICBJTiAgQ0hBUjggICAqQmxvYklkLA0KPiA+ICsgIE9V VCBVSU5UMTYgICpCbG9iU3RhdGUsDQo+ID4gKyAgT1VUIFVJTlQzMiAgKlNpemUsDQo+ID4gKyAg T1VUIFVJTlQ4ICAgKk1ldGFkYXRhTGVuZ3RoLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpNZXRhZGF0 YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHF1ZXJ5 IHRoZSBzdGF0dXMgb2YgYSBibG9iIHRyYW5zZmVyIHNlc3Npb24gaW4gYW4gSVBNSS4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAgICBUaGUgSUQgb2YgdGhl IHNlc3Npb24gdG8gZ2F0aGVyIHN0YXRpc3RpY3MgZm9yDQo+ID4gKyAgQHBhcmFtW291dF0gICAg ICAgIEJsb2JTdGF0ZSAgICAgICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYmxvYg0KPiA+ICsg IEBwYXJhbVtvdXRdICAgICAgICBTaXplICAgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUg YmxvYg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBNZXRhZGF0YUxlbmd0aCAgTGVuZ3RoIG9m IHRoZSBvcHRpb25hbCBtZXRhZGF0YQ0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBNZXRhZGF0 YSAgICAgICAgT3B0aW9uYWwgYmxvYi1zcGVjaWZpYyBtZXRhZGF0YQ0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIHN0YXRpc3RpY3Mgd2Vy ZSBzdWNjZXNzZnVsbHkNCj4gZ2F0aGVyZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAg ICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0YXQgKA0KPiA+ICsgIElOICBVSU5UMTYg IFNlc3Npb25JZCwNCj4gPiArICBPVVQgVUlOVDE2ICAqQmxvYlN0YXRlLA0KPiA+ICsgIE9VVCBV SU5UMzIgICpTaXplLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpNZXRhZGF0YUxlbmd0aCwNCj4gPiAr ICBPVVQgVUlOVDggICAqTWV0YWRhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgbWV0YWRhdGEgdG8gYSBibG9iIGFzc29jaWF0ZWQgd2l0 aCBhIHNlc3Npb24gaW4gYW4NCj4gSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICAgIFNlc3Npb25JZCAgICAgICBUaGUgSUQgb2YgdGhlIHNlc3Npb24gdG8gd3JpdGUgbWV0YWRh dGEgZm9yDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zm c2V0IG9mIHRoZSBtZXRhZGF0YSB0byB3cml0ZSB0bw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAg ICBEYXRhICAgICAgICAgICAgVGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIG1ldGFkYXRhDQo+ID4g KyAgQHBhcmFtW2luXSAgICAgICAgIFdyaXRlTGVuZ3RoICAgICBUaGUgbGVuZ3RoIHRvIHdyaXRl DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJs b2IgbWV0YWRhdGEgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLg0KPiA+ICsgIEByZXR2YWwgT3Ro ZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlcldyaXRlTWV0YSAoDQo+ID4gKyAgSU4g IFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBVSU5UMzIgIE9mZnNldCwNCj4gPiArICBJ TiAgVUlOVDggICAqRGF0YSwNCj4gPiArICBJTiAgVUlOVDMyICBXcml0ZUxlbmd0aA0KPiA+ICsg ICk7DQo+ID4gZGlmZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVy c2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuc2YNCj4gZXJEeGUuYw0KPiBiL0Zl YXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBt aUJsb2JUcmFuc2YNCj4gZXJEeGUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMC4uYjhhMmRiMTkzYg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4g Yi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhl L0lwbWlCbG9iVHJhbnNmDQo+IGVyRHhlLmMNCj4gPiBAQCAtMCwwICsxLDg3MiBAQA0KPiA+ICsv KiogQGZpbGUNCj4gPiArDQo+ID4gKyAgSVBNSSBCbG9iIFRyYW5zZmVyIGRyaXZlcg0KPiA+ICsN Cj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZG SUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gPiArDQo+ID4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICsjaW5jbHVkZSA8UHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oPg0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgIkludGVybmFsSXBtaUJsb2JUcmFuc2Zlci5oIg0KPiA+ICsNCj4gPiArI2RlZmluZSBC TE9CX1RSQU5TRkVSX0RFQlVHICBERUJVR19NQU5BR0VBQklMSVRZDQo+ID4gKw0KPiA+ICtTVEFU SUMgQ09OU1QgRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MDQo+IG1JcG1pQmxvYlRy YW5zZmVyID0gew0KPiA+ICsNCj4gKEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9H RVRfQ09VTlQpKklwbWlCbG9iVHJhbnNmZXJHZQ0KPiB0Q291bnQsDQo+ID4gKw0KPiAoRURLSUlf SVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0VOVU1FUkFURSkqSXBtaUJsb2JUcmFuc2ZlckVu DQo+IHVtZXJhdGUsDQo+ID4gKw0KPiAoRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09M X09QRU4pKklwbWlCbG9iVHJhbnNmZXJPcGVuLA0KPiA+ICsgIChFREtJSV9JUE1JX0JMT0JfVFJB TlNGRVJfUFJPVE9DT0xfUkVBRCkqSXBtaUJsb2JUcmFuc2ZlclJlYWQsDQo+ID4gKw0KPiAoRURL SUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1dSSVRFKSpJcG1pQmxvYlRyYW5zZmVyV3Jp dGUsDQo+ID4gKw0KPiAoRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0NPTU1JVCkq SXBtaUJsb2JUcmFuc2ZlckNvbQ0KPiBtaXQsDQo+ID4gKw0KPiAoRURLSUlfSVBNSV9CTE9CX1RS QU5TRkVSX1BST1RPQ09MX0NMT1NFKSpJcG1pQmxvYlRyYW5zZmVyQ2xvc2UsDQo+ID4gKw0KPiAo RURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0RFTEVURSkqSXBtaUJsb2JUcmFuc2Zl ckRlbGV0ZSwNCj4gPiArICAoRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NUQVQp KklwbWlCbG9iVHJhbnNmZXJTdGF0LA0KPiA+ICsNCj4gKEVES0lJX0lQTUlfQkxPQl9UUkFOU0ZF Ul9QUk9UT0NPTF9TRVNTSU9OX1NUQVQpKklwbWlCbG9iVHJhbnNmZXINCj4gU2Vzc2lvblN0YXQs DQo+ID4gKw0KPiAoRURLSUlfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1dSSVRFX01FVEEp KklwbWlCbG9iVHJhbnNmZXINCj4gV3JpdGVNZXRhDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBDYWxjdWxhdGUgQ1JDLTE2LUNDSVRUIHdpdGggcG9seSBvZiAweDEwMjENCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgRGF0YSAgICAgICAgICAgICAgVGhlIHRhcmdldCBkYXRhLg0K PiA+ICsgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICAgICAgIFRoZSB0YXJnZXQgZGF0YSBzaXpl Lg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFVJTlQxNiAgICAgVGhlIENSQzE2IHZhbHVlLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtDYWxjdWxhdGVDcmMxNkNjaXR0ICgNCj4g PiArICBJTiBVSU5UOCAgKkRhdGEsDQo+ID4gKyAgSU4gVUlOVE4gIERhdGFTaXplDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAgSW5kZXg7DQo+ID4gKyAgVUlOVE4gICAgQml0SW5k ZXg7DQo+ID4gKyAgVUlOVDE2ICAgQ3JjOw0KPiA+ICsgIFVJTlQxNiAgIFBvbHk7DQo+ID4gKyAg Qk9PTEVBTiAgWG9yRmxhZzsNCj4gPiArDQo+ID4gKyAgQ3JjICAgICA9IDB4RkZGRjsNCj4gPiAr ICBQb2x5ICAgID0gMHgxMDIxOw0KPiA+ICsgIFhvckZsYWcgPSBGQUxTRTsNCj4gPiArDQo+ID4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKERhdGFTaXplICsgMik7ICsrSW5kZXgpIHsNCj4g PiArICAgIGZvciAoQml0SW5kZXggPSAwOyBCaXRJbmRleCA8IDg7ICsrQml0SW5kZXgpIHsNCj4g PiArICAgICAgWG9yRmxhZyA9IChDcmMgJiAweDgwMDApID8gVFJVRSA6IEZBTFNFOw0KPiA+ICsg ICAgICBDcmMgICA8PD0gMTsNCj4gPiArICAgICAgaWYgKChJbmRleCA8IERhdGFTaXplKSAmJiAo RGF0YVtJbmRleF0gJiAoMSA8PCAoNyAtIEJpdEluZGV4KSkpKSB7DQo+ID4gKyAgICAgICAgQ3Jj Kys7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmIChYb3JGbGFnID09IFRSVUUp IHsNCj4gPiArICAgICAgICBDcmMgXj0gUG9seTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChCTE9CX1RSQU5TRkVSX0RFQlVHLCAiJWE6 IENSQy0xNi1DQ0lUVCAleFxuIiwgX19mdW5jX18sDQo+IENyYykpOw0KPiA+ICsNCj4gPiArICBy ZXR1cm4gQ3JjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9u IGRvZXMgYmxvYiB0cmFuc2ZlciBvdmVyIElQTUkgY29tbWFuZC4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgU3ViQ29tbWFuZCAgICAgICAgVGhlIHNwZWNpZmljIHN1Yi1jb21tYW5kIHRvIGJl IGV4ZWN1dGVkDQo+IGFzIHBhcnQgb2YNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgYmxvYiB0cmFuc2ZlciBvcGVyYXRpb24uDQo+ID4gKyAgQHBhcmFtW2luXSAgU2Vu ZERhdGEgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0aGF0IGNvbnRhaW5z IHRoZQ0KPiBkYXRhIHRvIGJlIHNlbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgU2VuZERhdGFTaXpl ICAgICAgVGhlIHNpemUgb2YgdGhlIGRhdGEgdG8gYmUgc2VudCwgaW4gYnl0ZXMuDQo+ID4gKyAg QHBhcmFtW291dF0gUmVzcG9uc2VEYXRhICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2hl cmUgdGhlIHJlc3BvbnNlDQo+IGRhdGEgd2lsbCBiZSBzdG9yZWQuDQo+ID4gKyAgQHBhcmFtW291 dF0gUmVzcG9uc2VEYXRhU2l6ZSAgQSBwb2ludGVyIHRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIGhv bGQgdGhlDQo+IHNpemUgb2YgdGhlIHJlc3BvbnNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YSByZWNlaXZlZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW5kcyBibG9iIGRhdGEuDQo+ID4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICBDb21tdW5pY2F0aW9uIGVycm9ycy4N Cj4gPiArICBAcmV0dmFsIEVGSV9DUkNfRVJST1IgICAgICAgICAgRGF0YSBpbnRlZ3JpdHkgY2hl Y2tzIGZhaWwuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgIEFuIGVycm9y IG9jY3VycmVkDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxv YlRyYW5zZmVyU2VuZElwbWkgKA0KPiA+ICsgIElOICBVSU5UOCAgIFN1YkNvbW1hbmQsDQo+ID4g KyAgSU4gIFVJTlQ4ICAgKlNlbmREYXRhLA0KPiA+ICsgIElOICBVSU5UMzIgIFNlbmREYXRhU2l6 ZSwNCj4NCj4gU2hvdWxkIGRlc2NyaWJlIFNlbmREYXRhIGFuZCBTZW5kRGF0YVNpemUgYXMgT1BU SU9OQUwNCj4NCj4gPiArICBPVVQgVUlOVDggICAqUmVzcG9uc2VEYXRhLA0KPiA+ICsgIE9VVCBV SU5UMzIgICpSZXNwb25zZURhdGFTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgIENvbXBsZXRpb25Db2RlOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg IENyYzsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBPZW5bM107DQo+ID4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgKklwbWlTZW5kRGF0YTsNCj4gPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICBJcG1pU2VuZERhdGFTaXplOw0KPiA+ICsgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICpJcG1pUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICpNb2RpZmllZFJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICBJcG1pUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArICBJUE1JX0JMT0JfVFJB TlNGRVJfSEVBREVSICBIZWFkZXI7DQo+ID4gKw0KPg0KPiBTaG91bGQgdmFsaWRhdGUgdGhlIHBv aW50ZXIgb2YgaW5wdXQgYXJndW1lbnRzOiBTZW5kRGF0YSwgUmVzcG9uc2VEYXRhLA0KPiBSZXNw b25zZURhdGFTaXplLg0KPg0KPiA+ICsgIENyYyA9IDA7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gUHJlcGVuZCB0aGUgcHJvcGVyIGhlYWRlciB0byB0aGUgU2VuZERhdGENCj4gPiArICAv Lw0KPiA+ICsgIElwbWlTZW5kRGF0YVNpemUgPSAoc2l6ZW9mIChJUE1JX0JMT0JfVFJBTlNGRVJf SEVBREVSKSk7DQo+ID4gKyAgaWYgKFNlbmREYXRhU2l6ZSkgew0KPiA+ICsgICAgSXBtaVNlbmRE YXRhU2l6ZSArPSBzaXplb2YgKENyYykgKyAoc2l6ZW9mIChVSU5UOCkgKiBTZW5kRGF0YVNpemUp Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSXBtaVNlbmREYXRhID0gQWxsb2NhdGVaZXJvUG9v bCAoSXBtaVNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKElwbWlTZW5kRGF0YSA9PSBOVUxMKSB7 DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBIZWFkZXIuT0VOWzBdICAgICA9IE9wZW5CbWNPZW5bMF07DQo+ID4gKyAgSGVhZGVy Lk9FTlsxXSAgICAgPSBPcGVuQm1jT2VuWzFdOw0KPiA+ICsgIEhlYWRlci5PRU5bMl0gICAgID0g T3BlbkJtY09lblsyXTsNCj4gPiArICBIZWFkZXIuU3ViQ29tbWFuZCA9IFN1YkNvbW1hbmQ7DQo+ ID4gKyAgQ29weU1lbSAoSXBtaVNlbmREYXRhLCAmSGVhZGVyLCBzaXplb2YNCj4gKElQTUlfQkxP Ql9UUkFOU0ZFUl9IRUFERVIpKTsNCj4gPiArICBpZiAoU2VuZERhdGFTaXplKSB7DQo+DQo+IGlm IChTZW5kRGF0YVNpemUgIT0gMCkNCj4NCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBDYWxjdWxh dGUgdGhlIENyYyBvZiB0aGUgc2VuZCBkYXRhDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgQ3JjID0g Q2FsY3VsYXRlQ3JjMTZDY2l0dCAoU2VuZERhdGEsIFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgICBD b3B5TWVtIChJcG1pU2VuZERhdGEgKyBzaXplb2YgKElQTUlfQkxPQl9UUkFOU0ZFUl9IRUFERVIp LA0KPiAmQ3JjLCBzaXplb2YgKFVJTlQxNikpOw0KPiA+ICsgICAgQ29weU1lbSAoSXBtaVNlbmRE YXRhICsgc2l6ZW9mIChJUE1JX0JMT0JfVFJBTlNGRVJfSEVBREVSKSArDQo+IHNpemVvZiAoVUlO VDE2KSwgU2VuZERhdGEsIFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBE RUJVR19DT0RFX0JFR0lOICgpOw0KPiA+ICsgIERFQlVHICgoQkxPQl9UUkFOU0ZFUl9ERUJVRywg IiVhOiBJbnB1dHM6XG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgIERFQlVHICgoQkxPQl9UUkFOU0ZF Ul9ERUJVRywgIiVhOiBTZW5kRGF0YVNpemU6ICUwMnhcbkRhdGE6ICIsDQo+IF9fZnVuY19fLCBT ZW5kRGF0YVNpemUpKTsNCj4gPiArICBVSU5UOCAgaTsNCj4gPiArDQo+ID4gKyAgZm9yIChpID0g MDsgaSA8IFNlbmREYXRhU2l6ZTsgaSsrKSB7DQo+ID4gKyAgICBERUJVRyAoKEJMT0JfVFJBTlNG RVJfREVCVUcsICIlMDJ4IiwgKigoVUlOVDggKilTZW5kRGF0YSArIGkpKSk7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBERUJVRyAoKEJMT0JfVFJBTlNGRVJfREVCVUcsICJcbiIpKTsNCj4gPiAr ICBERUJVRyAoKEJMT0JfVFJBTlNGRVJfREVCVUcsICIlYTogSXBtaVNlbmREYXRhU2l6ZTogJTAy eFxuRGF0YToNCj4gIiwgX19mdW5jX18sIElwbWlTZW5kRGF0YVNpemUpKTsNCj4gPiArICBmb3Ig KGkgPSAwOyBpIDwgSXBtaVNlbmREYXRhU2l6ZTsgaSsrKSB7DQo+ID4gKyAgICBERUJVRyAoKEJM T0JfVFJBTlNGRVJfREVCVUcsICIlMDJ4IiwgKigoVUlOVDggKilJcG1pU2VuZERhdGEgKw0KPiBp KSkpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChCTE9CX1RSQU5TRkVSX0RFQlVH LCAiXG4iKSk7DQo+ID4gKyAgREVCVUdfQ09ERV9FTkQgKCk7DQo+ID4gKw0KPiA+ICsgIElwbWlS ZXNwb25zZURhdGFTaXplID0gKCpSZXNwb25zZURhdGFTaXplICsNCj4gUFJPVE9DT0xfUkVTUE9O U0VfT1ZFUkhFQUQpOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSWYgZXhwZWN0aW5nIGRhdGEgdG8g YmUgcmV0dXJuZWQsIHdlIGhhdmUgdG8gYWxzbyBhY2NvdW50IGZvciB0aGUgMTYgYml0DQo+IENS Qw0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKCpSZXNwb25zZURhdGFTaXplKSB7DQo+DQo+IGlmICgq UmVzcG9uc2VEYXRhU2l6ZSAhPSAwKQ0KPg0KPiA+ICsgICAgSXBtaVJlc3BvbnNlRGF0YVNpemUg Kz0gc2l6ZW9mIChDcmMpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSXBtaVJlc3BvbnNlRGF0 YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKElwbWlSZXNwb25zZURhdGFTaXplKTsNCj4gPiArICBpZiAo SXBtaVJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pU3VibWl0Q29t bWFuZCAoDQo+ID4gKyAgICAgICAgICAgICBJUE1JX05FVEZOX09FTSwNCj4gPiArICAgICAgICAg ICAgIElQTUlfT0VNX0JMT0JfVFJBTlNGRVJfQ01ELA0KPiA+ICsgICAgICAgICAgICAgKFZPSUQg KilJcG1pU2VuZERhdGEsDQo+ID4gKyAgICAgICAgICAgICBJcG1pU2VuZERhdGFTaXplLA0KPiA+ ICsgICAgICAgICAgICAgKFZPSUQgKilJcG1pUmVzcG9uc2VEYXRhLA0KPiA+ICsgICAgICAgICAg ICAgJklwbWlSZXNwb25zZURhdGFTaXplDQo+ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsNCj4g PiArICBGcmVlUG9vbCAoSXBtaVNlbmREYXRhKTsNCj4gPiArICBNb2RpZmllZFJlc3BvbnNlRGF0 YSA9IElwbWlSZXNwb25zZURhdGE7DQo+ID4gKw0KPiA+ICsgIERFQlVHX0NPREVfQkVHSU4gKCk7 DQo+ID4gKyAgREVCVUcgKChCTE9CX1RSQU5TRkVSX0RFQlVHLCAiJWE6IElQTUkgUmVzcG9uc2U6 XG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgIERFQlVHICgoQkxPQl9UUkFOU0ZFUl9ERUJVRywgIiVh OiBSZXNwb25zZURhdGFTaXplOiAlMDJ4XG5EYXRhOg0KPiAiLCBfX2Z1bmNfXywgSXBtaVJlc3Bv bnNlRGF0YVNpemUpKTsNCj4gPiArICBVSU5UOCAgaTsNCj4gPiArDQo+ID4gKyAgZm9yIChpID0g MDsgaSA8IElwbWlSZXNwb25zZURhdGFTaXplOyBpKyspIHsNCj4gPiArICAgIERFQlVHICgoQkxP Ql9UUkFOU0ZFUl9ERUJVRywgIiUwMngiLCAqKE1vZGlmaWVkUmVzcG9uc2VEYXRhICsNCj4gaSkp KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoQkxPQl9UUkFOU0ZFUl9ERUJVRywg IlxuIikpOw0KPiA+ICsgIERFQlVHX0NPREVfRU5EICgpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgQ29tcGxldGlvbkNvZGUgPSAqTW9kaWZpZWRSZXNwb25zZURhdGE7DQo+ID4g KyAgaWYgKENvbXBsZXRpb25Db2RlICE9IElQTUlfQ09NUF9DT0RFX05PUk1BTCkgew0KPiA+ICsg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBSZXR1cm5pbmcgYmVjYXVzZSBDb21wbGV0aW9u Q29kZSA9DQo+IDB4JXhcbiIsIF9fZnVuY19fLCBDb21wbGV0aW9uQ29kZSkpOw0KPiA+ICsgICAg RnJlZVBvb2wgKElwbWlSZXNwb25zZURhdGEpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9QUk9UT0NP TF9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIFN0cmlwIGNvbXBsZXRpb24gY29k ZSwgd2UgYXJlIGRvbmUgd2l0aCBpdA0KPiA+ICsgIE1vZGlmaWVkUmVzcG9uc2VEYXRhICA9IE1v ZGlmaWVkUmVzcG9uc2VEYXRhICsgc2l6ZW9mDQo+IChDb21wbGV0aW9uQ29kZSk7DQo+ID4gKyAg SXBtaVJlc3BvbnNlRGF0YVNpemUgLT0gc2l6ZW9mIChDb21wbGV0aW9uQ29kZSk7DQo+ID4gKw0K PiA+ICsgIC8vIENoZWNrIE9FTiBjb2RlIGFuZCB2ZXJpZnkgaXQgbWF0Y2hlcyB0aGUgT3BlbkJN QyBPRU4NCj4gPiArICBDb3B5TWVtIChPZW4sIE1vZGlmaWVkUmVzcG9uc2VEYXRhLCBzaXplb2Yg KE9wZW5CbWNPZW4pKTsNCj4gPiArICBpZiAoQ29tcGFyZU1lbSAoT2VuLCBPcGVuQm1jT2VuLCBz aXplb2YgKE9wZW5CbWNPZW4pKSAhPSAwKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoSXBtaVJlc3Bv bnNlRGF0YSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX1BST1RPQ09MX0VSUk9SOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgaWYgKElwbWlSZXNwb25zZURhdGFTaXplID09IHNpemVvZiAoT3BlbkJt Y09lbikpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZXJlIHdh cyBubyByZXNwb25zZSBkYXRhIHNlbnQuIFRoaXMgaXMgbm90IGFuIGVycm9yLg0KPiA+ICsgICAg Ly8gU29tZSBtZXNzYWdlcyBkbyBub3QgcmVxdWlyZSBhIHJlc3BvbnNlLg0KPiA+ICsgICAgLy8N Cj4gPiArICAgICpSZXNwb25zZURhdGFTaXplID0gMDsNCj4gPiArICAgIEZyZWVQb29sIChJcG1p UmVzcG9uc2VEYXRhKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgICAvLyBOb3cg d2UgbmVlZCB0byB2YWxpZGF0ZSB0aGUgQ1JDIHRoZW4gc2VuZCB0aGUgUmVzcG9uc2UgYm9keSBi YWNrDQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIC8vIFN0cmlwIHRoZSBPRU4sIHdlIGFyZSBk b25lIHdpdGggaXQgbm93DQo+ID4gKyAgICBNb2RpZmllZFJlc3BvbnNlRGF0YSAgPSBNb2RpZmll ZFJlc3BvbnNlRGF0YSArIHNpemVvZiAoT2VuKTsNCj4gPiArICAgIElwbWlSZXNwb25zZURhdGFT aXplIC09IHNpemVvZiAoT2VuKTsNCj4gPiArICAgIC8vIFRoZW4gdmFsaWRhdGUgdGhlIENyYw0K PiA+ICsgICAgQ29weU1lbSAoJkNyYywgTW9kaWZpZWRSZXNwb25zZURhdGEsIHNpemVvZiAoQ3Jj KSk7DQo+ID4gKyAgICBNb2RpZmllZFJlc3BvbnNlRGF0YSAgPSBNb2RpZmllZFJlc3BvbnNlRGF0 YSArIHNpemVvZiAoQ3JjKTsNCj4gPiArICAgIElwbWlSZXNwb25zZURhdGFTaXplIC09IHNpemVv ZiAoQ3JjKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoQ3JjID09IENhbGN1bGF0ZUNyYzE2Q2NpdHQg KE1vZGlmaWVkUmVzcG9uc2VEYXRhLA0KPiBJcG1pUmVzcG9uc2VEYXRhU2l6ZSkpIHsNCj4gPiAr ICAgICAgQ29weU1lbSAoUmVzcG9uc2VEYXRhLCBNb2RpZmllZFJlc3BvbnNlRGF0YSwNCj4gSXBt aVJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgICAgICBDb3B5TWVtIChSZXNwb25zZURhdGFTaXpl LCAmSXBtaVJlc3BvbnNlRGF0YVNpemUsIHNpemVvZg0KPiAoSXBtaVJlc3BvbnNlRGF0YVNpemUp KTsNCj4gPiArICAgICAgRnJlZVBvb2wgKElwbWlSZXNwb25zZURhdGEpOw0KPiA+ICsgICAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBGcmVlUG9v bCAoSXBtaVJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgICAgIHJldHVybiBFRklfQ1JDX0VSUk9SOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhp cyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGNvdW50IG9mIGJsb2IgdHJhbnNmZXJzIGF2YWlsYWJs ZSB0aHJvdWdoIHRoZQ0KPiBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAg Q291bnQgICAgICAgVGhlIG51bWJlciBvZiBhY3RpdmUgYmxvYnMNCj4gPiArDQo+ID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIG51 bWJlciBvZiBhY3RpdmUNCj4gYmxvYnMuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAg ICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0lwbWlCbG9iVHJhbnNmZXJHZXRDb3VudCAoDQo+ID4gKyAgT1VUIFVJTlQzMiAgKkNvdW50DQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFVJTlQ4 ICAgICAgICpSZXNwb25zZURhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6 ZTsNCj4gPiArDQo+ID4gKyAgaWYgKENvdW50ID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXNwb25zZURh dGFTaXplID0gc2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfR0VUX0NPVU5UX1JFU1BPTlNF KTsNCj4gPiArICBSZXNwb25zZURhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VE YXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0 dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21t YW5kR2V0Q291bnQsIE5VTEwsIDAsIChVSU5UOCAqKVJlc3BvbnNlRGF0YSwNCj4gJlJlc3BvbnNl RGF0YVNpemUpOw0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAq Q291bnQgPSAoKElQTUlfQkxPQl9UUkFOU0ZFUl9HRVRfQ09VTlRfUkVTUE9OU0UNCj4gKilSZXNw b25zZURhdGEpLT5CbG9iQ291bnQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBGcmVlUG9vbCAo UmVzcG9uc2VEYXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGVudW1lcmF0ZXMgYmxvYiB0cmFuc2ZlcnMgYXZh aWxhYmxlIHRocm91Z2ggdGhlIElQTUkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAg ICBCbG9iSW5kZXggICAgICAgVGhlIDAtYmFzZWQgSW5kZXggb2YgdGhlIGJsb2IgdG8gZW51bWVy YXRlDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUgSUQgb2Yg dGhlIGJsb2INCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg ICBTdWNjZXNzZnVsbHkgZW51bWVyYXRlZCB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVy ICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJFbnVtZXJhdGUgKA0KPiA+ICsgIElOICBV SU5UMzIgIEJsb2JJbmRleCwNCj4gPiArICBPVVQgQ0hBUjggICAqQmxvYklkDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBVSU5UOCAg ICpTZW5kRGF0YTsNCj4gPiArICBVSU5UOCAgICpSZXNwb25zZURhdGE7DQo+ID4gKyAgVUlOVDMy ICBTZW5kRGF0YVNpemU7DQo+ID4gKyAgVUlOVDMyICBSZXNwb25zZURhdGFTaXplOw0KPiA+ICsN Cj4gPiArICBpZiAoQmxvYklkID09IE5VTEwpIHsNCj4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0K PiA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPg0KPiBTaG91bGQgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBmb3IgaW5wdXQgdmFsaWRhdGlvbj8NCj4NCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX0VOVU1FUkFURV9SRVNQT05TRSk7DQo+ID4gKyAgUmVzcG9uc2VEYXRhICAgICA9IEFsbG9j YXRlWmVyb1Bvb2wgKFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgIGlmIChSZXNwb25zZURhdGEg PT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBGb3JtYXQgc2VuZCBkYXRhDQo+ID4gKyAg Ly8NCj4gPiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX0VOVU1FUkFURV9TRU5EX0RBVEEpOw0KPiA+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRl WmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsN Cj4NCj4gRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+DQo+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX0VOVU1FUkFURV9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID5CbG9iSW5kZXgg PSBCbG9iSW5kZXg7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5k SXBtaQ0KPiAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRFbnVtZXJhdGUsIFNlbmREYXRhLCBT ZW5kRGF0YVNpemUsIChVSU5UOA0KPiAqKVJlc3BvbnNlRGF0YSwgJlJlc3BvbnNlRGF0YVNpemUp Ow0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBBc2NpaVN0ckNw eVMgKEJsb2JJZCwgUmVzcG9uc2VEYXRhU2l6ZSwgKENIQVI4ICopUmVzcG9uc2VEYXRhKTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rp b24gaXMgZGVzaWduZWQgdG8gb3BlbiBhIHNlc3Npb24gZm9yIGEgc3BlY2lmaWMgYmxvYg0KPiA+ ICsgIGlkZW50aWZpZWQgYnkgaXRzIElELCB1c2luZyB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUgSUQgb2YgdGhlIGJsb2IgdG8g b3Blbg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBGbGFncyAgICAgICAgICAgRmxhZ3MgdG8g Y29udHJvbCBob3cgdGhlIGJsb2IgaXMgb3BlbmVkDQo+DQo+IEl0IHdvdWxkIGJlIGdvb2QgaWYg d2UgY2FuIGxpc3Qgb3V0IGFsbCBmbGFnIGRlZmluaXRpb25zIGhlcmUuIEFjdHVhbGx5LA0KPiBJ IGRvbid0IGtub3cgaG93IHRvIGlucHV0IGZvciB0aGlzIGFyZ3VtZW50Lg0KPg0KPiBBcmUgdGhl eSBCTE9CX09QRU5fRkxBR19SRUFEIGFuZCBCTE9CX09QRU5fRkxBR19XUklURSBpbiB0aGUNCj4g cHJpdmF0ZQ0KPiBpbmNsdWRlIGhlYWRlcj8NCj4NCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAg U2Vzc2lvbklkICAgICAgIEEgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllcg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBvcGVuZWQg dGhlIGJsb2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBl cnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRy YW5zZmVyT3BlbiAoDQo+ID4gKyAgSU4gIENIQVI4ICAgKkJsb2JJZCwNCj4gPiArICBJTiAgVUlO VDE2ICBGbGFncywNCj4gPiArICBPVVQgVUlOVDE2ICAqU2Vzc2lvbklkDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpTZW5k RGF0YTsNCj4gPiArICBVSU5UOCAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJTlQzMiAg ICAgIFNlbmREYXRhU2l6ZTsNCj4gPiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFTaXplOw0K PiA+ICsgIENIQVI4ICAgICAgICpCbG9iU2VhcmNoOw0KPiA+ICsgIFVJTlQzMiAgICAgIE51bUJs b2JzOw0KPiA+ICsgIFVJTlQxNiAgICAgIEluZGV4Ow0KPiA+ICsgIEJPT0xFQU4gICAgIEJsb2JG b3VuZDsNCj4gPiArDQo+ID4gKyAgaWYgKChCbG9iSWQgPT0gTlVMTCkgfHwgKFNlc3Npb25JZCA9 PSBOVUxMKSkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQmVmb3JlIG9wZW5pbmcgYSBibG9iLCBu ZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cw0KPg0KPiBJJ20gdGhpbmtpbmcgdGhlIGNhbGxlciBz ZXF1ZW5jZSBoZXJlLiBUeXBpY2FsbHksIHRoZSBjYWxsZXIgbWlnaHQgY2hlY2sNCj4gdGhlIHBy ZXNlbmNlIG9mIGEgYmxvYiBieSBjYWxsaW5nIEdldENvdW50ICgpIGFuZCBFbnVtZXJhdGUgKCkg YmVmb3JlDQo+IG9wZW5pbmcgYSBibG9iIHNlc3Npb24uIFRoaXMgY2hlY2sgaGVyZSBjb3VsZCB3 YXN0ZSB0aW1lLiBPciwgZG8gd2UgY2FsbA0KPiBvcGVuIGRpcmVjdGlvbiB0aGUgYmxvYiBzZXNz aW9uIHdpdGhvdXQgcHJlLWNoZWNraW5nPw0KPg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0g SXBtaUJsb2JUcmFuc2ZlckdldENvdW50ICgmTnVtQmxvYnMpOw0KPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykgfHwgKE51bUJsb2JzID09IDApKSB7DQo+ID4gKyAgICBpZiAoU3RhdHVzID09 IEVGSV9VTlNVUFBPUlRFRCkgew0KPiA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQ291bGQgbm90IGZp bmQgYW55IGJsb2JzOiAlclxuIiwgX19mdW5jX18sDQo+IFN0YXR1cykpOw0KPiA+ICsgICAgcmV0 dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBCbG9iU2VhcmNoID0g QWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChDSEFSOCkgKg0KPiBCTE9CX01BWF9EQVRBX1BFUl9Q QUNLRVQpOw0KPiA+ICsgIGlmIChCbG9iU2VhcmNoID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVy biBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2JGb3Vu ZCA9IEZBTFNFOw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bUJsb2JzOyBJbmRl eCsrKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyRW51bWVyYXRlIChJbmRl eCwgQmxvYlNlYXJjaCk7DQo+ID4gKyAgICBpZiAoKCFFRklfRVJST1IgKFN0YXR1cykpICYmIChB c2NpaVN0ckNtcCAoQmxvYlNlYXJjaCwgQmxvYklkKSA9PSAwKSkgew0KPiA+ICsgICAgICBCbG9i Rm91bmQgPSBUUlVFOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYg KCFCbG9iRm91bmQpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQ291bGQg bm90IGZpbmQgYSBibG9iIHRoYXQgbWF0Y2hlcyAlYVxuIiwNCj4gX19mdW5jX18sIEJsb2JJZCkp Ow0KPiA+ICsgICAgRnJlZVBvb2wgKEJsb2JTZWFyY2gpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9O T1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0gc2l6 ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9PUEVOX1JFU1BPTlNFKTsNCj4gPiArICBS ZXNwb25zZURhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ ID4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZv cm1hdCBzZW5kIGRhdGENCj4gPiArICAvLw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZiAo KChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9PUEVOX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+ RmxhZ3MpICsgKChBc2NpaVN0ckxlbiAoQmxvYklkKSkgKiBzaXplb2YgKENIQVI4KSkgKyBzaXpl b2YNCj4gKENIQVI4KTsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChT ZW5kRGF0YVNpemUpOw0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBBc2Np aVN0ckNweVMgKCgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfT1BFTl9TRU5EX0RBVEENCj4gKilT ZW5kRGF0YSktPkJsb2JJZCwgQXNjaWlTdHJTaXplIChCbG9iSWQpIC8gc2l6ZW9mIChDSEFSOCks IEJsb2JJZCk7DQo+ID4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9PUEVOX1NFTkRfREFU QSAqKVNlbmREYXRhKS0+RmxhZ3MgPQ0KPiBGbGFnczsNCj4gPiArICAvLyBhcHBlbmQgbnVsbCBj aGFyIHRvIFNlbmREYXRhDQo+ID4gKyAgU2VuZERhdGFbU2VuZERhdGFTaXplLTFdID0gMDsNCj4N Cj4gTml0OiBhZGQgc3BhY2VzIGFyb3VuZCBtaW51cyAoLSkgZm9yIHJlYWRhYmlsaXR5Lg0KPg0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkgKElwbWlCbG9i VHJhbnNmZXJTdWJjb21tYW5kT3BlbiwNCj4gU2VuZERhdGEsIFNlbmREYXRhU2l6ZSwgKFVJTlQ4 ICopUmVzcG9uc2VEYXRhLCAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiArICAgICpTZXNzaW9uSWQgPSAoKElQTUlfQkxPQl9UUkFOU0ZF Ul9CTE9CX09QRU5fUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5TZXNzaW9uSWQ7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPiArICBGcmVl UG9vbCAoU2VuZERhdGEpOw0KPiA+ICsgIEZyZWVQb29sIChCbG9iU2VhcmNoKTsNCj4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0 aW9uIHJlYWRzIGRhdGEgZnJvbSBhIGJsb2Igb3ZlciB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICAgIFNlc3Npb25JZCAgICAgICBUaGUgc2Vzc2lvbiBJRCByZXR1cm5l ZCBmcm9tIGEgY2FsbCB0bw0KPiBCbG9iT3Blbg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBP ZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUgYmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0 DQo+IHJlYWRpbmcNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgUmVxdWVzdGVkU2l6ZSAgIFRo ZSBsZW5ndGggb2YgZGF0YSB0byByZWFkDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIERhdGEg ICAgICAgICAgICBEYXRhIHJlYWQgZnJvbSB0aGUgYmxvYg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZWFkIGZyb20gdGhlIGJs b2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBv Y2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVy UmVhZCAoDQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPg0KPiBUaGVyZSBtaWdodCBi ZSBkZXZlbG9wZXIgbWlzdGFrZSB3aGVuIGV4ZWN1dGluZyB0aGUgdHJhbnNmZXIgYmVmb3JlDQo+ IG9wZW5pbmcgdGhlIHNlc3Npb24uIEhvdyBkbyB3ZSBoYW5kbGUgdGhpcyBmYWlsdXJlIHBhdGg/ IERvIHdlIG5lZWQgdG8NCj4gbWFpbnRhaW4gYSBzdGF0ZSBtYWNoaW5lIGZvciB0aGF0Pw0KPg0K PiBUaGlzIGNvbW1lbnQgYXBwbGllcyB0byBvdGhlciBmdW5jdGlvbnMgYXMgd2VsbC4NCj4NCj4g PiArICBJTiAgVUlOVDMyICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgUmVxdWVzdGVkU2l6 ZSwNCj4gPiArICBPVVQgVUlOVDggICAqRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4gKyAg VUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICBTZW5kRGF0YVNp emU7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArDQo+ID4gKyAg aWYgKERhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX0FCT1JURUQ7DQo+DQo+IFNob3VsZCByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSPw0KPg0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IFJlcXVl c3RlZFNpemUgKiBzaXplb2YgKFVJTlQ4KTsNCj4NCj4gU2hvdWxkIGNoZWNrIHRoZSBSZXF1ZXN0 ZWRTaXplIGFnYWluc3QgQkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUPw0KPg0KPiA+ICsgIFJlc3Bv bnNlRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChSZXNwb25zZURhdGFTaXplKTsNCj4gPiAr ICBpZiAoUmVzcG9uc2VEYXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0 IHNlbmQgZGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mIChJUE1J X0JMT0JfVFJBTlNGRVJfQkxPQl9SRUFEX1NFTkRfREFUQSk7DQo+ID4gKyAgU2VuZERhdGEgICAg ID0gQWxsb2NhdGVaZXJvUG9vbCAoU2VuZERhdGFTaXplKTsNCj4gPiArICBpZiAoU2VuZERhdGEg PT0gTlVMTCkgew0KPg0KPiBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4NCj4gPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICgoSVBN SV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID5TZXNz aW9uSWQgICAgID0gU2Vzc2lvbklkOw0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0Jf UkVBRF9TRU5EX0RBVEEgKilTZW5kRGF0YSktPk9mZnNldA0KPiA9IE9mZnNldDsNCj4gPiArICAo KElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1JFQURfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+ UmVxdWVzdGVkU2l6ZSA9IFJlcXVlc3RlZFNpemU7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElw bWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRSZWFkLA0K PiBTZW5kRGF0YSwgU2VuZERhdGFTaXplLCAoVUlOVDggKilSZXNwb25zZURhdGEsICZSZXNwb25z ZURhdGFTaXplKTsNCj4gPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAg Q29weU1lbSAoRGF0YSwgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9SRUFEX1JFU1BPTlNFDQo+ ICopUmVzcG9uc2VEYXRhKS0+RGF0YSwgUmVzcG9uc2VEYXRhU2l6ZSAqIHNpemVvZiAoVUlOVDgp KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+ ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byBhIGJs b2Igb3ZlciB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIFNlc3Np b25JZCAgICAgICBUaGUgc2Vzc2lvbiBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiBCbG9i T3Blbg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNl dCBvZiB0aGUgYmxvYiBmcm9tIHdoaWNoIHRvIHN0YXJ0DQo+IHdyaXRpbmcNCj4gPiArICBAcGFy YW1baW5dICAgICAgICAgRGF0YSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSB0byB3 cml0ZQ0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBXcml0ZUxlbmd0aCAgICAgVGhlIGxlbmd0 aCB0byB3cml0ZQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg ICAgIFN1Y2Nlc3NmdWxseSB3cm90ZSB0byB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVy ICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJXcml0ZSAoDQo+ID4gKyAgSU4gIFVJTlQx NiAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBVSU5UMzIgIE9mZnNldCwNCj4gPiArICBJTiAgVUlO VDggICAqRGF0YSwNCj4gPiArICBJTiAgVUlOVDMyICBXcml0ZUxlbmd0aA0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqU2Vu ZERhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgU2VuZERhdGFTaXplOw0KPiA+ICsgIFVJTlQzMiAg ICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKw0KPiA+ICsgIGlmIChEYXRhID09IE5VTEwpIHsN Cj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPiArICAvLw0KPiA+ICsg IFNlbmREYXRhU2l6ZSA9IHNpemVvZiAoU2Vzc2lvbklkKSArIHNpemVvZiAoT2Zmc2V0KSArIFdy aXRlTGVuZ3RoOw0KPg0KPiBTaG91bGQgd2UgY2hlY2sgd2hldGhlciBvciBub3QgdGhlIFdyaXRl TGVuZ3RoIGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbg0KPiBCTE9CX01BWF9EQVRBX1BFUl9QQUNL RVQ/DQo+DQo+ID4gKyAgU2VuZERhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoU2VuZERhdGFT aXplKTsNCj4gPiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKChJUE1JX0JMT0Jf VFJBTlNGRVJfQkxPQl9XUklURV9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID5TZXNzaW9uSWQg PSBTZXNzaW9uSWQ7DQo+ID4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9TRU5E X0RBVEEgKilTZW5kRGF0YSktPk9mZnNldA0KPiA9IE9mZnNldDsNCj4gPiArICBDb3B5TWVtICgo KElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+ RGF0YSwgRGF0YSwgc2l6ZW9mIChVSU5UOCkgKiBXcml0ZUxlbmd0aCk7DQo+ID4gKw0KPiA+ICsg IFJlc3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+ICsgIFN0YXR1cyAgICAgICAgICAgPSBJcG1pQmxv YlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3JpdGUsIFNl bmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsDQo+ICZSZXNwb25zZURhdGFTaXplKTsNCj4gPiAr DQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgZGF0YSB0 byBhIGJsb2Igb3ZlciB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAg IFNlc3Npb25JZCAgICAgICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8N Cj4gQmxvYk9wZW4NCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgQ29tbWl0RGF0YUxlbmd0aCBU aGUgbGVuZ3RoIG9mIGRhdGEgdG8gY29tbWl0IHRvIHRoZQ0KPiBibG9iDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgICAgIENvbW1pdERhdGEgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGNv bW1pdA0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1 Y2Nlc3NmdWwgY29tbWl0IHRvIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAg ICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlckNvbW1pdCAoDQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vz c2lvbklkLA0KPiA+ICsgIElOICBVSU5UOCAgIENvbW1pdERhdGFMZW5ndGgsDQo+ID4gKyAgSU4g IFVJTlQ4ICAgKkNvbW1pdERhdGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ID4gKyAgVUlOVDggICAgICAgKlNlbmREYXRhOw0KPiA+ICsgIFVJTlQzMiAg ICAgIFNlbmREYXRhU2l6ZTsNCj4gPiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFTaXplOw0K PiA+ICsNCj4gPiArICBpZiAoQ29tbWl0RGF0YSA9PSBOVUxMKSB7DQo+DQo+IEFjY29yZGluZyB0 byB0aGUgc3BlYyBodHRwczovL2dpdGh1Yi5jb20vb3BlbmJtYy9waG9zcGhvci1pcG1pLWJsb2Jz LA0KPiB0aGUgY29tbWl0IGRhdGEgaXMgYmxvY2stc3BlY2lmaWMgb3B0aW9uYWwuDQo+DQo+IEZv ciBpbnN0YW5jZSwgdGhlIGNvbW1pdCBkYXRhIGlzIG9wdGlvbmFsIGZvciBTTUJJT1MgYmxvYiB0 cmFuc2Zlci4gTG9vaw0KPiBhdCBodHRwczovL2dpdGh1Yi5jb20vb3BlbmJtYy9zbWJpb3MtbWRy DQo+DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBGb3JtYXQgc2VuZCBkYXRhDQo+ID4gKyAgLy8NCj4g PiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YgKFNlc3Npb25JZCkgKyBzaXplb2YgKENvbW1pdERh dGFMZW5ndGgpICsNCj4gQ29tbWl0RGF0YUxlbmd0aDsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBB bGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBO VUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0NPTU1JVF9TRU5EX0RBVEEg KilTZW5kRGF0YSktDQo+ID5TZXNzaW9uSWQgICAgICAgID0gU2Vzc2lvbklkOw0KPiA+ICsgICgo SVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfQ09NTUlUX1NFTkRfREFUQSAqKVNlbmREYXRhKS0NCj4g PkNvbW1pdERhdGFMZW5ndGggPSBDb21taXREYXRhTGVuZ3RoOw0KPiA+ICsgIENvcHlNZW0gKCgo SVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfQ09NTUlUX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+ Q29tbWl0RGF0YSwgQ29tbWl0RGF0YSwgc2l6ZW9mIChVSU5UOCkgKg0KPiBDb21taXREYXRhTGVu Z3RoKTsNCj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFuc2ZlclN1 YmNvbW1hbmRDb21taXQsIFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsDQo+ICZSZXNwb25z ZURhdGFTaXplKTsNCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0 aW9uIGNsb3NlIGEgc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggYSBibG9iIHRyYW5zZmVyIG92ZXIg dGhlIElQTUkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAg ICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3 YXMgY2xvc2VkLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4g ZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JU cmFuc2ZlckNsb3NlICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVUlOVDggICAgICAgKlNl bmREYXRhOw0KPiA+ICsgIFVJTlQzMiAgICAgIFNlbmREYXRhU2l6ZTsNCj4gPiArICBVSU5UMzIg ICAgICBSZXNwb25zZURhdGFTaXplOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1h dCBzZW5kIGRhdGENCj4gPiArICAvLw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZiAoSVBN SV9CTE9CX1RSQU5TRkVSX0JMT0JfQ0xPU0VfU0VORF9EQVRBKTsNCj4gPiArICBTZW5kRGF0YSAg ICAgPSBBbGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+ICsgIGlmIChTZW5kRGF0 YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0NMT1NFX1NFTkRf REFUQSAqKVNlbmREYXRhKS0NCj4gPlNlc3Npb25JZCA9IFNlc3Npb25JZDsNCj4gPiArDQo+ID4g KyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElwbWlCbG9i VHJhbnNmZXJTZW5kSXBtaSAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRDbG9zZSwNCj4gU2Vu ZERhdGEsIFNlbmREYXRhU2l6ZSwgTlVMTCwgJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsNCj4g PiArICBGcmVlUG9vbCAoU2VuZERhdGEpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhIHNwZWNpZmlj IGJsb2IgaWRlbnRpZmllZCBieSBpdHMgSUQgb3ZlciB0aGUgSVBNSS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUgQmxvYklkIHRvIGJlIGRlbGV0 ZWQNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUg YmxvYiB3YXMgZGVsZXRlZC4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAg ICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lw bWlCbG9iVHJhbnNmZXJEZWxldGUgKA0KPiA+ICsgIElOICBDSEFSOCAgKkJsb2JJZA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAg ICAqU2VuZERhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgU2VuZERhdGFTaXplOw0KPiA+ICsgIFVJ TlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKw0KPiA+ICsgIGlmIChCbG9iSWQgPT0g TlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8v DQo+ID4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfQkxP Ql9ERUxFVEVfU0VORF9EQVRBKTsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Q b29sIChTZW5kRGF0YVNpemUpOw0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBBc2NpaVN0ckNweVMgKCgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfREVMRVRFX1NFTkRfREFU QQ0KPiAqKVNlbmREYXRhKS0+QmxvYklkLCBBc2NpaVN0ckxlbiAoQmxvYklkKSwgQmxvYklkKTsN Cj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4gKw0KPiA+ICsgIFN0YXR1 cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRE ZWxldGUsDQo+IFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsICZSZXNwb25zZURhdGFTaXpl KTsNCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHJldHJp ZXZlIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBibG9iIGlkZW50aWZpZWQgYnkgQmxvYklkIGZy b20NCj4gYW4gSVBNSS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAg ICAgICAgICBUaGUgQmxvYiBJRCB0byBnYXRoZXIgc3RhdGlzdGljcyBmb3INCj4gPiArICBAcGFy YW1bb3V0XSAgICAgICAgQmxvYlN0YXRlICAgICAgIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBi bG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAgICBTaXplIGluIGJ5 dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIE1ldGFkYXRhTGVuZ3Ro ICBMZW5ndGggb2YgdGhlIG9wdGlvbmFsIG1ldGFkYXRhDQo+ID4gKyAgQHBhcmFtW291dF0gICAg ICAgIE1ldGFkYXRhICAgICAgICBPcHRpb25hbCBibG9iLXNwZWNpZmljIG1ldGFkYXRhDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2Igc3Rh dGlzdGljcyB3ZXJlIHN1Y2Nlc3NmdWxseQ0KPiBnYXRoZXJlZC4NCj4gPiArICBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTdGF0ICgNCj4gPiArICBJTiAgQ0hB UjggICAqQmxvYklkLA0KPiA+ICsgIE9VVCBVSU5UMTYgICpCbG9iU3RhdGUsDQo+ID4gKyAgT1VU IFVJTlQzMiAgKlNpemUsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhTGVuZ3RoLA0KPiA+ ICsgIE9VVCBVSU5UOCAgICpNZXRhZGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4gKyAgVUlO VDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICBTZW5kRGF0YVNpemU7 DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArDQo+ID4gKyAgaWYg KChCbG9iSWQgPT0gTlVMTCkgfHwgKEJsb2JTdGF0ZSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSBOVUxM KSB8fA0KPiAoTWV0YWRhdGFMZW5ndGggPT0gTlVMTCkpIHsNCj4NCj4gQ291bGQgd2UgbWFrZSBN ZXRhZGF0YSAqKnBlciBzcGVjKiosIE1ldGFkYXRhTGVuZ3RoLCBhbmQgU2l6ZSBvcHRpb25hbD8N Cj4gV2UgY291bGQgbm90IGNhcmUgdGhlbSByYXRoZXIgdGhhbiBCbG9iU3RhdGUuDQo+DQo+IFRo aXMgY29tbWVudCBhcHBsaWVzIHRvIElwbWlCbG9iVHJhbnNmZXJTZXNzaW9uU3RhdCAoKSBhcyB3 ZWxsLg0KPg0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmIChNZXRhZGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICBBU1NFUlQg KEZBTFNFKTsNCj4gPiArICAgIHJldHVybiBFRklfQUJPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX1NUQVRfUkVTUE9OU0UpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YSAgICAgPSBBbGxvY2F0ZVpl cm9Qb29sIChSZXNwb25zZURhdGFTaXplKTsNCj4gPiArICBpZiAoUmVzcG9uc2VEYXRhID09IE5V TEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8vDQo+ ID4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mIChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFU X1NFTkRfREFUQSk7DQo+ID4gKyAgU2VuZERhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoU2Vu ZERhdGFTaXplKTsNCj4gPiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQXNjaWlT dHJDcHlTICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfU0VORF9EQVRBDQo+ICopU2Vu ZERhdGEpLT5CbG9iSWQsIEJMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVCwgQmxvYklkKTsNCj4gPiAr DQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pIChJcG1pQmxvYlRyYW5z ZmVyU3ViY29tbWFuZFN0YXQsDQo+IFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIChVSU5UOCAqKVJl c3BvbnNlRGF0YSwgJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gKyAgICAqQmxvYlN0YXRlICAgICAgPSAoKElQTUlfQkxPQl9UUkFOU0ZF Ul9CTE9CX1NUQVRfUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5CbG9iU3RhdGU7DQo+ID4g KyAgICAqU2l6ZSAgICAgICAgICAgPSAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRfUkVT UE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5TaXplOw0KPiA+ICsgICAgKk1ldGFkYXRhTGVuZ3Ro ID0gKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFDQo+ICopUmVzcG9uc2VE YXRhKS0+TWV0YURhdGFMZW47DQo+ID4gKw0KPiA+ICsgICAgQ29weU1lbSAoJk1ldGFkYXRhLA0K PiAmKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFICopUmVzcG9uc2VEYXRh KS0NCj4gPk1ldGFEYXRhLCBzaXplb2YgKCgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU1RBVF9S RVNQT05TRQ0KPiAqKVJlc3BvbnNlRGF0YSktPk1ldGFEYXRhKSk7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPiArICBGcmVlUG9vbCAoU2VuZERh dGEpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gcXVlcnkgdGhlIHN0YXR1cyBvZiBhIGJsb2IgdHJhbnNmZXIgc2Vz c2lvbiBpbiBhbiBJUE1JLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lv bklkICAgICAgIFRoZSBJRCBvZiB0aGUgc2Vzc2lvbiB0byBnYXRoZXIgc3RhdGlzdGljcyBmb3IN Cj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgQmxvYlN0YXRlICAgICAgIFRoZSBjdXJyZW50IHN0 YXRlIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAg ICBTaXplIGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIE1l dGFkYXRhTGVuZ3RoICBMZW5ndGggb2YgdGhlIG9wdGlvbmFsIG1ldGFkYXRhDQo+ID4gKyAgQHBh cmFtW291dF0gICAgICAgIE1ldGFkYXRhICAgICAgICBPcHRpb25hbCBibG9iLXNwZWNpZmljIG1l dGFkYXRhDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAg VGhlIGJsb2Igc3RhdGlzdGljcyB3ZXJlIHN1Y2Nlc3NmdWxseQ0KPiBnYXRoZXJlZC4NCj4gPiAr ICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTZXNzaW9uU3Rh dCAoDQo+ID4gKyAgSU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+ICsgIE9VVCBVSU5UMTYgICpC bG9iU3RhdGUsDQo+ID4gKyAgT1VUIFVJTlQzMiAgKlNpemUsDQo+ID4gKyAgT1VUIFVJTlQ4ICAg Kk1ldGFkYXRhTGVuZ3RoLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpNZXRhZGF0YQ0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAq U2VuZERhdGE7DQo+ID4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5U MzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6 ZTsNCj4gPiArDQo+ID4gKyAgaWYgKChCbG9iU3RhdGUgPT0gTlVMTCkgfHwgKFNpemUgPT0gTlVM TCkgfHwgKE1ldGFkYXRhTGVuZ3RoID09IE5VTEwpIHx8DQo+IChNZXRhZGF0YSA9PSBOVUxMKSkg ew0KPiA+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0gc2l6ZW9mDQo+IChJ UE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFKTsNCj4gPiArICBSZXNwb25zZURh dGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYg KFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1hdCBzZW5k IGRhdGENCj4gPiArICAvLw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0KPiAoSVBNSV9C TE9CX1RSQU5TRkVSX0JMT0JfU0VTU0lPTl9TVEFUX1NFTkRfREFUQSk7DQo+ID4gKyAgU2VuZERh dGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoU2VuZERhdGFTaXplKTsNCj4gPiArICBpZiAoU2Vu ZERhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9O X1NUQVRfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+U2Vzc2lvbklkID0gU2Vzc2lvbklkOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlC bG9iVHJhbnNmZXJTdWJjb21tYW5kU2Vzc2lvblN0YXQsIFNlbmREYXRhLCBTZW5kRGF0YVNpemUs IChVSU5UOA0KPiAqKVJlc3BvbnNlRGF0YSwgJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsNCj4g PiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgKkJsb2JTdGF0ZSAgICAg ID0NCj4gKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UgKilS ZXNwb25zZURhdGEpLQ0KPiA+QmxvYlN0YXRlOw0KPiA+ICsgICAgKlNpemUgICAgICAgICAgID0g KChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UNCj4gKilSZXNw b25zZURhdGEpLT5TaXplOw0KPiA+ICsgICAgKk1ldGFkYXRhTGVuZ3RoID0NCj4gKChJUE1JX0JM T0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UgKilSZXNwb25zZURhdGEpLQ0K PiA+TWV0YURhdGFMZW47DQo+ID4gKw0KPiA+ICsgICAgQ29weU1lbSAoJk1ldGFkYXRhLA0KPiAm KChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UNCj4gKilSZXNw b25zZURhdGEpLT5NZXRhRGF0YSwgc2l6ZW9mDQo+ICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9C X1NFU1NJT05fU1RBVF9SRVNQT05TRSAqKVJlc3BvbnNlRGF0YSktDQo+ID5NZXRhRGF0YSkpOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAg RnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBtZXRhZGF0YSB0byBhIGJs b2IgYXNzb2NpYXRlZCB3aXRoIGEgc2Vzc2lvbiBpbiBhbg0KPiBJUE1JLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBJRCBvZiB0aGUgc2Vzc2lv biB0byB3cml0ZSBtZXRhZGF0YSBmb3INCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgT2Zmc2V0 ICAgICAgICAgIFRoZSBvZmZzZXQgb2YgdGhlIG1ldGFkYXRhIHRvIHdyaXRlIHRvDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICAgIERhdGEgICAgICAgICAgICBUaGUgZGF0YSB0byB3cml0ZSB0byB0 aGUgbWV0YWRhdGENCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgV3JpdGVMZW5ndGggICAgIFRo ZSBsZW5ndGggdG8gd3JpdGUNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgICBUaGUgYmxvYiBtZXRhZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uDQo+ ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJl ZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVyV3JpdGVN ZXRhICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4gKyAgSU4gIFVJTlQzMiAg T2Zmc2V0LA0KPiA+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPg0KPiBIb3cgZG8gY2FsbGVycyBr bm93IHRoZSBkYXRhIGZvcm1hdCBvZiBtZXRhZGF0YSBmb3Igd3JpdGluZyBjb3JyZWN0bHk/DQo+ DQo+ID4gKyAgSU4gIFVJTlQzMiAgV3JpdGVMZW5ndGgNCj4NCj4gU2hvdWxkIGNoZWNrIHdpdGgg QkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUDQo+DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpTZW5kRGF0YTsNCj4gPiArICBV SU5UMzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRh U2l6ZTsNCj4gPiArDQo+ID4gKyAgaWYgKERhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgU2VuZERhdGFTaXplID0g c2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9XUklURV9TRU5EX0RBVEEpOw0KPiA+ ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4g KyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JM T0JfV1JJVEVfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+U2Vzc2lvbklkID0gU2Vzc2lvbklk Ow0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfU0VORF9EQVRBICopU2Vu ZERhdGEpLT5PZmZzZXQNCj4gPSBPZmZzZXQ7DQo+ID4gKyAgQ29weU1lbSAoKChJUE1JX0JMT0Jf VFJBTlNGRVJfQkxPQl9XUklURV9TRU5EX0RBVEENCj4gKilTZW5kRGF0YSktPkRhdGEsIERhdGEs IHNpemVvZiAoVUlOVDgpICogV3JpdGVMZW5ndGgpOw0KPiA+ICsNCj4gPiArICBSZXNwb25zZURh dGFTaXplID0gMDsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJ cG1pDQo+IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFdyaXRlTWV0YSwgU2VuZERhdGEsIFNl bmREYXRhU2l6ZSwgTlVMTCwNCj4gJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsNCj4gPiArICBG cmVlUG9vbCAoU2VuZERhdGEpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgaXMgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIEVGSSBpbWFn ZSBlbnRyeSBwb2ludC4gVGhpcyBlbnRyeSBwb2ludCBpcw0KPiA+ICsgIHRoZSBzYW1lIGZvciBV RUZJIEFwcGxpY2F0aW9ucywgVUVGSSBPUyBMb2FkZXJzLCBhbmQgVUVGSSBEcml2ZXJzDQo+IGlu Y2x1ZGluZw0KPiA+ICsgIGJvdGggZGV2aWNlIGRyaXZlcnMgYW5kIGJ1cyBkcml2ZXJzLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxs b2NhdGVkIGhhbmRsZSBmb3IgdGhlIFVFRkkNCj4gaW1hZ2UuDQo+ID4gKyAgQHBhcmFtW2luXSAg U3lzdGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg ICAgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtJcG1pQmxvYlRyYW5zZmVyRHhlRHJpdmVyRW50 cnlQb2ludCAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4g KyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4g PiArICAgICAgICAgICAgICAgICZJbWFnZUhhbmRsZSwNCj4NCj4gTml0OiBUeXBpY2FsbHksIHdl IGNvdWxkIGFsc28gdXNlIGdJbWFnZUhhbmRsZSBpbnN0ZWFkLg0KPg0KPiA+ICsgICAgICAgICAg ICAgICAgJmdFZGtpaUlwbWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAoVk9JRCAqKSZtSXBtaUJsb2JUcmFuc2ZlciwNCj4gPiArICAgICAgICAgICAgICAg IE5VTEwNCj4gPiArICAgICAgICAgICAgICAgICk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0DQo+ IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4 ZS9Vbml0VGVzdC9JcG1pQg0KPiBsb2JUcmFuc2ZlclRlc3RVbml0VGVzdHMuYw0KPiBiL0ZlYXR1 cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRl c3QvSXBtaUINCj4gbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjBmNzI4NTI3YjgNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBt aUJsb2JUcmFuc2ZlckR4ZS9Vbml0VGVzdC9JcG1pQg0KPiBsb2JUcmFuc2ZlclRlc3RVbml0VGVz dHMuYw0KPiA+IEBAIC0wLDAgKzEsMTExMyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArKg0KPiA+ ICsqICBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OLiBBbGwgcmln aHRzIHJlc2VydmVkLg0KPiA+ICsqDQo+ID4gKyogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IENv cHlyaWdodCAoYykgMjAyMi0yMDI0IE5WSURJQSBDT1JQT1JBVElPTg0KPiAmIEFGRklMSUFURVMN Cj4gPiArKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiArKg0KPiA+ICsqKi8NCj4gPiArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KPiA+ICsjaW5jbHVkZSA8 c3RkZGVmLmg+DQo+ID4gKyNpbmNsdWRlIDxzZXRqbXAuaD4NCj4gPiArI2luY2x1ZGUgPHN0ZGlu dC5oPg0KPiA+ICsjaW5jbHVkZSA8Y21vY2thLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8VWVm aS5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gKyNpbmNs dWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFs bG9jYXRpb25MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvSG9zdEJhc2VkVGVzdFN0dWJM aWIvSXBtaVN0dWJMaWIuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VuaXRUZXN0 TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9JcG1pQmxvYlRyYW5zZmVyLmg+DQo+ID4g KyNpbmNsdWRlICIuLi9JbnRlcm5hbElwbWlCbG9iVHJhbnNmZXIuaCINCj4gPiArDQo+ID4gKyNk ZWZpbmUgVU5JVF9URVNUX05BTUUgICAgICJJUE1JIEJsb2IgVHJhbnNmZXIgVW5pdCBUZXN0cyIN Cj4gPiArI2RlZmluZSBVTklUX1RFU1RfVkVSU0lPTiAgIjEuMCINCj4gPiArDQo+ID4gK1VJTlQ4 ICBJbnZhbGlkQ29tcGxldGlvbltdID0gew0KPiA+ICsgIDB4QzAsICAgICAgICAgICAgIC8vIENv bXBsZXRpb25Db2RlDQo+ID4gKyAgMHhDRiwgMHhDMiwgMHgwMCwgLy8gT3BlbkJNQyBPRU4NCj4g PiArfTsNCj4gPiArI2RlZmluZSBJTlZBTElEX0NPTVBMRVRJT05fU0laRSAgNCAqIHNpemVvZihV SU5UOCkNCj4gPiArDQo+ID4gK1VJTlQ4ICBOb0RhdGFSZXNwb25zZVtdID0gew0KPiA+ICsgIDB4 MDAsICAgICAgICAgICAgIC8vIENvbXBsZXRpb25Db2RlDQo+ID4gKyAgMHhDRiwgMHhDMiwgMHgw MCwgLy8gT3BlbkJNQyBPRU4NCj4gPiArfTsNCj4gPiArI2RlZmluZSBOT19EQVRBX1JFU1BPTlNF X1NJWkUgIDQgKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICtVSU5UOCAgQmFkT2VuUmVzcG9u c2VbXSA9IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ ICsgIDB4RkYsIDB4QzIsIDB4MDAsIC8vIFdyb25nIE9FTg0KPiA+ICt9Ow0KPiA+ICsjZGVmaW5l IEJBRF9PRU5fUkVTUE9OU0VfU0laRSAgNCAqIHNpemVvZihVSU5UOCkNCj4gPiArDQo+ID4gK1VJ TlQ4ICBCYWRDcmNSZXNwb25zZVtdID0gew0KPiA+ICsgIDB4MDAsICAgICAgICAgICAgICAgICAg IC8vIENvbXBsZXRpb25Db2RlDQo+ID4gKyAgMHhDRiwgMHhDMiwgMHgwMCwgICAgICAgLy8gT3Bl bkJNQyBPRU4NCj4gPiArICAweDAwLCAweDAwLCAgICAgICAgICAgICAvLyBDUkMNCj4gPiArICAw eDAxLCAweDAwLCAweDAwLCAweDAwLCAvLyBEYXRhDQo+ID4gK307DQo+ID4gKyNkZWZpbmUgQkFE X0NSQ19SRVNQT05TRV9TSVpFICAxMCAqIHNpemVvZihVSU5UOCkNCj4gPiArDQo+ID4gK1VJTlQ4 ICBWYWxpZE5vRGF0YVJlc3BvbnNlW10gPSB7DQo+ID4gKyAgMHgwMCwgICAgICAgICAgICAgLy8g Q29tcGxldGlvbkNvZGUNCj4gPiArICAweENGLCAweEMyLCAweDAwLCAvLyBPcGVuQk1DIE9FTg0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSAg NCAqIHNpemVvZihVSU5UOCkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFy aWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0 LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQg aXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBv ZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2Vz IHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBo YXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBV TklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFp bGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiAr R29vZENyYyAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBVSU5UOCAgIERhdGFbNV0gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4 NzgsIDB4OTAgfTsNCj4gPiArICBVSU5UTiAgIERhdGFTaXplOw0KPiA+ICsgIFVJTlQxNiAgQ3Jj Ow0KPiA+ICsNCj4gPiArICBEYXRhU2l6ZSA9IHNpemVvZiAoRGF0YSk7DQo+ID4gKw0KPiA+ICsg IENyYyA9IENhbGN1bGF0ZUNyYzE2Q2NpdHQgKERhdGEsIERhdGFTaXplKTsNCj4gPiArDQo+ID4g KyAgVVRfQVNTRVJUX0VRVUFMIChDcmMsIDB4QjkyOCk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVT VF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFy aWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0 LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQg aXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBv ZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2Vz IHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBo YXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBV TklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFp bGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiAr QmFkQ3JjICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIFVJTlQ4ICAgRGF0YVs1XSA9IHsgMHgxMiwgMHgzNCwgMHg1NiwgMHg3 OCwgMHg5MCB9Ow0KPiA+ICsgIFVJTlROICAgRGF0YVNpemU7DQo+ID4gKyAgVUlOVDE2ICBDcmM7 DQo+ID4gKw0KPiA+ICsgIERhdGFTaXplID0gc2l6ZW9mIChEYXRhKTsNCj4gPiArDQo+ID4gKyAg Q3JjID0gQ2FsY3VsYXRlQ3JjMTZDY2l0dCAoRGF0YSwgRGF0YVNpemUpOw0KPiA+ICsNCj4gPiAr ICBVVF9BU1NFUlRfTk9UX0VRVUFMIChDcmMsIDB4MzQwOSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRf VEVTVF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0g IENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVz Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGgg dmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0 ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBh bmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0 eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNh c2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0K PiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVz dCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFs ICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMg ZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4g PiArU2VuZElwbWlCYWRDb21wbGV0aW9uICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAg Q29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFZPSUQgICAgICAgICpSZXNwb25zZURh dGE7DQo+ID4gKyAgVUlOVDMyICAgICAgKlJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9j YXRlWmVyb1Bvb2wNCj4gKElOVkFMSURfQ09NUExFVElPTl9TSVpFKTsNCj4gPiArICBSZXNwb25z ZURhdGFTaXplICAgID0gKFVJTlQzMiAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMy KSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJkludmFsaWRDb21wbGV0 aW9uLA0KPiBJTlZBTElEX0NPTVBMRVRJT05fU0laRSk7DQo+ID4gKw0KPiA+ICsgIE1vY2tJcG1p U3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gSU5WQUxJRF9D T01QTEVUSU9OX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRh ID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoKlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsg IFN0YXR1cyAgICAgICA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFu c2ZlclN1YmNvbW1hbmRHZXRDb3VudCwgTlVMTCwgMCwgUmVzcG9uc2VEYXRhLA0KPiBSZXNwb25z ZURhdGFTaXplKTsNCj4gPiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVz LCBFRklfUFJPVE9DT0xfRVJST1IpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1 bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgRnJlZVBv b2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlv bmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMg YW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkg Zm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRo b3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250 ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFu ZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1Jf VEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+ICsqKi8N Cj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2VuZElwbWlOb0RhdGFS ZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBWT0lEICAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJTlQz MiAgICAgICpSZXNwb25zZURhdGFTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4g PiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sDQo+IChO T19EQVRBX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgICAgPSAoVUlO VDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPiArICBDb3B5TWVt IChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmTm9EYXRhUmVzcG9uc2UsDQo+IE5PX0RBVEFfUkVTUE9O U0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAo KFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gTk9fREFUQV9SRVNQT05TRV9TSVpFLCBF RklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAg cmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIFJlc3BvbnNlRGF0YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoTm9E YXRhUmVzcG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxvYlRyYW5zZmVyU2Vu ZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEwsIDAsIFJl c3BvbnNlRGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VS VF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VSVF9F UVVBTCAoKlJlc3BvbnNlRGF0YVNpemUsIDApOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9u c2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAg RnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAg W09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFt ZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUt ZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVz dCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2 YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxl dGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1Rf RVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+ ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2VuZElwbWlC YWRPZW5SZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBWT0lEICAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsg IFVJTlQzMiAgICAgICpSZXNwb25zZURhdGFTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1 czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4g Kw0KPiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29s DQo+IChCQURfT0VOX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgICAg PSAoVUlOVDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPiArICBD b3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmQmFkT2VuUmVzcG9uc2UsDQo+IEJBRF9PRU5f UkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29t bWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gQkFEX09FTl9SRVNQT05TRV9T SVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIFJlc3BvbnNlRGF0YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVv ZiAoQmFkT2VuUmVzcG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxvYlRyYW5z ZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEws IDAsIFJlc3BvbnNlRGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIFVU X0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1BST1RPQ09MX0VSUk9SKTsNCj4gPiAr ICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgRnJlZVBvb2wgKFJlc3Bv bnNlRGF0YVNpemUpOw0KPiA+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+ICsgIHJl dHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBA cGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRo YXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSBy ZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGEN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlz IGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVz cG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBh bGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRo ZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3Nl cnRpb24gaGFzIGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiAr RUZJQVBJDQo+ID4gK1NlbmRJcG1pQmFkQ3JjUmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVT VF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVk9JRCAgICAgICAg KlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICAqUmVzcG9uc2VEYXRhU2l6ZTsNCj4g PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25z ZVJlc3VsdHMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJ TlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChCQURfQ1JDX1JFU1BPTlNFX1NJWkUp KTsNCj4gPiArICBSZXNwb25zZURhdGFTaXplICAgID0gKFVJTlQzMiAqKUFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoVUlOVDMyKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0 cywgJkJhZENyY1Jlc3BvbnNlLA0KPiBCQURfQ1JDX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsNCj4g PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25z ZVJlc3VsdHMsDQo+IEJBRF9DUkNfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJS T1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXNwb25zZURhdGEgPSAo VUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEJhZENyY1Jlc3BvbnNlKSk7DQo+ID4g KyAgU3RhdHVzICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+IChJcG1pQmxvYlRy YW5zZmVyU3ViY29tbWFuZEdldENvdW50LCBOVUxMLCAwLCBSZXNwb25zZURhdGEsDQo+IFJlc3Bv bnNlRGF0YVNpemUpOw0KPiA+ICsNCj4gPiArICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0 dXMsIEVGSV9DUkNfRVJST1IpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRz KTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgRnJlZVBvb2wg KFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK1VJTlQ4ICBWYWxpZEdldENvdW50UmVzcG9uc2VbXSA9IHsNCj4gPiArICAw eDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4 QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHhBNCwgMHg3OCwgICAgICAg ICAgICAgLy8gQ1JDDQo+ID4gKyAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gRGF0YQ0KPiA+ ICt9Ow0KPiA+ICsjZGVmaW5lIFZBTElEX0dFVF9DT1VOVF9SRVNQT05TRV9TSVpFICAxMCAqIHNp emVvZihVSU5UOCkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBh cmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2Ug cmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMg dGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUg dGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQg bWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29t cGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0K PiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2VuZElw bWlWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250 ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsN Cj4gPiArICBVSU5UMzIgICAgICAqUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ID4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgPSBOVUxM Ow0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mDQo+IChWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSkpOw0KPiA+ ICsgIFJlc3BvbnNlRGF0YVNpemUgICAgPSAoVUlOVDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6 ZW9mIChVSU5UMzIpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFs aWRHZXRDb3VudFJlc3BvbnNlLA0KPiBWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSk7DQo+ ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9j a1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJWkUsIEVGSV9T VUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1 cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg UmVzcG9uc2VEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWYWxpZEdldENvdW50UmVz cG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkN Cj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEwsIDAsIFJlc3BvbnNl RGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFU VVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVz cG9uc2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4g KyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBh cmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2Ug cmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMg dGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUg dGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQg bWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29t cGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0K PiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArR2V0Q291 bnRWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250 ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsg IFVJTlQzMiAgICAgIENvdW50Ow0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1 bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgQ291bnQgPSAwOw0KPiA+ICsNCj4gPiArICBNb2Nr UmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChW QUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSkpOw0KPiA+ICsgIENvcHlNZW0gKE1vY2tSZXNw b25zZVJlc3VsdHMsICZWYWxpZEdldENvdW50UmVzcG9uc2UsDQo+IFZBTElEX0dFVF9DT1VOVF9S RVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21t YW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiBWQUxJRF9HRVRfQ09VTlRfUkVT UE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyR2V0Q291bnQgKCZDb3Vu dCk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NV Q0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoQ291bnQsIDEpOw0KPiA+ICsgIEZyZWVQ b29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NF RDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArVUlOVDggIFZhbGlkRW51bWVyYXRlUmVzcG9uc2VbXSA9 IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHg4MSwg MHgxMywgICAgICAgICAgICAgLy8gQ1JDDQo+ID4gKyAgMHgyRiwgMHg3MywgMHg2RCwgMHg2Miwg Ly8gRGF0YSA9ICIvc21iaW9zIg0KPiA+ICsgIDB4NjksIDB4NkYsIDB4NzMsIDB4MDAsDQo+ID4g K307DQo+ID4gKyNkZWZpbmUgVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUgIDE0ICogc2l6 ZW9mKFVJTlQ4KQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg ICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFy YW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSBy ZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0 aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0 ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBt YXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJl dHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21w bGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtFbnVtZXJh dGVWYWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBDSEFS OCAgICAgICAqQmxvYklkOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRz ID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUp KTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRFbnVtZXJhdGVS ZXNwb25zZSwNCj4gVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsNCj4gPiAr ICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJl c3VsdHMsDQo+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2JJZCA9IEFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoQ0hBUjgpICoNCj4gQkxPQl9NQVhfREFUQV9QRVJfUEFD S0VUKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAo MCwgQmxvYklkKTsNCj4gPiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVz LCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoQmxvYklkLCAiL3Nt YmlvcyIsIDcpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiAr ICBGcmVlUG9vbCAoQmxvYklkKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0 aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVy cyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRy eSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1 dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAg VU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQg YW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4gKyoq Lw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtFbnVtZXJhdGVJbnZh bGlkQnVmZmVyICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIENIQVI4ICAgICAgICpCbG9iSWQ7DQo+ID4gKyAgRUZJX1NUQVRV UyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVM TDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRl WmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpKTsNCj4g PiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRFbnVtZXJhdGVSZXNwb25z ZSwNCj4gVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsNCj4gPiArICBTdGF0 dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMs DQo+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2JJZCA9IE5VTEw7DQo+ ID4gKw0KPiA+ICsgIFVUX0VYUEVDVF9BU1NFUlRfRkFJTFVSRSAoSXBtaUJsb2JUcmFuc2ZlckVu dW1lcmF0ZSAoMCwgQmxvYklkKSwNCj4gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChN b2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArVUlOVDggIFZhbGlkT3BlblJlc3BvbnNlW10gPSB7DQo+ID4gKyAg MHgwMCwgICAgICAgICAgICAgLy8gQ29tcGxldGlvbkNvZGUNCj4gPiArICAweENGLCAweEMyLCAw eDAwLCAvLyBPcGVuQk1DIE9FTg0KPiA+ICsgIDB4OTMsIDB4RDEsICAgICAgIC8vIENSQw0KPiA+ ICsgIDB4MDMsIDB4MDAsICAgICAgIC8vIFNlc3Npb25JZCA9IDMNCj4gPiArfTsNCj4gPiArI2Rl ZmluZSBWQUxJRF9PUEVOX1JFU1BPTlNFX1NJWkUgIDggKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0 aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQg dGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4g IFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3Vy ZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdl bGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFT U0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRl c3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2Fz IHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVE ICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRf VEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK09wZW5WYWxpZFJlc3BvbnNlICgNCj4gPiAr ICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBDSEFSOCAgICAgICAqQmxvYklkOw0KPiA+ICsg IFVJTlQxNiAgICAgIEZsYWdzOw0KPiA+ICsgIFVJTlQxNiAgICAgIFNlc3Npb25JZDsNCj4gPiAr ICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyAgPSBOVUxMOw0KPiA+ICsgIFZPSUQg ICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzMiA9IE5VTEw7DQo+ID4gKyAgVk9JRCAgICAgICAg Kk1vY2tSZXNwb25zZVJlc3VsdHMzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgRmxhZ3MgPSBCTE9C X1RSQU5TRkVSX1NUQVRfT1BFTl9XOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFuIG9w ZW4gY2FsbCBlZmZlY3RpdmVseSBsZWFkcyB0byB0aHJlZSBJUE1JIGNvbW1hbmRzDQo+ID4gKyAg Ly8gMS4gR2V0Q291bnQgb2YgYmxvYnMNCj4gPiArICAvLyAyLiBFbnVtZXJhdGUgdGhlIHJlcXVl c3RlZCBibG9iDQo+ID4gKyAgLy8gMy4gT3BlbiB0aGUgcmVxdWVzdGVkIGJsb2INCj4gPiArICAv Lw0KPiA+ICsgIC8vIFNvIHdlJ2xsIHB1c2ggdGhyZWUgSXBtaSByZXNwb25zZXMgaW4gdGhpcyBj YXNlDQo+ID4gKyAgLy8NCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5U OCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfT1BFTl9SRVNQT05TRV9TSVpF KSk7DQo+ID4gKw0KPiA+ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZE9w ZW5SZXNwb25zZSwNCj4gVkFMSURfT1BFTl9SRVNQT05TRV9TSVpFKTsNCj4gPiArICBTdGF0dXMg PSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+ IFZBTElEX09QRU5fUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9G QUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzMiA9IChV SU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfRU5VTUVSQVRFX1JFU1BP TlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzMiwgJlZhbGlk RW51bWVyYXRlUmVzcG9uc2UsDQo+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFKTsNCj4g PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25z ZVJlc3VsdHMyLA0KPiBWQUxJRF9FTlVNRVJBVEVfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1Mp Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklU X1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBNb2NrUmVz cG9uc2VSZXN1bHRzMyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFM SURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9u c2VSZXN1bHRzMywgJlZhbGlkR2V0Q291bnRSZXNwb25zZSwNCj4gVkFMSURfR0VUX0NPVU5UX1JF U1BPTlNFX1NJWkUpOw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJ TlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0czMsDQo+IFZBTElEX0dFVF9DT1VOVF9SRVNQT05TRV9T SVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIEJsb2JJZCA9ICIvc21iaW9zIjsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBt aUJsb2JUcmFuc2Zlck9wZW4gKEJsb2JJZCwgRmxhZ3MsICZTZXNzaW9uSWQpOw0KPiA+ICsNCj4g PiArICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPiAr ICBVVF9BU1NFUlRfRVFVQUwgKFNlc3Npb25JZCwgMyk7DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tS ZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtVSU5UOCAgVmFsaWRSZWFkUmVzcG9uc2VbXSA9IHsNCj4gPiArICAweDAw LCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIs IDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHgyMSwgMHg2RiwgICAgICAgICAg ICAgLy8gQ1JDDQo+ID4gKyAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgLy8gRGF0YSB0byByZWFk DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSAg MTAgKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICBD b250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZh cmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVz dC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5k IGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkg b2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNl cyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4g PiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3Qg aGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCAg VU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzIGZh aWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4g K1JlYWRWYWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4 dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBV SU5UOCAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJTlQ4ICAgICAgIEV4cGVjdGVkRGF0 YVJlc3BvbnNlWzRdID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzIH07DQo+ID4gKyAgVk9JRCAg ICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMgICAgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBNb2Nr UmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChW QUxJRF9SRUFEX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VS ZXN1bHRzLCAmVmFsaWRSZWFkUmVzcG9uc2UsDQo+IFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSk7 DQo+ID4gKyAgUmVzcG9uc2VEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWYWxpZFJl YWRSZXNwb25zZSkpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1h bmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX1JFQURfUkVTUE9OU0Vf U0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyUmVhZCAoMCwgMCwgNCwgUmVzcG9u c2VEYXRhKTsNCj4gPiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBF RklfU1VDQ0VTUyk7DQo+ID4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoUmVzcG9uc2VEYXRhLCBF eHBlY3RlZERhdGFSZXNwb25zZSwgNCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJl c3VsdHMpOw0KPiA+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+ICsgIHJldHVybiBV TklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1b aW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5h YmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3 aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg MikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9J RCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2li aWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVz dCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBp dC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0 IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJl dHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24g aGFzIGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK1JlYWRJbnZhbGlkQnVmZmVyICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAg Q29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQ4ICAgICAgICpSZXNwb25zZURh dGE7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2Nr UmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0 cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfUkVBRF9SRVNQ T05TRV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlk UmVhZFJlc3BvbnNlLA0KPiBWQUxJRF9SRUFEX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3Bv bnNlRGF0YSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29t bWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfUkVBRF9SRVNQT05T RV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIFVUX0VYUEVDVF9BU1NFUlRfRkFJTFVSRSAoSXBtaUJsb2JUcmFuc2ZlclJl YWQgKDAsIDAsIDQsDQo+IFJlc3BvbnNlRGF0YSksIE5VTEwpOw0KPiA+ICsNCj4gPiArICBGcmVl UG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBh cmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2Ug cmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMg dGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUg dGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQg bWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29t cGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0K PiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArV3JpdGVW YWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAg ICAgICBTZW5kRGF0YVs0XSAgICAgICAgICA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMyB9Ow0K PiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZg0KPiAoVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChN b2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWROb0RhdGFSZXNwb25zZSwNCj4gVkFMSURfTk9EQVRB X1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENv bW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX05PREFUQV9SRVNQ T05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJXcml0ZSAoMCwgMCwgU2Vu ZERhdGEsIDQpOw0KPiA+ICsNCj4gPiArICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMs IEVGSV9TVUNDRVNTKTsNCj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJh bWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVz dC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0 IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJh bWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0 b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAg ICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1 bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBj YXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRV Uw0KPiA+ICtFRklBUEkNCj4gPiArQ29tbWl0VmFsaWRSZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5J VF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ID4gKyAgVUlOVDggICAgICAgU2VuZERhdGFbNF0gICAgICAgICAgPSB7 IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMgfTsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAo VUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gKFZBTElEX05PREFUQV9SRVNQT05T RV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkTm9E YXRhUmVzcG9uc2UsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ID4g KyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VS ZXN1bHRzLA0KPiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1Rf RVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1p QmxvYlRyYW5zZmVyQ29tbWl0ICgwLCA0LCBTZW5kRGF0YSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FT U0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQb29s IChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBb T3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1l dGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1l bnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0 IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZh bCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0 ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9F UlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4g KyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtDbG9zZVZhbGlk UmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAg ICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNl UmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfTk9E QVRBX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRz LCAmVmFsaWROb0RhdGFSZXNwb25zZSwNCj4gVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1v Y2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFLCBFRklfU1VD Q0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJu IFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0 YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJDbG9zZSAoMSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VS VF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQb29sIChN b2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0 aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVy cyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRy eSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1 dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAg VU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQg YW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4gKyoq Lw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtEZWxldGVWYWxpZFJl c3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAq TW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNwb25zZVJl c3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gKFZBTElEX05PREFU QV9SRVNQT05TRV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywg JlZhbGlkTm9EYXRhUmVzcG9uc2UsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKTsNCj4g PiArDQo+ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2Nr UmVzcG9uc2VSZXN1bHRzLA0KPiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NF U1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBV TklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0 dXMgPSBJcG1pQmxvYlRyYW5zZmVyRGVsZXRlICgiL3NtYmlvcyIpOw0KPiA+ICsNCj4gPiArICBV VF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBGcmVl UG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK1VJTlQ4ICBWYWxpZEJsb2JTdGF0UmVzcG9uc2VbXSA9 IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHgxRiwg MHg0RiwgICAgICAgICAgICAgLy8gQ3JjDQo+ID4gKyAgMHgwMSwgMHgwMCwgICAgICAgICAgICAg Ly8gQmxvYlN0YXRlDQo+ID4gKyAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgLy8gQmxvYlNpemUN Cj4gPiArICAweDA0LCAgICAgICAgICAgICAgICAgICAvLyBNZXRhRGF0YUxlbg0KPiA+ICsgIDB4 MDYsIDB4MDcsIDB4MDgsIDB4MDksIC8vIE1ldGFEYXRhDQo+ID4gK307DQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFZBTElEX0JMT0JfU1RBVF9SRVNQT05TRV9TSVpFICAxNyAqIHNpemVvZihVSU5UOCkN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFs XSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5k DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9y IFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg cmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3Ig dG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50 cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRf VEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB0 aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVT VF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+ICsqKi8NCj4g PiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArQmxvYlN0YXRWYWxpZFJlc3Bv bnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UMTYgICAgICAqQmxv YlN0YXRlOw0KPiA+ICsgIFVJTlQzMiAgICAgICpTaXplOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpN ZXRhZGF0YUxlbmd0aDsNCj4gPiArICBVSU5UOCAgICAgICAqTWV0YWRhdGE7DQo+ID4gKyAgVUlO VDggICAgICAgKkV4cGVjdGVkTWV0YWRhdGE7DQo+ID4gKyAgQ0hBUjggICAgICAgKkJsb2JJZDsN Cj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0K PiA+ICsgIEJsb2JTdGF0ZSAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVJTlQx NikpOw0KPiA+ICsgIFNpemUgICAgICAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2Yg KFVJTlQzMikpOw0KPiA+ICsgIEJsb2JJZCAgICAgICAgICAgPSAiQmxvYklkIjsNCj4gPiArICBN ZXRhZGF0YUxlbmd0aCAgID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UOCkpOw0KPiA+ ICsgIE1ldGFkYXRhICAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sICg0ICogc2l6ZW9mIChVSU5U OCkpOw0KPiA+ICsgIEV4cGVjdGVkTWV0YWRhdGEgPSBBbGxvY2F0ZVplcm9Qb29sICg0ICogc2l6 ZW9mIChVSU5UOCkpOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4 ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0Vf U0laRSkpOw0KPiA+ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZEJsb2JT dGF0UmVzcG9uc2UsDQo+IFZBTElEX0JMT0JfU1RBVF9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9u c2VSZXN1bHRzLA0KPiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1Mp Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklU X1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMg PSBJcG1pQmxvYlRyYW5zZmVyU3RhdCAoQmxvYklkLCBCbG9iU3RhdGUsIFNpemUsIE1ldGFkYXRh TGVuZ3RoLA0KPiBNZXRhZGF0YSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFV QUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoKkJsb2JT dGF0ZSwgMSk7DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMICgqU2l6ZSwgMHgwNTA0MDMwMik7DQo+ ID4gKyAgVVRfQVNTRVJUX0VRVUFMICgqTWV0YWRhdGFMZW5ndGgsIDQpOw0KPiA+ICsgIFVUX0FT U0VSVF9NRU1fRVFVQUwgKE1ldGFkYXRhLCBFeHBlY3RlZE1ldGFkYXRhLCA0KTsNCj4gPiArICBG cmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgRnJlZVBvb2wgKEJsb2JTdGF0 ZSk7DQo+ID4gKyAgRnJlZVBvb2wgKFNpemUpOw0KPiA+ICsgIEZyZWVQb29sIChNZXRhZGF0YUxl bmd0aCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1ldGFkYXRhKTsNCj4gPiArICByZXR1cm4gVU5JVF9U RVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2 YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRl c3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFu ZCBpdCBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5 IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2Fz ZXMgdGhhdCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0 IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwg IFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBm YWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ ICtCbG9iU3RhdEludmFsaWRCdWZmZXIgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBD b250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0K PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1ldGFkYXRhID0gTlVMTDsNCj4gPiAr DQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZg0KPiAoVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5 TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJ RF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJ cG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURf QkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJ cG1pQmxvYlRyYW5zZmVyU3RhdCAoTlVMTCwgMCwgMCwgMCwNCj4gTWV0YWRhdGEpLCBOVUxMKTsN Cj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsgIHJl dHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBA cGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRo YXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSBy ZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGEN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlz IGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVz cG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBh bGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRo ZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3Nl cnRpb24gaGFzIGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiAr RUZJQVBJDQo+ID4gK1Nlc3Npb25TdGF0VmFsaWRSZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9U RVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ID4gKyAgVUlOVDE2ICAgICAgKkJsb2JTdGF0ZTsNCj4gPiArICBVSU5UMzIg ICAgICAqU2l6ZTsNCj4gPiArICBVSU5UOCAgICAgICAqTWV0YWRhdGFMZW5ndGg7DQo+ID4gKyAg VUlOVDggICAgICAgKk1ldGFkYXRhOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpFeHBlY3RlZE1ldGFk YXRhOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4g PiArDQo+ID4gKyAgQmxvYlN0YXRlICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAo VUlOVDE2KSk7DQo+ID4gKyAgU2l6ZSAgICAgICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZiAoVUlOVDMyKSk7DQo+ID4gKyAgTWV0YWRhdGFMZW5ndGggICA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoVUlOVDgpKTsNCj4gPiArICBNZXRhZGF0YSAgICAgICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoNCAqIHNpemVvZiAoVUlOVDgpKTsNCj4gPiArICBFeHBlY3RlZE1ldGFkYXRhID0g QWxsb2NhdGVaZXJvUG9vbCAoNCAqIHNpemVvZiAoVUlOVDgpKTsNCj4gPiArDQo+ID4gKyAgTW9j a1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAo VkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVz cG9uc2VSZXN1bHRzLCAmVmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJRF9CTE9CX1NUQVRf UkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29t bWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfQkxPQl9TVEFUX1JF U1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlc3Npb25TdGF0ICgw LCBCbG9iU3RhdGUsIFNpemUsIE1ldGFkYXRhTGVuZ3RoLA0KPiBNZXRhZGF0YSk7DQo+ID4gKw0K PiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ ICsgIFVUX0FTU0VSVF9FUVVBTCAoKkJsb2JTdGF0ZSwgMSk7DQo+ID4gKyAgVVRfQVNTRVJUX0VR VUFMICgqU2l6ZSwgMHgwNTA0MDMwMik7DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMICgqTWV0YWRh dGFMZW5ndGgsIDQpOw0KPiA+ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKE1ldGFkYXRhLCBFeHBl Y3RlZE1ldGFkYXRhLCA0KTsNCj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7 DQo+ID4gKyAgRnJlZVBvb2wgKEJsb2JTdGF0ZSk7DQo+ID4gKyAgRnJlZVBvb2wgKFNpemUpOw0K PiA+ICsgIEZyZWVQb29sIChNZXRhZGF0YUxlbmd0aCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1ldGFk YXRhKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlv bmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRl c3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBU aGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUg dGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxs IHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NF RCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBz dWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAg QSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RF U1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTZXNzaW9uU3RhdEludmFsaWRCdWZmZXIgKA0K PiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0K PiA+ICsgIE1ldGFkYXRhID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0 cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfQkxPQl9TVEFU X1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAm VmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSk7 DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICop TW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUsIEVG SV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBy ZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0YXQg KDAsIDAsIDAsIDAsDQo+IE1ldGFkYXRhKSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29s IChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBb T3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1l dGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1l bnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0 IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZh bCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0 ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9F UlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4g KyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtXcml0ZU1ldGFW YWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAg ICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNw b25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gKFZBTElE X05PREFUQV9SRVNQT05TRV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVz dWx0cywgJlZhbGlkTm9EYXRhUmVzcG9uc2UsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpF KTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDgg KilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJ X1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJl dHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyV3JpdGVNZXRhICgwLCAwLCBOVUxMLCAwKTsNCj4g PiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfU1VDQ0VTUyk7 DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsgIHJldHVybiBV TklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBJbml0aWFs aXplIHRoZSB1bml0IHRlc3QgZnJhbWV3b3JrLCBzdWl0ZSwgYW5kIHVuaXQgdGVzdHMgZm9yIHRo ZQ0KPiA+ICsgIHNhbXBsZSB1bml0IHRlc3RzIGFuZCBydW4gdGhlIHVuaXQgdGVzdHMuDQo+ID4g KyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgIEFsbCB0ZXN0IGNhc2VzIHdlcmUgZGlz cGF0Y2hlZC4NCj4gPiArICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJl IG5vdCBlbm91Z2ggcmVzb3VyY2VzDQo+IGF2YWlsYWJsZSB0bw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplIHRoZSB1bml0IHRlc3RzLg0KPiA+ICsqKi8N Cj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2V0dXBBbmRSdW5Vbml0VGVzdHMg KA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVOSVRfVEVTVF9GUkFNRVdPUktfSEFORExFICBG cmFtZXdvcms7DQo+ID4gKyAgVU5JVF9URVNUX1NVSVRFX0hBTkRMRSAgICAgIElwbWlCbG9iVHJh bnNmZXI7DQo+ID4gKw0KPiA+ICsgIEZyYW1ld29yayA9IE5VTEw7DQo+ID4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiJWE6IHYlYVxuIiwgVU5JVF9URVNUX05BTUUsDQo+IFVOSVRfVEVTVF9WRVJT SU9OKSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEluaXRVbml0VGVzdEZyYW1ld29yayAoJkZy YW1ld29yaywgVU5JVF9URVNUX05BTUUsDQo+IGdFZmlDYWxsZXJCYXNlTmFtZSwgVU5JVF9URVNU X1ZFUlNJT04pOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERF QlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgdG8gc2V0dXAgVGVzdCBGcmFtZXdvcmsuIEV4aXRp bmcgd2l0aA0KPiBzdGF0dXMgPSAlclxuIiwgU3RhdHVzKSk7DQo+ID4gKyAgICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAv Lw0KPiA+ICsgIC8vIFBvcHVsYXRlIHRoZSBVbml0IFRlc3QgU3VpdGUuDQo+ID4gKyAgLy8NCj4g PiArICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgmSXBtaUJsb2JUcmFuc2ZlciwgRnJh bWV3b3JrLCAiSVBNSSBCbG9iDQo+IFRyYW5zZmVyIFRlc3RzIiwgIlVuaXRUZXN0LklwbWlCbG9i VHJhbnNmZXJDQiIsIE5VTEwsIE5VTEwpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgaW4gQ3JlYXRlVW5pdFRl c3RTdWl0ZSBmb3IgSVBNSSBCbG9iDQo+IFRyYW5zZmVyIFRlc3RzXG4iKSk7DQo+ID4gKyAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBDYWxjdWxhdGVDcmMxNkNjaXR0DQo+ID4gKyAgU3Rh dHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJUZXN0IENSQyBDYWxjdWxhdGlv biIsDQo+ICJHb29kQ3JjIiwgR29vZENyYywgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgU3Rh dHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJUZXN0IEJhZCBDUkMgQ2FsY3Vs YXRpb24iLA0KPiAiQmFkQ3JjIiwgQmFkQ3JjLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArICAv LyBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAo SXBtaUJsb2JUcmFuc2ZlciwgIlNlbmQgSVBNSSByZXR1cm5zIGJhZA0KPiBjb21wbGV0aW9uIiwg IlNlbmRJcG1pQmFkQ29tcGxldGlvbiIsIFNlbmRJcG1pQmFkQ29tcGxldGlvbiwgTlVMTCwNCj4g TlVMTCwgTlVMTCk7DQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNm ZXIsICJTZW5kIElQTUkgcmV0dXJucyBzdWNjZXNzZnVsbHkNCj4gd2l0aCBubyBkYXRhIiwgIlNl bmRJcG1pTm9EYXRhUmVzcG9uc2UiLCBTZW5kSXBtaU5vRGF0YVJlc3BvbnNlLA0KPiBOVUxMLCBO VUxMLCBOVUxMKTsNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2Zl ciwgIlNlbmQgSVBNSSByZXR1cm5zIHN1Y2Nlc3NmdWxseQ0KPiB3aXRoIGJhZCBPRU4iLCAiU2Vu ZElwbWlCYWRPZW5SZXNwb25zZSIsIFNlbmRJcG1pQmFkT2VuUmVzcG9uc2UsDQo+IE5VTEwsIE5V TEwsIE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVy LCAiU2VuZCBJUE1JIHJldHVybnMgc3VjY2Vzc2Z1bGx5DQo+IHdpdGggYmFkIENSQyIsICJTZW5k SXBtaUJhZENyY1Jlc3BvbnNlIiwgU2VuZElwbWlCYWRDcmNSZXNwb25zZSwgTlVMTCwNCj4gTlVM TCwgTlVMTCk7DQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIs ICJTZW5kIElQTUkgcmV0dXJucyB3aXRoIHZhbGlkDQo+IEdldENvdW50IGRhdGEiLCAiU2VuZElw bWlWYWxpZENvdW50UmVzcG9uc2UiLA0KPiBTZW5kSXBtaVZhbGlkQ291bnRSZXNwb25zZSwgTlVM TCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlckdldENvdW50DQo+ID4g KyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJHZXRDb3VudCBjYWxs IHdpdGggdmFsaWQgZGF0YSIsDQo+ICJHZXRDb3VudFZhbGlkQ291bnRSZXNwb25zZSIsIEdldENv dW50VmFsaWRDb3VudFJlc3BvbnNlLCBOVUxMLCBOVUxMLA0KPiBOVUxMKTsNCj4gPiArICAvLyBJ cG1pQmxvYlRyYW5zZmVyRW51bWVyYXRlDQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElw bWlCbG9iVHJhbnNmZXIsICJFbnVtZXJhdGUgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAiRW51 bWVyYXRlVmFsaWRSZXNwb25zZSIsIEVudW1lcmF0ZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEws IE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAi RW51bWVyYXRlIGNhbGwgd2l0aCBpbnZhbGlkDQo+IG91dHB1dCBidWZmZXIiLCAiRW51bWVyYXRl SW52YWxpZEJ1ZmZlciIsIEVudW1lcmF0ZUludmFsaWRCdWZmZXIsIE5VTEwsDQo+IE5VTEwsIE5V TEwpOw0KPiA+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJPcGVuDQo+ID4gKyAgU3RhdHVzID0gQWRk VGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJPcGVuIGNhbGwgd2l0aCB2YWxpZCBkYXRhIiwN Cj4gIk9wZW5WYWxpZFJlc3BvbnNlIiwgT3BlblZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5V TEwpOw0KPiA+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJSZWFkDQo+ID4gKyAgU3RhdHVzID0gQWRk VGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJSZWFkIGNhbGwgd2l0aCB2YWxpZCBkYXRhIiwN Cj4gIlJlYWRWYWxpZFJlc3BvbnNlIiwgUmVhZFZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5V TEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiUmVh ZCBjYWxsIHdpdGggaW52YWxpZCBidWZmZXIiLA0KPiAiUmVhZEludmFsaWRCdWZmZXIiLCBSZWFk SW52YWxpZEJ1ZmZlciwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgLy8gSXBtaUJsb2JUcmFu c2ZlcldyaXRlDQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIs ICJXcml0ZSBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ICJXcml0ZVZhbGlkUmVzcG9uc2UiLCBX cml0ZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsgIC8vIElwbWlCbG9i VHJhbnNmZXJDb21taXQNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFu c2ZlciwgIkNvbW1pdCBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ICJDb21taXRWYWxpZFJlc3Bv bnNlIiwgQ29tbWl0VmFsaWRSZXNwb25zZSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgLy8g SXBtaUJsb2JUcmFuc2ZlckNsb3NlDQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlC bG9iVHJhbnNmZXIsICJDbG9zZSBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ICJDbG9zZVZhbGlk UmVzcG9uc2UiLCBDbG9zZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsg IC8vIElwbWlCbG9iVHJhbnNmZXJEZWxldGUNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAo SXBtaUJsb2JUcmFuc2ZlciwgIkRlbGV0ZSBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ICJEZWxl dGVWYWxpZFJlc3BvbnNlIiwgRGVsZXRlVmFsaWRSZXNwb25zZSwgTlVMTCwgTlVMTCwgTlVMTCk7 DQo+ID4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlclN0YXQNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0 Q2FzZSAoSXBtaUJsb2JUcmFuc2ZlciwgIkJsb2IgU3RhdCBjYWxsIHdpdGggdmFsaWQgZGF0YSIs DQo+ICJCbG9iU3RhdFZhbGlkUmVzcG9uc2UiLCBCbG9iU3RhdFZhbGlkUmVzcG9uc2UsIE5VTEws IE5VTEwsIE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5z ZmVyLCAiQmxvYiBTdGF0IGNhbGwgd2l0aCBpbnZhbGlkIGJ1ZmZlciIsDQo+ICJCbG9iU3RhdElu dmFsaWRCdWZmZXIiLCBCbG9iU3RhdEludmFsaWRCdWZmZXIsIE5VTEwsIE5VTEwsIE5VTEwpOw0K PiA+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJTZXNzaW9uU3RhdA0KPiA+ICsgIFN0YXR1cyA9IEFk ZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiU2Vzc2lvbiBTdGF0IGNhbGwgd2l0aCB2YWxp ZCBkYXRhIiwNCj4gIlNlc3Npb25TdGF0VmFsaWRSZXNwb25zZSIsIFNlc3Npb25TdGF0VmFsaWRS ZXNwb25zZSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2Ug KElwbWlCbG9iVHJhbnNmZXIsICJTZXNzaW9uIFN0YXQgY2FsbCB3aXRoIGludmFsaWQNCj4gYnVm ZmVyIiwgIlNlc3Npb25TdGF0SW52YWxpZEJ1ZmZlciIsIFNlc3Npb25TdGF0SW52YWxpZEJ1ZmZl ciwgTlVMTCwgTlVMTCwNCj4gTlVMTCk7DQo+ID4gKyAgLy8gSXBtaUJsb2JUcmFuc2ZlcldyaXRl TWV0YQ0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiV3Jp dGVNZXRhIGNhbGwgd2l0aCB2YWxpZCBkYXRhIiwNCj4gIldyaXRlTWV0YVZhbGlkUmVzcG9uc2Ui LCBXcml0ZU1ldGFWYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArDQo+ID4g KyAgLy8gRXhlY3V0ZSB0aGUgdGVzdHMuDQo+ID4gKyAgU3RhdHVzID0gUnVuQWxsVGVzdFN1aXRl cyAoRnJhbWV3b3JrKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBTdGFuZGFyZCBVRUZJIGVudHJ5IHBvaW50IGZvciB0YXJnZXQgYmFzZWQN Cj4gPiArICB1bml0IHRlc3QgZXhlY3V0aW9uIGZyb20gVUVGSSBTaGVsbC4NCj4gPiArKiovDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK0Jhc2VMaWJVbml0VGVzdEFwcEVudHJ5 ICgNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiArICBJTiBF RklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBy ZXR1cm4gU2V0dXBBbmRSdW5Vbml0VGVzdHMgKCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFN0YW5kYXJkIFBPU0lYIEMgZW50cnkgcG9pbnQgZm9yIGhvc3QgYmFzZWQgdW5pdCB0 ZXN0IGV4ZWN1dGlvbi4NCj4gPiArKiovDQo+ID4gK2ludA0KPiA+ICttYWluICgNCj4gPiArICBp bnQgICBhcmdjLA0KPiA+ICsgIGNoYXIgICphcmd2W10NCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICByZXR1cm4gU2V0dXBBbmRSdW5Vbml0VGVzdHMgKCk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0 DQo+IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2Zl ckR4ZS9SZWFkbWUubWQNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pQmxvYlRyYW5zZmVyRHhlL1JlYWRtZS5tZA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMC4uOWVlZDVkMzcyOA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5z ZmVyRHhlL1JlYWRtZS5tZA0KPiA+IEBAIC0wLDAgKzEsMjQgQEANCj4gPiArIyBJUE1JIEJsb2Ig VHJhbnNmZXIgSW50ZXJmYWNlIERyaXZlcg0KPiA+ICsNCj4gPiArVGhpcyBEWEUgbW9kdWxlIGlz IGEgVUVGSSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGhvcnBob3IgQmxvYiBUcmFuc2Zlcg0KPiBJ bnRlcmZhY2UgZGVmaW5lZCBpbiBPcGVuQk1DDQo+ID4gK2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVu Ym1jL3Bob3NwaG9yLWlwbWktYmxvYnMNCj4gPiArDQo+ID4gKyMjIE9wZW5CTUMgaW1wbGVtZW50 cyB0aGlzIGludGVyZmFjZSBhcyBhIHByb3RvY29sLCBhbGxvd2luZyBVRUZJIGFuZA0KPiBCTUMg dG8gdHJhbnNmZXIgYmxvYnMgb3ZlciBJUE1JLg0KPiA+ICsNCj4gPiArIyMjIFVzYWdlOg0KPiA+ ICtBbnkgRFhFIG1vZHVsZSB0aGF0IHdpc2hlcyB0byB1c2UgdGhpcyBwcm90b2NvbCBzaG91bGQg ZG8gdGhlIGZvbGxvd2luZzoNCj4gPiArMSkgVGhlIG1vZHVsZSBzaG91bGQgaGF2ZSBhIGRlcGVu ZGVuY3kgb24NCj4gZ0Vka2lpSXBtaUJsb2JUcmFuc2ZlclByb3RvY29sR3VpZCBpbiBpdHMgaW5m ICJEZXBleCIgc2VjdGlvbg0KPiA+ICsyKSBUaGUgbW9kdWxlIHNob3VsZCBsaXN0IGdFZGtpaUlw bWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQgaW4gaXRzIGluZg0KPiAiUHJvdG9jb2wiIHNlY3Rp b24NCj4gPiArMykgVGhlIG1vZHVsZSdzIGVudHJ5IHBvaW50IHNob3VsZCBkbyBhIExvY2F0ZVBy b3RvY29sIG9uDQo+IGdFZGtpaUlwbWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQNCj4gPiArDQo+ ID4gKyMjIyBBIHNhbXBsZSBmbG93IG9mIHByb3RvY29sIHVzYWdlIGlzIGFzIGZvbGxvd3M6DQo+ ID4gKzEpIEEgY2FsbCB0byBJcG1pQmxvYlRyYW5zZmVyT3BlbiAoKQ0KPiA+ICsyKSBJdGVyYXRp dmUgY2FsbHMgdG8gSXBtaUJsb2JUcmFuc2ZlcldyaXRlDQo+ID4gKzMpIEEgY2FsbCB0byBJcG1p QmxvYlRyYW5zZmVyQ2xvc2UgKCkNCj4gPiArDQo+ID4gKyMjIyBVbml0IFRlc3RzOg0KPiA+ICtJ cG1pQmxvYlRyYW5zZmVyRHhlL1VuaXRUZXN0LyBjb250YWlucyBob3N0IGJhc2VkIHVuaXQgdGVz dHMgb2YgdGhpcw0KPiBpbXBsZW1lbnRhdGlvbi4NCj4gPiArQW55IGNoYW5nZXMgdG8gSXBtaUJs b2JUcmFuc2ZlckR4ZSBzaG91bGQgaW5jbHVkZSBwcm9vZiBvZiBzdWNjZXNzZnVsIHVuaXQNCj4g dGVzdHMuDQo+ID4gKw0KPiA+ICsjIyMgRGVidWdnaW5nDQo+ID4gK1RvIGFzc2lzdCBpbiBkZWJ1 Z2dpbmcgYW55IGlzc3VlcywgY2hhbmdlIEJMT0JfVFJBTlNGRVJfREVCVUcgdG8NCj4gZGVzaXJl ZCBkZWJ1ZyBsZXZlbCwgc3VjaCBhcyBERUJVR19FUlJPUiBvciBERUJVR19JTkZPLg0KDQoKLT0t PS09LT0tPS09LT0tPS09LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVz c2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExODk5NCk6IGh0 dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExODk5NApNdXRlIFRoaXMgVG9w aWM6IGh0dHBzOi8vZ3JvdXBzLmlvL210LzEwNjExNTc0My83Njg2MTc2Ckdyb3VwIE93bmVyOiBk ZXZlbCtvd25lckBlZGsyLmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vw cy5pby9nL2RldmVsL3Vuc3ViIFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09 LT0tPS0KCg0K