From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 763F22040AB; Thu, 17 Apr 2025 06:40:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=60.244.123.138 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744872007; cv=fail; b=ZgtoOzsOUM0AeSZ6rosl3ZFAaR3wTbnrSmhsXp0hqYCzw5CzZHeao3SUe5EDVqE4VOxs6IaUntYcH9qJV49auOpwkdCjGdWpVBtDOBQ9dFXwTqgf5Z4OBNu9+JaClHqhi86NZJAtoKJLIxQwki0gWWviWUia7/uQRih+J+N6D40= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744872007; c=relaxed/simple; bh=3zNUUMk/RY7ZIzGHOUIb9S9JZiLNcNdI4OiKQ667ZvI=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=C/yT+Q4GxKOYW+OWnSgHJY5YWy2MPp7ZTuoEmDBDIRZBwuR0E+IbbmFlGymukFLSJHMWQvA4Hp3X5az+XRlbZpafnwwyCK71RRRf7f+nkK+jeWX665jIrN6vuo/ZmXYJ5xPgJnR07SGW/7cfF7yFbnC7FDZp5sWsNW9gyzcukSE= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=OQKWabcw; dkim=pass (1024-bit key) header.d=mediateko365.onmicrosoft.com header.i=@mediateko365.onmicrosoft.com header.b=QNbxf7vt; arc=fail smtp.client-ip=60.244.123.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="OQKWabcw"; dkim=pass (1024-bit key) header.d=mediateko365.onmicrosoft.com header.i=@mediateko365.onmicrosoft.com header.b="QNbxf7vt" X-UUID: c2da0ac21b5611f0aae1fd9735fae912-20250417 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=3zNUUMk/RY7ZIzGHOUIb9S9JZiLNcNdI4OiKQ667ZvI=; b=OQKWabcwDYXpLHDRZYIKiADv8sb4kM22znmDXogyJTMBjv45sjbIFO6tjbtdlzn88U6lHWhouS8gF6L5RPOOYAB8finITcrL9ymviJrn7+qFkAnPoe3l+qIE8oo1ThM+v8hAxSy9aKrVjjmqiMvXsWg8jWtmn6IgBTsr0z4yBLc=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.2.1,REQID:2f09c5f6-9aa0-4761-b326-4988f57b6d48,IP:0,UR L:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION:r elease,TS:0 X-CID-META: VersionHash:0ef645f,CLOUDID:903daec7-16da-468a-87f7-8ca8d6b3b9f7,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:80|81|82|83|102|110|111,TC:nil,Conte nt:0|50,EDM:-3,IP:nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:1, OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,OSH X-CID-BAS: 2,OSH,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: c2da0ac21b5611f0aae1fd9735fae912-20250417 Received: from mtkmbs11n2.mediatek.inc [(172.21.101.187)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1202783329; Thu, 17 Apr 2025 14:39:49 +0800 Received: from mtkmbs10n2.mediatek.inc (172.21.101.183) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.39; Thu, 17 Apr 2025 14:39:48 +0800 Received: from TYDPR03CU002.outbound.protection.outlook.com (172.21.101.237) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server id 15.2.1258.39 via Frontend Transport; Thu, 17 Apr 2025 14:39:48 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qJJXFXNBVf/J6tepr6P5DCgPIxMeucFRo5nlxKdh8mgNnF0oJqxKr7ckhR/EFruqb3zbw/6BuJcWWJCzmzhvP92WpdKohZiKQQvfUc2p+mTpnU32xnXlWtMQJBYj8H85vz29TGmCdoTpnbuKjgXOnBrjmVSIPNOlxN5k63Xslf9HkI7SwSM9r2QI97IRDvKZxemOsAQWIzXv4DpgvbxoFGRBdt8DFq41wtqP4SPv3vPV+q/GYIjzqk7s718+1t1fUDhKF2JPjstp4kM30dnmaiOaeYzzDzP5yawfKrQwMa/yE1pnUhg0ZOorH/HCiDbhNvwgfSlLsFyqCVLk8t/k/Q== 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=3zNUUMk/RY7ZIzGHOUIb9S9JZiLNcNdI4OiKQ667ZvI=; b=B7hSCQRr/4oPnE3RyPSj/ZYq4+0bKRgfIZuEfBxfdEL7G4/7uTjZfzuQj0+e8EQm/EC8+y2n523YDTTDiiFrL8TPorQvnl7MET42AVyClML4/b6IHRxy5+zRnmteSjb+Rme05vkDFUf3EQ3eGizinpzYIAaSetHms3S1gZma8/bVoWV7eCj/ii/tIBVvkd4kmlYVrRuALeymwkzxgGvbYHrIvHQimR+rx6SHARd72p3w216/+ZekCFH1IhSe5rSQ9k5B6iroS/h2ynIDWs+EisdPfBNCZ13AESmrAE6afszF3urWYy1yIBe+Miw2LZEVQQZuBHY9WmaJ2LebSEUGsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3zNUUMk/RY7ZIzGHOUIb9S9JZiLNcNdI4OiKQ667ZvI=; b=QNbxf7vtm0k6ZgAryUyVpg7tY+jLoCusBblQ2Q091++dlPgxBFiCkOuEwHZUoR5MM3ZAL1jji6yx7rOtcbD5REF8Vveby1wHWYMmBksOi6LNulsR8N7UkbC7+DD5uiTyCKqLPG+eDGr/lmUCti/X+Cy6bfBg7KAnlu49PwAwuSg= Received: from SEYPR03MB6626.apcprd03.prod.outlook.com (2603:1096:101:83::7) by SEZPR03MB8711.apcprd03.prod.outlook.com (2603:1096:101:233::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.34; Thu, 17 Apr 2025 06:39:44 +0000 Received: from SEYPR03MB6626.apcprd03.prod.outlook.com ([fe80::9fa0:ee98:d5ed:beba]) by SEYPR03MB6626.apcprd03.prod.outlook.com ([fe80::9fa0:ee98:d5ed:beba%3]) with mapi id 15.20.8632.035; Thu, 17 Apr 2025 06:39:43 +0000 From: =?utf-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?= To: "linux-media@vger.kernel.org" , AngeloGioacchino Del Regno , "robh@kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "mchehab@kernel.org" , =?utf-8?B?Qm8gS29uZyAo5a2U5rOiKQ==?= , "linux-mediatek@lists.infradead.org" CC: =?utf-8?B?Wmhhb3l1YW4gQ2hlbiAo6ZmI5YWG6L+cKQ==?= , =?utf-8?B?VGVkZHkgQ2hlbiAo6Zmz5Lm+5YWDKQ==?= , Project_Global_Chrome_Upstream_Group Subject: Re: [PATCH v5 4/4] media: mediatek: add MT8188 AIE driver Thread-Topic: [PATCH v5 4/4] media: mediatek: add MT8188 AIE driver Thread-Index: AQHbpGzImGiL60SuWk2zXAmaW2YIQbOnfiYA Date: Thu, 17 Apr 2025 06:39:43 +0000 Message-ID: References: <20250403074005.21472-1-bo.kong@mediatek.com> <20250403074005.21472-5-bo.kong@mediatek.com> In-Reply-To: <20250403074005.21472-5-bo.kong@mediatek.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.52.3-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SEYPR03MB6626:EE_|SEZPR03MB8711:EE_ x-ms-office365-filtering-correlation-id: 7c7b9b17-7e76-4248-472a-08dd7d7aa35d x-ld-processed: a7687ede-7a6b-4ef6-bace-642f677fbe31,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?cFZaK1RwOW9VTnNiM3NiZTl1bUZjUXplaEVmWU1rVDR0elc1YVZseTFJbDUx?= =?utf-8?B?UDVheUROUU9Yb2JVUHp4K3RIOTdRR0pkK3Y2NHUxeStCSFRBQ3RCbHdRWks4?= =?utf-8?B?NUwwdEJMVVREd2kvazk1U21NSWEzZFlQVFdiZXh0ZU40UHV2cHlFNEpnclJT?= =?utf-8?B?NFVTejRVUkRQZHk3TjJvS3lOS214VllvdlZNblJSWFJNUVJTRE5JUDJicTVl?= =?utf-8?B?MUFyZHB5U1IybFU4Y0hydUVzeGF5dW5yZHNiTTJjUVAzME84VmpUSlp3Z0pp?= =?utf-8?B?ZFNma1NldUNFeXovWDBVZ2ZLckFBaWVHZEdNcHRHeVIwZFZReFo1Nk44UzVM?= =?utf-8?B?OTNSYi9FUXM4VkxCek1KYU95NEZRczR4c01sejhVUk1UTGlUUGZ6WVJIMm43?= =?utf-8?B?NDlHZW54dnZmdDhzNkpraFVBYUFtWUdDK3BrMmZ0VW1HUnRBcEpGNCthem5Q?= =?utf-8?B?WlVXMUNOZ082bnJmcWVtazVsYmc0MHRkMzltK0Y0dERpMU0vQzBFcmZFTEVm?= =?utf-8?B?a3g2MFd4MW8vVmw3bmNQMEtFT3B2cWE4MmVzZDlvbHU1akVYZnlBTXpJT1dX?= =?utf-8?B?VEhVZHJIUVRUdHFvK2ZuSXdENFNkSFY0TndCSGNGQkVaV3BFdnNqRVBFUU1x?= =?utf-8?B?T1NFUFZzNDhtbU9tUU9oYWR3ZTdmTHExSXRmRzZtUGxFV0RXMnd1K0VEc0hZ?= =?utf-8?B?cU5tb3pyWUFXcmlPWVpUdUZtWkttWkRQZWZhNkFJR2NMcVJ2NGh3b3ZVWFo2?= =?utf-8?B?YTVzcWIvcStjOHBKOVFORWNURWRaTklZR3F5SWZwUFhOUk9tSHExUVJOMHF6?= =?utf-8?B?Q0IwWGRrV2ZnMUV0MVF6U0pSYWdGZXFRYlVqaDkrb0JGS3owQnJseVhDeFM2?= =?utf-8?B?K21FUFlVRm1ieGE0SVhCNlhDZEpWYnhZZVYzVlNWdHlrL25tSk1Rc3J5Ympi?= =?utf-8?B?QzFHWVM3TGNEM2s2TGR3QkN1ZDU3ejUxbmVWYU1obXMvaEQzWmwvaDRDeFNS?= =?utf-8?B?d3NpVnR5OWpyNEJNMW5iOXBsNE0xUW9HRzRZdmJERnhESWxNQzVjMXN6Y0Rp?= =?utf-8?B?UC9hMU1SZVY1ZnpUcWpFbkNhWnZ6T0dVcnVMZ1NXNzU5MHVkTlVJYnhBY2VJ?= =?utf-8?B?dGV5SnZ6VDltbDBtbFlreFhOM2MvU1NSWDZrUVlrZWVaM3JOMzdRc0FsRVB3?= =?utf-8?B?M1JWbHZhWmliVjI3SndiT0ZsUktHK2xwZzJ1QkJkVVVENkM2YlY1YXNnUUZs?= =?utf-8?B?bXJuNTFUMXZLTXB0U0NVRitNZkIyVkl4aVRCbUxQdERDMWRaQlJndEw5WTVR?= =?utf-8?B?T0NrOFJ6V0lUQnZXUUV5QjVzdGFsYStMYjZwcUhCeU9kUFJwMVlEelhNRkhR?= =?utf-8?B?TzVMNkJzZGRhTlQya1FEWXAweSttMEp5Z2x5YUQ0b3lmeENRRllRWWNuZWQ3?= =?utf-8?B?ZEdjRU1KSkdGS0JQTThZKzJ6QysvVFl0elhrcXB2MVJROUpUeENCQkgyQ0JX?= =?utf-8?B?UW5VZzRNamZYL1hpcldhZHltRzhJaWhHNUVnT2hnSnRtMUdMZVpzWkFWM2h1?= =?utf-8?B?SFJQNzMyT1ZGVTRqeU5ZZ0J2Rm5FMlJrTjBGYXhSUWhmRm1iU3g3WDVtczdV?= =?utf-8?B?OGZzUlhGbFNmSHQyVmZDWlBHSEFjY1dmMXl1ZVphOXdLYjdiNWR0WVZyU0JE?= =?utf-8?B?bEdCdExLdHAzcXE1ZFRMNTlrTWFJd3RLVmRJL2EzSnBCSmc0VUpxbjVvZzIr?= =?utf-8?B?UXZRakE3dkZaK25RU2F1aFJ0QVhGR0F0c0Y1QXVEL1UyVWVlWmpBOTh0YkJy?= =?utf-8?B?bTZTNlg4WUVBVDZDalFpTW1VWG1GSExudHNWUjdNSStGYzNMbmNyT0xLeTZh?= =?utf-8?B?Z01EcHNJMWpWM0pQNldzUE81R05UOEdKTGx1WC8ycjc4U1llNW8xN2FqTmt0?= =?utf-8?B?SDNUT1MrQ3psVnd0d1BYb05kT0lsWlJsYmtMRzJtdVBFc0E3a2JEV0lDNEIw?= =?utf-8?B?R296Q01aNDhRPT0=?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SEYPR03MB6626.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TURrME1nNXhQS0hTb2JhQUVrZTFRSmVvdWYyK0ZnQlpwVmo1a3VCSVNCeXlv?= =?utf-8?B?dWdOeEdlK292b01BdzdpUUNaVVE0MDlkSVJ1VkFvWjZ1UkdGMXY4WC83ZkdK?= =?utf-8?B?WkJXQkhCcDBtdFdDVXE5UGdhRE8rZWx2Q0VTalVTd1oxZHhzQ0tHMXZKaXBj?= =?utf-8?B?eG16Z2NHd0Z5VzZIQVMwbUVjRlFPcWN3QWx0bGlNeWJpNVNVaWt6NEx3U2NI?= =?utf-8?B?c1UrVERkblFYYWtuTlBQK214UzZSRktmSW9aMWtWd0lvcWtoMjdFbXpLRUh6?= =?utf-8?B?Vy9zY0lDOE9PTjRHZ2pkYjBSNnhXS0RjMDNFVDBQQXZUajFyd1RHdjRrVC9I?= =?utf-8?B?amdGU0IvbHduVXNTekFYeWdPUUlPZlloZis2TmJUL3VPS3FHaEpVQWJ0anFH?= =?utf-8?B?elFCeVVwMkpSbkNNYldCcXVqS2IrWlpRK2VJcThhUjNpeUN5dnltRzNieUwx?= =?utf-8?B?UytmdGlyYnI0WWR2ZDVBUTRaWS9SbVR2WkFvVWNObGlSaWRCRHV4czVvUThz?= =?utf-8?B?WFIxSkpKd1pCQ0FzNDZtZGhjR1BRc2F1bElTcGFlQTl5aExCSk1zYy81Rk1D?= =?utf-8?B?a280Rk1xcEF5SGhnVXNYSVhJcGVOUHEvS3NWQ29GK1pkVjZJb2dZcUpwelZr?= =?utf-8?B?U2lzMVhlNkJIVXRSSUZPOVFmaVpGZ2hFRHgwc2R1dHJWNi9UMWdOVHJZOGJx?= =?utf-8?B?SzNQcTJ4d3BVc1NaRVFLL2hjaWpqVnltc1hYRXhJOW5LVUxNY3c0bDBrZnpt?= =?utf-8?B?R1VUZytjcy9yMVRtUkh1ZXA2aDU1L0pDWHZGVlJnQi9KUStmWFFwQUtFSVRR?= =?utf-8?B?OEVyWXVNbm45WlZ1cXA3L3JWLzhBcnRJWlFvMkxtVWoyQUhIVklITUhiOExL?= =?utf-8?B?bFd4cHF3NjNGcXZnKzloeC9LSzNMaVpMMFhJdUVDL1A2SEcwQ1AwaVRxMWxT?= =?utf-8?B?NFFNNmNrSVp5MG05Tk16NGtJZWE3ejZUdHdwYUNmSGZ3Sk5TV3ZxZXFtbmtE?= =?utf-8?B?SVhIb3NoVHBwaUZHL1BBYWROUytnVENPTCtTSk05MnJnNVNrbGo1Y1dzWWVZ?= =?utf-8?B?M1dkcm8wd1NTM3RHenI4QkhZSkxtNHRud2RkRUVWM0QxS2NPV3ZYeUw3Sm8z?= =?utf-8?B?Ly9HK29SSDFaemVqYU9iUWhiQitUbkdvR0x5UjF1QUdrNGV1OWdLSE9RRXF3?= =?utf-8?B?S0VyK2x0ZFVyQ1dvRitqWEdhNjAxa0o4b004VHlvSkFNY0JhTGZLa3h5eldK?= =?utf-8?B?V2R3MWVSYVB1SnNwa3Z2UFVMZVI3eVFybk1wMHZud0JyVlhZUUg4dmJBdmVy?= =?utf-8?B?VHFXQ21zenIzNGdIdjV5aDF5MGVHQTJRMVpITlV2elcyNEs0OWZ2L0NBY0p0?= =?utf-8?B?UmVnNVR4a3hWYmJiZjV0NVkyTWMybzlBaDk3bURwVjRuRUV4a1JBZi9Fd2VM?= =?utf-8?B?MzZ4SERoSHZrcGZ5eVN2d094dEw3dkRTa095bzFvemswUE40WTQraFZXWkdp?= =?utf-8?B?UHFBQm9yY2JTQk9EUzlwdVJqWEpQcFFsckhyY3pzQWJhVTRJV3R6S05obllp?= =?utf-8?B?MXo1WHlwWEhQZkhXaTV2Z1lZWnp6T1kvUDFVUXVCWW94RlR4dlJrYnNHc3Rz?= =?utf-8?B?b1g5SEU3RlJTZ0p4Y0xCUit5YnJ1L0JhNjBiWDNpSVVqS3F5SERHMEMrZVhS?= =?utf-8?B?bk0yaWNlQ0JBYnVUMkxqVzBaUUdwelEyMHlERkJYVEZvZlJNNjlXcjl5N0JC?= =?utf-8?B?M1oralF0NkJGOWNnOVUvYnQvak1SZTUxSjMwNlM3S2t2VlBFSEhXWGVqWXBu?= =?utf-8?B?ank0M2hROTNqSWdhSWlQZlBDUzl0Q2pWUFdHMUVHNlM5NDRXbDFpWWRpNWh4?= =?utf-8?B?LzVuemJBU05tMmJhTXljVi9JQURFSzRYWktrMHA5ZTRPbmNUYkptYzBETHNu?= =?utf-8?B?NThOemFGaEIrSzdSNW5hVXFhK0Z1eVdLNmw1Tm9lNExrY09iUzlrOG1vVlEx?= =?utf-8?B?bmNQZzJaWDFvenMvNHhVNVd2UlJLU3hmL29xdmZIMGU0Mk5PT2dSWnZLZUFL?= =?utf-8?B?TGxVakpsZ1hOR01mWTlYUGczczVwU2kxVm9KNW4xd1JmODBBTTBlei9MWkFS?= =?utf-8?Q?3BSrrQ8aFRiApNZN5KP0AhIo6?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SEYPR03MB6626.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c7b9b17-7e76-4248-472a-08dd7d7aa35d X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Apr 2025 06:39:43.6642 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MmEYMlafVbdoYSwkiCmWFCj1tjfkUqR2Sn/pb7rUpFuJ/GwX5USH30Ab/GKh/ROIN8RBMDcL6g+BZhe+e6AOEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR03MB8711 T24gVGh1LCAyMDI1LTA0LTAzIGF0IDE1OjM4ICswODAwLCBiby5rb25nIHdyb3RlOg0KPiBGcm9t OiBCbyBLb25nIDxCby5Lb25nQG1lZGlhdGVrLmNvbT4NCj4gDQo+IEFkZCBhIFY0TDIgc3ViLWRl dmljZSBkcml2ZXIgZm9yIE1UODE4OCBBSUUuDQoNClRoaXMgcGF0Y2ggaXMgYSBsaXR0bGUgYmln LCBzbyBzZXBhcmF0ZSB0aGlzIHBhdGNoIGJ5IGZkX21vZGUuDQpTbyB0aGVzZSBwYXRjaCB3b3Vs ZCBiZToNCg0KMS4gQWRkIE1UODE4OCBBSUUgZHJpdmVyIChzdXBwb3J0IEZETU9ERSBvbmx5KQ0K Mi4gQWRkIEFUVFJJQlVURU1PREUNCjMuIEFkZCBGTERNT0RFDQoNCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IEJvIEtvbmcgPEJvLktvbmdAbWVkaWF0ZWsuY29tPg0KPiAtLS0NCg0KW3NuaXBdDQoNCj4g Kw0KPiArZW51bSBSU19DT05GSUcgew0KPiArCVJTX1hfWV9NQUcgPSAxLA0KPiArCVJTX1NSWl9I T1JJX1NURVAgPSAzLA0KPiArCVJTX1NSWl9WRVJUX1NURVAsDQoNCllvdSBhbGxvY2F0ZSBtZW1v cnkgZm9yIHRoZSBpbmRleCA1IGFuZCA2IGJ1dCBpdCdzIG5vdCB1c2VkLg0KQWRkIHRoZSBjb21t ZW50IHRvIGRlc2NyaWJlIHdoeSB5b3UgYWxsb2NhdGUgdGhpcyBtZW1vcnkgYnV0IG5vdCB1c2Ug aXQuDQoNCj4gKwlSU19JTlBVVF9XX0ggPSA3LA0KPiArCVJTX09VVFBVVF9XX0gsDQo+ICsJUlNf SU5fWF9ZX1NJWkUwID0gMTAsDQo+ICsJUlNfSU5fU1RSSURFMCwNCj4gKwlSU19JTl9YX1lfU0la RTEsDQo+ICsJUlNfSU5fU1RSSURFMSwNCj4gKwlSU19JTl9YX1lfU0laRTIsDQo+ICsJUlNfSU5f U1RSSURFMiwNCj4gKwlSU19PVVRfWF9ZX1NJWkUwLA0KPiArCVJTX09VVF9TVFJJREUwLA0KPiAr CVJTX09VVF9YX1lfU0laRTEsDQo+ICsJUlNfT1VUX1NUUklERTEsDQo+ICsJUlNfT1VUX1hfWV9T SVpFMiwNCj4gKwlSU19PVVRfU1RSSURFMiwNCj4gKwlSU19JTl8wLA0KPiArCVJTX0lOXzEsDQo+ ICsJUlNfSU5fMiwNCj4gKwlSU19PVVRfMCwNCj4gKwlSU19PVVRfMSwNCj4gKwlSU19PVVRfMiwN Cj4gKwlSU19DT05fSU5fQkFfTVNCLA0KPiArCVJTX0NPTl9PVVRfQkFfTVNCLA0KPiArfTsNCj4g Kw0KPiANCg0KW3NuaXBdDQoNCj4gKw0KPiArc3RydWN0IGFpZV9zdGF0aWNfaW5mb19lbGVtZW50 IHsNCj4gKwl1MzIgZmRfd2RtYV9zaXplW09VVFBVVF9XRE1BX1dSQV9OVU1dOw0KPiArCXUzMiBv dXRfeHNpemVfcGx1c18xOw0KPiArCXUzMiBvdXRfaGVpZ2h0Ow0KPiArCXUzMiBvdXRfeXNpemVf cGx1c18xX3N0cmlkZTI7DQo+ICsJdTMyIG91dF9zdHJpZGU7DQo+ICsJdTMyIG91dF9zdHJpZGVf c3RyaWRlMjsNCj4gKwl1MzIgb3V0X3dpZHRoOw0KPiArCXUzMiBpbWdfd2lkdGg7DQo+ICsJdTMy IGltZ19oZWlnaHQ7DQo+ICsJdTMyIHN0cmlkZTJfb3V0X3dpZHRoOw0KPiArCXUzMiBzdHJpZGUy X291dF9oZWlnaHQ7DQo+ICsJdTMyIG91dF94c2l6ZV9wbHVzXzFfc3RyaWRlMjsNCj4gKwl1MzIg aW5wdXRfeHNpemVfcGx1c18xOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGFpZV9zdGF0aWNfaW5m byB7DQo+ICsJc3RydWN0IGFpZV9zdGF0aWNfaW5mb19lbGVtZW50IGluZl9lbG1bRkRfTE9PUF9O VU1dOw0KPiArfTsNCg0KYWllX3N0YXRpY19pbmZve30gaXMgcmVkdW5kYW50Lg0KVXNlIHN0cnVj dCBhaWVfc3RhdGljX2luZm9fZWxlbWVudHt9IGRpcmVjdGx5Lg0KDQo+ICsNCj4gK2VudW0gYWll X3N0YXRlIHsNCj4gKwlTVEFURV9OQSwNCj4gKwlTVEFURV9JTklULA0KPiArCVNUQVRFX09QRU4N Cj4gK307DQo+ICsNCg0KW3NuaXBdDQoNCj4gKw0KPiArc3RydWN0IGFpZV9yZWdfY2ZnIHsNCj4g Kwl1MzIgcnNfYWRyOw0KPiArCXUzMiB5dXYycmdiX2FkcjsNCj4gKwl1MzIgZmRfYWRyOw0KPiAr CXUzMiBmZF9wb3NlX2FkcjsNCg0KZmRfcG9zZV9hZHIgaXMgdXNlbGVzcywgc28gZHJvcCBpdC4N Cg0KPiArCXUzMiBmZF9tb2RlOw0KPiArCXUzMiBod19yZXN1bHQ7DQo+ICsJdTMyIGh3X3Jlc3Vs dDE7DQo+ICsJdTMyIHJlc2VydmVkOw0KDQpyZXNlcnZlZCBpcyB1c2VsZXNzLCBzbyBkcm9wIGl0 Lg0KDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgYWllX2h3X3JlY3Qgew0KPiArCXUxNiB3aWR0aDsN Cj4gKwl1MTYgaGVpZ2h0Ow0KPiArfTsNCg0KW3NuaXBdDQoNCj4gKw0KPiArc3RydWN0IGFpZV9h dHRyX3BhcmEgew0KPiArCXUzMiB3X2lkeDsNCj4gKwl1MzIgcl9pZHg7DQoNCkluIHRoaXMgY29k ZSwgb25seSBvbmUgYXR0cmlidXRlIHBhcmFtZXRlciBpcyB1c2VkIGF0IG9uZSB0aW1lLg0KU28g aXQncyBub3QgbmVjZXNzYXJ5IHRvIHF1ZXVlIHRoZSBhdHRyaWJ1dGUgcGFyYW1ldGVyLg0KRHJv cCB3X2lkeCBhbmQgcl9pZHguDQoNCj4gKwl1MzIgc2VsX21vZGVbTUFYX0VOUVVFX0ZSQU1FX05V TV07DQo+ICsJdTE2IGltZ193aWR0aFtNQVhfRU5RVUVfRlJBTUVfTlVNXTsNCj4gKwl1MTYgaW1n X2hlaWdodFtNQVhfRU5RVUVfRlJBTUVfTlVNXTsNCj4gKwl1MTYgY3JvcF93aWR0aFtNQVhfRU5R VUVfRlJBTUVfTlVNXTsNCj4gKwl1MTYgY3JvcF9oZWlnaHRbTUFYX0VOUVVFX0ZSQU1FX05VTV07 DQo+ICsJdTMyIHNyY19pbWdfZm10W01BWF9FTlFVRV9GUkFNRV9OVU1dOw0KPiArCXUzMiByb3Rh dGVfZGVncmVlW01BWF9FTlFVRV9GUkFNRV9OVU1dOw0KPiArCXUzMiBzcmNfaW1nX2FkZHJbTUFY X0VOUVVFX0ZSQU1FX05VTV07DQo+ICsJdTMyIHNyY19pbWdfYWRkcl91dltNQVhfRU5RVUVfRlJB TUVfTlVNXTsNCj4gK307DQo+ICsNCg0KW3NuaXBdDQoNCj4gKw0KPiArc3RydWN0IGltZW1fYnVm X2luZm8gew0KPiArCXZvaWQgKnZhOw0KPiArCWRtYV9hZGRyX3QgcGE7DQo+ICsJdW5zaWduZWQg aW50IHNpemU7DQo+ICsJdW5zaWduZWQgaW50IHJlc2VydmVkOw0KDQpyZXNlcnZlZCBpcyB1c2Vs ZXNzLCBzbyBkcm9wIGl0Lg0KDQo+ICt9Ow0KPiArDQoNCltzbmlwXQ0KDQo+ICsNCj4gK3N0YXRp YyBpbnQgYWllX2NvbmZpZ195MnIoc3RydWN0IG10a19haWVfZGV2ICpmZCwgc3RydWN0IGFpZV9l bnFfaW5mbyAqYWllX2NmZywNCj4gKwkJCSAgaW50IG1vZGUpDQo+ICt7DQo+ICsJdTMyIGltZ19h ZGRyOw0KPiArCXUzMiBpbWdfYWRkcl9VVjsNCg0KTG93ZXIgY2FzZSBmb3IgdmFyaWFibGUgbmFt ZS4NCg0KPiArCXUzMiBpbWdfb2ZmOw0KPiArCXUzMiBpbWdfb2ZmX3V2Ow0KPiArCXUzMiAqeXV2 MnJnYl9jZmc7DQo+ICsJdTMyIHNyY2J1Ziwgc3JjYnVmX1VWOw0KPiArCXUxNiB4bWFnXzAsIHlt YWdfMDsNCj4gKwl1MTYgcHltMF9vdXRfdzsNCj4gKwl1MTYgcHltMF9vdXRfaDsNCj4gKwl1MTYg c3RyaWRlX3B5bTBfb3V0X3c7DQo+ICsJdTE2IHNyX2NycF93Ow0KPiArCXUxNiBzcl9jcnBfaDsN Cj4gKwl1MTYgeTFfc3RyaWRlOw0KPiArDQo+ICsJaWYgKCFhaWVfY2ZnLT5lbl9yb2kpIHsNCj4g KwkJaW1nX29mZiA9IDA7DQo+ICsJCWltZ19vZmZfdXYgPSAwOw0KPiArCX0gZWxzZSB7DQo+ICsJ CWlmIChhaWVfY2ZnLT5zcmNfaW1nX2ZtdCA9PSBGTVRfTU9OTyB8fCBhaWVfY2ZnLT5zcmNfaW1n X2ZtdCA9PSBGTVRfWVVWXzJQIHx8DQo+ICsJCSAgICBhaWVfY2ZnLT5zcmNfaW1nX2ZtdCA9PSBG TVRfWVZVXzJQKSB7DQo+ICsJCQl5MV9zdHJpZGUgPSBhaWVfY2ZnLT5zcmNfaW1nX3N0cmlkZSAq IGFpZV9jZmctPnNyY19yb2kueTE7DQo+ICsJCQlpbWdfb2ZmID0geTFfc3RyaWRlICsgYWllX2Nm Zy0+c3JjX3JvaS54MTsNCj4gKwkJCWltZ19vZmZfdXYgPSB5MV9zdHJpZGUgKyBhaWVfY2ZnLT5z cmNfcm9pLngxOw0KPiArCQl9IGVsc2UgaWYgKGFpZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9Z VVY0MjBfMlAgfHwNCj4gKwkJCSAgIGFpZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9ZVVY0MjBf MVApIHsNCj4gKwkJCXkxX3N0cmlkZSA9IGFpZV9jZmctPnNyY19pbWdfc3RyaWRlICogYWllX2Nm Zy0+c3JjX3JvaS55MTsNCj4gKwkJCWltZ19vZmYgPSB5MV9zdHJpZGUgKyBhaWVfY2ZnLT5zcmNf cm9pLngxOw0KPiArCQkJaW1nX29mZl91diA9IHkxX3N0cmlkZSAvIDIgKyBhaWVfY2ZnLT5zcmNf cm9pLngxOw0KPiArCQl9IGVsc2UgaWYgKGFpZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9ZVVlW IHx8DQo+ICsJCQkgICBhaWVfY2ZnLT5zcmNfaW1nX2ZtdCA9PSBGTVRfWVZZVSB8fA0KPiArCQkJ ICAgYWllX2NmZy0+c3JjX2ltZ19mbXQgPT0gRk1UX1VZVlkgfHwNCj4gKwkJCSAgIGFpZV9jZmct PnNyY19pbWdfZm10ID09IEZNVF9WWVVZKSB7DQo+ICsJCQl5MV9zdHJpZGUgPSBhaWVfY2ZnLT5z cmNfaW1nX3N0cmlkZSAqIGFpZV9jZmctPnNyY19yb2kueTE7DQo+ICsJCQlpbWdfb2ZmID0geTFf c3RyaWRlICsgYWllX2NmZy0+c3JjX3JvaS54MSAqIDI7DQo+ICsJCQlpbWdfb2ZmX3V2ID0geTFf c3RyaWRlICsgYWllX2NmZy0+c3JjX3JvaS54MSAqIDI7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlk ZXZfZXJyKGZkLT5kZXYsICJVbnN1cHBvcnQgaW5wdXQgZm9ybWF0ICVkIiwgYWllX2NmZy0+c3Jj X2ltZ19mbXQpOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQoNCkkgdGhpbmsgeW91IHNob3VsZCBj aGVjayBmb3JtYXQgd2hlbiBzZXR0aW5nIGZvcm1hdCBub3QgaGVyZS4NCkl0J3Mgbm90IG5lY2Vz c2FyeSB0byBjaGVjayBmb3JtYXQgZXZlcnl3aGVyZSB5b3UgdXNlIGl0Lg0KDQo+ICsJCX0NCj4g Kwl9DQo+ICsNCj4gKwlpbWdfYWRkciA9IGFpZV9jZmctPnNyY19pbWdfYWRkciArIGltZ19vZmY7 DQo+ICsJaW1nX2FkZHJfVVYgPSBhaWVfY2ZnLT5zcmNfaW1nX2FkZHJfdXYgKyBpbWdfb2ZmX3V2 Ow0KPiArDQo+ICsJc3JjYnVmID0gaW1nX2FkZHI7DQo+ICsJaWYgKGFpZV9jZmctPnNyY19pbWdf Zm10ID09IEZNVF9ZVVY0MjBfMlAgfHwgYWllX2NmZy0+c3JjX2ltZ19mbXQgPT0gRk1UX1lVVjQy MF8xUCB8fA0KPiArCSAgICBhaWVfY2ZnLT5zcmNfaW1nX2ZtdCA9PSBGTVRfWVVWXzJQIHx8IGFp ZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9ZVlVfMlApDQo+ICsJCXNyY2J1Zl9VViA9IGltZ19h ZGRyX1VWOw0KPiArCWVsc2UNCj4gKwkJc3JjYnVmX1VWID0gMDsNCg0Kc3JjYnVmID0gYWllX2Nm Zy0+c3JjX2ltZ19hZGRyICsgaW1nX29mZjsNCnNyY2J1Zl9VViA9IGFpZV9jZmctPnNyY19pbWdf YWRkcl91diArIGltZ19vZmZfdXYgb3IgMDsNCmFuZCBkcm9wIGltZ19hZGRyIGFuZCBpbWdfYWRk cl9VVi4NCg0KPiArDQo+ICsJaWYgKG1vZGUgPT0gRkRNT0RFKSB7DQo+ICsJCXNyX2NycF93ID0g ZmQtPmJhc2VfcGFyYS0+Y3JvcF9yZWN0LndpZHRoOw0KPiArCQlzcl9jcnBfaCA9IGZkLT5iYXNl X3BhcmEtPmNyb3BfcmVjdC5oZWlnaHQ7DQo+ICsJCXl1djJyZ2JfY2ZnID0gKHUzMiAqKWZkLT5i YXNlX3BhcmEtPmZkX3l1djJyZ2JfY2ZnX3ZhOw0KPiArCQlweW0wX291dF93ID0gZmQtPmJhc2Vf cGFyYS0+cHlyYW1pZF9yZWN0LndpZHRoOw0KPiArCX0NCj4gKwlpZiAobW9kZSA9PSBBVFRSSUJV VEVNT0RFKSB7DQo+ICsJCXNyX2NycF93ID0gZmQtPmF0dHJfcGFyYS0+Y3JvcF93aWR0aFtmZC0+ YXR0cl9wYXJhLT53X2lkeF07DQo+ICsJCXNyX2NycF9oID0gZmQtPmF0dHJfcGFyYS0+Y3JvcF9o ZWlnaHRbZmQtPmF0dHJfcGFyYS0+d19pZHhdOw0KPiArCQl5dXYycmdiX2NmZyA9ICh1MzIgKilm ZC0+YmFzZV9wYXJhLT5hdHRyX3l1djJyZ2JfY2ZnX3ZhW2ZkLT5hdHRyX3BhcmEtPndfaWR4XTsN Cj4gKwkJcHltMF9vdXRfdyA9IEFUVFJfTU9ERV9QWVJBTUlEX1dJRFRIOw0KPiArCX0NCj4gKw0K PiArCXB5bTBfb3V0X2ggPSBweW0wX291dF93ICogc3JfY3JwX2ggLyBzcl9jcnBfdzsNCj4gKw0K PiArCWlmIChweW0wX291dF93ICE9IDApIHsNCj4gKwkJeG1hZ18wID0gNTEyICogc3JfY3JwX3cg LyBweW0wX291dF93Ow0KPiArCQl5bWFnXzAgPSB4bWFnXzA7DQo+ICsJfSBlbHNlIHsNCg0KV2h5 IGRvIHlvdSBhbGxvdyBweW0wX291dF93IGlzIHplcm8/DQpyZXR1cm4gZXJyb3IgaGVyZS4NCkl0 J3MgYmV0dGVyIHRvIHJldHVybiBlcnJvciB3aGVuIHVzZXIgc3BhY2Ugc2V0IHdyb25nIHBhcmFt ZXRlci4NCg0KPiArCQl4bWFnXzAgPSAwOw0KPiArCQl5bWFnXzAgPSAwOw0KPiArCX0NCj4gKw0K PiArCXl1djJyZ2JfY2ZnW1kyUl9TUkNfRFNUX0ZPUk1BVF0gPSAoeXV2MnJnYl9jZmdbWTJSX1NS Q19EU1RfRk9STUFUXSAmIDB4RkZGRkZGRjgpIHwNCj4gKwkJCQkJICAoKGFpZV9jZmctPnNyY19p bWdfZm10KSAmIDB4Nyk7DQoNCllvdSBkb2VzIG5vdCBhc3NpZ24gb3RoZXIgYml0cyBvZiBZMlJf U1JDX0RTVF9GT1JNQVQsIHNvIHlvdSBjb3VsZCBzZXQgaXQgYXMNCg0KeXV2MnJnYl9jZmdbWTJS X1NSQ19EU1RfRk9STUFUXSA9IChhaWVfY2ZnLT5zcmNfaW1nX2ZtdCkgJiAweDc7DQoNCj4gKwlp ZiAoYWllX2NmZy0+c3JjX2ltZ19mbXQgPT0gRk1UX1lVVjQyMF8yUCB8fCBhaWVfY2ZnLT5zcmNf aW1nX2ZtdCA9PSBGTVRfWVVWNDIwXzFQKSB7DQo+ICsJCS8qIGZvciBtYXRjaCBwYXR0ZW4gKi8N Cj4gKwkJeXV2MnJnYl9jZmdbWTJSX1NSQ19EU1RfRk9STUFUXSA9ICh5dXYycmdiX2NmZ1tZMlJf U1JDX0RTVF9GT1JNQVRdICYNCj4gKwkJCQkJCSAgMHhGRkZGRkZGOCkgfCAoKDB4MykgJiAweDcp Ow0KDQpZb3UgZG9lcyBub3QgYXNzaWduIG90aGVyIGJpdHMgb2YgWTJSX1NSQ19EU1RfRk9STUFU LCBzbyB5b3UgY291bGQgc2V0IGl0IGFzDQoNCnl1djJyZ2JfY2ZnW1kyUl9TUkNfRFNUX0ZPUk1B VF0gPSAweDM7DQoNCk1heWJlIHVzZSBhIHN5bWJvbCB0byByZXBsYWNlIDB4MzsNCg0KPiArCX0N Cj4gKwl5dXYycmdiX2NmZ1tZMlJfSU5fV19IXSA9ICh5dXYycmdiX2NmZ1tZMlJfSU5fV19IXSAm IDB4RjgwMEY4MDApIHwNCj4gKwkJCQkgICgoc3JfY3JwX3cgPDwgMTYpICYgMHg3RkYwMDAwKSB8 IChzcl9jcnBfaCAmIDB4N0ZGKTsNCj4gKwl5dXYycmdiX2NmZ1tZMlJfT1VUX1dfSF0gPSAoeXV2 MnJnYl9jZmdbWTJSX09VVF9XX0hdICYgMHhGODAwRjgwMCkgfA0KPiArCQkJCSAgICgocHltMF9v dXRfdyA8PCAxNikgJiAweDdGRjAwMDApIHwgKHB5bTBfb3V0X2ggJiAweDdGRik7DQo+ICsNCj4g KwlpZiAoYWllX2NmZy0+c3JjX2ltZ19mbXQgPT0gRk1UX1lVVl8yUCB8fCBhaWVfY2ZnLT5zcmNf aW1nX2ZtdCA9PSBGTVRfWVZVXzJQKSB7DQo+ICsJCS8qIDIgcGxhbmUgKi8NCj4gKwkJeXV2MnJn Yl9jZmdbWTJSX1JBMF9SQTFfRU5dID0gKHl1djJyZ2JfY2ZnW1kyUl9SQTBfUkExX0VOXSAmIDB4 RkZGRkZGRUUpIHwgMHgxMTsNCj4gKwkJaWYgKGFpZV9jZmctPmVuX3JvaSkgew0KPiArCQkJeXV2 MnJnYl9jZmdbWTJSX0lOX1hfWV9TSVpFMF0gPSBhaWVfY21iX3UxNihkaWZfeChhaWVfY2ZnKSwg ZGlmX3koYWllX2NmZykpOw0KPiArCQkJeXV2MnJnYl9jZmdbWTJSX0lOX1hfWV9TSVpFMV0gPSBh aWVfY21iX3UxNihkaWZfeChhaWVfY2ZnKSwgZGlmX3koYWllX2NmZykpOw0KDQpJIHRoaW5rIHlv dSBjb3VsZCBkZWZpbmUgYSBzdHJ1Y3R1cmUgYW5kIGl0cyBtZW1iZXIgaGFzIGRpZmZlcmVudCB0 eXBlLA0KDQpzdHJ1Y3QgeXV2MnJnYl9jb25maWcgew0KCS4uLg0KCXUxNglpbl94X3NpemUwOw0K CXUxNglpbl95X3NpemUwOw0KCXUxNglpbl94X3NpemUxOw0KCXUxNglpbl95X3NpemUxOw0KCS4u Lg0KfTsNCg0Kc3RydWN0IHl1djJyZ2JfY29uZmlnICp5dXYycmdiX2NmZzsNCg0KeXV2MnJnYl9j ZmctPmluX3hfc2l6ZTAgPSBkaWZfeChhaWVfY2ZnKTsNCnl1djJyZ2JfY2ZnLT5pbl95X3NpemUw ID0gZGlmX3koYWllX2NmZyk7DQp5dXYycmdiX2NmZy0+aW5feF9zaXplMSA9IGRpZl94KGFpZV9j ZmcpOw0KeXV2MnJnYl9jZmctPmluX3lfc2l6ZTEgPSBkaWZfeShhaWVfY2ZnKTsNCg0KVGhpcyBs b29rIG1vcmUgcmVhZGFibGUuDQoNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXl1djJyZ2JfY2ZnW1ky Ul9JTl9YX1lfU0laRTBdID0gYWllX2NtYl91MTYoc3JfY3JwX3cgLSAxLCBzcl9jcnBfaCAtIDEp Ow0KPiArCQkJeXV2MnJnYl9jZmdbWTJSX0lOX1hfWV9TSVpFMV0gPSBhaWVfY21iX3UxNihzcl9j cnBfdyAtIDEsIHNyX2NycF9oIC0gMSk7DQo+ICsJCX0NCj4gKwkJeXV2MnJnYl9jZmdbWTJSX0lO X1NUUklERTBfQlVTX1NJWkUwXSA9DQo+ICsJCQkoeXV2MnJnYl9jZmdbWTJSX0lOX1NUUklERTBf QlVTX1NJWkUwXSAmIDB4RkZGMCkgfA0KPiArCQkJKChhaWVfY2ZnLT5zcmNfaW1nX3N0cmlkZSA8 PCAxNikgJiAweEZGRkYwMDAwKSB8IDB4MTsNCj4gKwkJeXV2MnJnYl9jZmdbWTJSX0lOX1NUUklE RTFfQlVTX1NJWkUxXSA9DQo+ICsJCQkoeXV2MnJnYl9jZmdbWTJSX0lOX1NUUklERTFfQlVTX1NJ WkUxXSAmIDB4RkZGMCkgfA0KPiArCQkJKChhaWVfY2ZnLT5zcmNfaW1nX3N0cmlkZSA8PCAxNikg JiAweEZGRkYwMDAwKSB8IDB4MTsNCj4gKwl9IGVsc2UgaWYgKGFpZV9jZmctPnNyY19pbWdfZm10 ID09IEZNVF9NT05PKSB7DQo+ICsJCXl1djJyZ2JfY2ZnW1kyUl9SQTBfUkExX0VOXSA9DQo+ICsJ CQkoeXV2MnJnYl9jZmdbWTJSX1JBMF9SQTFfRU5dICYgMHhGRkZGRkZFRSkgfCAweDAxOw0KDQpZ b3UgZG9lcyBub3QgYXNzaWduIG90aGVyIGJpdHMgb2YgWTJSX1JBMF9SQTFfRU4sIHNvIHlvdSBj b3VsZCBzZXQgaXQgYXMNCg0KeXV2MnJnYl9jZmdbWTJSX1JBMF9SQTFfRU5dID0gMHgxOw0KDQoN Cj4gKwkJaWYgKGFpZV9jZmctPmVuX3JvaSkgew0KPiArCQkJeXV2MnJnYl9jZmdbWTJSX0lOX1hf WV9TSVpFMF0gPSBhaWVfY21iX3UxNihkaWZfeChhaWVfY2ZnKSwgZGlmX3koYWllX2NmZykpOw0K PiArCQkJeXV2MnJnYl9jZmdbWTJSX0lOX1hfWV9TSVpFMV0gPSBhaWVfY21iX3UxNihkaWZfeChh aWVfY2ZnKSwgZGlmX3koYWllX2NmZykpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJeXV2MnJnYl9j ZmdbWTJSX0lOX1hfWV9TSVpFMF0gPSBhaWVfY21iX3UxNihzcl9jcnBfdyAtIDEsIHNyX2NycF9o IC0gMSk7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfSU5fWF9ZX1NJWkUxXSA9IGFpZV9jbWJfdTE2 KHNyX2NycF93IC0gMSwgc3JfY3JwX2ggLSAxKTsNCj4gKwkJfQ0KPiArCQl5dXYycmdiX2NmZ1tZ MlJfSU5fU1RSSURFMF9CVVNfU0laRTBdID0NCj4gKwkJCSh5dXYycmdiX2NmZ1tZMlJfSU5fU1RS SURFMF9CVVNfU0laRTBdICYgMHhGRkYwKSB8DQo+ICsJCQkoKGFpZV9jZmctPnNyY19pbWdfc3Ry aWRlIDw8IDE2KSAmIDB4RkZGRjAwMDApIHwgMHgwOw0KPiArCQl5dXYycmdiX2NmZ1tZMlJfSU5f U1RSSURFMV9CVVNfU0laRTFdID0NCj4gKwkJCSh5dXYycmdiX2NmZ1tZMlJfSU5fU1RSSURFMV9C VVNfU0laRTFdICYgMHhGRkYwKSB8DQo+ICsJCQkoKGFpZV9jZmctPnNyY19pbWdfc3RyaWRlIDw8 IDE2KSAmIDB4RkZGRjAwMDApIHwgMHgwOw0KDQpJIHRoaW5rIHlvdSBjb3VsZCBkZWZpbmUgYSBz dHJ1Y3R1cmUgYW5kIGl0cyBtZW1iZXIgaGFzIGRpZmZlcmVudCB0eXBlLA0KDQpzdHJ1Y3QgeXV2 MnJnYl9jb25maWcgew0KCS4uLg0KCXUxNglpbl9idXNfc2l6ZTA7DQoJdTE2CWluX3N0cmlkZTA7 DQoJdTE2CWluX2J1c19zaXplMTsNCgl1MTYJaW5fc3RyaWRlMTsNCgkuLi4NCn07DQoNCnN0cnVj dCB5dXYycmdiX2NvbmZpZyAqeXV2MnJnYl9jZmc7DQoNCnl1djJyZ2JfY2ZnLT5pbl9idXNfc2l6 ZTAgPSAwOw0KeXV2MnJnYl9jZmctPmluX3N0cmlkZTAgPSBhaWVfY2ZnLT5zcmNfaW1nX3N0cmlk ZTsNCnl1djJyZ2JfY2ZnLT5pbl9idXNfc2l6ZTEgPSAwOw0KeXV2MnJnYl9jZmctPmluX3N0cmlk ZTEgPSBhaWVfY2ZnLT5zcmNfaW1nX3N0cmlkZTsNCg0KVGhpcyBsb29rIG1vcmUgcmVhZGFibGUu DQoNCj4gKwl9IGVsc2UgaWYgKGFpZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9ZVVlWIHx8DQo+ ICsJCSAgIGFpZV9jZmctPnNyY19pbWdfZm10ID09IEZNVF9ZVllVIHx8DQo+ICsJCSAgIGFpZV9j ZmctPnNyY19pbWdfZm10ID09IEZNVF9VWVZZIHx8DQo+ICsJCSAgIGFpZV9jZmctPnNyY19pbWdf Zm10ID09IEZNVF9WWVVZKSB7DQo+ICsJCS8qIDEgcGxhbmUgKi8NCj4gKwkJeXV2MnJnYl9jZmdb WTJSX1JBMF9SQTFfRU5dID0gKHl1djJyZ2JfY2ZnW1kyUl9SQTBfUkExX0VOXSAmIDB4RkZGRkZG RUUpIHwgMHgxOw0KPiArCQlpZiAoYWllX2NmZy0+ZW5fcm9pKSB7DQo+ICsJCQl5dXYycmdiX2Nm Z1tZMlJfSU5fWF9ZX1NJWkUwXSA9IGFpZV9jbWJfdTE2KDIgKiAoZGlmX3goYWllX2NmZykgKyAx KSAtIDEsDQo+ICsJCQkJCQkJCSAgICBkaWZfeShhaWVfY2ZnKSk7DQo+ICsJCQl5dXYycmdiX2Nm Z1tZMlJfSU5fWF9ZX1NJWkUxXSA9IGFpZV9jbWJfdTE2KDIgKiAoZGlmX3goYWllX2NmZykgKyAx KSAtIDEsDQo+ICsJCQkJCQkJCSAgICBkaWZfeShhaWVfY2ZnKSk7DQo+ICsJCX0gZWxzZSB7DQo+ ICsJCQl5dXYycmdiX2NmZ1tZMlJfSU5fWF9ZX1NJWkUwXSA9IGFpZV9jbWJfdTE2KDIgKiBzcl9j cnBfdyAtIDEsIHNyX2NycF9oIC0gMSk7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfSU5fWF9ZX1NJ WkUxXSA9IGFpZV9jbWJfdTE2KDIgKiBzcl9jcnBfdyAtIDEsIHNyX2NycF9oIC0gMSk7DQo+ICsJ CX0NCj4gKwkJeXV2MnJnYl9jZmdbWTJSX0lOX1NUUklERTBfQlVTX1NJWkUwXSA9DQo+ICsJCQko eXV2MnJnYl9jZmdbWTJSX0lOX1NUUklERTBfQlVTX1NJWkUwXSAmIDB4RkZGMCkgfA0KPiArCQkJ KChhaWVfY2ZnLT5zcmNfaW1nX3N0cmlkZSA8PCAxNikgJiAweEZGRkYwMDAwKSB8IDB4MzsNCj4g KwkJeXV2MnJnYl9jZmdbWTJSX0lOX1NUUklERTFfQlVTX1NJWkUxXSA9DQo+ICsJCQkoeXV2MnJn Yl9jZmdbWTJSX0lOX1NUUklERTFfQlVTX1NJWkUxXSAmIDB4RkZGMCkgfA0KPiArCQkJKChhaWVf Y2ZnLT5zcmNfaW1nX3N0cmlkZSA8PCAxNikgJiAweEZGRkYwMDAwKSB8IDB4MzsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBBSUUzLjAgKi8NCj4gKwlpZiAoYWllX2NmZy0+c3JjX2ltZ19mbXQgPT0gRk1U X1lVVjQyMF8yUCB8fA0KPiArCSAgICBhaWVfY2ZnLT5zcmNfaW1nX2ZtdCA9PSBGTVRfWVVWNDIw XzFQKSB7DQo+ICsJCXl1djJyZ2JfY2ZnW1kyUl9SQTBfUkExX0VOXSA9DQo+ICsJCQkoeXV2MnJn Yl9jZmdbWTJSX1JBMF9SQTFfRU5dICYgMHhGRkZGRkZFRSkgfCAweDExOw0KPiArCQlpZiAoYWll X2NmZy0+ZW5fcm9pKSB7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfSU5fWF9ZX1NJWkUwXSA9IGFp ZV9jbWJfdTE2KGRpZl94KGFpZV9jZmcpLCBkaWZfeShhaWVfY2ZnKSk7DQo+ICsJCQl5dXYycmdi X2NmZ1tZMlJfSU5fWF9ZX1NJWkUxXSA9IGFpZV9jbWJfdTE2KGRpZl94KGFpZV9jZmcpLA0KPiAr CQkJCQkJCQkgICAgZGlmX3koYWllX2NmZykgLyAyKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXl1 djJyZ2JfY2ZnW1kyUl9JTl9YX1lfU0laRTBdID0NCj4gKwkJCQlhaWVfY21iX3UxNihzcl9jcnBf dyAtIDEsIHNyX2NycF9oIC0gMSk7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfSU5fWF9ZX1NJWkUx XSA9IGFpZV9jbWJfdTE2KHNyX2NycF93IC0gMSwNCj4gKwkJCQkJCQkJICAgIHNyX2NycF9oIC8g MiAtIDEpOw0KPiArCQl9DQo+ICsJCXl1djJyZ2JfY2ZnW1kyUl9JTl9TVFJJREUwX0JVU19TSVpF MF0gPQ0KPiArCQkJKHl1djJyZ2JfY2ZnW1kyUl9JTl9TVFJJREUwX0JVU19TSVpFMF0gJiAweEZG RjApIHwNCj4gKwkJCSgoYWllX2NmZy0+c3JjX2ltZ19zdHJpZGUgPDwgMTYpICYgMHhGRkZGMDAw MCkgfCAweDA7DQo+ICsJCXl1djJyZ2JfY2ZnW1kyUl9JTl9TVFJJREUxX0JVU19TSVpFMV0gPQ0K PiArCQkJKHl1djJyZ2JfY2ZnW1kyUl9JTl9TVFJJREUxX0JVU19TSVpFMV0gJiAweEZGRjApIHwN Cj4gKwkJCSgoYWllX2NmZy0+c3JjX2ltZ19zdHJpZGUgPDwgMTYpICYgMHhGRkZGMDAwMCkgfCAw eDA7DQo+ICsNCj4gKwkJeXV2MnJnYl9jZmdbWTJSX0NPMl9GTVRfTU9ERV9FTl0gPQ0KPiArCQkJ KHl1djJyZ2JfY2ZnW1kyUl9DTzJfRk1UX01PREVfRU5dICYgMHhGRkZGRkZGRSkgfCAweDAxOw0K PiArCQlpZiAoYWllX2NmZy0+ZW5fcm9pKSB7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfQ08yX0NS T1BfWF0gPSBhaWVfY21iX3UxNigwLCBkaWZfeChhaWVfY2ZnKSk7DQo+ICsJCQl5dXYycmdiX2Nm Z1tZMlJfQ08yX0NST1BfWV0gPSBhaWVfY21iX3UxNigwLCBkaWZfeShhaWVfY2ZnKSk7DQo+ICsJ CX0gZWxzZSB7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfQ08yX0NST1BfWF0gPSBhaWVfY21iX3Ux NigwLCBzcl9jcnBfdyAtIDEpOw0KPiArCQkJeXV2MnJnYl9jZmdbWTJSX0NPMl9DUk9QX1ldID0g YWllX2NtYl91MTYoMCwgc3JfY3JwX2ggLSAxKTsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJ CXl1djJyZ2JfY2ZnW1kyUl9DTzJfRk1UX01PREVfRU5dID0NCj4gKwkJCSh5dXYycmdiX2NmZ1tZ MlJfQ08yX0ZNVF9NT0RFX0VOXSAmIDB4RkZGRkZGRkUpOw0KPiArDQo+ICsJCWlmIChhaWVfY2Zn LT5lbl9yb2kpIHsNCj4gKwkJCXl1djJyZ2JfY2ZnW1kyUl9DTzJfQ1JPUF9YXSA9IGFpZV9jbWJf dTE2KDAsIGRpZl94KGFpZV9jZmcpKTsNCj4gKwkJCXl1djJyZ2JfY2ZnW1kyUl9DTzJfQ1JPUF9Z XSA9IGFpZV9jbWJfdTE2KDAsIGRpZl95KGFpZV9jZmcpKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJ CXl1djJyZ2JfY2ZnW1kyUl9DTzJfQ1JPUF9YXSA9IGFpZV9jbWJfdTE2KDAsIHNyX2NycF93IC0g MSk7DQo+ICsJCQl5dXYycmdiX2NmZ1tZMlJfQ08yX0NST1BfWV0gPSBhaWVfY21iX3UxNigwLCBz cl9jcnBfaCAtIDEpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJc3RyaWRlX3B5bTBfb3V0X3cg PSByb3VuZF91cChweW0wX291dF93LCA4KTsNCj4gKw0KPiArCXl1djJyZ2JfY2ZnW1kyUl9PVVRf WF9ZX1NJWkUwXSA9DQo+ICsJCWFpZV9jbWJfdTE2KHB5bTBfb3V0X3cgLSAxLCBweW0wX291dF9o IC0gMSk7DQo+ICsJc2V0X2NtYl9jZmcoeXV2MnJnYl9jZmcsIFkyUl9PVVRfU1RSSURFMF9CVVNf U0laRTAsIHN0cmlkZV9weW0wX291dF93KTsNCj4gKwl5dXYycmdiX2NmZ1tZMlJfT1VUX1hfWV9T SVpFMV0gPQ0KPiArCQlhaWVfY21iX3UxNihweW0wX291dF93IC0gMSwgcHltMF9vdXRfaCAtIDEp Ow0KPiArCXNldF9jbWJfY2ZnKHl1djJyZ2JfY2ZnLCBZMlJfT1VUX1NUUklERTFfQlVTX1NJWkUx LCBzdHJpZGVfcHltMF9vdXRfdyk7DQo+ICsJeXV2MnJnYl9jZmdbWTJSX09VVF9YX1lfU0laRTJd ID0NCj4gKwkJYWllX2NtYl91MTYocHltMF9vdXRfdyAtIDEsIHB5bTBfb3V0X2ggLSAxKTsNCj4g KwlzZXRfY21iX2NmZyh5dXYycmdiX2NmZywgWTJSX09VVF9TVFJJREUyX0JVU19TSVpFMiwgc3Ry aWRlX3B5bTBfb3V0X3cpOw0KPiArDQo+ICsJaWYgKGFpZV9jZmctPmVuX3BhZGRpbmcpIHsNCj4g KwkJeXV2MnJnYl9jZmdbWTJSX1BBRERJTkdfRU5fVVBfRE9XTl0gPQ0KPiArCQkJMSB8ICgoYWll X2NmZy0+c3JjX3BhZGRpbmcudXAgPDwgNCkgJiAweDFGRjApIHwNCj4gKwkJCSgoYWllX2NmZy0+ c3JjX3BhZGRpbmcuZG93biA8PCAxNikgJiAweDAxRkYwMDAwKTsNCj4gKwkJeXV2MnJnYl9jZmdb WTJSX1BBRERJTkdfUklHSFRfTEVGVF0gPQ0KPiArCQkJKGFpZV9jZmctPnNyY19wYWRkaW5nLnJp Z2h0ICYgMHgwMUZGKSB8DQo+ICsJCQkoKGFpZV9jZmctPnNyY19wYWRkaW5nLmxlZnQgPDwgMTYp ICYgMHgwMUZGMDAwMCk7DQoNCkkgdGhpbmsgeW91IGNvdWxkIGRlZmluZSBhIHN0cnVjdHVyZSBh bmQgaXRzIG1lbWJlciBoYXMgZGlmZmVyZW50IHR5cGUsDQoNCnN0cnVjdCB5dXYycmdiX2NvbmZp ZyB7DQoJLi4uDQoJdTE2CXBhZGRpbmdfZW46NDsNCgl1MTYJcGFkZGluZ191cDoxMjsNCgl1MTYJ cGFkZGluZ19kb3duOw0KCXUxNglwYWRkaW5nX3JpZ2h0Ow0KCXUxNglwYWRkaW5nX2xlZnQ7DQoJ Li4uDQp9Ow0KDQpzdHJ1Y3QgeXV2MnJnYl9jb25maWcgKnl1djJyZ2JfY2ZnOw0KDQp5dXYycmdi X2NmZy0+cGFkZGluZ19lbiA9IDE7DQp5dXYycmdiX2NmZy0+cGFkZGluZ191cCA9IGFpZV9jZmct PnNyY19wYWRkaW5nLnVwOw0KeXV2MnJnYl9jZmctPnBhZGRpbmdfZG93biA9IGFpZV9jZmctPnNy Y19wYWRkaW5nLmRvd247DQp5dXYycmdiX2NmZy0+cGFkZGluZ19yaWdodCA9IGFpZV9jZmctPnNy Y19wYWRkaW5nLnJpZ2h0Ow0KeXV2MnJnYl9jZmctPnBhZGRpbmdfbGVmdCA9IGFpZV9jZmctPnNy Y19wYWRkaW5nLmxlZnQ7DQoNClRoaXMgbG9vayBtb3JlIHJlYWRhYmxlLg0KDQo+ICsJfSBlbHNl IHsNCj4gKwkJeXV2MnJnYl9jZmdbWTJSX1BBRERJTkdfRU5fVVBfRE9XTl0gPSAwOw0KPiArCQl5 dXYycmdiX2NmZ1tZMlJfUEFERElOR19SSUdIVF9MRUZUXSA9IDA7DQo+ICsJfQ0KPiArDQo+ICsJ eXV2MnJnYl9jZmdbWTJSX0lOXzBdID0gc3JjYnVmOw0KPiArCXl1djJyZ2JfY2ZnW1kyUl9JTl8x XSA9IHNyY2J1Zl9VVjsNCj4gKw0KPiArCXl1djJyZ2JfY2ZnW1kyUl9PVVRfMF0gPSAodTMyKWZk LT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMF1bMF07DQo+ICsJeXV2MnJnYl9jZmdbWTJSX09V VF8xXSA9ICh1MzIpZmQtPmJhc2VfcGFyYS0+cnNfcHltX3JzdF9wYVswXVsxXTsNCj4gKwl5dXYy cmdiX2NmZ1tZMlJfT1VUXzJdID0gKHUzMilmZC0+YmFzZV9wYXJhLT5yc19weW1fcnN0X3BhWzBd WzJdOw0KPiArDQo+ICsJeXV2MnJnYl9jZmdbWTJSX1hfWV9NQUddID0gKHhtYWdfMCAmIDB4M0ZG RikgfCAoKHltYWdfMCA8PCAxNikgJiAweDNGRkYwMDAwKTsNCj4gKw0KPiArCWlmIChzcl9jcnBf dyA+PSBweW0wX291dF93KSB7DQo+ICsJCS8qIGRvd24gc2NhbGUgQUlFMS4wIGJ5IEZSWiAqLw0K PiArCQl5dXYycmdiX2NmZ1tZMlJfUlNfU0VMX1NSWl9FTl0gPQ0KPiArCQkJKHl1djJyZ2JfY2Zn W1kyUl9SU19TRUxfU1JaX0VOXSAmIDB4MDAxMDAwNzApOw0KPiArCQl5dXYycmdiX2NmZ1tZMlJf U1JaX0hPUklfU1RFUF0gPSAwOw0KPiArCQl5dXYycmdiX2NmZ1tZMlJfU1JaX1ZFUlRfU1RFUF0g PSAwOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIFNSWiAqLw0KPiArCQkvKiAwOiBGRFJaIGZvciBk b3duIHNjYWxpbmcgKi8NCj4gKwkJLyogMTogU1JaIGZvciB1cCBzY2FsaW5nICovDQo+ICsJCXl1 djJyZ2JfY2ZnW1kyUl9SU19TRUxfU1JaX0VOXSA9DQo+ICsJCQkoeXV2MnJnYl9jZmdbWTJSX1JT X1NFTF9TUlpfRU5dICYgMHgwMDEwMDA3MCkgfCBTUlpfQklUOw0KPiArCQl5dXYycmdiX2NmZ1tZ MlJfU1JaX0hPUklfU1RFUF0gPSAoKHNyX2NycF93IC0gMSkgPDwgMTUpIC8gKHB5bTBfb3V0X3cg LSAxKTsNCj4gKwkJeXV2MnJnYl9jZmdbWTJSX1NSWl9WRVJUX1NURVBdID0gKChzcl9jcnBfaCAt IDEpIDw8IDE1KSAvIChweW0wX291dF9oIC0gMSk7DQo+ICsJfQ0KPiArDQo+ICsJeXV2MnJnYl9j ZmdbWTJSX0NPTl9JTl9CQV9NU0JdID0gKHUzMikweDAyMDIwMjAyOw0KPiArCXl1djJyZ2JfY2Zn W1kyUl9DT05fT1VUX0JBX01TQl0gPSAodTMyKTB4MDIwMjAyMDI7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhaWVfY29uZmlnX3JzKHN0cnVjdCBtdGtfYWll X2RldiAqZmQsIHN0cnVjdCBhaWVfZW5xX2luZm8gKmFpZV9jZmcpDQo+ICt7DQo+ICsJdTMyICpy c19jZmc7DQo+ICsJdTMyICpyc190YmxbMl07DQo+ICsJdTE2IHhtYWdfMCwgeW1hZ18wOw0KPiAr CXUxNiBweW1fb3V0X3dbM107DQo+ICsJdTE2IHB5bV9vdXRfaFszXTsNCj4gKwl1MTYgcm91bmRf dzsNCj4gKwl1MTYgc3JfY3JwX3c7DQo+ICsJdTE2IHNyX2NycF9oOw0KPiArCWludCBpOw0KPiAr DQo+ICsJc3JfY3JwX3cgPSBmZC0+YmFzZV9wYXJhLT5jcm9wX3JlY3Qud2lkdGg7DQo+ICsJc3Jf Y3JwX2ggPSBmZC0+YmFzZV9wYXJhLT5jcm9wX3JlY3QuaGVpZ2h0Ow0KPiArDQo+ICsJcnNfY2Zn ID0gKHUzMiAqKWZkLT5iYXNlX3BhcmEtPmZkX3JzX2NmZ192YTsNCj4gKw0KPiArCXB5bV9vdXRf d1swXSA9IGZkLT5iYXNlX3BhcmEtPnB5cmFtaWRfcmVjdC53aWR0aDsNCj4gKwlweW1fb3V0X3db MV0gPSBweW1fb3V0X3dbMF0gPj4gMTsNCj4gKwlweW1fb3V0X3dbMl0gPSBweW1fb3V0X3dbMV0g Pj4gMTsNCj4gKw0KPiArCXB5bV9vdXRfaFswXSA9IHB5bV9vdXRfd1swXSAqIHNyX2NycF9oIC8g c3JfY3JwX3c7DQoNCkluIGFpZV91cGRhdGVfdGFibGUoKSwgaW1nX2hlaWdodCBpcyBlcXVhbCB0 byBweW1faGVpZ2h0LCBidXQgaGVyZSBpcyBub3QuDQoNCglwc3R2LT5pbmZfZWxtW1BZTVhfU1RB UlRfTE9PUCgwKV0uaW1nX3dpZHRoID0gcHltX3dpZHRoOw0KCXBzdHYtPmluZl9lbG1bUFlNWF9T VEFSVF9MT09QKDApXS5pbWdfaGVpZ2h0ID0gcHltX2hlaWdodDsNCg0KV2hpY2ggb25lIGlzIGNv cnJlY3Q/IElmIGJvdGggYXJlIGNvcnJlY3QsIGFkZCBjb21tZW50IHRvIGRlc2NyaWJlIHdoeSB0 aGVzZSB0d28gYXJlIGRpZmZlcmVudC4NCg0KPiArCXB5bV9vdXRfaFsxXSA9IHB5bV9vdXRfaFsw XSA+PiAxOw0KPiArCXB5bV9vdXRfaFsyXSA9IHB5bV9vdXRfaFsxXSA+PiAxOw0KPiArDQo+ICsJ Zm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KPiArCQlyc190YmxbaV0gPSByc19jZmcgKyBmZC0+ dmFyaWFudC0+cnNfY2ZnX3NpemUgKiBpOw0KDQpCZWNhdXNlIHlvdSB3b3VsZCBub3QgdXNlIHJz X3RibFswXSBhbmQgcnNfdGJsWzFdIGF0IHRoZSBzYW1lIHRpbWUsDQppdCdzIG5vdCBuZWNlc3Nh cnkgdG8gZGVmaW5lIHJzX3RibCBhcyBhbiBhcnJheS4gSnVzdCBkZWZpbmUgaXQgYXMNCg0KdTMy ICpyc190Ymw7DQoNCj4gKw0KPiArCQlyc190YmxbaV1bUlNfSU5fMF0gPSAodTMyKWZkLT5iYXNl X3BhcmEtPnJzX3B5bV9yc3RfcGFbaV1bMF07DQo+ICsJCXJzX3RibFtpXVtSU19JTl8xXSA9ICh1 MzIpZmQtPmJhc2VfcGFyYS0+cnNfcHltX3JzdF9wYVtpXVsxXTsNCj4gKwkJcnNfdGJsW2ldW1JT X0lOXzJdID0gKHUzMilmZC0+YmFzZV9wYXJhLT5yc19weW1fcnN0X3BhW2ldWzJdOw0KPiArDQo+ ICsJCXJzX3RibFtpXVtSU19PVVRfMF0gPSAodTMyKWZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3Rf cGFbaSArIDFdWzBdOw0KPiArCQlyc190YmxbaV1bUlNfT1VUXzFdID0gKHUzMilmZC0+YmFzZV9w YXJhLT5yc19weW1fcnN0X3BhW2kgKyAxXVsxXTsNCj4gKwkJcnNfdGJsW2ldW1JTX09VVF8yXSA9 ICh1MzIpZmQtPmJhc2VfcGFyYS0+cnNfcHltX3JzdF9wYVtpICsgMV1bMl07DQo+ICsNCj4gKwkJ cnNfdGJsW2ldW1JTX0lOUFVUX1dfSF0gPSAocnNfdGJsW2ldW1JTX0lOUFVUX1dfSF0gJiAweEY4 MDBGODAwKSB8DQo+ICsJCQkocHltX291dF9oW2ldICYgMHg3RkYpIHwgKChweW1fb3V0X3dbaV0g PDwgMTYpICYgMHg3RkYwMDAwKTsNCj4gKwkJcnNfdGJsW2ldW1JTX09VVFBVVF9XX0hdID0gKHJz X3RibFtpXVtSU19PVVRQVVRfV19IXSAmIDB4RjgwMEY4MDApIHwNCj4gKwkJCShweW1fb3V0X2hb aSArIDFdICYgMHg3RkYpIHwgKChweW1fb3V0X3dbaSArIDFdIDw8IDE2KSAmIDB4N0ZGMDAwMCk7 DQoNCkkgdGhpbmsgeW91IGNvdWxkIGRlZmluZSBhIHN0cnVjdHVyZSBhbmQgaXRzIG1lbWJlciBo YXMgZGlmZmVyZW50IHR5cGUsDQoNCnN0cnVjdCByc190YWJsZSB7DQoJLi4uDQoJdTE2CWluX2g7 DQoJdTE2CWluX3c7DQoJdTE2CW91dF9oOw0KCXUxNglvdXRfdzsNCgkuLi4NCn07DQoNCnN0cnVj dCByc190YWJsZSAqcnNfdGJsOw0KDQpyc190YmwtPmluX2ggPSBweW1fb3V0X2hbaV07DQpyc190 YmwtPmluX3cgPSBweW1fb3V0X3dbaV07DQpyc190YmwtPm91dF9oID0gcHltX291dF9oW2kgKyAx XTsNCnJzX3RibC0+b3V0X3cgPSBweW1fb3V0X3dbaSArIDFdOw0KDQpUaGlzIGxvb2sgbW9yZSBy ZWFkYWJsZS4NCg0KPiArDQo+ICsJCXJzX3RibFtpXVtSU19JTl9YX1lfU0laRTBdID0gYWllX2Nt Yl91MTYocHltX291dF93W2ldIC0gMSwgcHltX291dF9oW2ldIC0gMSk7DQo+ICsJCXJzX3RibFtp XVtSU19JTl9YX1lfU0laRTFdID0gYWllX2NtYl91MTYocHltX291dF93W2ldIC0gMSwgcHltX291 dF9oW2ldIC0gMSk7DQo+ICsJCXJzX3RibFtpXVtSU19JTl9YX1lfU0laRTJdID0gYWllX2NtYl91 MTYocHltX291dF93W2ldIC0gMSwgcHltX291dF9oW2ldIC0gMSk7DQo+ICsNCj4gKwkJc2V0X2Nt Yl9jZmcocnNfdGJsW2ldLCBSU19JTl9TVFJJREUwLCBweW1fb3V0X3dbaV0pOw0KPiArCQlzZXRf Y21iX2NmZyhyc190YmxbaV0sIFJTX0lOX1NUUklERTEsIHB5bV9vdXRfd1tpXSk7DQo+ICsJCXNl dF9jbWJfY2ZnKHJzX3RibFtpXSwgUlNfSU5fU1RSSURFMiwgcHltX291dF93W2ldKTsNCj4gKw0K PiArCQlyc190YmxbaV1bUlNfT1VUX1hfWV9TSVpFMF0gPSBhaWVfY21iX3UxNihweW1fb3V0X3db aSArIDFdIC0gMSwNCj4gKwkJCQkJCQkgIHB5bV9vdXRfaFtpICsgMV0gLSAxKTsNCj4gKwkJcnNf dGJsW2ldW1JTX09VVF9YX1lfU0laRTFdID0gYWllX2NtYl91MTYocHltX291dF93W2kgKyAxXSAt IDEsDQo+ICsJCQkJCQkJICBweW1fb3V0X2hbaSArIDFdIC0gMSk7DQo+ICsJCXJzX3RibFtpXVtS U19PVVRfWF9ZX1NJWkUyXSA9IGFpZV9jbWJfdTE2KHB5bV9vdXRfd1tpICsgMV0gLSAxLA0KPiAr CQkJCQkJCSAgcHltX291dF9oW2kgKyAxXSAtIDEpOw0KPiArDQo+ICsJCWlmIChpID09IDApDQo+ ICsJCQlyb3VuZF93ID0gcHltX291dF93W2kgKyAxXTsNCj4gKwkJZWxzZQ0KPiArCQkJcm91bmRf dyA9IHJvdW5kX3VwKHB5bV9vdXRfd1tpICsgMV0sIDgpOw0KPiArDQo+ICsJCXNldF9jbWJfY2Zn KHJzX3RibFtpXSwgUlNfT1VUX1NUUklERTAsIHJvdW5kX3cpOw0KPiArCQlzZXRfY21iX2NmZyhy c190YmxbaV0sIFJTX09VVF9TVFJJREUxLCByb3VuZF93KTsNCj4gKwkJc2V0X2NtYl9jZmcocnNf dGJsW2ldLCBSU19PVVRfU1RSSURFMiwgcm91bmRfdyk7DQo+ICsNCj4gKwkJeG1hZ18wID0gNTEy ICogcHltX291dF93W2ldIC8gcHltX291dF93W2kgKyAxXTsNCj4gKwkJeW1hZ18wID0geG1hZ18w Ow0KPiArDQo+ICsJCXJzX3RibFtpXVtSU19YX1lfTUFHXSA9ICh4bWFnXzAgJiAweDNGRkYpIHwg KCh5bWFnXzAgPDwgMTYpICYgMHgzRkZGMDAwMCk7DQo+ICsJCXJzX3RibFtpXVtSU19DT05fSU5f QkFfTVNCXSA9ICh1MzIpMHgwMjAyMDIwMjsNCj4gKwkJcnNfdGJsW2ldW1JTX0NPTl9PVVRfQkFf TVNCXSA9ICh1MzIpMHgwMjAyMDIwMjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBhaWVfY29uZmlnX25ldHdvcmsoc3RydWN0IG10a19haWVfZGV2 ICpmZCwNCj4gKwkJCSAgICAgIHN0cnVjdCBhaWVfZW5xX2luZm8gKmFpZV9jZmcpDQo+ICt7DQo+ ICsJc3RydWN0IGFpZV9zdGF0aWNfaW5mbyAqcHN0diA9ICZmZC0+c3RfaW5mbzsNCj4gKwl1MTYg cHlyYW1pZDBfb3V0X3csIHB5cmFtaWQwX291dF9oLCBweXJhbWlkMV9vdXRfaCwgcHlyYW1pZDJf b3V0X2g7DQo+ICsJdTE2IG91dF95c2l6ZV9taW51c18xLCBvdXRfeXNpemVfbWludXNfMV9zdHJp ZGUyOw0KPiArCXUxNiBmZF94c2l6ZVs0XSwgc2l6ZSwgcG9vbHNpemUsIHN0cmlkZXNpemU7DQo+ ICsJdTE2IGlucHV0X2hlaWdodCwgb3V0X2hlaWdodDsNCj4gKwl1MTYgY29udl93aWR0aCwgY29u dl9oZWlnaHQ7DQo+ICsJdTMyICpmZF9jdXJfY2ZnLCAqZmRfY3VyX3NldDsNCj4gKwl1MzIgc3Jf Y3JwX3csIHNyX2NycF9oOw0KPiArCXUzMiBjYWxfeCwgY2FsX3k7DQo+ICsJdTggdWNoLCB1bG9v cDsNCj4gKwl1OCBpLCBqOw0KPiArCXZvaWQgKmZkX2NmZzsNCj4gKw0KPiArCXNyX2NycF93ID0g ZmQtPmJhc2VfcGFyYS0+Y3JvcF9yZWN0LndpZHRoOw0KPiArCXNyX2NycF9oID0gZmQtPmJhc2Vf cGFyYS0+Y3JvcF9yZWN0LmhlaWdodDsNCj4gKw0KPiArCXB5cmFtaWQwX291dF93ID0gZmQtPmJh c2VfcGFyYS0+cHlyYW1pZF9yZWN0LndpZHRoOw0KPiArCXB5cmFtaWQwX291dF9oID0gcHlyYW1p ZDBfb3V0X3cgKiBzcl9jcnBfaCAvIHNyX2NycF93Ow0KPiArDQo+ICsJcHlyYW1pZDFfb3V0X2gg PSBweXJhbWlkMF9vdXRfaCAvIDI7DQo+ICsJcHlyYW1pZDJfb3V0X2ggPSBweXJhbWlkMV9vdXRf aCAvIDI7DQo+ICsNCj4gKwlmZF9jZmcgPSBmZC0+YmFzZV9wYXJhLT5mZF9mZF9jZmdfdmE7DQo+ ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgRkRfTE9PUF9OVU07IGkrKykgew0KDQpJIHRoaW5rIHRo aXMgZm9yLWxvb3AgY291bGQgYmUgY2hhbmdlZCB0byBuZXN0IGZvci1sb29wIGFuZCB0aGUgY29k ZSB3b3VsZCBiZSBtb3JlIHNpbXBsZS4NCkJlbG93IGNvbW1lbnQgaXMgYmFzZWQgb24gdGhlIG5l c3QgZm9yLWxvb3AuDQoNCnN0cnVjdCBmZF9jb25maWcgew0KCS4uLg0KfTsNCg0KZmRfY3VyX2Nm ZyA9IChzdHJ1Y3QgZmRfY29uZmlnICopZmRfY2ZnOw0KZm9yIChpID0gMDsgaSA8IFJQTl9OVU07 IGkrKykgew0KCWZvciAoaiA9IDA7IGogPCBSUE5fTE9PUF9OVU07IGorKywgZmRfY3VyX2NmZysr KSB7DQoNCj4gKwkJZmRfY3VyX2NmZyA9ICh1MzIgKilmZF9jZmcgKyBmZC0+dmFyaWFudC0+ZmRf Y2ZnX3NpemUgKiBpOw0KDQpEcm9wIHRoaXMuDQoNCj4gKwkJZmRfY3VyX2NmZ1tGRF9JTlBVVF9S T1RBVEVdID0gKGZkX2N1cl9jZmdbRkRfSU5QVVRfUk9UQVRFXSAmIDB4RkZGRjBGRkYpIHwNCj4g KwkJCQkgICAgICgoYWllX2NmZy0+cm90YXRlX2RlZ3JlZSA8PCAxMikgJiAweDMwMDApOw0KDQpz dHJ1Y3QgZmRfY29uZmlnIHsNCgkuLi4NCgl1MzIJaW5wdXRfcm90YXRlOw0KCS4uLg0KfTsNCg0K ZmRfY3VyX2NmZy0+aW5wdXRfcm90YXRlID0gYWllX2NmZy0+cm90YXRlX2RlZ3JlZSA8PCAxMjsN Cg0KVGhpcyBsb29rcyBtb3JlIHJlYWRhYmxlLg0KDQo+ICsNCj4gKwkJaWYgKGkgPT0gMCkNCj4g KwkJCWlucHV0X2hlaWdodCA9IHB5cmFtaWQyX291dF9oOw0KPiArCQllbHNlIGlmIChpID09IChS UE5YX0xPT1BfTlVNKDIpICsgMSkpDQo+ICsJCQlpbnB1dF9oZWlnaHQgPSBweXJhbWlkMV9vdXRf aDsNCj4gKwkJZWxzZSBpZiAoaSA9PSAoUlBOWF9MT09QX05VTSgxKSArIDEpKQ0KPiArCQkJaW5w dXRfaGVpZ2h0ID0gcHlyYW1pZDBfb3V0X2g7DQo+ICsJCWVsc2UNCj4gKwkJCWlmIChmZF9vdXRf c3RyaWRlMl9pbltpXSA9PSAwKQ0KPiArCQkJCWlucHV0X2hlaWdodCA9IG91dF9oZWlnaHQ7DQo+ ICsJCQllbHNlDQo+ICsJCQkJaW5wdXRfaGVpZ2h0ID0gKG91dF9oZWlnaHQgKyAxKSAvIDI7DQoN CkRlZmluZSBweXJhbWlkMF9vdXRfaCwgcHlyYW1pZDFfb3V0X2gsIHB5cmFtaWQyX291dF9oIGFz IGFuIGFycmF5IHB5cmFtaWRfb3V0X2hbXSwNCmFuZA0KDQojZGVmaW5lIEZEX09VVF9TVFJJREUy X0lOKG4pCSgobiA9PSA1KSB8fCAobiA9PSAxMSkgPyAxIDogMCkNCg0KaWYgKGogPT0gMCkNCglp bnB1dF9oZWlnaHQgPSBweXJhbWlkX291dF9oWzIgLSBpXTsNCmVsc2UgaWYgKEZEX09VVF9TVFJJ REUyX0lOKGopID09IDApDQoJaW5wdXRfaGVpZ2h0ID0gb3V0X2hlaWdodDsNCmVsc2UNCglpbnB1 dF9oZWlnaHQgPSAob3V0X2hlaWdodCArIDEpIC8gMjsNCg0KVGhpcyBsb29rcyBtb3JlIHNpbXBs ZS4NCg0KPiArDQo+ICsJCXBvb2xzaXplID0gaXNfZmRfbWF4cG9vbChpKTsNCj4gKwkJc3RyaWRl c2l6ZSA9IGdldF9mZF9zdHJpZGUoaSk7DQoNCnBvb2xzaXplID0gKGogPT0gMSkgPyAxIDogMDsN CnN0cmlkZXNpemUgPSAoaiA9PSAwKSA/IDIgOiAxOw0KDQpUaGlzIGxvb2tzIG1vcmUgc2ltcGxl Lg0KDQo+ICsJCWlmIChwb29sc2l6ZSA9PSAxKQ0KPiArCQkJb3V0X2hlaWdodCA9DQo+ICsJCQkJ RElWX1JPVU5EX1VQKGlucHV0X2hlaWdodCwgMiAqIHBvb2xzaXplKTsNCj4gKwkJZWxzZQ0KPiAr CQkJb3V0X2hlaWdodCA9IERJVl9ST1VORF9VUChpbnB1dF9oZWlnaHQsIHN0cmlkZXNpemUgKyAy ICogcG9vbHNpemUpOw0KDQpXaGVuIGogPT0gMCwgcG9vbHNpemUgPSAwLCBzdHJpZGVzaXplID0g MiwgdGhlbg0KDQpvdXRfaGVpZ2h0ID0gRElWX1JPVU5EX1VQKGlucHV0X2hlaWdodCwgMik7DQoN CldoZW4gaiA9PSAxLCBwb29sc2l6ZSA9IDEsIHN0cmlkZXNpemUgPSAxLCB0aGVuDQoNCm91dF9o ZWlnaHQgPSBESVZfUk9VTkRfVVAoaW5wdXRfaGVpZ2h0LCAyKTsNCg0KV2hlbiBqID4gMSwgcG9v bHNpemUgPSAwLCBzdHJpZGVzaXplID0gMSwgdGhlbg0KDQpvdXRfaGVpZ2h0ID0gRElWX1JPVU5E X1VQKGlucHV0X2hlaWdodCwgMSk7DQoNClNvIHRoZXNlIGNvdWxkIGJlIHNpbXBsaWZpZWQgYXMN Cg0Kb3V0X2hlaWdodCA9IERJVl9ST1VORF9VUChpbnB1dF9oZWlnaHQsIGogPiAxID8gMSA6IDIp Ow0KDQo+ICsNCj4gKwkJaWYgKGkgPT0gUlBOWF9MT09QX05VTSgwKSB8fCBpID09IFJQTlhfTE9P UF9OVU0oMSkgfHwgaSA9PSBSUE5YX0xPT1BfTlVNKDIpKSB7DQoNCmlmIChqID09IChSUE5fTE9P UF9OVU0gLSAxKSkgew0KDQo+ICsJCQljb252X3dpZHRoID0gZmQtPmJhc2VfcGFyYS0+aW1nX3Jl Y3Qud2lkdGg7DQo+ICsJCQljb252X2hlaWdodCA9IGZkLT5iYXNlX3BhcmEtPmltZ19yZWN0Lmhl aWdodDsNCj4gKwkJCWZkX3hzaXplWzBdID0gcHN0di0+aW5mX2VsbVtpXS5pbWdfd2lkdGggKiAy ICogMTYgKiBBTkNIT1JfRU5fTlVNIC0gMTsNCg0KZmRfeHNpemVbMF0gPSBwc3R2LT5pbmZfZWxt W2kgKiBSUE5fTE9PUF9OVU0gKyBqXS5pbWdfd2lkdGggKiAyICogMTYgKiBBTkNIT1JfRU5fTlVN IC0gMTsNCg0KPiArCQkJZmRfeHNpemVbM10gPSBwc3R2LT5pbmZfZWxtW2ldLmltZ193aWR0aCAq IDIgKiAzMiAqIEFOQ0hPUl9FTl9OVU0gLSAxOw0KPiArCQkJZmRfeHNpemVbMl0gPSBmZF94c2l6 ZVszXTsNCj4gKwkJCWZkX3hzaXplWzFdID0gZmRfeHNpemVbMl07DQo+ICsJCX0gZWxzZSB7DQo+ ICsJCQljb252X3dpZHRoID0gRElWX1JPVU5EX1VQKHBzdHYtPmluZl9lbG1baV0uaW1nX3dpZHRo LCBzdHJpZGVzaXplKTsNCj4gKwkJCWNvbnZfaGVpZ2h0ID0gRElWX1JPVU5EX1VQKGlucHV0X2hl aWdodCwgc3RyaWRlc2l6ZSk7DQo+ICsNCj4gKwkJCWZkX3hzaXplWzNdID0gcHN0di0+aW5mX2Vs bVtpXS5pbnB1dF94c2l6ZV9wbHVzXzEgLSAxOw0KPiArCQkJZmRfeHNpemVbMl0gPSBmZF94c2l6 ZVszXTsNCj4gKwkJCWZkX3hzaXplWzFdID0gZmRfeHNpemVbMl07DQo+ICsJCQlmZF94c2l6ZVsw XSA9IGZkX3hzaXplWzFdOw0KPiArCQl9DQo+ICsNCj4gKwkJZmRfY3VyX2NmZ1tGRF9DT05WX1dJ RFRIX01PRDZdID0gKGZkX2N1cl9jZmdbRkRfQ09OVl9XSURUSF9NT0Q2XSAmIDB4RkY4RkZGRkYp IHwNCj4gKwkJCQkJCSAoKChjb252X3dpZHRoICUgNikgPDwgMjApICYgMHgwMDcwMDAwMCk7DQo+ ICsJCWZkX2N1cl9jZmdbRkRfQ09OVl9JTUdfV19IXSA9IGFpZV9jbWJfdTE2KGNvbnZfaGVpZ2h0 LCBjb252X3dpZHRoKTsNCg0Kc3RydWN0IGZkX2NvbmZpZyB7DQoJLi4uDQoJdTMyCWNvbnZfd2lk dGhfbW9kNjsNCgl1MTYJY29udl9oZWlnaHQ7DQoJdTE2CWNvbnZfd2lkdGg7DQoJLi4uDQp9Ow0K DQpmZF9jdXJfY2ZnLT5jb252X3dpZHRoX21vZDYgPSAoY29udl93aWR0aCAlIDYpIDw8IDIwOw0K ZmRfY3VyX2NmZy0+Y29udl93aWR0aCA9IGNvbnZfd2lkdGg7DQpmZF9jdXJfY2ZnLT5jb252X2hl aWdodCA9IGNvbnZfaGVpZ2h0Ow0KDQpUaGlzIGxvb2tzIG1vcmUgc2ltcGxlLg0KDQo+ICsNCj4g KwkJZmRfY3VyX2NmZ1tGRF9JTl9JTUdfV19IXSA9IGFpZV9jbWJfdTE2KGlucHV0X2hlaWdodCwg cHN0di0+aW5mX2VsbVtpXS5pbWdfd2lkdGgpOw0KPiArCQlmZF9jdXJfY2ZnW0ZEX09VVF9JTUdf V19IXSA9IGFpZV9jbWJfdTE2KG91dF9oZWlnaHQsIHBzdHYtPmluZl9lbG1baV0ub3V0X3dpZHRo KTsNCj4gKw0KPiArCQlpZiAoZmRfcmRtYV9lbltpXVswXVswXSAhPSAtMSkgew0KDQpUaGlzIGlz IGFsd2F5cyB0cnVlLCBzbyBkcm9wIHRoaXMgY2hlY2tpbmcuDQoNCj4gKwkJCWZvciAoaiA9IDA7 IGogPCA0OyBqKyspIHsNCj4gKwkJCQlmZF9jdXJfY2ZnW0ZEX0lOX1hfWV9TSVpFMCArIDIgKiBq XSA9DQo+ICsJCQkJCWFpZV9jbWJfdTE2KGZkX3hzaXplW2pdLCBpbnB1dF9oZWlnaHQgLSAxKTsN Cj4gKwkJCQlzZXRfY21ic3RfY2ZnKGZkX2N1cl9jZmcsIEZEX0lOX1NUUklERTBfQlVTX1NJWkUw ICsgMiAqIGosDQo+ICsJCQkJCSAgICAgIGZkX3hzaXplW2pdICsgMSk7DQo+ICsJCQl9DQoNCnN0 cnVjdCBmZF9pbl9jb25maWcgew0KCXUxNgl4c2l6ZTsNCgl1MTYJaGVpZ2h0Ow0KCXUxNglidXNf c2l6ZTsNCgl1MTYJc3RyaWRlOw0KfTsNCg0Kc3RydWN0IGZkX2NvbmZpZyB7DQoJLi4uDQoJc3Ry dWN0IGZkX2luX2NvbmZpZyBmZF9pbltJTlBVVF9XRE1BX1dSQV9OVU1dOw0KCS4uLg0KfTsNCg0K Zm9yIChrID0gMDsgayA8IElOUFVUX1dETUFfV1JBX05VTTsgaysrKSB7DQoJZmRfY3VyX2NmZy0+ ZmRfaW5baV0ueHNpemUgPSBmZF94c2l6ZVtrXTsNCglmZF9jdXJfY2ZnLT5mZF9pbltpXS5oZWln aHQgPSBpbnB1dF9oZWlnaHQgLSAxOw0KCWZkX2N1cl9jZmctPmZkX2luW2ldLnN0cmlkZSA9IGZk X3hzaXplW2pdICsgMTsNCn0NCg0KVGhpcyBsb29rcyBtb3JlIHJlYWRhYmxlLg0KDQo+ICsJCX0N Cj4gKw0KPiArCQlvdXRfeXNpemVfbWludXNfMSA9IG91dF9oZWlnaHQgLSAxOw0KPiArCQlvdXRf eXNpemVfbWludXNfMV9zdHJpZGUyID0gKG91dF9oZWlnaHQgKyAxKSAvIDIgLSAxOw0KPiArDQo+ ICsJCWZvciAoaiA9IDA7IGogPCBPVVRQVVRfV0RNQV9XUkFfTlVNOyBqKyspIHsNCj4gKwkJCWZk X2N1cl9zZXQgPSBmZF9jdXJfY2ZnICsgMiAqIGo7DQo+ICsJCQlpZiAoIW91dF9zdHJpZGVfc2l6 ZVtpXVtqXSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJaWYgKG91dF9zdHJpZGVfc2l6 ZVtpXVtqXSA9PSAxKSB7DQo+ICsJCQkJZmRfY3VyX3NldFtGRF9PVVRfWF9ZX1NJWkUwXSA9DQo+ ICsJCQkJCWFpZV9jbWJfdTE2KHBzdHYtPmluZl9lbG1baV0ub3V0X3hzaXplX3BsdXNfMSAtIDEs DQo+ICsJCQkJCQkgICAgb3V0X3lzaXplX21pbnVzXzEpOw0KPiArCQkJCXNldF9jbWJzdF9jZmco ZmRfY3VyX3NldCwgRkRfT1VUX1NUUklERTBfQlVTX1NJWkUwLA0KPiArCQkJCQkgICAgICBwc3R2 LT5pbmZfZWxtW2ldLm91dF9zdHJpZGUpOw0KPiArCQkJfSBlbHNlIGlmIChvdXRfc3RyaWRlX3Np emVbaV1bal0gPT0gMikgew0KPiArCQkJCWZkX2N1cl9zZXRbRkRfT1VUX1hfWV9TSVpFMF0gPQ0K PiArCQkJCQlhaWVfY21iX3UxNihwc3R2LT5pbmZfZWxtW2ldLm91dF94c2l6ZV9wbHVzXzFfc3Ry aWRlMiAtIDEsDQo+ICsJCQkJCQkgICAgb3V0X3lzaXplX21pbnVzXzFfc3RyaWRlMik7DQo+ICsJ CQkJc2V0X2NtYnN0X2NmZyhmZF9jdXJfc2V0LCBGRF9PVVRfU1RSSURFMF9CVVNfU0laRTAsDQo+ ICsJCQkJCSAgICAgIHBzdHYtPmluZl9lbG1baV0ub3V0X3N0cmlkZV9zdHJpZGUyKTsNCj4gKwkJ CX0NCj4gKwkJfQ0KDQpzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG91dF9zdHJpZGVfc2l6ZVtS UE5fTE9PUF9OVU1dW09VVFBVVF9XRE1BX1dSQV9OVU1dID0gew0KCXsgMSwgMCwgMCwgMCB9LCB7 IDEsIDAsIDIsIDAgfSwgeyAxLCAwLCAyLCAwIH0sIHsgMSwgMCwgMCwgMCB9LA0KCXsgMSwgMSwg MiwgMiB9LCB7IDEsIDEsIDIsIDIgfSwgeyAxLCAwLCAwLCAwIH0sIHsgMSwgMCwgMiwgMCB9LA0K CXsgMSwgMSwgMCwgMCB9LCB7IDEsIDAsIDAsIDAgfSwgeyAxLCAwLCAyLCAwIH0sIHsgMSwgMSwg MCwgMCB9LA0KCXsgMSwgMCwgMCwgMCB9LCB7IDEsIDAsIDAsIDAgfSwgeyAxLCAwLCAwLCAwIH0s IHsgMSwgMCwgMCwgMCB9LA0KCXsgMSwgMCwgMCwgMCB9LCB7IDEsIDAsIDAsIDAgfSwgeyAxLCAx LCAwLCAwIH0sIHsgMSwgMSwgMCwgMCB9LA0KCXsgMSwgMSwgMCwgMCB9LCB7IDEsIDAsIDAsIDAg fSwgeyAxLCAxLCAxLCAxIH0sIHsgMSwgMSwgMSwgMSB9LA0KCXsgMSwgMSwgMCwgMCB9LCB7IDEs IDEsIDAsIDAgfSwgeyAxLCAxLCAwLCAwIH0sIHsgMSwgMCwgMCwgMCB9LA0KCXsgMywgMCwgMCwg MCB9DQp9Ow0KDQpzdHJ1Y3QgZmRfb3V0X2NvbmZpZyB7DQoJdTE2CXhzaXplOw0KCXUxNgl5c2l6 ZV9taW51c18xOw0KCXUxNglidXNfc2l6ZTsNCgl1MTYJc3RyaWRlOw0KfTsNCg0Kc3RydWN0IGZk X2NvbmZpZyB7DQoJLi4uDQoJc3RydWN0IGZkX291dF9jb25maWcgZmRfb3V0W09VVFBVVF9XRE1B X1dSQV9OVU1dOw0KCS4uLg0KfTsNCg0KZm9yIChrID0gMDsgayA8IE9VVFBVVF9XRE1BX1dSQV9O VU07IGsrKykgew0KCWlmICghb3V0X3N0cmlkZV9zaXplW2pdW2tdKQ0KCQljb250aW51ZTsNCg0K CWlmIChvdXRfc3RyaWRlX3NpemVbal1ba10gPT0gMSkgew0KCQlmZF9jdXJfY2ZnLT5mZF9vdXRb al0ueHNpemUgPSBwc3R2LT5pbmZfZWxtW2ldLm91dF94c2l6ZV9wbHVzXzEgLSAxOw0KCQlmZF9j dXJfY2ZnLT5mZF9vdXRbal0ueXNpemVfbWludXNfMSA9IG91dF95c2l6ZV9taW51c18xOw0KCQlm ZF9jdXJfY2ZnLT5mZF9vdXRbal0uc3RyaWRlID0gcHN0di0+aW5mX2VsbVtpXS5vdXRfc3RyaWRl Ow0KCX0gZWxzZSBpZiAob3V0X3N0cmlkZV9zaXplW2pdW2tdID09IDIpIHsNCgkJZmRfY3VyX2Nm Zy0+ZmRfb3V0W2pdLnhzaXplID0gcHN0di0+aW5mX2VsbVtpXS5vdXRfeHNpemVfcGx1c18xX3N0 cmlkZTIgLSAxOw0KCQlmZF9jdXJfY2ZnLT5mZF9vdXRbal0ueXNpemVfbWludXNfMSA9IG91dF95 c2l6ZV9taW51c18xX3N0cmlkZTI7DQoJCWZkX2N1cl9jZmctPmZkX291dFtqXS5zdHJpZGUgPSBw c3R2LT5pbmZfZWxtW2ldLm91dF9zdHJpZGVfc3RyaWRlMjsNCgl9DQp9DQoNClRoaXMgbG9va3Mg bW9yZSByZWFkYWJsZS4NCg0KPiArDQo+ICsJCWlmIChpID09IFJQTlhfTE9PUF9OVU0oMCkgfHwg aSA9PSBSUE5YX0xPT1BfTlVNKDEpIHx8IGkgPT0gUlBOWF9MT09QX05VTSgyKSkNCg0KaWYgKGog PT0gKFJQTl9MT09QX05VTSAtIDEpKQ0KDQo+ICsJCQlzZXRfY21iX2NmZyhmZF9jdXJfY2ZnLCBG RF9SUE5fU0VULCBmZC0+YmFzZV9wYXJhLT5ycG5fYW5jaG9yX3RocmQpOw0KPiArDQo+ICsJCWlm IChpID09IFJQTlhfTE9PUF9OVU0oMCkpIHsNCj4gKwkJCWNhbF94ID0gKChzcl9jcnBfdyA8PCAx MCkgKiAxMDAgLw0KPiArCQkJCSAoaW50KWZkLT5iYXNlX3BhcmEtPnB5cmFtaWRfcmVjdC53aWR0 aCkgPj4gMTA7DQo+ICsJCQljYWxfeSA9IGNhbF94ICogNTEyIC8gMTAwOw0KPiArCQkJZmRfY3Vy X2NmZ1tGRF9JTUFHRV9DT09SRF0gPSAoZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF0gJiAweEYp IHwNCj4gKwkJCQkJCSAgICAgKChjYWxfeSA8PCA0KSAmIDB4N0ZGRjApOw0KPiArCQkJZmRfY3Vy X2NmZ1tGRF9JTUFHRV9DT09SRF9YWV9PRlNUXSA9IDA7DQo+ICsJCQlpZiAoYWllX2NmZy0+ZW5f cm9pKSB7DQo+ICsJCQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF9YWV9PRlNUXSA9DQo+ICsJ CQkJCShhaWVfY2ZnLT5zcmNfcm9pLngxIC0gYWllX2NmZy0+c3JjX3BhZGRpbmcubGVmdCkgfA0K PiArCQkJCQkoYWllX2NmZy0+c3JjX3JvaS55MSAtIGFpZV9jZmctPnNyY19wYWRkaW5nLnVwKSA8 PCAxNjsNCj4gKwkJCX0NCj4gKwkJfSBlbHNlIGlmIChpID09IFJQTlhfTE9PUF9OVU0oMSkpIHsN Cj4gKwkJCWNhbF94ID0gKChzcl9jcnBfdyA8PCAxMCkgKiAxMDAgLw0KPiArCQkJCShpbnQpZmQt PmJhc2VfcGFyYS0+cHlyYW1pZF9yZWN0LndpZHRoKSA+PiAxMDsNCj4gKwkJCWNhbF95ID0gY2Fs X3ggKiAyICogNTEyIC8gMTAwOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF0gPSAo ZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF0gJiAweEYpIHwNCj4gKwkJCQkJCSAgICAgKChjYWxf eSA8PCA0KSAmIDB4N0ZGRjApOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF9YWV9P RlNUXSA9IDA7DQo+ICsJCQlpZiAoYWllX2NmZy0+ZW5fcm9pKSB7DQo+ICsJCQkJZmRfY3VyX2Nm Z1tGRF9JTUFHRV9DT09SRF9YWV9PRlNUXSA9DQo+ICsJCQkJCShhaWVfY2ZnLT5zcmNfcm9pLngx IC0gYWllX2NmZy0+c3JjX3BhZGRpbmcubGVmdCkgfA0KPiArCQkJCQkoYWllX2NmZy0+c3JjX3Jv aS55MSAtIGFpZV9jZmctPnNyY19wYWRkaW5nLnVwKSA8PCAxNjsNCj4gKwkJCX0NCj4gKwkJfSBl bHNlIGlmIChpID09IFJQTlhfTE9PUF9OVU0oMikpIHsNCj4gKwkJCWNhbF94ID0gKChzcl9jcnBf dyA8PCAxMCkgKiAxMDAgLw0KPiArCQkJCShpbnQpZmQtPmJhc2VfcGFyYS0+cHlyYW1pZF9yZWN0 LndpZHRoKSA+PiAxMDsNCj4gKwkJCWNhbF95ID0gY2FsX3ggKiA0ICogNTEyIC8gMTAwOw0KPiAr CQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF0gPSAoZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09S RF0gJiAweEYpIHwNCj4gKwkJCQkJCSAgICAgKChjYWxfeSA8PCA0KSAmIDB4N0ZGRjApOw0KPiAr CQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF9YWV9PRlNUXSA9IDA7DQo+ICsJCQlpZiAoYWll X2NmZy0+ZW5fcm9pKSB7DQo+ICsJCQkJZmRfY3VyX2NmZ1tGRF9JTUFHRV9DT09SRF9YWV9PRlNU XSA9DQo+ICsJCQkJCShhaWVfY2ZnLT5zcmNfcm9pLngxIC0gYWllX2NmZy0+c3JjX3BhZGRpbmcu bGVmdCkgfA0KPiArCQkJCQkoYWllX2NmZy0+c3JjX3JvaS55MSAtIGFpZV9jZmctPnNyY19wYWRk aW5nLnVwKSA8PCAxNjsNCj4gKwkJCX0NCj4gKwkJfQ0KDQpzdHJ1Y3QgZmRfY29uZmlnIHsNCgku Li4NCgl1OAlpbWdfY29vcmRfeDo0Ow0KCXU4CWltZ19jb29yZF95OjQ7DQoJdTMyCWltZ19jb29y ZF9yZXNlcnZlZDoyNDsNCgl1MTYJaW1nX2Nvb3JkX3hfb2ZzdDsNCgl1MTYJaW1nX2Nvb3JkX3lf b2ZzdDsNCgkuLi4NCn07DQoNCmlmIChqID09IChSUE5fTE9PUF9OVU0gLSAxKSkgew0KCWNhbF94 ID0gKChzcl9jcnBfdyA8PCAxMCkgKiAxMDAgLw0KCQkgKGludClmZC0+YmFzZV9wYXJhLT5weXJh bWlkX3JlY3Qud2lkdGgpID4+IDEwOw0KCWNhbF95ID0gY2FsX3ggKiAoMSA8PCAoMiAtIGkpKSAq IDUxMiAvIDEwMDsNCglmZF9jdXJfY2ZnLT5pbWdfY29vcmRfeCA9IGZkX2N1cl9jZmdbRkRfSU1B R0VfQ09PUkRdOw0KCWZkX2N1cl9jZmctPmltZ19jb29yZF95ID0gY2FsX3k7DQoJZmRfY3VyX2Nm Zy0+aW1nX2Nvb3JkX3hfb2ZzdCA9IDA7DQoJZmRfY3VyX2NmZy0+aW1nX2Nvb3JkX3lfb2ZzdCA9 IDA7DQoNCglpZiAoYWllX2NmZy0+ZW5fcm9pKSB7DQoJCWZkX2N1cl9jZmctPmltZ19jb29yZF94 X29mc3QgPSBhaWVfY2ZnLT5zcmNfcm9pLngxIC0gYWllX2NmZy0+c3JjX3BhZGRpbmcubGVmdDsN CgkJZmRfY3VyX2NmZy0+aW1nX2Nvb3JkX3lfb2ZzdCA9IGFpZV9jZmctPnNyY19yb2kueTEgLSBh aWVfY2ZnLT5zcmNfcGFkZGluZy51cDsNCgl9DQp9DQoNClRoaXMgd291bGQgc2hyaW5rIHRoZSBj b2RlIHNpemUgYW5kIGxvb2tzIHJlYWRhYmxlLg0KDQo+ICsNCj4gKwkJLyogSU5fRk1fQkFTRV9B RFIgKi8NCj4gKwkJaWYgKGkgPT0gMCkgew0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8wXSA9ICh1 MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMl1bMF0pOw0KPiArCQkJZmRfY3VyX2Nm Z1tGRF9JTl8xXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMl1bMV0pOw0K PiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8yXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9y c3RfcGFbMl1bMl0pOw0KPiArCQl9IGVsc2UgaWYgKGkgPT0gKFJQTlhfTE9PUF9OVU0oMikgKyAx KSkgew0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8wXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJz X3B5bV9yc3RfcGFbMV1bMF0pOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8xXSA9ICh1MzIpKGZk LT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMV1bMV0pOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9J Tl8yXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMV1bMl0pOw0KPiArCQl9 IGVsc2UgaWYgKGkgPT0gKFJQTlhfTE9PUF9OVU0oMSkgKyAxKSkgew0KPiArCQkJZmRfY3VyX2Nm Z1tGRF9JTl8wXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMF1bMF0pOw0K PiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8xXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9y c3RfcGFbMF1bMV0pOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8yXSA9ICh1MzIpKGZkLT5iYXNl X3BhcmEtPnJzX3B5bV9yc3RfcGFbMF1bMl0pOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJZm9yIChq ID0gMDsgaiA8IElOUFVUX1dETUFfV1JBX05VTTsgaisrKSB7DQo+ICsJCQkJaWYgKGZkX3JkbWFf ZW5baV1bal1bMF0gIT0gLTEpIHsNCj4gKwkJCQkJdWxvb3AgPSBmZF9yZG1hX2VuW2ldW2pdWzBd Ow0KPiArCQkJCQl1Y2ggPSBmZF9yZG1hX2VuW2ldW2pdWzFdOw0KPiArCQkJCQlmZF9jdXJfY2Zn W0ZEX0lOXzAgKyBqXSA9DQo+ICsJCQkJCQkodTMyKShmZC0+ZG1hX3BhcmEtPmZkX291dF9od19w YVt1bG9vcF1bdWNoXSk7DQo+ICsJCQkJfQ0KPiArCQkJfQ0KPiArCQl9DQoNCnN0YXRpYyBjb25z dCBzaWduZWQgaW50IGZkX3JkbWFfZW5bUlBOX0xPT1BfTlVNXVtJTlBVVF9XRE1BX1dSQV9OVU1d WzJdID0gew0KCXsgeyA5OSwgOTkgfSwgeyA5OSwgOTkgfSwgeyA5OSwgOTkgfSwgeyAtMSwgLTEg fSB9LA0KCXsgeyAwLCAwIH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0gfSwN Cgl7IHsgMSwgMCB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7 IDEsIDAgfSwgeyAyLCAwIH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsgMywgMCB9 LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDEsIDIgfSwgeyAy LCAyIH0sIHsgNCwgMiB9LCB7IDQsIDMgfSB9LA0KCXsgeyA1LCAwIH0sIHsgNSwgMSB9LCB7IC0x LCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDYsIDAgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEg fSwgeyAtMSwgLTEgfSB9LA0KCXsgeyA1LCAwIH0sIHsgNSwgMSB9LCB7IDcsIDAgfSwgeyAtMSwg LTEgfSB9LA0KCXsgeyA4LCAwIH0sIHsgOCwgMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0s DQoJeyB7IDksIDAgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEgfSB9LA0KCXsg eyA1LCAyIH0sIHsgNSwgMyB9LCB7IDcsIDIgfSwgeyAxMCwgMiB9IH0sDQoJeyB7IDExLCAwIH0s IHsgMTEsIDEgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEgfSB9LA0KCXsgeyAxMiwgMCB9LCB7IC0x LCAtMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDEzLCAwIH0sIHsgLTEsIC0x IH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsgMTEsIDAgfSwgeyAxMSwgMSB9LCB7 IDE0LCAwIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsgMTUsIDAgfSwgeyAtMSwgLTEgfSwgeyAtMSwg LTEgfSwgeyAtMSwgLTEgfSB9LA0KCXsgeyAxNiwgMCB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9 LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDExLCAwIH0sIHsgMTEsIDEgfSwgeyAxNCwgMCB9LCB7IDE3 LCAwIH0gfSwNCgl7IHsgMTgsIDAgfSwgeyAxOCwgMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9 IH0sDQoJeyB7IDE4LCAwIH0sIHsgMTgsIDEgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEgfSB9LA0K CXsgeyAxOCwgMCB9LCB7IDE4LCAxIH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsg MTgsIDAgfSwgeyAxOCwgMSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDE4LCAw IH0sIHsgMTgsIDEgfSwgeyAtMSwgLTEgfSwgeyAtMSwgLTEgfSB9LA0KCXsgeyAxOCwgMCB9LCB7 IDE4LCAxIH0sIHsgLTEsIC0xIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsgMTgsIDAgfSwgeyAxOCwg MSB9LCB7IC0xLCAtMSB9LCB7IC0xLCAtMSB9IH0sDQoJeyB7IDE4LCAwIH0sIHsgMTgsIDEgfSwg eyAtMSwgLTEgfSwgeyAtMSwgLTEgfSB9LA0KCXsgeyAxOCwgMCB9LCB7IDE4LCAxIH0sIHsgLTEs IC0xIH0sIHsgLTEsIC0xIH0gfSwNCgl7IHsgMTksIDAgfSwgeyAyMiwgMCB9LCB7IDIyLCAxIH0s IHsgMjUsIDAgfSB9DQp9Ow0KDQpzdHJ1Y3QgZmRfY29uZmlnIHsNCgkuLi4NCgl1MzIgaW5bSU5Q VVRfV0RNQV9XUkFfTlVNXTsNCgkuLi4NCn07DQoNCmlmIChqID09IDApIHsNCglmZF9jdXJfY2Zn LT5pbl8wID0gZmQtPmJhc2VfcGFyYS0+cnNfcHltX3JzdF9wYVsyIC0gaV1bMF07DQoJZmRfY3Vy X2NmZy0+aW5fMSA9IGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMiAtIGldWzFdOw0KCWZk X2N1cl9jZmctPmluXzIgPSBmZC0+YmFzZV9wYXJhLT5yc19weW1fcnN0X3BhWzIgLSBpXVsyXTsN Cn0gZWxzZSB7DQoJZm9yIChrID0gMDsgayA8IElOUFVUX1dETUFfV1JBX05VTTsgaysrKSB7DQoJ CWlmIChmZF9yZG1hX2VuW2pdW2tdWzBdICE9IC0xKSB7DQoJCQl1bG9vcCA9IGZkX3JkbWFfZW5b al1ba11bMF0gKyBpICogUlBOX0xPT1BfTlVNOw0KCQkJdWNoID0gZmRfcmRtYV9lbltqXVtrXVsx XTsNCgkJCWZkX2N1cl9jZmctPmluW2tdID0NCgkJCQlmZC0+ZG1hX3BhcmEtPmZkX291dF9od19w YVt1bG9vcF1bdWNoXTsNCgkJfQ0KCX0NCn0NCg0KVGhpcyBsb29rcyBtb3JlIHNpbXBsZS4NCg0K PiArDQo+ICsJCS8qIE9VVF9GTV9CQVNFX0FEUiAqLw0KPiArCQlmb3IgKGogPSAwOyBqIDwgT1VU UFVUX1dETUFfV1JBX05VTTsgaisrKSB7DQo+ICsJCQlpZiAob3V0X3N0cmlkZV9zaXplW2ldW2pd KQ0KPiArCQkJCWZkX2N1cl9jZmdbRkRfT1VUXzAgKyBqXSA9DQo+ICsJCQkJCSh1MzIpKGZkLT5k bWFfcGFyYS0+ZmRfb3V0X2h3X3BhW2ldW2pdKTsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qIEtFUk5F TF9CQVNFX0FEUiAqLw0KPiArCQlmb3IgKGogPSAwOyBqIDwgS0VSTkVMX1JETUFfUkFfTlVNOyBq KyspIHsNCj4gKwkJCXNpemUgPSBnZXRfZmRfa2VyX3JkbWFfc2l6ZShpLCBqKTsNCj4gKwkJCWlm IChzaXplKQ0KPiArCQkJCWZkX2N1cl9jZmdbRkRfS0VSTkVMXzAgKyBqXSA9DQo+ICsJCQkJCSh1 MzIpKGZkLT5kbWFfcGFyYS0+ZmRfa2VybmVsX3BhW2ldW2pdKTsNCj4gKwkJfQ0KPiArDQo+ICsJ CWZkX2N1cl9jZmdbRkRfQ09OX0lOX0JBX01TQl0gPSAodTMyKTB4MDIwMjAyMDI7DQoNCkl0J3Mg bm90IG5lY2Vzc2FyeSB0byBjYXNlIHRvIHUzMi4NCg0KPiArCQlmZF9jdXJfY2ZnW0ZEX0NPTl9P VVRfQkFfTVNCXSA9ICh1MzIpMHgwMjAyMDIwMjsNCj4gKwkJZmRfY3VyX2NmZ1tGRF9DT05fS0VS TkVMX0JBX01TQl0gPSAodTMyKTB4MDAwMDAyMDI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWllX2NvbmZpZ19hdHRyX25ldHdvcmsoc3RydWN0 IG10a19haWVfZGV2ICpmZCwNCj4gKwkJCQkgICBzdHJ1Y3QgYWllX2VucV9pbmZvICphaWVfY2Zn KQ0KPiArew0KPiArCWJvb2wgaXNfcmVncmVzc2lvbl9sb29wOw0KPiArCXZvaWQgKmZkX2NmZzsN Cj4gKwl1MzIgKmZkX2N1cl9jZmc7DQo+ICsJdTE2IGZkX2lucHV0X2h0LCBmZF9vdXRwdXRfaHQ7 DQo+ICsJdTE2IGZkX291dF95WzRdOw0KPiArCXU4IGksIGo7DQo+ICsJdTggdWxvb3AsIHVjaCwg dWlkeDsNCj4gKwl1MTYgcHlyYW1pZDBfb3V0X3csIHB5cmFtaWQwX291dF9oOw0KPiArCWludCBm ZF9jb252X2h0Ow0KPiArCXUxNiBzcl9jcnBfdywgc3JfY3JwX2g7DQo+ICsNCj4gKwlzcl9jcnBf dyA9IGZkLT5hdHRyX3BhcmEtPmNyb3Bfd2lkdGhbZmQtPmF0dHJfcGFyYS0+d19pZHhdOw0KPiAr CXNyX2NycF9oID0gZmQtPmF0dHJfcGFyYS0+Y3JvcF9oZWlnaHRbZmQtPmF0dHJfcGFyYS0+d19p ZHhdOw0KPiArDQo+ICsJcHlyYW1pZDBfb3V0X3cgPSBBVFRSX01PREVfUFlSQU1JRF9XSURUSDsN Cj4gKwlweXJhbWlkMF9vdXRfaCA9IHB5cmFtaWQwX291dF93ICogc3JfY3JwX2ggLyBzcl9jcnBf dzsNCj4gKw0KPiArCWZkX2NmZyA9IGZkLT5iYXNlX3BhcmEtPmF0dHJfZmRfY2ZnX3ZhW2ZkLT5h dHRyX3BhcmEtPndfaWR4XTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBVFRSX0xPT1BfTlVN OyBpKyspIHsNCj4gKwkJZmRfY3VyX2NmZyA9ICh1MzIgKilmZF9jZmcgKyBmZC0+dmFyaWFudC0+ ZmRfY2ZnX3NpemUgKiBpOw0KPiArCQlmZF9jdXJfY2ZnW0ZEX0lOUFVUX1JPVEFURV0gPQ0KPiAr CQkJKGZkX2N1cl9jZmdbRkRfSU5QVVRfUk9UQVRFXSAmIDB4RkZGRjBGRkYpIHwNCj4gKwkJCSgo YWllX2NmZy0+cm90YXRlX2RlZ3JlZSA8PCAxMikgJiAweDMwMDApOw0KPiArCQlpZiAoaSA9PSAw KQ0KPiArCQkJZmRfaW5wdXRfaHQgPSBweXJhbWlkMF9vdXRfaDsNCj4gKwkJZWxzZQ0KPiArCQkJ aWYgKGF0dHJfb3V0X3N0cmlkZTJfYXNfaW5baV0gPT0gMCkNCj4gKwkJCQlmZF9pbnB1dF9odCA9 IGZkX291dHB1dF9odDsNCj4gKwkJCWVsc2UgaWYgKGF0dHJfb3V0X3N0cmlkZTJfYXNfaW5baV0g PT0gMSkNCj4gKwkJCQlmZF9pbnB1dF9odCA9IChmZF9vdXRwdXRfaHQgKyAxKSAvIDI7DQo+ICsN Cj4gKwkJZmRfb3V0cHV0X2h0ID0gRElWX1JPVU5EX1VQKGZkX2lucHV0X2h0LCBBVFRSX0ZEX1NU UklERShpKSArDQo+ICsJCQkJCSAgICAyICogQVRUUl9GRF9NQVhQT09MKGkpKTsNCj4gKwkJZmRf Y29udl9odCA9IERJVl9ST1VORF9VUChmZF9pbnB1dF9odCwgQVRUUl9GRF9TVFJJREUoaSkpOw0K PiArDQo+ICsJCWZkX2N1cl9jZmdbRkRfQ09OVl9JTUdfV19IXSA9DQo+ICsJCQkoZmRfY3VyX2Nm Z1tGRF9DT05WX0lNR19XX0hdICYgMHhGRkZGMDAwMCkgfA0KPiArCQkJKGZkX2NvbnZfaHQgJiAw eEZGRkYpOw0KPiArCQlmZF9jdXJfY2ZnW0ZEX0lOX0lNR19XX0hdID0NCj4gKwkJCShmZF9jdXJf Y2ZnW0ZEX0lOX0lNR19XX0hdICYgMHhGRkZGMDAwMCkgfA0KPiArCQkJKGZkX2lucHV0X2h0ICYg MHhGRkZGKTsNCj4gKwkJZmRfY3VyX2NmZ1tGRF9PVVRfSU1HX1dfSF0gPQ0KPiArCQkJKGZkX2N1 cl9jZmdbRkRfT1VUX0lNR19XX0hdICYgMHhGRkZGMDAwMCkgfA0KPiArCQkJKGZkX291dHB1dF9o dCAmIDB4RkZGRik7DQoNCg0KSSB0aGluayB5b3UgY291bGQgZGVmaW5lIGEgc3RydWN0dXJlIGFu ZCBpdHMgbWVtYmVyIGhhcyBkaWZmZXJlbnQgdHlwZSwNCg0Kc3RydWN0IGZkX2N1cl9jb25maWcg ew0KCS4uLg0KCXUxNglpbl93Ow0KCXUxNglpbl9oOw0KCXUxNglvdXRfdzsNCgl1MTYJb3V0X2g7 DQoJLi4uDQp9Ow0KDQpzdHJ1Y3QgZmRfY3VyX2NvbmZpZyAqZmRfY3VyX2NmZzsNCg0KZmRfY3Vy X2NmZy0+aW5fdyA9IGZkX2lucHV0X2h0Ow0KZmRfY3VyX2NmZy0+b3V0X3cgPSBmZF9vdXRwdXRf aHQ7DQoNClRoaXMgbG9vayBtb3JlIHJlYWRhYmxlLg0KDQo+ICsJCXNldF9jbWJfY2ZnKGZkX2N1 cl9jZmcsIEZEX0lOX1hfWV9TSVpFMCwgZmRfaW5wdXRfaHQgLSAxKTsNCj4gKwkJc2V0X2NtYl9j ZmcoZmRfY3VyX2NmZywgRkRfSU5fWF9ZX1NJWkUxLCBmZF9pbnB1dF9odCAtIDEpOw0KPiArCQlz ZXRfY21iX2NmZyhmZF9jdXJfY2ZnLCBGRF9JTl9YX1lfU0laRTIsIGZkX2lucHV0X2h0IC0gMSk7 DQo+ICsJCXNldF9jbWJfY2ZnKGZkX2N1cl9jZmcsIEZEX0lOX1hfWV9TSVpFMywgZmRfaW5wdXRf aHQgLSAxKTsNCj4gKw0KPiArCQlpc19yZWdyZXNzaW9uX2xvb3AgPSAoaSA9PSBBR0VfT1VUX1JH UyB8fCBpID09IEdFTkRFUl9PVVRfUkdTIHx8DQo+ICsJCQkJCSAgICAgIGkgPT0gSU5ESUFOX09V VF9SR1MgfHwgaSA9PSBFVEhOSUNJVFlfT1VUX1JHUyk7DQo+ICsNCj4gKwkJaWYgKGlzX3JlZ3Jl c3Npb25fbG9vcCkgew0KPiArCQkJZmRfb3V0X3lbMF0gPSAwOw0KPiArCQkJZmRfb3V0X3lbMV0g PSAwOw0KPiArCQkJZmRfb3V0X3lbMl0gPSAwOw0KPiArCQkJZmRfb3V0X3lbM10gPSAwOw0KPiAr CQl9IGVsc2Ugew0KPiArCQkJZmRfb3V0X3lbMF0gPSBmZF9vdXRwdXRfaHQgLSAxOw0KPiArCQkJ ZmRfb3V0X3lbMV0gPSBmZF9vdXRwdXRfaHQgLSAxOw0KPiArCQkJaWYgKGF0dHJfb3V0XzJzaXpl W2ldID09IDApIHsNCj4gKwkJCQlmZF9vdXRfeVsyXSA9IGZkX291dHB1dF9odCAtIDE7DQo+ICsJ CQkJZmRfb3V0X3lbM10gPSBmZF9vdXRwdXRfaHQgLSAxOw0KPiArCQkJfSBlbHNlIHsNCj4gKwkJ CQlmZF9vdXRfeVsyXSA9IChmZF9vdXRwdXRfaHQgKyAxKSAvIDIgLSAxOw0KPiArCQkJCWZkX291 dF95WzNdID0gKGZkX291dHB1dF9odCArIDEpIC8gMiAtIDE7DQo+ICsJCQl9DQo+ICsJCX0NCj4g Kw0KPiArCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQ0KPiArCQkJc2V0X2NtYl9jZmcoZmRfY3Vy X2NmZywgRkRfT1VUX1hfWV9TSVpFMCArIDIgKiBqLCBmZF9vdXRfeVtqXSk7DQo+ICsNCj4gKwkJ LyogSU5fRk1fQkFTRV9BRFIgKi8NCj4gKwkJaWYgKGkgPT0gMCkgew0KPiArCQkJZmRfY3VyX2Nm Z1tGRF9JTl8wXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9yc3RfcGFbMF1bMF0pOw0K PiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8xXSA9ICh1MzIpKGZkLT5iYXNlX3BhcmEtPnJzX3B5bV9y c3RfcGFbMF1bMV0pOw0KPiArCQkJZmRfY3VyX2NmZ1tGRF9JTl8yXSA9ICh1MzIpKGZkLT5iYXNl X3BhcmEtPnJzX3B5bV9yc3RfcGFbMF1bMl0pOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJZm9yIChq ID0gMDsgaiA8IElOUFVUX1dETUFfV1JBX05VTTsgaisrKSB7DQo+ICsJCQkJaWYgKGF0dHJfcmRt YV9lbltpXVtqXVswXSAhPSAtMSkgew0KPiArCQkJCQl1bG9vcCA9IGF0dHJfcmRtYV9lbltpXVtq XVswXTsNCj4gKwkJCQkJdWNoID0gYXR0cl9yZG1hX2VuW2ldW2pdWzFdOw0KPiArCQkJCQlmZF9j dXJfY2ZnW0ZEX0lOXzAgKyBqXSA9DQo+ICsJCQkJCQkodTMyKShmZC0+ZG1hX3BhcmEtPmF0dHJf b3V0X2h3X3BhW3Vsb29wXVt1Y2hdKTsNCj4gKwkJCQl9DQo+ICsJCQl9DQo+ICsJCX0NCj4gKw0K PiArCQkvKiBPVVRfRk1fQkFTRV9BRFIgKi8NCj4gKwkJZm9yIChqID0gMDsgaiA8IE9VVFBVVF9X RE1BX1dSQV9OVU07IGorKykgew0KPiArCQkJaWYgKGF0dHJfd2RtYV9lbltpXVtqXSkgew0KPiAr CQkJCXVpZHggPSBmZC0+YXR0cl9wYXJhLT53X2lkeDsNCj4gKwkJCQlpZiAoaSA9PSBBR0VfT1VU X1JHUyAmJiBqID09IDApDQo+ICsJCQkJCWZkX2N1cl9jZmdbRkRfT1VUXzAgKyBqXSA9DQo+ICsJ CQkJCQkodTMyKShmZC0+ZG1hX3BhcmEtPmFnZV9vdXRfaHdfcGFbdWlkeF0pOw0KPiArCQkJCWVs c2UgaWYgKGkgPT0gR0VOREVSX09VVF9SR1MgJiYgaiA9PSAwKQ0KPiArCQkJCQlmZF9jdXJfY2Zn W0ZEX09VVF8wICsgal0gPQ0KPiArCQkJCQkJKHUzMikoZmQtPmRtYV9wYXJhLT5nZW5kZXJfb3V0 X2h3X3BhW3VpZHhdKTsNCj4gKwkJCQllbHNlIGlmIChpID09IElORElBTl9PVVRfUkdTICYmIGog PT0gMCkNCj4gKwkJCQkJZmRfY3VyX2NmZ1tGRF9PVVRfMCArIGpdID0NCj4gKwkJCQkJCSh1MzIp KGZkLT5kbWFfcGFyYS0+aXNfaW5kaWFuX291dF9od19wYVt1aWR4XSk7DQo+ICsJCQkJZWxzZSBp ZiAoaSA9PSBFVEhOSUNJVFlfT1VUX1JHUyAmJiBqID09IDApDQo+ICsJCQkJCWZkX2N1cl9jZmdb RkRfT1VUXzAgKyBqXSA9DQo+ICsJCQkJCQkodTMyKShmZC0+ZG1hX3BhcmEtPmV0aG5pY2l0eV9v dXRfaHdfcGFbdWlkeF0pOw0KPiArCQkJCWVsc2UNCj4gKwkJCQkJZmRfY3VyX2NmZ1tGRF9PVVRf MCArIGpdID0NCj4gKwkJCQkJCSh1MzIpKGZkLT5kbWFfcGFyYS0+YXR0cl9vdXRfaHdfcGFbaV1b al0pOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsNCj4gKwkJLyogS0VSTkVMX0JBU0VfQURSICovDQo+ ICsJCWZvciAoaiA9IDA7IGogPCBLRVJORUxfUkRNQV9SQV9OVU07IGorKykgew0KPiArCQkJZmRf Y3VyX2NmZ1tGRF9LRVJORUxfMCArIGpdID0NCj4gKwkJCQkodTMyKShmZC0+ZG1hX3BhcmEtPmF0 dHJfa2VybmVsX3BhW2ldW2pdKTsNCj4gKwkJfQ0KPiArDQo+ICsJCWZkX2N1cl9jZmdbRkRfQ09O X0lOX0JBX01TQl0gPSAodTMyKTB4MDIwMjAyMDI7DQo+ICsJCWZkX2N1cl9jZmdbRkRfQ09OX09V VF9CQV9NU0JdID0gKHUzMikweDAyMDIwMjAyOw0KPiArCQlmZF9jdXJfY2ZnW0ZEX0NPTl9LRVJO RUxfQkFfTVNCXSA9ICh1MzIpMHgwMDAwMDIwMjsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCg0KW3NuaXBdDQoNCj4gKw0KPiArc3RhdGljIHZvaWQgYWllX2V4ZWN1dGVfYXR0cmli dXRlX2RldGVjdGlvbihzdHJ1Y3QgbXRrX2FpZV9kZXYgKmZkLA0KPiArCQkJCQkgICAgc3RydWN0 IGFpZV9lbnFfaW5mbyAqYWllX2NmZykNCj4gK3sNCj4gKwl3cml0ZWwoMHgwLCBmZC0+ZmRfYmFz ZSArIEFJRV9TVEFSVF9SRUcpOw0KPiArCXdyaXRlbCgweDAwMDAwMTAxLCBmZC0+ZmRfYmFzZSAr IEFJRV9FTkFCTEVfUkVHKTsNCj4gKwl3cml0ZWwoMHgwMDAwMUEwMCwgZmQtPmZkX2Jhc2UgKyBB SUVfTE9PUF9SRUcpOw0KPiArCXdyaXRlbCgweDEsIGZkLT5mZF9iYXNlICsgQUlFX0lOVF9FTl9S RUcpOw0KPiArCXdyaXRlbChmZC0+cmVnX2NmZy5yc19hZHIsIGZkLT5mZF9iYXNlICsgQUlFX1JT X0NPTl9CQVNFX0FEUl9SRUcpOw0KDQpZb3UgZG9lcyBub3QgYXNzaWduIGZkLT5yZWdfY2ZnLnJz X2FkciBpbiBhdHRyaWJ1dGUgbW9kZSwgd2h5IGRvIHlvdSBzZXQgaXQgdG8gcmVnaXN0ZXI/DQoN Cj4gKwl3cml0ZWwoZmQtPnJlZ19jZmcuZmRfYWRyLCBmZC0+ZmRfYmFzZSArIEFJRV9GRF9DT05f QkFTRV9BRFJfUkVHKTsNCj4gKwl3cml0ZWwoZmQtPnJlZ19jZmcueXV2MnJnYl9hZHIsIGZkLT5m ZF9iYXNlICsgQUlFX1lVVjJSR0JfQ09OX0JBU0VfQURSX1JFRyk7DQo+ICsJd3JpdGVsKDB4MDAw MDAwMDIsIGZkLT5mZF9iYXNlICsgQUlFX1lVVjJSR0JfQ09OX0JBU0VfQURSX01TQik7DQo+ICsJ d3JpdGVsKDB4MDAwMDAwMDIsIGZkLT5mZF9iYXNlICsgQUlFX1JTX0NPTl9CQVNFX0FEUl9NU0Ip Ow0KPiArCXdyaXRlbCgweDAwMDAwMDAyLCBmZC0+ZmRfYmFzZSArIEFJRV9GRF9DT05fQkFTRV9B RFJfTVNCKTsNCj4gKwl3cml0ZWwoMHgxLCBmZC0+ZmRfYmFzZSArIEFJRV9TVEFSVF9SRUcpOw0K PiArfQ0KDQpZb3UgY291bGQgbWVyZ2UgYWllX2V4ZWN1dGVfZmFjZV9kZXRlY3Rpb24oKSBhbmQg YWllX2V4ZWN1dGVfYXR0cmlidXRlX2RldGVjdGlvbigpIGludG8gb25lIGZ1bmN0aW9uOg0KDQph aWVfZXhlY3V0ZV9mYWNlX2F0dHJfZGV0ZWN0aW9uKHN0cnVjdCBtdGtfYWllX2RldiAqZmQsDQoJ CQkJdTMyIG5yX3B5cmFtaWQpDQp7DQoJd3JpdGVsKDB4MCwgZmQtPmZkX2Jhc2UgKyBBSUVfU1RB UlRfUkVHKTsNCglpZiAobnJfcHlyYW1pZCkgew0KCQl3cml0ZWwoMHgwMDAwMDExMSwgZmQtPmZk X2Jhc2UgKyBBSUVfRU5BQkxFX1JFRyk7DQoJCWxvb3BfbnVtID0gRkRfTE9PUF9OVU0gLyAzICog bnJfcHlyYW1pZDsNCgkJbG9vcF9yZWdfdmFsID0gKGxvb3BfbnVtIDw8IDgpIHwgKG5yX3B5cmFt aWQgLSAxKTsNCgkJd3JpdGVsKGxvb3BfcmVnX3ZhbCwgZmQtPmZkX2Jhc2UgKyBBSUVfTE9PUF9S RUcpOw0KCX0gZWxzZSB7DQoJCXdyaXRlbCgweDAwMDAwMTAxLCBmZC0+ZmRfYmFzZSArIEFJRV9F TkFCTEVfUkVHKTsNCgkJd3JpdGVsKDB4MDAwMDFBMDAsIGZkLT5mZF9iYXNlICsgQUlFX0xPT1Bf UkVHKTsNCgl9DQoJd3JpdGVsKDB4MSwgZmQtPmZkX2Jhc2UgKyBBSUVfSU5UX0VOX1JFRyk7DQoJ d3JpdGVsKGZkLT5yZWdfY2ZnLnJzX2FkciwgZmQtPmZkX2Jhc2UgKyBBSUVfUlNfQ09OX0JBU0Vf QURSX1JFRyk7DQoJd3JpdGVsKGZkLT5yZWdfY2ZnLmZkX2FkciwgZmQtPmZkX2Jhc2UgKyBBSUVf RkRfQ09OX0JBU0VfQURSX1JFRyk7DQoJd3JpdGVsKGZkLT5yZWdfY2ZnLnl1djJyZ2JfYWRyLCBm ZC0+ZmRfYmFzZSArIEFJRV9ZVVYyUkdCX0NPTl9CQVNFX0FEUl9SRUcpOw0KCXdyaXRlbCgweDAw MDAwMDAyLCBmZC0+ZmRfYmFzZSArIEFJRV9ZVVYyUkdCX0NPTl9CQVNFX0FEUl9NU0IpOw0KCXdy aXRlbCgweDAwMDAwMDAyLCBmZC0+ZmRfYmFzZSArIEFJRV9SU19DT05fQkFTRV9BRFJfTVNCKTsN Cgl3cml0ZWwoMHgwMDAwMDAwMiwgZmQtPmZkX2Jhc2UgKyBBSUVfRkRfQ09OX0JBU0VfQURSX01T Qik7DQoJd3JpdGVsKDB4MSwgZmQtPmZkX2Jhc2UgKyBBSUVfU1RBUlRfUkVHKTsNCn0NCg0KRm9y IGF0dHJpYnV0ZSBtb2RlLCBucl9weXJhbWlkIGlzIDAuDQoNCj4gKw0KPiArc3RhdGljIHZvaWQg YWllX2V4ZWN1dGVfZmxkX2RldGVjdGlvbihzdHJ1Y3QgbXRrX2FpZV9kZXYgKmZkLA0KPiArCQkJ CSAgICAgIHN0cnVjdCBhaWVfZW5xX2luZm8gKmFpZV9jZmcpDQo+ICt7DQo+ICsJdW5zaWduZWQg aW50IGk7DQo+ICsNCj4gKwl3cml0ZWwoMHgxMCwgZmQtPmZkX2Jhc2UgKyBBSUVfU1RBUlRfUkVH KTsNCj4gKwl3cml0ZWwoMHgwMDAxMTExMSwgZmQtPmZkX2Jhc2UgKyBBSUVfRE1BX0NUTF9SRUcp Ow0KPiArCXdyaXRlbCgweDAxMTExMTExLCBmZC0+ZmRfYmFzZSArIEZMRF9FTik7DQo+ICsJd3Jp dGVsKDB4MSwgZmQtPmZkX2Jhc2UgKyBBSUVfSU5UX0VOX1JFRyk7DQo+ICsJZm9yIChpID0gMDsg aSA8IGFpZV9jZmctPmZsZF9mYWNlX251bTsgaSsrKSB7DQo+ICsJCXdyaXRlbChhaWVfY2ZnLT5z cmNfaW1nX2FkZHIsIGZkLT5mZF9iYXNlICsgRkxEX0JBU0VfQUREUl9GQUNFXzAgKyBpICogMHg0 KTsNCj4gKwkJd3JpdGVsKGFpZV9jZmctPmZsZF9pbnB1dFtpXS5mbGRfaW5fY3JvcF94MSA8PCAx NiB8DQo+ICsJCSAgICAgICBhaWVfY2ZnLT5mbGRfaW5wdXRbaV0uZmxkX2luX2Nyb3BfeTEsDQo+ ICsJCSAgICAgICBmZC0+ZmRfYmFzZSArIGZsZF9mYWNlX2luZm9fMFtpXSk7DQo+ICsJCXdyaXRl bChhaWVfY2ZnLT5mbGRfaW5wdXRbaV0uZmxkX2luX2Nyb3BfeDIgPDwgMTYgfA0KPiArCQkgICAg ICAgYWllX2NmZy0+ZmxkX2lucHV0W2ldLmZsZF9pbl9jcm9wX3kyLA0KPiArCQkgICAgICAgZmQt PmZkX2Jhc2UgKyBGTERfRkFDRV9JTkZPKGksIDEpKTsNCj4gKwkJd3JpdGVsKGFpZV9jZmctPmZs ZF9pbnB1dFtpXS5mbGRfaW5fcmlwIDw8IDQgfA0KPiArCQkgICAgICAgYWllX2NmZy0+ZmxkX2lu cHV0W2ldLmZsZF9pbl9yb3AsDQo+ICsJCSAgICAgICBmZC0+ZmRfYmFzZSArIEZMRF9GQUNFX0lO Rk8oaSwgMikpOw0KPiArCX0NCj4gKw0KPiArCXdyaXRlbChhaWVfY2ZnLT5mbGRfZmFjZV9udW0g PDwgMjggfCBGTERfRk9SRVNUIDw8IDE2IHwNCj4gKwkgICAgICAgRkxEX1BPSU5ULCBmZC0+ZmRf YmFzZSArIEZMRF9NT0RFTF9QQVJBMSk7DQo+ICsJd3JpdGVsKDEzIDw8IDE2IHwgMHhmZTksIGZk LT5mZF9iYXNlICsgRkxEX01PREVMX1BBUkExNCk7DQo+ICsJd3JpdGVsKGFpZV9jZmctPnNyY19p bWdfd2lkdGggPDwgMTYgfCBhaWVfY2ZnLT5zcmNfaW1nX2hlaWdodCwNCj4gKwkgICAgICAgZmQt PmZkX2Jhc2UgKyBGTERfU1JDX1dEX0hUKTsNCj4gKw0KPiArCS8qaW5wdXQgc2V0dGluZ3MqLw0K PiArCXdyaXRlbCgweDAwN2MwMDNmLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9TSVpFXzApOw0K PiArCXdyaXRlbCgweDAwNDAwMDBmLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9TVFJJREVfMCk7 DQo+ICsJd3JpdGVsKDB4MDA3YzAwM2YsIGZkLT5mZF9iYXNlICsgRkxEX1BMX0lOX1NJWkVfMSk7 DQo+ICsJd3JpdGVsKDB4MDA0MDAwMGYsIGZkLT5mZF9iYXNlICsgRkxEX1BMX0lOX1NUUklERV8x KTsNCj4gKwl3cml0ZWwoMHgwMDE2MDAzZiwgZmQtPmZkX2Jhc2UgKyBGTERfUExfSU5fU0laRV8y XzApOw0KPiArCXdyaXRlbCgweDAwNDAwMDBmLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9TVFJJ REVfMl8wKTsNCj4gKwl3cml0ZWwoMHgwMDEzMDAzZiwgZmQtPmZkX2Jhc2UgKyBGTERfUExfSU5f U0laRV8yXzEpOw0KPiArCXdyaXRlbCgweDAwNDAwMDBmLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9J Tl9TVFJJREVfMl8xKTsNCj4gKwl3cml0ZWwoMHgwMDEzMDAzZiwgZmQtPmZkX2Jhc2UgKyBGTERf UExfSU5fU0laRV8yXzIpOw0KPiArCXdyaXRlbCgweDAwNDAwMDBmLCBmZC0+ZmRfYmFzZSArIEZM RF9QTF9JTl9TVFJJREVfMl8yKTsNCj4gKwl3cml0ZWwoMHgwMGE2MDAxZiwgZmQtPmZkX2Jhc2Ug KyBGTERfUExfSU5fU0laRV8zKTsNCj4gKwl3cml0ZWwoMHgwMDIwMDAwZiwgZmQtPmZkX2Jhc2Ug KyBGTERfUExfSU5fU1RSSURFXzMpOw0KPiArDQo+ICsJLypvdXRwdXQgc2V0dGluZyovDQo+ICsJ d3JpdGVsKCgyNDAwICogYWllX2NmZy0+ZmxkX2ZhY2VfbnVtIC0gMSkgPDwgMTYgfCAxMjcsDQo+ ICsJICAgICAgIGZkLT5mZF9iYXNlICsgRkxEX1NIX0lOX1NJWkVfMCk7DQo+ICsJd3JpdGVsKDB4 MDAxMDAwMGYsIGZkLT5mZF9iYXNlICsgRkxEX1NIX0lOX1NUUklERV8wKTsNCj4gKwl3cml0ZWwo ZmQtPmZsZF9wYXJhLT5mbGRfb3V0cHV0X3BhWzBdLA0KPiArCSAgICAgICBmZC0+ZmRfYmFzZSAr IEZMRF9UUl9PVVRfQkFTRV9BRERSXzApOw0KDQpmbGRfb3V0cHV0X3BhW10gaXMgdXNlZCBpbiB0 aGlzIGZ1bmN0aW9uIGFuZCB5b3UganVzdCB1c2UgZmxkX291dHB1dF9wYVswXSwNCnNvIGl0J3Mg bm90IG5lY2Vzc2FyeSB0byB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgZmxkX291dHB1dF9wYS4NCklu IGFpZV9hcnJhbmdlX2ZsZF9idWYoKSwNCg0KZmQtPmZsZF9wYXJhLT5mbGRfb3V0cHV0X3BhID0g ZmQtPmZkX2ZsZF9vdXRfaHcucGE7DQoNCkFuZCBoZXJlLA0KDQp3cml0ZWwoZmQtPmZsZF9wYXJh LT5mbGRfb3V0cHV0X3BhLCBmZC0+ZmRfYmFzZSArIEZMRF9UUl9PVVRfQkFTRV9BRERSXzApOw0K DQo+ICsJd3JpdGVsKChhaWVfY2ZnLT5mbGRfZmFjZV9udW0gLSAxKSA8PCAxNiB8IDB4NmYsDQo+ ICsJICAgICAgIGZkLT5mZF9iYXNlICsgRkxEX1RSX09VVF9TSVpFXzApOw0KPiArCXdyaXRlbCgw eDAwNzAwMDBmLCBmZC0+ZmRfYmFzZSArIEZMRF9UUl9PVVRfU1RSSURFXzApOw0KPiArCXdyaXRl bChmZC0+ZmxkX3BhcmEtPmZsZF9vdXRwdXRfcGFbMF0sDQo+ICsJICAgICAgIGZkLT5mZF9iYXNl ICsgRkxEX1BQX09VVF9CQVNFX0FERFJfMCk7DQoNCkRpdHRvLg0KDQo+ICsJd3JpdGVsKChhaWVf Y2ZnLT5mbGRfZmFjZV9udW0gLSAxKSA8PCAxNiB8IDB4NmYsDQo+ICsJICAgICAgIGZkLT5mZF9i YXNlICsgRkxEX1BQX09VVF9TSVpFXzApOw0KPiArCXdyaXRlbCgweDAwNzAwMDBmLCBmZC0+ZmRf YmFzZSArIEZMRF9QUF9PVVRfU1RSSURFXzApOw0KPiArDQo+ICsJLypjdiBzY29yZSovDQo+ICsJ d3JpdGVsKDB4MDAwMDAwMDEsIGZkLT5mZF9iYXNlICsgRkxEX0JTX0JJQVMpOw0KPiArCXdyaXRl bCgweDAwMDBiODM1LCBmZC0+ZmRfYmFzZSArIEZMRF9DVl9GTV9SQU5HRV8wKTsNCj4gKwl3cml0 ZWwoMHhmZmZmNWNiYSwgZmQtPmZkX2Jhc2UgKyBGTERfQ1ZfRk1fUkFOR0VfMSk7DQo+ICsJd3Jp dGVsKDB4MDAwMDVlZDUsIGZkLT5mZF9iYXNlICsgRkxEX0NWX1BNX1JBTkdFXzApOw0KPiArCXdy aXRlbCgweGZmZmY5MTBkLCBmZC0+ZmRfYmFzZSArIEZMRF9DVl9QTV9SQU5HRV8xKTsNCj4gKwl3 cml0ZWwoMHgwMDAwMDMxZSwgZmQtPmZkX2Jhc2UgKyBGTERfQlNfUkFOR0VfMCk7DQo+ICsJd3Jp dGVsKDB4ZmZmZmZjYWUsIGZkLT5mZF9iYXNlICsgRkxEX0JTX1JBTkdFXzEpOw0KPiArDQo+ICsJ LyogNiBzdGVwcyAqLw0KPiArCXdyaXRlbChmZC0+ZmxkX3BhcmEtPmZsZF9zdGVwX3BhW0ZMRF9T VEVQX0JMSU5LXVsxNF0sDQo+ICsJICAgICAgIGZkLT5mZF9iYXNlICsgRkxEX0JTX0lOX0JBU0Vf QUREUl8xNCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgew0KPiArCQl3cml0 ZWwoZmQtPmZsZF9wYXJhLT5mbGRfc3RlcF9wYVtGTERfU1RFUF9DVl1baV0sDQo+ICsJCSAgICAg ICBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9CQVNFX0FERFJfMl8oaSkpOw0KPiArDQo+ICsJCXdy aXRlbChmZC0+ZmxkX3BhcmEtPmZsZF9zdGVwX3BhW0ZMRF9TVEVQX0ZQXVtpXSwNCj4gKwkJICAg ICAgIGZkLT5mZF9iYXNlICsgRkxEX1BMX0lOX0JBU0VfQUREUl8zXyhpKSk7DQo+ICsNCj4gKwkJ d3JpdGVsKGZkLT5mbGRfcGFyYS0+ZmxkX3N0ZXBfcGFbRkxEX1NURVBfTEVBRl1baV0sDQo+ICsJ CSAgICAgICBmZC0+ZmRfYmFzZSArIEZMRF9TSF9JTl9CQVNFX0FERFJfKGkpKTsNCj4gKw0KPiAr CQl3cml0ZWwoZmQtPmZsZF9wYXJhLT5mbGRfc3RlcF9wYVtGTERfU1RFUF9LTTAyXVtpXSwNCj4g KwkJICAgICAgIGZkLT5mZF9iYXNlICsgRkxEX1BMX0lOX0JBU0VfQUREUl8wXyhpKSk7DQo+ICsN Cj4gKwkJd3JpdGVsKGZkLT5mbGRfcGFyYS0+ZmxkX3N0ZXBfcGFbRkxEX1NURVBfS00xM11baV0s DQo+ICsJCSAgICAgICBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9CQVNFX0FERFJfMV8oaSkpOw0K PiArCX0NCj4gKw0KPiArCXdyaXRlbCgweDIyMjIyMjIyLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9J Tl9CQVNFX0FERFJfMF8wXzdfTVNCKTsNCj4gKwl3cml0ZWwoMHgwMjIyMjIyMiwgZmQtPmZkX2Jh c2UgKyBGTERfUExfSU5fQkFTRV9BRERSXzBfOF8xNV9NU0IpOw0KPiArDQo+ICsJd3JpdGVsKDB4 MjIyMjIyMjIsIGZkLT5mZF9iYXNlICsgRkxEX1BMX0lOX0JBU0VfQUREUl8xXzBfN19NU0IpOw0K PiArCXdyaXRlbCgweDAyMjIyMjIyLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9CQVNFX0FERFJf MV84XzE1X01TQik7DQo+ICsNCj4gKwl3cml0ZWwoMHgyMjIyMjIyMiwgZmQtPmZkX2Jhc2UgKyBG TERfUExfSU5fQkFTRV9BRERSXzJfMF83X01TQik7DQo+ICsJd3JpdGVsKDB4MDIyMjIyMjIsIGZk LT5mZF9iYXNlICsgRkxEX1BMX0lOX0JBU0VfQUREUl8yXzhfMTVfTVNCKTsNCj4gKw0KPiArCXdy aXRlbCgweDIyMjIyMjIyLCBmZC0+ZmRfYmFzZSArIEZMRF9QTF9JTl9CQVNFX0FERFJfM18wXzdf TVNCKTsNCj4gKwl3cml0ZWwoMHgwMjIyMjIyMiwgZmQtPmZkX2Jhc2UgKyBGTERfUExfSU5fQkFT RV9BRERSXzNfOF8xNV9NU0IpOw0KPiArDQo+ICsJd3JpdGVsKDB4MjIyMjIyMjIsIGZkLT5mZF9i YXNlICsgRkxEX1NIX0lOX0JBU0VfQUREUl8wXzdfTVNCKTsNCj4gKwl3cml0ZWwoMHgwMjIyMjIy MiwgZmQtPmZkX2Jhc2UgKyBGTERfU0hfSU5fQkFTRV9BRERSXzhfMTVfTVNCKTsNCj4gKw0KPiAr CXdyaXRlbCgweDAyMDAwMDAwLCBmZC0+ZmRfYmFzZSArIEZMRF9CU19JTl9CQVNFX0FERFJfOF8x NV9NU0IpOw0KPiArDQo+ICsJd3JpdGVsKDB4MjIyMjIyMjIsIGZkLT5mZF9iYXNlICsgRkxEX0JB U0VfQUREUl9GQUNFXzBfN19NU0IpOw0KPiArCXdyaXRlbCgweDAyMjIyMjIyLCBmZC0+ZmRfYmFz ZSArIEZMRF9CQVNFX0FERFJfRkFDRV84XzE0X01TQik7DQo+ICsJd3JpdGVsKDB4MDAwMDAwMDIs IGZkLT5mZF9iYXNlICsgRkxEX1RSX09VVF9CQVNFX0FERFJfMF9NU0IpOw0KPiArCXdyaXRlbCgw eDAwMDAwMDAyLCBmZC0+ZmRfYmFzZSArIEZMRF9QUF9PVVRfQkFTRV9BRERSXzBfTVNCKTsNCj4g Kw0KPiArCS8qIGZsZCBtb2RlICsgdHJpZ2dlciBzdGFydCAqLw0KPiArCXdyaXRlbCgweDExLCBm ZC0+ZmRfYmFzZSArIEFJRV9TVEFSVF9SRUcpOw0KPiArfQ0KPiArDQoNCltzbmlwXQ0KDQo+ICsN Cj4gKy8qIHJldHVybiBhaWVfY2ZnIHRvIHVzZXIgc3BhY2UgKi8NCj4gK3ZvaWQgYWllX2dldF9m ZF9yZXN1bHQoc3RydWN0IG10a19haWVfZGV2ICpmZCwgc3RydWN0IGFpZV9lbnFfaW5mbyAqYWll X2NmZykNCj4gK3sNCj4gKwl1MzIgZmRfcmVzdWx0X2h3LCBmZF9yZXN1bHRfMV9odywgZmRfdG90 YWxfbnVtOw0KPiArCXN0cnVjdCBhaWVfZW5xX2luZm8gKnRtcF9haWVfY2ZnOw0KPiArCXZvaWQg KmZkX3B5bV9yZXN1bHRbUFlNX05VTV07DQo+ICsJdTMyIGZkX3B5cmFtaWRfbnVtW1BZTV9OVU1d Ow0KPiArCXNpZ25lZCBzaG9ydCBsYW5kbWFyazsNCj4gKwl1bnNpZ25lZCBpbnQgKnB0bzEyOw0K PiArCXN0cnVjdCBmZF9yZXQgKnByc3Q7DQo+ICsJdW5zaWduZWQgaW50IGksIGo7DQo+ICsNCj4g KwlhaWVfY2ZnLT5zZWxfbW9kZSA9IGZkLT5iYXNlX3BhcmEtPnNlbF9tb2RlOw0KPiArCWFpZV9j ZmctPnJvdGF0ZV9kZWdyZWUgPSBmZC0+YmFzZV9wYXJhLT5yb3RhdGVfZGVncmVlOw0KPiArCWFp ZV9jZmctPnNyY19pbWdfYWRkciA9IGZkLT5iYXNlX3BhcmEtPnNyY19pbWdfYWRkcjsNCj4gKwlh aWVfY2ZnLT5zcmNfaW1nX2FkZHJfdXYgPSBmZC0+YmFzZV9wYXJhLT5zcmNfaW1nX2FkZHJfdXY7 DQo+ICsJYWllX2NmZy0+c3JjX2ltZ193aWR0aCA9IGZkLT5iYXNlX3BhcmEtPmltZ19yZWN0Lndp ZHRoOw0KPiArCWFpZV9jZmctPnNyY19pbWdfaGVpZ2h0ID0gZmQtPmJhc2VfcGFyYS0+aW1nX3Jl Y3QuaGVpZ2h0Ow0KPiArCWFpZV9jZmctPnNyY19pbWdfZm10ID0gZmQtPmJhc2VfcGFyYS0+c3Jj X2ltZ19mbXQ7DQoNClVzZXIgc3BhY2Uga25vdyBhbGwgdGhlc2UgaW5mb3JtYXRpb24sIHNvIGl0 J3Mgbm90IG5lY2Vzc2FyeSB0byBzZXQgdGhlc2UgaW5mb3JtYXRpb24gdG8gb3V0cHV0IGJ1ZmZl ci4NCkRyb3AgdGhlc2UuDQoNCj4gKw0KPiArCWFpZV9jZmctPmlycV9zdGF0dXMgPSByZWFkbChm ZC0+ZmRfYmFzZSArIEFJRV9JTlRfRU5fUkVHKTsNCg0KVXNlciBzcGFjZSBpcyBub3QgbmVjZXNz YXJ5IHRvIGtub3cgaXJxX3N0YXR1cy4NCkRyb3AgdGhpcy4NCg0KPiArDQo+ICsJZmRfcmVzdWx0 X2h3ID0gZmQtPnJlZ19jZmcuaHdfcmVzdWx0Ow0KPiArCWZkX3Jlc3VsdF8xX2h3ID0gZmQtPnJl Z19jZmcuaHdfcmVzdWx0MTsNCj4gKwlmZF90b3RhbF9udW0gPSBmZF9yZXN1bHRfaHcgJiAweEZG RjsNCj4gKwlmZF9weXJhbWlkX251bVswXSA9IChmZF9yZXN1bHRfaHcgJiAweEZGRjAwMDApID4+ IDE2Ow0KPiArCWZkX3B5cmFtaWRfbnVtWzFdID0gZmRfcmVzdWx0XzFfaHcgJiAweEZGRjsNCj4g KwlmZF9weXJhbWlkX251bVsyXSA9IChmZF9yZXN1bHRfMV9odyAmIDB4RkZGMDAwMCkgPj4gMTY7 DQo+ICsNCj4gKwlpZiAoZmRfdG90YWxfbnVtID09IDApDQo+ICsJCWdvdG8gbm90aGluZ19vdXQ7 DQo+ICsNCj4gKwl0bXBfYWllX2NmZyA9ICBhaWVfY2ZnOw0KDQpEcm9wIHRtcF9haWVfY2ZnIGFu ZCB1c2UgYWllX2NmZyBkaXJlY3RseS4NCg0KPiArDQo+ICsJdG1wX2FpZV9jZmctPmZkX291dC5m ZF90b3RhbF9udW0gPSBmZF90b3RhbF9udW07DQo+ICsJdG1wX2FpZV9jZmctPmZkX291dC5mZF9w eXJhbWlkMF9udW0gPSBmZF9weXJhbWlkX251bVswXTsNCj4gKwl0bXBfYWllX2NmZy0+ZmRfb3V0 LmZkX3B5cmFtaWQxX251bSA9IGZkX3B5cmFtaWRfbnVtWzFdOw0KPiArCXRtcF9haWVfY2ZnLT5m ZF9vdXQuZmRfcHlyYW1pZDJfbnVtID0gZmRfcHlyYW1pZF9udW1bMl07DQo+ICsNCj4gKwlzd2l0 Y2ggKHRtcF9haWVfY2ZnLT5udW1iZXJfb2ZfcHlyYW1pZCkgew0KPiArCWNhc2UgMToNCj4gKwkJ ZmRfcHltX3Jlc3VsdFsyXSA9IGZkLT5kbWFfcGFyYS0+ZmRfb3V0X2h3X3ZhW1JQTlhfTE9PUF9O VU0oMCldWzBdOw0KDQpXaHkgdXNlIGluZGV4IDI/DQpVc2UgaW5kZXggMCBpcyBtb3JlIHRyaXZp YWwuDQpBZGQgY29tbWVudCB0byBkZXNjcmliZSB3aHkgdXNlIHN1Y2ggd2VpcmQgaW5kZXguDQoN Cj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAyOg0KPiArCQlmZF9weW1fcmVzdWx0WzFdID0gZmQtPmRt YV9wYXJhLT5mZF9vdXRfaHdfdmFbUlBOWF9MT09QX05VTSgwKV1bMF07DQo+ICsJCWZkX3B5bV9y ZXN1bHRbMl0gPSBmZC0+ZG1hX3BhcmEtPmZkX291dF9od192YVtSUE5YX0xPT1BfTlVNKDEpXVsw XTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAzOg0KPiArCQlmZF9weW1fcmVzdWx0WzBdID0gZmQt PmRtYV9wYXJhLT5mZF9vdXRfaHdfdmFbUlBOWF9MT09QX05VTSgwKV1bMF07DQo+ICsJCWZkX3B5 bV9yZXN1bHRbMV0gPSBmZC0+ZG1hX3BhcmEtPmZkX291dF9od192YVtSUE5YX0xPT1BfTlVNKDEp XVswXTsNCj4gKwkJZmRfcHltX3Jlc3VsdFsyXSA9IGZkLT5kbWFfcGFyYS0+ZmRfb3V0X2h3X3Zh W1JQTlhfTE9PUF9OVU0oMildWzBdOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlk ZXZfZXJyKGZkLT5kZXYsICJXcm9uZyBudW1iZXJfb2ZfcHlyYW1pZFxuIik7DQo+ICsJCWdvdG8g bm90aGluZ19vdXQ7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgew0K PiArCQlmb3IgKGogPSAwOyBqIDwgZmRfcHlyYW1pZF9udW1baV07IGorKykgew0KPiArCQkJaWYg KGkgPT0gMCkNCj4gKwkJCQlwcnN0ID0gJnRtcF9haWVfY2ZnLT5mZF9vdXQucHlyYW1pZDBfcmVz dWx0Ow0KPiArCQkJZWxzZSBpZiAoaSA9PSAxKQ0KPiArCQkJCXByc3QgPSAmdG1wX2FpZV9jZmct PmZkX291dC5weXJhbWlkMV9yZXN1bHQ7DQo+ICsJCQllbHNlIGlmIChpID09IDIpDQo+ICsJCQkJ cHJzdCA9ICZ0bXBfYWllX2NmZy0+ZmRfb3V0LnB5cmFtaWQyX3Jlc3VsdDsNCg0KSWYgeW91IGRl ZmluZSBweXJhbWlkMF9yZXN1bHQgdG8gcHlyYW1pZF9yZXN1bHRbMF0sIHRoZW4geW91IGNvdWxk IHNpbXBsaWZ5IHRoaXMgYXMNCg0KcHJzdCA9ICZ0bXBfYWllX2NmZy0+ZmRfb3V0LnB5cmFtaWRf cmVzdWx0W2ldOw0KDQpJbiBhZGRpdGlvbiwgdGhpcyBzdGF0ZW1lbnQgaXMganVzdCByZWxhdGVk IHRvIHZhcmlhYmxlIGksIG5vdCByZWxhdGVkIHRvIHZhcmlhYmxlIGosDQpzbyBtb3ZlIHRoaXMg c3RhdGVtZW50IGJlZm9yZSB0aGUgZm9yLWxvb3AgZm9yIGouDQoNCj4gKw0KPiArCQkJcHRvMTIg PSAodW5zaWduZWQgaW50ICopZmRfcHltX3Jlc3VsdFtpXSArIDEyICogajsNCj4gKw0KPiArCQkJ cHJzdC0+YW5jaG9yX3gwW2pdID0gYWllX2dldF9sbzE2KCoocHRvMTIgKyAwKSk7DQo+ICsJCQlw cnN0LT5hbmNob3JfeTBbal0gPSBhaWVfZ2V0X2hpMTYoKihwdG8xMiArIDApKTsNCj4gKwkJCXBy c3QtPmFuY2hvcl94MVtqXSA9IGFpZV9nZXRfbG8xNigqKHB0bzEyICsgMSkpOw0KPiArCQkJcHJz dC0+YW5jaG9yX3kxW2pdID0gYWllX2dldF9oaTE2KCoocHRvMTIgKyAxKSk7DQo+ICsNCj4gKwkJ CWlmIChwcnN0LT5hbmNob3JfeDFbal0gPT0gMCB8fA0KPiArCQkJICAgIHByc3QtPmFuY2hvcl95 MVtqXSA9PSAwKSB7DQo+ICsJCQkJZGV2X2VycihmZC0+ZGV2LA0KPiArCQkJCQkid3JvbmcgY29v cmRpbmF0ZTogaT0lZCBqPSVkIE06JWQgJWQgJWQgJWRcbiIsIGksIGosDQo+ICsJCQkJCXByc3Qt PmFuY2hvcl94MFtqXSwNCj4gKwkJCQkJcHJzdC0+YW5jaG9yX3gxW2pdLA0KPiArCQkJCQlwcnN0 LT5hbmNob3JfeTBbal0sDQo+ICsJCQkJCXByc3QtPmFuY2hvcl95MVtqXQ0KPiArCQkJCSk7DQo+ ICsJCQkJZ290byBub3RoaW5nX291dDsNCj4gKwkJCX0NCj4gKw0KPiArCQkJLyogUk9QIHJlc3Vs dCBhdCAxc3QgcnVuICovDQo+ICsJCQlsYW5kbWFyayA9ICgqKHB0bzEyICsgMikgJiAweDNGRik7 DQo+ICsJCQlwcnN0LT5yb3BfbGFuZG1hcmtfc2NvcmUwW2pdID0gYWllX3JlZmluZV9zMTZfdmFs dWUobGFuZG1hcmspOw0KPiArCQkJbGFuZG1hcmsgPSAoKCoocHRvMTIgKyAyKSAmIDB4RkZDMDAp ID4+IDEwKTsNCj4gKwkJCXByc3QtPnJvcF9sYW5kbWFya19zY29yZTFbal0gPSBhaWVfcmVmaW5l X3MxNl92YWx1ZShsYW5kbWFyayk7DQo+ICsJCQlsYW5kbWFyayA9ICgoKihwdG8xMiArIDIpICYg MHgzRkYwMDAwMCkgPj4gMjApOw0KPiArCQkJcHJzdC0+cm9wX2xhbmRtYXJrX3Njb3JlMltqXSA9 IGFpZV9yZWZpbmVfczE2X3ZhbHVlKGxhbmRtYXJrKTsNCj4gKw0KPiArCQkJcHJzdC0+YW5jaG9y X3Njb3JlW2pdID0gYWllX3JlZmluZV9zMTZfdmFsdWUoKihwdG8xMiArIDkpICYgMHgzRkYpOw0K PiArDQo+ICsJCQkvKiBSSVAgcmVzdWx0IGF0IDFzdCBydW4gKi8NCj4gKwkJCWxhbmRtYXJrID0g KCgqKHB0bzEyICsgOSkgJiAweEZGQzAwKSA+PiAxMCk7DQo+ICsJCQlwcnN0LT5yaXBfbGFuZG1h cmtfc2NvcmUwW2pdID0gYWllX3JlZmluZV9zMTZfdmFsdWUobGFuZG1hcmspOw0KPiArCQkJbGFu ZG1hcmsgPSAoKCoocHRvMTIgKyA5KSAmIDB4M0ZGMDAwMDApID4+IDIwKTsNCj4gKwkJCXByc3Qt PnJpcF9sYW5kbWFya19zY29yZTFbal0gPSBhaWVfcmVmaW5lX3MxNl92YWx1ZShsYW5kbWFyayk7 DQo+ICsJCQlsYW5kbWFyayA9ICgoKihwdG8xMiArIDkpICYgMHhDMDAwMDAwMCkgPj4gMzApIHwN Cj4gKwkJCQkgICAoKCoocHRvMTIgKyAxMCkgJiAweEZGKSA8PCAyKTsNCj4gKwkJCXByc3QtPnJp cF9sYW5kbWFya19zY29yZTJbal0gPSBhaWVfcmVmaW5lX3MxNl92YWx1ZShsYW5kbWFyayk7DQo+ ICsJCQlsYW5kbWFyayA9ICgoKihwdG8xMiArIDEwKSAmIDB4M0ZGMDApID4+IDgpOw0KPiArCQkJ cHJzdC0+cmlwX2xhbmRtYXJrX3Njb3JlM1tqXSA9IGFpZV9yZWZpbmVfczE2X3ZhbHVlKGxhbmRt YXJrKTsNCj4gKwkJCWxhbmRtYXJrID0gKCgqKHB0bzEyICsgMTApICYgMHhGRkMwMDAwKSA+PiAx OCk7DQo+ICsJCQlwcnN0LT5yaXBfbGFuZG1hcmtfc2NvcmU0W2pdID0gYWllX3JlZmluZV9zMTZf dmFsdWUobGFuZG1hcmspOw0KPiArCQkJbGFuZG1hcmsgPSAoKCoocHRvMTIgKyAxMCkgJiAweEYw MDAwMDAwKSA+PiAyOCkgfA0KPiArCQkJCSAgICgoKihwdG8xMiArIDExKSAmIDB4M0YpIDw8IDQp Ow0KPiArCQkJcHJzdC0+cmlwX2xhbmRtYXJrX3Njb3JlNVtqXSA9IGFpZV9yZWZpbmVfczE2X3Zh bHVlKGxhbmRtYXJrKTsNCj4gKwkJCWxhbmRtYXJrID0gKCgqKHB0bzEyICsgMTEpICYgMHhGRkMw KSA+PiA2KTsNCj4gKwkJCXByc3QtPnJpcF9sYW5kbWFya19zY29yZTZbal0gPSBhaWVfcmVmaW5l X3MxNl92YWx1ZShsYW5kbWFyayk7DQo+ICsJCQlwcnN0LT5mYWNlX3Jlc3VsdF9pbmRleFtqXSA9 ICgoKihwdG8xMiArIDExKSAmIDB4RkZGMDAwMCkgPj4gMTYpOw0KPiArCQkJcHJzdC0+YW5jaG9y X2luZGV4W2pdID0gKCgqKHB0bzEyICsgMTEpICYgMHg3MDAwMDAwMCkgPj4gMjgpOw0KPiArDQo+ ICsJCQlwcnN0LT5mZF9wYXJ0aWFsX3Jlc3VsdCA9IGZkX3B5cmFtaWRfbnVtW2ldOw0KPiArCQl9 DQo+ICsJfQ0KPiArCXJldHVybjsNCj4gK25vdGhpbmdfb3V0Og0KPiArCS8vIEVuc3VyZSB0aGF0 IHVzZXIgbW9kZSBkb2VzIG5vdCByZWNlaXZlIGFuIGluYXBwcm9wcmlhdGUgcmVzdWx0IHN0cnVj dHVyZQ0KDQpVc2UgYyBzdHlsZSBpbnN0ZWFkIG9mIGMrKyBzdHlsZSBjb21tZW50Lg0KUnVuIGNo ZWNrcGF0Y2ggYmVmb3JlIHlvdSBzZW5kIG91dCBwYXRjaGVzLg0KDQo+ICsJbWVtc2V0KCZhaWVf Y2ZnLT5mZF9vdXQsIDAsIHNpemVvZihzdHJ1Y3QgZmRfcmVzdWx0KSk7DQo+ICt9DQo+ICsNCj4g K3ZvaWQgYWllX2dldF9hdHRyX3Jlc3VsdChzdHJ1Y3QgbXRrX2FpZV9kZXYgKmZkLCBzdHJ1Y3Qg YWllX2VucV9pbmZvICphaWVfY2ZnKQ0KPiArew0KPiArCXUzMiAqYXR0cl9ldGhuaWNpdHlfcmVz dWx0LCAqYXR0cl9nZW5kZXJfcmVzdWx0Ow0KPiArCXUzMiAqYXR0cl9hZ2VfcmVzdWx0LCAqYXR0 cl9pc19pbmRpYW5fcmVzdWx0Ow0KPiArDQo+ICsJYWllX2NmZy0+c2VsX21vZGUgPSBmZC0+YXR0 cl9wYXJhLT5zZWxfbW9kZVtmZC0+YXR0cl9wYXJhLT5yX2lkeF07DQo+ICsJYWllX2NmZy0+cm90 YXRlX2RlZ3JlZSA9IGZkLT5hdHRyX3BhcmEtPnJvdGF0ZV9kZWdyZWVbZmQtPmF0dHJfcGFyYS0+ cl9pZHhdOw0KPiArCWFpZV9jZmctPnNyY19pbWdfYWRkciA9DQo+ICsJCWZkLT5hdHRyX3BhcmEt PnNyY19pbWdfYWRkcltmZC0+YXR0cl9wYXJhLT5yX2lkeF07DQo+ICsJYWllX2NmZy0+c3JjX2lt Z19hZGRyX3V2ID0NCj4gKwkJZmQtPmF0dHJfcGFyYS0+c3JjX2ltZ19hZGRyX3V2W2ZkLT5hdHRy X3BhcmEtPnJfaWR4XTsNCj4gKwlhaWVfY2ZnLT5zcmNfaW1nX3dpZHRoID0gZmQtPmF0dHJfcGFy YS0+aW1nX3dpZHRoW2ZkLT5hdHRyX3BhcmEtPnJfaWR4XTsNCj4gKwlhaWVfY2ZnLT5zcmNfaW1n X2hlaWdodCA9DQo+ICsJCWZkLT5hdHRyX3BhcmEtPmltZ19oZWlnaHRbZmQtPmF0dHJfcGFyYS0+ cl9pZHhdOw0KPiArCWFpZV9jZmctPnNyY19pbWdfZm10ID0gZmQtPmF0dHJfcGFyYS0+c3JjX2lt Z19mbXRbZmQtPmF0dHJfcGFyYS0+cl9pZHhdOw0KDQpVc2VyIHNwYWNlIGtub3cgYWxsIHRoZXNl IGluZm9ybWF0aW9uLCBzbyBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gc2V0IHRoZXNlIGluZm9ybWF0 aW9uIHRvIG91dHB1dCBidWZmZXIuDQpEcm9wIHRoZXNlLg0KDQo+ICsNCj4gKwlhaWVfY2ZnLT5p cnFfc3RhdHVzID0gcmVhZGwoZmQtPmZkX2Jhc2UgKyBBSUVfSU5UX0VOX1JFRyk7DQoNClVzZXIg c3BhY2UgaXMgbm90IG5lY2Vzc2FyeSB0byBrbm93IGlycV9zdGF0dXMuDQpEcm9wIHRoaXMuDQoN Cj4gKw0KPiArCS8qIDY0IGZlYXR1cmUgKiAzMiBieXRlcyAqLw0KPiArCWF0dHJfYWdlX3Jlc3Vs dCA9DQo+ICsJCSh1MzIgKilmZC0+ZG1hX3BhcmEtPmFnZV9vdXRfaHdfdmFbZmQtPmF0dHJfcGFy YS0+cl9pZHhdOw0KPiArCWF0dHJfZ2VuZGVyX3Jlc3VsdCA9DQo+ICsJCSh1MzIgKilmZC0+ZG1h X3BhcmEtPmdlbmRlcl9vdXRfaHdfdmFbZmQtPmF0dHJfcGFyYS0+cl9pZHhdOw0KPiArCWF0dHJf aXNfaW5kaWFuX3Jlc3VsdCA9DQo+ICsJCSh1MzIgKilmZC0+ZG1hX3BhcmEtPmlzX2luZGlhbl9v dXRfaHdfdmFbZmQtPmF0dHJfcGFyYS0+cl9pZHhdOw0KPiArCWF0dHJfZXRobmljaXR5X3Jlc3Vs dCA9DQo+ICsJCSh1MzIgKilmZC0+ZG1hX3BhcmEtPmV0aG5pY2l0eV9vdXRfaHdfdmFbZmQtPmF0 dHJfcGFyYS0+cl9pZHhdOw0KPiArDQo+ICsJYWllX2NmZy0+YXR0cl9vdXQubWVyZ2VkX2FnZV9y ZXRbMF0gPSBhaWVfZ2V0X2xvMTYoKmF0dHJfYWdlX3Jlc3VsdCk7DQo+ICsJYWllX2NmZy0+YXR0 cl9vdXQubWVyZ2VkX2FnZV9yZXRbMV0gPSBhaWVfZ2V0X2hpMTYoKmF0dHJfYWdlX3Jlc3VsdCk7 DQoNCkRlZmluZSBtZXJnZWRfYWdlX3JldCBhcyB1MzIsDQoNCnUzMiBtZXJnZWRfYWdlX3JldDsN Cg0KQW5kIHRoaXMgd291bGQgYmUNCg0KYWllX2NmZy0+YXR0cl9vdXQubWVyZ2VkX2FnZV9yZXQg PSAqYXR0cl9hZ2VfcmVzdWx0Ow0KDQo+ICsNCj4gKwlhaWVfY2ZnLT5hdHRyX291dC5tZXJnZWRf Z2VuZGVyX3JldFswXSA9IGFpZV9nZXRfbG8xNigqYXR0cl9nZW5kZXJfcmVzdWx0KTsNCj4gKwlh aWVfY2ZnLT5hdHRyX291dC5tZXJnZWRfZ2VuZGVyX3JldFsxXSA9IGFpZV9nZXRfaGkxNigqYXR0 cl9nZW5kZXJfcmVzdWx0KTsNCg0KdTMyIG1lcmdlZF9nZW5kZXJfcmV0Ow0KDQo+ICsNCj4gKwlh aWVfY2ZnLT5hdHRyX291dC5tZXJnZWRfaXNfaW5kaWFuX3JldFswXSA9IGFpZV9nZXRfbG8xNigq YXR0cl9pc19pbmRpYW5fcmVzdWx0KTsNCj4gKwlhaWVfY2ZnLT5hdHRyX291dC5tZXJnZWRfaXNf aW5kaWFuX3JldFsxXSA9IGFpZV9nZXRfaGkxNigqYXR0cl9pc19pbmRpYW5fcmVzdWx0KTsNCg0K dTMyIG1lcmdlZF9pc19pbmRpYW5fcmV0Ow0KDQo+ICsNCj4gKwlhaWVfY2ZnLT5hdHRyX291dC5t ZXJnZWRfZXRobmljaXR5X3JldFswXSA9IGFpZV9nZXRfbG8xNigqYXR0cl9ldGhuaWNpdHlfcmVz dWx0KTsNCj4gKwlhaWVfY2ZnLT5hdHRyX291dC5tZXJnZWRfZXRobmljaXR5X3JldFsxXSA9IGFp ZV9nZXRfaGkxNigqYXR0cl9ldGhuaWNpdHlfcmVzdWx0KTsNCj4gKwlhaWVfY2ZnLT5hdHRyX291 dC5tZXJnZWRfZXRobmljaXR5X3JldFsyXSA9IGFpZV9nZXRfbG8xNigqKGF0dHJfZXRobmljaXR5 X3Jlc3VsdCArIDEpKTsNCg0KdTY0IG1lcmdlZF9ldGhuaWNpdHlfcmV0Ow0KDQo+ICsNCj4gKwlm ZC0+YXR0cl9wYXJhLT5yX2lkeCA9IChmZC0+YXR0cl9wYXJhLT5yX2lkeCArIDEpICUgTUFYX0VO UVVFX0ZSQU1FX05VTTsNCj4gK30NCj4gKw0KPiArdm9pZCBhaWVfZ2V0X2ZsZF9yZXN1bHQoc3Ry dWN0IG10a19haWVfZGV2ICpmZCwgc3RydWN0IGFpZV9lbnFfaW5mbyAqYWllX2NmZykNCj4gK3sN Cj4gKwl1OCBmbGRfcmx0W0ZMRF9PVVRQVVRfWF9TSVpFXVtGTERfT1VUUFVUX1NJWkVdOw0KPiAr CXUxNiAqb3V0X3BhcnNpbmc7DQo+ICsJaW50IGksIGo7DQo+ICsNCj4gKwlhaWVfY2ZnLT5pcnFf c3RhdHVzID0gcmVhZGwoZmQtPmZkX2Jhc2UgKyBBSUVfSU5UX0VOX1JFRyk7DQo+ICsNCj4gKwlt ZW1jcHkoZmxkX3JsdCwgZmQtPmZsZF9wYXJhLT5mbGRfb3V0cHV0X3ZhWzBdLCBzaXplb2YoZmxk X3JsdCkpOw0KDQpmbGRfb3V0cHV0X3ZhW10gaXMgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uIGFuZCB5 b3UganVzdCB1c2UgZmxkX291dHB1dF92YVswXSwNCnNvIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB1 c2UgYW4gYXJyYXkgdG8gc3RvcmUgZmxkX291dHB1dF92YS4NCkluIGFpZV9hcnJhbmdlX2ZsZF9i dWYoKSwNCg0KZmQtPmZsZF9wYXJhLT5mbGRfb3V0cHV0X3ZhID0gZmQtPmZkX2ZsZF9vdXRfaHcu dmE7DQoNCkluIGJlbG93IGZvci1sb29wLA0KDQpvdXRfcGFyc2luZyA9IGZkLT5mbGRfcGFyYS0+ ZmxkX291dHB1dF92YSArIGogKiBGTERfT1VUUFVUX1NJWkU7DQoNCg0KPiArDQo+ICsJZm9yIChq ID0gMDsgaiA8IGFpZV9jZmctPmZsZF9mYWNlX251bTsgaisrKSB7DQo+ICsJCW91dF9wYXJzaW5n ID0gKHVuc2lnbmVkIHNob3J0ICopJmZsZF9ybHRbal1bMF07DQo+ICsJCWZvciAoaSA9IDA7IGkg PCBGTERfQ1VSX0xBTkRNQVJLOyBpKyspIHsNCj4gKwkJCWFpZV9jZmctPmZsZF9vdXRbal0uZmxk X2xhbmRtYXJrW2ldLnggPSAqb3V0X3BhcnNpbmc7DQo+ICsJCQlhaWVfY2ZnLT5mbGRfb3V0W2pd LmZsZF9sYW5kbWFya1tpXS55ID0gKihvdXRfcGFyc2luZyArIDEpOw0KDQphaWVfY2ZnLT5mbGRf b3V0W2pdLmZsZF9sYW5kbWFya1tpXS54ID0gb3V0X3BhcnNpbmdbMF07DQphaWVfY2ZnLT5mbGRf b3V0W2pdLmZsZF9sYW5kbWFya1tpXS55ID0gb3V0X3BhcnNpbmdbMV07DQoNCmxvb2tzIGJldHRl ci4NCg0KPiArDQo+ICsJCQlpZiAoaSAlIDIpDQo+ICsJCQkJb3V0X3BhcnNpbmcgPSBvdXRfcGFy c2luZyArIDY7DQo+ICsJCQllbHNlDQo+ICsJCQkJb3V0X3BhcnNpbmcgPSBvdXRfcGFyc2luZyAr IDI7DQo+ICsJCX0NCj4gKwkJb3V0X3BhcnNpbmcgPSAodW5zaWduZWQgc2hvcnQgKikmZmxkX3Js dFtqXVswXTsNCj4gKwkJaWYgKEZMRF9DVVJfTEFORE1BUksgJSAyKQ0KPiArCQkJb3V0X3BhcnNp bmcgPSBvdXRfcGFyc2luZyArICgoRkxEX0NVUl9MQU5ETUFSSyArIDEpIC8gMikgKiA4Ow0KPiAr CQllbHNlDQo+ICsJCQlvdXRfcGFyc2luZyA9IG91dF9wYXJzaW5nICsgKEZMRF9DVVJfTEFORE1B UksgLyAyKSAqIDg7DQoNCkV2ZW4gdGhvdWdoIEZMRF9DVVJfTEFORE1BUksgJSAyIGlzIDAsIHlv dSBjb3VsZCBzdGlsbCB1c2UgYmVsb3cgZm9ybXVsYSwNCg0Kb3V0X3BhcnNpbmcgPSBvdXRfcGFy c2luZyArICgoRkxEX0NVUl9MQU5ETUFSSyArIDEpIC8gMikgKiA4Ow0KDQpTbyB5b3UgY291bGQg ZHJvcCB0aGlzIGlmLWNoZWNraW5nIGFuZCB1c2UgdGhpcyBmb3JtdWxhIGZvciBhbGwgY2FzZS4N Cg0KPiArDQo+ICsJCWFpZV9jZmctPmZsZF9vdXRbal0uZmxkX291dF9yb3AgPSAqb3V0X3BhcnNp bmc7DQo+ICsJCWFpZV9jZmctPmZsZF9vdXRbal0uZmxkX291dF9yaXAgPSAqKG91dF9wYXJzaW5n ICsgMSk7DQo+ICsJCWFpZV9jZmctPmZsZF9vdXRbal0uY29uZmlkZW5jZSA9ICoob3V0X3BhcnNp bmcgKyAyKTsNCj4gKwkJYWllX2NmZy0+ZmxkX291dFtqXS5ibGlua3Njb3JlID0gKihvdXRfcGFy c2luZyArIDMpOw0KDQphaWVfY2ZnLT5mbGRfb3V0W2pdLmZsZF9vdXRfcm9wID0gb3V0X3BhcnNp bmdbMF07DQphaWVfY2ZnLT5mbGRfb3V0W2pdLmZsZF9vdXRfcmlwID0gb3V0X3BhcnNpbmdbMV07 DQphaWVfY2ZnLT5mbGRfb3V0W2pdLmNvbmZpZGVuY2UgPSBvdXRfcGFyc2luZ1syXTsNCmFpZV9j ZmctPmZsZF9vdXRbal0uYmxpbmtzY29yZSA9IG91dF9wYXJzaW5nWzNdOw0KDQpsb29rcyBiZXR0 ZXIuDQoNCj4gKwl9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L21lZGlhdGVrL2FpZS9tdGtfYWllX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVk aWF0ZWsvYWllL210a19haWVfdjRsMi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uMjg2NDZkNWE1M2FhDQo+IC0tLSAvZGV2L251bGwNCj4gDQoNCltzbmlw XQ0KDQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19haWVfZmlsbF9waXhmbXRfbXAoc3RydWN0IHY0 bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKmRmbXQsDQo+ICsJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJf cGl4X2Zvcm1hdF9tcGxhbmUgKnNmbXQpDQo+ICt7DQo+ICsJZGZtdC0+ZmllbGQgPSBWNEwyX0ZJ RUxEX05PTkU7DQo+ICsJZGZtdC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9CVDIwMjA7 DQo+ICsJZGZtdC0+bnVtX3BsYW5lcyA9IHNmbXQtPm51bV9wbGFuZXM7DQo+ICsJZGZtdC0+eWNi Y3JfZW5jID0gVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVDsNCj4gKwlkZm10LT5xdWFudGl6YXRpb24g PSBWNEwyX1FVQU5USVpBVElPTl9ERUZBVUxUOw0KPiArCWRmbXQtPnhmZXJfZnVuYyA9IFY0TDJf TUFQX1hGRVJfRlVOQ19ERUZBVUxUKGRmbXQtPmNvbG9yc3BhY2UpOw0KPiArCWRmbXQtPnBpeGVs Zm9ybWF0ID0gc2ZtdC0+cGl4ZWxmb3JtYXQ7DQo+ICsNCj4gKwkvKiBLZWVwIHVzZXIgc2V0dGlu ZyBhcyBwb3NzaWJsZSAqLw0KPiArCWRmbXQtPndpZHRoID0gY2xhbXAoZGZtdC0+d2lkdGgsIE1U S19GRF9PVVRQVVRfTUlOX1dJRFRILA0KPiArCQkJICAgIE1US19GRF9PVVRQVVRfTUFYX1dJRFRI KTsNCj4gKwlkZm10LT5oZWlnaHQgPSBjbGFtcChkZm10LT5oZWlnaHQsIE1US19GRF9PVVRQVVRf TUlOX0hFSUdIVCwNCj4gKwkJCSAgICAgTVRLX0ZEX09VVFBVVF9NQVhfSEVJR0hUKTsNCj4gKw0K PiArCWRmbXQtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSBBTElHTihkZm10LT53aWR0aCwg MTYpOw0KPiArCWRmbXQtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBBTElHTihkZm10LT53 aWR0aCwgMTYpOw0KPiArDQo+ICsJZGZtdC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGRmbXQt PmhlaWdodCAqIGRmbXQtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmU7DQo+ICsJZGZtdC0+cGxh bmVfZm10WzFdLnNpemVpbWFnZSA9IGRmbXQtPmhlaWdodCAqIGRmbXQtPnBsYW5lX2ZtdFsxXS5i eXRlc3BlcmxpbmU7DQo+ICsJaWYgKHNmbXQtPm51bV9wbGFuZXMgPT0gMiAmJiBzZm10LT5waXhl bGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYxMk0pIHsNCg0KaWYgKHNmbXQtPnBpeGVsZm9ybWF0 ID09IFY0TDJfUElYX0ZNVF9OVjEyTSkgew0KDQpWNEwyX1BJWF9GTVRfTlYxMk0gaW1wbHkgdGhh dCBudW1fcGxhbmVzIGlzIDIsIHNvIGNoZWNraW5nICdzZm10LT5udW1fcGxhbmVzID09IDInIGlz IHJlZHVuZGFudC4NCg0KPiArCQlkZm10LT5wbGFuZV9mbXRbMV0uc2l6ZWltYWdlIC89IDI7DQo+ ICsJfSBlbHNlIGlmIChzZm10LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYxMikgew0K PiArCQlkZm10LT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlICo9IDM7DQo+ICsJCWRmbXQtPnBsYW5l X2ZtdFswXS5zaXplaW1hZ2UgLz0gMjsNCj4gKwl9DQo+ICt9DQoNCltzbmlwXQ0KDQo+ICsNCj4g K3N0YXRpYyBfX3BvbGxfdCBtdGtfdmZkX2ZvcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xs X3RhYmxlICp3YWl0KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlzdHJ1Y3QgbXRrX2Fp ZV9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihmaWxlLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBtdGtf YWllX2N0eCwgZmgpOw0KPiArCXN0cnVjdCBtdGtfYWllX2RldiAqZmQgPSBjdHgtPmZkX2RldjsN Cj4gKw0KPiArCWlmIChmZC0+ZmRfc3RhdGUgJiBTVEFURV9JTklUKSB7DQo+ICsJCS8qIFdhaXRp bmcgSm9iIEZpbnNoICovDQo+ICsJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgm ZmQtPmZkX2pvYl9maW5pc2hlZCwgbXNlY3NfdG9famlmZmllcygxMDAwKSk7DQoNCkl0J3Mgbm90 IG5lY2Vzc2FyeSB0byB3YWl0IGhlcmUgYmVjYXVzZSB2NGwyX20ybV9mb3BfcG9sbCgpIHdvdWxk IGRvIHdhaXRpbmcuDQoNCj4gKwkJaWYgKCFyZXQpIHsNCj4gKwkJCWRldl9lcnIoY3R4LT5kZXYs ICJXYWl0IGpvYiBmaW5pc2ggdGltZW91dCBmcm9tIHBvbGxcbiIpOw0KPiArCQkJcmV0dXJuIEVQ T0xMRVJSOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHY0bDJfbTJtX2ZvcF9wb2xs KGZpbGUsIHdhaXQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmls ZV9vcGVyYXRpb25zIGZkX3ZpZGVvX2ZvcHMgPSB7DQo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUs DQo+ICsJLm9wZW4gPSBtdGtfdmZkX29wZW4sDQo+ICsJLnJlbGVhc2UgPSBtdGtfdmZkX3JlbGVh c2UsDQo+ICsJLnBvbGwgPSBtdGtfdmZkX2ZvcF9wb2xsLA0KPiArCS51bmxvY2tlZF9pb2N0bCA9 IHZpZGVvX2lvY3RsMiwNCj4gKwkubW1hcCA9IHY0bDJfbTJtX2ZvcF9tbWFwLA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIGludCBtdGtfYWllX2pvYl9yZWFkeSh2b2lkICpwcml2KQ0KPiArew0KPiAr CXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnNyY19idWYsICpkc3RfYnVmOw0KPiArCXN0cnVjdCBt dGtfYWllX2N0eCAqY3R4ID0gcHJpdjsNCj4gKwlzdHJ1Y3QgbXRrX2FpZV9kZXYgKmZkID0gY3R4 LT5mZF9kZXY7DQo+ICsJc3RydWN0IGZkX2J1ZmZlciBzcmNfaW1nWzJdID0ge307DQo+ICsJdm9p ZCAqcGxhbmVfdmFkZHI7DQo+ICsNCj4gKwlpZiAoIWN0eC0+ZmgubTJtX2N0eCkgew0KDQpXaGVu IGZpbGUgaXMgb3BlbiwgY3R4LT5maC5tMm1fY3R4IGlzIHZhbGlkLg0KQW5kIGRldmljZV9ydW4o KSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBmaWxlIGlzIG9wZW5lZC4NClNvIHRoaXMgY2hlY2tp bmcgaXMgcmVkdW5kYW50Lg0KDQo+ICsJCWRldl9lcnIoZmQtPmRldiwgIk1lbW9yeS10by1tZW1v cnkgY29udGV4dCBpcyBOVUxMXG4iKTsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiAr CWlmICghKGZkLT5mZF9zdGF0ZSAmIFNUQVRFX09QRU4pKSB7DQoNCkkgdGhpbmsgd2hlbiBmaWxl IGlzIGNsb2RlLCBWNEwyIHdvdWxkIG5vdCBjYWxsIGRldmljZV9ydW4oKSBjYWxsYmFjayBmdW5j dGlvbi4NClNvIHRoaXMgY2hlY2tpbmcgaXMgcmVkdW5kYW50Lg0KDQo+ICsJCWRldl9lcnIoZmQt PmRldiwgIkpvYiByZWFkeSB3aXRoIGRldmljZSBjbG9zZWRcbiIpOw0KPiArCQlyZXR1cm4gLTE7 DQo+ICsJfQ0KPiArDQo+ICsJbXV0ZXhfbG9jaygmZmQtPmZkX2xvY2spOw0KPiArDQo+ICsJc3Jj X2J1ZiA9IHY0bDJfbTJtX25leHRfc3JjX2J1ZihjdHgtPmZoLm0ybV9jdHgpOw0KPiArCWRzdF9i dWYgPSB2NGwyX20ybV9uZXh0X2RzdF9idWYoY3R4LT5maC5tMm1fY3R4KTsNCj4gKw0KPiArCWlm ICghc3JjX2J1ZiB8fCAhZHN0X2J1Zikgew0KPiArCQlkZXZfZXJyKGZkLT5kZXYsICJzcmMgb3Ig ZHN0IGJ1ZiBpcyBOVUxMXG4iKTsNCj4gKwkJbXV0ZXhfdW5sb2NrKCZmZC0+ZmRfbG9jayk7DQo+ ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIShmZC0+ZmRfc3RhdGUgJiBTVEFU RV9JTklUKSkgew0KPiArCQlkZXZfZXJyKGZkLT5kZXYsICIlcyBXcm9uZyBmZCBzdGF0ZTogJWRc biIsIF9fZnVuY19fLCBmZC0+ZmRfc3RhdGUpOw0KPiArCQltdXRleF91bmxvY2soJmZkLT5mZF9s b2NrKTsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCXBsYW5lX3ZhZGRyID0gdmIy X3BsYW5lX3ZhZGRyKCZkc3RfYnVmLT52YjJfYnVmLCAwKTsNCj4gKwlpZiAoIXBsYW5lX3ZhZGRy KSB7DQo+ICsJCWRldl9lcnIoZmQtPmRldiwgIkZhaWxlZCB0byBnZXQgcGxhbmUgdmlydHVhbCBh ZGRyZXNzXG4iKTsNCj4gKwkJbXV0ZXhfdW5sb2NrKCZmZC0+ZmRfbG9jayk7DQo+ICsJCXJldHVy biAtMTsNCj4gKwl9DQo+ICsNCj4gKwl2NGwyX2N0cmxfcmVxdWVzdF9zZXR1cChzcmNfYnVmLT52 YjJfYnVmLnJlcV9vYmoucmVxLCAmY3R4LT5oZGwpOw0KPiArDQo+ICsJZmQtPmFpZV9jZmcgPSAo c3RydWN0IGFpZV9lbnFfaW5mbyAqKXBsYW5lX3ZhZGRyOw0KPiArCWZkLT5haWVfY2ZnLT5mbGRf ZmFjZV9udW0gPSBjdHgtPnVzZXJfcGFyYW0uZmxkX2ZhY2VfbnVtOw0KDQpZb3UgY2xlYXIgZmQt PmFpZV9jZmcgYmVsb3csIHNvIGhlcmUgYXNzaWduIGZkLT5haWVfY2ZnLT5mbGRfZmFjZV9udW0g aXMgcmVkdW5kYW50Lg0KRHJvcCBpdC4NCg0KPiArDQo+ICsJbWVtc2V0KGZkLT5haWVfY2ZnLCAw LCBzaXplb2Yoc3RydWN0IGFpZV9lbnFfaW5mbykpOw0KPiArCW1lbWNweShmZC0+YWllX2NmZywg JmN0eC0+dXNlcl9wYXJhbSwgc2l6ZW9mKHN0cnVjdCBhaWVfZW5xX2luZm8pKTsNCg0KSXQncyBu b3QgbmVjZXNzYXJ5IHRvIGNvcHkgdXNlciBzcGFjZSBzZXR0aW5nIHRvIG91dHB1dCBidWZmZXIu DQpVc2VyIHNwYWNlIGtub3cgYWxsIHRoZXNlIHNldHRpbmcuDQoNCj4gKwltZW1jcHkoZmQtPmFp ZV9jZmctPmZsZF9pbnB1dCwgY3R4LT51c2VyX3BhcmFtLmZsZF9pbnB1dCwNCj4gKwkgICAgICAg RkxEX01BWF9GUkFNRSAqIHNpemVvZihzdHJ1Y3QgdjRsMl9mbGRfY3JvcF9yaXBfcm9wKSk7DQo+ ICsNCj4gKwlzcmNfaW1nWzBdLmRtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2Fk ZHIoJnNyY19idWYtPnZiMl9idWYsIDApOw0KPiArDQo+ICsJaWYgKGN0eC0+c3JjX2ZtdC5udW1f cGxhbmVzID09IDIpIHsNCj4gKwkJc3JjX2ltZ1sxXS5kbWFfYWRkciA9DQo+ICsJCQl2YjJfZG1h X2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmc3JjX2J1Zi0+dmIyX2J1ZiwgMSk7DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKChmZC0+YWllX2NmZy0+c2VsX21vZGUgPT0gRkRNT0RFIHx8IGZkLT5haWVfY2Zn LT5zZWxfbW9kZSA9PSBBVFRSSUJVVEVNT0RFKSAmJg0KPiArCSAgICBmZC0+YWllX2NmZy0+c3Jj X2ltZ19mbXQgPT0gRk1UX1lVVjQyMF8xUCkgew0KPiArCQlzcmNfaW1nWzFdLmRtYV9hZGRyID0g c3JjX2ltZ1swXS5kbWFfYWRkciArIGN0eC0+dXNlcl9wYXJhbS5zcmNfaW1nX3N0cmlkZSAqDQo+ ICsJCQljdHgtPnVzZXJfcGFyYW0uc3JjX2ltZ19oZWlnaHQ7DQo+ICsJfQ0KPiArDQo+ICsJZmQt PmFpZV9jZmctPnNyY19pbWdfYWRkciA9IHNyY19pbWdbMF0uZG1hX2FkZHI7DQo+ICsJZmQtPmFp ZV9jZmctPnNyY19pbWdfYWRkcl91diA9IHNyY19pbWdbMV0uZG1hX2FkZHI7DQoNCmZkLT5haWVf Y2ZnIGlzIG91dHB1dCBidWZmZXIsIHNvIGRvIG5vdCB3cml0ZSBzcmNfaW1nX2FkZHIgYW5kIHNy Y19pbWdfYWRkcl91diB0byBvdXRwdXQgYnVmZmVyLg0KWW91IHNob3VsZCBkZWZpbmUgc3JjX2lt Z19hZGRyIGFuZCBzcmNfaW1nX2FkZHJfdXYgdG8gc29tZXdoZXJlIG5vdCBvdXRwdXQgYnVmZmVy Lg0KDQo+ICsNCj4gKwlhaWVfcHJlcGFyZShmZCwgZmQtPmFpZV9jZmcpOw0KPiArDQo+ICsJbXV0 ZXhfdW5sb2NrKCZmZC0+ZmRfbG9jayk7DQo+ICsNCj4gKwlpZiAoc3JjX2J1Zikgew0KPiArCQkv KiBDb21wbGV0ZSByZXF1ZXN0IGNvbnRyb2xzIGlmIGFueSAqLw0KPiArCQl2NGwyX2N0cmxfcmVx dWVzdF9jb21wbGV0ZShzcmNfYnVmLT52YjJfYnVmLnJlcV9vYmoucmVxLCAmY3R4LT5oZGwpOw0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KDQpbc25pcF0NCg0KPiArDQo+ICtzdGF0 aWMgdm9pZCBtdGtfYWllX2ZyYW1lX2RvbmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2FpZV9yZXFfd29yayAqcmVxX3dvcmsgPSAoc3RydWN0 IG10a19haWVfcmVxX3dvcmsgKil3b3JrOw0KPiArCXN0cnVjdCBtdGtfYWllX2RldiAqZmQgPSAo c3RydWN0IG10a19haWVfZGV2ICopcmVxX3dvcmstPmZkX2RldjsNCj4gKw0KPiArCWlmIChmZC0+ cmVnX2NmZy5mZF9tb2RlID09IEZETU9ERSkgew0KPiArCQlmZC0+cmVnX2NmZy5od19yZXN1bHQg PSByZWFkbChmZC0+ZmRfYmFzZSArIEFJRV9SRVNVTFRfMF9SRUcpOw0KPiArCQlmZC0+cmVnX2Nm Zy5od19yZXN1bHQxID0gcmVhZGwoZmQtPmZkX2Jhc2UgKyBBSUVfUkVTVUxUXzFfUkVHKTsNCg0K aHdfcmVzdWx0IGFuZCBod19yZXN1bHQxIGlzIHVzZWQgb25seSBpbiBhaWVfZ2V0X2ZkX3Jlc3Vs dCgpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGluIG5leHQgc3RhdGVtZW50Lg0KU28geW91IGNvdWxk IHJlYWQgQUlFX1JFU1VMVF8wX1JFRyBhbmQgQUlFX1JFU1VMVF8xX1JFRyBpbiBhaWVfZ2V0X2Zk X3Jlc3VsdCgpIGFuZCBkcm9wIGh3X3Jlc3VsdCBhbmQgaHdfcmVzdWx0MS4NCg0KUmVnYXJkcywN CkNLDQoNCj4gKwl9DQo+ICsNCj4gKwltdXRleF9sb2NrKCZmZC0+ZmRfbG9jayk7DQo+ICsNCj4g Kwlzd2l0Y2ggKGZkLT5haWVfY2ZnLT5zZWxfbW9kZSkgew0KPiArCWNhc2UgRkRNT0RFOg0KPiAr CQlhaWVfZ2V0X2ZkX3Jlc3VsdChmZCwgZmQtPmFpZV9jZmcpOw0KPiArCQlicmVhazsNCj4gKwlj YXNlIEFUVFJJQlVURU1PREU6DQo+ICsJCWFpZV9nZXRfYXR0cl9yZXN1bHQoZmQsIGZkLT5haWVf Y2ZnKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBGTERNT0RFOg0KPiArCQlhaWVfZ2V0X2ZsZF9y ZXN1bHQoZmQsIGZkLT5haWVfY2ZnKTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJ ZGV2X2RiZyhmZC0+ZGV2LCAiV3Jvbmcgc2VsX21vZGVcbiIpOw0KPiArCQlicmVhazsNCj4gKwl9 DQo+ICsNCj4gKwltdXRleF91bmxvY2soJmZkLT5mZF9sb2NrKTsNCj4gKw0KPiArCWlmICghY2Fu Y2VsX2RlbGF5ZWRfd29yaygmZmQtPmpvYl90aW1lb3V0X3dvcmspKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwlhdG9taWNfZGVjKCZmZC0+bnVtX2NvbXBvc2luZyk7DQo+ICsJbXRrX2FpZV9od19q b2JfZmluaXNoKGZkLCBWQjJfQlVGX1NUQVRFX0RPTkUpOw0KPiArCXdha2VfdXAoJmZkLT5mbHVz aGluZ193YWl0cSk7DQo+ICt9DQoNCg0K