Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1163643pxv; Fri, 25 Jun 2021 06:51:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy60lE2RiXT4D3ycsUcrABRkFB/jmYnOKQZ1ylqAXi2vfnEmLmICxYXy+RMk73nBV0nHRU6 X-Received: by 2002:a17:906:7184:: with SMTP id h4mr11218219ejk.140.1624629094098; Fri, 25 Jun 2021 06:51:34 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1624629094; cv=pass; d=google.com; s=arc-20160816; b=TiKa0MyEKu3wPJF6miin6U+BjfF29R6oyAL7y1YqxOZDdk0cEXGQjeatR0cL42Ob6F Sp9CkhDKYrqwcQU78GcHFEGtmynrxdzgo80ZNK2n2dPrsSzbhbEVgoDo9Q7L3PSb5iD2 V/0CYBCiPuLEoShEPOMYML7TKYKjH1FHFT61rbhnaqBLnfePBdWSOpL30qxCta1AUDEj i6sSmBHqkpQp7E6Cbd1R+I7sYwkaSVtEaVM1cwVyWHaficu2OUPiFSDe+PwQ2ZrP85Sx 8DbGJWKOru+EtMbqSwhJTqlPRbCcvxFKEf7aOf2wPulVqKaen6332ZqQTgP9fu+xt2mJ XufA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=64g5MggrmJak8fDIuqUfY2Xw9mSkSgVUaC+g0WBDI0w=; b=r+0LwB4U2o61v05dr8FD+WvXiu12J6kwp5hFRLdDfB+cGjveaJ7DFXiwQ+kFG++gmU icR/M1CFSMDUq2LMfsHAXhg/OEkezWBFIT6Pfsk3ugm6wuOfVVZnwUacbaV/pl91afkB uRTXgs+zT42zFJag/txeBGVCbI/Y2erjxUR8a9bfjdBhh/ZSfauPRSJzQm+ScuOuCBGz vM3fCnAvsdD8DLwnm6yo3ZVz6LycDVoK2k8DuIDfFQ2FjiH54HlLQEJEPQWSFE7grQB1 atyYt3P/VnYReI9vdAmSpnotOYCybEQqxi5tyN03d1stcR+lGgPDcUf/Zd7Am3gvB/s6 jGVg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=a4ja74Am; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xilinx.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bz26si5261626ejc.672.2021.06.25.06.51.08; Fri, 25 Jun 2021 06:51:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=a4ja74Am; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xilinx.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229890AbhFYNu3 (ORCPT + 99 others); Fri, 25 Jun 2021 09:50:29 -0400 Received: from mail-mw2nam10on2070.outbound.protection.outlook.com ([40.107.94.70]:21303 "EHLO NAM10-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229573AbhFYNu1 (ORCPT ); Fri, 25 Jun 2021 09:50:27 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HO8ojo7nFv9f8ttJcAa7WzKgJ5tlOaWEtaMoMARfalb/3Hl+7hLULHZZv5AKfl2kbzDc+FH6zwU2rs4rEGOAKzrEMkXP+9e0eL2oLyudRd+QZkIZHgM5xt5e78Bgz7mfzdh1OVSqhcQS2gsoMrFJ5RlfGt4lHO9t/5ofiazsCtrDN8dbQCWXqhzxLooDNpD54V8ts8908DgtS5k00+iN1ioFk1d7S2Qeibg19rnUSLIeKyrLwBLTs3FeNeXhci2EMphPdJ2zRgRr8N9hBGrfWnugWW0TmEKKQRfN/EIjABNtfFX61XncQFWkvi6w03hotCepJNiKc1rpoKuPrNKH3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=64g5MggrmJak8fDIuqUfY2Xw9mSkSgVUaC+g0WBDI0w=; b=RC8pif3j45aWwXjHQdCmkCDqZxSxJFuuH7UrpPgffGtSaNbf6IiIEMrolNR6pqhtD87thMlXrjq4SJUesebizLonUPt8PZNpDtOsvNjV1WgHszzXQPHNuxMDXEFG8ryEl2cGcoe9vp1Xc96vj2/IGbTM84vw9LbxtgSO0hIaWmtKfqA7f8hh6LHM6MrEdMHG+BVIPZQMPGXWqoaqqE+LEWOW+0rxp7h10AEFaDTKVEGFjwJTPP/jL+xKWeEln0+PGP7XwQCOHfylVoOmaZQcl+WfwPrD78nMTjiHfL29X9Grlf95UGoRrHiMXFbyhC6eZ9dp7dXbpLHyCYkmnB/FhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=64g5MggrmJak8fDIuqUfY2Xw9mSkSgVUaC+g0WBDI0w=; b=a4ja74AmrbK4EFBuYR6CbuyBzWIhzGVy4cTpm22eahLhp5eItYM6Oj/KGTyvBl0ovLRzHmx49akcSEKDlpM2WJ8T2CncJNXKSIhobQYwepRYjBrBi8r/oHCUeGwEABTX3bgFdeeZ2bJPUmo2XEPEncF1r7yrmMxvMCqkgJv4cUg= Received: from BY5PR02MB6817.namprd02.prod.outlook.com (2603:10b6:a03:20e::22) by SJ0PR02MB7727.namprd02.prod.outlook.com (2603:10b6:a03:31b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Fri, 25 Jun 2021 13:48:04 +0000 Received: from BY5PR02MB6817.namprd02.prod.outlook.com ([fe80::d0d5:249:813c:42ab]) by BY5PR02MB6817.namprd02.prod.outlook.com ([fe80::d0d5:249:813c:42ab%5]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:48:04 +0000 From: Abhyuday Godhasara To: Michal Simek , Michal Simek CC: Rajan Vaja , Manish Narani , "zou_wei@huawei.com" , Amit Sunil Dhamne , Sai Krishna Potthuri , Jiaying Liang , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Tejas Patel Subject: RE: [PATCH 4/6] drivers: soc: xilinx: add xilinx event management driver Thread-Topic: [PATCH 4/6] drivers: soc: xilinx: add xilinx event management driver Thread-Index: AQHXU9p4tkIOzTXcpEeSCg5c9YlZKKsegQeAgAZlx4A= Date: Fri, 25 Jun 2021 13:48:03 +0000 Message-ID: References: <1622217566-1856-1-git-send-email-abhyuday.godhasara@xilinx.com> <1622217566-1856-5-git-send-email-abhyuday.godhasara@xilinx.com> <14ce59d6-957c-f252-2a67-632d4c4648a9@xilinx.com> In-Reply-To: <14ce59d6-957c-f252-2a67-632d4c4648a9@xilinx.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: xilinx.com; dkim=none (message not signed) header.d=none;xilinx.com; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [43.250.156.27] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ed73f6c7-bd19-44a7-fce7-08d937dfdaf3 x-ms-traffictypediagnostic: SJ0PR02MB7727: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:331; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DmVJ88Rpw0n+D4e/2nMKr1Wh9Zs4zarYW98R8Fy20dn02h9ZzjATtyhlL6SvMnkOH1ATrKDMoKyS+mbv+4pMRUvTHAz2mrK3kt274gU0hkrNi3QqkLPzLZJSSo/yO5woNpuJay8kl20+JBLt00Navy4oEvD4juktTX4yutDnnWm0WH1xacDjNld/EkRrlJW+z3GyU+LOLOD4IX+kLfc5jZZgrKMsNKG3wb8Ki5c0/2gt8Cyj2uJJnVvsJCH92k2ZcyjSoEghuIlKbWcfif6x8bpEo+gXRoz+ff6bGdDOsyBIm0kOvoTvrIzsArXCU7BR/V19WX1azkYHwUrCr9g1m0lvjs53wSp91FDavg+pn0ZkRyMnsU7qXPvTU4zQIs9umq9AhAqvhwtLLUTNhEAgEdp9yill9ToO3w1Ahg2kGGbKWMN6ysEDQeklqtkthONj67O8cftyb0BZKcHghqA4p/9eipi+NbQ4V8NjJBDcSN3+gPSi+PhF/z12rnodLn5ob7iNCbpUkPAxIdpjkvUa/14py8kqBkThWuVJ5W2d9Yu0EmB3tlI694LIgTQVBSje5Gdl0EyRmeodRUvN8xVHmOR20ONevOQcsuMO04c+W2E7cqkHoi7+6YbXZw8fCZ+nE5D/IjNy2OvzxRHH+BVJwyHtGgqa97bWq3w5Dk1mZoFqvzX1yM72OyIKYOn/5+U1zdIaO6Tuv/pQPBi4cLj7iN6/R9EunSkzNkPIfy6JTp4FhdJayCwTS5FeAfS8DXy9nazNmywcn3dRFXh2suo9Rw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR02MB6817.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(136003)(346002)(39850400004)(396003)(376002)(30864003)(33656002)(86362001)(316002)(8676002)(52536014)(110136005)(54906003)(71200400001)(6636002)(107886003)(8936002)(5660300002)(38100700002)(122000001)(478600001)(53546011)(966005)(9686003)(186003)(64756008)(4326008)(66946007)(66446008)(66556008)(66476007)(2906002)(7696005)(76116006)(83380400001)(26005)(55016002)(6506007)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TW1tdC9hbWloTHZadGxJejJxMTZOckxHSlZ2VkJLaGU1QXlPODBaN1NPVDM1?= =?utf-8?B?V0YxdkYzZWdJUFY1cWE5djFlaS9jMU9EbUlZUnlYbnlOYXlrUXY2b1JCcmRS?= =?utf-8?B?R1lqMndIVkdKU1dSbzBaSFBEa3dyajROS1JxdmtaTEp5SFV1dnNNMFo3ZGNy?= =?utf-8?B?UGM2MWpGRk5Db2xNVncweHorWEw1aU9WVUhpSW9NUjZodkZnZTZtY0M4UkIr?= =?utf-8?B?NG9OQU5OTEpFKys5WWtEeUY2NytTNlhzUklTWlNnak1OdjNJalhKSzVmVTJN?= =?utf-8?B?TC9NeUVVYjBEOXJ2Um5RZHcyK1E2OHVRdmZEb3lHZW1sbnFWMnlOOVpicyt6?= =?utf-8?B?eW5KOEs3V2VmVWYvY0ROQnlHUGxROEdnL0xxekxDRmRNNmVYc1NkTVdBQjFk?= =?utf-8?B?TzM2Z1VHbzlneStIK2dSbkkvVWxKOVU3V0JDa1hlL1BWU1FiQ0hSN1RocFJa?= =?utf-8?B?UVBwREhVM0Q1WmRVaFMyVzg3U1pQK3BRMExHVzVHWWV4QmlIV09GT1F1b2Nv?= =?utf-8?B?Wi9XbXYzMWpqcnlNbzZnQ2tqU2dabGc3YnAzQnJ4VVFSWm9PL0xHdmx1MmRp?= =?utf-8?B?cVVCL1ZGR3J3RWdtSHZjbXRIdkR5T1k0a1NmLzhNUjJTVEprTGdISVVlMFhy?= =?utf-8?B?Zk5qUGFiZTZ1L2pBQ3RwblpPYlNJVGsxdXczWnkrVjdHbUlzaHBNbUxlaVN2?= =?utf-8?B?eFFKV0NVY0ZDaEN0dkkwcDZjTENuQytSWEdBTG9GbVZjNXEvMXBuK3JRM0NM?= =?utf-8?B?TFBCQk1iTXB1M0pPc3ExNGwrN2ZzSi9KbU02REEyUDN0ZTErSHZnaDRFbjEw?= =?utf-8?B?a3RlV1kvdG1wZkFpekJDQmltQzBva3RwaElDYjU3SUg5MnRleDZDMU5WNEND?= =?utf-8?B?K0hnckFGdWhYdHB5YVNnNFM1MndSdk5HaGlIcHVPL3JVVnJmN3lISXlTL3Nj?= =?utf-8?B?d2hlaXhNZXEvbjFOdDRaUDZrOFRrT3dqd1RGaXNGV3BXdkhJQk5wNXpSZzk3?= =?utf-8?B?T3ZYemZ4TzE0aHM0a1R0NjJtTHdCTVQ3QnY5UmZnWlBDeFlNNXlwWlNBYXA4?= =?utf-8?B?b1dRMk5yYnAzUUl1ZWhaNlhYbkVpcmpSSytCRE5QNDFTQmV6b2VmbWxiUml0?= =?utf-8?B?Y1IvcEdZUXQ1VjRaNmI5QzF3NXlBck9PS1M0LzJPZFpydm9ibTNBdy9JTmhT?= =?utf-8?B?ZitTTk5yT01kamk3a2FuTW5LT3JkNGwwcFhQc0s3bGF6REJKbHcxWVJ1UXdz?= =?utf-8?B?b0RkRllzczM0UzhIcDMvM0lVYXJTM0VtWi9sUGY2WEZnWDNGZXQ4SnFKOFd1?= =?utf-8?B?cDNzcnp6ak1XSHBQb1N2UXlaN0lOYnkzcXVmZnFiWWQ3YmFzeWthRTRPOWNG?= =?utf-8?B?YkI0TmVhUEtlNjFTeGt2NmFTVHVQMGkxSGVseU05aEs4djg2cllFZ1A1ak10?= =?utf-8?B?NjRlSDZEMjU4aGwvWCtQVjI5cHNCNkI5V1hWN1ZTSXgxREtIQ2VUdVkzRUpL?= =?utf-8?B?VHZsVGlDZVJ0T1I2U0pSSmdVa1d4WWYxclJqYk9DUWxDWDBPV251ajNwSHc5?= =?utf-8?B?bk5nckNDOFdMeTkxbEJXNG9OdlZ1TzRTWDNWS2ZsKytUTisrY1lKanJ1RGpN?= =?utf-8?B?cEUxVy9wUHlYakdySUFCc2VZRFJzWW5WMnZDNDZhTW12MTBvY01PTkxBYmRs?= =?utf-8?B?RFAvcEE5QWRQUXVQOUZGcVl6bEd0MnVvejBhaERrQlIra005cUlaaHBPTE1h?= =?utf-8?Q?hiXDH3TO6i5L1T74A3K4Y5yZA8GP2iHDgPz5urH?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR02MB6817.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed73f6c7-bd19-44a7-fce7-08d937dfdaf3 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jun 2021 13:48:03.8571 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FXTKQaIDZmJMsuNmu0aR6mEc9Hs89uopBzLvyXiZwR5YmLmtPj6YDOqZZK85i/C70kS0ik5Vdxtg6/EMS9nr4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR02MB7727 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksDQoNClRoYW5rcyBmb3IgdGhlIHJldmlldy4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQ0KPiBGcm9tOiBNaWNoYWwgU2ltZWsgPG1pY2hhbC5zaW1la0B4aWxpbnguY29tPg0KPiBT ZW50OiBNb25kYXksIEp1bmUgMjEsIDIwMjEgNToyNiBQTQ0KPiBUbzogQWJoeXVkYXkgR29kaGFz YXJhIDxhZ29kaGFzYUB4aWxpbnguY29tPjsgTWljaGFsIFNpbWVrDQo+IDxtaWNoYWxzQHhpbGlu eC5jb20+DQo+IENjOiBSYWphbiBWYWphIDxSQUpBTlZAeGlsaW54LmNvbT47IE1hbmlzaCBOYXJh bmkgPE1OQVJBTklAeGlsaW54LmNvbT47DQo+IHpvdV93ZWlAaHVhd2VpLmNvbTsgQW1pdCBTdW5p bCBEaGFtbmUgPGFtaXRzdW5pQHhsbngueGlsaW54LmNvbT47IFNhaQ0KPiBLcmlzaG5hIFBvdHRo dXJpIDxsYWtzaG1pc0B4aWxpbnguY29tPjsgSmlheWluZyBMaWFuZyA8amxpYW5nQHhpbGlueC5j b20+Ow0KPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmc7IFRlamFzIFBhdGVsDQo+IDx0ZWphc3BAeGxueC54aWxpbnguY29t Pg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDQvNl0gZHJpdmVyczogc29jOiB4aWxpbng6IGFkZCB4 aWxpbnggZXZlbnQgbWFuYWdlbWVudA0KPiBkcml2ZXINCj4gDQo+IA0KPiANCj4gT24gNS8yOC8y MSA1OjU5IFBNLCBBYmh5dWRheSBHb2RoYXNhcmEgd3JvdGU6DQo+ID4gWGlsaW54IGV2ZW50IG1h bmFnZW1lbnQgZHJpdmVyIHByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvIHN1YnNjcmliZSBvcg0KPiA+ IHVuc3Vic2NyaWJlIGZvciB0aGUgZXZlbnQvY2FsbGJhY2sgc3VwcG9ydGVkIGJ5IGZpcm13YXJl LiBBZ2VudCBjYW4NCj4gPiB1c2UgdGhpcyBkcml2ZXIgdG8gcmVnaXN0ZXIgZm9yIEVycm9yIEV2 ZW50LCBEZXZpY2UgRXZlbnQgYW5kIFN1c3BlbmQgY2FsbGJhY2suDQo+ID4gVGhpcyBkcml2ZXIg b25seSBhbGxvdyBvbmUgYWdlbnQgcGVyIGV2ZW50IHRvIGRvIHJlZ2lzdHJhdGlvbi4gRHJpdmVy DQo+ID4gd2lsbCByZXR1cm4gYW4gZXJyb3IgaW4gY2FzZSBvZiBtdWx0aXBsZSByZWdpc3RyYXRp b24gZm9yIHRoZSBzYW1lIGV2ZW50Lg0KPiA+DQo+ID4gVGhpcyBkcml2ZXIgZ2V0cyBub3RpZmlj YXRpb24gZnJvbSBmaXJtd2FyZSB0aHJvdWdoIEFURiBhcyBTR0kuIER1cmluZw0KPiA+IGluaXRp YWxpemF0aW9uLCBldmVudCBtYW5hZ2VyIGRyaXZlciByZWdpc3RlciBoYW5kbGVyIGZvciBTR0kg dXNlZCBmb3INCj4gPiBub3RpZmljYXRpb24uIEl0IGFsc28gcHJvdmlkZSBTR0kgbnVtYmVyIGlu Zm8gdG8gQVRGIGJ5IHVzaW5nDQo+ID4gSU9DVExfUkVHSVNURVJfU0dJIGNhbGwgdG8gQVRGLg0K PiA+DQo+ID4gQWZ0ZXIgcmVjZWl2aW5nIG5vdGlmaWNhdGlvbiBmcm9tIGZpcm13YXJlLCBkcml2 ZXIgbWFrZXMgU01DIGNhbGwgdG8NCj4gPiBBVEYgdG8gZ2V0IElQSSBkYXRhLiBGcm9tIHRoZSBJ UEkgZGF0YSBwcm92aWRlZCBieSBBVEYsIGV2ZW50IG1hbmFnZXINCj4gPiBpZGVudGlmaWVkIGNh dXNlIG9mIGV2ZW50IGFuZCBmb3J3YXJkIHRoYXQgZXZlbnQvY2FsbGJhY2sgbm90aWZpY2F0aW9u DQo+ID4gdG8gcmVzcGVjdGl2ZSBzdWJzY3JpYmVkIGRyaXZlci4gQWZ0ZXIgdGhpcywgaW4gY2Fz ZSBvZiBFcnJvciBFdmVudCwNCj4gPiBkcml2ZXIgcGVyZm9ybXMgdW5yZWdpc3RyYXRpb24gYXMg ZmlybXdhcmUgZXhwZWN0aW5nIGZyb20gYWdlbnQgdG8gZG8NCj4gPiByZS1yZWdpc3RyYXRpb24g aWYgYWdlbnQgd2FudHMgdG8gZ2V0IG5vdGlmaWVkIG9uIHNlY29uZCBvY2N1cnJlbmNlIG9mDQo+ ID4gZXJyb3IgZXZlbnQuDQo+ID4NCj4gPiBBZGQgbmV3IElPQ1RMIGlkIElPQ1RMX1JFR0lTVEVS X1NHSSA9IDI1IHdoaWNoIHVzZSB0byByZWdpc3RlciBTR0kgb24gQVRGLg0KPiANCj4gbml0OiBJ bnN0ZWFkIG9mIEFURiB5b3Ugc2hvdWxkIHVzZSBURi1BDQo+IA0KPiA+DQo+ID4gT2xkZXIgZmly bXdhcmUgZG9lc24ndCBoYXZlIGFsbCByZXF1aXJlZCBzdXBwb3J0IGZvciBldmVudCBoYW5kbGlu Zw0KPiA+IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGV2ZW50IG1hbmFnZXIgZHJpdmVyLiBTbyBhZGQg Y2hlY2sgZm9yIHJlZ2lzdGVyDQo+ID4gbm90aWZpZXIgdmVyc2lvbiBpbiBldmVudCBtYW5hZ2Vy IGRyaXZlci4NCj4gPg0KPiA+IFhpbGlueCBldmVudCBtYW5hZ2VtZW50IGRyaXZlciBwcm92aWRl IHN1cHBvcnQgdG8gc3Vic2NyaWJlIGZvcg0KPiA+IG11bHRpcGxlIGVycm9yIGV2ZW50cyB3aXRo IHRoZSB1c2Ugb2YgRXZlbnQgTWFzayBpbiBzaW5nbGUgY2FsbCBvZg0KPiA+IHhsbnhfcmVnaXN0 ZXJfZXZlbnQoKS4gQWdlbnQgZHJpdmVyIGNhbiBwcm92aWRlICdFdmVudCcgcGFyYW1ldGVyDQo+ ID4gdmFsdWUgYXMgT1JlZCBvZiBtdWx0aXBsZSBldmVudCBtYXNrcyB0byByZWdpc3RlciBzaW5n bGUgY2FsbGJhY2sgZm9yDQo+ID4gbXVsdGlwbGUgZXZlbnRzLiBGb3IgZXhhbXBsZSwgdG8gcmVn aXN0ZXIgY2FsbGJhY2sgZm9yIGV2ZW50PTB4MSBhbmQNCj4gPiBldmVudD0weDIgZm9yIHRoZSBn aXZlbiBub2RlLCBhZ2VudCBjYW4gcHJvdmlkZSBldmVudD0weDMgKDB4MSB8IDB4MikuDQo+ID4g SXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIG11bHRpcGxlIGV2ZW50IGZvciBkaWZmZXJl bnQgbm9kZXMgaW4NCj4gPiBzaW5nbGUgcmVnaXN0cmF0aW9uIGNhbGwuDQo+ID4NCj4gPiBBbHNv IHByb3ZpZGUgc3VwcG9ydCB0byByZWNlaXZlIG11bHRpcGxlIGVycm9yIGV2ZW50cyBhcyBpbiBz aW5nbGUNCj4gPiBub3RpZmljYXRpb24gZnJvbSBmaXJtd2FyZSBhbmQgdGhlbiBmb3J3YXJkIGl0 IHRvIHN1YnNjcmliZWQgZHJpdmVycw0KPiA+IHZpYSByZWdpc3RlcmVkIGNhbGxiYWNrIG9uZSBi eSBvbmUuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBUZWphcyBQYXRlbCA8dGVqYXMucGF0ZWxA eGlsaW54LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBSYWphbiBWYWphIDxyYWphbi52YWphQHhp bGlueC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogQWJoeXVkYXkgR29kaGFzYXJhIDxhYmh5dWRh eS5nb2RoYXNhcmFAeGlsaW54LmNvbT4NCj4gPiAtLS0NCj4gPiAgTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArDQo+ID4gIGRyaXZlcnMvc29jL3hpbGlu eC9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgMTAgKw0KPiA+ICBkcml2ZXJzL3NvYy94aWxp bngvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9zb2MveGls aW54L3hsbnhfZXZlbnRfbWFuYWdlci5jICAgICB8IDU5OA0KPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gIGluY2x1ZGUvbGludXgvZmlybXdhcmUveGxueC1ldmVudC1tYW5hZ2Vy LmggfCAgMzYgKysNCj4gPiAgaW5jbHVkZS9saW51eC9maXJtd2FyZS94bG54LXp5bnFtcC5oICAg ICAgICB8ICAgMiArDQo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNjUzIGluc2VydGlvbnMoKykNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL3hpbGlueC94bG54X2V2ZW50X21hbmFn ZXIuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9maXJtd2FyZS94bG54 LWV2ZW50LW1hbmFnZXIuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMgaW5kZXggM2EyMzg0ZS4uNjI5OTA2OSAxMDA2NDQNCj4gPiAtLS0gYS9NQUlOVEFJ TkVSUw0KPiA+ICsrKyBiL01BSU5UQUlORVJTDQo+ID4gQEAgLTIwMDk2LDYgKzIwMDk2LDEyIEBA IFQ6CWdpdCBodHRwczovL2dpdGh1Yi5jb20vWGlsaW54L2xpbnV4LQ0KPiB4bG54LmdpdA0KPiA+ ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3hsbngsenlucW1wLXBz Z3RyLnlhbWwNCj4gPiAgRjoJZHJpdmVycy9waHkveGlsaW54L3BoeS16eW5xbXAuYw0KPiA+DQo+ ID4gK1hJTElOWCBFVkVOVCBNQU5BR0VNRU5UIERSSVZFUg0KPiA+ICtNOglBYmh5dWRheSBHb2Ro YXNhcmEgPGFiaHl1ZGF5LmdvZGhhc2FyYUB4aWxpbnguY29tPg0KPiA+ICtTOglNYWludGFpbmVk DQo+ID4gK0Y6CWRyaXZlcnMvc29jL3hpbGlueC94bG54X2V2ZW50X21hbmFnZXIuYw0KPiA+ICtG OglpbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3hsbngtZXZlbnQtbWFuYWdlci5oDQo+ID4gKw0KPiA+ ICBYSUxMWUJVUyBEUklWRVINCj4gPiAgTToJRWxpIEJpbGxhdWVyIDxlbGkuYmlsbGF1ZXJAZ21h aWwuY29tPg0KPiA+ICBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvc29jL3hpbGlueC9LY29uZmlnIGIvZHJpdmVycy9zb2MveGlsaW54L0tj b25maWcNCj4gPiBpbmRleCA1M2FmOTExLi44YTc1NWE1IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvc29jL3hpbGlueC9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9zb2MveGlsaW54L0tjb25m aWcNCj4gPiBAQCAtMjUsNCArMjUsMTQgQEAgY29uZmlnIFpZTlFNUF9QTV9ET01BSU5TDQo+ID4g IAkgIFNheSB5ZXMgdG8gZW5hYmxlIGRldmljZSBwb3dlciBtYW5hZ2VtZW50IHRocm91Z2ggUE0g ZG9tYWlucw0KPiA+ICAJICBJZiBpbiBkb3VidCwgc2F5IE4uDQo+ID4NCj4gPiArY29uZmlnIFhM TlhfRVZFTlRfTUFOQUdFUg0KPiA+ICsJYm9vbCAiRW5hYmxlIFhpbGlueCBFdmVudCBNYW5hZ2Vt ZW50IERyaXZlciINCj4gPiArCWRlcGVuZHMgb24gWllOUU1QX0ZJUk1XQVJFDQo+ID4gKwlkZWZh dWx0IFpZTlFNUF9GSVJNV0FSRQ0KPiA+ICsJaGVscA0KPiA+ICsJICBTYXkgeWVzIHRvIGVuYWJs ZSBldmVudCBtYW5hZ2VtZW50IHN1cHBvcnQgZm9yIFhpbGlueC4NCj4gPiArCSAgVGhpcyBkcml2 ZXIgdXNlcyBmaXJtd2FyZSBkcml2ZXIgYXMgYW4gaW50ZXJmYWNlIGZvciBldmVudC9wb3dlcg0K PiA+ICsJICBtYW5hZ2VtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUuDQo+ID4gKw0KPiA+ICsJICBJ ZiBpbiBkb3VidCwgc2F5IE4uDQo+ID4gIGVuZG1lbnUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zb2MveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9zb2MveGlsaW54L01ha2VmaWxlDQo+ID4g aW5kZXggOTg1NGU2Zi4uNDFlNTg1YiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3NvYy94aWxp bngvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3NvYy94aWxpbngvTWFrZWZpbGUNCj4gPiBA QCAtMSwzICsxLDQgQEANCj4gPiAgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K PiA+ICBvYmotJChDT05GSUdfWllOUU1QX1BPV0VSKQkrPSB6eW5xbXBfcG93ZXIubw0KPiA+ICBv YmotJChDT05GSUdfWllOUU1QX1BNX0RPTUFJTlMpICs9IHp5bnFtcF9wbV9kb21haW5zLm8NCj4g PiArb2JqLSQoQ09ORklHX1hMTlhfRVZFTlRfTUFOQUdFUikJKz0geGxueF9ldmVudF9tYW5hZ2Vy Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MveGlsaW54L3hsbnhfZXZlbnRfbWFuYWdl ci5jDQo+ID4gYi9kcml2ZXJzL3NvYy94aWxpbngveGxueF9ldmVudF9tYW5hZ2VyLmMNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLmJmNzI2ZWUNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2MveGlsaW54L3hsbnhfZXZlbnRfbWFuYWdl ci5jDQo+ID4gQEAgLTAsMCArMSw1OTggQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogWGlsaW54IEV2ZW50IE1hbmFnZW1lbnQgRHJp dmVyDQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgWGlsaW54LCBJbmMuDQo+ ID4gKyAqDQo+ID4gKyAqICBBYmh5dWRheSBHb2RoYXNhcmEgPGFiaHl1ZGF5LmdvZGhhc2FyYUB4 aWxpbnguY29tPiAgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS94bG54LWV2ZW50LW1hbmFnZXIuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlL3hsbngtenlucW1wLmg+ICNpbmNsdWRlIDxsaW51 eC9oYXNodGFibGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPiAjaW5jbHVk ZSA8bGludXgvaXJxLmg+ICNpbmNsdWRlDQo+ID4gKzxsaW51eC9pcnFkb21haW4uaD4gI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPiAjaW5jbHVkZQ0KPiA+ICs8bGludXgvb2ZfaXJxLmg+ICNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4gI2luY2x1ZGUNCj4gPiArPGxpbnV4L3NsYWIu aD4NCj4gPiArDQo+ID4gK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9SRUFEX01PU1RMWShpbnQsIGNw dV9udW1iZXIxKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmlycV9zZ2k7DQo+ID4gK3N0YXRp YyBpbnQgZXZlbnRfbWFuYWdlcl9hdmFpbGFiaWxpdHkgPSAtRUFDQ0VTOw0KPiA+ICsNCj4gPiAr LyogU0dJIG51bWJlciB1c2VkIGZvciBFdmVudCBtYW5hZ2VtZW50IGRyaXZlciAqLw0KPiA+ICsj ZGVmaW5lIFhMTlhfRVZFTlRfU0dJX05VTQkoMTUpDQo+ID4gKw0KPiA+ICsvKiBNYXggbnVtYmVy IG9mIGRyaXZlciBjYW4gcmVnaXN0ZXIgZm9yIHNhbWUgZXZlbnQgKi8NCj4gPiArI2RlZmluZSBN QVhfRFJJVkVSX1BFUl9FVkVOVAkoMTBVKQ0KPiA+ICsNCj4gPiArLyogTWF4IEhhc2hNYXAgT3Jk ZXIgZm9yIFBNIEFQSSBmZWF0dXJlIGNoZWNrICgxPDw3ID0gMTI4KSAqLw0KPiA+ICsjZGVmaW5l IFJFR0lTVEVSRURfRFJJVkVSX01BWF9PUkRFUgkoNykNCj4gPiArDQo+ID4gKyNkZWZpbmUgTUFY X0JJVFMJKDMyVSkgLyogTnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGZvciBlcnJvciBtYXNrICov DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT05fTUFTSwkJCSgweEZGRkZVKQ0K PiA+ICsjZGVmaW5lIFJFR0lTVEVSX05PVElGSUVSX0ZJUk1XQVJFX1ZFUlNJT04JKDJVKQ0KPiA+ ICsNCj4gPiArc3RhdGljIERFRklORV9IQVNIVEFCTEUocmVnX2RyaXZlcl9tYXAsDQo+IFJFR0lT VEVSRURfRFJJVkVSX01BWF9PUkRFUik7DQo+ID4gK3N0YXRpYyBpbnQgc2dpX251bSA9IFhMTlhf RVZFTlRfU0dJX05VTTsNCj4gDQo+IG1ha2UgdGhpcyBtb2R1bGUgcGFyYW1ldGVyIHdpdGggZGVm YXVsdCBvbiBYTE5YX0VWRU5UX1NHSV9OVU0uDQpbQWJoeXVkYXldIEkgbWFrZSBzZ2lfbnVtIGFz IG1vZHVsZSBwYXJhbWV0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlIFhMTlhfRVZFTlRfU0dJX05VTSBp biBuZXh0IHBhdGNoIHNlcmllcy4NCg0KPiANCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1 Y3QgcmVnaXN0ZXJlZF9ldmVudF9kYXRhIC0gUmVnaXN0ZXJlZCBFdmVudCBEYXRhLg0KPiA+ICsg KiBAa2V5OgkJa2V5IGlzIHRoZSBjb21iaW5lIGlkKE5vZGUtSWQgfCBFdmVudC1JZCkgb2YgdHlw ZSB1NjQNCj4gPiArICoJCQl3aGVyZSB1cHBlciB1MzIgZm9yIE5vZGUtSWQgYW5kIGxvd2VyIHUz MiBmb3IgRXZlbnQtDQo+IElkLA0KPiA+ICsgKgkJCUFuZCB0aGlzIHVzZWQgYXMga2V5IHRvIGlu ZGV4IGludG8gaGFzaG1hcC4NCj4gPiArICogQGFnZW50X2RhdGE6CQlEYXRhIHBhc3NlZCBiYWNr IHRvIGhhbmRsZXIgZnVuY3Rpb24uDQo+ID4gKyAqIEBjYl90eXBlOgkJVHlwZSBvZiBBcGkgY2Fs bGJhY2ssIGxpa2UgUE1fTk9USUZZX0NCLCBldGMuDQo+ID4gKyAqIEBldmVfY2I6CQlGdW5jdGlv biBwb2ludGVyIHRvIHN0b3JlIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4NCj4gPiArICogQHdha2U6 CQlJZiB0aGlzIGZsYWcgc2V0LCBmaXJtd2FyZSB3aWxsIHdha2V1cCBwcm9jZXNzb3IgaWYgaXMN Cj4gPiArICoJCQlpbiBzbGVlcCBvciBwb3dlciBkb3duIHN0YXRlLg0KPiA+ICsgKiBAaGVudHJ5 OgkJaGxpc3Rfbm9kZSB0aGF0IGhvb2tzIHRoaXMgZW50cnkgaW50byBoYXNodGFibGUuDQo+ID4g KyAqLw0KPiA+ICtzdHJ1Y3QgcmVnaXN0ZXJlZF9ldmVudF9kYXRhIHsNCj4gPiArCXU2NCBrZXk7 DQo+ID4gKwllbnVtIHBtX2FwaV9jYl9pZCBjYl90eXBlOw0KPiA+ICsJdm9pZCAqYWdlbnRfZGF0 YTsNCj4gPiArDQo+ID4gKwlldmVudF9jYl9mdW5jX3QgZXZlX2NiOw0KPiA+ICsJYm9vbCB3YWtl Ow0KPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgaGVudHJ5Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIGJvb2wgeGxueF9pc19lcnJvcl9ldmVudChjb25zdCB1MzIgbm9kZV9pZCkgew0KPiA+ ICsJaWYgKG5vZGVfaWQgPT0gRVZFTlRfRVJST1JfUE1DX0VSUjEgfHwNCj4gPiArCSAgICBub2Rl X2lkID09IEVWRU5UX0VSUk9SX1BNQ19FUlIyIHx8DQo+ID4gKwkgICAgbm9kZV9pZCA9PSBFVkVO VF9FUlJPUl9QU01fRVJSMSB8fA0KPiA+ICsJICAgIG5vZGVfaWQgPT0gRVZFTlRfRVJST1JfUFNN X0VSUjIpDQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGZhbHNlOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhsbnhfYWRkX2NiX2Zvcl9ub3RpZnlfZXZl bnQoY29uc3QgdTMyIG5vZGVfaWQsIGNvbnN0IHUzMiBldmVudCwNCj4gY29uc3QgYm9vbCB3YWtl LA0KPiA+ICsJCQkJCWV2ZW50X2NiX2Z1bmNfdCBjYl9mdW4sCXZvaWQNCj4gKmRhdGEpDQo+ID4g K3sNCj4gPiArCXU2NCBrZXkgPSAwOw0KPiA+ICsJc3RydWN0IHJlZ2lzdGVyZWRfZXZlbnRfZGF0 YSAqZXZlX2RhdGE7DQo+ID4gKw0KPiA+ICsJa2V5ID0gKCh1NjQpbm9kZV9pZCA8PCAzMlUpIHwg KHU2NClldmVudDsNCj4gPiArCS8qIENoZWNrIGZvciBleGlzdGluZyBlbnRyeSBpbiBoYXNoIHRh YmxlIGZvciBnaXZlbiBrZXkgaWQgKi8NCj4gPiArCWhhc2hfZm9yX2VhY2hfcG9zc2libGUocmVn X2RyaXZlcl9tYXAsIGV2ZV9kYXRhLCBoZW50cnksIGtleSkgew0KPiA+ICsJCWlmIChldmVfZGF0 YS0+a2V5ID09IGtleSkgew0KPiANCj4gRG9uJ3QgeW91IG5lZWQgdG8gY2hlY2sgZXZlX2RhdGEg aGVyZSB0b28/DQpbQWJoeXVkYXldIEFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vdG9ydmFsZHMv bGludXgvYmxvYi80NGRiNjNkMWFkOGQ3MWM2OTMyY2JlMDA3ZWI0MWYzMWM0MzRkMTQwL3Rvb2xz L2luY2x1ZGUvbGludXgvbGlzdC5oI0w3MTQgbm90IHJlcXVpcmVkIHRvIGRvIE5VTEwgY2hlY2sg Zm9yIGV2ZV9kYXRhLCBBcyBmb3IgbG9vcCB3aWxsIGJyZWFrIGlmIGV2ZV9kYXRhIGdvdCBhcyBO VUxMLg0KDQo+IA0KPiA+ICsJCQlwcl9lcnIoIkZvdW5kIGFzIGFscmVhZHkgcmVnaXN0ZXJlZFxu Iik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBBZGQgbmV3IGVudHJ5IGlmIG5vdCBwcmVzZW50ICovDQo+ID4gKwlldmVfZGF0YSA9 IGttYWxsb2Moc2l6ZW9mKCpldmVfZGF0YSksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFldmVf ZGF0YSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlldmVfZGF0YS0+a2V5 ID0ga2V5Ow0KPiA+ICsJZXZlX2RhdGEtPmNiX3R5cGUgPSBQTV9OT1RJRllfQ0I7DQo+ID4gKwll dmVfZGF0YS0+ZXZlX2NiID0gY2JfZnVuOw0KPiA+ICsJZXZlX2RhdGEtPndha2UgPSB3YWtlOw0K PiA+ICsJZXZlX2RhdGEtPmFnZW50X2RhdGEgPSBkYXRhOw0KPiA+ICsNCj4gPiArCWhhc2hfYWRk KHJlZ19kcml2ZXJfbWFwLCAmZXZlX2RhdGEtPmhlbnRyeSwga2V5KTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4bG54X2FkZF9jYl9mb3Jf c3VzcGVuZChldmVudF9jYl9mdW5jX3QgY2JfZnVuLCB2b2lkDQo+ID4gKypkYXRhKSB7DQo+ID4g KwlzdHJ1Y3QgcmVnaXN0ZXJlZF9ldmVudF9kYXRhICpldmVfZGF0YTsNCj4gPiArDQo+ID4gKwkv KiBDaGVjayBmb3IgZXhpc3RpbmcgZW50cnkgaW4gaGFzaCB0YWJsZSBmb3IgZ2l2ZW4gY2JfdHlw ZSAqLw0KPiA+ICsJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZShyZWdfZHJpdmVyX21hcCwgZXZlX2Rh dGEsIGhlbnRyeSwNCj4gUE1fSU5JVF9TVVNQRU5EX0NCKSB7DQo+ID4gKwkJaWYgKGV2ZV9kYXRh LT5jYl90eXBlID09IFBNX0lOSVRfU1VTUEVORF9DQikgew0KPiANCj4gU2FtZSBhcyBhYm92ZSB0 byBtYWtlIHN1cmUgdGhhdCBldmVfZGF0YSBpcyBub3QgTlVMTC4NCj4gVGhlIHNhbWUgaXMgYWxz byBiZWxvdy4NCltBYmh5dWRheV0gQXMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9s aW51eC9ibG9iLzQ0ZGI2M2QxYWQ4ZDcxYzY5MzJjYmUwMDdlYjQxZjMxYzQzNGQxNDAvdG9vbHMv aW5jbHVkZS9saW51eC9saXN0LmgjTDcxNCBub3QgcmVxdWlyZWQgdG8gZG8gTlVMTCBjaGVjayBm b3IgZXZlX2RhdGEsIEFzIGZvciBsb29wIHdpbGwgYnJlYWsgaWYgZXZlX2RhdGEgZ290IGFzIE5V TEwuDQo+IA0KPiA+ICsJCQlwcl9lcnIoIkZvdW5kIGFzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7 DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwkvKiBBZGQgbmV3IGVudHJ5IGlmIG5vdCBwcmVzZW50ICovDQo+ID4gKwlldmVfZGF0YSA9IGtt YWxsb2Moc2l6ZW9mKCpldmVfZGF0YSksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFldmVfZGF0 YSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlldmVfZGF0YS0+a2V5ID0g MDsNCj4gPiArCWV2ZV9kYXRhLT5jYl90eXBlID0gUE1fSU5JVF9TVVNQRU5EX0NCOw0KPiA+ICsJ ZXZlX2RhdGEtPmV2ZV9jYiA9IGNiX2Z1bjsNCj4gPiArCWV2ZV9kYXRhLT5hZ2VudF9kYXRhID0g ZGF0YTsNCj4gPiArDQo+ID4gKwloYXNoX2FkZChyZWdfZHJpdmVyX21hcCwgJmV2ZV9kYXRhLT5o ZW50cnksDQo+IFBNX0lOSVRfU1VTUEVORF9DQik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGxueF9yZW1vdmVfY2JfZm9yX3N1c3BlbmQo ZXZlbnRfY2JfZnVuY190IGNiX2Z1bikgew0KPiA+ICsJYm9vbCBpc19jYWxsYmFja19mb3VuZCA9 IGZhbHNlOw0KPiA+ICsJc3RydWN0IHJlZ2lzdGVyZWRfZXZlbnRfZGF0YSAqZXZlX2RhdGE7DQo+ ID4gKw0KPiA+ICsJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGVudHJ5IGluIGhhc2ggdGFibGUgZm9y IGdpdmVuIGNiX3R5cGUgKi8NCj4gPiArCWhhc2hfZm9yX2VhY2hfcG9zc2libGUocmVnX2RyaXZl cl9tYXAsIGV2ZV9kYXRhLCBoZW50cnksDQo+IFBNX0lOSVRfU1VTUEVORF9DQikgew0KPiA+ICsJ CWlmIChldmVfZGF0YS0+Y2JfdHlwZSA9PSBQTV9JTklUX1NVU1BFTkRfQ0IgJiYNCj4gPiArCQkg ICAgZXZlX2RhdGEtPmV2ZV9jYiA9PSBjYl9mdW4pIHsNCj4gPiArCQkJaXNfY2FsbGJhY2tfZm91 bmQgPSB0cnVlOw0KPiA+ICsJCQkvKiByZW1vdmUgYW4gb2JqZWN0IGZyb20gYSBoYXNodGFibGUg Ki8NCj4gPiArCQkJaGFzaF9kZWwoJmV2ZV9kYXRhLT5oZW50cnkpOw0KPiA+ICsJCQlrZnJlZShl dmVfZGF0YSk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJaWYgKCFpc19jYWxsYmFja19mb3Vu ZCkgew0KPiA+ICsJCXByX3dhcm4oIkRpZG4ndCBmaW5kIGFueSByZWdpc3RlcmVkIGNhbGxiYWNr IGZvciBzdXNwZW5kDQo+IGV2ZW50XG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCB4bG54X3JlbW92ZV9jYl9mb3Jfbm90aWZ5X2V2ZW50KGNvbnN0IHUzMiBub2RlX2lkLCBjb25z dCB1MzINCj4gZXZlbnQsDQo+ID4gKwkJCQkJICAgZXZlbnRfY2JfZnVuY190IGNiX2Z1bikNCj4g PiArew0KPiA+ICsJYm9vbCBpc19jYWxsYmFja19mb3VuZCA9IGZhbHNlOw0KPiA+ICsJc3RydWN0 IHJlZ2lzdGVyZWRfZXZlbnRfZGF0YSAqZXZlX2RhdGE7DQo+ID4gKwl1NjQga2V5ID0gKCh1NjQp bm9kZV9pZCA8PCAzMlUpIHwgKHU2NClldmVudDsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmb3Ig ZXhpc3RpbmcgZW50cnkgaW4gaGFzaCB0YWJsZSBmb3IgZ2l2ZW4ga2V5IGlkICovDQo+ID4gKwlo YXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHJlZ19kcml2ZXJfbWFwLCBldmVfZGF0YSwgaGVudHJ5LCBr ZXkpIHsNCj4gPiArCQlpZiAoZXZlX2RhdGEtPmtleSA9PSBrZXkgJiYNCj4gPiArCQkgICAgZXZl X2RhdGEtPmV2ZV9jYiA9PSBjYl9mdW4pIHsNCj4gPiArCQkJaXNfY2FsbGJhY2tfZm91bmQgPSB0 cnVlOw0KPiA+ICsJCQkvKiByZW1vdmUgYW4gb2JqZWN0IGZyb20gYSBoYXNodGFibGUgKi8NCj4g PiArCQkJaGFzaF9kZWwoJmV2ZV9kYXRhLT5oZW50cnkpOw0KPiA+ICsJCQlrZnJlZShldmVfZGF0 YSk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJaWYgKCFpc19jYWxsYmFja19mb3VuZCkgew0K PiA+ICsJCXByX3dhcm4oIkRpZG4ndCBmaW5kIGFueSByZWdpc3RlcmVkIGNhbGxiYWNrIGZvciAw eCV4IDB4JXhcbiIsDQo+ID4gKwkJCW5vZGVfaWQsIGV2ZW50KTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHhsbnhfcmVnaXN0ZXJfZXZlbnQoKSAtIFJlZ2lzdGVyIGZvciB0aGUg ZXZlbnQuDQo+ID4gKyAqIEBjYl90eXBlOglUeXBlIG9mIGNhbGxiYWNrIGZyb20gcG1fYXBpX2Ni X2lkLA0KPiA+ICsgKgkJCVBNX05PVElGWV9DQiAtIGZvciBFcnJvciBFdmVudHMsDQo+ID4gKyAq CQkJUE1fSU5JVF9TVVNQRU5EX0NCIC0gZm9yIHN1c3BlbmQgY2FsbGJhY2suDQo+ID4gKyAqIEBu b2RlX2lkOglOb2RlLUlkIHJlbGF0ZWQgdG8gZXZlbnQuDQo+ID4gKyAqIEBldmVudDoJRXZlbnQg TWFzayBmb3IgdGhlIEVycm9yIEV2ZW50Lg0KPiA+ICsgKiBAd2FrZToJRmxhZyBzcGVjaWZ5aW5n IHdoZXRoZXIgdGhlIHN1YnN5c3RlbSBzaG91bGQgYmUgd29rZW4gdXBvbg0KPiA+ICsgKgkJZXZl bnQgbm90aWZpY2F0aW9uLg0KPiA+ICsgKiBAY2JfZnVuOglGdW5jdGlvbiBwb2ludGVyIHRvIHN0 b3JlIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4NCj4gPiArICogQGRhdGE6CVBvaW50ZXIgZm9yIHRo ZSBkcml2ZXIgaW5zdGFuY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJUmV0dXJucyAwIG9u IHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uIGVsc2UgZXJyb3IgY29kZS4NCj4gPiArICovDQo+ID4g K2ludCB4bG54X3JlZ2lzdGVyX2V2ZW50KGNvbnN0IGVudW0gcG1fYXBpX2NiX2lkIGNiX3R5cGUs IGNvbnN0IHUzMg0KPiBub2RlX2lkLCBjb25zdCB1MzIgZXZlbnQsDQo+ID4gKwkJCWNvbnN0IGJv b2wgd2FrZSwgZXZlbnRfY2JfZnVuY190IGNiX2Z1biwgdm9pZCAqZGF0YSkgew0KPiA+ICsJaW50 IHJldCA9IDA7DQo+ID4gKwl1MzIgZXZlOw0KPiA+ICsJaW50IHBvczsNCj4gPiArDQo+ID4gKwlp ZiAoZXZlbnRfbWFuYWdlcl9hdmFpbGFiaWxpdHkpDQo+ID4gKwkJcmV0dXJuIGV2ZW50X21hbmFn ZXJfYXZhaWxhYmlsaXR5Ow0KPiA+ICsNCj4gPiArCWlmIChjYl90eXBlICE9IFBNX05PVElGWV9D QiAmJiBjYl90eXBlICE9IFBNX0lOSVRfU1VTUEVORF9DQikgew0KPiA+ICsJCXByX2VycigiJXMo KSBVbnN1cHBvcnRlZCBDYWxsYmFjayAweCV4XG4iLCBfX2Z1bmNfXywNCj4gY2JfdHlwZSk7DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFjYl9mdW4p DQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsJaWYgKGNiX3R5cGUgPT0gUE1f SU5JVF9TVVNQRU5EX0NCKSB7DQo+ID4gKwkJcmV0ID0geGxueF9hZGRfY2JfZm9yX3N1c3BlbmQo Y2JfZnVuLCBkYXRhKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYgKCF4bG54X2lzX2Vycm9y X2V2ZW50KG5vZGVfaWQpKSB7DQo+ID4gKwkJCS8qIEFkZCBlbnRyeSBmb3IgTm9kZS1JZC9FdmVu dCBpbiBoYXNoIHRhYmxlICovDQo+ID4gKwkJCXJldCA9IHhsbnhfYWRkX2NiX2Zvcl9ub3RpZnlf ZXZlbnQobm9kZV9pZCwgZXZlbnQsDQo+IHdha2UsIGNiX2Z1biwgZGF0YSk7DQo+ID4gKwkJfSBl bHNlIHsNCj4gPiArCQkJLyogQWRkIGludG8gSGFzaCB0YWJsZSAqLw0KPiA+ICsJCQlmb3IgKHBv cyA9IDA7IHBvcyA8IE1BWF9CSVRTOyBwb3MrKykgew0KPiA+ICsJCQkJZXZlID0gZXZlbnQgJiAo MSA8PCBwb3MpOw0KPiA+ICsJCQkJaWYgKCFldmUpDQo+ID4gKwkJCQkJY29udGludWU7DQo+ID4g Kw0KPiA+ICsJCQkJLyogQWRkIGVudHJ5IGZvciBOb2RlLUlkL0V2ZSBpbiBoYXNoIHRhYmxlICov DQo+ID4gKwkJCQlyZXQgPSB4bG54X2FkZF9jYl9mb3Jfbm90aWZ5X2V2ZW50KG5vZGVfaWQsDQo+ IGV2ZSwgd2FrZSwgY2JfZnVuLA0KPiA+ICsJCQkJCQkJCSAgIGRhdGEpOw0KPiA+ICsJCQkJLyog QnJlYWsgdGhlIGxvb3AgaWYgZ290IGVycm9yICovDQo+ID4gKwkJCQlpZiAocmV0KQ0KPiA+ICsJ CQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWlmIChyZXQpIHsNCj4gPiArCQkJCS8qIFNr aXAgdGhlIEV2ZW50IGZvciB3aGljaCBnb3QgdGhlIGVycm9yICovDQo+ID4gKwkJCQlwb3MtLTsN Cj4gPiArCQkJCS8qIFJlbW92ZSByZWdpc3RlcmVkKGR1cmluZyB0aGlzIGNhbGwpIGV2ZW50DQo+ IGZyb20gaGFzaCB0YWJsZSAqLw0KPiA+ICsJCQkJZm9yICggOyBwb3MgPj0gMDsgcG9zLS0pIHsN Cj4gPiArCQkJCQlldmUgPSBldmVudCAmICgxIDw8IHBvcyk7DQo+ID4gKwkJCQkJaWYgKCFldmUp DQo+ID4gKwkJCQkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gCXhsbnhfcmVtb3ZlX2NiX2Zvcl9ub3Rp ZnlfZXZlbnQobm9kZV9pZCwgZXZlLCBjYl9mdW4pOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQl9DQo+ ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCXByX2VycigiJXMoKSBm YWlsZWQgZm9yIDB4JXggYW5kIDB4JXg6ICVkXHJcbiIsDQo+IF9fZnVuY19fLCBub2RlX2lkLA0K PiA+ICsJCQkgICAgICAgZXZlbnQsIHJldCk7DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJ fQ0KPiA+ICsNCj4gPiArCQkvKiBSZWdpc3RlciBmb3IgTm9kZS1JZC9FdmVudCBjb21iaW5hdGlv biBpbiBmaXJtd2FyZSAqLw0KPiA+ICsJCXJldCA9IHp5bnFtcF9wbV9yZWdpc3Rlcl9ub3RpZmll cihub2RlX2lkLCBldmVudCwgd2FrZSwNCj4gdHJ1ZSk7DQo+ID4gKwkJaWYgKHJldCkgew0KPiA+ ICsJCQlwcl9lcnIoIiVzKCkgZmFpbGVkIGZvciAweCV4IGFuZCAweCV4OiAlZFxyXG4iLA0KPiBf X2Z1bmNfXywgbm9kZV9pZCwNCj4gPiArCQkJICAgICAgIGV2ZW50LCByZXQpOw0KPiA+ICsJCQkv KiBSZW1vdmUgYWxyZWFkeSByZWdpc3RlcmVkIGV2ZW50IGZyb20gaGFzaCB0YWJsZSAqLw0KPiA+ ICsJCQlpZiAoeGxueF9pc19lcnJvcl9ldmVudChub2RlX2lkKSkgew0KPiA+ICsJCQkJZm9yIChw b3MgPSAwOyBwb3MgPCBNQVhfQklUUzsgcG9zKyspIHsNCj4gPiArCQkJCQlldmUgPSBldmVudCAm ICgxIDw8IHBvcyk7DQo+ID4gKwkJCQkJaWYgKCFldmUpDQo+ID4gKwkJCQkJCWNvbnRpbnVlOw0K PiA+ICsNCj4gCXhsbnhfcmVtb3ZlX2NiX2Zvcl9ub3RpZnlfZXZlbnQobm9kZV9pZCwgZXZlLCBj Yl9mdW4pOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQl9IGVsc2Ugew0KPiA+ICsJCQkJeGxueF9yZW1v dmVfY2JfZm9yX25vdGlmeV9ldmVudChub2RlX2lkLA0KPiBldmVudCwgY2JfZnVuKTsNCj4gPiAr CQkJfQ0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfcmVnaXN0 ZXJfZXZlbnQpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhsbnhfdW5yZWdpc3Rlcl9ldmVu dCgpIC0gVW5yZWdpc3RlciBmb3IgdGhlIGV2ZW50Lg0KPiA+ICsgKiBAY2JfdHlwZToJVHlwZSBv ZiBjYWxsYmFjayBmcm9tIHBtX2FwaV9jYl9pZCwNCj4gPiArICoJCQlQTV9OT1RJRllfQ0IgLSBm b3IgRXJyb3IgRXZlbnRzLA0KPiA+ICsgKgkJCVBNX0lOSVRfU1VTUEVORF9DQiAtIGZvciBzdXNw ZW5kIGNhbGxiYWNrLg0KPiA+ICsgKiBAbm9kZV9pZDoJTm9kZS1JZCByZWxhdGVkIHRvIGV2ZW50 Lg0KPiA+ICsgKiBAZXZlbnQ6CUV2ZW50IE1hc2sgZm9yIHRoZSBFcnJvciBFdmVudC4NCj4gPiAr ICogQGNiX2Z1bjoJRnVuY3Rpb24gcG9pbnRlciBvZiBjYWxsYmFjayBmdW5jdGlvbi4NCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOglSZXR1cm5zIDAgb24gc3VjY2Vzc2Z1bCB1bnJlZ2lzdHJhdGlv biBlbHNlIGVycm9yIGNvZGUuDQo+ID4gKyAqLw0KPiA+ICtpbnQgeGxueF91bnJlZ2lzdGVyX2V2 ZW50KGNvbnN0IGVudW0gcG1fYXBpX2NiX2lkIGNiX3R5cGUsIGNvbnN0IHUzMg0KPiBub2RlX2lk LCBjb25zdCB1MzIgZXZlbnQsDQo+ID4gKwkJCSAgZXZlbnRfY2JfZnVuY190IGNiX2Z1bikNCj4g PiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArCXUzMiBldmUsIHBvczsNCj4gPiArDQo+ID4gKwlp ZiAoZXZlbnRfbWFuYWdlcl9hdmFpbGFiaWxpdHkpDQo+ID4gKwkJcmV0dXJuIGV2ZW50X21hbmFn ZXJfYXZhaWxhYmlsaXR5Ow0KPiA+ICsNCj4gPiArCWlmIChjYl90eXBlICE9IFBNX05PVElGWV9D QiAmJiBjYl90eXBlICE9IFBNX0lOSVRfU1VTUEVORF9DQikgew0KPiA+ICsJCXByX2VycigiJXMo KSBVbnN1cHBvcnRlZCBDYWxsYmFjayAweCV4XG4iLCBfX2Z1bmNfXywNCj4gY2JfdHlwZSk7DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFjYl9mdW4p DQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsJaWYgKGNiX3R5cGUgPT0gUE1f SU5JVF9TVVNQRU5EX0NCKSB7DQo+ID4gKwkJcmV0ID0geGxueF9yZW1vdmVfY2JfZm9yX3N1c3Bl bmQoY2JfZnVuKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJLyogUmVtb3ZlIE5vZGUtSWQvRXZl bnQgZnJvbSBoYXNoIHRhYmxlICovDQo+ID4gKwkJaWYgKCF4bG54X2lzX2Vycm9yX2V2ZW50KG5v ZGVfaWQpKSB7DQo+ID4gKwkJCXhsbnhfcmVtb3ZlX2NiX2Zvcl9ub3RpZnlfZXZlbnQobm9kZV9p ZCwgZXZlbnQsDQo+IGNiX2Z1bik7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJZm9yIChwb3Mg PSAwOyBwb3MgPCBNQVhfQklUUzsgcG9zKyspIHsNCj4gPiArCQkJCWV2ZSA9IGV2ZW50ICYgKDEg PDwgcG9zKTsNCj4gPiArCQkJCWlmICghZXZlKQ0KPiA+ICsJCQkJCWNvbnRpbnVlOw0KPiA+ICsN Cj4gPiArCQkJCXhsbnhfcmVtb3ZlX2NiX2Zvcl9ub3RpZnlfZXZlbnQobm9kZV9pZCwNCj4gZXZl LCBjYl9mdW4pOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKiBVbi1yZWdp c3RlciBmb3IgTm9kZS1JZC9FdmVudCBjb21iaW5hdGlvbiAqLw0KPiA+ICsJCXJldCA9IHp5bnFt cF9wbV9yZWdpc3Rlcl9ub3RpZmllcihub2RlX2lkLCBldmVudCwgZmFsc2UsDQo+IGZhbHNlKTsN Cj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCXByX2VycigiJXMoKSBmYWlsZWQgZm9yIDB4JXgg YW5kIDB4JXg6ICVkXG4iLA0KPiA+ICsJCQkgICAgICAgX19mdW5jX18sIG5vZGVfaWQsIGV2ZW50 LCByZXQpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfdW5y ZWdpc3Rlcl9ldmVudCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4bG54X2NhbGxfc3VzcGVu ZF9jYl9oYW5kbGVyKGNvbnN0IHUzMiAqcGF5bG9hZCkgew0KPiA+ICsJYm9vbCBpc19jYWxsYmFj a19mb3VuZCA9IGZhbHNlOw0KPiA+ICsJc3RydWN0IHJlZ2lzdGVyZWRfZXZlbnRfZGF0YSAqZXZl X2RhdGE7DQo+ID4gKwl1MzIgY2JfdHlwZSA9IHBheWxvYWRbMF07DQo+ID4gKw0KPiA+ICsJLyog Q2hlY2sgZm9yIGV4aXN0aW5nIGVudHJ5IGluIGhhc2ggdGFibGUgZm9yIGdpdmVuIGNiX3R5cGUg Ki8NCj4gPiArCWhhc2hfZm9yX2VhY2hfcG9zc2libGUocmVnX2RyaXZlcl9tYXAsIGV2ZV9kYXRh LCBoZW50cnksIGNiX3R5cGUpIHsNCj4gPiArCQlpZiAoZXZlX2RhdGEtPmNiX3R5cGUgPT0gY2Jf dHlwZSkgew0KPiA+ICsJCQlldmVfZGF0YS0+ZXZlX2NiKCZwYXlsb2FkWzBdLCBldmVfZGF0YS0N Cj4gPmFnZW50X2RhdGEpOw0KPiA+ICsJCQlpc19jYWxsYmFja19mb3VuZCA9IHRydWU7DQo+ID4g KwkJfQ0KPiA+ICsJfQ0KPiA+ICsJaWYgKCFpc19jYWxsYmFja19mb3VuZCkNCj4gPiArCQlwcl93 YXJuKCJEaWRuJ3QgZmluZCBhbnkgcmVnaXN0ZXJlZCBjYWxsYmFjayBmb3Igc3VzcGVuZA0KPiBl dmVudFxuIik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfY2FsbF9ub3Rp ZnlfY2JfaGFuZGxlcihjb25zdCB1MzIgKnBheWxvYWQpIHsNCj4gPiArCWJvb2wgaXNfY2FsbGJh Y2tfZm91bmQgPSBmYWxzZTsNCj4gPiArCXN0cnVjdCByZWdpc3RlcmVkX2V2ZW50X2RhdGEgKmV2 ZV9kYXRhOw0KPiA+ICsJdTY0IGtleSA9ICgodTY0KXBheWxvYWRbMV0gPDwgMzJVKSB8ICh1NjQp cGF5bG9hZFsyXTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgZm9yIGV4 aXN0aW5nIGVudHJ5IGluIGhhc2ggdGFibGUgZm9yIGdpdmVuIGtleSBpZCAqLw0KPiA+ICsJaGFz aF9mb3JfZWFjaF9wb3NzaWJsZShyZWdfZHJpdmVyX21hcCwgZXZlX2RhdGEsIGhlbnRyeSwga2V5 KSB7DQo+ID4gKwkJaWYgKGV2ZV9kYXRhLT5rZXkgPT0ga2V5KSB7DQo+ID4gKwkJCWV2ZV9kYXRh LT5ldmVfY2IoJnBheWxvYWRbMF0sIGV2ZV9kYXRhLQ0KPiA+YWdlbnRfZGF0YSk7DQo+ID4gKwkJ CWlzX2NhbGxiYWNrX2ZvdW5kID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwkJCS8qIHJlIHJlZ2lzdGVy IHdpdGggZmlybXdhcmUgdG8gZ2V0IGZ1dHVyZSBldmVudHMgKi8NCj4gPiArCQkJcmV0ID0genlu cW1wX3BtX3JlZ2lzdGVyX25vdGlmaWVyKHBheWxvYWRbMV0sDQo+IHBheWxvYWRbMl0sDQo+ID4g KwkJCQkJCQkgIGV2ZV9kYXRhLT53YWtlLA0KPiB0cnVlKTsNCj4gPiArCQkJaWYgKHJldCkgew0K PiA+ICsJCQkJcHJfZXJyKCIlcygpIGZhaWxlZCBmb3IgMHgleCBhbmQgMHgleDoNCj4gJWRcclxu IiwgX19mdW5jX18sDQo+ID4gKwkJCQkgICAgICAgcGF5bG9hZFsxXSwgcGF5bG9hZFsyXSwgcmV0 KTsNCj4gPiArCQkJCS8qIFJlbW92ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZXZlbnQgZnJvbSBoYXNo DQo+IHRhYmxlICovDQo+ID4gKwkJCQl4bG54X3JlbW92ZV9jYl9mb3Jfbm90aWZ5X2V2ZW50KHBh eWxvYWRbMV0sDQo+IHBheWxvYWRbMl0sDQo+ID4gKwkJCQkJCQkJZXZlX2RhdGEtDQo+ID5ldmVf Y2IpOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJaWYgKCFpc19jYWxsYmFj a19mb3VuZCkNCj4gPiArCQlwcl93YXJuKCJEaWRuJ3QgZmluZCBhbnkgcmVnaXN0ZXJlZCBjYWxs YmFjayBmb3IgMHgleCAweCV4XG4iLA0KPiA+ICsJCQlwYXlsb2FkWzFdLCBwYXlsb2FkWzJdKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGxueF9nZXRfZXZlbnRfY2FsbGJhY2tf ZGF0YSh1MzIgKmJ1Zikgew0KPiA+ICsJenlucW1wX3BtX2ludm9rZV9mbihHRVRfQ0FMTEJBQ0tf REFUQSwgMCwgMCwgMCwgMCwgYnVmKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90 IHhsbnhfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpIHsNCj4gPiArCXUzMiBj Yl90eXBlLCBub2RlX2lkLCBldmVudCwgcG9zOw0KPiA+ICsJdTMyIHBheWxvYWRbQ0JfTUFYX1BB WUxPQURfU0laRV0gPSB7MH07DQo+ID4gKwl1MzIgZXZlbnRfZGF0YVtDQl9NQVhfUEFZTE9BRF9T SVpFXSA9IHswfTsNCj4gPiArDQo+ID4gKwkvKiBHZXQgZXZlbnQgZGF0YSAqLw0KPiA+ICsJeGxu eF9nZXRfZXZlbnRfY2FsbGJhY2tfZGF0YShwYXlsb2FkKTsNCj4gPiArDQo+ID4gKwkvKiBGaXJz dCBlbGVtZW50IGlzIGNhbGxiYWNrIHR5cGUsIG90aGVycyBhcmUgY2FsbGJhY2sgYXJndW1lbnRz ICovDQo+ID4gKwljYl90eXBlID0gcGF5bG9hZFswXTsNCj4gPiArDQo+ID4gKwlpZiAoY2JfdHlw ZSA9PSBQTV9OT1RJRllfQ0IpIHsNCj4gPiArCQlub2RlX2lkID0gcGF5bG9hZFsxXTsNCj4gPiAr CQlldmVudCA9IHBheWxvYWRbMl07DQo+ID4gKwkJaWYgKCF4bG54X2lzX2Vycm9yX2V2ZW50KG5v ZGVfaWQpKSB7DQo+ID4gKwkJCXhsbnhfY2FsbF9ub3RpZnlfY2JfaGFuZGxlcihwYXlsb2FkKTsN Cj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQkvKg0KPiA+ICsJCQkgKiBFYWNoIGNhbGwgYmFjayBm dW5jdGlvbiBleHBlY3RpbmcgcGF5bG9hZCBhcyBhbg0KPiBpbnB1dCBhcmd1bWVudHMuDQo+ID4g KwkJCSAqIFdlIGNhbiBnZXQgbXVsdGlwbGUgZXJyb3IgZXZlbnRzIGFzIGluIG9uZSBjYWxsIGJh Y2sNCj4gdGhyb3VnaCBlcnJvcg0KPiA+ICsJCQkgKiBtYXNrLiBTbyBwYXlsb2FkWzJdIG1heSBj YW4gY29udGFpbiBtdWx0aXBsZSBlcnJvcg0KPiBldmVudHMuDQo+ID4gKwkJCSAqIEluIHJlZ19k cml2ZXJfbWFwIGRhdGFiYXNlIHdlIHN0b3JlIGRhdGEgaW4gdGhlDQo+IGNvbWJpbmF0aW9uIG9m IHNpbmdsZQ0KPiA+ICsJCQkgKiBub2RlX2lkLWVycm9yIGNvbWJpbmF0aW9uLg0KPiA+ICsJCQkg KiBTbyBjb3BpbmcgdGhlIHBheWxvYWQgbWVzc2FnZSBpbnRvIGV2ZW50X2RhdGEgYW5kDQo+IHVw ZGF0ZSB0aGUNCj4gPiArCQkJICogZXZlbnRfZGF0YVsyXSB3aXRoIEVycm9yIE1hc2sgZm9yIHNp bmdsZSBlcnJvciBldmVudA0KPiBhbmQgdXNlDQo+ID4gKwkJCSAqIGV2ZW50X2RhdGEgYXMgaW5w dXQgYXJndW1lbnQgZm9yIHJlZ2lzdGVyZWQgY2FsbA0KPiBiYWNrIGZ1bmN0aW9uLg0KPiA+ICsJ CQkgKg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJbWVtY3B5KGV2ZW50X2RhdGEsIHBheWxvYWQsICg0 ICoNCj4gQ0JfTUFYX1BBWUxPQURfU0laRSkpOw0KPiA+ICsJCQkvKiBTdXBwb3J0IE11bHRpcGxl IEVycm9yIEV2ZW50ICovDQo+ID4gKwkJCWZvciAocG9zID0gMDsgcG9zIDwgTUFYX0JJVFM7IHBv cysrKSB7DQo+ID4gKwkJCQlpZiAoKDAgPT0gKGV2ZW50ICYgKDEgPDwgcG9zKSkpKQ0KPiA+ICsJ CQkJCWNvbnRpbnVlOw0KPiA+ICsJCQkJZXZlbnRfZGF0YVsyXSA9IChldmVudCAmICgxIDw8IHBv cykpOw0KPiA+ICsJCQkJeGxueF9jYWxsX25vdGlmeV9jYl9oYW5kbGVyKGV2ZW50X2RhdGEpOw0K PiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIGlmIChjYl90eXBlID09IFBNX0lOSVRf U1VTUEVORF9DQikgew0KPiA+ICsJCXhsbnhfY2FsbF9zdXNwZW5kX2NiX2hhbmRsZXIocGF5bG9h ZCk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXByX2VycigiJXMoKSBVbnN1cHBvcnRlZCBDYWxs YmFjayAlZFxuIiwgX19mdW5jX18sIGNiX3R5cGUpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dHVybiBJUlFfSEFORExFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4bG54X2V2 ZW50X2NwdWhwX3N0YXJ0KHVuc2lnbmVkIGludCBjcHUpIHsNCj4gPiArCWVuYWJsZV9wZXJjcHVf aXJxKHZpcnFfc2dpLCBJUlFfVFlQRV9OT05FKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4bG54X2V2ZW50X2NwdWhwX2Rvd24odW5zaWdu ZWQgaW50IGNwdSkgew0KPiA+ICsJZGlzYWJsZV9wZXJjcHVfaXJxKHZpcnFfc2dpKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGxueF9k aXNhYmxlX3BlcmNwdV9pcnEodm9pZCAqZGF0YSkgew0KPiA+ICsJZGlzYWJsZV9wZXJjcHVfaXJx KHZpcnFfc2dpKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4bG54X2V2ZW50X2lu aXRfc2dpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCWludCByZXQgPSAw Ow0KPiA+ICsJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCj4gPiArCS8qDQo+ID4gKwkg KiBJUlEgcmVsYXRlZCBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGZvciB0aGUgZm9sbG93aW5nOg0KPiA+ ICsJICogZm9yIGVhY2ggU0dJIGludGVycnVwdCBlbnN1cmUgaXRzIG1hcHBlZCBieSBHSUMgSVJR IGRvbWFpbg0KPiA+ICsJICogYW5kIHRoYXQgZWFjaCBjb3JyZXNwb25kaW5nIGxpbnV4IElSUSBm b3IgdGhlIEhXIElSUSBoYXMNCj4gPiArCSAqIGEgaGFuZGxlciBmb3Igd2hlbiByZWNlaXZpbmcg YW4gaW50ZXJydXB0IGZyb20gdGhlIHJlbW90ZQ0KPiA+ICsJICogcHJvY2Vzc29yLg0KPiA+ICsJ ICovDQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOw0KPiA+ICsJc3RydWN0IGlycV9m d3NwZWMgc2dpX2Z3c3BlYzsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW50ZXJydXB0X3Bh cmVudCA9IE5VTEw7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBwZGV2LT5kZXYucGFy ZW50Ow0KPiA+ICsNCj4gPiArCS8qIEZpbmQgR0lDIGNvbnRyb2xsZXIgdG8gbWFwIFNHSXMuICov DQo+ID4gKwlpbnRlcnJ1cHRfcGFyZW50ID0gb2ZfaXJxX2ZpbmRfcGFyZW50KHBhcmVudC0+b2Zf bm9kZSk7DQo+ID4gKwlpZiAoIWludGVycnVwdF9wYXJlbnQpIHsNCj4gPiArCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJGYWlsZWQgdG8gZmluZCBwcm9wZXJ0eSBmb3IgSW50ZXJydXB0DQo+IHBhcmVu dFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyog RWFjaCBTR0kgbmVlZHMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIEdJQydzIElSUSBkb21haW4uICov DQo+ID4gKwlkb21haW4gPSBpcnFfZmluZF9ob3N0KGludGVycnVwdF9wYXJlbnQpOw0KPiA+ICsJ b2Zfbm9kZV9wdXQoaW50ZXJydXB0X3BhcmVudCk7DQo+ID4gKw0KPiA+ICsJLyogRWFjaCBtYXBw aW5nIG5lZWRzIEdJQyBkb21haW4gd2hlbiBmaW5kaW5nIElSUSBtYXBwaW5nLiAqLw0KPiA+ICsJ c2dpX2Z3c3BlYy5md25vZGUgPSBkb21haW4tPmZ3bm9kZTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ ICsJICogV2hlbiBpcnEgZG9tYWluIGxvb2tzIGF0IG1hcHBpbmcgZWFjaCBhcmcgaXMgYXMgZm9s bG93czoNCj4gPiArCSAqIDMgYXJncyBmb3I6IGludGVycnVwdCB0eXBlIChTR0kpLCBpbnRlcnJ1 cHQgIyAoc2V0IGxhdGVyKSwgdHlwZQ0KPiA+ICsJICovDQo+ID4gKwlzZ2lfZndzcGVjLnBhcmFt X2NvdW50ID0gMTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgU0dJJ3MgaHdpcnEgKi8NCj4gPiArCXNn aV9md3NwZWMucGFyYW1bMF0gPSBzZ2lfbnVtOw0KPiA+ICsJdmlycV9zZ2kgPSBpcnFfY3JlYXRl X2Z3c3BlY19tYXBwaW5nKCZzZ2lfZndzcGVjKTsNCj4gPiArDQo+ID4gKwlwZXJfY3B1KGNwdV9u dW1iZXIxLCBjcHUpID0gY3B1Ow0KPiA+ICsJcmV0ID0gcmVxdWVzdF9wZXJjcHVfaXJxKHZpcnFf c2dpLCB4bG54X2V2ZW50X2hhbmRsZXIsDQo+ICJ4bG54X2V2ZW50X21nbXQiLA0KPiA+ICsJCQkJ ICZjcHVfbnVtYmVyMSk7DQo+ID4gKwlXQVJOX09OKHJldCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ ID4gKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxX3NnaSk7DQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpcnFfdG9fZGVzYyh2aXJxX3NnaSk7DQo+ID4gKwlpcnFf c2V0X3N0YXR1c19mbGFncyh2aXJxX3NnaSwgSVJRX1BFUl9DUFUpOw0KPiA+ICsNCj4gPiArCXJl dHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfZXZlbnRfY2xl YW51cF9zZ2koc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJaW50IGNwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsNCj4gPiArDQo+ID4gKwlwZXJfY3B1KGNwdV9udW1iZXIxLCBj cHUpID0gY3B1Ow0KPiA+ICsNCj4gPiArCWNwdWhwX3JlbW92ZV9zdGF0ZShDUFVIUF9BUF9PTkxJ TkVfRFlOKTsNCj4gPiArDQo+ID4gKwlvbl9lYWNoX2NwdSh4bG54X2Rpc2FibGVfcGVyY3B1X2ly cSwgTlVMTCwgMSk7DQo+ID4gKw0KPiA+ICsJaXJxX2NsZWFyX3N0YXR1c19mbGFncyh2aXJxX3Nn aSwgSVJRX1BFUl9DUFUpOw0KPiA+ICsJZnJlZV9wZXJjcHVfaXJxKHZpcnFfc2dpLCAmY3B1X251 bWJlcjEpOw0KPiA+ICsJaXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxX3NnaSk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgeGxueF9ldmVudF9tYW5hZ2VyX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0g enlucW1wX3BtX2ZlYXR1cmUoUE1fUkVHSVNURVJfTk9USUZJRVIpOw0KPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGZWF0dXJlIGNoZWNrIGZhaWxlZCB3 aXRoICVkXG4iLCByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKChyZXQgJiBGSVJNV0FSRV9WRVJTSU9OX01BU0spIDwNCj4gPiArCSAgICBSRUdJU1RF Ul9OT1RJRklFUl9GSVJNV0FSRV9WRVJTSU9OKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiUmVnaXN0ZXIgbm90aWZpZXIgdmVyc2lvbiBlcnJvci4gRXhwZWN0ZWQNCj4gRmlybXdhcmU6 IHYlZCAtIEZvdW5kOiB2JWRcbiIsDQo+ID4gKwkJCVJFR0lTVEVSX05PVElGSUVSX0ZJUk1XQVJF X1ZFUlNJT04sDQo+ID4gKwkJCXJldCAmIEZJUk1XQVJFX1ZFUlNJT05fTUFTSyk7DQo+ID4gKwkJ cmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEluaXRpYWxpemUg dGhlIFNHSSAqLw0KPiA+ICsJcmV0ID0geGxueF9ldmVudF9pbml0X3NnaShwZGV2KTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTR0kgSW5pdCBoYXMgYmVl biBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCS8qIFNldHVwIGZ1bmN0aW9uIGZvciB0aGUgQ1BVIGhvdC1wbHVnIGNhc2Vz ICovDQo+ID4gKwljcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCAic29jL2V2 ZW50OnN0YXJ0aW5nIiwNCj4gPiArCQkJICB4bG54X2V2ZW50X2NwdWhwX3N0YXJ0LCB4bG54X2V2 ZW50X2NwdWhwX2Rvd24pOw0KPiA+ICsNCj4gPiArCXJldCA9IHp5bnFtcF9wbV9pbnZva2VfZm4o UE1fSU9DVEwsIDAsIElPQ1RMX1JFR0lTVEVSX1NHSSwNCj4gc2dpX251bSwNCj4gPiArCQkJCSAg MCwgTlVMTCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi U0dJIFJlZ2lzdHJhdGlvbiBvdmVyIEFURiBmYWlsZWQgd2l0aA0KPiAlZFxuIiwgcmV0KTsNCj4g PiArCQl4bG54X2V2ZW50X2NsZWFudXBfc2dpKHBkZXYpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXZlbnRfbWFuYWdlcl9hdmFpbGFiaWxpdHkgPSAwOw0KPiA+ ICsNCj4gPiArCWRldl9pbmZvKCZwZGV2LT5kZXYsICJYaWxpbnggRXZlbnQgTWFuYWdlbWVudCBk cml2ZXIgcHJvYmVkXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHhsbnhfZXZlbnRfbWFuYWdlcl9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJaW50IGk7DQo+ID4gKwlzdHJ1Y3QgcmVnaXN0ZXJl ZF9ldmVudF9kYXRhICpldmVfZGF0YTsNCj4gPiArCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7DQo+ ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWhhc2hfZm9yX2VhY2hfc2FmZShyZWdfZHJpdmVy X21hcCwgaSwgdG1wLCBldmVfZGF0YSwgaGVudHJ5KSB7DQo+ID4gKwkJaGFzaF9kZWwoJmV2ZV9k YXRhLT5oZW50cnkpOw0KPiA+ICsJCWtmcmVlKGV2ZV9kYXRhKTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXQgPSB6eW5xbXBfcG1faW52b2tlX2ZuKFBNX0lPQ1RMLCAwLCBJT0NUTF9SRUdJU1RF Ul9TR0ksIDAsIDEsDQo+IE5VTEwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJTR0kgdW5yZWdpc3RyYXRpb24gb3ZlciBBVEYgZmFpbGVkIHdpdGgNCj4gJWRc biIsDQo+ID4gK3JldCk7DQo+ID4gKw0KPiA+ICsJeGxueF9ldmVudF9jbGVhbnVwX3NnaShwZGV2 KTsNCj4gPiArDQo+ID4gKwlldmVudF9tYW5hZ2VyX2F2YWlsYWJpbGl0eSA9IC1FQUNDRVM7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgeGxueF9ldmVudF9tYW5hZ2VyX2RyaXZlciA9IHsNCj4gPiArCS5w cm9iZSA9IHhsbnhfZXZlbnRfbWFuYWdlcl9wcm9iZSwNCj4gPiArCS5yZW1vdmUgPSB4bG54X2V2 ZW50X21hbmFnZXJfcmVtb3ZlLA0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZSA9ICJ4 bG54X2V2ZW50X21hbmFnZXIiLA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gPiArbW9kdWxlX3BsYXRm b3JtX2RyaXZlcih4bG54X2V2ZW50X21hbmFnZXJfZHJpdmVyKTsNCj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9maXJtd2FyZS94bG54LWV2ZW50LW1hbmFnZXIuaA0KPiA+IGIvaW5jbHVk ZS9saW51eC9maXJtd2FyZS94bG54LWV2ZW50LW1hbmFnZXIuaA0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uMDk3NThhYg0KPiA+IC0tLSAvZGV2L251bGwNCj4g PiArKysgYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3hsbngtZXZlbnQtbWFuYWdlci5oDQo+ID4g QEAgLTAsMCArMSwzNiBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfRklSTVdBUkVfWExOWF9FVkVOVF9NQU5BR0VSX0hf ICNkZWZpbmUNCj4gPiArX0ZJUk1XQVJFX1hMTlhfRVZFTlRfTUFOQUdFUl9IXw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlL3hsbngtenlucW1wLmg+DQo+ID4gKw0KPiA+ICsj ZGVmaW5lIENCX01BWF9QQVlMT0FEX1NJWkUJKDRVKSAvKkluIHBheWxvYWQgbWF4aW11bSAzMmJ5 dGVzDQo+ICovDQo+ID4gKw0KPiA+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKiogRXhwb3J0 ZWQgRnVuY3Rpb24NCj4gPiArKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQo+ID4gKw0K PiA+ICt0eXBlZGVmIHZvaWQgKCpldmVudF9jYl9mdW5jX3QpKGNvbnN0IHUzMiAqcGF5bG9hZCwg dm9pZCAqZGF0YSk7DQo+ID4gKw0KPiA+ICsjaWYgSVNfUkVBQ0hBQkxFKENPTkZJR19YTE5YX0VW RU5UX01BTkFHRVIpDQo+ID4gK2ludCB4bG54X3JlZ2lzdGVyX2V2ZW50KGNvbnN0IGVudW0gcG1f YXBpX2NiX2lkIGNiX3R5cGUsIGNvbnN0IHUzMg0KPiBub2RlX2lkLA0KPiA+ICsJCQljb25zdCB1 MzIgZXZlbnQsIGNvbnN0IGJvb2wgd2FrZSwNCj4gPiArCQkJZXZlbnRfY2JfZnVuY190IGNiX2Z1 biwgdm9pZCAqZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgeGxueF91bnJlZ2lzdGVyX2V2ZW50KGNv bnN0IGVudW0gcG1fYXBpX2NiX2lkIGNiX3R5cGUsIGNvbnN0IHUzMg0KPiBub2RlX2lkLA0KPiA+ ICsJCQkgIGNvbnN0IHUzMiBldmVudCwgZXZlbnRfY2JfZnVuY190IGNiX2Z1bik7ICNlbHNlDQo+ IHN0YXRpYyBpbmxpbmUNCj4gPiAraW50IHhsbnhfcmVnaXN0ZXJfZXZlbnQoY29uc3QgZW51bSBw bV9hcGlfY2JfaWQgY2JfdHlwZSwgY29uc3QgdTMyDQo+IG5vZGVfaWQsDQo+ID4gKwkJCQkgICAg ICBjb25zdCB1MzIgZXZlbnQsIGNvbnN0IGJvb2wgd2FrZSwNCj4gPiArCQkJCSAgICAgIGV2ZW50 X2NiX2Z1bmNfdCBjYl9mdW4sIHZvaWQgKmRhdGEpIHsNCj4gPiArCXJldHVybiAtRU5PREVWOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtpc3RhdGljIGlubGluZSBpbnQgeGxueF91bnJlZ2lzdGVyX2V2 ZW50KGNvbnN0IGVudW0gcG1fYXBpX2NiX2lkIGNiX3R5cGUsDQo+IGNvbnN0IHUzMiBub2RlX2lk LA0KPiA+ICsJCQkJCSBjb25zdCB1MzIgZXZlbnQsIGV2ZW50X2NiX2Z1bmNfdA0KPiBjYl9mdW4p IHsNCj4gPiArCXJldHVybiAtRU5PREVWOw0KPiA+ICt9DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4g PiArI2VuZGlmIC8qIF9GSVJNV0FSRV9YTE5YX0VWRU5UX01BTkFHRVJfSF8gKi8NCj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS94bG54LXp5bnFtcC5oDQo+ID4gYi9pbmNs dWRlL2xpbnV4L2Zpcm13YXJlL3hsbngtenlucW1wLmgNCj4gPiBpbmRleCAwNmVhNWE0Li5mM2U4 NTdjIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvZmlybXdhcmUveGxueC16eW5xbXAu aA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUveGxueC16eW5xbXAuaA0KPiA+IEBA IC0xMzMsNiArMTMzLDggQEAgZW51bSBwbV9pb2N0bF9pZCB7DQo+ID4gIAlJT0NUTF9SRUFEX1BH R1MgPSAxNSwNCj4gPiAgCS8qIFNldCBoZWFsdGh5IGJpdCB2YWx1ZSAqLw0KPiA+ICAJSU9DVExf U0VUX0JPT1RfSEVBTFRIX1NUQVRVUyA9IDE3LA0KPiA+ICsJLyogUmVnaXN0ZXIgU0dJIHRvIEFU RiAqLw0KPiA+ICsJSU9DVExfUkVHSVNURVJfU0dJID0gMjUsDQo+ID4gIH07DQo+ID4NCj4gPiAg ZW51bSBwbV9xdWVyeV9pZCB7DQo+ID4NCj4gDQo+IFRoZSByZXN0IGxvb2tzIGdvb2QgdG8gbWUu IFBsZWFzZSBwdXNoIGludGVyZmFjZSB0byBURkEgZmlyc3QgdG8gbWFrZSBzdXJlIHRoYXQNCj4g QVBJIHdvbid0IGNoYW5nZS4NCltBYmh5dWRheV0gVEZBIGNoYW5nZXMgYXJlIGFscmVhZHkgbWVy Z2VkLiANCj4gDQo+IFRoYW5rcywNCj4gTWljaGFsDQpUaGFua3MsDQpBYmh5dWRheQ0KDQo=