From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F0986471C8; Fri, 9 Jan 2026 16:05:28 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 482024028E; Fri, 9 Jan 2026 16:05:28 +0100 (CET) Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010056.outbound.protection.outlook.com [52.101.56.56]) by mails.dpdk.org (Postfix) with ESMTP id 90AC0400D5 for ; Fri, 9 Jan 2026 16:05:26 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WoYgVlAwEDoqKFwNxurUmwNFzsTdg6ORSxdatkBCmOXqrAHDl0XIS88iwGghrgxJwtXI7S0rOYhIYgfvfoqomTn+RnqJaVX+S9mAlcbudqs1FJmJYZjJFAoBWD6G5+hTLU4OVkJkzR17aUpdky7Igbo5uJJRoM4VjrXsdPb/k+/gYfEczgdKT5mYtSwskGTvGGZX9qJusiLyS//j20Tr5wjhj7ZrL34mJFh6fss9A+URTAUyanHsPC1F4we5ToSm2P1/MBLqeP8xbFnxAvY8NctRcZUaqwWoiVEPTm6W1xY/vU6VvC+TgWH7DKBQrwFYQrA5DJ906qrk0tFmwDHENQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zb8I26VT5HNKXwajNNsYiYaDdHYRCrp4+3bGQ3qkJcs=; b=YcFR/sxWT5Us45wa/CQUL4jgOp8MOKMPHDKLSTqUhJAwteaobWHOy9B0QpN07zkLZiVu8Ndvjm1EnW4v18gWTEXHYp/ue41vY7mUOUKPeDDH4XJ5iMepKQuWZNu6BFNsPWCojv4AfL7MTQQ2+1drq9YMvCvWoAxmCouWIkHqb+/djdTJwE+Zg35TleKptjmOGzyn0jb/wrEVc8nIGvi2ar/O/8wYJup6G9aoYEHc2i46DosiEb6ltijia/p4512L5b5UMYUqscsiF4np66rn15Kf3maYGtsq5DWNPc3JJhEuE06/5cVEHSNPmBNs9/UXCA7kxbk9BgNoW8co6Q9Mig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zb8I26VT5HNKXwajNNsYiYaDdHYRCrp4+3bGQ3qkJcs=; b=Siwp0Fh4UIFZENy+tOwDsg93nIQYW2cSeXetAW3o0/KqF3UpdsrYGZG54kI1qKKFBh4hiYVdu2CrqVNlMwXH4BJCoCP2V/v1lLPFyJWXSWaxrlBpzIO5jXFsYZeBXVwLpVCb+W2y7Qe8SnFeXrmZry9Z8OaQhHXU65qPWTNl0zA= Received: from PH7PR12MB8596.namprd12.prod.outlook.com (2603:10b6:510:1b7::6) by SJ2PR12MB8691.namprd12.prod.outlook.com (2603:10b6:a03:541::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.5; Fri, 9 Jan 2026 15:05:22 +0000 Received: from PH7PR12MB8596.namprd12.prod.outlook.com ([fe80::5909:724e:563f:49d1]) by PH7PR12MB8596.namprd12.prod.outlook.com ([fe80::5909:724e:563f:49d1%5]) with mapi id 15.20.9499.003; Fri, 9 Jan 2026 15:05:22 +0000 From: "Varghese, Vipin" To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "dev@dpdk.org" , Bruce Richardson , Konstantin Ananyev CC: Stephen Hemminger Subject: RE: [PATCH v5] eal/x86: optimize memcpy of small sizes Thread-Topic: [PATCH v5] eal/x86: optimize memcpy of small sizes Thread-Index: AQHcYtrvC5HxWTuRSUWV9WDygv6uy7VA7e0AgAk+7EA= Date: Fri, 9 Jan 2026 15:05:22 +0000 Message-ID: References: <20251120114554.950287-1-mb@smartsharesystems.com> <20251201155525.1538260-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35F6561B@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35F6561B@smartserver.smartshare.dk> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Enabled=True; MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_SetDate=2026-01-09T15:04:40.0000000Z; MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Name=AMD Internal Distribution Only; MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_ContentBits=3; MSIP_Label_dce362fe-1558-4fb5-9f64-8a6240d76441_Method=Standard authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH7PR12MB8596:EE_|SJ2PR12MB8691:EE_ x-ms-office365-filtering-correlation-id: 85e2b805-1476-42c0-677b-08de4f9082e8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|7053199007|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?UjVUTVpjVjhRQ1I3akE2MFR2MGR3cnZFUnZ4aFJlbmxxT2psc0VTQVdhaHJ5?= =?utf-8?B?UG1tUityb2FTZXU4N1RTejkrYnZaNTc1Vi9CMmFWRXd2OGlIVGNlcHJPMVBH?= =?utf-8?B?QUN4UWJ6em80YnNJelF1eTd3eHhQL1ZpMjIxUTJSNHQ3OHVqclVvNDFTdnJ6?= =?utf-8?B?S210dkRkRXpGTFY2aVdGSFdoeUR3QSt6clFtY1EyTGVuemxqQ2ZOeDVuZE1z?= =?utf-8?B?allLeW9LZFptcER3TUVFOE84NmY4MlV5V0lSQUNCcWxsSHZZNHpvSGEzLzJo?= =?utf-8?B?V0YzNlhGS1dIeHZnZ3kycS8wQjJxd1FUT2V4bk84THU5ZkNBMkNsR3FQNmVi?= =?utf-8?B?UWpnNnNGMzJOM1kxUThTU1pxNXhNNzFXVXN3enJDUmc4Nnpzcm94Zm1RNGlz?= =?utf-8?B?TlZMdHNGRS90dW92czV3S3lwQ3FQcFpxTEtxb0dNeG1iZkNmeHBNd0tFOENu?= =?utf-8?B?aWxxTndkcmIySHlyUCszeEFiRWpldjdJWS9hNDR2RWJsazVGZFJsY21PT3FR?= =?utf-8?B?YWF0T2dIZkFJRThSSldkVFJqUjhzQWFMcEhjdFhxUm1rU1l4NFllVGk2elox?= =?utf-8?B?NGdXNVVyMVE0SGdPRkx4U1BIeTNObVFKUi9XYUVIUWc1c1pZMTZrVG9aSnI4?= =?utf-8?B?OGgwMGkvNW16RlpNVCtJbFhMZ1JKNGN1c3Y0U1QrQ0t5U2lZdGQvK3p5Z2li?= =?utf-8?B?bElnR1ZVc2I5NkV6em94eEVNSVdXMlFPdnl0U0pkZytGZHgzcWZ3V3JxYXZ3?= =?utf-8?B?d2xTVnliWVhYeUIyVVNXNklldXRpbXU3NWZKVFVVYjlmZEZsWGNJZG0xRzUx?= =?utf-8?B?K2ltaWxFa0pKdEtSMUNtczBtcVdHQ2tocmd0eVVhd1JzZnkxbThLakwzL3hp?= =?utf-8?B?TzVqVVQ2d1dvNFJaL0xGdkZlVW14cWZIKzFQOVl0Ylk3N1JVbUJlQzNJVW5O?= =?utf-8?B?NmNRNHZNeU9LREZMSG5SK2dRdlJFWEN3THpVdHczSDhKcGZhR05RckkvQXFG?= =?utf-8?B?c2RzTDNmNTExcldRZjNUVkFVcU0weHBUWEQ2WHN3TXArbEwyVVdhMWIxaWZv?= =?utf-8?B?b0trV05aS1RTWU5xbTRNYjI3MXQ1TDkrSTdlUDR6bWRyZExkeFc2UXFuUTVW?= =?utf-8?B?TnZ2QmJZNEo2Uy9iNjlOSWo0S3FrTzFuYTlQcXd0UmVmdFF0cFY3OWF5akd5?= =?utf-8?B?ZDBUTEFFMzVVOFc4dDVzemNsTGF0bXBqbi9nNm9TbjN0Sm42OHlZL05COXEz?= =?utf-8?B?ZXArQ2lMMU9rTnp4WjF0dVcrWHFBSjRlV0l1bTVuYUgyZ1haM20wZTNmc2Uw?= =?utf-8?B?ZnUrVW01MG5LN3ZGNUZFeHJTVWtZNktzVVpsd1dWVVB6UVBOTVNsUE5IeUpt?= =?utf-8?B?VjhBVTg3MXQxRE9KaDVGTDBWamhGRWNabjgwOWJNQVZ0M1M4RStWWjNta3BU?= =?utf-8?B?d1MyTlhsN3Y0ZWkxQUlqeXRld2VYOHdQS25vMHNPWVRUdDZ1SnFiVkRsUXIr?= =?utf-8?B?NDdUSEl1NEZHenlCckpWZ2pSSmk2UU5KYW4rV1lDWnoweGRVanVsYTVWV3Ni?= =?utf-8?B?aktMbGpNRG5INTBpQlBTVWswWEgweG9LaTE5cTdzNklQcjMxbkdlQ2JIc3dO?= =?utf-8?B?SDFRazU2UVA5UHVKdHpPRWtoNi9KMUxBai91VzVZbTZ0WmRmcUJoL0p5S2R1?= =?utf-8?B?T0hzdU1CNmxpYWE2V2FrRXB5aXZsdkRkT0pOUDBHRFRBcVBlNm5nYjEyeWNh?= =?utf-8?B?UUZNc3J0TmFDeGdZdkVMRjREK3dVUk9QWW56V0pZTmtKbkxLVmltK2dneWRZ?= =?utf-8?B?Zld5QjNYZ1g4KzFpRWh6cTFvdlhHb1FMUDFyUy8veE1aRkJTbFdsZXBwVGZh?= =?utf-8?B?eit2eVVHQnBDRWUyd0JsSm43Sk4wYUxrN0JxYzJEV0pnVmJvSGJvclhDbzR6?= =?utf-8?B?SGhYQmczSWhGaUE0RFBKZTN1eTFTTHlrY1R3UkJvY0lBNno2YW83UU9WSFZ4?= =?utf-8?B?ckNTelM0dERXbU1UYTRHOXpTMjQ1UHFBc2pwMXdIcU8ydnl0blBTN3JJRUJs?= =?utf-8?Q?fKXBgy?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH7PR12MB8596.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(7053199007)(38070700021); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?R2JSRjByQzJWTmRZOERpSys0MzErcVN1cE9LWCtxaTdSOW53RzN2OFpKUWVX?= =?utf-8?B?T2FvRWFZRHNXYUxSQlFWQWFhWVo0MXlUbE14QlIzTWhBK1VkSDA4cVhwREh0?= =?utf-8?B?aXRhTFlXRzNOZnI0ZXM5bnpNa01qVEZSc3J1OGVwMDc2QzBsc3hkd1BVMnVp?= =?utf-8?B?WkxaRFNXdlBMOWZrMHBIcU4rOVUzZ3JUZUM5MW92K3AyZFVzUFB6UXdFQmJ6?= =?utf-8?B?L3c0MjhTSGpleUQxU0RweUd4UmNSQ1lsbklMdE83eVY1S3JVUGR2NFpBdGds?= =?utf-8?B?MEdhTEg0VjlHek5hZkszTVFRci81NzNZTkY2dDcyWjFUVCtBM3puenhRWkFv?= =?utf-8?B?Yys4cDBJdGw3b1ZJeWszVDc2OXh5SUdnYjlIdjdET1kyYVZweWROVFdkc21h?= =?utf-8?B?ZHlJRHpjV1dJUHRZODlGZGdnaUxLeUo3eFBDejY0b2xBUmRheHFHZy9rOTAw?= =?utf-8?B?c3RPREs2eDQvV284NnB0ZXZsVWtkc09TMXBFZWxQdzMxcDhDcnhRQjNqb05h?= =?utf-8?B?aDFEakJRNWNXTWhYU0JSaUx3NWFjTGplTmR1Q0JIWnJzQzR6VWFoV1ptaTNC?= =?utf-8?B?dkUwbmF0bFkzUXg5eUxuakZXQ3VSTTVodU81dU95eHNMTWpsNy9XM1F3alcz?= =?utf-8?B?ajBreWJ1Ym1ESWRhbjhMNnk3TWtKV2JSTDdycGxzUFVyQmFMT1cwY2QwOXlN?= =?utf-8?B?SkNGYmtMYmRpZW1NRWxLeDUydkVHakRlTHhGZ3FCSGN4SzVlMzNBbEtDZEdy?= =?utf-8?B?MFB3MmhRd0dmMm1oa0poWjJ0V0NVd3JOY2dmOFpCQnN1eU0ra0tDeWpxU3JO?= =?utf-8?B?U2NoaXRGUngyczl2WE9xeTJFMGJNZXg1S0xtZG5tMFJ2RC9BN2QvamhEMU1C?= =?utf-8?B?alY4S1dqUGxlZXNJRVZuV2ZQbENtWlNjM09YK0tFMm5IZmZZV2VqZjRCNmEx?= =?utf-8?B?aHVDM3BHcTNtamxkc3NIckg2VjZtM00xZS96Y1YzenlaUHMyaGNsbnZTdE9p?= =?utf-8?B?V2hCTnlEZDl1c1VRdkF6cVdDMkhZNVZiLzNWUytTcS9tVWVyc2NPYWpkck1z?= =?utf-8?B?Tjk4Y1dRY1ZlbEpWUU1YN001UUN0NS9vQ3FQbGJCcnRkSEZTVFdsTU54ZWVn?= =?utf-8?B?dVRRajAxRTN5VEh0eVdERkpzUmxxZWxNanZIWTVWc21meXZheURtelRhR3ZW?= =?utf-8?B?RTBacmdmTFl2ZFJTSTh6eksva09kR1RibVdUMlNVc3h2d3Z5ck56OVhNMVVk?= =?utf-8?B?QWlvZmRVaURvdU1FeHB2NU1Qd085UU5OZ0RMZURQRkVCNHliZ2kxbUZUTWFP?= =?utf-8?B?cTJ5V2RGeDdoVXRlWXJ5bzJ0NTdYT1Qva21wR0RuOFhGUXFYM01od21DcXR0?= =?utf-8?B?azBhQUIxazlxeDBRNzZ1MlV5YUF4NDV0QmJrcGNuT25wVEo0cCt4MHdWNktR?= =?utf-8?B?NTdzK3RXcW9FMEp3ZGJhWE1lN1h6NEl5bkRlTkNnVWFaMTEwd3dFOWlHdFRt?= =?utf-8?B?dDhOOTR0OEc0eEQ0RVJlOWVlaDhRU0MwUkVrYnV3bHVQUDFqR0t4U09uZkI1?= =?utf-8?B?Y0NYWjZNalg1Qk53VWxxU2dUK3NQVDVnY3pNaUc5SUw5clF5cStPKzhTQ0tU?= =?utf-8?B?TWpXRUZHNGFqR3UyZDFNRUMyYnQ4MzREUDgzUlVLVEJQcDRpak5nOVN5Qy9L?= =?utf-8?B?WVRWTXZDZjFmY0ZDZWU5Q1Y4Q0N6WjZJeHJlV3dJa3dxZ1YxNi8ySVlndEZ4?= =?utf-8?B?cFMvY1czTzFNSXBwR1RwRmU1aTNwVDdQMkczdGlPelUzenc0RzZrMmthQXJy?= =?utf-8?B?VFNOUzRyQlVmT3k2NGFCdzFmcmVaNHhLQ0ZVMUIzUzhSQ0V0UHNQT2hmTWhj?= =?utf-8?B?Wjgram1QOHNMdTFiMC93S3pGTEEweWlVZ2NtTzVoVTBodzlhdlJ0UkxWOC9a?= =?utf-8?B?ZGVMb3BEdlNJNUVyd25oeURxTUszbXlKQUZWaC9iWGI1UVdQL2NtSFhvSUZ5?= =?utf-8?B?Q0ZhY2owankxZDJjbTdhanRpT1lWYy9lVjV1NTYrK0lheERwVWFHR3B5VzJt?= =?utf-8?B?VWovR09iRks3ODU0c2JJczNSNnhYclpnQ0Nsb1FwQnhhTTE1SGUvZXRUbzBB?= =?utf-8?B?RHBESFRsenZGaVJ1QVZheHhGajYxMHpBQzRzMXFZV0Q5N3Y0dGtRV0ExZFlz?= =?utf-8?B?bENvQ3F0NUhVQkNuVjIyaFBjbjVFNThpb0NMVmYxbHAra2x4anA2TjhIdkhO?= =?utf-8?B?STB2SUZCVGFURWk0Z3ljZ0R6dEszTTBMTzNtMTBoa3lCRHV0RzhDZzRZRjZG?= =?utf-8?Q?44Za9a8U8W687Njp3l?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8596.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85e2b805-1476-42c0-677b-08de4f9082e8 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jan 2026 15:05:22.3051 (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: sj0oCWaOyUZLvR1vcIcroJ/Ue4gjyD6pWcOLmOM7jMWoClWDQrdiSBP04FLLIb5bFsCdSmW/QjL8YPbbS6xnrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8691 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEFNRCBJbnRlcm5hbCBEaXN0cmlidXRpb24gT25seV0N Cg0KSGkgQWxsLA0KDQpJIHdhcyBvY2N1cGllZCB3aXRoIGEgZmV3IHdvcmtzIGF0IERlYyAyMDI1 LiBMZXQgbWUgbG9vayBhdCB0aGlzIGluIHdlZWtlZC4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29t Pg0KPiBTZW50OiBTYXR1cmRheSwgSmFudWFyeSAzLCAyMDI2IDExOjIzIFBNDQo+IFRvOiBkZXZA ZHBkay5vcmc7IEJydWNlIFJpY2hhcmRzb24gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsg S29uc3RhbnRpbg0KPiBBbmFueWV2IDxrb25zdGFudGluLnYuYW5hbnlldkB5YW5kZXgucnU+OyBW YXJnaGVzZSwgVmlwaW4NCj4gPFZpcGluLlZhcmdoZXNlQGFtZC5jb20+DQo+IENjOiBTdGVwaGVu IEhlbW1pbmdlciA8c3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmc+DQo+IFN1YmplY3Q6IFJFOiBb UEFUQ0ggdjVdIGVhbC94ODY6IG9wdGltaXplIG1lbWNweSBvZiBzbWFsbCBzaXplcw0KPg0KPiBD YXV0aW9uOiBUaGlzIG1lc3NhZ2Ugb3JpZ2luYXRlZCBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZS4g VXNlIHByb3BlciBjYXV0aW9uDQo+IHdoZW4gb3BlbmluZyBhdHRhY2htZW50cywgY2xpY2tpbmcg bGlua3MsIG9yIHJlc3BvbmRpbmcuDQo+DQo+DQo+IFBJTkcgZm9yIHJldmlldy4NCj4NCj4gUmVn YXJkbGVzcyBpZiB5b3UgLSBmb3IgZ29vZCBhbmQgdmFsaWQgcmVhc29ucyAtIGdlbmVyYWxseSBw cmVmZXIgbWVtY3B5KCkgb3Zlcg0KPiBydGVfbWVtY3B5KCksIHJ0ZV9tZW1jcHkoKSBpcyBub3Qg ZGVwcmVjYXRlZCBvciBiZWluZyBwaGFzZWQgb3V0LCBzbw0KPiBpbXByb3ZlbWVudHMgc2hvdWxk IGJlIGFsbG93ZWQuDQo+DQo+DQo+ID4gRnJvbTogTW9ydGVuIEJyw7hydXAgW21haWx0bzptYkBz bWFydHNoYXJlc3lzdGVtcy5jb21dDQo+ID4gU2VudDogTW9uZGF5LCAxIERlY2VtYmVyIDIwMjUg MTYuNTUNCj4gPg0KPiA+IGVhbC94ODY6IG9wdGltaXplIG1lbWNweSBvZiBzbWFsbCBzaXplcw0K PiA+DQo+ID4gVGhlIGltcGxlbWVudGF0aW9uIGZvciBjb3B5aW5nIHVwIHRvIDY0IGJ5dGVzIGRv ZXMgbm90IGRlcGVuZCBvbg0KPiA+IGFkZHJlc3MgYWxpZ25tZW50IHdpdGggdGhlIHNpemUgb2Yg dGhlIENQVSdzIHZlY3RvciByZWdpc3RlcnMsIHNvIHRoZQ0KPiA+IGNvZGUgaGFuZGxpbmcgdGhp cyB3YXMgbW92ZWQgZnJvbSB0aGUgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgdG8gdGhlDQo+ID4g Y29tbW9uIGZ1bmN0aW9uLg0KPiA+DQo+ID4gRnVydGhlcm1vcmUsIHRoZSBmdW5jdGlvbiBmb3Ig Y29weWluZyBsZXNzIHRoYW4gMTYgYnl0ZXMgd2FzIHJlcGxhY2VkDQo+ID4gd2l0aCBhIHNtYXJ0 ZXIgaW1wbGVtZW50YXRpb24gdXNpbmcgZmV3ZXIgYnJhbmNoZXMgYW5kIHBvdGVudGlhbGx5DQo+ ID4gZmV3ZXIgbG9hZC9zdG9yZSBvcGVyYXRpb25zLg0KPiA+IFRoaXMgZnVuY3Rpb24gd2FzIGFs c28gZXh0ZW5kZWQgdG8gaGFuZGxlIGNvcHlpbmcgb2YgdXAgdG8gMTYgYnl0ZXMsDQo+ID4gaW5z dGVhZCBvZiB1cCB0byAxNSBieXRlcy4gVGhpcyBzbWFsbCBleHRlbnNpb24gcmVkdWNlcyB0aGUg Y29kZSBwYXRoDQo+ID4gZm9yIGNvcHlpbmcgdHdvIHBvaW50ZXJzLg0KPiA+DQo+ID4gVGhlc2Ug Y2hhbmdlcyBwcm92aWRlIHR3byBiZW5lZml0czoNCj4gPiAxLiBUaGUgbWVtb3J5IGZvb3Rwcmlu dCBvZiB0aGUgY29weSBmdW5jdGlvbiBpcyByZWR1Y2VkLg0KPiA+IFByZXZpb3VzbHkgdGhlcmUg d2VyZSB0d28gaW5zdGFuY2VzIG9mIHRoZSBjb21waWxlZCBjb2RlIHRvIGNvcHkgdXAgdG8NCj4g PiA2NA0KPiA+IGJ5dGVzLCBvbmUgaW4gdGhlICJhbGlnbmVkIiBjb2RlIHBhdGgsIGFuZCBvbmUg aW4gdGhlICJnZW5lcmljIiBjb2RlDQo+ID4gcGF0aC4NCj4gPiBOb3cgdGhlcmUgaXMgb25seSBv bmUgaW5zdGFuY2UsIGluIHRoZSAiY29tbW9uIiBjb2RlIHBhdGguDQo+ID4gMi4gVGhlIHBlcmZv cm1hbmNlIGZvciBjb3B5aW5nIHVwIHRvIDY0IGJ5dGVzIGlzIGltcHJvdmVkLg0KPiA+IFRoZSBt ZW1jcHkgcGVyZm9ybWFuY2UgdGVzdCBzaG93cyBjYWNoZS10by1jYWNoZSBjb3B5aW5nIG9mIHVw IHRvIDMyDQo+ID4gYnl0ZXMgbm93IHR5cGljYWxseSBvbmx5IHRha2VzIDIgY3ljbGVzICg0IGN5 Y2xlcyBmb3IgNjQgYnl0ZXMpIHZlcnN1cw0KPiA+IGNhLiA2LjUgY3ljbGVzIGJlZm9yZSB0aGlz IHBhdGNoLg0KPiA+DQo+ID4gQW5kIGZpbmFsbHksIHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9u IG9mIHJ0ZV9tb3Y0OCgpIHdhcyBhZGRlZC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE1vcnRl biBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gLS0tDQo+ID4gdjU6DQo+ ID4gKiBSZXZlcnRlZCB2NDogUmVwbGFjZSBTU0UyIF9tbV9sb2FkdV9zaTEyOCgpIHdpdGggU1NF Mw0KPiA+IF9tbV9sZGRxdV9zaTEyOCgpLg0KPiA+ICAgSXQgd2FzIHNsb3dlci4NCj4gPiAqIElt cHJvdmVkIHNvbWUgY29tbWVudHMuIChLb25zdGFudGluIEFuYW55ZXYpDQo+ID4gKiBNb3ZlZCB0 aGUgc2l6ZSByYW5nZSAxNy4uMzIgaW5zaWRlIHRoZSBzaXplIDw9IDY0IGJyYW5jaCwgc28gd2hl bg0KPiA+ICAgYnVpbGRpbmcgZm9yIFNTRSwgdGhlIGdlbmVyYXRlZCBjb2RlIGNhbiBzdGFydCBj b3B5aW5nIHRoZSBmaXJzdA0KPiA+ICAgMTYgYnl0ZXMgYmVmb3JlIGNvbXBhcmluZyBpZiB0aGUg c2l6ZSBpcyBncmVhdGVyIHRoYW4gMzIgb3Igbm90Lg0KPiA+ICogSnVzdCByZXF1aXJlIFJURV9N RU1DUFlfQVZYIGZvciB1c2luZyBydGVfbW92MzIoKSBpbg0KPiA+IHJ0ZV9tb3YzM190b182NCgp Lg0KPiA+IHY0Og0KPiA+ICogUmVwbGFjZSBTU0UyIF9tbV9sb2FkdV9zaTEyOCgpIHdpdGggU1NF MyBfbW1fbGRkcXVfc2kxMjgoKS4NCj4gPiB2MzoNCj4gPiAqIEZpeGVkIHR5cG8gaW4gY29tbWVu dC4NCj4gPiB2MjoNCj4gPiAqIFVwZGF0ZWQgcGF0Y2ggdGl0bGUgdG8gcmVmbGVjdCB0aGF0IHRo ZSBwZXJmb3JtYW5jZSBpcyBpbXByb3ZlZC4NCj4gPiAqIFVzZSB0aGUgZGVzaWduIHBhdHRlcm4g b2YgdHdvIG92ZXJsYXBwaW5nIHN0b3JlcyBmb3Igc21hbGwgY29waWVzDQo+ID4gdG9vLg0KPiA+ ICogRXhwYW5kZWQgZmlyc3QgYnJhbmNoIGZyb20gc2l6ZSA8IDE2IHRvIHNpemUgPD0gMTYuDQo+ ID4gKiBIYW5kbGUgbW9yZSBidWlsZCB0aW1lIGNvbnN0YW50IGNvcHkgc2l6ZXMuDQo+ID4gLS0t DQo+ID4gIGxpYi9lYWwveDg2L2luY2x1ZGUvcnRlX21lbWNweS5oIHwgMzQ2DQo+ID4gKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLQ0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTg2IGluc2Vy dGlvbnMoKyksIDE2MCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9saWIvZWFs L3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiA+IGIvbGliL2VhbC94ODYvaW5jbHVkZS9ydGVf bWVtY3B5LmgNCj4gPiBpbmRleCA0NmQzNGI4MDgxLi4wNGQxYTQ3NGQxIDEwMDY0NA0KPiA+IC0t LSBhL2xpYi9lYWwveDg2L2luY2x1ZGUvcnRlX21lbWNweS5oDQo+ID4gKysrIGIvbGliL2VhbC94 ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgNCj4gPiBAQCAtNTUsNTIgKzU1LDYgQEAgZXh0ZXJuICJD IiB7DQo+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+ICBydGVfbWVt Y3B5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7DQo+ID4NCj4gPiAtLyoq DQo+ID4gLSAqIENvcHkgYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4gPiAt ICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gPiAtICogVXNlIHdpdGggbiA8PSAx NS4NCj4gPiAtICovDQo+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+ IC1ydGVfbW92MTVfb3JfbGVzcyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4p IC17DQo+ID4gLSAgICAgLyoqDQo+ID4gLSAgICAgICogVXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0 cyB0byBhdm9pZCB2aW9sYXRpbmcgQyBzdGFuZGFyZA0KPiA+IC0gICAgICAqIGFsaWdubWVudCBy ZXF1aXJlbWVudHMgYW5kIHRvIGF2b2lkIHN0cmljdCBhbGlhc2luZyBidWdzDQo+ID4gLSAgICAg ICovDQo+ID4gLSAgICAgc3RydWN0IF9fcnRlX3BhY2tlZF9iZWdpbiBydGVfdWludDY0X2FsaWFz IHsNCj4gPiAtICAgICAgICAgICAgIHVpbnQ2NF90IHZhbDsNCj4gPiAtICAgICB9IF9fcnRlX3Bh Y2tlZF9lbmQgX19ydGVfbWF5X2FsaWFzOw0KPiA+IC0gICAgIHN0cnVjdCBfX3J0ZV9wYWNrZWRf YmVnaW4gcnRlX3VpbnQzMl9hbGlhcyB7DQo+ID4gLSAgICAgICAgICAgICB1aW50MzJfdCB2YWw7 DQo+ID4gLSAgICAgfSBfX3J0ZV9wYWNrZWRfZW5kIF9fcnRlX21heV9hbGlhczsNCj4gPiAtICAg ICBzdHJ1Y3QgX19ydGVfcGFja2VkX2JlZ2luIHJ0ZV91aW50MTZfYWxpYXMgew0KPiA+IC0gICAg ICAgICAgICAgdWludDE2X3QgdmFsOw0KPiA+IC0gICAgIH0gX19ydGVfcGFja2VkX2VuZCBfX3J0 ZV9tYXlfYWxpYXM7DQo+ID4gLQ0KPiA+IC0gICAgIHZvaWQgKnJldCA9IGRzdDsNCj4gPiAtICAg ICBpZiAobiAmIDgpIHsNCj4gPiAtICAgICAgICAgICAgICgoc3RydWN0IHJ0ZV91aW50NjRfYWxp YXMgKilkc3QpLT52YWwgPQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAoKGNvbnN0IHN0cnVj dCBydGVfdWludDY0X2FsaWFzICopc3JjKS0+dmFsOw0KPiA+IC0gICAgICAgICAgICAgc3JjID0g KGNvbnN0IHVpbnQ2NF90ICopc3JjICsgMTsNCj4gPiAtICAgICAgICAgICAgIGRzdCA9ICh1aW50 NjRfdCAqKWRzdCArIDE7DQo+ID4gLSAgICAgfQ0KPiA+IC0gICAgIGlmIChuICYgNCkgew0KPiA+ IC0gICAgICAgICAgICAgKChzdHJ1Y3QgcnRlX3VpbnQzMl9hbGlhcyAqKWRzdCktPnZhbCA9DQo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICgoY29uc3Qgc3RydWN0IHJ0ZV91aW50MzJfYWxpYXMg KilzcmMpLT52YWw7DQo+ID4gLSAgICAgICAgICAgICBzcmMgPSAoY29uc3QgdWludDMyX3QgKilz cmMgKyAxOw0KPiA+IC0gICAgICAgICAgICAgZHN0ID0gKHVpbnQzMl90ICopZHN0ICsgMTsNCj4g PiAtICAgICB9DQo+ID4gLSAgICAgaWYgKG4gJiAyKSB7DQo+ID4gLSAgICAgICAgICAgICAoKHN0 cnVjdCBydGVfdWludDE2X2FsaWFzICopZHN0KS0+dmFsID0NCj4gPiAtICAgICAgICAgICAgICAg ICAgICAgKChjb25zdCBzdHJ1Y3QgcnRlX3VpbnQxNl9hbGlhcyAqKXNyYyktPnZhbDsNCj4gPiAt ICAgICAgICAgICAgIHNyYyA9IChjb25zdCB1aW50MTZfdCAqKXNyYyArIDE7DQo+ID4gLSAgICAg ICAgICAgICBkc3QgPSAodWludDE2X3QgKilkc3QgKyAxOw0KPiA+IC0gICAgIH0NCj4gPiAtICAg ICBpZiAobiAmIDEpDQo+ID4gLSAgICAgICAgICAgICAqKHVpbnQ4X3QgKilkc3QgPSAqKGNvbnN0 IHVpbnQ4X3QgKilzcmM7DQo+ID4gLSAgICAgcmV0dXJuIHJldDsNCj4gPiAtfQ0KPiA+IC0NCj4g PiAgLyoqDQo+ID4gICAqIENvcHkgMTYgYnl0ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhl ciwNCj4gPiAgICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcC4NCj4gPiBAQCAtMTMyLDYg Kzg2LDIzIEBAIHJ0ZV9tb3YzMih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4g PiAjZW5kaWYgIH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICogQ29weSA0OCBieXRlcyBmcm9tIG9u ZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiA+ICsgKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVy bGFwLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ ICtydGVfbW92NDgodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMpIHsgI2lmIGRlZmlu ZWQNCj4gPiArUlRFX01FTUNQWV9BVlgNCj4gPiArICAgICBydGVfbW92MzIoKHVpbnQ4X3QgKilk c3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiArICAgICBydGVfbW92MzIoKHVpbnQ4X3Qg Kilkc3QgLSAzMiArIDQ4LCAoY29uc3QgdWludDhfdCAqKXNyYyAtIDMyICsNCj4gPiA0OCk7DQo+ ID4gKyNlbHNlIC8qIFNTRSBpbXBsZW1lbnRhdGlvbiAqLw0KPiA+ICsgICAgIHJ0ZV9tb3YxNigo dWludDhfdCAqKWRzdCArIDAgKiAxNiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAwICoNCj4gPiAx Nik7DQo+ID4gKyAgICAgcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMSAqIDE2LCAoY29uc3Qg dWludDhfdCAqKXNyYyArIDEgKg0KPiA+IDE2KTsNCj4gPiArICAgICBydGVfbW92MTYoKHVpbnQ4 X3QgKilkc3QgKyAyICogMTYsIChjb25zdCB1aW50OF90ICopc3JjICsgMiAqDQo+ID4gMTYpOw0K PiA+ICsjZW5kaWYNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyoqDQo+ID4gICAqIENvcHkgNjQgYnl0 ZXMgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciwNCj4gPiAgICogbG9jYXRpb25zIHNob3Vs ZCBub3Qgb3ZlcmxhcC4NCj4gPiBAQCAtMTcyLDYgKzE0MywxMzcgQEAgcnRlX21vdjI1Nih1aW50 OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYykNCj4gPiAgICAgICBydGVfbW92MTI4KGRzdCAr IDEgKiAxMjgsIHNyYyArIDEgKiAxMjgpOyAgfQ0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiBDb3B5 IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ID4gKyAqIGxvY2F0aW9ucyBz aG91bGQgbm90IG92ZXJsYXAuDQo+ID4gKyAqIFVzZSB3aXRoIG4gPD0gMTYuDQo+ID4gKyAqDQo+ ID4gKyAqIE5vdGU6IENvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcGVyZmVjdGx5IGFj Y2VwdGFibGUuDQo+ID4gKyAqIFVzaW5nIGUuZy4gbWVtY3B5KGRzdCwgc3JjLCA4KSBpbnN0ZWFk IG9mDQo+ID4gKyAqICoodW5hbGlnbmVkX3VpbnQ2NF90KikgPSAqKGNvbnN0IHVuYWxpZ25lZF91 aW50NjRfdCAqKXNyYw0KPiA+ICsgKiBhdm9pZHMgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc291 cmNlIGRhdGEgbWF5IGJlIHVuaW5pdGlhbGl6ZWQNCj4gPiArICogWy1XbWF5YmUtdW5pbml0aWFs aXplZF0uDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkICoN Cj4gPiArcnRlX21vdjE2X29yX2xlc3Modm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVf dCBuKSB7DQo+ID4gKyAgICAgLyogRmFzdGVyIHdheSB3aGVuIHNpemUgaXMga25vd24gYXQgYnVp bGQgdGltZS4gKi8NCj4gPiArICAgICBpZiAoX19ydGVfY29uc3RhbnQobikpIHsNCj4gPiArICAg ICAgICAgICAgIGlmIChuID09IDIpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBt ZW1jcHkoZHN0LCBzcmMsIDIpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKG4gPT0gNCkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbWNweShkc3QsIHNyYywgNCk7DQo+ID4gKyAg ICAgICAgICAgICBpZiAobiA9PSA2KSAvKiA0ICsgMiAqLw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCA2KTsNCj4gPiArICAgICAgICAgICAgIGlmIChu ID09IDgpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMs IDgpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKG4gPT0gMTApIC8qIDggKyAyICovDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIDEwKTsNCj4gPiArICAg ICAgICAgICAgIGlmIChuID09IDEyKSAvKiA4ICsgNCAqLw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCAxMik7DQo+ID4gKyAgICAgICAgICAgICBpZiAo biA9PSAxNikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGVfbW92MTYoKHVpbnQ4X3Qg Kilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGRzdDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIC8qDQo+ID4gKyAgICAgICogTm90ZTogVXNpbmcgIm4gJiBYIiBnZW5lcmF0ZXMgMy1i eXRlICJ0ZXN0IiBpbnN0cnVjdGlvbnMsDQo+ID4gKyAgICAgICogaW5zdGVhZCBvZiAibiA+PSBY Iiwgd2hpY2ggd291bGQgZ2VuZXJhdGUgNC1ieXRlICJjbXAiDQo+ID4gaW5zdHJ1Y3Rpb25zLg0K PiA+ICsgICAgICAqLw0KPiA+ICsgICAgIGlmIChuICYgMHgxOCkgeyAvKiBuID49IDgsIGluY2x1 ZGluZyBuID09IDB4MTAsIGhlbmNlIG4gJiAweDE4Lg0KPiA+ICovDQo+ID4gKyAgICAgICAgICAg ICAvKiBDb3B5IDggfiAxNiBieXRlcy4gKi8NCj4gPiArICAgICAgICAgICAgIG1lbWNweShkc3Qs IHNyYywgOCk7DQo+ID4gKyAgICAgICAgICAgICBtZW1jcHkoKHVpbnQ4X3QgKilkc3QgLSA4ICsg biwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgLSA4DQo+ID4gKyArDQo+ID4gbiwgOCk7DQo+ID4gKyAg ICAgfSBlbHNlIGlmIChuICYgMHg0KSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBDb3B5IDQgfiA3 IGJ5dGVzLiAqLw0KPiA+ICsgICAgICAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCA0KTsNCj4gPiAr ICAgICAgICAgICAgIG1lbWNweSgodWludDhfdCAqKWRzdCAtIDQgKyBuLCAoY29uc3QgdWludDhf dCAqKXNyYyAtIDQNCj4gPiArICsNCj4gPiBuLCA0KTsNCj4gPiArICAgICB9IGVsc2UgaWYgKG4g JiAweDIpIHsNCj4gPiArICAgICAgICAgICAgIC8qIENvcHkgMiB+IDMgYnl0ZXMuICovDQo+ID4g KyAgICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIDIpOw0KPiA+ICsgICAgICAgICAgICAgbWVt Y3B5KCh1aW50OF90ICopZHN0IC0gMiArIG4sIChjb25zdCB1aW50OF90ICopc3JjIC0gMg0KPiA+ ICsgKw0KPiA+IG4sIDIpOw0KPiA+ICsgICAgIH0gZWxzZSBpZiAobiAmIDB4MSkgew0KPiA+ICsg ICAgICAgICAgICAgLyogQ29weSAxIGJ5dGUuICovDQo+ID4gKyAgICAgICAgICAgICBtZW1jcHko ZHN0LCBzcmMsIDEpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICByZXR1cm4gZHN0Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQ29weSBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0 byBhbm90aGVyLA0KPiA+ICsgKiBsb2NhdGlvbnMgc2hvdWxkIG5vdCBvdmVybGFwLg0KPiA+ICsg KiBVc2Ugd2l0aCAxNyAob3IgMTYpIDwgbiA8PSAzMi4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+ICtydGVfbW92MTdfdG9fMzIodm9pZCAqZHN0 LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7DQo+ID4gKyAgICAgLyogRmFzdGVyIHdheSB3 aGVuIHNpemUgaXMga25vd24gYXQgYnVpbGQgdGltZS4gKi8NCj4gPiArICAgICBpZiAoX19ydGVf Y29uc3RhbnQobikpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChuID09IDE2KSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4 X3QgKilzcmMpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHN0Ow0KPiA+ICsg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgaWYgKG4gPT0gMTgpIC8qIDE2ICsgMiAq Lw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCAxOCk7 DQo+ID4gKyAgICAgICAgICAgICBpZiAobiA9PSAyMCkgLyogMTYgKyA0ICovDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIDIwKTsNCj4gPiArICAgICAg ICAgICAgIGlmIChuID09IDI0KSAvKiAxNiArIDggKi8NCj4gPiArICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIG1lbWNweShkc3QsIHNyYywgMjQpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKG4g PT0gMzIpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcnRlX21vdjMyKCh1aW50OF90ICop ZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBkc3Q7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAvKiBDb3B5IDE3IChvciAxNikgfiAzMiBieXRlcy4gKi8NCj4gPiArICAgICBydGVfbW92 MTYoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiArICAgICBydGVf bW92MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90ICopc3JjIC0gMTYg Kw0KPiA+IG4pOw0KPiA+ICsgICAgIHJldHVybiBkc3Q7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBDb3B5IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ID4g KyAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+ID4gKyAqIFVzZSB3aXRoIDMzIChv ciAzMikgPCBuIDw9IDY0Lg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdm9pZCAqDQo+ID4gK3J0ZV9tb3YzM190b182NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNy Yywgc2l6ZV90IG4pIHsNCj4gPiArICAgICAvKiBGYXN0ZXIgd2F5IHdoZW4gc2l6ZSBpcyBrbm93 biBhdCBidWlsZCB0aW1lLiAqLw0KPiA+ICsgICAgIGlmIChfX3J0ZV9jb25zdGFudChuKSkgew0K PiA+ICsgICAgICAgICAgICAgaWYgKG4gPT0gMzIpIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgICAgICAgICBpZiAobiA9PSAzNikgLyogMzIgKyA0ICovDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIDM2KTsNCj4gPiArICAgICAgICAg ICAgIGlmIChuID09IDQwKSAvKiAzMiArIDggKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIG1lbWNweShkc3QsIHNyYywgNDApOw0KPiA+ICsgICAgICAgICAgICAgaWYgKG4gPT0g NDgpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcnRlX21vdjQ4KCh1aW50OF90ICopZHN0 LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biBkc3Q7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBpZiAobiA9PSA2 NCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGVfbW92NjQoKHVpbnQ4X3QgKilkc3Qs IChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGRzdDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAg IC8qIENvcHkgMzMgKG9yIDMyKSB+IDY0IGJ5dGVzLiAqLyAjaWYgZGVmaW5lZCBSVEVfTUVNQ1BZ X0FWWA0KPiA+ICsgICAgIHJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3Qg KilzcmMpOw0KPiA+ICsgICAgIHJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCAtIDMyICsgbiwgKGNv bnN0IHVpbnQ4X3QgKilzcmMgLSAzMiArDQo+ID4gbik7DQo+ID4gKyNlbHNlIC8qIFNTRSBpbXBs ZW1lbnRhdGlvbiAqLw0KPiA+ICsgICAgIHJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCArIDAgKiAx NiwgKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAwICoNCj4gPiAxNik7DQo+ID4gKyAgICAgcnRlX21v djE2KCh1aW50OF90ICopZHN0ICsgMSAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYyArIDEgKg0K PiA+IDE2KTsNCj4gPiArICAgICBpZiAobiA+IDQ4KQ0KPiA+ICsgICAgICAgICAgICAgcnRlX21v djE2KCh1aW50OF90ICopZHN0ICsgMiAqIDE2LCAoY29uc3QgdWludDhfdCAqKXNyYw0KPiA+ICsg KyAyDQo+ID4gKiAxNik7DQo+ID4gKyAgICAgcnRlX21vdjE2KCh1aW50OF90ICopZHN0IC0gMTYg KyBuLCAoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsNCj4gPiBuKTsNCj4gPiArI2VuZGlmDQo+ ID4gKyAgICAgcmV0dXJuIGRzdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgI2lmIGRlZmluZWQgX19B Vlg1MTJGX18gJiYgZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWDUxMg0KPiA+DQo+ID4gIC8qKg0KPiA+ IEBAIC0yMzIsNDUgKzMzNCwyMSBAQCBydGVfbW92NTEyYmxvY2tzKHVpbnQ4X3QgKmRzdCwgY29u c3QgdWludDhfdA0KPiA+ICpzcmMsIHNpemVfdCBuKQ0KPiA+ICAgICAgIH0NCj4gPiAgfQ0KPiA+ DQo+ID4gKy8qKg0KPiA+ICsgKiBDb3B5IGJ5dGVzIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3Ro ZXIsDQo+ID4gKyAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92ZXJsYXAuDQo+ID4gKyAqIFVzZSB3 aXRoIG4gPiA2NC4NCj4gPiArICovDQo+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZv aWQgKg0KPiA+IC1ydGVfbWVtY3B5X2dlbmVyaWModm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMs IHNpemVfdCBuKQ0KPiA+ICtydGVfbWVtY3B5X2dlbmVyaWNfbW9yZV90aGFuXzY0KHZvaWQgKmRz dCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikNCj4gPiAgew0KPiA+ICAgICAgIHZvaWQgKnJl dCA9IGRzdDsNCj4gPiAgICAgICBzaXplX3QgZHN0b2ZzczsNCj4gPiAgICAgICBzaXplX3QgYml0 czsNCj4gPg0KPiA+IC0gICAgIC8qKg0KPiA+IC0gICAgICAqIENvcHkgbGVzcyB0aGFuIDE2IGJ5 dGVzDQo+ID4gLSAgICAgICovDQo+ID4gLSAgICAgaWYgKG4gPCAxNikgew0KPiA+IC0gICAgICAg ICAgICAgcmV0dXJuIHJ0ZV9tb3YxNV9vcl9sZXNzKGRzdCwgc3JjLCBuKTsNCj4gPiAtICAgICB9 DQo+ID4gLQ0KPiA+ICAgICAgIC8qKg0KPiA+ICAgICAgICAqIEZhc3Qgd2F5IHdoZW4gY29weSBz aXplIGRvZXNuJ3QgZXhjZWVkIDUxMiBieXRlcw0KPiA+ICAgICAgICAqLw0KPiA+IC0gICAgIGlm IChfX3J0ZV9jb25zdGFudChuKSAmJiBuID09IDMyKSB7DQo+ID4gLSAgICAgICAgICAgICBydGVf bW92MzIoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiAtICAgICAg ICAgICAgIHJldHVybiByZXQ7DQo+ID4gLSAgICAgfQ0KPiA+IC0gICAgIGlmIChuIDw9IDMyKSB7 DQo+ID4gLSAgICAgICAgICAgICBydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50 OF90ICopc3JjKTsNCj4gPiAtICAgICAgICAgICAgIGlmIChfX3J0ZV9jb25zdGFudChuKSAmJiBu ID09IDE2KQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OyAvKiBhdm9pZCAo aGFybWxlc3MpIGR1cGxpY2F0ZSBjb3B5ICovDQo+ID4gLSAgICAgICAgICAgICBydGVfbW92MTYo KHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ID4gLSAgICAgICAgICAgICBy ZXR1cm4gcmV0Ow0KPiA+IC0gICAgIH0NCj4gPiAtICAgICBpZiAoX19ydGVfY29uc3RhbnQobikg JiYgbiA9PSA2NCkgew0KPiA+IC0gICAgICAgICAgICAgcnRlX21vdjY0KCh1aW50OF90ICopZHN0 LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gLSAgICAgICAgICAgICByZXR1cm4gcmV0Ow0K PiA+IC0gICAgIH0NCj4gPiAtICAgICBpZiAobiA8PSA2NCkgew0KPiA+IC0gICAgICAgICAgICAg cnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gLSAg ICAgICAgICAgICBydGVfbW92MzIoKHVpbnQ4X3QgKilkc3QgLSAzMiArIG4sDQo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYyAtIDMyICsgbik7 DQo+ID4gLSAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+IC0gICAgIH0NCj4gPiAgICAgICBp ZiAobiA8PSA1MTIpIHsNCj4gPiAgICAgICAgICAgICAgIGlmIChuID49IDI1Nikgew0KPiA+ICAg ICAgICAgICAgICAgICAgICAgICBuIC09IDI1NjsNCj4gPiBAQCAtMzgxLDQxICs0NTksMjEgQEAg cnRlX21vdjEyOGJsb2Nrcyh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QNCj4gPiAqc3JjLCBz aXplX3QgbikNCj4gPiAgICAgICB9DQo+ID4gIH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICogQ29w eSBieXRlcyBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLA0KPiA+ICsgKiBsb2NhdGlvbnMg c2hvdWxkIG5vdCBvdmVybGFwLg0KPiA+ICsgKiBVc2Ugd2l0aCBuID4gNjQuDQo+ID4gKyAqLw0K PiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkICoNCj4gPiAtcnRlX21lbWNweV9n ZW5lcmljKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikNCj4gPiArcnRlX21l bWNweV9nZW5lcmljX21vcmVfdGhhbl82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6 ZV90IG4pDQo+ID4gIHsNCj4gPiAgICAgICB2b2lkICpyZXQgPSBkc3Q7DQo+ID4gICAgICAgc2l6 ZV90IGRzdG9mc3M7DQo+ID4gICAgICAgc2l6ZV90IGJpdHM7DQo+ID4NCj4gPiAtICAgICAvKioN Cj4gPiAtICAgICAgKiBDb3B5IGxlc3MgdGhhbiAxNiBieXRlcw0KPiA+IC0gICAgICAqLw0KPiA+ IC0gICAgIGlmIChuIDwgMTYpIHsNCj4gPiAtICAgICAgICAgICAgIHJldHVybiBydGVfbW92MTVf b3JfbGVzcyhkc3QsIHNyYywgbik7DQo+ID4gLSAgICAgfQ0KPiA+IC0NCj4gPiAgICAgICAvKioN Cj4gPiAgICAgICAgKiBGYXN0IHdheSB3aGVuIGNvcHkgc2l6ZSBkb2Vzbid0IGV4Y2VlZCAyNTYg Ynl0ZXMNCj4gPiAgICAgICAgKi8NCj4gPiAtICAgICBpZiAoX19ydGVfY29uc3RhbnQobikgJiYg biA9PSAzMikgew0KPiA+IC0gICAgICAgICAgICAgcnRlX21vdjMyKCh1aW50OF90ICopZHN0LCAo Y29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gLSAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ IC0gICAgIH0NCj4gPiAtICAgICBpZiAobiA8PSAzMikgew0KPiA+IC0gICAgICAgICAgICAgcnRl X21vdjE2KCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNyYyk7DQo+ID4gLSAgICAg ICAgICAgICBpZiAoX19ydGVfY29uc3RhbnQobikgJiYgbiA9PSAxNikNCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsgLyogYXZvaWQgKGhhcm1sZXNzKSBkdXBsaWNhdGUgY29w eSAqLw0KPiA+IC0gICAgICAgICAgICAgcnRlX21vdjE2KCh1aW50OF90ICopZHN0IC0gMTYgKyBu LA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopc3Jj IC0gMTYgKyBuKTsNCj4gPiAtICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gLSAgICAgfQ0K PiA+IC0gICAgIGlmIChuIDw9IDY0KSB7DQo+ID4gLSAgICAgICAgICAgICBydGVfbW92MzIoKHVp bnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsNCj4gPiAtICAgICAgICAgICAgIHJ0 ZV9tb3YzMigodWludDhfdCAqKWRzdCAtIDMyICsgbiwNCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYyAtIDMyICsgbik7DQo+ID4gLSAgICAgICAg ICAgICByZXR1cm4gcmV0Ow0KPiA+IC0gICAgIH0NCj4gPiAgICAgICBpZiAobiA8PSAyNTYpIHsN Cj4gPiAgICAgICAgICAgICAgIGlmIChuID49IDEyOCkgew0KPiA+ICAgICAgICAgICAgICAgICAg ICAgICBuIC09IDEyODsNCj4gPiBAQCAtNTczLDM4ICs2MzEsMjIgQEAgcnRlX21lbWNweV9nZW5l cmljKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLA0KPiA+IHNpemVfdCBuKQ0KPiA+ICAgICAg fQ0KPiA+IFwNCj4gPiAgfQ0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiBDb3B5IGJ5dGVzIGZyb20g b25lIGxvY2F0aW9uIHRvIGFub3RoZXIsDQo+ID4gKyAqIGxvY2F0aW9ucyBzaG91bGQgbm90IG92 ZXJsYXAuDQo+ID4gKyAqIFVzZSB3aXRoIG4gPiA2NC4NCj4gPiArICovDQo+ID4gIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+IC1ydGVfbWVtY3B5X2dlbmVyaWModm9pZCAq ZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiA+ICtydGVfbWVtY3B5X2dlbmVyaWNf bW9yZV90aGFuXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikNCj4gPiAg ew0KPiA+ICAgICAgIF9fbTEyOGkgeG1tMCwgeG1tMSwgeG1tMiwgeG1tMywgeG1tNCwgeG1tNSwg eG1tNiwgeG1tNywgeG1tODsNCj4gPiAgICAgICB2b2lkICpyZXQgPSBkc3Q7DQo+ID4gICAgICAg c2l6ZV90IGRzdG9mc3M7DQo+ID4gICAgICAgc2l6ZV90IHNyY29mczsNCj4gPg0KPiA+IC0gICAg IC8qKg0KPiA+IC0gICAgICAqIENvcHkgbGVzcyB0aGFuIDE2IGJ5dGVzDQo+ID4gLSAgICAgICov DQo+ID4gLSAgICAgaWYgKG4gPCAxNikgew0KPiA+IC0gICAgICAgICAgICAgcmV0dXJuIHJ0ZV9t b3YxNV9vcl9sZXNzKGRzdCwgc3JjLCBuKTsNCj4gPiAtICAgICB9DQo+ID4gLQ0KPiA+ICAgICAg IC8qKg0KPiA+ICAgICAgICAqIEZhc3Qgd2F5IHdoZW4gY29weSBzaXplIGRvZXNuJ3QgZXhjZWVk IDUxMiBieXRlcw0KPiA+ICAgICAgICAqLw0KPiA+IC0gICAgIGlmIChuIDw9IDMyKSB7DQo+ID4g LSAgICAgICAgICAgICBydGVfbW92MTYoKHVpbnQ4X3QgKilkc3QsIChjb25zdCB1aW50OF90ICop c3JjKTsNCj4gPiAtICAgICAgICAgICAgIGlmIChfX3J0ZV9jb25zdGFudChuKSAmJiBuID09IDE2 KQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OyAvKiBhdm9pZCAoaGFybWxl c3MpIGR1cGxpY2F0ZSBjb3B5ICovDQo+ID4gLSAgICAgICAgICAgICBydGVfbW92MTYoKHVpbnQ4 X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90ICopc3JjIC0NCj4gPiAxNiArIG4pOw0K PiA+IC0gICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiAtICAgICB9DQo+ID4gLSAgICAgaWYg KG4gPD0gNjQpIHsNCj4gPiAtICAgICAgICAgICAgIHJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCwg KGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiA+IC0gICAgICAgICAgICAgaWYgKG4gPiA0OCkNCj4g PiAtICAgICAgICAgICAgICAgICAgICAgcnRlX21vdjE2KCh1aW50OF90ICopZHN0ICsgMzIsIChj b25zdCB1aW50OF90ICopc3JjICsNCj4gPiAzMik7DQo+ID4gLSAgICAgICAgICAgICBydGVfbW92 MTYoKHVpbnQ4X3QgKilkc3QgLSAxNiArIG4sIChjb25zdCB1aW50OF90ICopc3JjIC0NCj4gPiAx NiArIG4pOw0KPiA+IC0gICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiAtICAgICB9DQo+ID4g ICAgICAgaWYgKG4gPD0gMTI4KSB7DQo+ID4gICAgICAgICAgICAgICBnb3RvIENPUFlfQkxPQ0tf MTI4X0JBQ0sxNTsNCj4gPiAgICAgICB9DQo+ID4gQEAgLTY5Niw0NCArNzM4LDE2IEBAIHJ0ZV9t ZW1jcHlfZ2VuZXJpYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywNCj4gPiBzaXplX3QgbikN Cj4gPg0KPiA+ICAjZW5kaWYgLyogX19BVlg1MTJGX18gKi8NCj4gPg0KPiA+ICsvKioNCj4gPiAr ICogQ29weSBieXRlcyBmcm9tIG9uZSB2ZWN0b3IgcmVnaXN0ZXIgc2l6ZSBhbGlnbmVkIGxvY2F0 aW9uIHRvDQo+ID4gYW5vdGhlciwNCj4gPiArICogbG9jYXRpb25zIHNob3VsZCBub3Qgb3Zlcmxh cC4NCj4gPiArICogVXNlIHdpdGggbiA+IDY0Lg0KPiA+ICsgKi8NCj4gPiAgc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdm9pZCAqDQo+ID4gLXJ0ZV9tZW1jcHlfYWxpZ25lZCh2b2lkICpkc3Qs IGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pDQo+ID4gK3J0ZV9tZW1jcHlfYWxpZ25lZF9tb3Jl X3RoYW5fNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQ0KPiA+ICB7DQo+ ID4gICAgICAgdm9pZCAqcmV0ID0gZHN0Ow0KPiA+DQo+ID4gLSAgICAgLyogQ29weSBzaXplIDwg MTYgYnl0ZXMgKi8NCj4gPiAtICAgICBpZiAobiA8IDE2KSB7DQo+ID4gLSAgICAgICAgICAgICBy ZXR1cm4gcnRlX21vdjE1X29yX2xlc3MoZHN0LCBzcmMsIG4pOw0KPiA+IC0gICAgIH0NCj4gPiAt DQo+ID4gLSAgICAgLyogQ29weSAxNiA8PSBzaXplIDw9IDMyIGJ5dGVzICovDQo+ID4gLSAgICAg aWYgKF9fcnRlX2NvbnN0YW50KG4pICYmIG4gPT0gMzIpIHsNCj4gPiAtICAgICAgICAgICAgIHJ0 ZV9tb3YzMigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiA+IC0gICAg ICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiAtICAgICB9DQo+ID4gLSAgICAgaWYgKG4gPD0gMzIp IHsNCj4gPiAtICAgICAgICAgICAgIHJ0ZV9tb3YxNigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVp bnQ4X3QgKilzcmMpOw0KPiA+IC0gICAgICAgICAgICAgaWYgKF9fcnRlX2NvbnN0YW50KG4pICYm IG4gPT0gMTYpDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7IC8qIGF2b2lk IChoYXJtbGVzcykgZHVwbGljYXRlIGNvcHkgKi8NCj4gPiAtICAgICAgICAgICAgIHJ0ZV9tb3Yx NigodWludDhfdCAqKWRzdCAtIDE2ICsgbiwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgdWludDhfdCAqKXNyYyAtIDE2ICsgbik7DQo+ID4gLQ0KPiA+IC0gICAgICAg ICAgICAgcmV0dXJuIHJldDsNCj4gPiAtICAgICB9DQo+ID4gLQ0KPiA+IC0gICAgIC8qIENvcHkg MzIgPCBzaXplIDw9IDY0IGJ5dGVzICovDQo+ID4gLSAgICAgaWYgKF9fcnRlX2NvbnN0YW50KG4p ICYmIG4gPT0gNjQpIHsNCj4gPiAtICAgICAgICAgICAgIHJ0ZV9tb3Y2NCgodWludDhfdCAqKWRz dCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiA+IC0gICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4gPiAtICAgICB9DQo+ID4gLSAgICAgaWYgKG4gPD0gNjQpIHsNCj4gPiAtICAgICAgICAgICAg IHJ0ZV9tb3YzMigodWludDhfdCAqKWRzdCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiA+IC0g ICAgICAgICAgICAgcnRlX21vdjMyKCh1aW50OF90ICopZHN0IC0gMzIgKyBuLA0KPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopc3JjIC0gMzIgKyBuKTsN Cj4gPiAtDQo+ID4gLSAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+IC0gICAgIH0NCj4gPiAt DQo+ID4gICAgICAgLyogQ29weSA2NCBieXRlcyBibG9ja3MgKi8NCj4gPiAgICAgICBmb3IgKDsg biA+IDY0OyBuIC09IDY0KSB7DQo+ID4gICAgICAgICAgICAgICBydGVfbW92NjQoKHVpbnQ4X3Qg Kilkc3QsIChjb25zdCB1aW50OF90ICopc3JjKTsgQEANCj4gPiAtNzUxLDEwICs3NjUsMjIgQEAg cnRlX21lbWNweV9hbGlnbmVkKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLA0KPiA+IHNpemVf dCBuKSAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCAqICBydGVfbWVtY3B5KHZvaWQg KmRzdCwNCj4gPiBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSAgew0KPiA+ICsgICAgIC8qIENv bW1vbiBpbXBsZW1lbnRhdGlvbiBmb3Igc2l6ZSA8PSA2NCBieXRlcy4gKi8NCj4gPiArICAgICBp ZiAobiA8PSAxNikNCj4gPiArICAgICAgICAgICAgIHJldHVybiBydGVfbW92MTZfb3JfbGVzcyhk c3QsIHNyYywgbik7DQo+ID4gKyAgICAgaWYgKG4gPD0gNjQpIHsNCj4gPiArICAgICAgICAgICAg IC8qIENvcHkgMTcgfiA2NCBieXRlcyB1c2luZyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zLiAqLw0KPiA+ ICsgICAgICAgICAgICAgaWYgKG4gPD0gMzIpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBydGVfbW92MTdfdG9fMzIoZHN0LCBzcmMsIG4pOw0KPiA+ICsgICAgICAgICAgICAgZWxz ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnRlX21vdjMzX3RvXzY0KGRzdCwg c3JjLCBuKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIEltcGxlbWVudGF0aW9u IGZvciBzaXplID4gNjQgYnl0ZXMgZGVwZW5kcyBvbiBhbGlnbm1lbnQgd2l0aA0KPiA+IHZlY3Rv ciByZWdpc3RlciBzaXplLiAqLw0KPiA+ICAgICAgIGlmICghKCgodWludHB0cl90KWRzdCB8ICh1 aW50cHRyX3Qpc3JjKSAmIEFMSUdOTUVOVF9NQVNLKSkNCj4gPiAtICAgICAgICAgICAgIHJldHVy biBydGVfbWVtY3B5X2FsaWduZWQoZHN0LCBzcmMsIG4pOw0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIHJ0ZV9tZW1jcHlfYWxpZ25lZF9tb3JlX3RoYW5fNjQoZHN0LCBzcmMsIG4pOw0KPiA+ICAg ICAgIGVsc2UNCj4gPiAtICAgICAgICAgICAgIHJldHVybiBydGVfbWVtY3B5X2dlbmVyaWMoZHN0 LCBzcmMsIG4pOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJ0ZV9tZW1jcHlfZ2VuZXJpY19t b3JlX3RoYW5fNjQoZHN0LCBzcmMsIG4pOw0KPiA+ICB9DQo+ID4NCj4gPiAgI3VuZGVmIEFMSUdO TUVOVF9NQVNLDQo+ID4gLS0NCj4gPiAyLjQzLjANCg0K