From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web10.10054.1680040856433063142 for ; Tue, 28 Mar 2023 15:00:57 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=MKI95Vto; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: andrei.warkentin@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680040856; x=1711576856; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=eyQdvCf8SODY9dvRWH6EyPy+9cnvpfOJpI+hyt2XiuU=; b=MKI95VtojpFi7tpgy/IHMtVfk1qfNl7FX6xP+fsbdtYSIW5G/IfChb6i VdJ4sz0a1XpHy7hNCdkR1LtgqYyHTVWKmuyQE25OZ/5jXJ4B60tb+Zxet 1yFgWeulYHTELA7qiZhnGPGDL/Q90NQu/AG37o86g4efXmaLPu9dZww5F 0R8sWnHeCzw7gICIqg6sy9IrYph/cmLbf/F5oZNxaaNmissr4cMTk8dTk SJ0PZW7z9KOKgSfAKdttKka+NlP3sea32ySd4t68ZXIX/GZEXzolFDvYC +/6TB3AmoP/nQyr2csS3AE90mZlLowx+NLWET9ABP42FGeSigmAWo+Hth A==; X-IronPort-AV: E=McAfee;i="6600,9927,10663"; a="324599388" X-IronPort-AV: E=Sophos;i="5.98,297,1673942400"; d="scan'208";a="324599388" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Mar 2023 15:00:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10663"; a="773314746" X-IronPort-AV: E=Sophos;i="5.98,297,1673942400"; d="scan'208";a="773314746" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by FMSMGA003.fm.intel.com with ESMTP; 28 Mar 2023 15:00:49 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Tue, 28 Mar 2023 15:00:49 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Tue, 28 Mar 2023 15:00:48 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21 via Frontend Transport; Tue, 28 Mar 2023 15:00:48 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.45) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.21; Tue, 28 Mar 2023 15:00:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QUI33T7tYOMM26hnND0UtaY7FpvHbtAT0kH4MdoVLIP2oT7WhcSbPFvoybVR9nINGUWyaslBucTw3drzm2L8b68frx6lw1/eZlr1jmC+VOuzuRUughn8Y/2Re3JN9GTi3xcwkW8F9NqCbYPmNPQrhJNK9PK/zA4jkEdH+Q6fu/+/qc/HwlghznG0iVfHEJPEjcbntPUC45VsAehqtX1t6UUXYB/8JNtuYkdCTD2UOJnIUf+6XzHgGHGh7uYH3gyTKtArGqnoWv8ehdosvG4mv1IGbJU/82HIaM4uhiwErV6ftO3eEQGT0rKlG1L7eDIAp2W1jBzMUvau7EGvLZGlIw== 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=eyQdvCf8SODY9dvRWH6EyPy+9cnvpfOJpI+hyt2XiuU=; b=U0vAOdJ9pXUaJDTy7QFWW1XSU2i/wGHQYI90vyz2F+kk2s4+93aIb7BrrEy88xliPIy/9tZiJP1ACGuFBvEXpF0e7aeSxwCQuwVkMrXFmAQaxciw/bKsynBlXqBNkMxjaNW1gNCxc71joiXqt6KT3Z6Dav8pEsdvGQlbvPWChPOu/aFBA5Edp7maF465ZqaH0mbRXL0J4WIu2BNkTRPk4S4KCeufo1ZaWq/MG8brtklWZ9ID9GQJlTYaRljOw0rZ0nJJWkv1OKLHow4zhiRNBsK2h21jcL5O11DqjFYOJD5AcUXw7EE1xVqxyiqx3WkL6QqtAQb9T5EX76iAh+XxQA== 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 PH8PR11MB6856.namprd11.prod.outlook.com (2603:10b6:510:22b::7) by LV2PR11MB6071.namprd11.prod.outlook.com (2603:10b6:408:178::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.33; Tue, 28 Mar 2023 22:00:43 +0000 Received: from PH8PR11MB6856.namprd11.prod.outlook.com ([fe80::f480:22ed:c915:13f1]) by PH8PR11MB6856.namprd11.prod.outlook.com ([fe80::f480:22ed:c915:13f1%4]) with mapi id 15.20.6222.033; Tue, 28 Mar 2023 22:00:43 +0000 From: "Andrei Warkentin" To: "Kinney, Michael D" , "devel@edk2.groups.io" CC: "Gao, Liming" , "Liu, Zhiguang" Subject: Re: [PATCH v5 2/3] MdePkg: add SBI-based SerialPortLib for RISC-V Thread-Topic: [PATCH v5 2/3] MdePkg: add SBI-based SerialPortLib for RISC-V Thread-Index: AQHZU3KAVGzPlaHoyEG7qZm8cJJIT67+cWFggAAClwCAAArmAIAQbaEAgAHLPOCAAAPLAIAAAXBwgAAT6wCAAAlnwA== Date: Tue, 28 Mar 2023 22:00:43 +0000 Message-ID: References: <20230310170456.5230-1-andrei.warkentin@intel.com> <20230310170456.5230-3-andrei.warkentin@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: PH8PR11MB6856:EE_|LV2PR11MB6071:EE_ x-ms-office365-filtering-correlation-id: 832b2926-37a6-432d-8b28-08db2fd7e0ab x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wq0lj24d7WWc16oruXuldrXr83D9ya5Parxs/r6Hp1p0yBlvoVkfAW6//XFj/l51tx/EYbnSVdJkYunBnwWrheMGITFx0NjDKHo8ZM8UoqEMAFslLBNMOqh0pQC/lyhPL+qhFR3/MIQrbdzBMarxfLGHsRFUGMe7bzmCNy0Fwv3+Rcdc1i078TNBI3tYPABtPgsgBbhS+w0lIpGY8CN6N/uu20xfqx/4ON/P2kkAJAuPeOk5xWEDYPWFeaYevtj18qGpbt2BWjdLSdnhx72axZpsgg0XYC3gs77YlyGRRN470KAxqyBXaGQ9GfJ6h1VZ9EM2h4jRj9F5LqK3QzJakW1b8a2plDCuOTZy0E1GAYgbic0qdy56aQDy/s76Zs9S9MRAsR3PBp9+zmzgS3QgrxPBqNqwgjttk8COJe5FQWgl6sqmjRcq7Yp0HEsjg79s30ff2ew9yEn6v9FW1mA1UcVy+A9MEoZMMKvqHBiF4QsX7bYfqlvn4ajPsHojmtQpRL1sJx2xvmMlo3Ippj2Uc9r0d/GYMDxZspdVByFYlLmoVtxZIW/7SztxnqbxJtVokKkCS692veULO+gZyQIZw+/rxqDXmhZHt5AG3/T5Ax4uji6N5MGsAORCi1n81rlm x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB6856.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(346002)(396003)(39860400002)(376002)(136003)(451199021)(316002)(6506007)(107886003)(82960400001)(86362001)(122000001)(5660300002)(110136005)(54906003)(8936002)(52536014)(66946007)(41300700001)(64756008)(66446008)(66556008)(66476007)(8676002)(4326008)(76116006)(186003)(53546011)(26005)(9686003)(33656002)(55016003)(38100700002)(83380400001)(38070700005)(478600001)(71200400001)(2906002)(30864003)(7696005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SUNucUVOV0hxZ1FYNWlCRjU2V244N0o3ZDlzNmk5VzRETDV5Qk1WWUxyTlJt?= =?utf-8?B?bWpzdFpNSW93bjVWeVFVdEhFd212dGFadzVIQUF0ZWlkUkprY2drTXd1bVY0?= =?utf-8?B?ZFBmVzVwSThHWWxtcE5oTGxHaUxqWUdyS1RBN29QUEZzMkNyc1U5MkxuTjNO?= =?utf-8?B?NmQ2ZWxCMkI5cXRuM0t3YXFXWDljNEN3RzhmcXEwNWR6Ym9TUjNMWFBsTDY3?= =?utf-8?B?My8rWXArRmE5SVdwdVlwNFZ5UHZ5SFh5VmErR2NLemkraEpXbHIxMWZHUFhM?= =?utf-8?B?dWNrNERPNWdnZWg0V1BVcFdYdXVhVHJJWi9CeXJtNktUaUFRdWswRWZPdkgx?= =?utf-8?B?V3BWdkplSytCS1JQOURQenQ1Qjk3WW9rUWlRak9OTWUvVnFGbmVpWlFBZXNv?= =?utf-8?B?R2VETmxxZEJaOHYrMWNMenFxM1BjS0JqeWVIczF6RTNNZ2xTZE1rVkp3N2xp?= =?utf-8?B?NkxzWitmLzd6eVBTSVdYN0hWb3d1UDlMWGRjNlF5aEYzblZacmNIVTJpeGEv?= =?utf-8?B?UzJPVk1lWXVGZi83UnFCWmRxbXp4Q2NrWEJOZmFkRFlQTlJaS09SelFma0Yz?= =?utf-8?B?c3Fha1Jra1Z5bGVaZ083UGRRaDlQUWpUaS9ZK1FUVjN4NjdBd0tGWHZ1Yjgz?= =?utf-8?B?SmFXNFB0NldocGZ5QkpSZ1NIVkFyLzEyVitUTUE0SW9naVZsckJRZkJuRU10?= =?utf-8?B?K1dGSnVrOTdNTVlpN204UUg5RkRRcjRpR2k3NWVSL2c3MzdER0ZjQUNWZlFY?= =?utf-8?B?WmJDUUJJTVZTZ3NSaW93SGcydXdYL2toS2pYQlgrbGlEaS9yclhONm1HWVZJ?= =?utf-8?B?OE92cm1EMEcvNmprbVAvSHVPWHlIK25IajIzTS9maHplSUtkOEwvSitDK2M2?= =?utf-8?B?dDBhWTl2V3JKUHpicEs5R1hnOHA5NVdMNGd4K05ZRm1OQ1FhV2VxcXh4dzhT?= =?utf-8?B?TUFZd1FBUHlsalE3Wm9FTUpndE9UWkwzT3ZYeFppQlZub0dVTmlMckI0OFl1?= =?utf-8?B?dFM4U3FhQTBzVW1jSTVNWmRTUUl3UmVXMm53dStrQVQwV0FFdFVxRmRHRzMv?= =?utf-8?B?dm93UXFqLzdER0Q2bWtwU0J6QmR4akd4TzZCc2J0VUVjSkxEWmVFNyt4blkx?= =?utf-8?B?ZjVJN2ZIYmZDZEdtbXY2WWowdk9JQ3lMWTJRQ3dMZ2RYQUdSZnd3MDlNSVhF?= =?utf-8?B?N3FxM1hrY0tlUGs2V1Z0eXF3TUJrL2FYUysxakd5aW9wcjZsNHVqL1cxZmJU?= =?utf-8?B?eU5PN2lMb1ZuYkRmNDdxdDVyT09lZmV2ekRoNk5WUTMzOHdWSTBDdmVNZUdT?= =?utf-8?B?SVMxZTh6TkZWVGdkeWRHNGJjYW8wU0tEM3gxcXRsNWFWbnI4M1ZMU0pFMGZS?= =?utf-8?B?K0xmWFpJbVdTcGxTUHVDQzJGRDdmdTA5d1hTb3c4NUNjR2x6ZXYxYUZuMkxq?= =?utf-8?B?WUlaWnlCZ2EvS240b0xYRlB1T2RYUVcxU09mbE5qSmNOV1RNaUdpUDdpQWs0?= =?utf-8?B?dHRqM2Z1dkowMnRZTFpGUGcxVWNPbERHcUFvOS9TZGc0NmJrNWxrTUZMVWRz?= =?utf-8?B?S1gvNjlWVzVsenZnOTZYMkFZQWZhamRyZVZnczFiVTVucWNwS0JlSGRQSGp3?= =?utf-8?B?MHZ6VlMrME1lTU9uc3h2V09YUmxPV2cvdUNKb0pWYnh0bjY3SkdZOXRqakY5?= =?utf-8?B?azdqWUdoQVVacmU1cEUxaEgveC9Sa3N4NUhaMU81RFdjT2xiOUtIdzRYem42?= =?utf-8?B?UnZOclJHcCtnKzZEUTJYQWUzSzdLNjhLUktDNUNFSUUwMmhPY0FvY1pCSDIw?= =?utf-8?B?MzB2a3UwdGtabVM3a2hQcGR6L1JlRUdQbHFGY0NrQlZUa2F1M3Q3K2ZnYU1D?= =?utf-8?B?bFY2YTRyVjBuaGxzMVhnZWRnNG5FWGc3WnVxRnBwTE4wNU1RemJ4SjQ0S2xW?= =?utf-8?B?L2FHUHBwNVUrSC9LY09mYkFYZm9EVitKL3FuMVRTcVVmQmE3enZYa1RMaloy?= =?utf-8?B?RzFGcVBlYzR5T0dTZ0lvckZVTGg1TGxDS2FUeGJWcEJBaDR6MU1WeVFGeUNq?= =?utf-8?B?b3NreWtYSGZwQXFPNVI4MldheDdVSGU3V1ZLL1FXdmFpSkZtUWtqQ3dHRDNk?= =?utf-8?B?NWg2bElzRVpvVW1oN2RRZTdjeTVuanpTVVlkOC9KK3VMbzAvT2NhSFhDUmpo?= =?utf-8?B?YkE9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB6856.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 832b2926-37a6-432d-8b28-08db2fd7e0ab X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2023 22:00:43.6678 (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: WtVT0xEcQZ3pctP9aQAGspEae5Nhk7bY6OI2Dxf8e+mUG7+pr6ZDZHE8AERmGFWo3mug/mYZ3/5nGwQ6OuuJ8bPAJeLcDyVSOJy7jwnZTkI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR11MB6071 Return-Path: andrei.warkentin@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB0aGUgaW4tZGVwdGggcHJvcG9zYWwsIHRoaXMgaXMgdW5kb3VidGVkbHkgZ29p bmcgdG8gYmUgdmVyeSBoZWxwZnVsIGZvciBmdXR1cmUgcmVmZXJlbmNlLg0KDQpXaWxsIHJld29y ayBhbmQgcmVzZW5kLg0KDQpBDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBL aW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+IA0KU2VudDogVHVl c2RheSwgTWFyY2ggMjgsIDIwMjMgNDoyNiBQTQ0KVG86IFdhcmtlbnRpbiwgQW5kcmVpIDxhbmRy ZWkud2Fya2VudGluQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQpDYzogR2FvLCBM aW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IExpdSwgWmhpZ3VhbmcgPHpoaWd1YW5n LmxpdUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRl bC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIHY1IDIvM10gTWRlUGtnOiBhZGQgU0JJLWJhc2Vk IFNlcmlhbFBvcnRMaWIgZm9yIFJJU0MtVg0KDQpGcm9tIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMg b2YgeW91ciBsaWJzLCBpdCBpcyBub3QgcmVsYXRlZCB0byBEWEUuDQoNCkl0IGlzIFNFQyB3aXRo IG5vIHdyaXRhYmxlIGdsb2JhbHMsIG9yIFNFQyB3aXRoIHdyaXRhYmxlIGdsb2JhbHMuDQoNCkJv dGggbGlicyBjb3VsZCBiZSB1c2VkIGluIGFuIFNFQyBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRz IG9mZiB0byBQRUkgb3IgRFhFLg0KDQpZb3UgY3VycmVudCBwcm9wb3NlZCBuYW1lcyBhcmU6DQoq IFNlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaQ0KKiBQcmVQaUR4ZVJpc2NWU2VyaWFsUG9ydExp YlNiaQ0KDQpUaGUgY3VycmVudCBuYW1pbmcgY29udmVudGlvbiBpcyBvbmUgb3IgbW9yZSBtb2R1 bGUgdHlwZXMgZm9sbG93ZWQgYnkgdGhlIExpYnJhcnkgQ2xhc3MgTmFtZSBmb2xsb3dlZCBieSBh biBvcHRpb25hbCBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIHNlcnZpY2VzIHRoYXQgdGhlIExp YnJhcnkgQ2xhc3MgaW1wbGVtZW50YXRpb24gZGVwZW5kcy4gIFlvdSBoYXZlIHVzZWQgU2JpIGFz IHRoaXMgb3B0aW9uYWwgcG9zdGZpeC4gIEhvd2V2ZXIsIHlvdSBoYXZlIHR3byBkaWZmZXJlbnQg U0JJIGVudmlyb25tZW50cy4gIE9uZSB3aGVyZSB0aGUgY29kZS9kYXRhIGlzIHJ1bm5pbmcgZnJv bSBSQU0gd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBhbmQgb25lIHdoZXJlIGNv ZGUvZGF0YSBpcyBydW5uaW5nIGZyb20gUk9NIHdoZXJlIGdsb2JhbCB2YXJpYWJsZSBjYW4gbm90 IGJlIHVzZWQuDQoNCkhvdyBhYm91dCB0aGUgZm9sbG93aW5nIG5hbWVzPw0KKiBTZWNQZWlSaXNj VlNlcmlhbFBvcnRMaWJTYmkNCiogU2VjUGVpRHhlUmlzY1ZTZXJpYWxQb3J0TGliU2JpUmFtDQoN CkluIGZhY3QsIGJvdGggbGlicyBhcmUgb2YgdHlwZSBCQVNFIHdoaWNoIG1lYW5zIHRoZXkgYXJl IHJlYWxseSBjb21wYXRpYmxlIHdpdGggYWxsIG1vZHVsZSB0eXBlcyBhcyBsb25nIGFzIHRoZSBT YmkgdnMgU2JpUmFtIGRpZmZlcmVuY2UgaXMgdW5kZXJzdG9vZCBieSB0aGUgcGxhdGZvcm0gZGV2 ZWxvcGVyIHRoYXQgaGFzIHRvIHNldCB0aGUgbGliIG1hcHBpbmdzIGluIHRoZSBEU0MgZmlsZS4N Cg0KU28gYSBmdXJ0aGVyIHJlZmluZW1lbnQgd291bGQgYmU6DQoqIEJhc2VSaXNjVlNlcmlhbFBv cnRMaWJTYmkNCiogQmFzZVJpc2NWU2VyaWFsUG9ydExpYlNiaVJhbQ0KDQpXZSB1c3VhbGx5IGRv IG5vdCBwdXQgYSBDUFUgYXJjaCBpbiB0aGUgTGlicmFyeSBJbnN0YW5jZSBuYW1lLCBidXQgU0JJ IGlzIFVuaXF1ZSB0byBSaXNjViBhbmQgdGhlIGxpYnJhcnkgc2VydmljZXMgYmVpbmcgdXNlZCBh cmUgZnJvbSB0aGUgUmlzY1ZTYmlMaWIgY2xhc3MuICBBZGRpbmcgdGhlIGZ1bGwgbGliIGNsYXNz IG5hbWUgdG8gdGhlIGVuZCBhZGRzIHRoZSBSaXNjViBrZXl3b3JkIHRvIHRoZSBsaWJyYXJ5IGlu c3RhbmNlIG5hbWUuDQoNCiogQmFzZVNlcmlhbFBvcnRMaWJSaXNjVlNiaUxpYg0KKiBCYXNlU2Vy aWFsUG9ydExpYlJpc2NWU2JpTGliUmFtDQoNCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+IEZyb206IFdhcmtlbnRpbiwgQW5kcmVpIDxhbmRyZWkud2Fya2VudGluQGlu dGVsLmNvbT4NCj4gU2VudDogVHVlc2RheSwgTWFyY2ggMjgsIDIwMjMgMToyMCBQTQ0KPiBUbzog S2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgDQo+IGRldmVs QGVkazIuZ3JvdXBzLmlvDQo+IENjOiBHYW8sIExpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29t LmNuPjsgTGl1LCBaaGlndWFuZyANCj4gPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+DQo+IFN1Ympl Y3Q6IFJFOiBbUEFUQ0ggdjUgMi8zXSBNZGVQa2c6IGFkZCBTQkktYmFzZWQgU2VyaWFsUG9ydExp YiBmb3IgDQo+IFJJU0MtVg0KPiANCj4gU28gSSdkIGJlIGluIHN1cHBvcnQgb2YgZm9ybWFsbHkg ZGVmaW5pbmcgYSBQcmVQaSBwcmVmaXguIElmIHdlIGdvIA0KPiB3aXRoIFNlYywgdGhlbiB3ZSdk IGhhdmUgdG8gY29tZSB1cCB3aXRoIHNvbWUgb3RoZXIgd2F5IG9mIGRpc2FtYmlndWF0aW5nICJo YW5kIG9mZiB0byBQRUkiIHZzICJoYW5kIG9mZiB0byBEWEUiLCBhbmQgaXQgc2VlbXMgbGlrZSBQ cmVQaSBpcyBhbHJlYWR5IHRoYXQuDQo+IA0KPiBXaGF0IGRvIHlvdSBlbnRhaWwgdGhlIHByb2Nl c3MgdG8gYmUgZm9sbG93ZWQgaGVyZT8gSXMgdGhlcmUgdmFsdWUgaW4gDQo+IGRlZmluaW5nIGEg ZGVkaWNhdGVkIFByZVBpIG1vZHVsZSB0eXBlIChsaWtlIFNFQyk/IEknZCBiZSBoYXBweSB0byBw cm9wb3NlIHRoZSBlZGsyIGNoYW5nZXMgdG8gc3VwcG9ydCB0aGF0LiBDYW4gd2UgZGVjb3VwbGUg dGhpcyB3b3JrIGZyb20gdGhlc2Ugc3BlY2lmaWMgU2VyaWFsUG9ydExpYiBjb250cmlidXRpb25z Pw0KPiANCj4gQQ0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogS2lu bmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBTZW50OiBUdWVz ZGF5LCBNYXJjaCAyOCwgMjAyMyAzOjEwIFBNDQo+IFRvOiBXYXJrZW50aW4sIEFuZHJlaSA8YW5k cmVpLndhcmtlbnRpbkBpbnRlbC5jb20+OyANCj4gZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6 IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBMaXUsIFpoaWd1YW5nIA0K PiA8emhpZ3VhbmcubGl1QGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIA0KPiA8bWljaGFl bC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgMi8zXSBNZGVQ a2c6IGFkZCBTQkktYmFzZWQgU2VyaWFsUG9ydExpYiBmb3IgDQo+IFJJU0MtVg0KPiANCj4gSSBh Z3JlZSB0aGF0IG1vdmluZyBpbnRvIEVtYmVkZGVkUGtnIGRvZXMgbm90IG1ha2Ugc2Vuc2UuDQo+ IA0KPiBFbWJlZGRlZFBrZyBpcyB2ZXJ5IG9sZCB3aXRob3V0IG1hbnkgdXBkYXRlcy4gIFRoYXQg cGFja2FnZSBpcyBub3QgdGhlIGJlc3QgdG8gdXNlIGZvciBleGFtcGxlcy4NCj4gDQo+IEkgdGhp bmsgeW91IGFyZSBzdWdnZXN0aW5nIHRoYXQgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGluIGEgbGli cmFyeSANCj4gdGhhdCBydW5zIGluIGFuIFNFQyBlbnYgd2l0aCBpbnRlbnQgdG8gaGFuZCBvZmYg dG8gUEVJIGFuZCBhIGxpYnJhcnkgDQo+IHRoYXQgcnVucyBpbiBhbiBTRUMgZW52IHdpdGggaW50 ZW50IHRvIGhhbmRvZmYgdG8gRFhFLiAgVGhleSBhcmUgYm90aCBTRUMgbW9kdWxlIHR5cGVzIGFu ZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IGlzIHRoZSBzYW1lLiAgVGhlIG9ubHkgZGlmZmVy ZW5jZSBpcyBob3cgdGhleSBwcmVwYXJlIGZvciB0aGUgaGFuZG9mZi4NCj4gDQo+IE15IGludGVy ZXN0IGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoZSBwcmVmaXhlcyBhcmUgdXNlZCBjb25zaXN0ZW50 bHkgDQo+IGFuZCBpZiB3ZSB0cnVseSBoYXZlIGEgbmV3IHByZWZpeCB0eXBlLCB0aGVuIHRvIGNs ZWFybHkgZGVmaW5lIGl0IHNvIGl0IGNhbiBiZSB1c2VkIGNvbnNpc3RlbnRseSBnb2luZyBmb3J3 YXJkLg0KPiANCj4gTWlrZQ0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ IEZyb206IFdhcmtlbnRpbiwgQW5kcmVpIDxhbmRyZWkud2Fya2VudGluQGludGVsLmNvbT4NCj4g PiBTZW50OiBUdWVzZGF5LCBNYXJjaCAyOCwgMjAyMyAxOjAwIFBNDQo+ID4gVG86IEtpbm5leSwg TWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IA0KPiA+IGRldmVsQGVkazIu Z3JvdXBzLmlvDQo+ID4gQ2M6IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+ OyBMaXUsIFpoaWd1YW5nIA0KPiA+IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0KPiA+IFN1Ympl Y3Q6IFJFOiBbUEFUQ0ggdjUgMi8zXSBNZGVQa2c6IGFkZCBTQkktYmFzZWQgU2VyaWFsUG9ydExp YiBmb3IgDQo+ID4gUklTQy1WDQo+ID4NCj4gPiBTZWMgaXNuJ3QgYSBnb29kIGZpdCwgYmVjYXVz ZSBpdCBoYXMgaW1wbGljYXRpb25zIG9uIHRoZSANCj4gPiBlbnZpcm9ubWVudCwgd2hpY2ggaXMg d2h5IHRoZSBjb250cmlidXRpb24gYWxzbyBpbmNsdWRlcyBhIHNlcGFyYXRlIFNlY1BlaSB2YXJp YW50IGFzIHdlbGwuDQo+ID4NCj4gPiBJbiBuYW1pbmcsIEkgZm9sbG93ZWQgb3RoZXIgZWRrMiBl eGFtcGxlcyBzdWNoIGFzIA0KPiA+IC4vRW1iZWRkZWRQa2cvTGlicmFyeS9QcmVQaUV4dHJhY3RH dWlkZWRTZWN0aW9uTGliIGFuZCANCj4gPiAuL0VtYmVkZGVkUGtnL0xpYnJhcnkvUHJlUGlNZW1v cnlBbGxvY2F0aW9uTGkuIEkgd291bGQgcHJlZmVyIG5vdCB0byANCj4gPiBtb3ZlIG9uZSBvZiB0 aGVzZSBsaWJyYXJpZXMgaW50byBFbWJlZGRlZFBrZyAtIHRoYXQgd291bGRuJ3QNCj4gbWFrZSBt dWNoIHNlbnNlIHRvIG1lIChlc3AuIHNpbmNlIHRoZXJlJ3Mgbm90aGluZyAiZW1iZWRkZWQiIGFi b3V0IHRoZSBhcHByb2FjaCBwZXIgc2UsIGl0IGNhbiBiZSB1c2VkIG9uIGFueSBpbXBsZW1lbnRh dGlvbikuDQo+ID4NCj4gPiBBDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBG cm9tOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4g U2VudDogTW9uZGF5LCBNYXJjaCAyNywgMjAyMyAxMTozMiBBTQ0KPiA+IFRvOiBXYXJrZW50aW4s IEFuZHJlaSA8YW5kcmVpLndhcmtlbnRpbkBpbnRlbC5jb20+OyANCj4gPiBkZXZlbEBlZGsyLmdy b3Vwcy5pbw0KPiA+IENjOiBHYW8sIExpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsg TGl1LCBaaGlndWFuZyANCj4gPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbT47IEtpbm5leSwgTWlj aGFlbCBEIA0KPiA+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBS RTogW1BBVENIIHY1IDIvM10gTWRlUGtnOiBhZGQgU0JJLWJhc2VkIFNlcmlhbFBvcnRMaWIgZm9y IA0KPiA+IFJJU0MtVg0KPiA+DQo+ID4gSSB0aGluayB0aGF0IHdvdWxkIHN0aWxsIGJlIGNhbGxl ZCBTZWMuICBBcmUgdGhlcmUgYW55IGlzc3VlcyB3aXRoIHVzaW5nIFNlYyBwcmVmaXg/DQo+ID4N Cj4gPiBNaWtlDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBG cm9tOiBXYXJrZW50aW4sIEFuZHJlaSA8YW5kcmVpLndhcmtlbnRpbkBpbnRlbC5jb20+DQo+ID4g PiBTZW50OiBUaHVyc2RheSwgTWFyY2ggMTYsIDIwMjMgMTA6NDUgUE0NCj4gPiA+IFRvOiBLaW5u ZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyANCj4gPiA+IGRldmVs QGVkazIuZ3JvdXBzLmlvDQo+ID4gPiBDYzogR2FvLCBMaW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0 LmNvbS5jbj47IExpdSwgWmhpZ3VhbmcgDQo+ID4gPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4N Cj4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgMi8zXSBNZGVQa2c6IGFkZCBTQkktYmFzZWQg U2VyaWFsUG9ydExpYiANCj4gPiA+IGZvciBSSVNDLVYNCj4gPiA+DQo+ID4gPiBQcmVQaSByZWZl cnMgdG8gYSBTRUMtbGlrZSBzdGFnZSBpbiBhIFRpYW5vIGltcGxlbWVudGF0aW9uIHRoYXQgDQo+ ID4gPiBza2lwcyB0aGUgUEVJIHN0YWdlLiBSZWFzb25zIGZvciBza2lwcGluZyBQRUkgdXN1YWxs eSBjZW50ZXIgDQo+ID4gPiBhcm91bmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGJlaW5nIGRvbmUg YXQgYW4gZWFybGllciBzdGFnZSBvZiANCj4gPiA+IGZpcm13YXJlIGluaXRpYWxpemF0aW9uIC0g Zm9yIGV4YW1wbGUsIHByaW9yIG9yIHBhcnQgb2YgVEYtQSANCj4gPiA+IGZpcm13YXJlIG9uDQo+ ID4gPiBBQXJjaDY0IG9yIHByaW9yIG9yIHBhcnQgb2YgU0JJIGltcGxlbWVudGF0aW9uIG9uIFJJ U0MtVi4NCj4gPiA+DQo+ID4gPiBFLmcuIEFybVZpcnRQa2cvUHJlUGkgYW5kIE92bWZQa2cvUmlz Y1ZWaXJ0L1NlYy4gVGhlIGxhdGVyIGlzIG5vdCANCj4gPiA+IGEgIlNFQyIgaW4gdGhlIHNlbmQg b2YgaGFuZGluZyBvZmYgdG8gUGVpQ29yZSwgYnV0IGluc3RlYWQgaGFuZHMgb2ZmIHRvIER4ZUNv cmUuDQo+ID4gPg0KPiA+ID4gVGhlcmUgaXMgbm8gYmFzZSB0eXBlIGZvciBQcmVQaS4gVGhlIHR5 cGUgaXMgc3RpbGwgU0VDLiBCdXQgaXQgYSkgYXNzdW1lcyBSQU0gaXMgYXZhaWxhYmxlIGIpIGJ1 aWxkcyBIT0JzIGFuZCBoYW5kcy1vZmYgdG8gRFhFLg0KPiA+ID4NCj4gPiA+IFRoZSBuYW1lIGhh cyBiZWVuIGFyb3VuZCBmb3IgYXQgbGVhc3QgaGFsZiBhIGRlY2FkZSBub3cgYW5kIG1ha2luZyAN Cj4gPiA+IGl0IGEgcGFydCBvZiB0aGUgU2VyaWFsUG9ydExpYiBjb21wb25lbnQgbmFtZSBpcyBp bXBvcnRhbnQgYXMgaXQgc2lnbmlmaWVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgY29kZSBjYW4g YXBwbHkuDQo+ID4gPg0KPiA+ID4gQQ0KPiA+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+ID4gPiBGcm9tOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+DQo+ID4gPiBTZW50OiBGcmlkYXksIE1hcmNoIDE3LCAyMDIzIDEyOjAxIEFNDQo+ ID4gPiBUbzogV2Fya2VudGluLCBBbmRyZWkgPGFuZHJlaS53YXJrZW50aW5AaW50ZWwuY29tPjsg DQo+ID4gPiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiA+ID4gQ2M6IEdhbywgTGltaW5nIDxnYW9s aW1pbmdAYnlvc29mdC5jb20uY24+OyBMaXUsIFpoaWd1YW5nIA0KPiA+ID4gPHpoaWd1YW5nLmxp dUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCANCj4gPiA+IDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgMi8zXSBNZGVQa2c6IGFk ZCBTQkktYmFzZWQgU2VyaWFsUG9ydExpYiANCj4gPiA+IGZvciBSSVNDLVYNCj4gPiA+DQo+ID4g PiBXaGF0IGlzIHRoZSBkZWZpbml0aW9uIG9mICJQcmVQSSI/ICBUaGF0IGlzIG5vdCBhIHByZWZp eCBJIGhhdmUgc2VlbiB1c2VkIGJlZm9yZS4NCj4gPiA+DQo+ID4gPiBNaWtlDQo+ID4gPg0KPiA+ ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBXYXJrZW50aW4s IEFuZHJlaSA8YW5kcmVpLndhcmtlbnRpbkBpbnRlbC5jb20+DQo+ID4gPiA+IFNlbnQ6IFRodXJz ZGF5LCBNYXJjaCAxNiwgMjAyMyA5OjUzIFBNDQo+ID4gPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vw cy5pbw0KPiA+ID4gPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPjsgR2FvLCBMaW1pbmcgDQo+ID4gPiA+IDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+ OyBMaXUsIFpoaWd1YW5nIA0KPiA+ID4gPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4NCj4gPiA+ ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSAyLzNdIE1kZVBrZzogYWRkIFNCSS1iYXNlZCBTZXJp YWxQb3J0TGliIA0KPiA+ID4gPiBmb3IgUklTQy1WDQo+ID4gPiA+DQo+ID4gPiA+IEhpIGZvbGtz LA0KPiA+ID4gPg0KPiA+ID4gPiBDYW4gSSBnZXQgYSByZXZpZXcgZm9yIHRoZSBjaGFuZ2VzIHRv IE1kZVBrZy5kc2MgdG8gaW5jbHVkZSB0aGUgDQo+ID4gPiA+IG5ldyBsaWJzIG9uIFJJU0MtVj8g VGhhdCdzIHRoZSBtaW5vciB0aGluZyBwcmV2ZW50aW5nIHRoaXMgcGF0Y2ggc2V0IGZyb20gYmVp bmcgbWVyZ2VkIPCfmIouDQo+ID4gPiA+DQo+ID4gPiA+IEENCj4gPiA+ID4NCj4gPiA+ID4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gRnJvbTogV2Fya2VudGluLCBBbmRyZWkg PGFuZHJlaS53YXJrZW50aW5AaW50ZWwuY29tPg0KPiA+ID4gPiBTZW50OiBGcmlkYXksIE1hcmNo IDEwLCAyMDIzIDExOjA1IEFNDQo+ID4gPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiA+ ID4gPiBDYzogV2Fya2VudGluLCBBbmRyZWkgPGFuZHJlaS53YXJrZW50aW5AaW50ZWwuY29tPjsg RGFuaWVsIA0KPiA+ID4gPiBTY2hhZWZlciA8Z2l0QGRhbmllbHNjaGFlZmVyLm1lPjsgU3VuaWwg ViBMIA0KPiA+ID4gPiA8c3VuaWx2bEB2ZW50YW5hbWljcm8uY29tPjsgS2lubmV5LCBNaWNoYWVs IEQgDQo+ID4gPiA+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5nIA0K PiA+ID4gPiA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgTGl1LCBaaGlndWFuZyANCj4gPiA+ ID4gPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+OyBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0 LmNvbT4NCj4gPiA+ID4gU3ViamVjdDogW1BBVENIIHY1IDIvM10gTWRlUGtnOiBhZGQgU0JJLWJh c2VkIFNlcmlhbFBvcnRMaWIgZm9yIA0KPiA+ID4gPiBSSVNDLVYNCj4gPiA+ID4NCj4gPiA+ID4g VGhlc2UgYXJlIGltcGxlbWVudGF0aW9ucyBvZiBTZXJpYWxQb3J0TGliIHVzaW5nIFNCSSBjb25z b2xlIHNlcnZpY2VzLg0KPiA+ID4gPiAtIFNlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaSBpcyBh cHByb3ByaWF0ZSBmb3IgU0VDL1BFSSAoWElQKSANCj4gPiA+ID4gZW52aXJvbm1lbnRzDQo+ID4g PiA+IC0gUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkgaXMgYXBwcm9wcmlhdGUgZm9yIFBy ZVBJL0RYRSANCj4gPiA+ID4gZW52aXJvbm1lbnRzDQo+ID4gPiA+DQo+ID4gPiA+IFRlc3RlZCB3 aXRoOg0KPiA+ID4gPiAtIFFlbXUgUmlzY1ZWaXJ0IChub24tREJDTiBjYXNlLCBiYWNrZWQgYnkg VUFSVCkNCj4gPiA+ID4gLSBUaW55RU1VICsgUmlzY1ZWaXJ0IChub24tREJDTiBjYXNlLCBIVElG KQ0KPiA+ID4gPiAtIFRpbnlFTVUgKyBSaXNjVlZpcnQgKERCQ04gY2FzZSwgSFRJRikNCj4gPiA+ ID4NCj4gPiA+ID4gQ2M6IERhbmllbCBTY2hhZWZlciA8Z2l0QGRhbmllbHNjaGFlZmVyLm1lPg0K PiA+ID4gPiBDYzogU3VuaWwgViBMIDxzdW5pbHZsQHZlbnRhbmFtaWNyby5jb20+DQo+ID4gPiA+ IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiA+ ID4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gPiA+ID4gQ2M6 IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4NCj4gPiA+ID4gQWNrZWQtYnk6 IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPg0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5 OiBBbmRyZWkgV2Fya2VudGluIDxhbmRyZWkud2Fya2VudGluQGludGVsLmNvbT4NCj4gPiA+ID4g LS0tDQo+ID4gPiA+ICBNZGVQa2cvTWRlUGtnLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiA+ID4gPiAgTWRl UGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkvUHJlUGlEeGVSaXNjVlNl cmlhbFBvcnRMaWJTYmkuaW5mIHwgIDM2ICsrKw0KPiA+ID4gPiAgTWRlUGtnL0xpYnJhcnkvU2Vj UGVpUmlzY1ZTZXJpYWxQb3J0TGliU2JpL1NlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaS5pbmYg ICAgIHwgIDM5ICsrKw0KPiA+ID4gPiAgTWRlUGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlh bFBvcnRMaWJTYmkvUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkuYyAgIHwgMjg4ICsrKysr KysrKysrKysrKysrKysrDQo+ID4gPiA+ICBNZGVQa2cvTGlicmFyeS9TZWNQZWlSaXNjVlNlcmlh bFBvcnRMaWJTYmkvU2VjUGVpUmlzY1ZTZXJpYWxQb3J0TGliU2JpLmMgICAgICAgfCAyMzMgKysr KysrKysrKysrKysrKw0KPiA+ID4gPiAgTWRlUGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlh bFBvcnRMaWJTYmkvUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkudW5pIHwgIDE2ICsrDQo+ ID4gPiA+ICBNZGVQa2cvTGlicmFyeS9TZWNQZWlSaXNjVlNlcmlhbFBvcnRMaWJTYmkvU2VjUGVp UmlzY1ZTZXJpYWxQb3J0TGliU2JpLnVuaSAgICAgfCAgMTYgKysNCj4gPiA+ID4gIDcgZmlsZXMg Y2hhbmdlZCwgNjMwIGluc2VydGlvbnMoKykNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBh L01kZVBrZy9NZGVQa2cuZHNjIGIvTWRlUGtnL01kZVBrZy5kc2MgaW5kZXggDQo+ID4gPiA+IDBh Yzc2MThiNDYyMy4uZmIzMTM0OTA0MmZiIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9NZGVQa2cvTWRl UGtnLmRzYw0KPiA+ID4gPiArKysgYi9NZGVQa2cvTWRlUGtnLmRzYw0KPiA+ID4gPiBAQCAtMTky LDUgKzE5Miw3IEBAIFtDb21wb25lbnRzLkFSTSwgQ29tcG9uZW50cy5BQVJDSDY0XQ0KPiA+ID4g Pg0KPiA+ID4gPiAgW0NvbXBvbmVudHMuUklTQ1Y2NF0NCj4gPiA+ID4gICAgTWRlUGtnL0xpYnJh cnkvQmFzZVJpc2NWU2JpTGliL0Jhc2VSaXNjVlNiaUxpYi5pbmYNCj4gPiA+ID4gKw0KPiA+ID4g PiArIE1kZVBrZy9MaWJyYXJ5L1NlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaS9TZWNQZWlSaXNj VlNlcmlhbFBvDQo+ID4gPiA+ICsgcnQNCj4gPiA+ID4gKyBMaQ0KPiA+ID4gPiArIGJTDQo+ID4g PiA+ICsgYmkNCj4gPiA+ID4gKyAuaW5mDQo+ID4gPiA+ICsgTWRlUGtnL0xpYnJhcnkvUHJlUGlE eGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkvUHJlUGlEeGVSaXNjVlNlcmkNCj4gPiA+ID4gKyBhbA0K PiA+ID4gPiArIFBvDQo+ID4gPiA+ICsgcnQNCj4gPiA+ID4gKyBMaQ0KPiA+ID4gPiArIGJTYmku aW5mDQo+ID4gPiA+DQo+ID4gPiA+ICBbQnVpbGRPcHRpb25zXQ0KPiA+ID4gPiBkaWZmIC0tZ2l0 DQo+ID4gPiA+IGEvTWRlUGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkv UHJlUGlEeGVSaXNjVlNlcmkNCj4gPiA+ID4gYWwNCj4gPiA+ID4gUG8NCj4gPiA+ID4gcnQNCj4g PiA+ID4gTGliU2JpLmluZg0KPiA+ID4gPiBiL01kZVBrZy9MaWJyYXJ5L1ByZVBpRHhlUmlzY1ZT ZXJpYWxQb3J0TGliU2JpL1ByZVBpRHhlUmlzY1ZTZXJpDQo+ID4gPiA+IGFsDQo+ID4gPiA+IFBv DQo+ID4gPiA+IHJ0DQo+ID4gPiA+IExpYlNiaS5pbmYNCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4xZDg1NDQ3NTZiYjkNCj4gPiA+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFyeS9QcmVQaUR4ZVJpc2NW U2VyaWFsUG9ydExpYlNiaS9QcmVQaUR4ZVJpc2NWDQo+ID4gPiA+ICsrKyBTZQ0KPiA+ID4gPiAr KysgcmkNCj4gPiA+ID4gKysrIGFsDQo+ID4gPiA+ICsrKyBQbw0KPiA+ID4gPiArKysgcnRMaWJT YmkuaW5mDQo+ID4gPiA+IEBAIC0wLDAgKzEsMzYgQEANCj4gPiA+ID4gKyMjIEBmaWxlDQo+ID4g PiA+ICsjICBTZXJpYWwgUG9ydCBMaWJyYXJ5IGJhY2tlZCBieSBTQkkgY29uc29sZS4NCj4gPiA+ ID4gKyMNCj4gPiA+ID4gKyMgIE1lYW50IGZvciBQcmVQaSBhbmQgRFhFIGVudmlyb25tZW50cyAo d2hlcmUgZ2xvYmFscyBhcmUgYWxsb3dlZCkuDQo+ID4gPiA+ICtTZWUgIyAgU2VjUGVpU2VyaWFs UG9ydExpYlJpc2NWU2JpIGZvciBhIHJlZHVjZWQgdmFyaWFudCANCj4gPiA+ID4gK2FwcHJvcHJp YXRlIGZvciBTRUMgIyAgYW5kIFBFSSAoWElQKSBlbnZpcm9ubWVudHMuDQo+ID4gPiA+ICsjDQo+ ID4gPiA+ICsjICBDb3B5cmlnaHQgKGMpIDIwMjMsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIA0KPiA+ID4gPiArcmVzZXJ2ZWQuPEJSPiAjICMNCj4gPiA+ID4gK1NQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50ICMgIyAjIw0KPiA+ID4gPiArDQo+ID4gPiA+ ICtbRGVmaW5lc10NCj4gPiA+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAxQg0KPiA+ID4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBQ cmVQaUR4ZVJpc2NWU2VyaWFsUG9ydExpYlNiaQ0KPiA+ID4gPiArICBNT0RVTEVfVU5JX0ZJTEUg ICAgICAgICAgICAgICAgPSBQcmVQaUR4ZVJpc2NWU2VyaWFsUG9ydExpYlNiaS51bmkNCj4gPiA+ ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gODcyYWY3NDMtYWI1Ni00NWI0 LWEwNjUtNjAyNTY3ZjQ4MjBjDQo+ID4gPiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAg ICAgICA9IEJBU0UNCj4gPiA+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0g MS4wDQo+ID4gPiA+ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IFNlcmlhbFBv cnRMaWIgfCBTRUMgRFhFX0NPUkUgRFhFX0RSSVZFUiBEWEVfUlVOVElNRV9EUklWRVIgVUVGSV9E UklWRVIgVUVGSV9BUFBMSUNBVElPTg0KPiA+ID4gPiArDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyMN Cj4gPiA+ID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gUklTQ1Y2NA0KPiA+ ID4gPiArIw0KPiA+ID4gPiArDQo+ID4gPiA+ICtbU291cmNlc10NCj4gPiA+ID4gKyAgUHJlUGlE eGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkuYw0KPiA+ID4gPiArDQo+ID4gPiA+ICtbUGFja2FnZXNd DQo+ID4gPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gPiA+ICsNCj4gPiA+ID4gK1tMaWJy YXJ5Q2xhc3Nlc10NCj4gPiA+ID4gKyAgUmlzY1ZTYmlMaWINCj4gPiA+ID4gZGlmZiAtLWdpdA0K PiA+ID4gPiBhL01kZVBrZy9MaWJyYXJ5L1NlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaS9TZWNQ ZWlSaXNjVlNlcmlhbFBvDQo+ID4gPiA+IHJ0DQo+ID4gPiA+IExpDQo+ID4gPiA+IGJTDQo+ID4g PiA+IGJpLmluZg0KPiA+ID4gPiBiL01kZVBrZy9MaWJyYXJ5L1NlY1BlaVJpc2NWU2VyaWFsUG9y dExpYlNiaS9TZWNQZWlSaXNjVlNlcmlhbFBvDQo+ID4gPiA+IHJ0DQo+ID4gPiA+IExpDQo+ID4g PiA+IGJTDQo+ID4gPiA+IGJpLmluZg0KPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdiYzdjZDQ3YzExYw0KPiA+ID4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gPiA+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1NlY1BlaVJpc2NWU2VyaWFsUG9ydExp YlNiaS9TZWNQZWlSaXNjVlNlcmkNCj4gPiA+ID4gKysrIGFsDQo+ID4gPiA+ICsrKyBQbw0KPiA+ ID4gPiArKysgcnQNCj4gPiA+ID4gKysrIExpDQo+ID4gPiA+ICsrKyBiU2JpLmluZg0KPiA+ID4g PiBAQCAtMCwwICsxLDM5IEBADQo+ID4gPiA+ICsjIyBAZmlsZQ0KPiA+ID4gPiArIyAgU2VyaWFs IFBvcnQgTGlicmFyeSBiYWNrZWQgYnkgU0JJIGNvbnNvbGUuDQo+ID4gPiA+ICsjDQo+ID4gPiA+ ICsjICBNZWFudCBmb3IgU0VDIGFuZCBQRUkgKFhJUCkgZW52aXJvbm1lbnRzLg0KPiA+ID4gPiAr Iw0KPiA+ID4gPiArIyAgRHVlIHRvIGxpbWl0YXRpb25zIG9mIFNCSSBjb25zb2xlIGludGVyZmFj ZSBhbmQgWElQIA0KPiA+ID4gPiArZW52aXJvbm1lbnRzICMgKG9uIHVzZSBvZiBnbG9iYWxzKSwg dGhpcyBsaWJyYXJ5IGluc3RhbmNlIGRvZXMgDQo+ID4gPiA+ICtub3QgaW1wbGVtZW50IHJlYWRp bmcgIyBhbmQgcG9sbGluZyB0aGUgc2VyaWFsIHBvcnQuIFNlZSANCj4gPiA+ID4gK1ByZVBpRHhl U2VyaWFsUG9ydExpYlJpc2NWU2JpIGZvciAjIHRoZSBmdWxsLWZlYXR1cmVkIHZhcmlhbnQgbWVh bnQgZm9yIFByZVBpIGFuZCBEWEUgZW52aXJvbm1lbnRzLg0KPiA+ID4gPiArIw0KPiA+ID4gPiAr IyAgQ29weXJpZ2h0IChjKSAyMDIzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyANCj4g PiA+ID4gK3Jlc2VydmVkLjxCUj4gIyAjDQo+ID4gPiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudCAjICMgIyMNCj4gPiA+ID4gKw0KPiA+ID4gPiArW0RlZmlu ZXNdDQo+ID4gPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAw MUINCj4gPiA+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gU2VjUGVpUmlz Y1ZTZXJpYWxQb3J0TGliU2JpDQo+ID4gPiA+ICsgIE1PRFVMRV9VTklfRklMRSAgICAgICAgICAg ICAgICA9IFNlY1BlaVJpc2NWU2VyaWFsUG9ydExpYlNiaS51bmkNCj4gPiA+ID4gKyAgRklMRV9H VUlEICAgICAgICAgICAgICAgICAgICAgID0gNjM5ZmFkMzgtNGJmZC00ZWI5LTlmMDktZTk3Yzc5 NDdkNDgwDQo+ID4gPiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IEJBU0UN Cj4gPiA+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gPiA+ ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IFNlcmlhbFBvcnRMaWIgfCBTRUMg UEVJX0NPUkUgUEVJTQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyMNCj4gPiA+ID4g KyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gUklTQ1Y2NA0KPiA+ID4gPiArIw0K PiA+ID4gPiArDQo+ID4gPiA+ICtbU291cmNlc10NCj4gPiA+ID4gKyAgU2VjUGVpUmlzY1ZTZXJp YWxQb3J0TGliU2JpLmMNCj4gPiA+ID4gKw0KPiA+ID4gPiArW1BhY2thZ2VzXQ0KPiA+ID4gPiAr ICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ID4gPiArDQo+ID4gPiA+ICtbTGlicmFyeUNsYXNzZXNd DQo+ID4gPiA+ICsgIFJpc2NWU2JpTGliDQo+ID4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9N ZGVQa2cvTGlicmFyeS9QcmVQaUR4ZVJpc2NWU2VyaWFsUG9ydExpYlNiaS9QcmVQaUR4ZVJpc2NW U2VyaQ0KPiA+ID4gPiBhbA0KPiA+ID4gPiBQbw0KPiA+ID4gPiBydA0KPiA+ID4gPiBMaWJTYmku Yw0KPiA+ID4gPiBiL01kZVBrZy9MaWJyYXJ5L1ByZVBpRHhlUmlzY1ZTZXJpYWxQb3J0TGliU2Jp L1ByZVBpRHhlUmlzY1ZTZXJpDQo+ID4gPiA+IGFsDQo+ID4gPiA+IFBvDQo+ID4gPiA+IHJ0DQo+ ID4gPiA+IExpYlNiaS5jDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uMDU4YTY1NzNlZjJkDQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4g PiA+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlhbFBvcnRMaWJTYmkv UHJlUGlEeGVSaXNjVg0KPiA+ID4gPiArKysgU2UNCj4gPiA+ID4gKysrIHJpDQo+ID4gPiA+ICsr KyBhbA0KPiA+ID4gPiArKysgUG8NCj4gPiA+ID4gKysrIHJ0TGliU2JpLmMNCj4gPiA+ID4gQEAg LTAsMCArMSwyODggQEANCj4gPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gPiArICBTZXJpYWwgUG9y dCBMaWJyYXJ5IGJhY2tlZCBieSBTQkkgY29uc29sZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBN ZWFudCBmb3IgUHJlUGkgYW5kIERYRSBlbnZpcm9ubWVudHMgKHdoZXJlIGdsb2JhbHMgYXJlIGFs bG93ZWQpLg0KPiA+ID4gPiArIFNlZSBTZWNQZWlTZXJpYWxQb3J0TGliUmlzY1ZTYmkgZm9yIGEg cmVkdWNlZCB2YXJpYW50IA0KPiA+ID4gPiArIGFwcHJvcHJpYXRlIGZvciBTRUMgYW5kIFBFSSAo WElQKSBlbnZpcm9ubWVudHMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAy MDIzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyANCj4gPiA+ID4gKyByZXNlcnZlZC48 QlI+DQo+ID4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVk ZSA8QmFzZS5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvU2VyaWFsUG9ydExpYi5oPiAj aW5jbHVkZSANCj4gPiA+ID4gKzxMaWJyYXJ5L0Jhc2VSaXNjVlNiaUxpYi5oPg0KPiA+ID4gPiAr DQo+ID4gPiA+ICtTVEFUSUMgQk9PTEVBTiAgbUhhdmVEYmNuICAgICAgICAgID0gRkFMU0U7DQo+ ID4gPiA+ICtTVEFUSUMgQk9PTEVBTiAgbUhhdmVMZWdhY3lQdXRjaGFyID0gRkFMU0U7IFNUQVRJ QyBCT09MRUFOIA0KPiA+ID4gPiArbUhhdmVMZWdhY3lHZXRjaGFyID0gRkFMU0U7DQo+ID4gPiA+ ICtTVEFUSUMgSU5UNjQgICAgbUxhc3RHZXRDaGFyICAgICAgID0gLTE7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICBJbml0aWFsaXplIHRoZSBzZXJpYWwgZGV2aWNlIGhhcmR3 YXJlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIElmIG5vIGluaXRpYWxpemF0aW9uIGlzIHJlcXVp cmVkLCB0aGVuIHJldHVybiBSRVRVUk5fU1VDQ0VTUy4NCj4gPiA+ID4gKyAgSWYgdGhlIHNlcmlh bCBkZXZpY2Ugd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCwgdGhlbiByZXR1cm4gUkVUVVJO X1NVQ0NFU1MuDQo+ID4gPiA+ICsgIElmIHRoZSBzZXJpYWwgZGV2aWNlIGNvdWxkIG5vdCBiZSBp bml0aWFsaXplZCwgdGhlbiByZXR1cm4gUkVUVVJOX0RFVklDRV9FUlJPUi4NCj4gPiA+ID4gKw0K PiA+ID4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICBUaGUgc2VyaWFsIGRldmlj ZSB3YXMgaW5pdGlhbGl6ZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX0RFVklDRV9FUlJP UiAgIFRoZSBzZXJpYWwgZGV2aWNlIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZC4NCj4gPiA+ID4g Kw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gPiA+ICtFRklBUEkN Cj4gPiA+ID4gK1NlcmlhbFBvcnRJbml0aWFsaXplICgNCj4gPiA+ID4gKyAgVk9JRA0KPiA+ID4g PiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFNCSV9SRVQgIFJldDsNCj4gPiA+ID4gKw0K PiA+ID4gPiArICBSZXQgPSBTYmlDYWxsIChTQklfRVhUX0JBU0UsIFNCSV9FWFRfQkFTRV9QUk9C RV9FWFQsIDEsIA0KPiA+ID4gPiArIFNCSV9FWFRfREJDTik7ICBpZiAoKFRyYW5zbGF0ZUVycm9y IChSZXQuRXJyb3IpID09IEVGSV9TVUNDRVNTKSAmJg0KPiA+ID4gPiArICAgICAgKFJldC5WYWx1 ZSAhPSAwKSkNCj4gPiA+ID4gKyAgew0KPiA+ID4gPiArICAgIG1IYXZlRGJjbiA9IFRSVUU7DQo+ ID4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgUmV0ID0gU2JpQ2FsbCAoU0JJX0VYVF9C QVNFLCBTQklfRVhUX0JBU0VfUFJPQkVfRVhULCAxLCBTQklfRVhUXzBfMV9DT05TT0xFX1BVVENI QVIpOw0KPiA+ID4gPiArICAgIGlmICgoVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJvcikgPT0gRUZJ X1NVQ0NFU1MpICYmDQo+ID4gPiA+ICsgICAgICAgIChSZXQuVmFsdWUgIT0gMCkpDQo+ID4gPiA+ ICsgICAgew0KPiA+ID4gPiArICAgICAgbUhhdmVMZWdhY3lQdXRjaGFyID0gVFJVRTsNCj4gPiA+ ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBSZXQgPSBTYmlDYWxsIChTQklfRVhU X0JBU0UsIFNCSV9FWFRfQkFTRV9QUk9CRV9FWFQsIDEsIFNCSV9FWFRfMF8xX0NPTlNPTEVfR0VU Q0hBUik7DQo+ID4gPiA+ICsgICAgaWYgKChUcmFuc2xhdGVFcnJvciAoUmV0LkVycm9yKSA9PSBF RklfU1VDQ0VTUykgJiYNCj4gPiA+ID4gKyAgICAgICAgKFJldC5WYWx1ZSAhPSAwKSkNCj4gPiA+ ID4gKyAgICB7DQo+ID4gPiA+ICsgICAgICBtSGF2ZUxlZ2FjeUdldGNoYXIgPSBUUlVFOw0KPiA+ ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBS RVRVUk5fU1VDQ0VTUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4g PiA+ICsgIFdyaXRlIGRhdGEgZnJvbSBidWZmZXIgdG8gc2VyaWFsIGRldmljZS4NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICBXcml0ZXMgTnVtYmVyT2ZCeXRlcyBkYXRhIGJ5dGVzIGZyb20gQnVmZmVy IHRvIHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFj dHVhbGx5IHdyaXR0ZW4gdG8gdGhlIHNlcmlhbCBkZXZpY2UgaXMgcmV0dXJuZWQuDQo+ID4gPiA+ ICsgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbGVzcyB0aGFuIE51bWJlck9mQnl0ZXMsIHRoZW4g dGhlIHdyaXRlIG9wZXJhdGlvbiBmYWlsZWQuDQo+ID4gPiA+ICsgIElmIEJ1ZmZlciBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiArICBJZiBOdW1iZXJPZkJ5dGVzIGlzIHplcm8sIHRo ZW4gcmV0dXJuIDAuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBCdWZmZXIgICAgICAg ICAgIFRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSB3cml0dGVuLg0KPiA+ID4g PiArICBAcGFyYW0gIE51bWJlck9mQnl0ZXMgICAgVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0 dGVuIHRvIHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwg MCAgICAgICAgICAgICAgICBOdW1iZXJPZkJ5dGVzIGlzIDAuDQo+ID4gPiA+ICsgIEByZXR2YWwg PjAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIHNlcmlh bCBkZXZpY2UuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIHZh bHVlIGlzIGxlc3MgdGhhbiBOdW1iZXJPZkJ5dGVzLCB0aGVuIHRoZSB3cml0ZSBvcGVyYXRpb24g ZmFpbGVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1VJTlRODQo+ID4gPiA+ ICtFRklBUEkNCj4gPiA+ID4gK1NlcmlhbFBvcnRXcml0ZSAoDQo+ID4gPiA+ICsgIElOIFVJTlQ4 ICAqQnVmZmVyLA0KPiA+ID4gPiArICBJTiBVSU5UTiAgTnVtYmVyT2ZCeXRlcw0KPiA+ID4gPiAr ICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFVJTlROICBJbmRleDsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBpZiAobUhhdmVEYmNuKSB7DQo+ID4gPiA+ICsgICAgU0JJX1JFVCAgUmV0Ow0KPiA+ ID4gPiArICAgIFJldCA9IFNiaUNhbGwgKA0KPiA+ID4gPiArICAgICAgICAgICAgU0JJX0VYVF9E QkNOLA0KPiA+ID4gPiArICAgICAgICAgICAgU0JJX0VYVF9EQkNOX1dSSVRFLA0KPiA+ID4gPiAr ICAgICAgICAgICAgMywNCj4gPiA+ID4gKyAgICAgICAgICAgIE51bWJlck9mQnl0ZXMsDQo+ID4g PiA+ICsgICAgICAgICAgICAoKFVJTlROKUJ1ZmZlciksDQo+ID4gPiA+ICsgICAgICAgICAgICAw DQo+ID4gPiA+ICsgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIGlmIChUcmFuc2xhdGVFcnJv ciAoUmV0LkVycm9yKSAhPSBFRklfU1VDQ0VTUykgew0KPiA+ID4gPiArICAgICAgcmV0dXJuIDA7 DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcmV0dXJuIFJldC5WYWx1 ZTsNCj4gPiA+ID4gKyAgfSBlbHNlIGlmIChtSGF2ZUxlZ2FjeVB1dGNoYXIpIHsNCj4gPiA+ID4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkJ5dGVzOyBJbmRleCsrKSB7DQo+ ID4gPiA+ICsgICAgICBTYmlDYWxsIChTQklfRVhUXzBfMV9DT05TT0xFX1BVVENIQVIsIDAsIDEs IEJ1ZmZlcltJbmRleF0pOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg IHJldHVybiBJbmRleDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8qDQo+ ID4gPiA+ICsgICAqIE5laXRoZXIgREJDTiBvciBsZWdhY3kgZXh0ZW5zaW9uIHdlcmUgcHJlc2Vu dC4NCj4gPiA+ID4gKyAgICovDQo+ID4gPiA+ICsgIHJldHVybiBOdW1iZXJPZkJ5dGVzOw0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUmVhZCBkYXRhIGZy b20gc2VyaWFsIGRldmljZSBhbmQgc2F2ZSB0aGUgZGF0YXMgaW4gYnVmZmVyLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIFJlYWRzIE51bWJlck9mQnl0ZXMgZGF0YSBieXRlcyBmcm9tIGEgc2VyaWFs IGRldmljZSBpbnRvIHRoZSANCj4gPiA+ID4gKyBidWZmZXIgc3BlY2lmaWVkIGJ5IEJ1ZmZlci4g VGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkIGlzIHJldHVybmVkLg0KPiA+ID4gPiAr ICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGxlc3MgdGhhbiBOdW1iZXJPZkJ5dGVzLCB0aGVuIHRo ZSByZXN0IG9wZXJhdGlvbiBmYWlsZWQuDQo+ID4gPiA+ICsgIElmIEJ1ZmZlciBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiArICBJZiBOdW1iZXJPZkJ5dGVzIGlzIHplcm8sIHRoZW4g cmV0dXJuIDAuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBCdWZmZXIgICAgICAgICAg IFRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0byBzdG9yZSB0aGUgZGF0YSByZWFkIGZy b20gdGhlIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsgIEBwYXJhbSAgTnVtYmVyT2ZCeXRlcyAg ICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHdpbGwgYmUgcmVhZC4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBAcmV0dmFsIDAgICAgICAgICAgICAgICAgUmVhZCBkYXRhIGZhaWxlZDsgTm8gZGF0 YSBpcyB0byBiZSByZWFkLg0KPiA+ID4gPiArICBAcmV0dmFsID4wICAgICAgICAgICAgICAgVGhl IGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArVUlOVE4NCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4g PiArU2VyaWFsUG9ydFJlYWQgKA0KPiA+ID4gPiArICBPVVQgVUlOVDggICpCdWZmZXIsDQo+ID4g PiA+ICsgIElOICBVSU5UTiAgTnVtYmVyT2ZCeXRlcw0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7 DQo+ID4gPiA+ICsgIFVJTlROICBJbmRleDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBJbmRleCA9 IDA7DQo+ID4gPiA+ICsgIHdoaWxlICgoSW5kZXggPCBOdW1iZXJPZkJ5dGVzKSAmJiBTZXJpYWxQ b3J0UG9sbCAoKSkgew0KPiA+ID4gPiArICAgIEJ1ZmZlcltJbmRleCsrXSA9IChVSU5UOCltTGFz dEdldENoYXI7DQo+ID4gPiA+ICsgICAgbUxhc3RHZXRDaGFyICAgID0gLTE7DQo+ID4gPiA+ICsg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gSW5kZXg7DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBQb2xscyBhIHNlcmlhbCBkZXZpY2UgdG8g c2VlIGlmIHRoZXJlIGlzIGFueSBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZC4NCj4gPiA+ID4gKw0K PiA+ID4gPiArICBQb2xscyBhIHNlcmlhbCBkZXZpY2UgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBk YXRhIHdhaXRpbmcgdG8gYmUgcmVhZC4NCj4gPiA+ID4gKyAgSWYgdGhlcmUgaXMgZGF0YSB3YWl0 aW5nIHRvIGJlIHJlYWQgZnJvbSB0aGUgc2VyaWFsIGRldmljZSwgdGhlbiBUUlVFIGlzIHJldHVy bmVkLg0KPiA+ID4gPiArICBJZiB0aGVyZSBpcyBubyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZCBm cm9tIHRoZSBzZXJpYWwgZGV2aWNlLCB0aGVuIEZBTFNFIGlzIHJldHVybmVkLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICBEYXRhIGlzIHdhaXRpbmcgdG8g YmUgcmVhZCBmcm9tIHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArICBAcmV0dmFsIEZBTFNF ICAgICAgICAgICAgVGhlcmUgaXMgbm8gZGF0YSB3YWl0aW5nIHRvIGJlIHJlYWQgZnJvbSB0aGUg c2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtCT09MRUFO DQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1NlcmlhbFBvcnRQb2xsICgNCj4gPiA+ID4gKyAg Vk9JRA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIC8qDQo+ID4gPiA+ICsg ICAqIENhcmVmdWwuIE9wZW5TQkkgd2l0aCBIVElGIGNvbnNvbGUgd2lsbCByZXR1cm4gLTEgZm9s bG93ZWQgYnkgLTINCj4gPiA+ID4gKyAgICogaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIHJlY2Vp dmVkLiBTbyBqdXN0IGNoZWNrIGZvciB2YWx1ZXMgPj0gMC4NCj4gPiA+ID4gKyAgICovDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgaWYgKG1MYXN0R2V0Q2hhciA+PSAwKSB7DQo+ID4gPiA+ICsgICAg cmV0dXJuIFRSVUU7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAobUhh dmVEYmNuKSB7DQo+ID4gPiA+ICsgICAgVUlOVDggICAgQnVmZmVyOw0KPiA+ID4gPiArICAgIFNC SV9SRVQgIFJldDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIFJldCA9IFNiaUNhbGwgKA0KPiA+ ID4gPiArICAgICAgICAgICAgU0JJX0VYVF9EQkNOLA0KPiA+ID4gPiArICAgICAgICAgICAgU0JJ X0VYVF9EQkNOX1JFQUQsDQo+ID4gPiA+ICsgICAgICAgICAgICAzLA0KPiA+ID4gPiArICAgICAg ICAgICAgMSwNCj4gPiA+ID4gKyAgICAgICAgICAgICgoVUlOVE4pJkJ1ZmZlciksDQo+ID4gPiA+ ICsgICAgICAgICAgICAwDQo+ID4gPiA+ICsgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIGlm ICgoVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJvcikgPT0gRUZJX1NVQ0NFU1MpICYmDQo+ID4gPiA+ ICsgICAgICAgIChSZXQuVmFsdWUgPT0gMSkpDQo+ID4gPiA+ICsgICAgew0KPiA+ID4gPiArICAg ICAgbUxhc3RHZXRDaGFyID0gQnVmZmVyOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfSBl bHNlIGlmIChtSGF2ZUxlZ2FjeUdldGNoYXIpIHsNCj4gPiA+ID4gKyAgICBtTGFzdEdldENoYXIg PSAoSU5UNjQpU2JpQ2FsbCAoU0JJX0VYVF8wXzFfQ09OU09MRV9HRVRDSEFSLCANCj4gPiA+ID4g KyAwLCAwKS5FcnJvcjsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gbUxhc3RHZXRD aGFyID49IDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr ICBTZXRzIHRoZSBjb250cm9sIGJpdHMgb24gYSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEBwYXJhbSBDb250cm9sICAgICAgICAgICAgICAgIFNldHMgdGhlIGJpdHMgb2Yg Q29udHJvbCB0aGF0IGFyZSBzZXR0YWJsZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFs IFJFVFVSTl9TVUNDRVNTICAgICAgICBUaGUgbmV3IGNvbnRyb2wgYml0cyB3ZXJlIHNldCBvbiB0 aGUgc2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQg ICAgVGhlIHNlcmlhbCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbi4NCj4g PiA+ID4gKyAgQHJldHZhbCBSRVRVUk5fREVWSUNFX0VSUk9SICAgVGhlIHNlcmlhbCBkZXZpY2Ug aXMgbm90IGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ ID4gPiA+ICtSRVRVUk5fU1RBVFVTDQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1NlcmlhbFBv cnRTZXRDb250cm9sICgNCj4gPiA+ID4gKyAgSU4gVUlOVDMyICBDb250cm9sDQo+ID4gPiA+ICsg ICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ID4g PiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUmV0cmlldmUgdGhlIHN0 YXR1cyBvZiB0aGUgY29udHJvbCBiaXRzIG9uIGEgc2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKw0K PiA+ID4gPiArICBAcGFyYW0gQ29udHJvbCAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gcmV0 dXJuIHRoZSBjdXJyZW50IGNvbnRyb2wgc2lnbmFscyBmcm9tIHRoZSBzZXJpYWwgZGV2aWNlLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgIFRoZSBj b250cm9sIGJpdHMgd2VyZSByZWFkIGZyb20gdGhlIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsg IEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgIFRoZSBzZXJpYWwgZGV2aWNlIGRvZXMgbm90 IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24uDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX0RFVklD RV9FUlJPUiAgIFRoZSBzZXJpYWwgZGV2aWNlIGlzIG5vdCBmdW5jdGlvbmluZyBjb3JyZWN0bHku DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ID4g PiArRUZJQVBJDQo+ID4gPiA+ICtTZXJpYWxQb3J0R2V0Q29udHJvbCAoDQo+ID4gPiA+ICsgIE9V VCBVSU5UMzIgICpDb250cm9sDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAg KkNvbnRyb2wgPSAwOw0KPiA+ID4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gPiA+ ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBTZXRzIHRoZSBiYXVkIHJh dGUsIHJlY2VpdmUgRklGTyBkZXB0aCwgdHJhbnNtaXQvcmVjZWljZSB0aW1lIA0KPiA+ID4gPiAr b3V0LCBwYXJpdHksDQo+ID4gPiA+ICsgIGRhdGEgYml0cywgYW5kIHN0b3AgYml0cyBvbiBhIHNl cmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtIEJhdWRSYXRlICAgICAg ICAgICBUaGUgcmVxdWVzdGVkIGJhdWQgcmF0ZS4gQSBCYXVkUmF0ZSB2YWx1ZSBvZiAwIHdpbGwg dXNlIHRoZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSdzIGRl ZmF1bHQgaW50ZXJmYWNlIHNwZWVkLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIG91dHB1dCwgdGhlIHZhbHVlIGFjdHVhbGx5IHNldC4NCj4gPiA+ID4gKyAgQHBhcmFt IFJldmVpdmVGaWZvRGVwdGggICBUaGUgcmVxdWVzdGVkIGRlcHRoIG9mIHRoZSBGSUZPIG9uIHRo ZSByZWNlaXZlIHNpZGUgb2YgdGhlDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VyaWFsIGludGVyZmFjZS4gQSBSZWNlaXZlRmlmb0RlcHRoIHZhbHVlIG9mIDAgd2lsbCB1 c2UNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGV2aWNlJ3MgZGVm YXVsdCBGSUZPIGRlcHRoLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9u IG91dHB1dCwgdGhlIHZhbHVlIGFjdHVhbGx5IHNldC4NCj4gPiA+ID4gKyAgQHBhcmFtIFRpbWVv dXQgICAgICAgICAgICBUaGUgcmVxdWVzdGVkIHRpbWUgb3V0IGZvciBhIHNpbmdsZSBjaGFyYWN0 ZXIgaW4gbWljcm9zZWNvbmRzLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRoaXMgdGltZW91dCBhcHBsaWVzIHRvIGJvdGggdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHNp ZGUgb2YgdGhlDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNl LiBBIFRpbWVvdXQgdmFsdWUgb2YgMCB3aWxsIHVzZSB0aGUgZGV2aWNlJ3MgZGVmYXVsdCB0aW1l DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHZhbHVlLg0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHZhbHVlIGFjdHVh bGx5IHNldC4NCj4gPiA+ID4gKyAgQHBhcmFtIFBhcml0eSAgICAgICAgICAgICBUaGUgdHlwZSBv ZiBwYXJpdHkgdG8gdXNlIG9uIHRoaXMgc2VyaWFsIGRldmljZS4gQSBQYXJpdHkgdmFsdWUgb2YN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0UGFyaXR5IHdpbGwg dXNlIHRoZSBkZXZpY2UncyBkZWZhdWx0IHBhcml0eSB2YWx1ZS4NCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBzZXQuDQo+ ID4gPiA+ICsgIEBwYXJhbSBEYXRhQml0cyAgICAgICAgICAgVGhlIG51bWJlciBvZiBkYXRhIGJp dHMgdG8gdXNlIG9uIHRoZSBzZXJpYWwgZGV2aWNlLiBBIERhdGFCaXRzDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdmF1bGUgb2YgMCB3aWxsIHVzZSB0aGUgZGV2aWNlJ3Mg ZGVmYXVsdCBkYXRhIGJpdCBzZXR0aW5nLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9uIG91dHB1dCwgdGhlIHZhbHVlIGFjdHVhbGx5IHNldC4NCj4gPiA+ID4gKyAgQHBh cmFtIFN0b3BCaXRzICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHN0b3AgYml0cyB0byB1c2Ugb24g dGhpcyBzZXJpYWwgZGV2aWNlLiBBIFN0b3BCaXRzDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgb2YgRGVmYXVsdFN0b3BCaXRzIHdpbGwgdXNlIHRoZSBkZXZpY2Un cyBkZWZhdWx0IG51bWJlciBvZg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0b3AgYml0cy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRw dXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBzZXQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZh bCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgIFRoZSBuZXcgYXR0cmlidXRlcyB3ZXJlIHNldCBv biB0aGUgc2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JU RUQgICAgICAgIFRoZSBzZXJpYWwgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRp b24uDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb3Ig bW9yZSBvZiB0aGUgYXR0cmlidXRlcyBoYXMgYW4gdW5zdXBwb3J0ZWQgdmFsdWUuDQo+ID4gPiA+ ICsgIEByZXR2YWwgUkVUVVJOX0RFVklDRV9FUlJPUiAgICAgICBUaGUgc2VyaWFsIGRldmljZSBp cyBub3QgZnVuY3Rpb25pbmcgY29ycmVjdGx5Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4g PiA+ID4gK1JFVFVSTl9TVEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArU2VyaWFsUG9y dFNldEF0dHJpYnV0ZXMgKA0KPiA+ID4gPiArICBJTiBPVVQgVUlOVDY0ICAgICAgICAgICAgICAq QmF1ZFJhdGUsDQo+ID4gPiA+ICsgIElOIE9VVCBVSU5UMzIgICAgICAgICAgICAgICpSZWNlaXZl Rmlmb0RlcHRoLA0KPiA+ID4gPiArICBJTiBPVVQgVUlOVDMyICAgICAgICAgICAgICAqVGltZW91 dCwNCj4gPiA+ID4gKyAgSU4gT1VUIEVGSV9QQVJJVFlfVFlQRSAgICAgKlBhcml0eSwNCj4gPiA+ ID4gKyAgSU4gT1VUIFVJTlQ4ICAgICAgICAgICAgICAgKkRhdGFCaXRzLA0KPiA+ID4gPiArICBJ TiBPVVQgRUZJX1NUT1BfQklUU19UWVBFICAqU3RvcEJpdHMNCj4gPiA+ID4gKyAgKQ0KPiA+ID4g PiArew0KPiA+ID4gPiArICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQo+ID4gPiA+ICt9DQo+ID4g PiA+IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9NZGVQa2cvTGlicmFyeS9TZWNQZWlSaXNjVlNlcmlh bFBvcnRMaWJTYmkvU2VjUGVpUmlzY1ZTZXJpYWxQbw0KPiA+ID4gPiBydA0KPiA+ID4gPiBMaQ0K PiA+ID4gPiBiUw0KPiA+ID4gPiBiaS5jDQo+ID4gPiA+IGIvTWRlUGtnL0xpYnJhcnkvU2VjUGVp UmlzY1ZTZXJpYWxQb3J0TGliU2JpL1NlY1BlaVJpc2NWU2VyaWFsUG8NCj4gPiA+ID4gcnQNCj4g PiA+ID4gTGkNCj4gPiA+ID4gYlMNCj4gPiA+ID4gYmkuYw0KPiA+ID4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBhZDU5MzFiZTNhZQ0KPiA+ID4g PiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1NlY1BlaVJpc2NW U2VyaWFsUG9ydExpYlNiaS9TZWNQZWlSaXNjVlNlcmkNCj4gPiA+ID4gKysrIGFsDQo+ID4gPiA+ ICsrKyBQbw0KPiA+ID4gPiArKysgcnQNCj4gPiA+ID4gKysrIExpDQo+ID4gPiA+ICsrKyBiU2Jp LmMNCj4gPiA+ID4gQEAgLTAsMCArMSwyMzMgQEANCj4gPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4g PiArICBTZXJpYWwgUG9ydCBMaWJyYXJ5IGJhY2tlZCBieSBTQkkgY29uc29sZS4NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICBNZWFudCBmb3IgU0VDIGFuZCBQRUkgKFhJUCkgZW52aXJvbm1lbnRzLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIER1ZSB0byBsaW1pdGF0aW9ucyBvZiBTQkkgY29uc29sZSBp bnRlcmZhY2UgYW5kIFhJUCANCj4gPiA+ID4gKyBlbnZpcm9ubWVudHMgKG9uIHVzZSBvZiBnbG9i YWxzKSwgdGhpcyBsaWJyYXJ5IGluc3RhbmNlIGRvZXMgDQo+ID4gPiA+ICsgbm90IGltcGxlbWVu dCByZWFkaW5nICBhbmQgcG9sbGluZyB0aGUgc2VyaWFsIHBvcnQuIFNlZSANCj4gPiA+ID4gKyBQ cmVQaUR4ZVNlcmlhbFBvcnRMaWJSaXNjVlNiaSBmb3IgIHRoZSBmdWxsLWZlYXR1cmVkIHZhcmlh bnQgbWVhbnQgZm9yIFByZVBpIGFuZCBEWEUgZW52aXJvbm1lbnRzLg0KPiA+ID4gPiArDQo+ID4g PiA+ICsgIENvcHlyaWdodCAoYykgMjAyMywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg DQo+ID4gPiA+ICsgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ ID4gKw0KPiA+ID4gPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L1NlcmlhbFBvcnRMaWIuaD4gI2luY2x1ZGUgDQo+ID4gPiA+ICs8TGlicmFyeS9CYXNlUmlz Y1ZTYmlMaWIuaD4NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIEluaXRpYWxp emUgdGhlIHNlcmlhbCBkZXZpY2UgaGFyZHdhcmUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgSWYg bm8gaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQsIHRoZW4gcmV0dXJuIFJFVFVSTl9TVUNDRVNT Lg0KPiA+ID4gPiArICBJZiB0aGUgc2VyaWFsIGRldmljZSB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRp YWxpemVkLCB0aGVuIHJldHVybiBSRVRVUk5fU1VDQ0VTUy4NCj4gPiA+ID4gKyAgSWYgdGhlIHNl cmlhbCBkZXZpY2UgY291bGQgbm90IGJlIGluaXRpYWxpemVkLCB0aGVuIHJldHVybiBSRVRVUk5f REVWSUNFX0VSUk9SLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NF U1MgICAgICAgIFRoZSBzZXJpYWwgZGV2aWNlIHdhcyBpbml0aWFsaXplZC4NCj4gPiA+ID4gKyAg QHJldHZhbCBSRVRVUk5fREVWSUNFX0VSUk9SICAgVGhlIHNlcmlhbCBkZXZpY2UgY291bGQgbm90 IGJlIGluaXRpYWxpemVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFVFVS Tl9TVEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArU2VyaWFsUG9ydEluaXRpYWxpemUg KA0KPiA+ID4gPiArICBWT0lEDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAg cmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsv KioNCj4gPiA+ID4gKyAgV3JpdGUgZGF0YSBmcm9tIGJ1ZmZlciB0byBzZXJpYWwgZGV2aWNlLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIFdyaXRlcyBOdW1iZXJPZkJ5dGVzIGRhdGEgYnl0ZXMgZnJv bSBCdWZmZXIgdG8gdGhlIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsgIFRoZSBudW1iZXIgb2Yg Ynl0ZXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgc2VyaWFsIGRldmljZSBpcyByZXR1cm5lZC4N Cj4gPiA+ID4gKyAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4gTnVtYmVyT2ZCeXRl cywgdGhlbiB0aGUgd3JpdGUgb3BlcmF0aW9uIGZhaWxlZC4NCj4gPiA+ID4gKyAgSWYgQnVmZmVy IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsgIElmIE51bWJlck9mQnl0ZXMgaXMg emVybywgdGhlbiByZXR1cm4gMC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW0gIEJ1ZmZl ciAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRvIGJlIHdyaXR0ZW4u DQo+ID4gPiA+ICsgIEBwYXJhbSAgTnVtYmVyT2ZCeXRlcyAgICBUaGUgbnVtYmVyIG9mIGJ5dGVz IHRvIHdyaXR0ZW4gdG8gdGhlIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg QHJldHZhbCAwICAgICAgICAgICAgICAgIE51bWJlck9mQnl0ZXMgaXMgMC4NCj4gPiA+ID4gKyAg QHJldHZhbCA+MCAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0 aGUgc2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElm IHRoaXMgdmFsdWUgaXMgbGVzcyB0aGFuIE51bWJlck9mQnl0ZXMsIHRoZW4gdGhlIHdyaXRlIG9w ZXJhdGlvbiBmYWlsZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArVUlOVE4N Cj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArU2VyaWFsUG9ydFdyaXRlICgNCj4gPiA+ID4gKyAg SU4gVUlOVDggICpCdWZmZXIsDQo+ID4gPiA+ICsgIElOIFVJTlROICBOdW1iZXJPZkJ5dGVzDQo+ ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgU0JJX1JFVCAgUmV0Ow0KPiA+ID4g PiArICBVSU5UTiAgICBJbmRleDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZXQgPSBTYmlDYWxs IChTQklfRVhUX0JBU0UsIFNCSV9FWFRfQkFTRV9QUk9CRV9FWFQsIDEsIA0KPiA+ID4gPiArIFNC SV9FWFRfREJDTik7ICBpZiAoKFRyYW5zbGF0ZUVycm9yIChSZXQuRXJyb3IpID09IEVGSV9TVUND RVNTKSAmJg0KPiA+ID4gPiArICAgICAgKFJldC5WYWx1ZSAhPSAwKSkNCj4gPiA+ID4gKyAgew0K PiA+ID4gPiArICAgIFJldCA9IFNiaUNhbGwgKA0KPiA+ID4gPiArICAgICAgICAgICAgU0JJX0VY VF9EQkNOLA0KPiA+ID4gPiArICAgICAgICAgICAgU0JJX0VYVF9EQkNOX1dSSVRFLA0KPiA+ID4g PiArICAgICAgICAgICAgMywNCj4gPiA+ID4gKyAgICAgICAgICAgIE51bWJlck9mQnl0ZXMsDQo+ ID4gPiA+ICsgICAgICAgICAgICAoKFVJTlROKUJ1ZmZlciksDQo+ID4gPiA+ICsgICAgICAgICAg ICAwDQo+ID4gPiA+ICsgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIGlmIChUcmFuc2xhdGVF cnJvciAoUmV0LkVycm9yKSAhPSBFRklfU1VDQ0VTUykgew0KPiA+ID4gPiArICAgICAgcmV0dXJu IDA7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcmV0dXJuIFJldC5W YWx1ZTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFJldCA9IFNiaUNhbGwg KFNCSV9FWFRfQkFTRSwgU0JJX0VYVF9CQVNFX1BST0JFX0VYVCwgMSwgDQo+ID4gPiA+ICsgU0JJ X0VYVF8wXzFfQ09OU09MRV9QVVRDSEFSKTsgIGlmICgoVHJhbnNsYXRlRXJyb3IgKFJldC5FcnJv cikgPT0gRUZJX1NVQ0NFU1MpICYmDQo+ID4gPiA+ICsgICAgICAoUmV0LlZhbHVlICE9IDApKQ0K PiA+ID4gPiArICB7DQo+ID4gPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVy T2ZCeXRlczsgSW5kZXgrKykgew0KPiA+ID4gPiArICAgICAgU2JpQ2FsbCAoU0JJX0VYVF8wXzFf Q09OU09MRV9QVVRDSEFSLCAwLCAxLCBCdWZmZXJbSW5kZXhdKTsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICByZXR1cm4gSW5kZXg7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICAvKg0KPiA+ID4gPiArICAgKiBOZWl0aGVyIERCQ04gb3IgbGVnYWN5 IGV4dGVuc2lvbiB3ZXJlIHByZXNlbnQuDQo+ID4gPiA+ICsgICAqLw0KPiA+ID4gPiArICByZXR1 cm4gTnVtYmVyT2ZCeXRlczsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ ID4gPiA+ICsgIFJlYWQgZGF0YSBmcm9tIHNlcmlhbCBkZXZpY2UgYW5kIHNhdmUgdGhlIGRhdGFz IGluIGJ1ZmZlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZWFkcyBOdW1iZXJPZkJ5dGVzIGRh dGEgYnl0ZXMgZnJvbSBhIHNlcmlhbCBkZXZpY2UgaW50byB0aGUgDQo+ID4gPiA+ICsgYnVmZmVy IHNwZWNpZmllZCBieSBCdWZmZXIuIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZCBp cyByZXR1cm5lZC4NCj4gPiA+ID4gKyAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4g TnVtYmVyT2ZCeXRlcywgdGhlbiB0aGUgcmVzdCBvcGVyYXRpb24gZmFpbGVkLg0KPiA+ID4gPiAr ICBJZiBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gKyAgSWYgTnVtYmVy T2ZCeXRlcyBpcyB6ZXJvLCB0aGVuIHJldHVybiAwLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBw YXJhbSAgQnVmZmVyICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgdG8g c3RvcmUgdGhlIGRhdGEgcmVhZCBmcm9tIHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArICBA cGFyYW0gIE51bWJlck9mQnl0ZXMgICAgVGhlIG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJl IHJlYWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAwICAgICAgICAgICAgICAgIFJl YWQgZGF0YSBmYWlsZWQ7IE5vIGRhdGEgaXMgdG8gYmUgcmVhZC4NCj4gPiA+ID4gKyAgQHJldHZh bCA+MCAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBz ZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1VJTlRODQo+ ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1NlcmlhbFBvcnRSZWFkICgNCj4gPiA+ID4gKyAgT1VU IFVJTlQ4ICAqQnVmZmVyLA0KPiA+ID4gPiArICBJTiAgVUlOVE4gIE51bWJlck9mQnl0ZXMNCj4g PiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICByZXR1cm4gMDsNCj4gPiA+ID4gK30N Cj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFBvbGxzIGEgc2VyaWFsIGRldmlj ZSB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGRhdGEgd2FpdGluZyB0byBiZSByZWFkLg0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIFBvbGxzIGEgc2VyaWFsIGRldmljZSB0byBzZWUgaWYgdGhlcmUgaXMg YW55IGRhdGEgd2FpdGluZyB0byBiZSByZWFkLg0KPiA+ID4gPiArICBJZiB0aGVyZSBpcyBkYXRh IHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9tIHRoZSBzZXJpYWwgZGV2aWNlLCB0aGVuIFRSVUUgaXMg cmV0dXJuZWQuDQo+ID4gPiA+ICsgIElmIHRoZXJlIGlzIG5vIGRhdGEgd2FpdGluZyB0byBiZSBy ZWFkIGZyb20gdGhlIHNlcmlhbCBkZXZpY2UsIHRoZW4gRkFMU0UgaXMgcmV0dXJuZWQuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgIERhdGEgaXMgd2FpdGlu ZyB0byBiZSByZWFkIGZyb20gdGhlIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsgIEByZXR2YWwg RkFMU0UgICAgICAgICAgICBUaGVyZSBpcyBubyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9t IHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0JP T0xFQU4NCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArU2VyaWFsUG9ydFBvbGwgKA0KPiA+ID4g PiArICBWT0lEDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgcmV0dXJuIEZB TFNFOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgU2V0 cyB0aGUgY29udHJvbCBiaXRzIG9uIGEgc2VyaWFsIGRldmljZS4NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBAcGFyYW0gQ29udHJvbCAgICAgICAgICAgICAgICBTZXRzIHRoZSBiaXRzIG9mIENvbnRy b2wgdGhhdCBhcmUgc2V0dGFibGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBSRVRV Uk5fU1VDQ0VTUyAgICAgICAgVGhlIG5ldyBjb250cm9sIGJpdHMgd2VyZSBzZXQgb24gdGhlIHNl cmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgIFRo ZSBzZXJpYWwgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24uDQo+ID4gPiA+ ICsgIEByZXR2YWwgUkVUVVJOX0RFVklDRV9FUlJPUiAgIFRoZSBzZXJpYWwgZGV2aWNlIGlzIG5v dCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4g PiArUkVUVVJOX1NUQVRVUw0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtTZXJpYWxQb3J0U2V0 Q29udHJvbCAoDQo+ID4gPiA+ICsgIElOIFVJTlQzMiAgQ29udHJvbA0KPiA+ID4gPiArICApDQo+ ID4gPiA+ICt7DQo+ID4gPiA+ICsgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCj4gPiA+ID4gK30N Cj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFJldHJpZXZlIHRoZSBzdGF0dXMg b2YgdGhlIGNvbnRyb2wgYml0cyBvbiBhIHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgQHBhcmFtIENvbnRyb2wgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHJldHVybiB0 aGUgY3VycmVudCBjb250cm9sIHNpZ25hbHMgZnJvbSB0aGUgc2VyaWFsIGRldmljZS4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICBUaGUgY29udHJv bCBiaXRzIHdlcmUgcmVhZCBmcm9tIHRoZSBzZXJpYWwgZGV2aWNlLg0KPiA+ID4gPiArICBAcmV0 dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICBUaGUgc2VyaWFsIGRldmljZSBkb2VzIG5vdCBzdXBw b3J0IHRoaXMgb3BlcmF0aW9uLg0KPiA+ID4gPiArICBAcmV0dmFsIFJFVFVSTl9ERVZJQ0VfRVJS T1IgICBUaGUgc2VyaWFsIGRldmljZSBpcyBub3QgZnVuY3Rpb25pbmcgY29ycmVjdGx5Lg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFVFVSTl9TVEFUVVMNCj4gPiA+ID4gK0VG SUFQSQ0KPiA+ID4gPiArU2VyaWFsUG9ydEdldENvbnRyb2wgKA0KPiA+ID4gPiArICBPVVQgVUlO VDMyICAqQ29udHJvbA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICpDb250 cm9sID0gMDsNCj4gPiA+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgU2V0cyB0aGUgYmF1ZCByYXRlLCBy ZWNlaXZlIEZJRk8gZGVwdGgsIHRyYW5zbWl0L3JlY2VpY2UgdGltZSANCj4gPiA+ID4gK291dCwg cGFyaXR5LA0KPiA+ID4gPiArICBkYXRhIGJpdHMsIGFuZCBzdG9wIGJpdHMgb24gYSBzZXJpYWwg ZGV2aWNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbSBCYXVkUmF0ZSAgICAgICAgICAg VGhlIHJlcXVlc3RlZCBiYXVkIHJhdGUuIEEgQmF1ZFJhdGUgdmFsdWUgb2YgMCB3aWxsIHVzZSB0 aGUNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UncyBkZWZhdWx0 IGludGVyZmFjZSBzcGVlZC4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBP biBvdXRwdXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBzZXQuDQo+ID4gPiA+ICsgIEBwYXJhbSBSZXZl aXZlRmlmb0RlcHRoICAgVGhlIHJlcXVlc3RlZCBkZXB0aCBvZiB0aGUgRklGTyBvbiB0aGUgcmVj ZWl2ZSBzaWRlIG9mIHRoZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl cmlhbCBpbnRlcmZhY2UuIEEgUmVjZWl2ZUZpZm9EZXB0aCB2YWx1ZSBvZiAwIHdpbGwgdXNlDQo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRldmljZSdzIGRlZmF1bHQg RklGTyBkZXB0aC4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRw dXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBzZXQuDQo+ID4gPiA+ICsgIEBwYXJhbSBUaW1lb3V0ICAg ICAgICAgICAgVGhlIHJlcXVlc3RlZCB0aW1lIG91dCBmb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGlu IG1pY3Jvc2Vjb25kcy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlz IHRpbWVvdXQgYXBwbGllcyB0byBib3RoIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBzaWRlIG9m IHRoZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4gQSBU aW1lb3V0IHZhbHVlIG9mIDAgd2lsbCB1c2UgdGhlIGRldmljZSdzIGRlZmF1bHQgdGltZQ0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCB2YWx1ZS4NCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBz ZXQuDQo+ID4gPiA+ICsgIEBwYXJhbSBQYXJpdHkgICAgICAgICAgICAgVGhlIHR5cGUgb2YgcGFy aXR5IHRvIHVzZSBvbiB0aGlzIHNlcmlhbCBkZXZpY2UuIEEgUGFyaXR5IHZhbHVlIG9mDQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFBhcml0eSB3aWxsIHVzZSB0 aGUgZGV2aWNlJ3MgZGVmYXVsdCBwYXJpdHkgdmFsdWUuDQo+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgdmFsdWUgYWN0dWFsbHkgc2V0Lg0KPiA+ID4g PiArICBAcGFyYW0gRGF0YUJpdHMgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIHRv IHVzZSBvbiB0aGUgc2VyaWFsIGRldmljZS4gQSBEYXRhQml0cw0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhdWxlIG9mIDAgd2lsbCB1c2UgdGhlIGRldmljZSdzIGRlZmF1 bHQgZGF0YSBiaXQgc2V0dGluZy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPbiBvdXRwdXQsIHRoZSB2YWx1ZSBhY3R1YWxseSBzZXQuDQo+ID4gPiA+ICsgIEBwYXJhbSBT dG9wQml0cyAgICAgICAgICAgVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgdG8gdXNlIG9uIHRoaXMg c2VyaWFsIGRldmljZS4gQSBTdG9wQml0cw0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlIG9mIERlZmF1bHRTdG9wQml0cyB3aWxsIHVzZSB0aGUgZGV2aWNlJ3MgZGVm YXVsdCBudW1iZXIgb2YNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9w IGJpdHMuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0 aGUgdmFsdWUgYWN0dWFsbHkgc2V0Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVU VVJOX1NVQ0NFU1MgICAgICAgICAgICBUaGUgbmV3IGF0dHJpYnV0ZXMgd2VyZSBzZXQgb24gdGhl IHNlcmlhbCBkZXZpY2UuDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAg ICAgICBUaGUgc2VyaWFsIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLg0K PiA+ID4gPiArICBAcmV0dmFsIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUg b2YgdGhlIGF0dHJpYnV0ZXMgaGFzIGFuIHVuc3VwcG9ydGVkIHZhbHVlLg0KPiA+ID4gPiArICBA cmV0dmFsIFJFVFVSTl9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHNlcmlhbCBkZXZpY2UgaXMgbm90 IGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ ICtSRVRVUk5fU1RBVFVTDQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1NlcmlhbFBvcnRTZXRB dHRyaWJ1dGVzICgNCj4gPiA+ID4gKyAgSU4gT1VUIFVJTlQ2NCAgICAgICAgICAgICAgKkJhdWRS YXRlLA0KPiA+ID4gPiArICBJTiBPVVQgVUlOVDMyICAgICAgICAgICAgICAqUmVjZWl2ZUZpZm9E ZXB0aCwNCj4gPiA+ID4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAgKlRpbWVvdXQsDQo+ ID4gPiA+ICsgIElOIE9VVCBFRklfUEFSSVRZX1RZUEUgICAgICpQYXJpdHksDQo+ID4gPiA+ICsg IElOIE9VVCBVSU5UOCAgICAgICAgICAgICAgICpEYXRhQml0cywNCj4gPiA+ID4gKyAgSU4gT1VU IEVGSV9TVE9QX0JJVFNfVFlQRSAgKlN0b3BCaXRzDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sN Cj4gPiA+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiBk aWZmIC0tZ2l0DQo+ID4gPiA+IGEvTWRlUGtnL0xpYnJhcnkvUHJlUGlEeGVSaXNjVlNlcmlhbFBv cnRMaWJTYmkvUHJlUGlEeGVSaXNjVlNlcmkNCj4gPiA+ID4gYWwNCj4gPiA+ID4gUG8NCj4gPiA+ ID4gcnQNCj4gPiA+ID4gTGliU2JpLnVuaQ0KPiA+ID4gPiBiL01kZVBrZy9MaWJyYXJ5L1ByZVBp RHhlUmlzY1ZTZXJpYWxQb3J0TGliU2JpL1ByZVBpRHhlUmlzY1ZTZXJpDQo+ID4gPiA+IGFsDQo+ ID4gPiA+IFBvDQo+ID4gPiA+IHJ0DQo+ID4gPiA+IExpYlNiaS51bmkNCj4gPiA+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjIyY2FhNWEwOTAN Cj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFyeS9QcmVQ aUR4ZVJpc2NWU2VyaWFsUG9ydExpYlNiaS9QcmVQaUR4ZVJpc2NWDQo+ID4gPiA+ICsrKyBTZQ0K PiA+ID4gPiArKysgcmkNCj4gPiA+ID4gKysrIGFsDQo+ID4gPiA+ICsrKyBQbw0KPiA+ID4gPiAr KysgcnRMaWJTYmkudW5pDQo+ID4gPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiA+ID4gKy8vIC8q KiBAZmlsZQ0KPiA+ID4gPiArLy8gU2VyaWFsIFBvcnQgTGlicmFyeSBiYWNrZWQgYnkgU0JJIGNv bnNvbGUuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gU2VyaWFsIFBvcnQgTGlicmFyeSBiYWNr ZWQgYnkgU0JJIGNvbnNvbGUuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gQ29weXJpZ2h0IChj KSAyMDIzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyANCj4gPiA+ID4gK3Jlc2VydmVk LjxCUj4gLy8gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IA0KPiA+ID4gPiArQlNELTItQ2xh dXNlLVBhdGVudCAvLyAvLyAqKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjc3Ry aW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJTZXJp YWwgUG9ydCBMaWJyYXJ5IGJhY2tlZCBieSBTQkkgY29uc29sZSINCj4gPiA+ID4gKw0KPiA+ID4g PiArI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiU2VyaWFsIFBvcnQgTGlicmFyeSBiYWNrZWQgYnkgU0JJIGNvbnNvbGUuIg0KPiA+ID4gPiAr DQo+ID4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9NZGVQa2cvTGlicmFyeS9TZWNQZWlSaXNj VlNlcmlhbFBvcnRMaWJTYmkvU2VjUGVpUmlzY1ZTZXJpYWxQbw0KPiA+ID4gPiBydA0KPiA+ID4g PiBMaQ0KPiA+ID4gPiBiUw0KPiA+ID4gPiBiaS51bmkNCj4gPiA+ID4gYi9NZGVQa2cvTGlicmFy eS9TZWNQZWlSaXNjVlNlcmlhbFBvcnRMaWJTYmkvU2VjUGVpUmlzY1ZTZXJpYWxQbw0KPiA+ID4g PiBydA0KPiA+ID4gPiBMaQ0KPiA+ID4gPiBiUw0KPiA+ID4gPiBiaS51bmkNCj4gPiA+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjIyY2FhNWEw OTANCj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFyeS9T ZWNQZWlSaXNjVlNlcmlhbFBvcnRMaWJTYmkvU2VjUGVpUmlzY1ZTZXJpDQo+ID4gPiA+ICsrKyBh bA0KPiA+ID4gPiArKysgUG8NCj4gPiA+ID4gKysrIHJ0DQo+ID4gPiA+ICsrKyBMaWJTYmkudW5p DQo+ID4gPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiA+ID4gKy8vIC8qKiBAZmlsZQ0KPiA+ID4g PiArLy8gU2VyaWFsIFBvcnQgTGlicmFyeSBiYWNrZWQgYnkgU0JJIGNvbnNvbGUuDQo+ID4gPiA+ ICsvLw0KPiA+ID4gPiArLy8gU2VyaWFsIFBvcnQgTGlicmFyeSBiYWNrZWQgYnkgU0JJIGNvbnNv bGUuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gQ29weXJpZ2h0IChjKSAyMDIzLCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyANCj4gPiA+ID4gK3Jlc2VydmVkLjxCUj4gLy8gLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IA0KPiA+ID4gPiArQlNELTItQ2xhdXNlLVBhdGVudCAvLyAv LyAqKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjc3RyaW5nIFNUUl9NT0RVTEVf QUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJTZXJpYWwgUG9ydCBMaWJyYXJ5 IGJhY2tlZCBieSBTQkkgY29uc29sZSINCj4gPiA+ID4gKw0KPiA+ID4gPiArI3N0cmluZyBTVFJf TU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiU2VyaWFsIFBvcnQg TGlicmFyeSBiYWNrZWQgYnkgU0JJIGNvbnNvbGUuIg0KPiA+ID4gPiArDQo+ID4gPiA+IC0tDQo+ ID4gPiA+IDIuMjUuMQ0KDQo=