From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDCA0606A32F for ; Fri, 23 Oct 2026 11:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=pQBGzqXM; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=amlogic.com header.i=@amlogic.com header.a=rsa-sha256 header.s=selector1 header.b=kIn87YFQ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=K03lAm1kJwGzRaGqrCFSohWrtL9l3paPDqtAOPIHeuY=; b=pQBGzqXMwD73KX+HJQlGY27XYG BhXjPO+lCRiVOnEfsFy9VABKxVM8WLmOKNzWoSXvGtqJQZnXwrPjxNKkMTw5/n7ux0dlHGL3sC/ZV cCqhA+fERyorqswUSb9fk+4umFPjhvdsK+/z5RlemfcyBtt8FHrJXK3iK4bkFltH7918UVbOl4moG Fbqjenlq0aw+jf3vVWsLsTEgVgfjMPt+qos/GECRhGZeS8iuA2EHnBojkFKAfrjIgxZ/CbRGJWVVL zn86eE0Ta9x1vQ2qa4Z7GMCiyHKAjpxE39YQBvfQ/4kGw3UeNCZoaZGpZenD+v/KPl7MG9VE3NcTC HTEySlQw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKDPb-0000000GESP-4BrA; Fri, 23 Oct 2026 11:26:16 +0000 Received: from mail-japaneastazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c405::5] helo=TYPPR03CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKDPX-0000000GERy-3NcZ for linux-amlogic@lists.infradead.org; Fri, 23 Oct 2026 11:26:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FEqZxWA9V30lASiDzN+hoc12a73vZ4l18o1WqBADQiNUgkTh/zguR0lvBl+AstfJ7re9uM8hhrZQrfePIcAz7cj1JpZ8Lrz5zhlMdYLlfrWVMUnfOsGKsX7DsznclLUxxxoBTRlYpRyASPMrPk5KrCAGPBbR73KONUWQSwRohveXT/QB7MKh8jcjH9tZ8O4SYy5vKfb7T78YFgnbIDKwj5EVzNElqm+F0ajTGhafI/16w7DhtzsK8BG9JV5EjaarAXfruB4L+3nWI8f6xECjUBVz/bv6Ddm39R8tOoeRisH1G2dSpTMMGecry8KbybCGM850y/aiiv216FRPejksVQ== 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=oueL0GvkZ3QXGDIGcVz18tH+U+n21gRuXBnoCrNstUg=; b=O1Wh6An3pf0ahxMfXQttvtxwFyiDtBf1nBro0kArvzjRhfANos3u1lGUtdZ+GzZHI3Q5ms7Ia+WsqI2sHDYdtaf01KvRLC7YGqtan8WGHeu6/t4QBtRMudJ1f7vg5/X5tFrZX8jtEPzC1wzPb3/JiXXO/IQMktxzaGtH5zdqYbQmn48lce/mB9Zuv5CbtkKl4p1O2JRg3snBjedA/nrqI4lUuUcopfPu77zoHnQOi9gvGD80ON2D0HqP8o6DJWVOo/D/4dGdUJKwT7UiVyAf74A3QdCZ1/dcOzviPv6TX53mrzrpKFpEGxRh0CodQCdPB7bg7jy005MWknVKGErKSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amlogic.com; dmarc=pass action=none header.from=amlogic.com; dkim=pass header.d=amlogic.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amlogic.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oueL0GvkZ3QXGDIGcVz18tH+U+n21gRuXBnoCrNstUg=; b=kIn87YFQ4nnke9F9sROtyTXTlbozuP0FSPKOLJhXnBltLfVCNn7Pe1cvLv+HMAITTFTaSeiF85T5VPPX6AZs3PUsrRbdEyRY7VsbAU2xQjJa8dK5IiSqbHBZ2pLyhHwdOZMp1O11qu5jF4AEBVK59YJRIMHxx7sAsql59srSgEYxXBkzu+XKrWkAsUCNRpJYlhlg7250xJ9blKkIDEIVA/adu+uhJcfXFbvpDQvWC6TeYpn8wASjqa8UAfWSPwTMjooB89wJ7kQ+1N2V1aMVkrzj+va7z8aYcNdZfkf/5DEFbFHmKael8IgmzsC0yUXn+W034buwqwLzZ6fNkNABGg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amlogic.com; Received: from KL1PR03MB5521.apcprd03.prod.outlook.com (2603:1096:820:51::12) by SEYPR03MB8127.apcprd03.prod.outlook.com (2603:1096:101:165::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Fri, 23 Oct 2026 11:25:56 +0000 Received: from KL1PR03MB5521.apcprd03.prod.outlook.com ([fe80::f12b:85e:f95c:191e]) by KL1PR03MB5521.apcprd03.prod.outlook.com ([fe80::f12b:85e:f95c:191e%3]) with mapi id 15.21.0546.017; Fri, 23 Oct 2026 11:25:55 +0000 Message-ID: <45fb19ed-3b50-4f78-a559-0eecaa6bc257@amlogic.com> Date: Fri, 23 Oct 2026 19:25:53 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v12 5/6] arm64: dts: amlogic: Add video decoder driver support for S4 SOCs To: sashiko-reviews@lists.linux.dev Cc: linux-amlogic@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org, media-ci@linuxtv.org References: <20261022-b4-s4-vdec-upstream-v12-0-616240978792@amlogic.com> <20261022-b4-s4-vdec-upstream-v12-5-616240978792@amlogic.com> From: Zhentao Guo In-Reply-To: X-ClientProxiedBy: SI2PR02CA0040.apcprd02.prod.outlook.com (2603:1096:4:196::6) To KL1PR03MB5521.apcprd03.prod.outlook.com (2603:1096:820:51::12) X-Archived-By: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: KL1PR03MB5521:EE_|SEYPR03MB8127:EE_ X-MS-Office365-Filtering-Correlation-Id: 0266ba65-1e2e-4c99-cdfb-08df30f86724 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|261021130227099003|56012099006|261022113327099003|261022115727099003|4143699003|5023799004|261021135927099003|11063799006|261009223027099003|261021121427099003|10067099003|22082099003|261021123027099003|18002099003|6133799003|3023799007|261021133027099003|261022105027099003|261022075727099003; X-Microsoft-Antispam-Message-Info: HEXUdxjJC5hIdvRwEthyNZdI3v9rFh6LqcD4GrxHKJut+VOCSMFXHqFOYeZEDC18b+yy6MKG9US9vvbmGnbp77AaztKT6bWrMN8p3aUDNGUDBThTUVkE9vNcOQCyMDMMgUS5KCFSW5cLrtaHtzWOXvNg2koA5dNgCxvWTopzo9ic8shpXU0DHWTaABFKaXDwUax43uxYt3y2xmFlOmeZyCgJJtypaOCEC8x3QOFMDDqRCwp7PixieVJj5ooJAkNRdiQ7PTkNjggR/PGkP9OTbKqL3PK1sN7uuqGxn6WrbLPorZyP74KIFrnPDfEllVoAmRceiQWhT567l3Ah7cUql4O70SDRVF7UqzwToNS71yCsTb7CfQB76soQvSCdtwo8j0zHFLn/f8gKu13xIAkTgjhzkwJ/xW4vLKXvGKoWIR1c3eWeVuCuPcsaoPaMvza7q2LRdtXBh7LGpq5IaIqWHSbyc1gVAUT4mVLFWOLS9IcqoJhZBjLR3zhA2UUvBI46lo/5xga59Gz2DPqLhISU7xWT+YhPq0hGAExOvOPKATAmb4d3Qy2yB22kiPNgaar2uFyG/3r2h8LsxM+QdSfjPEscyqsiWDlGiV5vBMOQ8ac= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:KL1PR03MB5521.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(261021130227099003)(56012099006)(261022113327099003)(261022115727099003)(4143699003)(5023799004)(261021135927099003)(11063799006)(261009223027099003)(261021121427099003)(10067099003)(22082099003)(261021123027099003)(18002099003)(6133799003)(3023799007)(261021133027099003)(261022105027099003)(261022075727099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QUpOWFNndTVqTmhVdWhxemxBbzV4dEJuVE1vbnVqNUZsVUVrNEY3QUswbzB2?= =?utf-8?B?M0lKeXRjMnlPSHY0ZmVxNXhxcGxwV09NMmVPd3R5WFFzeE4wY3k4TlpjamtJ?= =?utf-8?B?ak12d2FDYUpBUi9sUmFrUXcyUTJVTGh5YzYzY0Z2OGVka2szdHZKZ3N3clFV?= =?utf-8?B?Nkk5UGlrSHZkSUJNMGVibE1ocENjQlNRMmZEbkFJR2tTME1QQWhrc2NIUlF6?= =?utf-8?B?Uy8xWHNkWG1Vd3ZZalk0eFNCSUtlc2c4Ny9Db3BCajRjUHNGTXRid2UwdEFz?= =?utf-8?B?SklCb3ZZMFo0Rk81M0NHcjRKc2QzalZOeXBsVEVOOVVPc1dzclpvU3JJaUtF?= =?utf-8?B?MEcvb001OWdreUVyZ1p3bmdXaHBiS04wSkE1TE9nTjVEZjFuQnN0c1o3QXgv?= =?utf-8?B?WENsK0xyaTBERFEzNzViTzl3US9pSHJ2eE1lWmFhaU1oaFBLdU9xN1djU0tI?= =?utf-8?B?MEttWkJBOEhhRHFSRFZtbnBrZFg5ZjZlUEVXa1dibWRFdG13b0lydE9lcTJK?= =?utf-8?B?Y3NKYVBGem9jQUhSbEo2Q0svRVJDSVJ6MkZLTmdFNEdHaGQ1YXd1RU0rR1lR?= =?utf-8?B?MzhDbjdIN2V3SkxWN1BTK3hsckxvYy9XcFgrOFVJQWFuWkZuL2w1OGNnTVFu?= =?utf-8?B?akRhVHJ3MFIwMGQzUVZkU0pOLzNKMU85aWtWVTZnb0o5eDhxUnU5SnIrbkx0?= =?utf-8?B?ZFRCbzRZOWlNMUtoeWtkMVJIb0JnVjBLVUhvRkNwQXQ3elZqQlFBbEgvdXV4?= =?utf-8?B?NEdhWjVFL1ZRRHZsc2R4RVZnejlyZC9SYmpGQ2JWdXVqd1hxYk5JY1RwQ3pK?= =?utf-8?B?d0dheEp6U0lKWEc5NEN3eGgySk9jMnFIOXluai9EWmVOSmtyS0JGc3hIb1ls?= =?utf-8?B?NFFlZGtiQzh5Nmp4eVk2d0dWUWFLQVAvZjllU1NYTXF1RTh4OWp0K3IzOFVE?= =?utf-8?B?VUJpMmF5aUR4WHQvclBWTGxaR1BYcFdXaXRhbytrWlFNd053SGdhdGhOV2di?= =?utf-8?B?dE5KcWg3MVovU1g0UGhjMnlzbnBWWEpRUWZJNFJtN2JlUkhwMzBZK2lseDFR?= =?utf-8?B?eUl3MFNFbXk2N0lQbG14MHdqRmRjNzNGUGtJcUpKRzJoUGlLVW92cVEvci9a?= =?utf-8?B?MjB3N21HWm5jcHZpbUZZRWdaaG5GOW5hUitqcUM0Z3FvaUZnMDhmdDJLS0tk?= =?utf-8?B?TnR6K0tmL3p0WStmTmM3ejd3NGVmRlJ6VHgvaVZLNzJHdEZwNzRyQkNmSS9L?= =?utf-8?B?MEZST1FaRjNpTEFRZlJNMlphWXJLdzA2bWRvZWh2Z2xQNlFzYjJaUUVWOG80?= =?utf-8?B?eXAyUHkwRS9xUnVtTTE5blpPYnFIdEtMbjZWV080blBGVmorVzU3b2lTZDFl?= =?utf-8?B?NUwvWGlxSWMxSTVQem1Cbys5MDVQbDBoRG5zWFhEUDVwbU5CZkdGeklZdXRV?= =?utf-8?B?Z084c2NMc2FQZ2syUWJxWUFTVTRRVWlrSG84MnprRi9lcUFseGVUdkJGZTVO?= =?utf-8?B?akQ2SDhmV0VsVVNYWGVxRExTeTZTaDNZT0JKYmFxVnU3ZXZ5YmRpRkY0K0w3?= =?utf-8?B?Q1VPT3diYU01OG03NUMzTzcvZXVDL1k0bnVab2JieUg5clB1ZHZGU2hpS0wv?= =?utf-8?B?TUJBWnk4Q0ZpcXlzc2JGMGFEMTg2QmltWWpTRkZVOGxHTWp5ekl6T2VPSUFP?= =?utf-8?B?Um1wV2FNTXMvVDg1N2VmaHpMeHNaTUNsRzNkcjlnS2gyYVM0RGRrUm5pVS9k?= =?utf-8?B?YjVzVjIzWVlQRkZlQkRQOXlNdDBxOU51S0lvaUcyRjFKbWMwT2NnREtrZC9l?= =?utf-8?B?anZ0djJOVC9odlhIaTB6R3U2dXU1SktxUVplVWlZYzdEUWcwME9lbEYwQmVo?= =?utf-8?B?VUEyVWRjTGdIR0NkM3NQMEViQ20vOURqYk1Sdk4vTEhvbU5WQ0JrNzFlNDgv?= =?utf-8?B?dFpnVHpwd0QvaTVGYXN2SGhkMEx2bUpuSWZ0VzBoTEtBbFQ2RXA4UU16dXNi?= =?utf-8?B?TG5BNTBIU2dPVG01Vjg2SGhQWk15TWpBVzhBRnlBLzY1MklvTnk4Z0h3cG5z?= =?utf-8?B?VVQ5aE81T0Y2QllDejRsMGgweFBlWkd3dXhUVldZcE95LzdkSTFUcmlPVGJ3?= =?utf-8?B?cjE3R0tHM2NxUjlTcTQ5VTdzZ1J6cWpnUWloRkh2eUdnMmtmL0VPT1hReWVk?= =?utf-8?B?Y2kyb1FUSXBKTmk3dXZjUjF1Y1F0N2tSOXc5RnlpUmorU3c0OWVxTy9uVHFv?= =?utf-8?B?TVhOZENFWWtzcWt5M1R2cXBiOVErUE9ya20waGxvNTdDNHhuWHZtZytLVnEy?= =?utf-8?B?QnlsQktOZXR6TXgrMi91R1NHZmFmTjk3Tk52ODRyVTZNZVZjRWU0UT09?= X-OriginatorOrg: amlogic.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0266ba65-1e2e-4c99-cdfb-08df30f86724 X-MS-Exchange-CrossTenant-AuthSource: KL1PR03MB5521.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 11:25:55.6426 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0df2add9-25ca-4b3a-acb4-c99ddf0b1114 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JqzPFIh2TgUIpdZHRsXIGdVJh1SEzjYuoirRapspAEhurC3R0PHsGunVXs5mkvFMX0mYDdc/nCRNJ9UGvTb3Fg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR03MB8127 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261023_042612_286411_E64BF338 X-CRM114-Status: GOOD ( 27.19 ) X-Spam-Score: -2.1 (--) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhpcyBwYXRjaCBpcyBhYm91dCBkdHMsIGJ1dCBhbGwgdGhlIHNhc2hpa28gZmVlZGJhY2tzIGFy ZSBhYm91dCB0aGUgCmRyaXZlci4KPiBbIEVYVEVSTkFMIEVNQUlMIF0KPgo+IFRoYW5rIHlvdSBm b3IgeW91ciBjb250cmlidXRpb24hIFNhc2hpa28gQUkgcmV2aWV3IGZvdW5kIDEzIHBvdGVudGlh bCBpc3N1ZShzKSB0byBjb25zaWRlcjoKPiAtIFtDcml0aWNhbF0gbWVkaWE6IGFtbG9naWM6IHZk ZWM6IE9PQiByZWFkIGFuZCBjYW52YXMgbGVha3MgaW4gaDI2NCByZWZlcmVuY2UgbGlzdCBoYW5k bGluZwo+IC0gW0NyaXRpY2FsXSBtZWRpYTogYW1sb2dpYzogdmRlYzogY29sb2NhdGUgYnVmZmVy IE9PQiBETUEgd3JpdGUgaW4gaDI2NF9jb25maWdfZGVjb2RlX2J1ZigpCj4gLSBbSGlnaF0gbWVk aWE6IGFtbG9naWM6IHZkZWM6IGFtbF92ZGVjX2luaXRfZGVjX2luc3QoKSByZXR1cm5zIC0xIG9u IHF1ZXVlIHJlc3RhcnQKPiAtIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogaW52YWxpZCBJ U19FUlIoKSBjaGVjayBvbiBtZXNvbl9zbV9nZXQoKSBpbiBwcm9iZQo+IC0gW0hpZ2hdIG1lZGlh OiBhbWxvZ2ljOiB2ZGVjOiBwb2NfaXNfaW5fZHBiKCkgYW5kIGdldF9kcGJfYnlfcG9jKCkgaWdu b3JlIGFjdGl2ZSBmbGFnCj4gLSBbSGlnaF0gbWVkaWE6IGFtbG9naWM6IHZkZWM6IGRvcyBjbG9j ayBpbiB2ZGVjX2Nsb2NrX2dhdGVfaW5pdCgpIGlzIG5ldmVyIGVuYWJsZWQKPiAtIFtIaWdoXSBt ZWRpYTogYW1sb2dpYzogdmRlYzogaWdub3JlZCBwb3dlciBhbmQgY2xvY2sgZXJyb3JzIGluIGFt bF92ZGVjX2h3LmMKPiAtIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogYW1sX3ZkZWNfZHJ2 X3JlbW92ZSgpIHBvd2VycyBvZmYgaHcgYmVmb3JlIHVucmVnaXN0ZXJpbmcKPiAtIFtIaWdoXSBt ZWRpYTogYW1sb2dpYzogdmRlYzogYnJva2VuIFRFRSBkZWZlcnJhbCBhbmQgZXJyb3IgY29kZXMg aW4gYW1sX3ZkZWNfdGVlX2Z3LmMKPiAtIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogaW5m aW5pdGUgcG9sbCB1bmRlciBjdHhfbXV0ZXggaW4gaDI2NF9jb25maWdfZGVjb2RlX2J1ZigpCj4g LSBbTWVkaXVtXSBtZWRpYTogYW1sb2dpYzogdmRlYzogbWlzc2luZyBSRUdNQVBfTU1JTyBhbmQg TUVESUFfQ09OVFJPTExFUiBzZWxlY3RzCj4gLSBbTWVkaXVtXSBtZWRpYTogYW1sb2dpYzogdmRl YzogYW1sX3ZkZWNfZHJ2X3Byb2JlKCkgcmVnaXN0ZXJzIHZpZGVvX2RldmljZSB0b28gZWFybHkK PiAtIFtNZWRpdW1dIG1lZGlhOiBhbWxvZ2ljOiB2ZGVjOiBtaXNzaW5nIHNldF9waWNfaW5mbygp IGluIHJlc2V0X291dHB1dF9mbXRzKCkKPiAtLQo+Cj4gY29tbWl0IDdkNzdiMGU1NTYwZGQ2Zjdj OWZkZDQ2NWMwMGZmZmRmZjkxYzdlNTUKPiBBdXRob3I6IFpoZW50YW8gR3VvIDx6aGVudGFvLmd1 b0BhbWxvZ2ljLmNvbT4KPgo+IGFybTY0OiBkdHM6IGFtbG9naWM6IEFkZCB2aWRlbyBkZWNvZGVy IGRyaXZlciBzdXBwb3J0IGZvciBTNCBTT0NzCj4KPiBUaGlzIHNlcmllcyBhZGRzIHRoZSBBbWxv Z2ljIFM0IFY0TDIgc3RhdGVsZXNzIEguMjY0IHZpZGVvIGRlY29kZXIgZHJpdmVyIGluCj4gY29t bWl0IDE4YTExYjJjNzBhN2VmNTVjNDJlZDg5N2JjMTYyNDM5N2VjMzQzMGMgKCJkZWNvZGVyOiBB ZGQgVjRMMiBzdGF0ZWxlc3MKPiBILjI2NCBkZWNvZGVyIGRyaXZlciIpIGFuZCBlbmFibGVzIHRo ZSBjb3JyZXNwb25kaW5nIHZkZWMsIGNhbnZhcywgYW5kIG9wdGVlCj4gZGV2aWNlIHRyZWUgbm9k ZXMgaW4gbWVzb24tczQuZHRzaS4KPgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbWxvZ2ljL3ZkZWMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dp Yy92ZGVjL0tjb25maWcKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAw MDAwMC4uMmM1ZGQ4NDUyOTYyMQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL0tjb25maWcKPj4gQEAgLTAsMCArMSwxOCBAQAo+PiAr IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBNSVQpCj4+ICsKPj4g K2NvbmZpZyBWSURFT19BTUxPR0lDX1ZERUMKPj4gKyAgICB0cmlzdGF0ZSAiQW1sb2dpYyBWaWRl byBEZWNvZGVyIERyaXZlciIKPj4gKyAgICBkZXBlbmRzIG9uIEFSQ0hfTUVTT04gfHwgQ09NUElM RV9URVNUCj4+ICsgICAgZGVwZW5kcyBvbiBWSURFT19ERVYKPj4gKyAgICBkZXBlbmRzIG9uIFY0 TF9NRU0yTUVNX0RSSVZFUlMKPj4gKyAgICBkZXBlbmRzIG9uIFRFRQo+PiArICAgIGRlcGVuZHMg b24gTUVTT05fU00KPj4gKyAgICBzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKPj4gKyAgICBz ZWxlY3QgVjRMMl9IMjY0Cj4+ICsgICAgc2VsZWN0IFY0TDJfTUVNMk1FTV9ERVYKPj4gKyAgICBz ZWxlY3QgTUVTT05fQ0FOVkFTCj4gW1NldmVyaXR5OiBNZWRpdW1dCj4gU2hvdWxkIFZJREVPX0FN TE9HSUNfVkRFQyBhbHNvIHNlbGVjdCBSRUdNQVBfTU1JTyBhbmQgTUVESUFfQ09OVFJPTExFUiBo ZXJlPwo+Cj4gSW4gZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNf aHcuYywKPiBkZXZfcmVxdWVzdF9od19yZXNvdXJjZXMoKSBjYWxscyBkZXZtX3JlZ21hcF9pbml0 X21taW8oKSwgd2hpY2ggZmFpbHMgdG8gbGluawo+IHdoZW4gQ09ORklHX1JFR01BUF9NTUlPIGlz IGRpc2FibGVkLgpDb3JyZWN0LCBib3RoIHNlbGVjdHMgYXJlIHNob3VsZCBhZGRlZC4KPiBJbiBh ZGRpdGlvbiwgYW1sX3ZkZWNfZHJ2X3Byb2JlKCkgaW4KPiBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2FtbG9naWMvdmRlYy9hbWxfdmRlY19kcnYuYyByZWdpc3RlcnMgYSBtZWRpYSBkZXZpY2UKPiB3 aXRoIGFtbF9tMm1fbWVkaWFfb3BzICh2YjJfcmVxdWVzdF92YWxpZGF0ZSBhbmQgdjRsMl9tMm1f cmVxdWVzdF9xdWV1ZSkgZm9yCj4gc3RhdGVsZXNzIEguMjY0IGRlY29kaW5nLCB3aGljaCBjb21w aWxlcyB0byBuby1vcCBzdHVicyBpZgo+IENPTkZJR19NRURJQV9DT05UUk9MTEVSIGlzIGRpc2Fi bGVkLiBJbgo+IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjLmMs IHNob3VsZCBhbWxfdmRlY19xdWV1ZV9pbml0KCkKPiBhbHNvIHNldCBzcmNfdnEtPnJlcXVpcmVz X3JlcXVlc3RzID0gdHJ1ZSBhbG9uZ3NpZGUKPiBzcmNfdnEtPnN1cHBvcnRzX3JlcXVlc3RzID0g dHJ1ZSBzbyBub24tcmVxdWVzdCBidWZmZXJzIGFyZSByZWplY3RlZD8KQ29ycmVjdCwgaW4gc3Rh dGVsc3MgZGVjb2Rlciwgbm9uLXJlcXVlc3QgYnVmZmVycyBzaG91bGQgYmUgcmVqZWN0ZWQuCj4K PiBbIC4uLiBdCj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dp Yy92ZGVjL2FtbF92ZGVjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9h bWxfdmRlYy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMDAu LmU2NWViYjJjZTMxMWYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlYy5jCj4gWyAuLi4gXQo+Cj4+ICtzdGF0aWMgaW50 IGFtbF92ZGVjX2luaXRfZGVjX2luc3Qoc3RydWN0IGFtbF92ZGVjX2N0eCAqY3R4KQo+PiArewo+ PiArICAgICBzdHJ1Y3QgYW1sX3ZkZWNfZGV2ICpkZXYgPSBjdHgtPmRldjsKPj4gKyAgICAgc3Ry dWN0IGFtbF92aWRlb19mbXQgKmZtdF9vdXQgPSAmY3R4LT5kZWNfZm10W0FNTF9GTVRfU1JDXTsK Pj4gKyAgICAgaW50IHJldCA9IC0xOwo+PiArCj4+ICsgICAgIGN0eC0+Y29kZWNfb3BzID0gJmRl di0+cHZkZWNfZGF0YS0+Y29kZWNfb3BzW2ZtdF9vdXQtPmNvZGVjX3R5cGVdOwo+PiArICAgICAv Kgo+PiArICAgICAgKiBUaGUgY29kZWMgaW5zdGFuY2UgaXMgb25seSByZWxlYXNlZCB3aGVuIGJv dGggcXVldWVzIGFyZQo+PiArICAgICAgKiBzdHJlYW1lZCBvZmY6IGRvIG5vdCBhbGxvY2F0ZSBh IG5ldyBvbmUgKGxlYWtpbmcgdGhlIHByZXZpb3VzCj4+ICsgICAgICAqIGluc3RhbmNlKSB3aGVu IHRoZSBvdXRwdXQgcXVldWUgaXMgcmVzdGFydGVkIHdoaWxlIHRoZQo+PiArICAgICAgKiBjYXB0 dXJlIHF1ZXVlIGlzIHN0aWxsIHN0cmVhbWluZy4KPj4gKyAgICAgICovCj4+ICsgICAgIGlmIChj dHgtPmNvZGVjX29wcy0+aW5pdCAmJiAhY3R4LT5jb2RlY19wcml2KSB7Cj4+ICsgICAgICAgICAg ICAgcmV0ID0gY3R4LT5jb2RlY19vcHMtPmluaXQoY3R4KTsKPj4gKyAgICAgICAgICAgICBpZiAo cmV0IDwgMCkKPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICsgICAgIH0K Pj4gKyAgICAgY3R4LT5jdXJyX2RlY190eXBlID0gZm10X291dC0+Y29kZWNfdHlwZTsKPj4gKyAg ICAgZGV2X2luZm8oJmRldi0+cGxhdF9kZXYtPmRldiwgIiVzIHNldCBjdXJyX2RlY190eXBlICVz XG4iLAo+PiArICAgICAgICAgICAgICBfX2Z1bmNfXywgZGVjX3R5cGVfdG9fbmFtZShjdHgtPmN1 cnJfZGVjX3R5cGUpKTsKPj4gKwo+PiArICAgICByZXR1cm4gcmV0Owo+PiArfQo+IFtTZXZlcml0 eTogSGlnaF0KPiBXaGVuIHRoZSBvdXRwdXQgcXVldWUgaXMgc3RvcHBlZCBhbmQgcmVzdGFydGVk IHdoaWxlIHRoZSBjYXB0dXJlIHF1ZXVlIHJlbWFpbnMKPiBzdHJlYW1pbmcsIGN0eC0+Y29kZWNf cHJpdiBpcyBhbHJlYWR5IG5vbi1OVUxMLCBzbyBhbWxfdmRlY19pbml0X2RlY19pbnN0KCkKPiBz a2lwcyBjdHgtPmNvZGVjX29wcy0+aW5pdChjdHgpIGFuZCByZXR1cm5zIHRoZSBpbml0aWFsIHJl dCA9IC0xLgo+Cj4gSW4gdmIyb3BzX3ZkZWNfc3RhcnRfc3RyZWFtaW5nKCk6Cj4KPiAgICAgIGlm IChhbWxfdmRlY19pbml0X2RlY19pbnN0KGN0eCkgPCAwKSB7Cj4gICAgICAgICAgd2hpbGUgKChz cmNfYnVmID0gdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5tMm1fY3R4KSkpCj4gICAgICAg ICAgICAgIHY0bDJfbTJtX2J1Zl9kb25lKHNyY19idWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsK PiAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAgICAgIH0KPgo+IFdvbid0IHRoaXMgY2F1c2Ug dmIyb3BzX3ZkZWNfc3RhcnRfc3RyZWFtaW5nKCkgdG8gYWx3YXlzIGZhaWwgd2l0aCAtRUlOVkFM IG9uCj4gb3V0cHV0IHF1ZXVlIHJlc3RhcnQgdW5sZXNzIHJldCBpcyBpbml0aWFsaXplZCB0byAw IGluCj4gYW1sX3ZkZWNfaW5pdF9kZWNfaW5zdCgpPwpUaGUgcmV0IGluIGFtbF92ZGVjX2luaXRf ZGVjX2luc3Qgc2hvdWxkIGJlIHNldCB0byAxIHNpbmNlIHJlc3RhcnRpbmcgCnRoZSBvdXRwdXQg cXVldWUgd2hpbGUgY2FwdHVyZSBrZWVwcyBzdHJlYW1pbmcgYWx3YXlzIGZhaWxlZCBTVFJFQU1P Ti4KPgo+IFsgLi4uIF0KPgo+PiArc3RhdGljIGludCB2ZGVjX3RyeV9mbXRfbXAoc3RydWN0IGFt bF92ZGVjX2N0eCAqY3R4LCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYW1sX3ZpZGVvX2ZtdCAqZGVjX2Zt dCkKPj4gK3sKPj4gKyAgICAgaW50IGksIGFsaWduOwo+PiArCj4+ICsgICAgIHBpeF9tcC0+Zmll bGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4+ICsgICAgIGFsaWduID0gZGVjX2ZtdC0+YWxpZ247Cj4+ ICsKPj4gKyAgICAgaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQodHlwZSkpIHsKPj4gKyAgICAgICAg ICAgICBwaXhfbXAtPm51bV9wbGFuZXMgPSBkZWNfZm10LT5udW1fcGxhbmVzOwo+PiArICAgICAg ICAgICAgIHBpeF9tcC0+cGl4ZWxmb3JtYXQgPSBkZWNfZm10LT5mb3VyY2M7Cj4+ICsgICAgICAg ICAgICAgaWYgKCFwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UpCj4+ICsgICAgICAgICAg ICAgICAgICAgICBwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIChwaXhfbXAtPmhlaWdodCAqIHBpeF9tcC0+d2lkdGggKiAzKSAvIDI7 Cj4+ICsgICAgICAgICAgICAgcGl4X21wLT5oZWlnaHQgPSBBTElHTihwaXhfbXAtPmhlaWdodCwg YWxpZ24pOwo+PiArICAgICAgICAgICAgIHBpeF9tcC0+d2lkdGggPSBBTElHTihwaXhfbXAtPndp ZHRoLCBhbGlnbik7Cj4+ICsgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAgcGl4X21wLT5o ZWlnaHQgPSBjdHgtPnBpeF9mbXRbQU1MX0ZNVF9TUkNdLmhlaWdodDsKPj4gKyAgICAgICAgICAg ICBwaXhfbXAtPndpZHRoID0gY3R4LT5waXhfZm10W0FNTF9GTVRfU1JDXS53aWR0aDsKPj4gKyAg ICAgfQo+PiArCj4+ICsgICAgIHY0bDJfYXBwbHlfZnJtc2l6ZV9jb25zdHJhaW50cygmcGl4X21w LT53aWR0aCwgJnBpeF9tcC0+aGVpZ2h0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmRlY19mbXQtPnN0ZXB3aXNlKTsKPiBbIC4uLiBdCj4KPj4gK3N0YXRpYyBpbnQg dmRlY19zX2ZtdF9vdXRwdXQoc3RydWN0IGFtbF92ZGVjX2N0eCAqY3R4LCBzdHJ1Y3QgdjRsMl9m b3JtYXQgKmYpCj4+ICt7Cj4+ICsgICAgIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpw aXhfbXAgPSAmZi0+Zm10LnBpeF9tcDsKPj4gKyAgICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9t cGxhbmUgKmNhcF9mbXQgPSAmY3R4LT5waXhfZm10W0FNTF9GTVRfRFNUXTsKPj4gKyAgICAgY29u c3Qgc3RydWN0IGFtbF92aWRlb19mbXQgKm91dF9mbXQ7Cj4+ICsgICAgIHN0cnVjdCB2YjJfcXVl dWUgKnZxLCAqcGVlcl92cTsKPj4gKyAgICAgaW50IHJldDsKPj4gKwo+PiArICAgICB2cSA9IHY0 bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01Q TEFORSk7Cj4+ICsgICAgIGlmICh2YjJfaXNfYnVzeSh2cSkgJiYKPj4gKyAgICAgICAgIHBpeF9t cC0+cGl4ZWxmb3JtYXQgIT0gY3R4LT5waXhfZm10W0FNTF9GTVRfU1JDXS5waXhlbGZvcm1hdCkK Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwo+PiArCj4+ICsgICAgIC8qCj4+ICsgICAg ICAqIFNpbmNlIHNfZm10IG91dHB1dCB3aWxsIHJlc2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGlu IHRoZSBjYXB0dXJlIHF1ZXVlLAo+PiArICAgICAgKiBzX2ZtdF9vdXRwdXQgd2l0aCByZXNvbHV0 aW9uIGNoYW5nZSBzaG91bGQgbm90IHRha2UgZWZmZWN0IHdoZW4gY2FwdHVyZQo+PiArICAgICAg KiBxdWV1ZSBpcyBidXN5Lgo+PiArICAgICAgKi8KPj4gKyAgICAgcGVlcl92cSA9IHY0bDJfbTJt X2dldF92cShjdHgtPm0ybV9jdHgsIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUp Owo+PiArICAgICBpZiAodmIyX2lzX2J1c3kocGVlcl92cSkgJiYKPj4gKyAgICAgICAgIChwaXhf bXAtPndpZHRoICE9IGNhcF9mbXQtPndpZHRoIHx8Cj4+ICsgICAgICAgICBwaXhfbXAtPmhlaWdo dCAhPSBjYXBfZm10LT5oZWlnaHQpKQo+PiArICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4g WyAuLi4gXQo+Cj4+ICtzdGF0aWMgdm9pZCByZXNldF9vdXRwdXRfZm10cyhzdHJ1Y3QgYW1sX3Zk ZWNfY3R4ICpjdHgpCj4+ICt7Cj4+ICsgICAgIHN0cnVjdCBhbWxfdmRlY19kZXYgKmRldiA9IGN0 eC0+ZGV2Owo+PiArICAgICBjb25zdCBzdHJ1Y3QgYW1sX3ZpZGVvX2ZtdCAqb3V0X2ZtdDsKPj4g KyAgICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgZm10Owo+PiArCj4+ICsgICAgIC8q IHJlc2V0IGRlZmF1bHQgb3V0cHV0IGZtdCB0byBWNEwyX1BJWF9GTVRfSDI2NF9TTElDRSAqLwo+ PiArICAgICBvdXRfZm10ID0gYW1sX3ZkZWNfZ2V0X3ZpZGVvX2ZtdChkZXYsIFY0TDJfUElYX0ZN VF9IMjY0X1NMSUNFKTsKPj4gKyAgICAgaWYgKCFvdXRfZm10KQo+PiArICAgICAgICAgICAgIHJl dHVybjsKPj4gKwo+PiArICAgICBjdHgtPmRlY19mbXRbQU1MX0ZNVF9TUkNdID0gKm91dF9mbXQ7 Cj4+ICsKPj4gKyAgICAgbWVtc2V0KCZmbXQsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9y bWF0X21wbGFuZSkpOwo+PiArCj4+ICsgICAgIGZtdC5oZWlnaHQgPSBvdXRfZm10LT5zdGVwd2lz ZS5taW5faGVpZ2h0Owo+PiArICAgICBmbXQud2lkdGggPSBvdXRfZm10LT5zdGVwd2lzZS5taW5f d2lkdGg7Cj4+ICsgICAgIC8qIHJlc2V0IGJ5dGVzcGVybGluZSB0byAwIGZvciBvdXRwdXQgZm10 cyAqLwo+PiArICAgICBmbXQucGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZSA9IDA7Cj4+ICsgICAg IGZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0RFRkFVTFQ7Cj4+ICsgICAgIGZtdC55 Y2Jjcl9lbmMgPSBWNEwyX1lDQkNSX0VOQ19ERUZBVUxUOwo+PiArICAgICBmbXQucXVhbnRpemF0 aW9uID0gVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVDsKPj4gKyAgICAgZm10LnhmZXJfZnVuYyA9 IFY0TDJfWEZFUl9GVU5DX0RFRkFVTFQ7Cj4+ICsgICAgIHZkZWNfdHJ5X2ZtdF9tcChjdHgsIFY0 TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSwgJmZtdCwKPj4gKyAgICAgICAgICAgICAg ICAgICAgIG91dF9mbXQpOwo+PiArCj4+ICsgICAgIGN0eC0+cGl4X2ZtdFtBTUxfRk1UX1NSQ10g PSBmbXQ7Cj4+ICt9Cj4gW1NldmVyaXR5OiBNZWRpdW1dCj4gSW4gZm9wc192Y29kZWNfb3Blbigp IC0+IGFtbF92ZGVjX3Jlc2V0X2ZtdHMoKSAtPiByZXNldF9vdXRwdXRfZm10cygpLAo+IHNldF9w aWNfaW5mbygpIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdmRlY190cnlfZm10X21wKCkuIElmIHVzZXJz cGFjZSBzdGFydHMKPiBzdHJlYW1pbmcgd2l0aG91dCBjYWxsaW5nIHZkZWNfc19mbXRfb3V0cHV0 KCksIHdvbid0IGN0eC0+cGljX2luZm8uZmJfc2l6ZVswXQo+IHJlbWFpbiAwLCBjYXVzaW5nIGgy NjRfY29uZmlnX2RlY29kZV9zcGVjKCkgYW5kIGgyNjRfY29uZmlnX3JlZl9zcGVjKCkgaW4KPiBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMgdG8gc2V0IGNfZG1hX2Fk ZHIgZXF1YWwgdG8KPiB5X2RtYV9hZGRyIGZvciBzaW5nbGUtcGxhbmFyIE5WMTIvTlYyMSBjYXB0 dXJlIGJ1ZmZlcnM/Cj4KPiBBbHNvIGluIHZkZWNfdHJ5X2ZtdF9tcCgpLCBwaXhfbXAtPnBsYW5l X2ZtdFswXS5zaXplaW1hZ2UgaXMgY2FsY3VsYXRlZCBmcm9tCj4gcGl4X21wLT5oZWlnaHQgKiBw aXhfbXAtPndpZHRoIGJlZm9yZSBBTElHTigpIGFuZAo+IHY0bDJfYXBwbHlfZnJtc2l6ZV9jb25z dHJhaW50cygpIGNsYW1wIHRoZSBkaW1lbnNpb25zLCBhbmQgaW4KPiB2ZGVjX3NfZm10X291dHB1 dCgpLCBwaXhfbXAtPndpZHRoIGFuZCBwaXhfbXAtPmhlaWdodCBhcmUgY29tcGFyZWQgYWdhaW5z dCB0aGUKPiA2NC1hbGlnbmVkIGNhcF9mbXQgZGltZW5zaW9ucyBiZWZvcmUgdmRlY190cnlfZm10 X21wKCkgYWxpZ25zIHRoZW0uIFNob3VsZAo+IHNpemVpbWFnZSBhbmQgdGhlIGJ1c3kgcmVzb2x1 dGlvbiBjaGVjayB1c2UgdGhlIGFsaWduZWQgYW5kIGNsYW1wZWQgZGltZW5zaW9ucwo+IGluc3Rl YWQ/Cj4KPiBbIC4uLiBdCgpUaGUgZmlyc3Qgb25lIGlzIGFuIGludmFsaWQgY2FzZSwgc2luY2Ug dGhlIGRlY29kZXIgaW5zdGFuY2Ugd2lsbCBub3QgYmUgCmNyZWF0ZWQgd2l0aG91dCBjYWxsaW5n IHZkZWNfc19mbXRfb3V0cHV0LiBUaGUgY29kZWNfcHJpdiByZW1haW5zIE5VTEwgCndpdGhvdXQg Y2FsbGluZyB2ZGVjX3NfZm10X291dHB1dCBzbyBuZWl0aGVyIGRldmljZV9ydW4gb3IgaXNyIHdp bGwgdGFrZSAKZWZmZWN0LgoKVGhlIHNpemVpbWFnZSBwYXJ0IGlzIGEgYWxzbyBmYWxzZSBwb3Np dGl2ZSAtLXZkZWNfdHJ5X2ZtdF9tcCgpIGNhbGxzIAp2NGwyX2ZpbGxfcGl4Zm10X21wKCkgYWZ0 ZXIgY2xhbXBpbmcsIHdoaWNocmVjb21wdXRlcyBzaXplaW1hZ2UgZnJvbSB0aGUgCmFsaWduZWQg ZGltZW5zaW9ucywgc28gdGhlIHByZS1BTElHTiBjYWxjdWxhdGlvbiBpcyBuZXZlciB0aGUgZmlu YWwgdmFsdWUuCgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2lj L3ZkZWMvYW1sX3ZkZWNfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRl Yy9hbWxfdmRlY19kcnYuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw MDAwMDAwLi4xODcwZDU2NjU5Y2Y0Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfZHJ2LmMKPiBbIC4uLiBdCj4KPj4g KyAgICAgcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZF9kZWMsIFZGTF9UWVBFX1ZJREVP LCAtMSk7Cj4+ICsgICAgIGlmIChyZXQpIHsKPj4gKyAgICAgICAgICAgICB2NGwyX2VycigmZGV2 LT52NGwyX2RldiwgIkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKPj4gKyAgICAg ICAgICAgICBnb3RvIGVycl92aWRfZGV2X3JlZ2lzdGVyOwo+PiArICAgICB9Cj4+ICsKPj4gKyAg ICAgZGV2LT5tZGV2LmRldiA9ICZwZGV2LT5kZXY7Cj4+ICsgICAgIHN0cnNjcHkoZGV2LT5tZGV2 Lm1vZGVsLCBBTUxfVkRFQ19EUlZfTkFNRSwgc2l6ZW9mKGRldi0+bWRldi5tb2RlbCkpOwo+PiAr ICAgICBtZWRpYV9kZXZpY2VfaW5pdCgmZGV2LT5tZGV2KTsKPj4gKyAgICAgZGV2LT5tZGV2Lm9w cyA9ICZhbWxfbTJtX21lZGlhX29wczsKPj4gKyAgICAgZGV2LT52NGwyX2Rldi5tZGV2ID0gJmRl di0+bWRldjsKPj4gKwo+PiArICAgICByZXQgPSB2NGwyX20ybV9yZWdpc3Rlcl9tZWRpYV9jb250 cm9sbGVyKGRldi0+bTJtX2Rldl9kZWMsIHZmZF9kZWMsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESUFfRU5UX0ZfUFJPQ19WSURFT19ERUNPREVS KTsKPj4gKyAgICAgaWYgKHJldCkgewo+PiArICAgICAgICAgICAgIHY0bDJfZXJyKCZkZXYtPnY0 bDJfZGV2LCAiRmFpbGVkIHRvIGluaXQgbWVtMm1lbSBtZWRpYSBjb250cm9sbGVyXG4iKTsKPj4g KyAgICAgICAgICAgICBnb3RvIGVycm9yX20ybV9tY19yZWdpc3RlcjsKPj4gKyAgICAgfQo+PiAr Cj4+ICsgICAgIHJldCA9IG1lZGlhX2RldmljZV9yZWdpc3RlcigmZGV2LT5tZGV2KTsKPj4gKyAg ICAgaWYgKHJldCkgewo+PiArICAgICAgICAgICAgIHY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAi RmFpbGVkIHRvIHJlZ2lzdGVyIG1lZGlhIGRldmljZSIpOwo+PiArICAgICAgICAgICAgIGdvdG8g ZXJyX21lZGlhX2Rldl9yZWdpc3RlcjsKPj4gKyAgICAgfQo+PiArICAgICB2ZGVjX2VuYWJsZShk ZXYtPmRlY19odyk7Cj4+ICsgICAgIHJldHVybiAwOwo+IFtTZXZlcml0eTogTWVkaXVtXQo+IElu IGFtbF92ZGVjX2Rydl9wcm9iZSgpLCB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBleHBvc2VzIHRo ZSB2aWRlbyBub2RlIHRvCj4gdXNlcnNwYWNlIGJlZm9yZSBkZXYtPnY0bDJfZGV2Lm1kZXYgaXMg aW5pdGlhbGl6ZWQsIGJlZm9yZSB0aGUgbWVkaWEKPiBjb250cm9sbGVyIGVudGl0aWVzIGFyZSBy ZWdpc3RlcmVkLCBhbmQgYmVmb3JlIHZkZWNfZW5hYmxlKGRldi0+ZGVjX2h3KSBwb3dlcnMKPiBv biB0aGUgVkRFQyBoYXJkd2FyZSBkb21haW4gYW5kIGNsb2NrLgo+Cj4gQ291bGQgYSB1c2Vyc3Bh Y2UgcHJvY2VzcyBvcGVuIHRoZSB2aWRlbyBkZXZpY2UgaW1tZWRpYXRlbHkgYWZ0ZXIKPiB2aWRl b19yZWdpc3Rlcl9kZXZpY2UoKSBhbmQgcmFjZSB3aXRoIG1lZGlhIGNvbnRyb2xsZXIgc2V0dXAg b3IgdHJpZ2dlcgo+IG0ybW9wc192ZGVjX2RldmljZV9ydW4oKSBiZWZvcmUgdmRlY19lbmFibGUo KSBoYXMgcnVuPwo+Cj4gWyAuLi4gXQpJIHRoaW5rIHRoaXMgaXMgYSBtaW5vciBwcm9ibGVtLCBi dXQgaXQncyBzdGlsbCB3b3J0aCBmaXhpbmcuCj4KPj4gK3N0YXRpYyB2b2lkIGFtbF92ZGVjX2Ry dl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gKyAgICAgc3Ry dWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICsK Pj4gKyAgICAgLyoKPj4gKyAgICAgICogVGhlIElSUSBpcyBkZXZtLW1hbmFnZWQgYW5kIG9ubHkg cmVsZWFzZWQgYWZ0ZXIgcmVtb3ZlKCkKPj4gKyAgICAgICogcmV0dXJuczogbWFzayBpdCBhbmQg d2FpdCBmb3IgYW55IGluLWZsaWdodCB0aHJlYWRlZCBoYW5kbGVyCj4+ICsgICAgICAqIGJlZm9y ZSBwb3dlcmluZyBvZmYgdGhlIFZERUMgZG9tYWluLCBvdGhlcndpc2UgdGhlIGhhbmRsZXIKPj4g KyAgICAgICogY291bGQgYWNjZXNzIHBvd2VyZWQtZG93biByZWdpc3RlcnMuCj4+ICsgICAgICAq Lwo+PiArICAgICBkaXNhYmxlX2lycShkZXYtPmRlY19ody0+ZGVjX2lycSk7Cj4+ICsgICAgIHZk ZWNfZGlzYWJsZShkZXYtPmRlY19odyk7Cj4+ICsgICAgIG1lZGlhX2RldmljZV91bnJlZ2lzdGVy KCZkZXYtPm1kZXYpOwo+PiArICAgICB2NGwyX20ybV91bnJlZ2lzdGVyX21lZGlhX2NvbnRyb2xs ZXIoZGV2LT5tMm1fZGV2X2RlYyk7Cj4+ICsgICAgIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRl di0+dmZkKTsKPj4gKyAgICAgbWVkaWFfZGV2aWNlX2NsZWFudXAoJmRldi0+bWRldik7Cj4+ICsK Pj4gKyAgICAgdjRsMl9tMm1fcmVsZWFzZShkZXYtPm0ybV9kZXZfZGVjKTsKPj4gKyAgICAgZGV2 LT5wdmRlY19kYXRhLT5kZXN0cm95X2h3X3Jlc291cmNlKGRldik7Cj4+ICsgICAgIHY0bDJfZGV2 aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwo+PiArfQo+IFtTZXZlcml0eTogSGlnaF0K PiBJbiBhbWxfdmRlY19kcnZfcmVtb3ZlKCksIGRpc2FibGVfaXJxKCkgYW5kIHZkZWNfZGlzYWJs ZShkZXYtPmRlY19odykgcG93ZXIKPiBvZmYgdGhlIFZERUMgZG9tYWluIGFuZCBkaXNhYmxlIHRo ZSBWREVDIGNsb2NrIGJlZm9yZSB1bnJlZ2lzdGVyaW5nIHRoZSBtZWRpYQo+IGFuZCB2aWRlbyBk ZXZpY2VzIG9yIHJlbGVhc2luZyBNMk0gY29udGV4dHMuCj4KPiBJZiBhIGRlY29kZSBqb2IgaXMg aW4gZmxpZ2h0IGluIGFtbF9oMjY0X2RlY19ydW4oKSBvciBhbiBvcGVuIGZpbGUgaGFuZGxlIGlz Cj4gc3Vic2VxdWVudGx5IGNsb3NlZCB2aWEgZm9wc192Y29kZWNfcmVsZWFzZSgpIC0+IHZiMm9w c192ZGVjX3N0b3Bfc3RyZWFtaW5nKCkKPiAtPiBhbWxfaDI2NF9leGl0KCksIHdvbid0IHJlYWRf ZG9zX3JlZygpIGFuZCBhbWxfc3RvcF92ZGVjX2h3KCkgcGVyZm9ybSBNTUlPCj4gYWNjZXNzZXMg dG8gRE9TX0JVUyByZWdpc3RlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwb3dlcmVkIGRvd24g YW5kCj4gdW5jbG9ja2VkPwpZZXMsIHRoaXMgaXMgYSBwcm9ibGVtLgo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYyBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2h3LmMKPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uMDQzZjBiYmYzMjUxNgo+PiAtLS0g L2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2Ft bF92ZGVjX2h3LmMKPiBbIC4uLiBdCj4KPj4gK3ZvaWQgZG9zX2VuYWJsZShzdHJ1Y3QgYW1sX3Zk ZWNfaHcgKmh3KQo+PiArewo+PiArICAgICBkb3NfcmVnX3dyaXRlX2JpdHMoaHcsIERPU19HQ0xL X0VOMCwgMHgzZmYsIDAsIDEwKTsKPj4gKwo+PiArICAgICByZWdtYXBfd3JpdGUoaHctPm1hcFtE T1NfQlVTXSwgR0NMS19FTiwgMHgzZmYpOwo+PiArCj4+ICsgICAgIHJlZ21hcF91cGRhdGVfYml0 cyhody0+bWFwW0RPU19CVVNdLCBNREVDX1BJQ19EQ19DVFJMLCAoMSA8PCAzMSksIDApOwo+PiAr fQo+IFsgLi4uIF0KPgo+PiArc3RhdGljIGludCB2ZGVjX2Nsb2NrX2dhdGVfaW5pdChzdHJ1Y3Qg YW1sX3ZkZWNfaHcgKmh3KQo+PiArewo+PiArICAgICBody0+Z2F0ZXNbQ0xLX0RPU10uaWQgPSAi ZG9zIjsKPj4gKyAgICAgaHctPmdhdGVzW0NMS19WREVDXS5pZCA9ICJ2ZGVjIjsKPj4gKyAgICAg aHctPmdhdGVzW0NMS19IVkRFQ10uaWQgPSAiaHZkZWMiOwo+PiArCj4+ICsgICAgIHJldHVybiBk ZXZtX2Nsa19idWxrX2dldChody0+ZGV2LCBDTEtfTUFYLCBody0+Z2F0ZXMpOwo+PiArfQo+IFtT ZXZlcml0eTogSGlnaF0KPiB2ZGVjX2Nsb2NrX2dhdGVfaW5pdCgpIGFjcXVpcmVzIGh3LT5nYXRl c1tDTEtfRE9TXSAoImRvcyIpLCBidXQKPiBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dlcl9vbigp IGFuZCBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dlcl9vZmYoKSBvbmx5Cj4gZW5hYmxlIGFuZCBk aXNhYmxlIHRoZSAidmRlYyIgYW5kICJodmRlYyIgY2xvY2tzLCBhbmQgZG9zX2VuYWJsZSgpIG9u bHkgd3JpdGVzCj4gaW50ZXJuYWwgRE9TIHJlZ2lzdGVycy4KPgo+IFdoZXJlIGlzIGh3LT5nYXRl c1tDTEtfRE9TXS5jbGsgcHJlcGFyZWQgYW5kIGVuYWJsZWQgYmVmb3JlIGRvc19sb2NhbF9jb25m aWcoKQo+IGFuZCBkb3NfZW5hYmxlKCkgYWNjZXNzIERPU19CVVMgcmVnaXN0ZXJzPyBJZiBDTEtJ RF9ET1MgaXMgZ2F0ZWQgYnkgdGhlCj4gYm9vdGxvYWRlciBvciBjbGtfZGlzYWJsZV91bnVzZWQs IHdvbid0IHRoZXNlIE1NSU8gYWNjZXNzZXMgaGFuZyBvciBhYm9ydD8KVGhlIGRvc19jbGsgaXMg YWx3YXlzLW9uIGluIHRoZSBjaGlwLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIGl0IApt YW51YWxseS4KPgo+IFsgLi4uIF0KPgo+PiArc3RhdGljIGludCBwbV92ZGVjX3Bvd2VyX2RvbWFp bl9pbml0KHN0cnVjdCBhbWxfdmRlY19odyAqaHcpCj4+ICt7Cj4+ICsgICAgIGludCBpLCBlcnI7 Cj4+ICsgICAgIGNvbnN0IHN0cnVjdCBwb3dlcl9tYW5hZ2VyX3MgKnBtID0gaHctPnBtOwo+PiAr ICAgICBzdHJ1Y3QgcG1fcGRfcyAqcGQgPSBwbS0+cGRfZGF0YTsKPj4gKwo+PiArICAgICBtdXRl eF9pbml0KCZody0+cG1fbXV0ZXgpOwo+PiArCj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBWREVD X01BWDsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgcGRbaV0uZGV2ID0gZGV2X3BtX2RvbWFpbl9h dHRhY2hfYnlfbmFtZShody0+ZGV2LCBwZFtpXS5uYW1lKTsKPj4gKyAgICAgICAgICAgICBpZiAo SVNfRVJSX09SX05VTEwocGRbaV0uZGV2KSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgZXJy ID0gUFRSX0VSUihwZFtpXS5kZXYpOwo+PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZyho dy0+ZGV2LCAiR2V0ICVzIGZhaWxlZCwgcG0tZG9tYWluOiAlZFxuIiwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGRbaV0ubmFtZSwgZXJyKTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgIHBkW2ldLmRldiA9IE5VTEw7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK Pj4gKyAgICAgICAgICAgICB9Cj4gWyAuLi4gXQo+Cj4+ICtzdGF0aWMgdm9pZCBwbV92ZGVjX3Bv d2VyX2RvbWFpbl9wb3dlcl9vbihzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LCBpbnQgaWQpCj4+ICt7 Cj4+ICsgICAgIGNvbnN0IHN0cnVjdCBwb3dlcl9tYW5hZ2VyX3MgKnBtID0gaHctPnBtOwo+PiAr ICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwbS0+cGRfZGF0YVtpZF0uZGV2Owo+PiArICAgICBz dHJ1Y3QgY2xrX2J1bGtfZGF0YSAqZ2F0ZV9ub2RlID0gTlVMTDsKPj4gKyAgICAgaW50IHJldCA9 IDA7Cj4+ICsKPj4gKyAgICAgaWYgKGlkID09IFZERUMpCj4+ICsgICAgICAgICAgICAgZ2F0ZV9u b2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJ2ZGVjIik7Cj4+ICsgICAgIGVsc2UgaWYg KGlkID09IEhWREVDKQo+PiArICAgICAgICAgICAgIGdhdGVfbm9kZSA9IHZkZWNfZ2V0X2Nsa19i eV9uYW1lKGh3LCAiaHZkZWMiKTsKPj4gKwo+PiArICAgICBpZiAoZ2F0ZV9ub2RlKSB7Cj4+ICsg ICAgICAgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGdhdGVfbm9kZS0+Y2xrKTsKPj4g KyAgICAgICAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJy KGh3LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlICVzIGNsb2NrOiAlZFxuIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2F0ZV9ub2RlLT5pZCwgcmV0KTsKPj4gKyAgICAgICAgICAg ICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAgaWYgKGlkID09IFZERUMpIHsKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrX3NldF9yYXRlKGdhdGVfbm9kZS0+Y2xr LCA0OTk5OTk5OTIpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZGJnKGh3 LT5kZXYsICJhZnRlciBzZXQsIHZkZWMgY2xvY2sgaXMgJWx1IEh6XG4iLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsa19nZXRfcmF0ZShnYXRlX25vZGUtPmNsaykp Owo+PiArICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgICAgICAgZGV2 X2RiZyhody0+ZGV2LCAidGhlICUtMTVzIGNsb2NrIG9uXG4iLCBnYXRlX25vZGUtPmlkKTsKPj4g KyAgICAgICAgICAgICB9Cj4+ICsgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAgZGV2X2lu Zm8oaHctPmRldiwgImNsayAlZCwgdW5yZWFjaGFibGVcbiIsIGlkKTsKPj4gKyAgICAgICAgICAg ICByZXQgPSAtRU5PREVWOwo+PiArICAgICB9Cj4+ICsKPj4gKyAgICAgaWYgKCFyZXQgJiYgZGV2 KSB7Cj4+ICsgICAgICAgICAgICAgcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkZXYp Owo+PiArICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+PiArICAgICAgICAgICAgICAgICAgICAg ZGV2X2Vycihody0+ZGV2LCAiZmFpbGVkIHRvIHBvd2VyIG9uICVzIGRvbWFpbjogJWRcbiIsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLT5wZF9kYXRhW2lkXS5uYW1lLCByZXQp Owo+PiArICAgICAgICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9kYmco ZGV2LCAiZGV2OiAlcCBsaW5rICVwIHRoZSAlLTE1cyBwb3dlciBvblxuIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGV2LCBwbS0+cGRfZGF0YVtpZF0ubGluaywgcG0tPnBkX2Rh dGFbaWRdLm5hbWUpOwo+PiArICAgICB9Cj4+ICsKPj4gKyAgICAgLyoKPj4gKyAgICAgICogRG8g bm90IHRvdWNoIHRoZSBET1MgcmVnaXN0ZXJzIHdoZW4gdGhlIGNsb2NrIG9yIHRoZSBwb3dlcgo+ PiArICAgICAgKiBkb21haW4gY291bGQgbm90IGJlIGVuYWJsZWQsIHRoZSBNTUlPIGFjY2VzcyB3 b3VsZCBhYm9ydC4KPj4gKyAgICAgICovCj4+ICsgICAgIGlmICghcmV0KQo+PiArICAgICAgICAg ICAgIGRvc19sb2NhbF9jb25maWcoaHcsIDEsIGlkKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgcG1fdmRlY19wb3dlcl9kb21haW5fcG93ZXJfb2ZmKHN0cnVjdCBhbWxfdmRlY19odyAqaHcs IGludCBpZCkKPj4gK3sKPj4gKyAgICAgY29uc3Qgc3RydWN0IHBvd2VyX21hbmFnZXJfcyAqcG0g PSBody0+cG07Cj4+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IHBtLT5wZF9kYXRhW2lkXS5k ZXY7Cj4+ICsgICAgIHN0cnVjdCBjbGtfYnVsa19kYXRhICpnYXRlX25vZGUgPSBOVUxMOwo+PiAr Cj4+ICsgICAgIGRvc19sb2NhbF9jb25maWcoaHcsIDAsIGlkKTsKPj4gKwo+PiArICAgICBpZiAo ZGV2KSB7Cj4+ICsgICAgICAgICAgICAgcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwo+PiArICAg ICAgICAgICAgIGRldl9kYmcoZGV2LCAiZGV2OiAlcCBsaW5rICVwIHRoZSAlLTE1cyBwb3dlciBv ZmZcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXYsIHBtLT5wZF9kYXRhW2lkXS5saW5r LCBwbS0+cGRfZGF0YVtpZF0ubmFtZSk7Cj4+ICsgICAgIH0KPj4gKwo+PiArICAgICBpZiAoaWQg PT0gVkRFQykKPj4gKyAgICAgICAgICAgICBnYXRlX25vZGUgPSB2ZGVjX2dldF9jbGtfYnlfbmFt ZShodywgInZkZWMiKTsKPj4gKyAgICAgZWxzZSBpZiAoaWQgPT0gSFZERUMpCj4+ICsgICAgICAg ICAgICAgZ2F0ZV9ub2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJodmRlYyIpOwo+PiAr Cj4+ICsgICAgIGlmIChnYXRlX25vZGUpIHsKPj4gKyAgICAgICAgICAgICBjbGtfZGlzYWJsZV91 bnByZXBhcmUoZ2F0ZV9ub2RlLT5jbGspOwo+PiArICAgICAgICAgICAgIGRldl9kYmcoaHctPmRl diwgInRoZSAlLTE1cyBjbG9jayBvZmZcbiIsIGdhdGVfbm9kZS0+aWQpOwo+PiArICAgICB9IGVs c2Ugewo+PiArICAgICAgICAgICAgIGRldl9pbmZvKGh3LT5kZXYsICJjbGsgJWQsIHVucmVhY2hh YmxlXG4iLCBpZCk7Cj4+ICsgICAgIH0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdmRlY19w b3dlcm9uKHN0cnVjdCBhbWxfdmRlY19odyAqaHcsIGVudW0gdmRlY190eXBlX2UgY29yZSkKPj4g K3sKPj4gKyAgICAgaWYgKGNvcmUgPj0gVkRFQ19NQVgpCj4+ICsgICAgICAgICAgICAgcmV0dXJu Owo+PiArCj4+ICsgICAgIG11dGV4X2xvY2soJmh3LT5wbV9tdXRleCk7Cj4+ICsgICAgIGlmICgh aHctPnBtLT5wZF9kYXRhW2NvcmVdLmRldikKPj4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPj4g Kwo+PiArICAgICBody0+cG0tPnBkX2RhdGFbY29yZV0ucmVmX2NvdW50Kys7Cj4+ICsgICAgIGlm IChody0+cG0tPnBkX2RhdGFbY29yZV0ucmVmX2NvdW50ID4gMSkKPj4gKyAgICAgICAgICAgICBn b3RvIG91dDsKPj4gKwo+PiArICAgICBody0+cG0tPnBvd2VyX29uKGh3LCBjb3JlKTsKPj4gKwo+ PiArb3V0Ogo+PiArICAgICBtdXRleF91bmxvY2soJmh3LT5wbV9tdXRleCk7Cj4+ICt9Cj4gW1Nl dmVyaXR5OiBIaWdoXQo+IFRoZXJlIGFwcGVhciB0byBiZSB0d28gZXJyb3ItaGFuZGxpbmcgaXNz dWVzIGluIHRoZSBwb3dlciBkb21haW4gYW5kIGNsb2NrCj4gaGVscGVycyBoZXJlOgo+Cj4gMS4g SW4gcG1fdmRlY19wb3dlcl9kb21haW5faW5pdCgpLCBpZiBkZXZfcG1fZG9tYWluX2F0dGFjaF9i eV9uYW1lKCkgcmV0dXJucwo+IGFuIGVycm9yIHBvaW50ZXIgKHN1Y2ggYXMgLUVQUk9CRV9ERUZF Uikgb3IgTlVMTCwgcGRbaV0uZGV2IGlzIHNldCB0byBOVUxMIGFuZAo+IHRoZSBsb29wIGNvbnRp bnVlcyB3aGlsZSByZXR1cm5pbmcgMC4gVGhlbiB2ZGVjX3Bvd2Vyb24oKSBzZWVzCj4gIWh3LT5w bS0+cGRfZGF0YVtjb3JlXS5kZXYgYW5kIGV4aXRzIHdpdGhvdXQgZW5hYmxpbmcgdGhlIGNsb2Nr IG9yIHBvd2VyCj4gZG9tYWluLCB3aGlsZSB2ZGVjX2VuYWJsZSgpIHN0aWxsIHJldHVybnMgMC4g V29uJ3Qgc3Vic2VxdWVudCBNTUlPIHdyaXRlcyBpbgo+IG0ybW9wc192ZGVjX2RldmljZV9ydW4o KSAtPiBkb3NfZW5hYmxlKCkgYWNjZXNzIHVucG93ZXJlZCBhbmQgdW5jbG9ja2VkIERPUwo+IHJl Z2lzdGVycz8KPgo+IDIuIEluIHBtX3ZkZWNfcG93ZXJfZG9tYWluX3Bvd2VyX29uKCksIGlmIGNs a19wcmVwYXJlX2VuYWJsZShnYXRlX25vZGUtPmNsaykKPiBzdWNjZWVkcyBhbmQgcG1fcnVudGlt ZV9yZXN1bWVfYW5kX2dldChkZXYpIGZhaWxzLCBnYXRlX25vZGUtPmNsayBpcyBsZWZ0Cj4gZW5h YmxlZCBhbmQgdGhlIGZhaWx1cmUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gdmRlY19wb3dlcm9uKCkg b3IgdmRlY19lbmFibGUoKSwKPiBsZWF2aW5nIHJlZl9jb3VudCBhdCAxLiBXaGVuIHZkZWNfZGlz YWJsZSgpIC0+IHZkZWNfcG93ZXJvZmYoKSAtPgo+IHBtX3ZkZWNfcG93ZXJfZG9tYWluX3Bvd2Vy X29mZigpIGxhdGVyIHJ1bnMsIHdvbid0IGl0IGNhbGwKPiBkb3NfbG9jYWxfY29uZmlnKGh3LCAw LCBpZCkgb24gdGhlIHVucG93ZXJlZCBkb21haW4gYW5kIGNhbGwKPiBwbV9ydW50aW1lX3B1dF9z eW5jKGRldikgZGVzcGl0ZSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KGRldikgaGF2aW5nIGZh aWxlZD8KPgo+IFsgLi4uIF0KClBhcnRpYWxseSBhY2tub3dsZWRnZWQuIFRoZSBwb3dlciBkb21h aW5zIGFyZSBmaXhlZCBTb0MgY29tcG9uZW50cyAKZGVzY3JpYmVkIGluIHRoZSBzYW1lIGR0c2ks IHNvIGRldl9wbV9kb21haW5fYXR0YWNoX2J5X25hbWUoKSBjYW4gb25seSAKZmFpbCBpZiB0aGUg ZGV2aWNlIHRyZWUgaXRzZWxmIGlzIGJyb2tlbjsgdGhlIGZhaWx1cmUgaXMgbG9nZ2VkLgoKV2XC oGtlZXAgdGhlIHRvbGVyYW50IGJlaGF2aW9yIGZvciBub3cuCgo+PiArICAgICBody0+Y2FudmFz ID0gbWVzb25fY2FudmFzX2dldCgmcGRldi0+ZGV2KTsKPj4gKyAgICAgaWYgKElTX0VSUl9PUl9O VUxMKGh3LT5jYW52YXMpKQo+PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGh3LT5jYW52 YXMpOwo+PiArCj4+ICsgICAgIHNtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zf bm9kZSwgImFtbG9naWMsc2VjdXJlLW1vbml0b3IiLCAwKTsKPj4gKyAgICAgaWYgKCFzbV9ucCkK Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiArICAgICBody0+c2VjX2Z3 ID0gbWVzb25fc21fZ2V0KHNtX25wKTsKPj4gKyAgICAgb2Zfbm9kZV9wdXQoc21fbnApOwo+PiAr ICAgICBpZiAoSVNfRVJSKGh3LT5zZWNfZncpKQo+PiArICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKGh3LT5zZWNfZncpOwo+IFtTZXZlcml0eTogSGlnaF0KPiBJbiBkcml2ZXJzL2Zpcm13YXJl L21lc29uL21lc29uX3NtLmMsIG1lc29uX3NtX2dldCgpIHJldHVybnMgTlVMTCAobm90IGFuCj4g RVJSX1BUUikgd2hlbiB0aGUgc2VjdXJlLW1vbml0b3IgcGxhdGZvcm0gZGV2aWNlIGhhcyBub3Qg cHJvYmVkIHlldC4KPgo+IEJlY2F1c2UgSVNfRVJSKE5VTEwpIGlzIGZhbHNlLCBkZXZfcmVxdWVz dF9od19yZXNvdXJjZXMoKSBzdWNjZWVkcyB3aXRoCj4gaHctPnNlY19mdyA9PSBOVUxMIGluc3Rl YWQgb2YgcmV0dXJuaW5nIC1FUFJPQkVfREVGRVIuIFdoZW4gZGVjb2Rpbmcgc3RhcnRzIGluCj4g bTJtb3BzX3ZkZWNfZGV2aWNlX3J1bigpIC0+IGxvYWRfZmlybXdhcmUoKSAtPiBtZXNvbl9zbV9j YWxsKGh3LT5zZWNfZncsIC4uLiksCj4gd29uJ3QgbWVzb25fc21fY2FsbCgpIGRlcmVmZXJlbmNl IGEgTlVMTCBody0+c2VjX2Z3IHBvaW50ZXIgb24gZnctPmNoaXA/Cj4KPiBTaW1pbGFybHksIGFi b3ZlIHRoYXQgY2hlY2ssIGlmIG1lc29uX2NhbnZhc19nZXQoKSB3ZXJlIHRvIHJldHVybiBOVUxM LAo+IGlmIChJU19FUlJfT1JfTlVMTChody0+Y2FudmFzKSkgcmV0dXJuIFBUUl9FUlIoaHctPmNh bnZhcyk7IHdvdWxkIHJldHVybiAwLgo+IFNob3VsZCBody0+Y2FudmFzIHVzZSBJU19FUlIoaHct PmNhbnZhcykgYW5kIGh3LT5zZWNfZncgY2hlY2sgIWh3LT5zZWNfZncgYW5kCj4gcmV0dXJuIC1F UFJPQkVfREVGRVI/Cj4KPiBbIC4uLiBdCkNvcnJlY3Q6IG1lc29uX3NtX2dldCgpIHJldHVybnMg TlVMTCB3aGVuIHRoZSBzZWN1cmUgbW9uaXRvciBpcyBub3QgCnJlZ2lzdGVyZWQgeWV0LiBGaXhl ZCBieSBjaGVja2luZyBmb3IgTlVMTCBhbmQgcmV0dXJuaW5nIC1FUFJPQkVfREVGRVIuCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY190 ZWVfZncuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX3Rl ZV9mdy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjlh ZjllYWU4OGZiODkKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY190ZWVfZncuYwo+IFsgLi4uIF0KPgo+PiArICAgICAv KiBPcGVuIHNlc3Npb24gKi8KPj4gKyAgICAgbWVtY3B5KHNlc3NfYXJnLnV1aWQsIHV1aWQuYiwg VEVFX0lPQ1RMX1VVSURfTEVOKTsKPj4gKyAgICAgc2Vzc19hcmcuY2xudF9sb2dpbiA9IFRFRV9J T0NUTF9MT0dJTl9QVUJMSUM7Cj4+ICsgICAgIHNlc3NfYXJnLm51bV9wYXJhbXMgPSBURUVfUEFS QU1fTlVNOwo+PiArICAgICByZXQgPSB0ZWVfY2xpZW50X29wZW5fc2Vzc2lvbihjdHgsICZzZXNz X2FyZywgcGFyYW1faW5pdCk7Cj4+ICsgICAgIGlmIChyZXQgPCAwIHx8IHNlc3NfYXJnLnJldCAh PSBURUVDX1NVQ0NFU1MpIHsKPj4gKyAgICAgICAgICAgICBkZXZfaW5mbyhody0+ZGV2LAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICIlcyBvcGVuIHNlc3Npb24gZmFpbGVkLCBjbWQgPSAldSwg cmV0ID0gJWQsIHJlcyA9IDB4JXgsIG9yaWdpbiA9IDB4JXhcbiIsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18sIGNtZCwgcmV0LCBzZXNzX2FyZy5yZXQsIHNlc3NfYXJnLnJldF9v cmlnaW4pOwo+PiArICAgICAgICAgICAgIGlmICghcmV0KQo+PiArICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gc2Vzc19hcmcucmV0Owo+PiArICAgICAgICAgICAgIGdvdG8gZnJlZV9zaG07Cj4+ ICsgICAgIH0KPj4gKwo+PiArICAgICBpbnZfYXJnLmZ1bmMgPSBjbWQ7Cj4+ICsgICAgIGludl9h cmcuc2Vzc2lvbiA9IHNlc3NfYXJnLnNlc3Npb247Cj4+ICsgICAgIGludl9hcmcubnVtX3BhcmFt cyA9IFRFRV9QQVJBTV9OVU07Cj4+ICsKPj4gKyAgICAgd2hpbGUgKHNlbnRfc2l6ZSA8IGZ3X3Np emUpIHsKPj4gKyAgICAgICAgICAgICBtZW1zZXQoc2htX3ZhLCAwLCBPTkNFX1NFTlRfU0laRSk7 Cj4+ICsgICAgICAgICAgICAgaWYgKGZ3X3NpemUgLSBzZW50X3NpemUgPiBPTkNFX1NFTlRfU0la RSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHNobV92YSwgKGZpcm13YXJlX2Rh dGEgKyBzZW50X3NpemUpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OQ0VfU0VO VF9TSVpFKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtX2ludm9rZVswXS51Lm1lbXJl Zi5zaXplID0gT05DRV9TRU5UX1NJWkU7Cj4+ICsgICAgICAgICAgICAgfSBlbHNlIHsKPj4gKyAg ICAgICAgICAgICAgICAgICAgIG1lbWNweShzaG1fdmEsIChmaXJtd2FyZV9kYXRhICsgc2VudF9z aXplKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd19zaXplIC0gc2VudF9zaXpl KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtX2ludm9rZVswXS51Lm1lbXJlZi5zaXpl ID0gKGZ3X3NpemUgLSBzZW50X3NpemUpOwo+PiArICAgICAgICAgICAgIH0KPj4gKyAgICAgICAg ICAgICBwYXJhbV9pbnZva2VbMF0udS5tZW1yZWYuc2htID0gc2htOwo+PiArICAgICAgICAgICAg IHJldCA9IHRlZV9jbGllbnRfaW52b2tlX2Z1bmMoY3R4LCAmaW52X2FyZywgcGFyYW1faW52b2tl KTsKPj4gKyAgICAgICAgICAgICBpZiAocmV0IDwgMCB8fCAoaW52X2FyZy5yZXQgIT0gVEVFQ19T VUNDRVNTICYmIGludl9hcmcucmV0ICE9IFRFRUNfRVJST1JfQlVTWSkpIHsKPj4gKyAgICAgICAg ICAgICAgICAgICAgIGRldl9pbmZvKGh3LT5kZXYsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiJXMgaW52b2tlIGZ1bmMgZmFpbGVkLCBjbWQgPSAldSwgcmV0PSAlZCwgcmVzID0g MHgleCwgb3JpZ2luID0gMHgleFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCBjbWQsIHJldCwgaW52X2FyZy5yZXQsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnZfYXJnLnJldF9vcmlnaW4pOwo+PiArICAgICAgICAgICAgICAgICAgICAg aWYgKCFyZXQpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGludl9hcmcu cmV0Owo+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBjbG9zZV9zZXNzaW9uOwo+PiArICAg ICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICBzZW50X3NpemUgKz0gcGFyYW1faW52b2tlWzBd LnUubWVtcmVmLnNpemU7Cj4+ICsgICAgIH0KPiBbIC4uLiBdCj4KPj4gKyAgICAgY3R4ID0gdGVl X2NsaWVudF9vcGVuX2NvbnRleHQoTlVMTCwgb3B0ZWVfY3R4X21hdGNoLCBOVUxMLCBOVUxMKTsK Pj4gKyAgICAgaWYgKElTX0VSUihjdHgpKSB7Cj4+ICsgICAgICAgICAgICAgZGV2X2luZm8oaHct PmRldiwgIkZhaWxlZCB0byBvcGVuIFRFRSBjb250ZXh0XG4iKTsKPj4gKyAgICAgICAgICAgICBy ZXQgPSBQVFJfRVJSKGN0eCk7Cj4+ICsgICAgICAgICAgICAgZ290byBmcmVlX2Zpcm13YXJlOwo+ PiArICAgICB9Cj4gW1NldmVyaXR5OiBIaWdoXQo+IEluIGFtbF92ZGVjX2Rydl9wcm9iZSgpIC0+ IGRldl9yZXF1ZXN0X2h3X3Jlc291cmNlcygpIC0+IGFtbF90ZWVfZndfcHJlbG9hZCgpCj4gLT4g cGFzc19maXJtd2FyZV90b190ZWUoKToKPgo+IDEuIFdoZW4gdGhlIE9QLVRFRSBkcml2ZXIgaGFz IG5vdCByZWdpc3RlcmVkIGl0cyBURUUgZGV2aWNlIHlldCwKPiB0ZWVfY2xpZW50X29wZW5fY29u dGV4dCgpIHJldHVybnMgRVJSX1BUUigtRU5PRU5UKS4gUHJvcGFnYXRpbmcgLUVOT0VOVCBjYXVz ZXMKPiBhbWxfdmRlY19kcnZfcHJvYmUoKSB0byBmYWlsIHBlcm1hbmVudGx5IGluc3RlYWQgb2Yg ZGVmZXJyaW5nIHByb2JlIHdpdGgKPiAtRVBST0JFX0RFRkVSLgpjb3JyZWN0LCBmaXhlZCBieSBt YXBwaW5nIGl0IHRvIC1FUFJPQkVfREVGRVIKPiAyLiBJbiB0ZWVfcHRhX2ludm9rZV9jbWQoKSwg d2hlbiB0ZWVfY2xpZW50X29wZW5fc2Vzc2lvbigpIG9yCj4gdGVlX2NsaWVudF9pbnZva2VfZnVu YygpIHJldHVybnMgMCB3aXRoIHNlc3NfYXJnLnJldCAhPSBURUVDX1NVQ0NFU1Mgb3IKPiBpbnZf YXJnLnJldCAhPSBURUVDX1NVQ0NFU1MsIHJldCBpcyBhc3NpZ25lZCB0aGUgcmF3IHUzMiBURUVD IHN0YXR1cyBjb2RlCj4gcmF0aGVyIHRoYW4gYSBuZWdhdGl2ZSBlcnJubyAod2hpY2ggYW1sX3Zk ZWNfZHJ2X3Byb2JlKCkgb25seSBjaGVja3MgZm9yCj4gcmV0IDwgMCkuCk5vdCBhIGZ1bmN0aW9u YWwgYnVnLiBURUVDIGVycm9yIGNvZGVzIGFyZSAweEZGRkYwMHh4IHZhbHVlcywgd2hpY2ggYXJl IApuZWdhdGl2ZSB3aGVuIHN0b3JlZCBpbiBhbiBpbnQsIHNvIHRoZSByZXQgPCAwIGNoZWNrcyBp biB0aGUgcHJvYmUgY2hhaW4gCmRvIHRha2UgZWZmZWN0Lgo+Cj4gMy4gSW4gdGVlX3B0YV9pbnZv a2VfY21kKCksIHdoZW4gaW52X2FyZy5yZXQgPT0gVEVFQ19FUlJPUl9CVVNZLCB0aGUgZXJyb3IK PiBicmFuY2ggaXMgc2tpcHBlZCBhbmQgc2VudF9zaXplICs9IHBhcmFtX2ludm9rZVswXS51Lm1l bXJlZi5zaXplIGFkdmFuY2VzIHBhc3QKPiB0aGUgY3VycmVudCAxMjggS0IgY2h1bmsgd2l0aG91 dCByZXRyeWluZyBpdC4gV29uJ3QgdGhpcyBzaWxlbnRseSBkcm9wIGEKPiBjaHVuayBvZiBmaXJt d2FyZSBkYXRhPwpUaGUgZXJyIGNvZGUgVEVFQ19FUlJPUl9CVVNZIG1lYW5zIHRoYXQgdGhlIGRh dGEgdHJhbnNmZXIgaGFzIG5vdCB5ZXQgCmNvbXBsZXRlZC4gSW4gZmFjdCB0aGUgd2hvbGUgZmly bXdhcmUgbmVlZHMgdG8gYmUgc2VwYXJhdGVkIGludG8gdGhyZWUgCnBhcnRzLiBJZiB0aGUgdHJh bnNmZXIgaXMgaW5jb21wbGV0ZSwgVEVFQ19FUlJPUl9CVVNZIGlzIHJldHVybmVkIGFmdGVyIApl YWNoIG91dHB1dCBwYWNrZXQgdHJhbnNmZXIsIHNvIHVwb24gZGV0ZWN0aW5nIFRFRUNfRVJST1Jf QlVTWSB0aGUgCnRyYW5zZmVyIG11c3QgY29udGludWUuIFRoaXMgaXMgbmVjZXNzYXJ5Lgo+Cj4g WyAuLi4gXQo+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv dmRlYy9oMjY0LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMK Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uN2VjN2FmNzNk NDRjNwo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1s b2dpYy92ZGVjL2gyNjQuYwo+IFsgLi4uIF0KPgo+PiArc3RhdGljIGludCBwb2NfaXNfaW5fZHBi KGludCBwb2MsIGNvbnN0IHN0cnVjdCB2NGwyX2gyNjRfZHBiX2VudHJ5ICpkcGIpCj4+ICt7Cj4+ ICsgICAgIGludCBpOwo+PiArICAgICBpbnQgcmV0ID0gMDsKPj4gKwo+PiArICAgICBmb3IgKGkg PSAwOyBpIDwgVjRMMl9IMjY0X05VTV9EUEJfRU5UUklFUzsgaSsrKSB7Cj4+ICsgICAgICAgICAg ICAgaWYgKHBvYyA9PSBkcGJbaV0udG9wX2ZpZWxkX29yZGVyX2NudCkgewo+PiArICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gMTsKPj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiAr ICAgICAgICAgICAgIH0KPj4gKyAgICAgfQo+PiArCj4+ICsgICAgIHJldHVybiByZXQ7Cj4+ICt9 Cj4gW1NldmVyaXR5OiBIaWdoXQo+IEluIHBvY19pc19pbl9kcGIoKSwgZHBiW2ldLnRvcF9maWVs ZF9vcmRlcl9jbnQgaXMgbWF0Y2hlZCBhY3Jvc3MgYWxsIDE2Cj4gZW50cmllcyBvZiBkcGJbXSB3 aXRob3V0IGNoZWNraW5nIGRwYltpXS5mbGFncyAmIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19B Q1RJVkUuCj4gVGhlIHNhbWUgaXNzdWUgYWxzbyBvY2N1cnMgaW4gZ2V0X2RwYl9ieV9wb2MoKSBm dXJ0aGVyIGJlbG93Ogo+Cj4gICAgICBzdGF0aWMgc3RydWN0IHY0bDJfaDI2NF9kcGJfZW50cnkg Kgo+ICAgICAgZ2V0X2RwYl9ieV9wb2Moc3RydWN0IHY0bDJfY3RybF9oMjY0X2RlY29kZV9wYXJh bXMgKmRlY29kZSwgaW50IHBvYykKPiAgICAgIHsKPiAgICAgICAgICBpbnQgaTsKPgo+ICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBWNEwyX0gyNjRfTlVNX0RQQl9FTlRSSUVTOyBpKyspIHsKPiAg ICAgICAgICAgICAgaWYgKGRlY29kZS0+ZHBiW2ldLnRvcF9maWVsZF9vcmRlcl9jbnQgPT0gcG9j KQo+ICAgICAgICAgICAgICAgICAgcmV0dXJuICZkZWNvZGUtPmRwYltpXTsKPiAgICAgICAgICB9 Cj4gICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gICAgICB9Cj4KPiBCZWNhdXNlIHVudXNlZCBEUEIg ZW50cmllcyBoYXZlIGZsYWdzID09IDAgYW5kIHRvcF9maWVsZF9vcmRlcl9jbnQgPT0gMCAoYW5k Cj4gZXZpY3RlZCBlbnRyaWVzIG1heSByZXRhaW4gdGhlaXIgc3RhbGUgdG9wX2ZpZWxkX29yZGVy X2NudCB3aXRoIHRoZSBhY3RpdmUKPiBmbGFnIGNsZWFyZWQpOgo+Cj4gMS4gSW4gaDI2NF9jb25m aWdfZGVjb2RlX3NwZWMoKSAtPiBjbGVhcl91bnVzZWRfY29sX2J1ZigpLCBwb2NfaXNfaW5fZHBi KCkKPiBtYXRjaGVzIGluYWN0aXZlIERQQiBzbG90cywgcHJldmVudGluZyBjYW52YXNfcG9zIGFu ZCBjb2xvY2F0ZWRfYnVmIHNsb3RzIGZyb20KPiBiZWluZyByZWxlYXNlZCBvbiBub24tSURSIGZy YW1lcyBhbmQgZXhoYXVzdGluZyB0aGUgMTcgY2FudmFzX3BvcyBzbG90cwo+IChlc3BlY2lhbGx5 IG9uIG11bHRpLXNsaWNlIGZyYW1lcyB3aGVyZSBoMjY0X2NvbmZpZ19kZWNvZGVfc3BlYygpIGlz IGNhbGxlZCBvbgo+IGV2ZXJ5IHNsaWNlKS4KPgo+IDIuIEluIGgyNjRfY29uZmlnX2RlY29kZV9i dWYoKSwgaWYgYW4gaW5hY3RpdmUgRFBCIHNsb3Qgd2l0aAo+IHRvcF9maWVsZF9vcmRlcl9jbnQg PT0gMCBwcmVjZWRlcyBhbiBhY3RpdmUgcmVmZXJlbmNlIHBpY3R1cmUgd2l0aCBQT0MgMCwKPiBn ZXRfZHBiX2J5X3BvYyhkZWNvZGUsIDApIHJldHVybnMgdGhlIGluYWN0aXZlIHNsb3QsIHNvCj4g aWYgKGRwYiAmJiAoZHBiLT5mbGFncyAmIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19BQ1RJVkUp KSBldmFsdWF0ZXMgdG8gZmFsc2UKPiBhbmQgd3JpdGVzIDAgaW50byBIMjY0X0JVRkZFUl9JTkZP X0RBVEEgZm9yIHRoZSBhY3RpdmUgcmVmZXJlbmNlIGZyYW1lLgo+Cj4gU2hvdWxkIGJvdGggcG9j X2lzX2luX2RwYigpIGFuZCBnZXRfZHBiX2J5X3BvYygpIHJlcXVpcmUKPiAoZHBiW2ldLmZsYWdz ICYgVjRMMl9IMjY0X0RQQl9FTlRSWV9GTEFHX0FDVElWRSk/Ck5vLCBpZiB0aGUgZnJhbWUgaXMg bm8gbG9uZ2VyIHVzZWQgYXMgYSByZWYgZnJhbWUgYnV0IHN0aWxsIGluIERQQiwgdGhlIApWNEwy X0gyNjRfRFBCX0VOVFJZX0ZMQUdfQUNUSVZFIHByb2JhYmx5IGJlIDAuIElmIGNvbmRpdGlvbiBp cyBhZGRlZCwgCnRoZXNlIGZyYW1lcyB3aWxsIG1pc3NlZC4KPgo+IFsgLi4uIF0KPgo+PiArc3Rh dGljIGludCBnZXRfcmVmaWR4X2J5X3BpY251bShzdHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0 eCwgaW50IHBpY19udW0sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJy X2xpc3QpCj4+ICt7Cj4+ICsgICAgIGludCBpOwo+PiArICAgICBzdHJ1Y3QgaDI2NF9kZWNvZGVf YnVmX3NwZWMgKnJlZl9saXN0Owo+PiArCj4+ICsgICAgIGlmIChjdXJyX2xpc3QgPT0gMCkKPj4g KyAgICAgICAgICAgICByZWZfbGlzdCA9ICZoMjY0X2N0eC0+cmVmX2xpc3QwWzBdOwo+PiArICAg ICBlbHNlCj4+ICsgICAgICAgICAgICAgcmVmX2xpc3QgPSAmaDI2NF9jdHgtPnJlZl9saXN0MVsw XTsKPj4gKwo+PiArICAgICBmb3IgKGkgPSAwOyByZWZfbGlzdFtpXS5kcGI7IGkrKykgewo+PiAr ICAgICAgICAgICAgIGlmIChwaWNfbnVtID09IHJlZl9saXN0W2ldLmRwYi0+cGljX251bSkKPj4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwo+PiArICAgICB9Cj4+ICsKPj4gKyAgICAg cmV0dXJuIC0xOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGgyNjRfZGVjb2RlX2J1Zl9z cGVjICpnZXRfc3RfcmVmcGljX2J5X251bShzdHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBwaWNfbnVtLCBpbnQgY3Vycl9saXN0KQo+PiArewo+PiArICAgICBpbnQgaTsKPj4gKyAg ICAgc3RydWN0IGgyNjRfZGVjb2RlX2J1Zl9zcGVjICpyZWZfbGlzdDsKPj4gKwo+PiArICAgICBp ZiAoY3Vycl9saXN0ID09IDApCj4+ICsgICAgICAgICAgICAgcmVmX2xpc3QgPSAmaDI2NF9jdHgt PnJlZl9saXN0MF91bnJlb3JkZXJlZFswXTsKPj4gKyAgICAgZWxzZQo+PiArICAgICAgICAgICAg IHJlZl9saXN0ID0gJmgyNjRfY3R4LT5yZWZfbGlzdDFfdW5yZW9yZGVyZWRbMF07Cj4+ICsKPj4g KyAgICAgZm9yIChpID0gMDsgcmVmX2xpc3RbaV0uZHBiOyBpKyspIHsKPj4gKyAgICAgICAgICAg ICBpZiAocGljX251bSA9PSByZWZfbGlzdFtpXS5kcGItPnBpY19udW0gJiYgcmVmX2xpc3RbaV0u bG9uZ190ZXJtX2ZsYWcgPT0gMCkKPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAmcmVm X2xpc3RbaV07Cj4+ICsgICAgIH0KPj4gKwo+PiArICAgICByZXR1cm4gTlVMTDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqZ2V0X2x0X3JlZnBpY19i eV9udW0oc3RydWN0IGFtbF9oMjY0X2N0eCAqaDI2NF9jdHgsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGljX251bSwgaW50IGN1 cnJfbGlzdCkKPj4gK3sKPj4gKyAgICAgaW50IGk7Cj4+ICsgICAgIHN0cnVjdCBoMjY0X2RlY29k ZV9idWZfc3BlYyAqcmVmX2xpc3Q7Cj4+ICsKPj4gKyAgICAgaWYgKGN1cnJfbGlzdCA9PSAwKQo+ PiArICAgICAgICAgICAgIHJlZl9saXN0ID0gJmgyNjRfY3R4LT5yZWZfbGlzdDBfdW5yZW9yZGVy ZWRbMF07Cj4+ICsgICAgIGVsc2UKPj4gKyAgICAgICAgICAgICByZWZfbGlzdCA9ICZoMjY0X2N0 eC0+cmVmX2xpc3QxX3VucmVvcmRlcmVkWzBdOwo+PiArCj4+ICsgICAgIGZvciAoaSA9IDA7IHJl Zl9saXN0W2ldLmRwYjsgaSsrKSB7Cj4+ICsgICAgICAgICAgICAgaWYgKHBpY19udW0gPT0gcmVm X2xpc3RbaV0uZHBiLT5waWNfbnVtICYmIHJlZl9saXN0W2ldLmxvbmdfdGVybV9mbGFnID09IDEp Cj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJnJlZl9saXN0W2ldOwo+PiArICAgICB9 Cj4+ICsKPj4gKyAgICAgcmV0dXJuIE5VTEw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJl b3JkZXJfc2hvcnRfdGVybShzdHJ1Y3Qgc2xpY2UgKmN1cnJfc2xpY2UsIGludCBjdXJfbGlzdCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGljX251bV9seCwgaW50ICpyZWZf aWR4X2x4KQo+PiArewo+IFsgLi4uIF0KPgo+PiArICAgICBmb3IgKGNfaWR4ID0gbnVtX3JlZl9p ZHhfbHhfYWN0aXZlOyBjX2lkeCA+ICpyZWZfaWR4X2x4OyBjX2lkeC0tKQo+PiArICAgICAgICAg ICAgIG1lbWNweSgmcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XSwgJnJlZl9saXN0X3Jlb3JkZXJl ZFtjX2lkeCAtIDFdLAo+PiArICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGgyNjRf ZGVjb2RlX2J1Zl9zcGVjKSk7Cj4+ICsKPj4gKyAgICAgbWVtY3B5KCZyZWZfbGlzdF9yZW9yZGVy ZWRbKnJlZl9pZHhfbHhdLCBwaWNfbHgsIHNpemVvZihzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3Nw ZWMpKTsKPj4gKyAgICAgZGV2X2RiZygmY3R4LT5kZXYtPnBsYXRfZGV2LT5kZXYsICIlcyA6IFJl ZlBpY0xpc3RYWyVkIF0gPSBwaWMgJXAgcGljX251bSglZClcbiIsIF9fZnVuY19fLAo+PiArICAg ICAgICAgICAgICpyZWZfaWR4X2x4LCBwaWNfbHgsIHJlZl9saXN0X3Jlb3JkZXJlZFsqcmVmX2lk eF9seF0uZHBiLT5waWNfbnVtKTsKPj4gKyAgICAgKnJlZl9pZHhfbHggPSAqcmVmX2lkeF9seCAr IDE7Cj4+ICsKPj4gKyAgICAgbl9pZHggPSAqcmVmX2lkeF9seDsKPj4gKyAgICAgZm9yIChjX2lk eCA9ICpyZWZfaWR4X2x4OyBjX2lkeCA8PSBudW1fcmVmX2lkeF9seF9hY3RpdmU7IGNfaWR4Kysp IHsKPj4gKyAgICAgICAgICAgICBpZiAocmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XS5sb25nX3Rl cm1fZmxhZyB8fCAhcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XS5kcGIgfHwKPj4gKyAgICAgICAg ICAgICAgICAgcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XS5kcGItPnBpY19udW0gIT0gcGljX251 bV9seCkKPj4gKyAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcmVmX2xpc3RfcmVvcmRlcmVk W25faWR4KytdLCAmcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XSwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGgyNjRfZGVjb2RlX2J1Zl9zcGVjKSk7Cj4+ICsg ICAgIH0KPj4gKwo+PiArICAgICBoMjY0X2N0eC0+bGlzdF9zaXplW2N1cl9saXN0XSA9IG51bV9y ZWZfaWR4X2x4X2FjdGl2ZTsKPj4gK30KPiBbU2V2ZXJpdHk6IENyaXRpY2FsXQo+IENhbiByZWZl cmVuY2UgbGlzdCByZW9yZGVyaW5nIGFuZCBjYW52YXMgYWxsb2NhdGlvbiByZWFkIG91dCBvZiBi b3VuZHMsCj4gZGVyZWZlcmVuY2UgYSBOVUxMIGRwYiBwb2ludGVyLCBhbmQgbGVhayBoYXJkd2Fy ZSBjYW52YXNlcz8KPgo+IDEuIEluIHJlb3JkZXJfc2hvcnRfdGVybSgpIGFuZCByZW9yZGVyX2xv bmdfdGVybSgpLCB3aGVuCj4gbnVtX3JlZl9pZHhfbHhfYWN0aXZlID09IDE2IChWNEwyX0gyNjRf TlVNX0RQQl9FTlRSSUVTKSwgdGhlIHNoaWZ0IGxvb3AgY29waWVzCj4gcmVmX2xpc3RbMTVdIGlu dG8gcmVmX2xpc3RbMTZdIGFuZCBzZXRzIGxpc3Rfc2l6ZVtjdXJfbGlzdF0gPSAxNi4gQmVjYXVz ZQo+IGgyNjRfcmVsZWFzZV9kZWNvZGVfc3BlYygpIG9ubHkgY2xlYXJzIGluZGljZXMgMCAuLiBs aXN0X3NpemVbY3VyX2xpc3RdIC0gMSwKPiByZWZfbGlzdFsxNl0uZHBiIHJlbWFpbnMgbm9uLU5V TEwuIE9uIGEgc3Vic2VxdWVudCBjYWxsIHdoZXJlCj4gcmVmX2xpc3RbMC4uMTZdLmRwYiBhcmUg YWxsIG5vbi1OVUxMLCB0aGUgbG9vcHMgaW4gZ2V0X3JlZmlkeF9ieV9waWNudW0oKSwKPiBnZXRf c3RfcmVmcGljX2J5X251bSgpLCBhbmQgZ2V0X2x0X3JlZnBpY19ieV9udW0oKSBoYXZlIG5vIHVw cGVyIGJvdW5kIG9uIGkKPiBhbmQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgcmVmX2xpc3QwW10gLyBy ZWZfbGlzdDFbXS4KPgo+IDIuIFdoZW4gbnVtX3JlZl9pZHhfbHhfYWN0aXZlIGV4Y2VlZHMgdGhl IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGJ1aWx0IGJ5Cj4gaDI2NF9jb25maWdfcmVmX2xpc3Rz KCkgKG9yIHdoZW4gaDI2NF9jb25maWdfcmVmX3NwZWMoKSBmYWlscyBvbiBhbiBlbnRyeSksCj4g cmVvcmRlcl9zaG9ydF90ZXJtKCkgYW5kIHJlb3JkZXJfbG9uZ190ZXJtKCkgc2V0Cj4gaDI2NF9j dHgtPmxpc3Rfc2l6ZVtjdXJfbGlzdF0gPSBudW1fcmVmX2lkeF9seF9hY3RpdmUuIFRoZW4gZ2V0 X2NhbnZhc19pbmRleCgpCj4gYWxsb2NhdGVzIGhhcmR3YXJlIGNhbnZhc2VzIHZpYSBjb25maWdf ZGVjb2RlX2NhbnZhcygpIGZvciBldmVyeSBlbnRyeSB1cCB0bwo+IGxpc3Rfc2l6ZVtjdXJfbGlz dF0gd2l0aG91dCBjaGVja2luZyBidWYtPnVzZWQgb3IgYnVmLT52YWxpZCAoYWxzbyB3cml0aW5n IERNQQo+IGFkZHJlc3MgMCB0byBBTkMwX0NBTlZBU19BRERSIGZvciBjYW52YXNfcG9zIDApLCB3 aGVyZWFzCj4gaDI2NF9yZWxlYXNlX2RlY29kZV9zcGVjKCkgb25seSBmcmVlcyBjYW52YXNlcyB3 aGVuIGlmIChidWYtPnVzZWQpIGlzIHRydWUsCj4gcGVybWFuZW50bHkgbGVha2luZyBjYW52YXNl cyBmcm9tIHRoZSBtZXNvbl9jYW52YXMgcG9vbC4gSW4gYWRkaXRpb24sIGluCj4gaDI2NF90aHJl YWRlZF9pc3JfZnVuYygpLCBoMjY0X3JlbGVhc2VfZGVjb2RlX3NwZWMoKSBpcyBvbmx5IGNhbGxl ZCBiZWZvcmUKPiBnZXRfY2FudmFzX2luZGV4KCkgd2hlbiBmaXJzdF9tYl9pbl9zbGljZSAhPSAw LCBzbyBhIHNlY29uZAo+IEgyNjRfU0xJQ0VfSEVBREVSX0RPTkUgaW50ZXJydXB0IHdpdGggZmly c3RfbWJfaW5fc2xpY2UgPT0gMCBsZWFrcyB0aGUKPiBjYW52YXNlcyBhbGxvY2F0ZWQgZm9yIHRo ZSBmaXJzdCBzbGljZS4KPgo+IDMuIEluIGgyNjRfY29uZmlnX2RlY29kZV9idWYoKSwgd2hlbiBo MjY0X2N0eC0+bGlzdF9zaXplWzFdID4gMCwKPiBjb2xvY2F0ZV9waWMgPSAmaDI2NF9jdHgtPnJl Zl9saXN0MVswXSBkZXJlZmVyZW5jZXMKPiBjb2xvY2F0ZV9waWMtPmRwYi0+dG9wX2ZpZWxkX29y ZGVyX2NudCB3aXRob3V0IGNoZWNraW5nIGNvbG9jYXRlX3BpYy0+dmFsaWQgb3IKPiBjb2xvY2F0 ZV9waWMtPmRwYiAhPSBOVUxMLgo+Cj4gWyAuLi4gXQpUaGUgc2FtZSBhcyBwYXRjaCB2MTIgNi82 Lgo+Cj4+ICsgICAgIHJlYWRfcG9sbF90aW1lb3V0KHJlYWRfZG9zX3JlZywgcmVnX3ZhbCwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgIShyZWdfdmFsICYgMHg4MDApLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAxMCwgMCwgdHJ1ZSwgaHcsIEgyNjRfQ09fTUJfUldfQ1RMKTsKPiBbU2V2 ZXJpdHk6IEhpZ2hdCj4gSW4gaDI2NF9jb25maWdfZGVjb2RlX2J1ZigpLCByZWFkX3BvbGxfdGlt ZW91dCgpIGlzIGNhbGxlZCB3aXRoIHRpbWVvdXRfdXMgPSAwCj4gd2hpbGUgdmRlY190aHJlYWRl ZF9pc3JfaGFuZGxlcigpIGhvbGRzIGh3LT5jdHhfbXV0ZXguCj4KPiBTaW5jZSB0aW1lb3V0X3Vz ID0gMCBwb2xscyBpbmRlZmluaXRlbHkgaW4gcmVhZF9wb2xsX3RpbWVvdXQoKSwgaWYgYml0IDEx Cj4gKDB4ODAwKSBvZiBIMjY0X0NPX01CX1JXX0NUTCBkb2VzIG5vdCBjbGVhciwgd29uJ3QgdmRl Y190aHJlYWRlZF9pc3JfaGFuZGxlcigpCj4gc3BpbiBmb3JldmVyIHVuZGVyIGh3LT5jdHhfbXV0 ZXggYW5kIGNhdXNlIGFtbF9oMjY0X2RlY19ydW4oKSB0byBkZWFkbG9jayBvbgo+IG11dGV4X2xv Y2soJmRlY19ody0+Y3R4X211dGV4KSB3aGVuIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1l b3V0KCkKPiBleHBpcmVzPwpZZXMsIHRoZSByZWFkX3BvbGxfdGltZW91dCBzaG91bGQgYmUgZ2l2 ZW4gYSB0aW1lb3V0IHZhbHVlLiBJZiB0aW1lb3V0IApoYXBwZW5zLCBqdXN0IGlnbm9yZSB0aGUg ZXJyb3IgcmVnaXN0ZXIgc3RhdGUgYW5kIGNvbnRpbnVlIGRlY29kaW5nLgo+Cj4+ICsKPj4gKyAg ICAgLyogY29sIGJ1ZiBmb3IgY3VyciBmcmFtZSAqLwo+PiArICAgICBjb2xvY2F0ZV9hZHJfb2Zm c2V0ID0gQ09MX1NJWkVfRk9SX09ORV9NQjsKPj4gKyAgICAgaWYgKHVzZV9tb2RlXzh4OF9mbGFn KQo+PiArICAgICAgICAgICAgIGNvbG9jYXRlX2Fkcl9vZmZzZXQgPj49IDI7Cj4+ICsgICAgIGNv bG9jYXRlX2Fkcl9vZmZzZXQgKj0gY3Vycl9zbGljZS0+Zmlyc3RfbWJfaW5fc2xpY2U7Cj4+ICsK Pj4gKyAgICAgaWYgKGgyNjRfY3R4LT5jdXJyX3NwZWMuY29sX2J1Zl9pbmRleCA+PSAwICYmCj4+ ICsgICAgICAgICBoMjY0X2N0eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXggPCBoMjY0X2N0eC0+ Y29sb2NhdGVkX2J1Zl9udW0pIHsKPj4gKyAgICAgICAgIC8qIGNvbGxhdGVkX2NtYV9hZGRyIGlz IGxpbWl0ZWQgdG8gMzJiaXQgYnkgZmxhZyBHRlBfRE1BMzIgd2hlbiBhbGxvY2F0ZWQgKi8KPj4g KyAgICAgICAgICAgICBjb2xvY2F0ZV93cl9hZHIgPSAodW5zaWduZWQgaW50KWgyNjRfY3R4LT5j b2xsYXRlZF9jbWFfYWRkciArCj4+ICsgICAgICAgICAgICAgICAgICgoaDI2NF9jdHgtPm9uZV9j b2xfYnVmX3NpemUgKgo+PiArICAgICAgICAgICAgICAgICAgIGgyNjRfY3R4LT5jdXJyX3NwZWMu Y29sX2J1Zl9pbmRleCkgPj4gKHVzZV9tb2RlXzh4OF9mbGFnID8gMiA6IDApKTsKPj4gKyAgICAg ICAgICAgICBpZiAoY29sb2NhdGVfYWRyX29mZnNldCA+IGgyNjRfY3R4LT5vbmVfY29sX2J1Zl9z aXplIHx8Cj4+ICsgICAgICAgICAgICAgICAgIGNvbG9jYXRlX3dyX2FkciArIGgyNjRfY3R4LT5v bmVfY29sX2J1Zl9zaXplID4KPj4gKyAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCloMjY0 X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHJfZW5kKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfZXJyKGh3LT5kZXYsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciwg Y29sb2NhdGUgYnVmIGlzIG5vdCBlbm91Z2gsIGluZGV4IGlzICVkXG4iLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoMjY0X2N0eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXgpOwo+ PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+PiArICAgICAgICAgICAgIH0KPj4g KyAgICAgICAgICAgICByZWdtYXBfd3JpdGUoaHctPm1hcFtET1NfQlVTXSwgSDI2NF9DT19NQl9X Ul9BRERSLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sb2NhdGVfd3JfYWRyICsg Y29sb2NhdGVfYWRyX29mZnNldCkpOwo+PiArICAgICAgICAgICAgIGRldl9kYmcoaHctPmRldiwg ImNvbCBidWZmZXIgYWRkciA9IDB4JXggY29sX2J1Zl9pbmRleCAlZFxuIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgIChjb2xvY2F0ZV93cl9hZHIgKyBjb2xvY2F0ZV9hZHJfb2Zmc2V0KSwKPj4g KyAgICAgICAgICAgICAgICAgICAgIGgyNjRfY3R4LT5jdXJyX3NwZWMuY29sX2J1Zl9pbmRleCk7 Cj4+ICsgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAgcmVnbWFwX3dyaXRlKGh3LT5tYXBb RE9TX0JVU10sIEgyNjRfQ09fTUJfV1JfQUREUiwgMHhmZmZmZmZmZik7Cj4+ICsgICAgICAgICAg ICAgZGV2X2RiZyhody0+ZGV2LCAiY29sIGJ1ZmZlciBhZGRyID0gMHhmZmZmZmZmZlxuIik7Cj4+ ICsgICAgIH0KPj4gKwo+PiArICAgICBpZiAoaDI2NF9jdHgtPmxpc3Rfc2l6ZVsxXSA+IDApIHsK Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMgKmNvbG9jYXRlX3Bp YyA9Cj4+ICsgICAgICAgICAgICAgICAgICZoMjY0X2N0eC0+cmVmX2xpc3QxWzBdOwo+PiArICAg ICAgICAgICAgIHN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqY3Vycl9waWMgPSAmaDI2NF9j dHgtPmN1cnJfc3BlYzsKPj4gKyAgICAgICAgICAgICBpbnQgbDEwX3N0cnVjdHVyZSA9IDI7ICAv KiBmb3IgcGljIHN0cnVjdCA9PSBGUkFNRSwgZGVmYXVsdCB0byAyICovCj4+ICsgICAgICAgICAg ICAgaW50IGN1cl9jb2xvY2F0ZV9yZWZfdHlwZTsKPj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgY29sb2NhdGVfcmRfYWRyOwo+PiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb2xvY2F0 ZV9yZF9hZHJfb2Zmc2V0ID0gMDsKPj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmFsOwo+ PiArCj4+ICsgICAgICAgICAgICAgY3VyX2NvbG9jYXRlX3JlZl90eXBlID0KPj4gKyAgICAgICAg ICAgICAgICAgKGFicyhjdXJyX3BpYy0+cG9jIC0gY29sb2NhdGVfcGljLT5kcGItPnRvcF9maWVs ZF9vcmRlcl9jbnQpIDwKPj4gKyAgICAgICAgICAgICAgICAgIGFicyhjdXJyX3BpYy0+cG9jIC0g Y29sb2NhdGVfcGljLT5kcGItPmJvdHRvbV9maWVsZF9vcmRlcl9jbnQpKSA/IDAgOiAxOwo+PiAr ICAgICAgICAgICAgIGNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQgPSBDT0xfU0laRV9GT1JfT05FX01C Owo+PiArICAgICAgICAgICAgIGlmICh1c2VfbW9kZV84eDhfZmxhZykKPj4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQgPj49IDI7Cj4+ICsKPj4gKyAgICAgICAg ICAgICBjb2xvY2F0ZV9yZF9hZHJfb2Zmc2V0ICo9IGN1cnJfc2xpY2UtPmZpcnN0X21iX2luX3Ns aWNlOwo+PiArICAgICAgICAgICAgIGlmIChjb2xvY2F0ZV9waWMtPmNvbF9idWZfaW5kZXggPj0g MCAmJgo+PiArICAgICAgICAgICAgICAgICBjb2xvY2F0ZV9waWMtPmNvbF9idWZfaW5kZXggPCBo MjY0X2N0eC0+Y29sb2NhdGVkX2J1Zl9udW0pIHsKPj4gKyAgICAgICAgICAgICAgICAgLyogY29s bGF0ZWRfY21hX2FkZHIgaXMgbGltaXRlZCB0byAzMmJpdCBieSBmbGFnIEdGUF9ETUEzMiB3aGVu IGFsbG9jYXRlZCAqLwo+PiArICAgICAgICAgICAgICAgICAgICAgY29sb2NhdGVfcmRfYWRyID0g KHVuc2lnbmVkIGludCloMjY0X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHIgKwo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICgoaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3NpemUgKgo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29sb2NhdGVfcGljLT5jb2xfYnVmX2luZGV4KSA+PiAodXNl X21vZGVfOHg4X2ZsYWcKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gMiA6IDApKTsKPj4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChjb2xvY2F0ZV9yZF9hZHJfb2Zmc2V0ID4gaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3NpemUg fHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvY2F0ZV9yZF9hZHIgKyBoMjY0X2N0 eC0+b25lX2NvbF9idWZfc2l6ZSA+Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGludCloMjY0X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHJfZW5kKSB7Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaHctPmRldiwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiRXJyb3IsIGNvbG9jYXRlIHJkIGJ1ZiBpcyBub3QgZW5vdWdo LCBpbmRleCBpcyAlZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb2xvY2F0ZV9waWMtPmNvbF9idWZfaW5kZXgpOwo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLTE7Cj4+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAg ICAgICAgICAgICAgICB2YWwgID0gKChjb2xvY2F0ZV9yZF9hZHJfb2Zmc2V0ICsgY29sb2NhdGVf cmRfYWRyKSA+PiAzKSB8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJfY29s b2NhdGVfcmVmX3R5cGUgPDwgMjkpIHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGwxMF9zdHJ1Y3R1cmUgPDwgMzApOwo+PiArICAgICAgICAgICAgICAgICAgICAgcmVnbWFwX3dy aXRlKGh3LT5tYXBbRE9TX0JVU10sIEgyNjRfQ09fTUJfUkRfQUREUiwgdmFsKTsKPiBbU2V2ZXJp dHk6IENyaXRpY2FsXQo+IEluIGgyNjRfY29uZmlnX2RlY29kZV9idWYoKSwgY2FuIGEgc2xpY2Ug d2l0aCBhIG5vbi16ZXJvIGZpcnN0X21iX2luX3NsaWNlCj4gcHJvZ3JhbSBIMjY0X0NPX01CX1dS X0FERFIgYW5kIEgyNjRfQ09fTUJfUkRfQUREUiB0byBETUEgcGFzdCB0aGUgZW5kIG9mIHRoZQo+ IGNvbG9jYXRlZCBidWZmZXIgc2xvdCBvciBwYXN0IGgyNjRfY3R4LT5jb2xsYXRlZF9jbWFfYWRk cl9lbmQ/Cj4KPiBXaGVuIHVzZV9tb2RlXzh4OF9mbGFnIGlzIHNldCwgZWFjaCBzbG90J3Mgc3Ry aWRlIGlzCj4gaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3NpemUgPj4gMiwgYnV0IGNvbG9jYXRlX2Fk cl9vZmZzZXQgYW5kCj4gY29sb2NhdGVfcmRfYWRyX29mZnNldCBhcmUgY29tcGFyZWQgYWdhaW5z dCB0aGUgdW5zaGlmdGVkCj4gaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3NpemUsIGFsbG93aW5nIHRo ZSBvZmZzZXQgdG8gY3Jvc3MgaW50byB0aGUgbmV4dCAzCj4gY29sb2NhdGVkIGJ1ZmZlciBzbG90 cy4KPgo+IEZ1cnRoZXJtb3JlLCB0aGUgZW5kLWFkZHJlc3MgY2hlY2sgdGVzdHMKPiBjb2xvY2F0 ZV93cl9hZHIgKyBoMjY0X2N0eC0+b25lX2NvbF9idWZfc2l6ZSA+IGgyNjRfY3R4LT5jb2xsYXRl ZF9jbWFfYWRkcl9lbmQKPiB3aXRob3V0IGFkZGluZyBjb2xvY2F0ZV9hZHJfb2Zmc2V0IChhbmQg bGlrZXdpc2UgZm9yIGNvbG9jYXRlX3JkX2FkciB3aXRob3V0Cj4gY29sb2NhdGVfcmRfYWRyX29m ZnNldCksIHNvIHdoZW4gY29sX2J1Zl9pbmRleCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIg YW5kCj4gY29sb2NhdGVfYWRyX29mZnNldCA+IDAsIGNvbG9jYXRlX3dyX2FkciArIGNvbG9jYXRl X2Fkcl9vZmZzZXQgY2FuIHBvaW50IHVwIHRvCj4gb25lX2NvbF9idWZfc2l6ZSBieXRlcyBwYXN0 IGNvbGxhdGVkX2NtYV9hZGRyX2VuZC4KSW4gZmFjdCwgZXZlcnkgc2xvdCBvZiB0aGUgY29sIGJ1 ZmZlciBpcyBhbGxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSAKbWF4aW11bSBwb3NzaWJsZSByZXF1 aXJlbWVudCwgc28gbm8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgY2FuIG9jY3VyIGhlcmUuIApUaGF0 IHNhaWQsIHRoZSBwb2ludCByYWlzZWQgaXMgaW5kZWVkIGEgdmFsaWQgY29uY2Vybiwgd2lsbCBj b25zaWRlciAKZml4aW5nIGl0IGluIHRoZSBuZXh0IHZlcnNpb24uCj4KPiBbIC4uLiBdCj4KPj4g K30KPiBbIC4uLiBdCj4KPj4gLS0KPj4gMi40My4wCj4gLS0KPiBTYXNoaWtvIEFJIHJldmlldyDC tyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjEwMjItYjQtczQtdmRlYy11cHN0 cmVhbS12MTItMC02MTYyNDA5Nzg3OTJAYW1sb2dpYy5jb20/cGFydD01CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcg bGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hbWxvZ2ljCg==