Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp556427rwb; Sun, 6 Nov 2022 09:51:42 -0800 (PST) X-Google-Smtp-Source: AMsMyM77fenTyKMTzjFdRE+CRaq5Xwjg94wTX3PAA9R1x0ExTC5Gud9q/B+sSIPXXXvPxuDSJZg8 X-Received: by 2002:a05:6402:4444:b0:458:f355:ce04 with SMTP id o4-20020a056402444400b00458f355ce04mr47235748edb.422.1667757101851; Sun, 06 Nov 2022 09:51:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1667757101; cv=pass; d=google.com; s=arc-20160816; b=ipgIORHjaoBfMygG/zDroaY27OpjQ7Vg9IgfgfaQekn1b8zyTdp5a757NjrDxmV9dC R/7B3drCM/au2u7DYKA8RuWLo/RKIoh7RDhAN4NT02CXtLR+3iseREVUzOkOcPq/Vnaz KsCwvdMRkS6KJTCbLoLBWEkJ6guZbhDp8V6/nLDy1oQYweRrGJMKVORrlzf5X2i+FqXT +nE+GqM7vk7m0YQbL9NjJt8TrEeJJ/fyMdnTCOTfbCoBZ34Pc7hjaG6nlG6YDgivk4Te wUTU1s0gHe1vJWwOtEZ1JDfums/LVntTLSmDWnypwlhTtvw0/geBusZrAN5hqm9AzQR1 uPLw== 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 :dlp-reaction:dlp-product:dlp-version:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=RxSmcyTQLxGbQhIKRWgnQaR0why5cMjhtFbXpG3NFUU=; b=d5o5mQjeMc4ipnJYvPU06QcQv/2q6ZPssx2DL/8b6nI6H4pEbXyN95MWYRU9ldpSx0 ULeVeV1/GyulxVV8LekMI9hTSI2OTh0uxvdhyN3ERTqAjxks5y/7dWiGRXTTi2DCZM/1 aLe8Vr9P52kxV8jG3QLtdcbMW3WJ2zFKKk7zPJrLvYNvk9CHPlnQzP4H0Pn9gImjZteb 59TA/a61okFtb+QQVo0eAdAXPBIVj9nl6scskkR98oV3FQtYREAl3GskOIAxy++JLdEU qB9YqofZog4gveovqQwl1MV0KUqkjgnnFhWgsnI6yOIZEFvfWdCu7gq4DfhneT4HmSiG odcA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=g8h01FX3; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b5-20020a056402084500b004623028c586si6876200edz.141.2022.11.06.09.51.17; Sun, 06 Nov 2022 09:51:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=g8h01FX3; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230155AbiKFRcM (ORCPT + 96 others); Sun, 6 Nov 2022 12:32:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229919AbiKFRcJ (ORCPT ); Sun, 6 Nov 2022 12:32:09 -0500 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2209AF4D; Sun, 6 Nov 2022 09:32:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1667755927; x=1699291927; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=RxSmcyTQLxGbQhIKRWgnQaR0why5cMjhtFbXpG3NFUU=; b=g8h01FX3IFTacGhwPO+PEidY/6tX39cKYPSQ6M0p4grgJ4XpbQJNuBMq 49f/vflneQko5IC0gsGpAhlu/5QTKER0DTRZchfPrwJNeu5qnix8c3n3W 4pat4anuUzIzD/V+RMz7v0Cz/VLbFqs8lCTMaY2KOz8M7q6qqv1sr9nPh c/prch2XbvVTLtHGpe9EDhWq8nZDEAd8ff91eiIZD9Hah6Vwelb8O4Gbr v8qiqt+jRWWH0yDVd6xjrEVgwqJm2CpRLFHAhPZIGEQgr7tgDhFr0q3ss h/1eC9uoOCDxJ6HnmMz7rrREqtdWK5t6WTzOkz6oPzQ4HCh48uE+n6xpW g==; X-IronPort-AV: E=McAfee;i="6500,9779,10523"; a="289997575" X-IronPort-AV: E=Sophos;i="5.96,142,1665471600"; d="scan'208";a="289997575" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Nov 2022 09:32:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10523"; a="630254383" X-IronPort-AV: E=Sophos;i="5.96,142,1665471600"; d="scan'208";a="630254383" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga007.jf.intel.com with ESMTP; 06 Nov 2022 09:32:06 -0800 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sun, 6 Nov 2022 09:32:05 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Sun, 6 Nov 2022 09:32:05 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Sun, 6 Nov 2022 09:32:05 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K7r/otH09/nrg+gouk6n3EfjxpDP0dRS9Hx8OoocMEfWF+Hb0S9B/9JmK7V2pAH7N45ibBy543MzNF2D4wpabkm+sFvLHbQ8X7sexzePu6QTG1VMVqdxXvCp70yYbxdXsd8L6MBf3ypyM781JfM5XJgWGdu8HWRcA9ICJ4/VgN+hg+6gDE4uHyK9+rKQqJKrikWW07rHC6pElAhwpDpkfVj49Qj7kLQzZEEvfbNd3gJHqDVyg6W5Ep8lFkiPJCwIRcIe/rpxSBXF9rhaRKgxd/j51FfDRsPTiVwS1ZTPqpsZH+SuCM96io3FBjjf9JMmfYs0nqjxzYgEY9JxtBQanA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RxSmcyTQLxGbQhIKRWgnQaR0why5cMjhtFbXpG3NFUU=; b=KP6oHT+WBcxJvThx4vIT5R4M5rH7gwPuIemrK0aeq5R0Gt2fjV5J5QoZk76RfU8QozvVHxakNtgpsaaD0WNzogiWycCxs1R49o6dEwU/hLrEbofpkUdTYGqj43UQBzyQAYUpWOQz7LyuyZPdXqJ85lqRPMBoBNz+Baut+c82epGNGtVMp/YTqV1wqkTgfDGCX4htWhNISCKQFqw1T8nyuGSXWlIVAfp0Yj6S4Z/PiMFUzoLz9GJOa7Mbu1DXDhdgxWy6Wsw+WRnJev8+UntaSrY/nwATIlAqpsVvFCUF1gtfFU5fKT3Lk3yFCnIz2s6wueVE/YgyrRce3yEi40mFvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4835.namprd11.prod.outlook.com (2603:10b6:303:9e::22) by DS0PR11MB7508.namprd11.prod.outlook.com (2603:10b6:8:152::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.26; Sun, 6 Nov 2022 17:32:03 +0000 Received: from CO1PR11MB4835.namprd11.prod.outlook.com ([fe80::f730:39aa:3f63:a416]) by CO1PR11MB4835.namprd11.prod.outlook.com ([fe80::f730:39aa:3f63:a416%5]) with mapi id 15.20.5791.025; Sun, 6 Nov 2022 17:32:03 +0000 From: "Khandelwal, Rajat" To: Jonathan Cameron CC: Rajat Khandelwal , "lars@metafoo.de" , "linux-kernel@vger.kernel.org" , "linux-iio@vger.kernel.org" , "jdelvare@suse.com" , "linux@roeck-us.net" , "linux-hwmon@vger.kernel.org" Subject: RE: [PATCH v6] iio: temperature: Add driver support for Maxim MAX30208 Thread-Topic: [PATCH v6] iio: temperature: Add driver support for Maxim MAX30208 Thread-Index: AQHY58ywMYnIRax/gUaRtP+D2GP1E64lf7iAgAMz1aCACSqggIAAAsdwgAAMGgCAAEoY8A== Date: Sun, 6 Nov 2022 17:32:03 +0000 Message-ID: References: <20221025171858.225242-1-rajat.khandelwal@linux.intel.com> <20221029160353.3999849b@jic23-huawei> <20221106115705.623503c3@jic23-huawei> <20221106125020.1e546305@jic23-huawei> In-Reply-To: <20221106125020.1e546305@jic23-huawei> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.500.17 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4835:EE_|DS0PR11MB7508:EE_ x-ms-office365-filtering-correlation-id: e56948c5-37ed-4834-c802-08dac01cd18e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: usuCcJCA4kilB859hpyV4Iq+xJputxx7WkkvnR9UVnws/lmbkLzi3Yl1rTrlZqcqwI95Ywl1eJUUQs+9TasDa47glgzROuheXYIChsVFjpbSH5E1RgV9ktELCrBIny5LBNH36UgQq99Z+uCJKsbK0r+rpRFYecyhOtylDHzIysCCWGv+EkEe0CHbzG51II7kyZqEpf1v8OgW5BB0RyC5OnTYO1cz/3RjxlvmnJhm9/UhMsccak3VGwu+dvpNzZuC7bEVNBPWRhixbNGvq7UcznBpVrrkxajtje2UFTeKMtzE5TkUiWJ7Jq5Ptu024WXPZc411Yk8/fuqft0PgK0q8GiEn34pXRwTJbcT0szEJabsvh3DD0l/YlswZ/ghE/5iEY4JSkuRVPSrfElv7cfP0/9ZyB5ix4WypQeRnMT6qcfq/F3421naVMwicfMm/+ahlvG5xyw+vlgWzJFG+YX9Y+x3E4JB/bJvNzC23mKBQRU8IBA7J6zIYtfo5dfa7KbsEzEfaM3sXj1Y632d8aK+Kwwyprxt7FCT+atLMrHg/6K7aTyxlf/J+4jB/K41H8RnUe0UK0QEQtp17c3Ag1h0dycjM/Ez5whlpv2CJFvTEpilTMGWIE8ZPjCkOUxrMaespDuWmrDU2Eq9GptwnnrWhbr9a921YNxllskAlOHzoCJGHtTFPeLAOXBMuR51mb8XHKouHMGshHnfmJuEsqnFy0I7iliWi7CypZg8/6//9s91U7/tFrflW3F/syGSUAzLq7wNm01GQI9xrFK0aSnfF3mlFfFSPwlH34k1mtwJOjo= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4835.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(396003)(39860400002)(376002)(136003)(346002)(451199015)(86362001)(186003)(33656002)(55016003)(66556008)(66946007)(76116006)(316002)(6916009)(66446008)(64756008)(41300700001)(83380400001)(8676002)(4326008)(71200400001)(53546011)(26005)(6506007)(9686003)(7696005)(45080400002)(54906003)(478600001)(966005)(38100700002)(122000001)(66476007)(38070700005)(82960400001)(52536014)(30864003)(5660300002)(8936002)(2906002)(66899015)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L09UVEt6KysxbTdRMk9yUkl3L3hHUnJ4NytBeSs3UHJDTE9sQytCYTJ5dFg0?= =?utf-8?B?WGtqdUFIL3dtRzJZaTdFZWYyRm1XV1RoZFBLajR1TnhGRUNwVExWelU2ZlNN?= =?utf-8?B?STVzV2NvVjhKQTZaOWNEenJGMWhHRjVVM0d2dy8xWFpYd0F6WW1YSjRwQ2pN?= =?utf-8?B?a3BrN1RQMkRnaTA2QVFEUFM1TVh4M215L2hmOWdEUEJoMmhka1gvaXZmcjZO?= =?utf-8?B?TFRRNitLRTF2cmVGbWNESnN4ZTFlVDhoTkpWN04zMmhldi9icElpeGZTRHJP?= =?utf-8?B?bnQ1TVBKTGJDbDkyeDhSdExXbi8ydW1VUDNJbk1tNWxpaDRqdnJlZGd5M0xN?= =?utf-8?B?dXVCclhVemFsa1F4d051VElwME1HNTBKSXVPSlBjcUpCaU5uVFFYS3hTeDhi?= =?utf-8?B?bXJUMkYyelEvcXNlYVljWWQzSkV3VTJaaWN5c2ZZTVZhZHBnVG1wZUtjVyth?= =?utf-8?B?cjVMRVlUZmpKVktGYkQrdGNSaVg0NE56YWgyazIvL0tYS0Vva1AzaE8wMFFY?= =?utf-8?B?UkdUdFUrVE1KQzc3bDFhRWVmeUNwZjNORTZJMEhnQXB3ZHNpd0Rkb2FrN3NY?= =?utf-8?B?YlFIQ09XL3hONHBncGpTd2FlNnhnUysrNnBNaFI5bDltcUFxeTJBcWVJR09L?= =?utf-8?B?bHNOMG5xSzZGYUdQdUF3VnUzWmRTcSt4Q0tEdTVuVHpoVWFablo5SFBnQ3pY?= =?utf-8?B?Slk3VVJRbTExWG9xT0U4Y0JkbTRKRlhoVXFwQlZwcUJvbjlQNnpFN05UZDhU?= =?utf-8?B?Z3ZEbWQzRnBVRElSRmhNVDM1dHJ1aVl0ZnJuUE1UNDdFWlJkanRtTUFkdlYx?= =?utf-8?B?MDNCbzNWdC9uUkhsREhJMGd6WVdyZjM4ODlmZkZ6R2I0ckNpRjVmZlZ1SXUy?= =?utf-8?B?OHZUd2xUOWRMOWh4alFBYlBwZG1QOFNWaERvWEpnbjF3dm0wWXFpWkplMm55?= =?utf-8?B?Y1BpdkVGRTlEaXRSUFZJcXZicHlia255Ulo1WG1BTnVoVGNrRVVhNUlhNGpl?= =?utf-8?B?UXhndVg5YmgrSVJUZTJjR1lOM0Nuc3V0dWJ5ZU9HWDNNdzdZMDlrZjVPVnRi?= =?utf-8?B?VlpsM29RWUdhLzB0cGJHZCtxYW82UkhTYjN2WHh2djhaUGYzZUdSS0NmRlBJ?= =?utf-8?B?QUZOcG9wZml4VmdUdEt3bDhnTndMd2I1Q1hacTJBakw2b1FwVUxwWEI0RW5N?= =?utf-8?B?NDF0N3RGSnR4bjlMVWR2QlhyNFVaRWVoUmhZdlVHTDZVbUZQdTZtRWdUMmgr?= =?utf-8?B?QjhnQTVRVFU5NjhYTURJSG53VGpJSzZkMDJmblhQeTFhUlo4MDJwM0pPeFc0?= =?utf-8?B?MWZPcnBaRVNLWFZiY3YzZFpKUWZueUI0QWk2Nks1Wldub2syN3FLK3crMWJj?= =?utf-8?B?L3hiaGJRUGM3N0dOSWxBbmQ3ZUNpemxjeUh0b0ZxZ0pYYW5nN0diWFBQbVFv?= =?utf-8?B?Q2NYWHVyb1BORE9lRXJ3WEo1THQzeERjTmhzdHFtQ1o0RDZvYWVDY3NtMnFW?= =?utf-8?B?VkJZVWVSRHI4bGFCTTB1LzlWWUlMSnJOVnRrK0RBakNVOU9FbVp5OVYwK1Fl?= =?utf-8?B?L2lNdlNIeTR4VkpQd1dEMnFKVVB3S3huT3FLTlVQbW9pODN5c0F1SHhCN2lo?= =?utf-8?B?TCtCWURkdGJpdnFrTVY2TmJMRElZLzF4bUExRVlzeXJDRjlLaWdXUkp4aUUx?= =?utf-8?B?TTBPM0txcGQ2cEN6Z0MxZ1Q0MDM5T3Z3QU1DeVdGZUR6dmZDTlU5ODNVMmEr?= =?utf-8?B?MDdOY2x3V1Q1Y05HMTMvajF2N2htRkVydDUrK21YWlFBOTNCUWUvdzZHeEF0?= =?utf-8?B?ZFJGTjd1T0d2NHBDbi82cHBTOWs3bE5jOS9EejJ0ZTlTYkc0QVIrK01TS3BP?= =?utf-8?B?Nm5PRVZGck91cWw0ZjVPbWZqQjdFaHBjTEthelczODlrWE0yZ2ZEbFNNbFZE?= =?utf-8?B?TG1tZHE3cHU2ajVxU0puNkZPRFpXNVo1TjRRaCt6ODFPK0VJd2d1OGhqR2d3?= =?utf-8?B?clhiTHFMOStLdnhyU1oyd1FVaTNHeTNuQlFYZmpYeWpVd0F4RU9uUVlXMGFG?= =?utf-8?B?VXRpb3FjZ0c5b2hyUjN4YU1aNDdLVjJ4WjVYN3kveFNGcllDak9mU3NZNmNa?= =?utf-8?B?MnNQMkJkdS94U3AzVjdwZ25QVGIyWklVRU54ZjVPckpWUTdWdDZTd0FXNzhs?= =?utf-8?B?dEE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4835.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e56948c5-37ed-4834-c802-08dac01cd18e X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Nov 2022 17:32:03.3134 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9qjhI22nbYPS0v026jZ7H9U7/W3hRWf6Kq7e7l725CCO8Q/h6dXB3XCHOFq9oZCT8+2tg7Us2TpQjl9mTc4zxiY4uXCQiDOO7bx/+DF/isA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB7508 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSm9uYXRoYW4sDQpUaGlzIGlzIHJlYWxseSB3ZWlyZCBhbmQgSSBkb27igJl0IGtub3cgaG93 IGNvdWxkIEkgYmUgc28gbWlzdGFrZW4uIFNvLCBhY3R1YWxseSBvbiBwYWdlIDI5IG9mIGRhdGFz aGVldCwNCml0cyBnaXZlbiB0aGF0IHRoaXMgUk8gYml0IGlzIG9uIDFzdCBwb3NpdGlvbiBhbmQg aXRzIGRlZmF1bHQgdmFsdWUgb2YgMHgwIG9uIHJlc2V0LiBJIGltcGV0dW91c2x5IGNvbnNpZGVy ZWQNCnRoZSBudW1iZXIgIjEiIHdyaXR0ZW4gYWJvdmUgYW5kIHRvb2sgaXQgZm9yIHRoZSBkZWZh dWx0IHZhbHVlLiBBbGwgdGhpcyB0aW1lLCBJIGhhdmUgYmVlbiB0aGlua2luZyB0aGF0DQp0aGlz IGJpdCBpcyBhbHJlYWR5IHNldCB0byAiMSIgYW5kIHJlYWxseSBub3QgcGF5aW5nIGF0dGVudGlv biB0byBpdC4gDQpUaGFua3MgSm9uYXRoYW4gZm9yIHBvaW50aW5nIGl0IG91dC4gTWF5YmUgSSBl dmVuIG1pc3NlZCBpdCBpbiBteSBkcnkgcnVucyBiZWNhdXNlIHRoZSB0ZW1wZXJhdHVyZQ0Kd2Fz IG5vdCB2YXJ5aW5nIGF0IHRoZSBzYW1lIHBsYWNlIHRoZSBzZW5zb3Igd2FzIGtlcHQuIA0KDQpC ZWZvcmUgc2VuZGluZyBvdXQgdjggKHByb2JhYmx5IHRoZSBsYXN0IG9uZSBJIGhvcGUpLCBJIHdv dWxkIGxpa2UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIDMgbGFzdA0KY2hhbmdlcyB0byBi ZSBkb25lLg0KMS4gTm90IHJldHVybmluZyBwcmV2aW91cyBzdGFsZSB2YWx1ZXMgaWYgdGVtcGVy YXR1cmUgY29udmVyc2lvbiBnZXRzIGNvbXBsZXRlLiBTaW1wbHkgcmV0dXJuaW5nIGVycm9yLiAN CjIuIFNldHRpbmcgdXAgR1BJTyBGSUZPX1JPLiANCjMuIERyb3BwaW5nIEFDUElfUFRSIA0KDQpP biB0aGUgYWxnb3JpdGhtIGVuZCwgSSB0aGluayBpdCBzaG91bGQgcmVtYWluIHRoZSBzYW1lIGJl Y2F1c2UgZmlyc3QgSSBjb3VudCB0aGUgbnVtYmVyIG9mIGRhdGEgd29yZHMgdG8NCmJlIHBvcHBl ZCBvdXQgYmVmb3JlIEkgZ2V0IGEgcmVhZGluZyAoZm9yIG92ZXJmbG93LCBpdCBpcyB0aGUgbnVt YmVyIG9mIHdvcmRzIHdoaWNoIGdldCByZXdyaXR0ZW4gYW5kIGZvcg0Kbm9ybWFsIGNhc2UsIGl0 IGlzIHRoZSBGSUZPIGRhdGEgY291bnQgcmVnaXN0ZXIgdmFsdWUpLiBUaGVuIEkgd291bGQga2Vl cCBwb3BwaW5nIHVwIHRoYXQgbWFueSB2YWx1ZXMgdW50aWwNCkkgcmVhY2ggdGhlIGVuZCB3aGlj aCBnaXZlcyBtZSB0aGUgY3VycmVudCBjb252ZXJ0ZWQgcmVhZGluZy4gDQpQbGVhc2UgbGV0IG1l IGtub3cgaWYgdGhlcmUgaXMgc3RpbGwgZG91YnQgb3IgeW91IHRoaW5rIGlmIGl0cyBlcnJvbmVv dXM/DQoNCkkgYW0gc3RpbGwgaW4gc2hvY2sgb2YgaG93IEkgY291bGQgaGF2ZSBwb3NzaWJseSBt aXNyZWFkIHRoZSBkYXRhc2hlZXQhIE1heWJlIEkgd2FzIGluIGEgaHVycnkgb2Ygc3VibWl0dGlu Zw0KdGhlIHBhdGNoPw0KSSB3aWxsIGJlIGNhcmVmdWwgbmV4dCB0aW1lLiANCg0KVGhhbmtzIEpv bmF0aGFuIGZvciBiZWluZyBwYXRpZW50IHdpdGggbWUuIDopDQoNClRoYW5rcw0KUmFqYXQNCg0K LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEpvbmF0aGFuIENhbWVyb24gPGppYzIz QGtlcm5lbC5vcmc+IA0KU2VudDogU3VuZGF5LCBOb3ZlbWJlciA2LCAyMDIyIDY6MjAgUE0NClRv OiBLaGFuZGVsd2FsLCBSYWphdCA8cmFqYXQua2hhbmRlbHdhbEBpbnRlbC5jb20+DQpDYzogUmFq YXQgS2hhbmRlbHdhbCA8cmFqYXQua2hhbmRlbHdhbEBsaW51eC5pbnRlbC5jb20+OyBsYXJzQG1l dGFmb28uZGU7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWlpb0B2Z2VyLmtl cm5lbC5vcmc7IGpkZWx2YXJlQHN1c2UuY29tOyBsaW51eEByb2Vjay11cy5uZXQ7IGxpbnV4LWh3 bW9uQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCB2Nl0gaWlvOiB0ZW1wZXJh dHVyZTogQWRkIGRyaXZlciBzdXBwb3J0IGZvciBNYXhpbSBNQVgzMDIwOA0KDQoNCj4gDQo+ID4g ICANCj4gPiA+IEVycm9yIHJldHVybiB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIC0gdGhlcmUg aXMgb25lIGZvciB0aW1lb3V0cy4gICAgDQo+ID4gQXMgaW5kaWNhdGVkIGFib3ZlLCBpZiB5b3Ug YXJlIGluIGZvciB0aGF0LCB0aGVuIGhlcmUgd2Ugc2hvdWxkIA0KPiA+IGlkZWFsbHkgcmV0dXJu IDAgc2luY2UgZXZlbiBhZnRlciB0aGUgZXJyb3IsIHdlIHdhbnQgdXBkYXRlX3RlbXAgdG8gZG8g aXRzIGpvYiBhbmQgcmV0dXJuIHRoZSBsYXN0IHJlYWRpbmcuDQo+ID4gICANCj4gPiA+V2hpbHN0 IHlvdSBkZWJhdGVkIHRoaXMgbG9naWMgd2l0aCBHdWVudGVyIGluIHY1LCBJIGRvbid0IGZvbGxv dyB0aGUgY29uY2x1c2lvbi4NCj4gPiA+SWYgRklGT19PVkZfQ05UUiA+IDAgdGhlbiBGSUZPX0RB VEFfQ05UUiA9PSBtYXhpbXVtIHZhbHVlLiAgTG9naWMgDQo+ID4gPm9mIHRoaXMgaXMgZ2l2ZW4g aW4gRklGT19EQVRBIFJlYWQgRXhhbXBsZSAoUGFnZSAxNiBvZiB0aGUgc3BlYykgIA0KPiA+ID5J dCBkb2Vzbid0IG1hdHRlciBhcyBzdWNoIGJlY2F1c2UgeW91IHJlYWQgRklGT19EQVRBX0NOVFIg YWdhaW4gDQo+ID4gPmFueXdheSwgYnV0IGl0IHdvdWxkIGJlIG1vcmUgb2J2aW91cyB3aGF0IGlz IGdvaW5nIG9uIGlmIHlvdSBqdXN0IHNldCBkYXRhX2NvdW50ID0gMzIgaWYgb3ZlcmZsb3cgaGFz IG9jY3VyZWQuDQo+ID4gPg0KPiA+ID5UaGUgb25seSB0aGluZyBJIHdvdWxkIGFyZ3VlIHlvdSAn bWlnaHQnIHdhbnQgdG8gZG8gd2l0aCB0aGUgDQo+ID4gPm92ZXJmbG93IGNvdW50ZXIgaXMgdG8g dXNlIGl0IHRvIGluZGljYXRlIHdlIG5lZWQgdG8gcmVhZCBhdCBsZWFzdCB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIGluIHRoZSBmaWZvLg0KPiA+ID5JZiB0aGVyZSBhcmUgbm8gYWRkaXRpb25hbCBl bGVtZW50cyBhdCB0aGUgZW5kLCB3YWl0IHVudGlsIHRoZXJlIGlzIA0KPiA+ID5vbmUuIE90aGVy d2lzZSB5b3UgcG90ZW50aWFsbHkgZ2V0IHZlcnkgc3RhbGUgZGF0YSAtIGl0IG1pZ2h0IGhhdmUg DQo+ID4gPmJlZW4gb3ZlcmZsb3dpbmcgZm9yIGEgbG9uZyB0aW1lKSBUaGlzIGRlY3JlYXNlIGJ5 IG1vcmUgdGhhbiAxIGlzIA0KPiA+ID53b3JyeWluZy4gIEkgY2FuIHVuZGVyc3RhbmQgaXQgbm90 IGRlY3JlYXNpbmcsIG9yIGV2ZW4gaW5jcmVhc2luZyANCj4gPiA+KG5ldyBkYXRhIGNhbWUgaW4p LCBidXQgdGhpcyBjb25kaXRpb24gc291bmRzIGVpdGhlciBsaWtlIHdlIGFyZSBkb2luZyBzb21l dGhpbmcgd3Jvbmcgb3IgdGhlcmUgaXMgYSBoYXJkd2FyZSBidWcuDQo+ID4gT2ssIGV2ZW4gSSBz dGFydGVkIGRvdWJ0aW5nIHRoZSBuYXR1cmUgb2YgdGhlIGRldmljZSBJIGVuY291bnRlcmVkIHdo ZW4gSSB0ZXN0ZWQgaXQuDQo+ID4gVGhlIHRoaW5nIGlzLCB0aGlzIGRyaXZlciBhbHNvIGNvbWVz IHdpdGggYW4gRVYga2l0IHdoZXJlaW4geW91IGNhbiANCj4gPiBwbHVnIGludG8gUEMsIGRvd25s b2FkIHRoZSBzb2Z0d2FyZSBhbmQgaW50ZXJmYWNlIGl0IHZpYSBVU0IuIA0KPiA+IFdoZW5ldmVy IEkgZW11bGF0ZWQgcmVhZHMgZnJvbSB0aGUgT1MsIEkgZW5jb3VudGVyZWQgZXJyb25lb3VzIGNv dW50ZXIgZGVjcmVtZW50cy4NCj4gPiBIb3dldmVyLCBJIGhhdmUgdGVzdGVkIGl0IHVzaW5nIG5h dGl2ZSBJMkMgb24gbXkgbWljcm9jb250cm9sbGVyIGFuZCANCj4gPiBJIGRvbid0IGV2ZXIgZW5j b3VudGVyIHN1Y2ggcmVhZGluZ3MsIHRodXMgY29uY2x1ZGluZyB0aGF0IHRoZSANCj4gPiBzcHVy aW91cyBlcnJvbmVvdXMgem9uZXMgb25seSBleGlzdCB3aGVuIHRoZSBFViBraXQgaXMgaW50ZXJm YWNlZCB2aWEgVVNCLg0KPiA+IFRoYW5rcyBmb3IgY3JlYXRpbmcgdGhpcyBkb3VidC4gSSBoYXZl IHNvbHZlZCBpdCBieSBvbmx5IA0KPiA+IGRlY3JlbWVudGluZyBkYXRhX2NvdW50IHVubGVzcyBp dCBiZWNvbWVzIDAuDQo+ID4gUmVnYXJkaW5nIGRhdGFfY291bnQgdmFyaWFibGUsIHNvIHdoZW4g b3ZlcmZsb3cgY291bnRlciBpcyA+MCwgSSB3YW50IHRvIGRlY3JlYXNlICdvdmVyZmxvdyBjb3Vu dGVyJw0KPiA+IG51bWJlciBvZiB0aW1lcyB0byBnZXQgdGhlIHJlcXVpcmVkIHJlYWRpbmcgYW5k IHdoZW4gb3ZlcmZsb3cgDQo+ID4gY291bnRlciBpcyA9MCwgSSB3YW50IHRvIGRlY3JlYXNlICdk YXRhIGNvdW50ZXInIG51bWJlciBvZiB0aW1lcyB0byBnZXQgdGhlIHJlYWRpbmcuIEhvcGUgaXQg bWFrZXMgc2Vuc2Ugbm93IGluIHRoZSBuZXcgdmVyc2lvbi4NCj4gDQo+ID5UaGF0IGlzbid0IGhv dyBJIHJlYWQgdGhlIGRhdGFzaGVldC4gDQo+ID4NCj4gPk9WRl9DT1VOVEVSIChhZGRyZXNzIDB4 MDYpLCBPdmVyZmxvdyBDb3VudGVyIE9WRl9DT1VOVEVSWzQ6MF0gbG9ncyB0aGUgbnVtYmVyIG9m IHdvcmRzIGxvc3QgaWYgbmV3IHdvcmRzIGFyZSB3cml0dGVuIGFmdGVyIHRoZSBGSUZPIGlzPmZ1 bGwuIC4uLiBFYWNoIHRpbWUgYSBjb21wbGV0ZSB3b3JkIGlzIHBvcHBlZCBmcm9tIHRoZSBGSUZP LCB0aGUgT1ZGX0NPVU5URVIgaXMgcmVzZXQgdG8gemVyby4NCj4gPg0KPiA+c28gaWYgeW91IGdl dCBvdmVyZmxvdyBjb3VudGVyIHNldCwgdGhlbiB5b3Ugc2hvdWxkIGRyYWluIHRoZSBmaWZvIGNv bXBsZXRlbHkgKGl0IGlzIHN0YWxlKSBhbmQgd2FpdCBmb3Igb25lIG5ldyByZWFkaW5nIHRvIHR1 cm4gdXAgc28gdGhhdCB3ZSA+a25vdyB3ZSBoYXZlIHNvbWV0aGluZyBmcmVzaC4NCj4gPlRoYXQg cmVhZGluZyBtYXkgd2VsbCB0dXJuIHVwIHdoaWxzdCB5b3UgYXJlIGJ1c3kgZHJhaW5pbmcgdGhl IGZpZm8gYW5kIGlmIHNvIHRoYXQgaXMgZmluZSB0byB1c2UgLSBpZiBub3QgeW91IHNob3VsZCB3 YWl0IGEgYml0IGxvbmdlciB1bnRpbCBvbmUgPmRvZXMuICANCg0KR3Vlc3NpbmcgeW91IGFyZSB1 c2luZyBvdXRsb29rIG9yIHNpbWlsYXIgd2l0aCBpdCdzIGhhYml0IG9mIGRlY2lkaW5nIGl0IGtu b3dzIGJldHRlciBvbiBsaW5lIHdyYXBzIGFuZCBsYWNrIG9mIHVuZGVzdGFuZGluZyBvZiA+IGNo YXJhY3RlcnMuDQoNCkFoIHdlbGwsIEkndmUgcmV3cmFwcGVkIHlvdXIgcmVwbHkgdG8gbWFrZSBp dCByZWFkYWJsZSBvbiBhIGNsaWVudCBzZXQgdXAgZm9yIGtlcm5lbCBtYWlsaW5nIGxpc3QgcmVh ZGluZy4NCg0KPiBJIGRvbuKAmXQgdW5kZXJzdGFuZCB3aHkgZG8gd2UgaGF2ZSB0byBkcmFpbiB0 aGUgRklGTyBjb21wbGV0ZWx5PyBUd28gDQo+IHRoaW5ncy4gRmlyc3QsIGV2ZW4gYWZ0ZXIgdGhl IG92ZXJmbG93IHRoZSBsYXN0IHBsYWNlIGF0IHdoaWNoIHRoZSANCj4gb3ZlcmZsb3cgaGFwcGVu ZWQgd291bGQgYmUgc3RpbGwgdGhlIGxhdGVzdCByZWFkaW5nLCByaWdodD8NCg0KSXQncyB0aGUg bGF0ZXN0IHJlYWRpbmcgd2UgaGF2ZSBidXQgaXQgY291bGQgYmUgZnJvbSBsYXN0IHdlZWsuDQoN Cj4gU28gbGV0J3MNCj4gc2F5IG92ZXJmbG93IGhhcHBlbnMgYW5kIGEgdmFsdWUgb2YgWCBnZXRz IHBsYWNlZCBpbiBwbGFjZSBvZiBZIA0KPiAocHJldmlvdXMgdmFsdWUpLg0KDQpBaC4gIEknZCBh c3N1bWVkIHRoYXQgdGhpcyB3b3JrZWQgbGlrZSBhIEZJRk8gZ2l2ZW4gdGhlIG5hbWluZyBpbiB3 aGljaCBjYXNlIHRoYXQgdmFsdWUgWCB3b3VsZCBiZSBkcm9wcGVkIGlmIHRoZSBGSUZPIGlzIGZ1 bGwuDQpUdXJucyBvdXQgdGhhdCBpcyBkZXBlbmRlbnQgb24gbW9kZSBvbiB0aGlzIGRldmljZS4g IFRoZSBGSUZPX1JPIGJpdCBzdG9wcyB0aGlzIGJlaW5nIGEgZmlmbyBhbmQgaW5zdGVhZCBtYWtl cyBpdCBhIHJpbmcgYnVmZmVyIHdpdGggb2xkZXN0IHNhbXBsZSBkcm9wcGVkLiAgRGVmYXVsdCBv ZiB0aGF0IHZhbHVlIHRob3VnaCBpcyAwIGFuZCBJIGRvbid0IHRoaW5rIHlvdSB3cml0ZSBpdC4u LiAgVG8gZ2V0IHRoZSBiZWhhdmlvdXIgeW91IGRlc2NyaWJlIGl0IHdvdWxkIG5lZWQgdG8gYmUg d3JpdHRlbiB0byAxLiAgU28gYXMgaXQgc3RhbmRzIHRoZSBkYXRhIGRyb3BwZWQgc2hvdWxkIGJl IHRoZSBuZXdlc3QgZGF0YSwgbm90IHRoZSBvbGRlc3QgZGF0YS4NCg0KDQo+IEl0IHdvbid0IG1h dHRlciB0byBtZSBiZWNhdXNlIEkgd2lsbCBiZSByZWFkaW5nIFgsIHdoaWNoIGlzIHRoZSANCj4g Y29ycmVjdCB2ZXJzaW9uIG9mIHJlYWRpbmcgSSB3YW50IHRvIGdpdmUgdG8gdXNlciB0aGlzIHRp bWUgYW5kIA0KPiBwb3BwaW5nIG91dCB0aGUgd2hvbGUgRklGTyAoMzIgd29yZHMpIHdvdWxkIGlu Y3VyIGFkZGl0aW9uYWwgZGVsYXlzLg0KDQpJIGRvbid0IGZvbGxvdyB0aGlzLiAgVGhlICdmaWZv JyAoYmUgaXQgb3BlcmF0aW5nIGFzIGEgZmlmbyBvciBhIHJpbmcpIGFsd2F5cyByZWFkcyBvdXQg b2xkZXN0IGRhdGEgdGhhdCBpdCBjb250YWlucyBmaXJzdC4NClNvIHlvdSBpZiBpdCBpcyBmdWxs IHlvdSBoYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRoaW5nIHRvIGdldCB0aGUgbW9zdCByZWNlbnQg cmVhZGluZy4NCg0KPiBTZWNvbmQsIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBJIHJlcG9ydGVk IHRoYXQgSSB3YW50IHRvIHVzZSB0aGUgDQo+IHByZXZpb3VzIGtub3duIHJlYWRpbmdzIGFsc28g YW5kIGFsc28gdGhlIHR3byBHUElPcy4gVGhpcyB3b3VsZCBiZSANCj4gcHJvdmlkZWQgdG8geW91 IGZvciB2ZXJpZmljYXRpb24gaW4gc3Vic2VxdWVudCBwYXRjaGVzIGJ1dCB0aG9zZSB3b3VsZCAN Cj4gbWVhbiB0aGF0IGNsZWFyaW5nIHRoZSBGSUZPIG9uIGV2ZXJ5IG92ZXJmbG93IHdvdWxkIGNv bXBsZXRlbHkgDQo+IHVuZGVybWluZSB0aGVzZSBmZWF0dXJlcy4gSSB3b3VsZCBoYXZlIHRvIGFn YWluIGluY29ycG9yYXRlIHRoZSBzYW1lIA0KPiBsb2dpYyB0byBpbXBsZW1lbnQgdGhlc2UgZmVh dHVyZXMgaW4gdGhlIGZ1dHVyZS4gOikNCg0KSSdtIG5vdCBmb2xsb3dpbmcuICBJZiB5b3UgbW92 ZSB0byB1c2luZyB0aGUgYWxsIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgYnVmZmVyZWQgZGF0YSBm bG93cyBpbiBJSU8geW91J2xsIG5vdCBiZSBkcm9wcGluZyBhbnl0aGluZyAoZXhjZXB0IHdoZW4g YW4gZXJyb3IgY29uZGl0aW9uIG9yIHZlcnkgbG9uZyBkZWxheSBvY2N1cnJlZCkuICBUaGF0J3Mg YSBkaWZmZXJlbnQgcGF0aCBlbnRpcmVseSBob3dldmVyIGFuZCB5b3Ugd2lsbCBwcm9iYWJseSBz dGlsbCB3YW50IGEgd2F5IHRvIGdyYWIgYSBzaW5nbGUgcmVjZW50IHRlbXBlcmF0dXJlIHJlYWRp bmcuDQoNCldpdGggdGhlIGJ1ZmZlcmVkIGZsb3csIHdoZW5ldmVyIHlvdSBnZXQgYSBmaWZvIHdh dGVyc2hlZCBpbnRlcnJ1cHQgKG5lYXJseSBmdWxsIGhlcmUpIHlvdSBkcmFpbiBhbGwgdGhlIGNv bnRlbnQgaW50byBhIHNvZnR3YXJlIGZpZm8gdGhhdCBpcyB3aGF0IHVzZXJzcGFjZSBhY3R1YWxs eSB0YWxrcyB0by4gICh0aGVyZSBhcmUgc29tZSBvdGhlciB0cmlja3MgdG8gZG8gdGhhdCBvbiBk ZW1hbmQgZm9yIGxhdGVuY3kgcmVkdWN0aW9uKS4NCg0KSm9uYXRoYW4NCg0KDQo+IA0KPiA+UGxl YXNlIHJlcGx5IGlubGluZSByYXRoZXIgdGhhbiBwdWxsaW5nIGNvbW1lbnRzIHRvIHRvcCBvZiBl bWFpbCB0byByZXBseSB0byB0aGVtLg0KPiA+UHVsbGluZyB0aGVtIHRvIHRoZSB0b3AgcmVtb3Zl cyB0aGUgY29udGV4dCB0aGF0IGNhbiBiZSBjcnVjaWFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNv bW1lbnQuICANCj4gU3VyZS4NCj4gDQo+IFRoYW5rcw0KPiBSYWphdA0KPiANCj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSm9uYXRoYW4gQ2FtZXJvbiA8amljMjNAa2VybmVs Lm9yZz4NCj4gU2VudDogU3VuZGF5LCBOb3ZlbWJlciA2LCAyMDIyIDU6MjcgUE0NCj4gVG86IEto YW5kZWx3YWwsIFJhamF0IDxyYWphdC5raGFuZGVsd2FsQGludGVsLmNvbT4NCj4gQ2M6IFJhamF0 IEtoYW5kZWx3YWwgPHJhamF0LmtoYW5kZWx3YWxAbGludXguaW50ZWwuY29tPjsgDQo+IGxhcnNA bWV0YWZvby5kZTsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgDQo+IGxpbnV4LWlpb0B2 Z2VyLmtlcm5lbC5vcmc7IGpkZWx2YXJlQHN1c2UuY29tOyBsaW51eEByb2Vjay11cy5uZXQ7IA0K PiBsaW51eC1od21vbkB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2Nl0g aWlvOiB0ZW1wZXJhdHVyZTogQWRkIGRyaXZlciBzdXBwb3J0IGZvciBNYXhpbSANCj4gTUFYMzAy MDgNCj4gDQo+IE9uIE1vbiwgMzEgT2N0IDIwMjIgMTc6MjQ6NTEgKzAwMDANCj4gIktoYW5kZWx3 YWwsIFJhamF0IiA8cmFqYXQua2hhbmRlbHdhbEBpbnRlbC5jb20+IHdyb3RlOg0KPiANCj4gDQo+ ID4gICANCj4gPiA+SSBhZ3JlZSB3aXRoIEd1ZW50ZXIncyBjb21tZW50IHRoYXQgdGhpcyBpcyBh IGJpdCBvdmVybHkgbm9pc3kuIFdlIA0KPiA+ID5kb24ndCBleHBlY3QgcmFuZG9tIHJlZ2lzdGVy IHJlYWRzIHRvIGZhaWwgKyBJSVJDIHRoZXJlIGlzIHRyYWNpbmcgaW4gdGhlIGkyYyBzdWJzeXN0 ZW0gaWYgd2UNCj4gPiA+YXJlIGdldHRpbmcgc3VjaCBlcnJvcnMuICAgSGVuY2UgcHJvYmFibHkg cmVkdWNlIHRoZSBlcnJvciB0byBjb3ZlciBvbmx5IGxhcmdlcg0KPiA+ID5ibG9ja3Mgb2YgY29k ZS4gIFJlYXNvbmFibGUgdG8gcmVwb3J0IHRoYXQgdGhlIHRlbXBlcmF0dXJlIHJlcXVlc3QgZmFp bGVkIHBlcmhhcHMuICAgIA0KPiA+IFNvLCBJIGtpbmQgb2YganVzdCBzdGFydGVkIHVwc3RyZWFt aW5nIG1hdGNoZXMgaW4gdGhlIElJTyBjb21tdW5pdHkgDQo+ID4gYWxzbyBmb3IgY2hhbmdlIG9m IGRvbWFpbnMgYW5kIG9uIHNlZWluZyBvdGhlciBkcml2ZXJzIHdoaWNoIHdlcmUgDQo+ID4gcmV0 dXJuaW5nIG9uIGVhY2ggZXJyb3IsIEkgdGhvdWdodCBtYXliZSBpdHMgcmVxdWlyZWQgaW4gSUlP PyBUaGFua3MgZm9yIHRoaXMgY29tbWVudC4gSSBoYXZlIHJlbW92ZWQgdGhlbS4NCj4gDQo+IEl0 J3MgYSBxdWVzdGlvbiBvZiBiYWxhbmNlLiAgTW9zdGx5IEkgZG9uJ3QgY29tcGxhaW4gdG9vIG11 Y2ggb24gd2hlcmUgDQo+IGFuIGluZGl2aWR1YWwgYXV0aG9yIGRlY2lkZXMgdGhhdCBiYWxhbmNl IGxpZXMgKGFzIGl0IGRvZXNuJ3QgcmVhbGx5IA0KPiBtYXR0ZXIsIGJ1dCBzZWVpbmcgYXMgR3Vl bnRlciBoYWQgYWxyZWFkeSByYWlzZWQgaXQgSSBjb21tZW50ZWQgdGhpcyANCj4gdGltZSA7KQ0K PiA+ICAgDQo+ID4gPmRldl9lcnIoKSAgRmFpbGluZyBpc24ndCBleHBlY3RlZCBzbyBpdCdzIGEg ZGV2aWNlIGVycm9yIG5vdCANCj4gPiA+c29tZXRoaW5nIHdlIHNob3VsZCBtZXJlbHkgd2FybiBh Ym91dC4NCj4gPiBPaywgc28gaGVyZSBJIGhhdmUgaW5jb3Jwb3JhdGVkIGRldl9lcnIgYnV0IHdo YXQgSSB3YW50ZWQgd2FzIGlmIA0KPiA+IE1BWDMwMjA4X1NUQVRVU19URU1QX1JEWSBpcyB3cml0 dGVuIHN1Y2Nlc3NmdWxseSBhbmQgYW55IGVycm9yIA0KPiA+IGhhcHBlbnMgYWZ0ZXIgdGhhdCwg dGhlIHVzZXIgc3RpbGwgZ2V0cyByZXR1cm5lZCB0aGUgbW9zdCByZWNlbnQgDQo+ID4gcmVhZGlu ZyB3aGVuIHRoaXMgb3BlcmF0aW9uIGZhaWxzLiBTbywgSSBoYXZlIGNoYW5nZWQgaXQgaW50byBk ZXZfZXJyIHdpdGggcHJpbnRpbmcgIlRlbXBlcmF0dXJlIGNvbnZlcnNpb24gZmFpbGVkLCByZXBv cnRpbmcgdGhlIGxhc3Qga25vd24gcmVhZGluZy4uLiIpIFdpbGwgdGhhdCBiZSBvaz8NCj4gDQo+ IEl0IGlzIGEgY29uZGl0aW9uIHRoYXQgd2UgcmVhbGx5IGRvbid0IGV4cGVjdCB0byBoYXBwZW4g YW5kIHdlIGRvbid0IGtub3cgaG93IHN0YWxlIHRoZSByZWFkaW5nIGlzLiAgU28gSSdkIGp1c3Qg cmVwb3J0IGFuIGVycm9yLiAgVXNlcnNwYWNlIGNhbiByZWFkIGFnYWluIGlmIGl0IHRoaW5rcyB0 aGUgZXJyb3IgaXMgbGlrZWx5IHRvIGJlIHJlc29sdmVkLg0KPiANCj4gPiAgIA0KPiA+ID4gRXJy b3IgcmV0dXJuIHRvIGluZGljYXRlIHdoYXQgaGFwcGVuZWQgLSB0aGVyZSBpcyBvbmUgZm9yIHRp bWVvdXRzLiAgICANCj4gPiBBcyBpbmRpY2F0ZWQgYWJvdmUsIGlmIHlvdSBhcmUgaW4gZm9yIHRo YXQsIHRoZW4gaGVyZSB3ZSBzaG91bGQgDQo+ID4gaWRlYWxseSByZXR1cm4gMCBzaW5jZSBldmVu IGFmdGVyIHRoZSBlcnJvciwgd2Ugd2FudCB1cGRhdGVfdGVtcCB0byBkbyBpdHMgam9iIGFuZCBy ZXR1cm4gdGhlIGxhc3QgcmVhZGluZy4NCj4gPiAgIA0KPiA+ID5XaGlsc3QgeW91IGRlYmF0ZWQg dGhpcyBsb2dpYyB3aXRoIEd1ZW50ZXIgaW4gdjUsIEkgZG9uJ3QgZm9sbG93IHRoZSBjb25jbHVz aW9uLg0KPiA+ID5JZiBGSUZPX09WRl9DTlRSID4gMCB0aGVuIEZJRk9fREFUQV9DTlRSID09IG1h eGltdW0gdmFsdWUuICBMb2dpYyANCj4gPiA+b2YgdGhpcyBpcyBnaXZlbiBpbiBGSUZPX0RBVEEg UmVhZCBFeGFtcGxlIChQYWdlIDE2IG9mIHRoZSBzcGVjKSAgDQo+ID4gPkl0IGRvZXNuJ3QgbWF0 dGVyIGFzIHN1Y2ggYmVjYXVzZSB5b3UgcmVhZCBGSUZPX0RBVEFfQ05UUiBhZ2FpbiANCj4gPiA+ YW55d2F5LCBidXQgaXQgd291bGQgYmUgbW9yZSBvYnZpb3VzIHdoYXQgaXMgZ29pbmcgb24gaWYg eW91IGp1c3Qgc2V0IGRhdGFfY291bnQgPSAzMiBpZiBvdmVyZmxvdyBoYXMgb2NjdXJlZC4NCj4g PiA+DQo+ID4gPlRoZSBvbmx5IHRoaW5nIEkgd291bGQgYXJndWUgeW91ICdtaWdodCcgd2FudCB0 byBkbyB3aXRoIHRoZSANCj4gPiA+b3ZlcmZsb3cgY291bnRlciBpcyB0byB1c2UgaXQgdG8gaW5k aWNhdGUgd2UgbmVlZCB0byByZWFkIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4g dGhlIGZpZm8uDQo+ID4gPklmIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGVsZW1lbnRzIGF0IHRo ZSBlbmQsIHdhaXQgdW50aWwgdGhlcmUgaXMgDQo+ID4gPm9uZS4gT3RoZXJ3aXNlIHlvdSBwb3Rl bnRpYWxseSBnZXQgdmVyeSBzdGFsZSBkYXRhIC0gaXQgbWlnaHQgaGF2ZSANCj4gPiA+YmVlbiBv dmVyZmxvd2luZyBmb3IgYSBsb25nIHRpbWUpIFRoaXMgZGVjcmVhc2UgYnkgbW9yZSB0aGFuIDEg aXMgDQo+ID4gPndvcnJ5aW5nLiAgSSBjYW4gdW5kZXJzdGFuZCBpdCBub3QgZGVjcmVhc2luZywg b3IgZXZlbiBpbmNyZWFzaW5nIA0KPiA+ID4obmV3IGRhdGEgY2FtZSBpbiksIGJ1dCB0aGlzIGNv bmRpdGlvbiBzb3VuZHMgZWl0aGVyIGxpa2Ugd2UgYXJlIGRvaW5nIHNvbWV0aGluZyB3cm9uZyBv ciB0aGVyZSBpcyBhIGhhcmR3YXJlIGJ1Zy4NCj4gPiBPaywgZXZlbiBJIHN0YXJ0ZWQgZG91YnRp bmcgdGhlIG5hdHVyZSBvZiB0aGUgZGV2aWNlIEkgZW5jb3VudGVyZWQgd2hlbiBJIHRlc3RlZCBp dC4NCj4gPiBUaGUgdGhpbmcgaXMsIHRoaXMgZHJpdmVyIGFsc28gY29tZXMgd2l0aCBhbiBFViBr aXQgd2hlcmVpbiB5b3UgY2FuIA0KPiA+IHBsdWcgaW50byBQQywgZG93bmxvYWQgdGhlIHNvZnR3 YXJlIGFuZCBpbnRlcmZhY2UgaXQgdmlhIFVTQi4gDQo+ID4gV2hlbmV2ZXIgSSBlbXVsYXRlZCBy ZWFkcyBmcm9tIHRoZSBPUywgSSBlbmNvdW50ZXJlZCBlcnJvbmVvdXMgY291bnRlciBkZWNyZW1l bnRzLg0KPiA+IEhvd2V2ZXIsIEkgaGF2ZSB0ZXN0ZWQgaXQgdXNpbmcgbmF0aXZlIEkyQyBvbiBt eSBtaWNyb2NvbnRyb2xsZXIgYW5kIA0KPiA+IEkgZG9uJ3QgZXZlciBlbmNvdW50ZXIgc3VjaCBy ZWFkaW5ncywgdGh1cyBjb25jbHVkaW5nIHRoYXQgdGhlIA0KPiA+IHNwdXJpb3VzIGVycm9uZW91 cyB6b25lcyBvbmx5IGV4aXN0IHdoZW4gdGhlIEVWIGtpdCBpcyBpbnRlcmZhY2VkIHZpYSBVU0Iu DQo+ID4gVGhhbmtzIGZvciBjcmVhdGluZyB0aGlzIGRvdWJ0LiBJIGhhdmUgc29sdmVkIGl0IGJ5 IG9ubHkgDQo+ID4gZGVjcmVtZW50aW5nIGRhdGFfY291bnQgdW5sZXNzIGl0IGJlY29tZXMgMC4N Cj4gPiBSZWdhcmRpbmcgZGF0YV9jb3VudCB2YXJpYWJsZSwgc28gd2hlbiBvdmVyZmxvdyBjb3Vu dGVyIGlzID4wLCBJIHdhbnQgdG8gZGVjcmVhc2UgJ292ZXJmbG93IGNvdW50ZXInDQo+ID4gbnVt YmVyIG9mIHRpbWVzIHRvIGdldCB0aGUgcmVxdWlyZWQgcmVhZGluZyBhbmQgd2hlbiBvdmVyZmxv dyANCj4gPiBjb3VudGVyIGlzID0wLCBJIHdhbnQgdG8gZGVjcmVhc2UgJ2RhdGEgY291bnRlcicg bnVtYmVyIG9mIHRpbWVzIHRvIGdldCB0aGUgcmVhZGluZy4gSG9wZSBpdCBtYWtlcyBzZW5zZSBu b3cgaW4gdGhlIG5ldyB2ZXJzaW9uLg0KPiANCj4gVGhhdCBpc24ndCBob3cgSSByZWFkIHRoZSBk YXRhc2hlZXQuIA0KPiANCj4gT1ZGX0NPVU5URVIgKGFkZHJlc3MgMHgwNiksIE92ZXJmbG93IENv dW50ZXIgT1ZGX0NPVU5URVJbNDowXSBsb2dzIHRoZSBudW1iZXIgb2Ygd29yZHMgbG9zdCBpZiBu ZXcgd29yZHMgYXJlIHdyaXR0ZW4gYWZ0ZXIgdGhlIEZJRk8gaXMgZnVsbC4gLi4uIEVhY2ggdGlt ZSBhIGNvbXBsZXRlIHdvcmQgaXMgcG9wcGVkIGZyb20gdGhlIEZJRk8sIHRoZSBPVkZfQ09VTlRF UiBpcyByZXNldCB0byB6ZXJvLg0KPiANCj4gc28gaWYgeW91IGdldCBvdmVyZmxvdyBjb3VudGVy IHNldCwgdGhlbiB5b3Ugc2hvdWxkIGRyYWluIHRoZSBmaWZvIGNvbXBsZXRlbHkgKGl0IGlzIHN0 YWxlKSBhbmQgd2FpdCBmb3Igb25lIG5ldyByZWFkaW5nIHRvIHR1cm4gdXAgc28gdGhhdCB3ZSBr bm93IHdlIGhhdmUgc29tZXRoaW5nIGZyZXNoLg0KPiBUaGF0IHJlYWRpbmcgbWF5IHdlbGwgdHVy biB1cCB3aGlsc3QgeW91IGFyZSBidXN5IGRyYWluaW5nIHRoZSBmaWZvIGFuZCBpZiBzbyB0aGF0 IGlzIGZpbmUgdG8gdXNlIC0gaWYgbm90IHlvdSBzaG91bGQgd2FpdCBhIGJpdCBsb25nZXIgdW50 aWwgb25lIGRvZXMuDQo+IA0KPiANCj4gUGxlYXNlIHJlcGx5IGlubGluZSByYXRoZXIgdGhhbiBw dWxsaW5nIGNvbW1lbnRzIHRvIHRvcCBvZiBlbWFpbCB0byByZXBseSB0byB0aGVtLg0KPiBQdWxs aW5nIHRoZW0gdG8gdGhlIHRvcCByZW1vdmVzIHRoZSBjb250ZXh0IHRoYXQgY2FuIGJlIGNydWNp YWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29tbWVudC4NCj4gDQo+IEpvbmF0aGFuDQo+IA0KPiA+ IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogSm9uYXRoYW4gQ2Ft ZXJvbiA8amljMjNAa2VybmVsLm9yZz4NCj4gPiBTZW50OiBTYXR1cmRheSwgT2N0b2JlciAyOSwg MjAyMiA4OjM0IFBNDQo+ID4gVG86IFJhamF0IEtoYW5kZWx3YWwgPHJhamF0LmtoYW5kZWx3YWxA bGludXguaW50ZWwuY29tPg0KPiA+IENjOiBsYXJzQG1ldGFmb28uZGU7IGxpbnV4LWtlcm5lbEB2 Z2VyLmtlcm5lbC5vcmc7IA0KPiA+IGxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmc7IGpkZWx2YXJl QHN1c2UuY29tOyBsaW51eEByb2Vjay11cy5uZXQ7IA0KPiA+IGxpbnV4LWh3bW9uQHZnZXIua2Vy bmVsLm9yZzsgS2hhbmRlbHdhbCwgUmFqYXQgDQo+ID4gPHJhamF0LmtoYW5kZWx3YWxAaW50ZWwu Y29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjZdIGlpbzogdGVtcGVyYXR1cmU6IEFkZCBk cml2ZXIgc3VwcG9ydCBmb3IgDQo+ID4gTWF4aW0NCj4gPiBNQVgzMDIwOA0KPiA+IA0KPiA+IE9u IFR1ZSwgMjUgT2N0IDIwMjIgMjI6NDg6NTggKzA1MzANCj4gPiBSYWphdCBLaGFuZGVsd2FsIDxy YWphdC5raGFuZGVsd2FsQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6DQo+ID4gICANCj4gPiA+IE1h eGltIE1BWDMwMjA4IGlzIGEgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3Igd2l0aCAwLjHCsEMg YWNjdXJhY3kuDQo+ID4gPiANCj4gPiA+IEFkZCBzdXBwb3J0IGZvciBtYXgzMDIwOCBkcml2ZXIg aW4gaWlvIHN1YnN5c3RlbS4NCj4gPiA+IERhdGFzaGVldDogDQo+ID4gPiBodHRwczovL2RhdGFz aGVldHMubWF4aW1pbnRlZ3JhdGVkLmNvbS9lbi9kcy9NQVgzMDIwOC5wZGYNCj4gPiA+IA0KPiA+ ID4gU2lnbmVkLW9mZi1ieTogUmFqYXQgS2hhbmRlbHdhbCA8cmFqYXQua2hhbmRlbHdhbEBsaW51 eC5pbnRlbC5jb20+DQo+ID4gDQo+ID4gSGkgUmFqYXQsDQo+ID4gDQo+ID4gQ29uc2lkZXIgdXNp bmcgcmVnbWFwIGZvciB0aGlzLiBJdCB3aWxsIHByb3ZpZGUgeW91IHdpdGggc29tZSBoZWxwZnVs IHV0aWxpdHkgZnVuY3Rpb25zLiAgSSBkb24ndCBtaW5kIHlvdSBzdGlja2luZyB0byBkaXJlY3Qg aTJjIGNhbGxzIHRob3VnaCBpZiB5b3UgcHJlZmVyLg0KPiA+IA0KPiA+IFF1aXRlIGEgZmV3IHRo aW5ncyBpbmxpbmUgdGhhdCBoYXZlIGJlZW4gY29tbWVudGVkIG9uIGluIHByZXZpb3VzIHJldmll d3MuDQo+ID4gTWFrZSBzdXJlIHlvdSBpbmNvcnBvcmF0ZSBhbGwgZmVlZGJhY2sgb3IgeW91J2xs IGVuZCB1cCBnb2luZyB0aHJvdWdoIG1vcmUgdmVyc2lvbnMgdGhhbiB3b3VsZCBvdGhlcndpc2Ug YmUgbmVjZXNzYXJ5Lg0KPiA+IA0KPiA+IEpvbmF0aGFuDQo+ID4gICANCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9NYWtlZmlsZQ0KPiA+ID4gYi9kcml2ZXJzL2lp by90ZW1wZXJhdHVyZS9NYWtlZmlsZQ0KPiA+ID4gaW5kZXggZGQwOGU1NjJmZmUwLi5kZmVjOGM2 ZDMwMTkgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9NYWtlZmls ZQ0KPiA+ID4gKysrIGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvTWFrZWZpbGUNCj4gPiA+IEBA IC03LDYgKzcsNyBAQCBvYmotJChDT05GSUdfSVFTNjIwQVRfVEVNUCkgKz0gaXFzNjIwYXQtdGVt cC5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX0xUQzI5ODMpICs9IGx0YzI5ODMubw0KPiA+ID4gIG9i ai0kKENPTkZJR19ISURfU0VOU09SX1RFTVApICs9IGhpZC1zZW5zb3ItdGVtcGVyYXR1cmUubw0K PiA+ID4gIG9iai0kKENPTkZJR19NQVhJTV9USEVSTU9DT1VQTEUpICs9IG1heGltX3RoZXJtb2Nv dXBsZS5vDQo+ID4gPiArb2JqLSQoQ09ORklHX01BWDMwMjA4KSArPSBtYXgzMDIwOC5vDQo+ID4g PiAgb2JqLSQoQ09ORklHX01BWDMxODU2KSArPSBtYXgzMTg1Ni5vDQo+ID4gPiAgb2JqLSQoQ09O RklHX01BWDMxODY1KSArPSBtYXgzMTg2NS5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX01MWDkwNjE0 KSArPSBtbHg5MDYxNC5vIGRpZmYgLS1naXQgDQo+ID4gPiBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0 dXJlL21heDMwMjA4LmMNCj4gPiA+IGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvbWF4MzAyMDgu Yw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4u NDFiMjY3NTVjZTI3DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9kcml2ZXJzL2lp by90ZW1wZXJhdHVyZS9tYXgzMDIwOC5jDQo+ID4gPiBAQCAtMCwwICsxLDMyMyBAQA0KPiA+ID4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiA+ICsNCj4gPiA+ ICsvKg0KPiA+ID4gKyAqIENvcHlyaWdodCAoYykgUmFqYXQgS2hhbmRlbHdhbCANCj4gPiA+ICs8 cmFqYXQua2hhbmRlbHdhbEBsaW51eC5pbnRlbC5jb20+DQo+ID4gPiArICoNCj4gPiA+ICsgKiBN YXhpbSBNQVgzMDIwOCBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvciB3aXRoIDAuMcKwQyBhY2N1 cmFjeQ0KPiA+ID4gKyAqICg3LWJpdCBJMkMgc2xhdmUgYWRkcmVzcyAoMHg1MCAtIDB4NTMpKQ0K PiA+ID4gKyAqDQo+ID4gPiArICogTm90ZTogVGhpcyBkcml2ZXIgc2V0cyBHUElPMSB0byBiZWhh dmUgYXMgaW5wdXQgZm9yIHRlbXBlcmF0dXJlDQo+ID4gPiArICogY29udmVyc2lvbiBhbmQgR1BJ TzAgdG8gYWN0IGFzIGludGVycnVwdCBmb3IgdGVtcGVyYXR1cmUgY29udmVyc2lvbi4gICAgDQo+ ID4gDQo+ID4gSXQgZG9lc24ndCB1c2UgdGhlbSwgc28gdW5sZXNzIHlvdSBoYXZlIHRvIGJlIGlu IHRoYXQgc3RhdGUgdG8gdXNlIHRoZSBjdXJyZW50IG1ldGhvZCwgZHJvcCB0aGUgbm90ZSBhbmQg ZG9uJ3Qgc2V0IHRoZW0gdG8gZG8gdGhhdC4NCj4gPiANCj4gPiBZb3UgY2FuIGFkZCB0aGF0IHN1 cHBvcnQgaWYgLyB3aGVuIHRoZSBkcml2ZXIgc3VwcG9ydHMgaXQuDQo+ID4gICANCj4gPiA+ICsg Ki8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4N Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ID4gKw0KPiA+ID4g KyNkZWZpbmUgTUFYMzAyMDhfRFJWX05BTUUJCSJtYXgzMDIwOCIgICAgDQo+ID4gDQo+ID4gTWVu dGlvbmVkIGJlbG93LCBidXQgSSdkIHByZWZlciB0byBzZWUgdGhlIHN0cmluZyBkaXJlY3RseSBp bmxpbmUuDQo+ID4gICANCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIE1BWDMwMjA4X1NUQVRVUwkJ CTB4MDANCj4gPiA+ICsjZGVmaW5lIE1BWDMwMjA4X1NUQVRVU19URU1QX1JEWQlCSVQoMCkNCj4g PiA+ICsjZGVmaW5lIE1BWDMwMjA4X0lOVF9FTkFCTEUJCTB4MDENCj4gPiA+ICsjZGVmaW5lIE1B WDMwMjA4X0lOVF9FTkFCTEVfVEVNUF9SRFkJQklUKDApDQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBNQVgzMDIwOF9GSUZPX09WRl9DTlRSCQkweDA2DQo+ID4gPiArI2RlZmluZSBNQVgzMDIwOF9G SUZPX0RBVEFfQ05UUgkJMHgwNw0KPiA+ID4gKyNkZWZpbmUgTUFYMzAyMDhfRklGT19EQVRBCQkw eDA4DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBNQVgzMDIwOF9TWVNURU1fQ1RSTAkJMHgwYw0K PiA+ID4gKyNkZWZpbmUgTUFYMzAyMDhfU1lTVEVNX0NUUkxfUkVTRVQJMHgwMQ0KPiA+ID4gKw0K PiA+ID4gKyNkZWZpbmUgTUFYMzAyMDhfVEVNUF9TRU5TT1JfU0VUVVAJMHgxNA0KPiA+ID4gKyNk ZWZpbmUgTUFYMzAyMDhfVEVNUF9TRU5TT1JfU0VUVVBfQ09OVglCSVQoMCkNCj4gPiA+ICsNCj4g PiA+ICsjZGVmaW5lIE1BWDMwMjA4X0dQSU9fU0VUVVAJCTB4MjANCj4gPiA+ICsjZGVmaW5lIE1B WDMwMjA4X0dQSU8xX1NFVFVQCQlHRU5NQVNLKDcsIDYpDQo+ID4gPiArI2RlZmluZSBNQVgzMDIw OF9HUElPMF9TRVRVUAkJR0VOTUFTSygxLCAwKQ0KPiA+ID4gKyNkZWZpbmUgTUFYMzAyMDhfR1BJ T19DVFJMCQkweDIxDQo+ID4gPiArI2RlZmluZSBNQVgzMDIwOF9HUElPMV9DVFJMCQlCSVQoMykN Cj4gPiA+ICsjZGVmaW5lIE1BWDMwMjA4X0dQSU8wX0NUUkwJCUJJVCgwKQ0KPiA+ID4gKw0KPiA+ ID4gK3N0cnVjdCBtYXgzMDIwOF9kYXRhIHsNCj4gPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudDsNCj4gPiA+ICsJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsNCj4gPiA+ICsJc3RydWN0 IG11dGV4IGxvY2s7IC8qIExvY2sgdG8gcHJldmVudCBjb25jdXJyZW50IHJlYWRzICovDQo+ID4g DQo+ID4gQmUgbW9yZSBleHBsaWNpdCAtIHJlYWRzIG9mIHdoYXQ/DQo+ID4gICANCj4gPiA+ICt9 Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgz MDIwOF9jaGFubmVsc1tdID0gew0KPiA+ID4gKwl7DQo+ID4gPiArCQkudHlwZSA9IElJT19URU1Q LA0KPiA+ID4gKwkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVykg fCBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSksDQo+ID4gPiArCX0sDQo+ID4gPiArfTsNCj4gPiA+ ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBtYXgzMDIwOF9yZXF1ZXN0KCkgLSBSZXF1ZXN0IGEg cmVhZGluZw0KPiA+ID4gKyAqIEBkYXRhOiBTdHJ1Y3QgY29tcHJpc2luZyBtZW1iZXIgZWxlbWVu dHMgb2YgdGhlIGRldmljZQ0KPiA+ID4gKyAqDQo+ID4gPiArICogUmVxdWVzdHMgYSByZWFkaW5n IGZyb20gdGhlIGRldmljZSBhbmQgd2FpdHMgdW50aWwgdGhlIGNvbnZlcnNpb24gaXMgcmVhZHku DQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCBtYXgzMDIwOF9yZXF1ZXN0KHN0cnVjdCBt YXgzMDIwOF9kYXRhICpkYXRhKSB7DQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNlbnNvciBjYW4g dGFrZSB1cCB0byA1MDAgbXMgdG8gcmVzcG9uZCBzbyBleGVjdXRlIGEgdG90YWwgb2YNCj4gPiA+ ICsJICogMTAgcmV0cmllcyB0byBnaXZlIHRoZSBkZXZpY2Ugc3VmZmljaWVudCB0aW1lLg0KPiA+ ID4gKwkgKi8NCj4gPiA+ICsJaW50IHJldHJpZXMgPSAxMDsNCj4gPiA+ICsJdTggcmVndmFsOw0K PiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBpMmNfc21idXNfcmVhZF9i eXRlX2RhdGEoZGF0YS0+Y2xpZW50LCBNQVgzMDIwOF9URU1QX1NFTlNPUl9TRVRVUCk7DQo+ID4g PiArCWlmIChyZXQgPCAwKSB7DQo+ID4gPiArCQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwg IkVycm9yIHJlYWRpbmcgcmVnIHRlbXBlcmF0dXJlIA0KPiA+ID4gK3NldHVwXG4iKTsNCj4gPiAN Cj4gPiBJIGFncmVlIHdpdGggR3VlbnRlcidzIGNvbW1lbnQgdGhhdCB0aGlzIGlzIGEgYml0IG92 ZXJseSBub2lzeS4gV2UgZG9uJ3QgZXhwZWN0IHJhbmRvbSByZWdpc3RlciByZWFkcyB0byBmYWls ICsgSUlSQyB0aGVyZSBpcyB0cmFjaW5nIGluIHRoZSBpMmMgc3Vic3lzdGVtIGlmIHdlDQo+ID4g YXJlIGdldHRpbmcgc3VjaCBlcnJvcnMuICAgSGVuY2UgcHJvYmFibHkgcmVkdWNlIHRoZSBlcnJv ciB0byBjb3ZlciBvbmx5IGxhcmdlcg0KPiA+IGJsb2NrcyBvZiBjb2RlLiAgUmVhc29uYWJsZSB0 byByZXBvcnQgdGhhdCB0aGUgdGVtcGVyYXR1cmUgcmVxdWVzdCBmYWlsZWQgcGVyaGFwcy4NCj4g PiANCj4gPiAgIA0KPiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ ID4gKwlyZWd2YWwgPSByZXQgfCBNQVgzMDIwOF9URU1QX1NFTlNPUl9TRVRVUF9DT05WOw0KPiA+ ID4gKw0KPiA+ID4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVu dCwgTUFYMzAyMDhfVEVNUF9TRU5TT1JfU0VUVVAsIHJlZ3ZhbCk7DQo+ID4gPiArCWlmIChyZXQg PCAwKSB7DQo+ID4gPiArCQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwgIkVycm9yIHdyaXRp bmcgcmVnIHRlbXBlcmF0dXJlIHNldHVwXG4iKTsNCj4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g PiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJd2hpbGUgKHJldHJpZXMtLSkgew0KPiA+ID4gKwkJcmV0 ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgTUFYMzAyMDhfU1RBVFVT KTsNCj4gPiA+ICsJCWlmIChyZXQgPCAwKSB7DQo+ID4gPiArCQkJZGV2X2VycigmZGF0YS0+Y2xp ZW50LT5kZXYsICJFcnJvciByZWFkaW5nIHJlZyBzdGF0dXNcbiIpOw0KPiA+ID4gKwkJCWdvdG8g c2xlZXA7DQo+ID4gDQo+ID4gQ2FuIHRoaXMgaGFwcGVuIGZvciBhIGRvY3VtZW50ZWQgcmVhc29u PyAgSWYgbm90IHRyZWF0IGl0IGFzIGEgY29tbXMgZXJyb3IgYW5kIHJldHVybiBpdC4NCj4gPiAg IA0KPiA+ID4gKwkJfQ0KPiA+ID4gKw0KPiA+ID4gKwkJaWYgKHJldCAmIE1BWDMwMjA4X1NUQVRV U19URU1QX1JEWSkNCj4gPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiA+ICsNCj4gPiA+ICsJCW1zbGVl cCg1MCk7DQo+ID4gPiArCX0NCj4gPiA+ICsJZGV2X3dhcm4oJmRhdGEtPmNsaWVudC0+ZGV2LCAi VGVtcGVyYXR1cmUgY29udmVyc2lvbiBmYWlsZWRcbiIpOw0KPiA+IA0KPiA+IGRldl9lcnIoKSAg RmFpbGluZyBpc24ndCBleHBlY3RlZCBzbyBpdCdzIGEgZGV2aWNlIGVycm9yIG5vdCBzb21ldGhp bmcgd2Ugc2hvdWxkIG1lcmVseSB3YXJuIGFib3V0Lg0KPiA+ICAgDQo+ID4gPiArDQo+ID4gPiAr CXJldHVybiAwOw0KPiA+IEVycm9yIHJldHVybiB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIC0g dGhlcmUgaXMgb25lIGZvciB0aW1lb3V0cy4NCj4gPiAgIA0KPiA+ID4gKw0KPiA+ID4gK3NsZWVw OiAgICANCj4gPiANCj4gPiBXaHkgc2xlZXAgaW4gYW4gZXJyb3IgcGF0aD8gIEl0J3MgZmFpbGVk IC0gd2h5IGRvIHdlIHRoaW5rIHNsZWVwaW5nIGlzIGEgZ29vZCBpZGVhPw0KPiA+ICAgDQo+ID4g PiArCW1zbGVlcCg1MCk7DQo+ID4gPiArCXJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICtzdGF0aWMgaW50IG1heDMwMjA4X3VwZGF0ZV90ZW1wKHN0cnVjdCBtYXgzMDIwOF9kYXRh ICpkYXRhKSB7DQo+ID4gPiArCXU4IGRhdGFfY291bnQ7DQo+ID4gPiArCWludCByZXQ7DQo+ID4g PiArDQo+ID4gPiArCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOw0KPiA+ID4gKw0KPiA+ID4gKwly ZXQgPSBtYXgzMDIwOF9yZXF1ZXN0KGRhdGEpOw0KPiA+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiA+ ICsJCWdvdG8gdW5sb2NrOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBpMmNfc21idXNfcmVhZF9i eXRlX2RhdGEoZGF0YS0+Y2xpZW50LA0KPiA+ID4gK01BWDMwMjA4X0ZJRk9fT1ZGX0NOVFIpOw0K PiA+IFdoaWxzdCB5b3UgZGViYXRlZCB0aGlzIGxvZ2ljIHdpdGggR3VlbnRlciBpbiB2NSwgSSBk b24ndCBmb2xsb3cgdGhlIGNvbmNsdXNpb24uDQo+ID4gSWYgRklGT19PVkZfQ05UUiA+IDAgdGhl biBGSUZPX0RBVEFfQ05UUiA9PSBtYXhpbXVtIHZhbHVlLiAgTG9naWMgb2YgdGhpcyBpcyBnaXZl biBpbiBGSUZPX0RBVEEgUmVhZCBFeGFtcGxlIChQYWdlIDE2IG9mIHRoZSBzcGVjKSAgSXQgZG9l c24ndCBtYXR0ZXIgYXMgc3VjaCBiZWNhdXNlIHlvdSByZWFkIEZJRk9fREFUQV9DTlRSIGFnYWlu IGFueXdheSwgYnV0IGl0IHdvdWxkIGJlIG1vcmUgb2J2aW91cyB3aGF0IGlzIGdvaW5nIG9uIGlm IHlvdSBqdXN0IHNldCBkYXRhX2NvdW50ID0gMzIgaWYgb3ZlcmZsb3cgaGFzIG9jY3VyZWQuDQo+ ID4gDQo+ID4gVGhlIG9ubHkgdGhpbmcgSSB3b3VsZCBhcmd1ZSB5b3UgJ21pZ2h0JyB3YW50IHRv IGRvIHdpdGggdGhlIG92ZXJmbG93IGNvdW50ZXIgaXMgdG8gdXNlIGl0IHRvIGluZGljYXRlIHdl IG5lZWQgdG8gcmVhZCBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaWZv Lg0KPiA+IElmIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGVsZW1lbnRzIGF0IHRoZSBlbmQsIHdh aXQgdW50aWwgdGhlcmUgaXMgDQo+ID4gb25lLiBPdGhlcndpc2UgeW91IHBvdGVudGlhbGx5IGdl dCB2ZXJ5IHN0YWxlIGRhdGEgLSBpdCBtaWdodCBoYXZlIA0KPiA+IGJlZW4gb3ZlcmZsb3dpbmcg Zm9yIGEgbG9uZyB0aW1lKQ0KPiA+ICAgDQo+ID4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gPiAr CQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwgIkVycm9yIHJlYWRpbmcgcmVnIEZJRk8gb3Zl cmZsb3cgY291bnRlclxuIik7DQo+ID4gPiArCQlnb3RvIHVubG9jazsNCj4gPiA+ICsJfSBlbHNl IGlmICghcmV0KSB7DQo+ID4gPiArCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoZGF0 YS0+Y2xpZW50LA0KPiA+ID4gKwkJCQkJICAgICAgIE1BWDMwMjA4X0ZJRk9fREFUQV9DTlRSKTsN Cj4gPiA+ICsJCWlmIChyZXQgPCAwKSB7DQo+ID4gPiArCQkJZGV2X2VycigmZGF0YS0+Y2xpZW50 LT5kZXYsICJFcnJvciByZWFkaW5nIHJlZyBGSUZPIGRhdGEgY291bnRlclxuIik7DQo+ID4gPiAr CQkJZ290byB1bmxvY2s7DQo+ID4gPiArCQl9DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJ ZGF0YV9jb3VudCA9IHJldDsNCj4gPiA+ICsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogSWRlYWxs eSwgY291bnRlciBzaG91bGQgZGVjcmVhc2UgYnkgMSBlYWNoIHRpbWUgYSB3b3JkIGlzIHJlYWQg ZnJvbSBGSUZPLg0KPiA+ID4gKwkgKiBIb3dldmVyLCBwcmFjdGljYWxseSwgdGhlIGRldmljZSBi ZWhhdmVzIGVycm9uZW91c2x5IGFuZCBjb3VudGVyIHNvbWV0aW1lcw0KPiA+ID4gKwkgKiBkZWNy ZWFzZXMgYnkgbW9yZSB0aGFuIDEuIEhlbmNlLCBkbyBub3QgbG9vcCB0aGUgY291bnRlciB1bnRp bCBpdCBiZWNvbWVzIDANCj4gPiA+ICsJICogcmF0aGVyLCB1c2UgdGhlIGV4YWN0IGNvdW50ZXIg dmFsdWUgYWZ0ZXIgZWFjaCBGSUZPIHdvcmQgaXMgcmVhZC4gICAgDQo+ID4gDQo+ID4gVGhpcyBk ZWNyZWFzZSBieSBtb3JlIHRoYW4gMSBpcyB3b3JyeWluZy4gIEkgY2FuIHVuZGVyc3RhbmQgaXQg bm90IGRlY3JlYXNpbmcsIG9yIGV2ZW4gaW5jcmVhc2luZyAobmV3IGRhdGEgY2FtZSBpbiksIGJ1 dCB0aGlzIGNvbmRpdGlvbiBzb3VuZHMgZWl0aGVyIGxpa2Ugd2UgYXJlIGRvaW5nIHNvbWV0aGlu ZyB3cm9uZyBvciB0aGVyZSBpcyBhIGhhcmR3YXJlIGJ1Zy4NCj4gPiAgIA0KPiA+ID4gKwkgKiBS ZXR1cm4gdGhlIGxhc3QgcmVhZGluZyBmcm9tIEZJRk8gYXMgdGhlIG1vc3QgcmVjZW50bHkgDQo+ ID4gPiArdHJpZ2dlcmVkIG9uZQ0KPiA+IA0KPiA+IE5vdCBuZWNlc3NhcmlseSByZWNlbnQgKGV2 ZW4gaWYgbW9zdCByZWNlbnQgYXZhaWxhYmxlKS4gSW1hZ2luZSB0aGlzIHJ1bnMgYWZ0ZXIgb3Zl cmZsb3cgYW5kIHJ1bnMgcmVhbGx5IHF1aWNrbHkuDQo+ID4gWW91IG1heSBub3QgZ2V0IGEgbmV3 IHJlYWRpbmcuDQo+ID4gICANCj4gPiA+ICsJICovDQo+ID4gPiArCXdoaWxlIChkYXRhX2NvdW50 KSB7DQo+ID4gPiArCQlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoZGF0YS0+Y2xp ZW50LA0KPiA+ID4gKwkJCQkJCSAgTUFYMzAyMDhfRklGT19EQVRBKTsNCj4gPiA+ICsJCWlmIChy ZXQgPCAwKSB7DQo+ID4gPiArCQkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJFcnJvciBy ZWFkaW5nIHJlZyBGSUZPIGRhdGFcbiIpOw0KPiA+ID4gKwkJCWdvdG8gdW5sb2NrOw0KPiA+ID4g KwkJfQ0KPiA+ID4gKw0KPiA+ID4gKwkJZGF0YV9jb3VudCA9IGkyY19zbWJ1c19yZWFkX2J5dGVf ZGF0YShkYXRhLT5jbGllbnQsDQo+ID4gPiArCQkJCQkJICAgICAgTUFYMzAyMDhfRklGT19EQVRB X0NOVFIpOw0KPiA+ID4gKwkJaWYgKGRhdGFfY291bnQgPCAwKSB7DQo+ID4gPiArCQkJZGV2X2Vy cigmZGF0YS0+Y2xpZW50LT5kZXYsICJFcnJvciByZWFkaW5nIHJlZyBGSUZPIGRhdGEgY291bnRl clxuIik7DQo+ID4gPiArCQkJcmV0ID0gZGF0YV9jb3VudDsNCj4gPiANCj4gPiBGbGlwIHRoaXMg YXJvdW5kIHNvIHlvdSBjb25zaXN0ZW50bHkgdXNlIHJldCBmb3IgcmV0dXJuIHZhbHVlcy4gIFdl IHN0aWxsIGhhdmUgcHJvYmxlbSB0aGF0IGRhdGFfY291bnQgaXMgYSB1OCBzbyB0aGUgYWJvdmUg dGVzdCBpcyBpbnZhbGlkLg0KPiA+IA0KPiA+IAkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9k YXRhKGRhdGEtPmNsaWVudCwgLi4uKQ0KPiA+IAkJaWYgKHJldCA8IDApIHsNCj4gPiAJCQlkZXZf ZXJyKC4uKTsNCj4gPiAJCQlnb3RvIHVubG9jaw0KPiA+IAkJfQ0KPiA+IAkJZGF0YV9jb3VudCA9 IHJldDsNCj4gPiANCj4gPiBHdWVudGVyIHBvaW50ZWQgdGhpcyBvdXQgaW4gdjUuDQo+ID4gICAN Cj4gPiA+ICsJCQlnb3RvIHVubG9jazsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gKw0K PiA+ID4gK3VubG9jazoNCj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsNCj4gPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBtYXgz MDIwOF9yZWFkKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gPiArCQkJIHN0cnVjdCBp aW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLA0KPiA+ID4gKwkJCSBpbnQgKnZhbCwgaW50ICp2YWwy LCBsb25nIG1hc2spIHsNCj4gPiA+ICsJc3RydWN0IG1heDMwMjA4X2RhdGEgKmRhdGEgPSBpaW9f cHJpdihpbmRpb19kZXYpOw0KPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlzd2l0 Y2ggKG1hc2spIHsNCj4gPiA+ICsJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoNCj4gPiA+ICsJCXJl dCA9IG1heDMwMjA4X3VwZGF0ZV90ZW1wKGRhdGEpOw0KPiA+ID4gKwkJaWYgKHJldCA8IDApDQo+ ID4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiA+ICsNCj4gPiA+ICsJCSp2YWwgPSBzaWduX2V4dGVu ZDMyKHJldCwgMTUpOw0KPiA+ID4gKwkJcmV0dXJuIElJT19WQUxfSU5UOw0KPiA+ID4gKw0KPiA+ ID4gKwljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6DQo+ID4gPiArCQkqdmFsID0gNTsNCj4gPiA+ ICsJCXJldHVybiBJSU9fVkFMX0lOVDsNCj4gPiA+ICsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKwl9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g K3N0YXRpYyBpbnQgbWF4MzAyMDhfZ3Bpb19zZXR1cChzdHJ1Y3QgbWF4MzAyMDhfZGF0YSAqZGF0 YSkgew0KPiA+ID4gKwl1OCByZWd2YWw7DQo+ID4gPiArCWludCByZXQ7DQo+ID4gPiArDQo+ID4g PiArCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsDQo+ID4gPiAr CQkJCSAgICAgICBNQVgzMDIwOF9HUElPX1NFVFVQKTsNCj4gPiANCj4gPiBFeGNlc3NpdmUgbGlu ZSBicmVha3MuICBUaGlzIGlzIHVuZGVyIDgwIGNoYXJzLiAgSW4gY2FzZXMgd2hlcmUgcmVhZGFi aWxpdHkgaXMgaGVscGVkIGJ5IGdvaW5nIGFib3ZlIHRoYXQgKHRob3VnaCB1bmRlciAxMDAgY2hh cnMpIHRoYXQgaXMgZmluZSB0b28uICBNYWtlIHN1cmUgeW91IHRpZHkgdXAgYWxsIHNpbWlsYXIg Y2FzZXMuDQo+ID4gICANCj4gPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiA+ICsJCWRldl9lcnIo JmRhdGEtPmNsaWVudC0+ZGV2LCAiRXJyb3IgcmVhZGluZyByZWcgR1BJTyBzZXR1cFxuIik7DQo+ ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCS8qDQo+ID4g PiArCSAqIFNldHRpbmcgR1BJTzEgdG8gdHJpZ2dlciB0ZW1wZXJhdHVyZSBjb252ZXJzaW9uDQo+ ID4gPiArCSAqIHdoZW4gZHJpdmVuIGxvdy4NCj4gPiA+ICsJICogU2V0dGluZyBHUElPMCB0byB0 cmlnZ2VyIGludGVycnVwdCB3aGVuIHRlbXBlcmF0dXJlDQo+ID4gPiArCSAqIGNvbnZlcnNpb24g Z2V0cyBjb21wbGV0ZWQuDQo+ID4gPiArCSAqLw0KPiA+ID4gKwlyZWd2YWwgPSByZXQgfCBNQVgz MDIwOF9HUElPMV9TRVRVUCB8IE1BWDMwMjA4X0dQSU8wX1NFVFVQOw0KPiA+IA0KPiA+IElmIHRo ZSBkcml2ZXIgJ3dvcmtzJyBpbiBjdXJyZW50IGZvcm0gd2l0aG91dCBzZXR0aW5nIHRoaXMgc3R1 ZmYgdXAgSSB3b3VsZCBwcmVmZXIgdGhhdCB5b3UgbGVhdmUgdGhpcyB1bnRpbCB5b3UgaGF2ZSBh IHBhdGNoIGFjdHVhbGx5IHVzaW5nIHRoZSBHUElPIHNpZ25hbHMuDQo+ID4gVGhhdCB3YXkgd2Ug Y2FuIHJldmlldyBhbGwgdGhlIEdQSU8gcmVsYXRlZCBjb2RlIHRvZ2V0aGVyLg0KPiA+ICAgDQo+ ID4gPiArCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LA0KPiA+ ID4gKwkJCQkJTUFYMzAyMDhfR1BJT19TRVRVUCwgcmVndmFsKTsNCj4gPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiA+ICsJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LCAiRXJyb3Igd3JpdGlu ZyByZWcgR1BJTyBzZXR1cFxuIik7DQo+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKwl9DQo+ ID4gPiArDQo+ID4gPiArCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShkYXRhLT5jbGll bnQsDQo+ID4gPiArCQkJCSAgICAgICBNQVgzMDIwOF9JTlRfRU5BQkxFKTsNCj4gPiA+ICsJaWYg KHJldCA8IDApIHsNCj4gPiA+ICsJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LCAiRXJyb3Ig cmVhZGluZyByZWcgaW50ZXJydXB0IGVuYWJsZVxuIik7DQo+ID4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCS8qIEVuYWJsaW5nIEdQSU8wIGludGVycnVwdCAq Lw0KPiA+ID4gKwlyZWd2YWwgPSByZXQgfCBNQVgzMDIwOF9JTlRfRU5BQkxFX1RFTVBfUkRZOw0K PiA+IA0KPiA+IFRoaXMgYmVsb25ncyBpbiBhIHBhdGNoIGFkZGluZyBpbnRlcnJ1cHQgc3VwcG9y dC4gSXQgc2hvdWxkIG5vdCBiZSBoZXJlIHVudGlsIHRoZW4uDQo+ID4gICANCj4gPiA+ICsJcmV0 ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsDQo+ID4gPiArCQkJCQlN QVgzMDIwOF9JTlRfRU5BQkxFLCByZWd2YWwpOw0KPiA+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ ID4gKwkJZGV2X2VycigmZGF0YS0+Y2xpZW50LT5kZXYsICJFcnJvciB3cml0aW5nIHJlZyBpbnRl cnJ1cHQgZW5hYmxlXG4iKTsNCj4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiArCX0NCj4gPiA+ ICsNCj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaWlvX2luZm8gbWF4MzAyMDhfaW5mbyA9IHsNCj4gPiA+ICsJLnJlYWRfcmF3 ID0gbWF4MzAyMDhfcmVhZCwNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQg bWF4MzAyMDhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykgew0KPiA+ID4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaTJjLT5kZXY7DQo+ID4gPiArCXN0cnVjdCBtYXgzMDIwOF9kYXRhICpk YXRhOw0KPiA+ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2Ow0KPiA+ID4gKwlpbnQgcmV0 Ow0KPiA+ID4gKw0KPiA+ID4gKwlpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoZGV2 LCBzaXplb2YoKmRhdGEpKTsNCj4gPiA+ICsJaWYgKCFpbmRpb19kZXYpDQo+ID4gPiArCQlyZXR1 cm4gLUVOT01FTTsNCj4gPiA+ICsNCj4gPiA+ICsJZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7 DQo+ID4gPiArCWRhdGEtPmNsaWVudCA9IGkyYzsNCj4gPiA+ICsJbXV0ZXhfaW5pdCgmZGF0YS0+ bG9jayk7DQo+ID4gPiArDQo+ID4gPiArCWluZGlvX2Rldi0+bmFtZSA9IE1BWDMwMjA4X0RSVl9O QU1FOw0KPiA+IA0KPiA+IEknbSBub3QgYSBodWdlIGZhbiBvZiBkZWZpbmVzIGVpdGhlciBoZXJl IG9yIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpemVyLg0KPiA+IFRoZSByZWFzb24g YmVpbmcgdGhhdCB3ZSBuZWVkIGNsZWFyIHZpc2liaWxpdHkgb2YgdGhlc2Ugc3RyaW5ncyBhbmQg dGhlcmUgaXMgbm8gcGFydGljdWxhciByZWFzb24gd2h5IHRoZXkgYXJlIHRoZSBzYW1lLg0KPiA+ IFNvIEknZCBwcmVmZXIgZ2V0dGluZyByaWQgb2YgdGhhdCBkZWZpbmUgYW5kIHB1dHRpbmcgdGhl IHN0cmluZ3MgZGlyZWN0bHkgaW4gYm90aCBsb2NhdGlvbnMuDQo+ID4gICANCj4gPiA+ICsJaW5k aW9fZGV2LT5jaGFubmVscyA9IG1heDMwMjA4X2NoYW5uZWxzOw0KPiA+ID4gKwlpbmRpb19kZXYt Pm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MzAyMDhfY2hhbm5lbHMpOw0KPiA+ID4gKwlp bmRpb19kZXYtPmluZm8gPSAmbWF4MzAyMDhfaW5mbzsNCj4gPiA+ICsJaW5kaW9fZGV2LT5tb2Rl cyA9IElORElPX0RJUkVDVF9NT0RFOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBSZXNldCB0aGUgZGV2 aWNlIGluaXRpYWxseSAqLw0KPiA+IA0KPiA+IFRoZSBleHByZXNzaXZlIG5hdHVyZSBvZiB0aGUg ZmllbGQgZGVmaW5lIG1ha2VzIGl0IG9idmlvdXMgdGhpcyBpcyBhIHJlc2V0Lg0KPiA+IHNvIEkg d291bGQgZHJvcCB0aGUgY29tbWVudC4gIFRoZXJlIGlzIGEgcHJpY2UgaW4gbWFpbnRhaW5hYmls aXR5IHRvIGNvbW1lbnRzICh0aGV5IG9mdGVuIGJlY29tZSB3cm9uZyBvdmVyIHRpbWUgYXMgYSBk cml2ZXIgZXZvbHZlcykuICBBcyBzdWNoIGtlZXAgdGhlbSBmb3IgcGxhY2VzIHdoZXJlIHRoZSBj b21tZW50IHRlbGxzIHVzIHNvbWV0aGluZyBub3QgZWFzaWx5IHNlZW4gZnJvbSB0aGUgY29kZS4N Cj4gPiAgIA0KPiA+ID4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNs aWVudCwgTUFYMzAyMDhfU1lTVEVNX0NUUkwsDQo+ID4gPiArCQkJCQlNQVgzMDIwOF9TWVNURU1f Q1RSTF9SRVNFVCk7DQo+ID4gPiArCWlmIChyZXQpIHsNCj4gPiA+ICsJCWRldl9lcnIoZGV2LCAi RmFpbHVyZSBpbiBwZXJmb3JtaW5nIHJlc2V0XG4iKTsNCj4gPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJbXNsZWVwKDUwKTsNCj4gPiA+ICsNCj4gPiA+ICsJ cmV0ID0gbWF4MzAyMDhfZ3Bpb19zZXR1cChkYXRhKTsNCj4gPiA+ICsJaWYgKHJldCA8IDApDQo+ ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBkZXZtX2lpb19kZXZp Y2VfcmVnaXN0ZXIoZGV2LCBpbmRpb19kZXYpOw0KPiA+ID4gKwlpZiAocmV0KSB7DQo+ID4gPiAr CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBJSU8gZGV2aWNlXG4iKTsNCj4gPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIDA7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9p ZCBtYXgzMDIwOF9pZF90YWJsZVtdID0gew0KPiA+ID4gKwl7ICJtYXgzMDIwOCIgfSwNCj4gPiA+ ICsJeyB9DQo+ID4gPiArfTsNCj4gPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MzAy MDhfaWRfdGFibGUpOw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9k ZXZpY2VfaWQgbWF4MzAyMDhfYWNwaV9tYXRjaFtdID0gew0KPiA+ID4gKwl7ICJNQVgzMDIwOCIg fSwNCj4gPiA+ICsJeyB9DQo+ID4gPiArfTsNCj4gPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGFj cGksIG1heDMwMjA4X2FjcGlfbWF0Y2gpOw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1heDMwMjA4X29mX21hdGNoW10gPSB7DQo+ID4gPiArCXsgLmNv bXBhdGlibGUgPSAibWF4aW0sbWF4MzAyMDgiIH0sDQo+ID4gPiArCXsgfQ0KPiA+ID4gK307DQo+ ID4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWF4MzAyMDhfb2ZfbWF0Y2gpOw0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXgzMDIwOF9kcml2ZXIgPSB7DQo+ ID4gPiArCS5kcml2ZXIgPSB7DQo+ID4gPiArCQkubmFtZSA9IE1BWDMwMjA4X0RSVl9OQU1FLA0K PiA+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0gbWF4MzAyMDhfb2ZfbWF0Y2gsDQo+ID4gPiArCQku YWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKG1heDMwMjA4X2FjcGlfbWF0Y2gpLA0KPiA+IA0K PiA+IFRyeSBidWlsZGluZyB3aXRob3V0IEFDUEkgc3VwcG9ydCBhbmQgeW91IHNob3VsZCBzZWUg YSB3YXJuaW5nIGZyb20gdGhlIGNvbXBpbGVyLiAgU2FkbHkgQUNQSV9QVFIoKSBpcyBub3QgYXMg c21hcnQgYXMgaXQgc2hvdWxkIGJlLg0KPiA+IElmIGludGVyZXN0ZWQsIHRha2UgYSBsb29rIGF0 IGhvdyBwbV9wdHIoKSBkZWFscyB3aXRoIHRoZSBzYW1lIGlzc3VlLg0KPiA+IA0KPiA+IEFueWhv dywgYmVzdCBvcHRpb24gaXMganVzdCBkb24ndCBib3RoZXIgd2l0aCBBQ1BJX1BUUigpLg0KPiA+ IFRoZSBzYXZpbmcgaW4gbW9kdWxlIHNpemUgaXMgdHJpdmlhbCBhbmQgbm90IHdvcnRoIHRoZSBp ZmRlZiBtYWdpYyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHdhcm5pbmcgZnJlZS4NCj4gPiANCj4g PiAgIA0KPiA+ID4gKwl9LA0KPiA+ID4gKwkucHJvYmVfbmV3ID0gbWF4MzAyMDhfcHJvYmUsDQo+ ID4gPiArCS5pZF90YWJsZSA9IG1heDMwMjA4X2lkX3RhYmxlLA0KPiA+ID4gK307DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIGludCBfX2luaXQgbWF4MzAyMDhfaW5pdCh2b2lkKSB7DQo+ID4gPiAr CXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4MzAyMDhfZHJpdmVyKTsgfSANCj4gPiA+ICttb2R1 bGVfaW5pdChtYXgzMDIwOF9pbml0KTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBfX2V4 aXQgbWF4MzAyMDhfZXhpdCh2b2lkKSB7DQo+ID4gPiArCWkyY19kZWxfZHJpdmVyKCZtYXgzMDIw OF9kcml2ZXIpOyB9IG1vZHVsZV9leGl0KG1heDMwMjA4X2V4aXQpOw0KPiA+IA0KPiA+IG1vZHVs ZV9pMmNfZHJpdmVyKCkgdG8gZ2V0IHJpZCBvZiB0aGlzIGJvaWxlcnBsYXRlLg0KPiA+IA0KPiA+ IE5vdGUgdGhpcyB3YXMgYSBjb21tZW50IEkgbWFkZSBvbiB2MS4uLiBJIHdvbmRlcmVkIGlmIEkn ZCBiZWVuIGhhbGYgDQo+ID4gYXNsZWVwIHNvIHdlbnQgbG9va2luZyA6KQ0KPiA+IA0KPiA+IEpv bmF0aGFuDQo+ID4gICANCj4gDQoNCg==