From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by mail.toke.dk (Postfix) with ESMTPS id 5C7149B0FF2 for ; Mon, 31 Oct 2022 23:39:14 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (2048-bit key; unprotected) header.d=meta.com header.i=@meta.com header.a=rsa-sha256 header.s=s2048-2021-q4 header.b=goTOdlGF Received: from pps.filterd (m0109334.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29VMPDLa021965; Mon, 31 Oct 2022 15:38:45 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=meta.com; h=message-id : date : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=s2048-2021-q4; bh=4pqExb13oL+QjTnhqlFlH8G4yqJg1l2aBeAG9CSC7a0=; b=goTOdlGFfRauSfDWGsRYhgBeekTnV8Ff2Ivj2j1yruPEHZY4ULpP37EKZkw+kJOud1P/ f5l6rte554R/EBR/YAYamXzZ2htghhZazj7RVc5UW3I9YcjOqZ4k/qR4vslZtFkGlrKE Y4+sxzvSIARHFmQX+lJMqKiEzRt8s9qMvNXwvGGx/UfYf7h46cosTJBrggdJYiElBeZM q8ua0AdCWEbqpp5REMhAjnUFPo33LcaL72b2C6pnJs2smMv3DT7Bde8nER9/7iN4Ei9J I54wPFMjzvYxj5NmfUNUWN82taokXDqeOLD2MGBW5wb6yrzuo8R6ybMHxXSLwSGb3tfX iQ== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2041.outbound.protection.outlook.com [104.47.66.41]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3kjk60tcfh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 31 Oct 2022 15:38:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KACjQizeB30UVYsbDDZXMS3zpeDyZJxWkcVihd8fIke9TPnZXmyy5ii3fYgzfvbytbkzqGTdEGWm/5cBuavUIyI/oyZG2iFXWLMCb5ewfXy3pOJqi6/oWvaNKTqWyUPmuc8//8rGuoiTAAKBlpjBnMAXfWouy3eH1sgWuC6df8qAgPPaXgcDImhlDrPfXPXVdg2ND2oD0Noa0LDAmojPiUZ8BMAKcbgfuQoPLdk0PiQSkhETECNrTIe/uMdyebXBZqwR/tykuxav9hGvx2rJiYG2wNB9eX/SnsBe8kO/u8kojd1D+xI91K44ZqZ8p4xZdgadZ2Y0BDV9BNAzIhY+Dw== 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=4pqExb13oL+QjTnhqlFlH8G4yqJg1l2aBeAG9CSC7a0=; b=ZN60tsV9ajEt7v0lqPaQw7wSq+MiYUfcT9V6oqpDOYetK+7cGz6ce62r96Xl/zmBg82R25KDZ3/ydhbpVYniVR0rfskAIIlmN9IsPkXIAznPqpjzr7det1V+i0BqEIplKWqPUVj9Cmi86dtYeFpMv2IysVw5J04YaxGfewIGRi4CLH9JNH2Uw6lyWlAGc2OKn4Lfx8byxwbJ5CRvRWJvmOcD28JGasAeRXB7smv//BzTploZSmuqZhUG3YnjijTFE6humSPu3thGNeXpDkQpRavNMhIMD/+RGi9hduyJ+8b02eY+nkO4d44ApXjIOTgCGkYI0t8oq9PoyFD0xWOXJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=meta.com; dmarc=pass action=none header.from=meta.com; dkim=pass header.d=meta.com; arc=none Received: from SN6PR1501MB2064.namprd15.prod.outlook.com (2603:10b6:805:d::27) by MW4PR15MB4779.namprd15.prod.outlook.com (2603:10b6:303:10d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.15; Mon, 31 Oct 2022 22:38:43 +0000 Received: from SN6PR1501MB2064.namprd15.prod.outlook.com ([fe80::e25d:b529:7556:1e26]) by SN6PR1501MB2064.namprd15.prod.outlook.com ([fe80::e25d:b529:7556:1e26%5]) with mapi id 15.20.5769.019; Mon, 31 Oct 2022 22:38:43 +0000 Message-ID: <8892271c-fd8d-e8f3-5de9-b94e5f1ce5fe@meta.com> Date: Mon, 31 Oct 2022 15:38:40 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Content-Language: en-US To: Stanislav Fomichev References: <20221027200019.4106375-1-sdf@google.com> <635bfc1a7c351_256e2082f@john.notmuch> <20221028110457.0ba53d8b@kernel.org> <635c62c12652d_b1ba208d0@john.notmuch> <20221028181431.05173968@kernel.org> <5aeda7f6bb26b20cb74ef21ae9c28ac91d57fae6.camel@siemens.com> <875yg057x1.fsf@toke.dk> <663fb4f4-04b7-5c1f-899c-bdac3010f073@meta.com> From: Yonghong Song In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-ClientProxiedBy: BY3PR05CA0026.namprd05.prod.outlook.com (2603:10b6:a03:254::31) To SN6PR1501MB2064.namprd15.prod.outlook.com (2603:10b6:805:d::27) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR1501MB2064:EE_|MW4PR15MB4779:EE_ X-MS-Office365-Filtering-Correlation-Id: cfe9e924-cafc-481d-1c14-08dabb90aa13 X-FB-Source: Internal X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6kZM3qeRuwifdCSbO1iE49MsghfwWN06pJncpLwtwG1pHVJ/qI4J9/eRM75kIU0d2pgCwl6EzJB01uBbO6RwG6FkPuaEyw2TGpcwq78SxinlLIQN6rvq1n5l6QVOq5b4P7WsV7jmvGPe/hq3GUqj73ZHi8gUMBP1z7nwovM8oK6g9adq7Ti11orrRx/TjLpssReArGt0zVP8O0udtQixT4SO2GPnxqS1F8m3ToKMIIvXb6BdpPF/teVAt/c3dv7zmih9N/7AYMRVleSbhBpPkQCi18AOMvfYdOaXfU8U2FUF0DDyPzOf4nyMrPPE2tliZ5j5rtr55DtfTbGzFJ3ed0mGjU+pkVT3cqV60BYPc2DM6BqoBZIOOpeEDb+vmFYebvqPRhro9Gr9yrbrQRH2GCP0eCC+D5Bk+F+RhxQwKI7/p6Tur7wkggwxB0Mf34vjmWtDqZhwvObVn6nr351ro9Pa/g1eDMNaX8L7SWgVaJ5TPYiqGgAd1GHt7dY/bCxnnImWmXpWSWJjrlo+7gqZAzsXVFIAuG5J6Zy4xxfrx1LrVEV+zytAc+QWD48zDy864YSSaZjQXPfTpn3mxSKdc+1BktpVdOJKGkB84BaTaGX0koKQ3xat60cfqACAQqBGEx1lAqnSakivOfZSsqp0FBMmBFcqjwTsdAnwzRMhxjR9ibyHeIffc8/YFMPPytWdd78w1dFKgamvI+MjWAP+qBhRdkvTCfmbjdxw1adCfEjyewLF7Jk/cBI3pLO6haNNH5soV2BcrO/5feyWBjjADH0o/5hNjII7I0Sh0noAl04= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR1501MB2064.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(451199015)(478600001)(8676002)(4326008)(66946007)(66899015)(66556008)(31686004)(66476007)(5660300002)(6506007)(186003)(54906003)(36756003)(83380400001)(6916009)(6486002)(316002)(31696002)(41300700001)(86362001)(53546011)(8936002)(2906002)(6512007)(2616005)(7416002)(66574015)(4001150100001)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VXdpSTMrazlDNGNqMThLV1BBSzB0YnRBYStMRkFOR0NGV0RqUTd3UlF1MmFv?= =?utf-8?B?SnpJbTdHczZSQXJlK0F2VTYzYTBCVTRyckhWK1VObmh2Q0w1WkRQcUxNdjYx?= =?utf-8?B?Z2duZ1BmbGFveWxJSlNrVVZQSU9PS3JXMytmV2pRZlVqSjFIY1dBeUNqWE0v?= =?utf-8?B?T3dYc3FsSCtiamRRMXRpQWJONnJ5ZTVmZW9hVHhZQ2N1aXlna0F6RUJ3V3VZ?= =?utf-8?B?K3RnUnUyb1c3UlBnM0tNVEFGT1A4M2pwTE9JOHovTnJZMnlod1kzdnE2c2Fx?= =?utf-8?B?UlJCeEJMZXhiWEh1VUxCdWRIVGdkKzZBQjJGNWNRT3dKS1NkVDRPTmxUcThQ?= =?utf-8?B?cktFQW1qcGpmU0hVMFdnWVMzMmVxU01DOURVMmdVZEdXcHUzdC90bHpPN2R0?= =?utf-8?B?eVMrNG1remtTcVZXMi9kSzB3cFRnSi9nY0VyM29jcnJ1QXRQcXpZSXphaWF1?= =?utf-8?B?OEV1VzBpblcyaUhrTmNkVHRnb1lJNE9WcU81YUY4Z3RkditaWHMyQ0FNSXF0?= =?utf-8?B?WVYxNXpoa1BTRk1kUUhQd0pjRFhNbUxCdTN6SWYyUWdBd091Ynk4K2cxbmkw?= =?utf-8?B?Zit3UW4xZ0VwWlNDOGZRZ0Qvb2pHc3NVejNtR0QzT2YwZHJpVzVUMTh1M1VC?= =?utf-8?B?R3hFcm1ua091M21WY0dTbC9ucGxKZUFCdk9OZ05jU1NMRnFoVkY4MHI0QjhY?= =?utf-8?B?d3Q3dFF4OGx4VTNNRGVXQUlLTlZGMjNYSVVIS1o4V0VhbEpBYmdwODdEbmlh?= =?utf-8?B?YlMwbGpyZ0x3cDFEV2VtTWtJcmQ1MnVWbDV2NUhJdkIrdzIxYkczdWgvTnM4?= =?utf-8?B?dFlMZ3NjaURqTmFmbU9icnh2bCtXL2I0ZXR5eDhiOUpsVS9sM0lXUXFZQWw1?= =?utf-8?B?NlR2MHVrZDU1cDVic1ZMNGpiZ2h5TG93VkUwaks3dml1dXl4ZFk3c2RPY3Fa?= =?utf-8?B?d1R2MFk2NmQ4UHY5TGY4TDlhQXgzVmNvR2tTRndEb1EyV2ZJOVdoOWQ0TFJI?= =?utf-8?B?eGt1ZmtQNlRtRisyVVY1WFIydmYySlBnZFphV1BkSm1PWVBJY0ptWGZXQjZT?= =?utf-8?B?ZGdJTVhaMmp1M3N6Z09vbm5BUWdzcFNJT3FWYkdXWDg5VVcrRjdUTmI4WXFy?= =?utf-8?B?ZTV5dTdYOGQvU3o0QlpxUXhnaS9XVEdBVlprRXJsd0ZabC9qRUNiQ1FvcGQ4?= =?utf-8?B?a00wTWdDc29xVXU1TzFBQW4weGJBMFRteTVuTGFqZ1JtM3hOTVJrRlJRZmZw?= =?utf-8?B?NDNueEdwS2ZLZEdVbXRyRnV3WEpaa25RYnoxMTNsTFQrSFdLR0diS1JURjBN?= =?utf-8?B?dkJGMjZMSUpFc1hXNi9wNGVHWUlkd3VIbUxUeVFKYnRtd0VMQ3VLVkwzRyt1?= =?utf-8?B?d0pxZUZ4QklhenFpVGFjMnp4L1gwQXRpRkJnVmxENWM1YjliNDUwUTYzeWI5?= =?utf-8?B?U3JTY1RpaW8raE56QkVZVVk0TjdLSGhpdyt6Q2JncFhxcEN2WVY4UFhObXZY?= =?utf-8?B?aE0vQXlLWk5sZWF0aFg0MlZ0SlpzQnBOZEVMbmpzd2lGRkFkYjBVMlc0ZmEy?= =?utf-8?B?TXYwVkkrU29peFJPM2NMUjFSU0dKOW9ZUEFMMUhZUEFzcDVTNnZnaUhMYzF0?= =?utf-8?B?VllPZ0FGNkdTejV6SmdKRktFbEtCWE9vVWpmb2F0bndUd3pxR09aazRHTzAv?= =?utf-8?B?ZEZlRkttMFpScG5SS1M3Umw2UklQTW56N3FzdmlxZFExc2U5WS9EMVpPMit2?= =?utf-8?B?M2NqTUxSMlF3WENzc0Q3M3JRY09kUExPQWt5NDlacVhBVFM2NFY3dndiYzdr?= =?utf-8?B?LzIxWHA1bGNyTzRDNVlRS1o3dW0wLzUrdmtkWGVUb3RuUzJHQjZTQ2dDNE00?= =?utf-8?B?Q2kyZnI1MytyWDlPd0FPZ1N4aTF2NExJNzc5MERyY2RQQnNESVVmOExhR0dI?= =?utf-8?B?RWNGc05UMjZiNWdxM2o1SGptelFiUWxyNWtCSGlMVVJPYzVvdW05VERtbHRM?= =?utf-8?B?NU45dENkemxxZmhJR2pjTnhqdUhhN0hhZTBMMURvdDJYTGk3UU5OMlhWUXlo?= =?utf-8?B?cHRkQm12SStEQ0RodFdVZ2ZlVnZ6alg4VzF4dDhMTmgzN3liWldZcTRFS3Bo?= =?utf-8?B?N0kvaGZjUHRuYWNxTWFxNnNhSFVBS3ZmaFg0aHN2bjFqVUZHNnFFekFZUU54?= =?utf-8?B?Wnc9PQ==?= X-OriginatorOrg: meta.com X-MS-Exchange-CrossTenant-Network-Message-Id: cfe9e924-cafc-481d-1c14-08dabb90aa13 X-MS-Exchange-CrossTenant-AuthSource: SN6PR1501MB2064.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2022 22:38:43.0816 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XKoWhh/Pz17fn4Q0AcvkMafGJ5SB+eT7Zz0naHKhrjxS1g4jdkOUrbQgEA5Ju59M X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR15MB4779 X-Proofpoint-GUID: cTDOqiY6H9jZwqKOzKY8Grz9Ya6OVI39 X-Proofpoint-ORIG-GUID: cTDOqiY6H9jZwqKOzKY8Grz9Ya6OVI39 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-31_21,2022-10-31_01,2022-06-22_01 Message-ID-Hash: R5DGFPFINYTSWFL37MD7TL55BKYLJ4LT X-Message-ID-Hash: R5DGFPFINYTSWFL37MD7TL55BKYLJ4LT X-MailFrom: prvs=230321e6af=yhs@meta.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: =?UTF-8?Q?Toke_H=c3=b8iland-J=c3=b8rgensen?= , "Bezdeka, Florian" , "kuba@kernel.org" , "john.fastabend@gmail.com" , "alexandr.lobakin@intel.com" , "anatoly.burakov@intel.com" , "song@kernel.org" , "Deric, Nemanja" , "andrii@kernel.org" , "Kiszka, Jan" , "magnus.karlsson@gmail.com" , "willemb@google.com" , "ast@kernel.org" , "brouer@redhat.com" , "yhs@fb.com" , "martin.lau@linux.dev" , "kpsingh@kernel.org" , "daniel@iogearbox.net" , "bpf@vger.kernel.org" , "mtahhan@redhat.com" , "xdp-hints@xdp-project.net" , "netdev@vger.kernel.org" , "jolsa@kernel.org" , "haoluo@google.com" X-Mailman-Version: 3.3.5 Precedence: list Subject: [xdp-hints] Re: [RFC bpf-next 0/5] xdp: hints via kfuncs List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDEwLzMxLzIyIDM6MDkgUE0sIFN0YW5pc2xhdiBGb21pY2hldiB3cm90ZToNCj4gT24g TW9uLCBPY3QgMzEsIDIwMjIgYXQgMTI6MzYgUE0gWW9uZ2hvbmcgU29uZyA8eWhzQG1ldGEuY29t PiB3cm90ZToNCj4+DQo+Pg0KPj4NCj4+IE9uIDEwLzMxLzIyIDg6MjggQU0sIFRva2UgSMO4aWxh bmQtSsO4cmdlbnNlbiB3cm90ZToNCj4+PiAiQmV6ZGVrYSwgRmxvcmlhbiIgPGZsb3JpYW4uYmV6 ZGVrYUBzaWVtZW5zLmNvbT4gd3JpdGVzOg0KPj4+DQo+Pj4+IEhpIGFsbCwNCj4+Pj4NCj4+Pj4g SSB3YXMgY2xvc2VseSBmb2xsb3dpbmcgdGhpcyBkaXNjdXNzaW9uIGZvciBzb21lIHRpbWUgbm93 LiBTZWVtcyB3ZQ0KPj4+PiByZWFjaGVkIHRoZSBwb2ludCB3aGVyZSBpdCdzIGdldHRpbmcgaW50 ZXJlc3RpbmcgZm9yIG1lLg0KPj4+Pg0KPj4+PiBPbiBGcmksIDIwMjItMTAtMjggYXQgMTg6MTQg LTA3MDAsIEpha3ViIEtpY2luc2tpIHdyb3RlOg0KPj4+Pj4gT24gRnJpLCAyOCBPY3QgMjAyMiAx NjoxNjoxNyAtMDcwMCBKb2huIEZhc3RhYmVuZCB3cm90ZToNCj4+Pj4+Pj4+IEFuZCBpdCdzIGFj dHVhbGx5IGhhcmRlciB0byBhYnN0cmFjdCBhd2F5IGludGVyIEhXIGdlbmVyYXRpb24NCj4+Pj4+ Pj4+IGRpZmZlcmVuY2VzIGlmIHRoZSB1c2VyIHNwYWNlIGNvZGUgaGFzIHRvIGhhbmRsZSBhbGwg b2YgaXQuDQo+Pj4+Pj4NCj4+Pj4+PiBJIGRvbid0IHNlZSBob3cgaXRzIGFueSBoYXJkZXIgaW4g cHJhY3RpY2UgdGhvdWdoPw0KPj4+Pj4NCj4+Pj4+IFlvdSBuZWVkIHRvIGZpbmQgb3V0IHdoYXQg SFcvRlcvY29uZmlnIHlvdSdyZSBydW5uaW5nLCByaWdodD8NCj4+Pj4+IEFuZCBhbGwgeW91IGhh dmUgaXMgYSBwb2ludGVyIHRvIGEgYmxvYiBvZiB1bmtub3duIHR5cGUuDQo+Pj4+Pg0KPj4+Pj4g VGFrZSB0aW1lc3RhbXBzIGZvciBleGFtcGxlLCBzb21lIE5JQ3Mgc3VwcG9ydCBhZGp1c3Rpbmcg dGhlIFBIQw0KPj4+Pj4gb3IgZG9pbmcgU1cgY29ycmVjdGlvbnMgKHdpdGggZGlmZmVyZW50IHZl cnNpb25zIG9mIGh3L2Z3L3NlcnZlcg0KPj4+Pj4gcGxhdGZvcm1zIGJlaW5nIGNhcGFibGUgb2Yg Ym90aC9vbmUvbmVpdGhlcikuDQo+Pj4+Pg0KPj4+Pj4gU3VyZSB5b3UgY2FuIGV4dHJhY3QgYWxs IHRoaXMgaW5mbyB3aXRoIHRyYWNpbmcgYW5kIGNhcmVmdWwNCj4+Pj4+IGluc3BlY3Rpb24gdmlh IHVBUEkuIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyBfZWFzaWVyXy4NCj4+Pj4+IEFuZCB0aGUg dmVuZG9ycyBjYW4ndCBydW4gdGhlIHJlc3VsdHMgdGhydSB0aGVpciB2YWxpZGF0aW9uDQo+Pj4+ PiAoZm9yIHdoYXRldmVyIHRoYXQncyB3b3J0aCkuDQo+Pj4+Pg0KPj4+Pj4+PiBJJ3ZlIGhhZCB0 aGUgc2FtZSBjb25jZXJuOg0KPj4+Pj4+Pg0KPj4+Pj4+PiBVbnRpbCB3ZSBoYXZlIHNvbWUgdXNl cnNwYWNlIGxpYnJhcnkgdGhhdCBhYnN0cmFjdHMgYWxsIHRoZXNlIGRldGFpbHMsDQo+Pj4+Pj4+ IGl0J3Mgbm90IHJlYWxseSBjb252ZW5pZW50IHRvIHVzZS4gSUlVQywgd2l0aCBhIGtwdHIsIEkn ZCBnZXQgYSBibG9iDQo+Pj4+Pj4+IG9mIGRhdGEgYW5kIEkgbmVlZCB0byBnbyB0aHJvdWdoIHRo ZSBjb2RlIGFuZCBzZWUgd2hhdCBwYXJ0aWN1bGFyIHR5cGUNCj4+Pj4+Pj4gaXQgcmVwcmVzZW50 cyBmb3IgbXkgcGFydGljdWxhciBkZXZpY2UgYW5kIGhvdyB0aGUgZGF0YSBJIG5lZWQgaXMNCj4+ Pj4+Pj4gcmVwcmVzZW50ZWQgdGhlcmUuIFRoZXJlIGFyZSBhbHNvIHRoZXNlICJpZiB0aGlzIGlz IGRldmljZSB2MSAtPiB1c2UNCj4+Pj4+Pj4gdjEgZGVzY3JpcHRvciBmb3JtYXQ7IGlmIGl0J3Mg YSB2Mi0+dXNlIHRoaXMgYW5vdGhlciBzdHJ1Y3Q7IGV0YyINCj4+Pj4+Pj4gY29tcGxleGl0aWVz IHRoYXQgd2UnbGwgYmUgcHVzaGluZyBvbnRvIHRoZSB1c2Vycy4gV2l0aCBrZnVuY3MsIHdlIHB1 dA0KPj4+Pj4+PiB0aGlzIGJ1cmRlbiBvbiB0aGUgZHJpdmVyIGRldmVsb3BlcnMsIGJ1dCBJIGFn cmVlIHRoYXQgdGhlIGRyYXdiYWNrDQo+Pj4+Pj4+IGhlcmUgaXMgdGhhdCB3ZSBhY3R1YWxseSBo YXZlIHRvIHdhaXQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgdG8gY2F0Y2gNCj4+Pj4+Pj4gdXAu DQo+Pj4+Pj4NCj4+Pj4+PiBJIGFncmVlIHdpdGggZXZlcnl0aGluZyB0aGVyZSwgeW91IHdpbGwg Z2V0IGEgYmxvYiBvZiBkYXRhIGFuZCB0aGVuDQo+Pj4+Pj4gd2lsbCBuZWVkIHRvIGtub3cgd2hh dCBmaWVsZCB5b3Ugd2FudCB0byByZWFkIHVzaW5nIEJURi4gQnV0LCB3ZQ0KPj4+Pj4+IGFscmVh ZHkgZG8gdGhpcyBmb3IgQlBGIHByb2dyYW1zIGFsbCBvdmVyIHRoZSBwbGFjZSBzbyBpdHMgbm90 IGEgYmlnDQo+Pj4+Pj4gbGlmdCBmb3IgdXMuIEFsbCBvdGhlciBCUEYgdHJhY2luZy9vYnNlcnZh YmlsaXR5IHJlcXVpcmVzIHRoZSBzYW1lDQo+Pj4+Pj4gbG9naWMuIEkgdGhpbmsgdXNlcnMgb2Yg QlBGIGluIGdlbmVyYWwgcGVyaGFwcyBYRFAvdGMgYXJlIHRoZSBvbmx5DQo+Pj4+Pj4gcGxhY2Ug bGVmdCB0byB3cml0ZSBCUEYgcHJvZ3JhbXMgd2l0aG91dCB0aGlua2luZyBhYm91dCBCVEYgYW5k DQo+Pj4+Pj4ga2VybmVsIGRhdGEgc3RydWN0dXJlcy4NCj4+Pj4+Pg0KPj4+Pj4+IEJ1dCwgd2l0 aCBwcm9wb3NlZCBrcHRyIHRoZSBjb21wbGV4aXR5IGxpdmVzIGluIHVzZXJzcGFjZSBhbmQgY2Fu IGJlDQo+Pj4+Pj4gZml4ZWQsIGFkZGVkLCB1cGRhdGVkIHdpdGhvdXQgaGF2aW5nIHRvIGJvdGhl ciB3aXRoIGtlcm5lbCB1cGRhdGVzLCBldGMuDQo+Pj4+Pj4gICBGcm9tIG15IHBvaW50IG9mIHZp ZXcgb2Ygc3VwcG9ydGluZyBDaWxpdW0gaXRzIGEgd2luIGFuZCBtdWNoIHByZWZlcnJlZA0KPj4+ Pj4+IHRvIGhhdmluZyB0byBkZWFsIHdpdGggZHJpdmVyIG93bmVycyBvbiBhbGwgY2xvdWQgdmVu ZG9ycywgZGlzdHJpYnV0aW9ucywNCj4+Pj4+PiBhbmQgc28gb24uDQo+Pj4+Pj4NCj4+Pj4+PiBJ ZiB2ZW5kb3IgdXBkYXRlcyBmaXJtd2FyZSB3aXRoIG5ldyBmaWVsZHMgSSBnZXQgdGhvc2UgaW1t ZWRpYXRlbHkuDQo+Pj4+Pg0KPj4+Pj4gQ29udmVyc2VseSBpdCdzIGEgdmFsaWQgY29uY2VybiB0 aGF0IHRob3NlIHdobyAqZG8qIGFjdHVhbGx5IHVwZGF0ZQ0KPj4+Pj4gdGhlaXIga2VybmVsIHJl Z3VsYXJseSB3aWxsIGhhdmUgbW9yZSB0aGluZ3MgdG8gd29ycnkgYWJvdXQuDQo+Pj4+Pg0KPj4+ Pj4+PiBKYWt1YiBtZW50aW9ucyBGVyBhbmQgSSBoYXZlbid0IGV2ZW4gdGhvdWdodCBhYm91dCB0 aGF0OyBzbyB5ZWFoLCBicGYNCj4+Pj4+Pj4gcHJvZ3JhbXMgbWlnaHQgaGF2ZSB0byB0YWtlIGEg bG90IG9mIG90aGVyIHN0YXRlIGludG8gY29uc2lkZXJhdGlvbg0KPj4+Pj4+PiB3aGVuIHBhcnNp bmcgdGhlIGRlc2NyaXB0b3JzOyBhbGwgdGhvc2UgZGV0YWlscyBkbyBzZWVtIGxpa2UgdGhleQ0K Pj4+Pj4+PiBiZWxvbmcgdG8gdGhlIGRyaXZlciBjb2RlLg0KPj4+Pj4+DQo+Pj4+Pj4gSSB3b3Vs ZCBwcmVmZXIgdG8gYXZvaWQgYmVpbmcgc3R1Y2sgb24gcmVxdWlyaW5nIGRyaXZlciB3cml0ZXJz IHRvDQo+Pj4+Pj4gYmUgaW52b2x2ZWQuIFdpdGgganVzdCBhIGtwdHIgSSBjYW4gc3VwcG9ydCB0 aGUgZGV2aWNlIGFuZCBhbnkNCj4+Pj4+PiBmaXJ3bWFyZSB2ZXJzaW9ucyB3aXRob3V0IHJlcXVp cmluZyBoZWxwLg0KPj4+Pj4NCj4+Pj4+IDEpIHdoZXJlIGFyZSB5b3UgZ2V0dGluZyBhbGwgdGhv c2UgSFcgLyBGVyBzcGVjcyA6Uw0KPj4+Pj4gMikgbWF5YmUgKnlvdSogY2FuIGJ1dCB5b3UncmUg bm90IGV4YWN0bHkgbm90IGFuIGV4LWRyaXZlciBkZXZlbG9wZXIgOlMNCj4+Pj4+DQo+Pj4+Pj4+ IEZlZWwgZnJlZSB0byBzZW5kIGl0IGVhcmx5IHdpdGgganVzdCBhIGhhbmRmdWwgb2YgZHJpdmVy cyBpbXBsZW1lbnRlZDsNCj4+Pj4+Pj4gSSdtIG1vcmUgaW50ZXJlc3RlZCBhYm91dCBicGYvYWZf eGRwL3VzZXIgYXBpIHN0b3J5OyBpZiB3ZSBoYXZlIHNvbWUNCj4+Pj4+Pj4gbmljZSBzYW1wbGUv dGVzdCBjYXNlIHRoYXQgc2hvd3MgaG93IHRoZSBtZXRhZGF0YSBjYW4gYmUgdXNlZCwgdGhhdA0K Pj4+Pj4+PiBtaWdodCBwdXNoIHVzIGNsb3NlciB0byB0aGUgYWdyZWVtZW50IG9uIHRoZSBiZXN0 IHdheSB0byBwcm9jZWVkLg0KPj4+Pj4+DQo+Pj4+Pj4gSSdsbCB0cnkgdG8gZG8gYSBpbnRlbCBh bmQgbWx4IGltcGxlbWVudGF0aW9uIHRvIGdldCBhIGNyb3NzIHNlY3Rpb24uDQo+Pj4+Pj4gSSBo YXZlIGEgZ29vZCBjb2xsZWN0aW9uIG9mIG5pY3MgaGVyZSBzbyBzaG91bGQgYmUgYWJsZSB0byBz aG93IGENCj4+Pj4+PiBjb3VwbGUgZmlybXdhcmUgdmVyc2lvbnMuIEl0IGNvdWxkIGJlIGZpbmUg SSB0aGluayB0byBoYXZlIHRoZSByYXcNCj4+Pj4+PiBrcHRyIGFjY2VzcyBhbmQgdGhlbiBhbHNv IGtmdW5jcyBmb3Igc29tZSB0aGluZ3MgcGVyaGFwcy4NCj4+Pj4+Pg0KPj4+Pj4+Pj4gSSdkIHBy ZWZlciBpZiB3ZSBsZWZ0IHRoZSBkb29yIG9wZW4gZm9yIG5ldyB2ZW5kb3JzLiBQdW50aW5nIGRl c2NyaXB0b3INCj4+Pj4+Pj4+IHBhcnNpbmcgdG8gdXNlciBzcGFjZSB3aWxsIGluZGVlZCByZXN1 bHQgaW4gd2hhdCB5b3UganVzdCBzYWlkIC0gbWFqb3INCj4+Pj4+Pj4+IHZlbmRvcnMgYXJlIHN1 cHBvcnRlZCBhbmQgdGhhdCdzIGl0Lg0KPj4+Pj4+DQo+Pj4+Pj4gSSdtIG5vdCBzdXJlIGFib3V0 IHdoeSBpdCB3b3VsZCBtYWtlIGl0IGhhcmRlciBmb3IgbmV3IHZlbmRvcnM/IEkgdGhpbmsNCj4+ Pj4+PiB0aGUgb3Bwb3NpdGUsDQo+Pj4+Pg0KPj4+Pj4gVEJIIEknbSBvbmx5IHJlcGx5aW5nIHRv IHRoZSBlbWFpbCBiZWNhdXNlIG9mIHRoZSBhYm92ZSBwYXJ0IDopDQo+Pj4+PiBJIHRob3VnaHQg dGhpcyB3b3VsZCBiZSBzZWxmIGV2aWRlbnQsIGJ1dCBJIGd1ZXNzIG91ciBwZXJzcGVjdGl2ZXMN Cj4+Pj4+IGFyZSBkaWZmZXJlbnQuDQo+Pj4+Pg0KPj4+Pj4gUGVyaGFwcyB5b3UgbG9vayBhdCBp dCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBTVyBydW5uaW5nIG9uIHNvbWVvbmUNCj4+Pj4+IGVs c2UncyBjbG91ZCwgYW4gYmVpbmcgYWJsZSB0byBtb3ZlIHRvIGFub3RoZXIgY2xvdWQsIHdpdGhv dXQgaGF2aW5nDQo+Pj4+PiB0byB3b3JyeSBpZiBmZWF0dXJlIFggaXMgYXZhaWxhYmxlIGluIHhk cCBvciBqdXN0IHNrYi4NCj4+Pj4+DQo+Pj4+PiBJIGxvb2sgYXQgaXQgZnJvbSB0aGUgcGVyc3Bl Y3RpdmUgb2YgbWFpbnRhaW5pbmcgYSBjbG91ZCwgd2l0aCBwZW9wbGUNCj4+Pj4+IHdyaXRpbmcg cmFuZG9tIFhEUCBhcHBsaWNhdGlvbnMuIElmIEkgc3dhcCBhIE5JQyBmcm9tIGFuIGluY3VtYmVu dCB0byBhDQo+Pj4+PiAoc3VwZXJpb3IpIHN0YXJ0dXAsIGFuZCBjbG91ZCB1c2VycyBhcmUgbWVz c2luZyB3aXRoIHJhdyBkZXNjcmlwdG9yIC0NCj4+Pj4+IEknZCBuZWVkIHRvIGdvIGZpbmQgZXZl cnkgWERQIHByb2dyYW0gb3V0IHRoZXJlIGFuZCBtYWtlIHN1cmUgaXQNCj4+Pj4+IHVuZGVyc3Rh bmRzIHRoZSBuZXcgZGVzY3JpcHRvcnMuDQo+Pj4+DQo+Pj4+IEhlcmUgaXMgYW5vdGhlciBwZXJz cGVjdGl2ZToNCj4+Pj4NCj4+Pj4gQXMgQUZfWERQIGFwcGxpY2F0aW9uIGRldmVsb3BlciBJIGRv bid0IHdhbid0IHRvIGRlYWwgd2l0aCB0aGUNCj4+Pj4gdW5kZXJseWluZyBoYXJkd2FyZSBpbiBk ZXRhaWwuIEkgbGlrZSB0byByZXF1ZXN0IGEgZmVhdHVyZSBmcm9tIHRoZSBPUw0KPj4+PiAoaW4g dGhpcyBjYXNlIHJ4L3R4IHRpbWVzdGFtcGluZykuIElmIHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJs ZSBJIHdpbGwNCj4+Pj4gc2ltcGx5IHVzZSBpdCwgaWYgbm90IEkgbWlnaHQgaGF2ZSB0byB3b3Jr IGFyb3VuZCBpdCAtIG1heWJlIGJ5IGZhbGxpbmcNCj4+Pj4gYmFjayB0byBTVyB0aW1lc3RhbXBp bmcuDQo+Pj4+DQo+Pj4+IEFsbCBwYXJ0cyBvZiBteSBhcHBsaWNhdGlvbiAoQlBGIHByb2dyYW0g aW5jbHVkZWQpIHNob3VsZCBub3QgYmUNCj4+Pj4gb3B0aW1pemVkL2FkanVzdGVkIGZvciBhbGwg dGhlIGRpZmZlcmVudCBIVyB2YXJpYW50cyBvdXQgdGhlcmUuDQo+Pj4NCj4+PiBZZXMsIGFic29s dXRlbHkgYWdyZWVkLiBBYnN0cmFjdGluZyBhd2F5IHRob3NlIGtpbmRzIG9mIGhhcmR3YXJlDQo+ Pj4gZGlmZmVyZW5jZXMgaXMgdGhlIHdob2xlICpwb2ludCogb2YgaGF2aW5nIGFuIE9TL2RyaXZl ciBtb2RlbC4gSS5lLiwNCj4+PiBpdCdzIHdoYXQgdGhlIGtlcm5lbCBpcyB0aGVyZSBmb3IhIElm IHBlb3BsZSB3YW50IHRvIGJ5cGFzcyB0aGF0IGFuZCBnZXQNCj4+PiBkaXJlY3QgYWNjZXNzIHRv IHRoZSBoYXJkd2FyZSwgdGhleSBjYW4gYWxyZWFkeSBkbyB0aGF0IGJ5IHVzaW5nIERQREsuDQo+ Pj4NCj4+PiBTbyBpbiBvdGhlciB3b3JkcywgMTAwJSBhZ3JlZWQgdGhhdCB3ZSBzaG91bGQgbm90 IGV4cGVjdCB0aGUgQlBGDQo+Pj4gZGV2ZWxvcGVycyB0byBkZWFsIHdpdGggaGFyZHdhcmUgZGV0 YWlscyBhcyB3b3VsZCBiZSByZXF1aXJlZCB3aXRoIGENCj4+PiBrcHRyLWJhc2VkIGludGVyZmFj ZS4NCj4+Pg0KPj4+IEFzIGZvciB0aGUga2Z1bmMtYmFzZWQgaW50ZXJmYWNlLCBJIHRoaW5rIGl0 IHNob3dzIHNvbWUgcHJvbWlzZS4NCj4+PiBFeHBvc2luZyBhIGxpc3Qgb2YgZnVuY3Rpb24gbmFt ZXMgdG8gcmV0cmlldmUgaW5kaXZpZHVhbCBtZXRhZGF0YSBpdGVtcw0KPj4+IGluc3RlYWQgb2Yg YSBzdHJ1Y3QgbGF5b3V0IGlzIHNvcnRhIGNvbXBhcmFibGUgaW4gdGVybXMgb2YgZGV2ZWxvcGVy IFVJDQo+Pj4gYWNjZXNzaWJpbGl0eSBldGMgKElNTykuDQo+Pg0KPj4gTG9va3MgbGlrZSB0aGVy ZSBhcmUgcXVpdGUgc29tZSB1c2UgY2FzZXMgZm9yIGh3X3RpbWVzdGFtcC4NCj4+IERvIHlvdSB0 aGluayB3ZSBjb3VsZCBhZGQgaXQgdG8gdGhlIHVhcGkgbGlrZSBzdHJ1Y3QgeGRwX21kPw0KPj4N Cj4+IFRoZSBmb2xsb3dpbmcgaXMgdGhlIGN1cnJlbnQgeGRwX21kOg0KPj4gc3RydWN0IHhkcF9t ZCB7DQo+PiAgICAgICAgICAgX191MzIgZGF0YTsNCj4+ICAgICAgICAgICBfX3UzMiBkYXRhX2Vu ZDsNCj4+ICAgICAgICAgICBfX3UzMiBkYXRhX21ldGE7DQo+PiAgICAgICAgICAgLyogQmVsb3cg YWNjZXNzIGdvIHRocm91Z2ggc3RydWN0IHhkcF9yeHFfaW5mbyAqLw0KPj4gICAgICAgICAgIF9f dTMyIGluZ3Jlc3NfaWZpbmRleDsgLyogcnhxLT5kZXYtPmlmaW5kZXggKi8NCj4+ICAgICAgICAg ICBfX3UzMiByeF9xdWV1ZV9pbmRleDsgIC8qIHJ4cS0+cXVldWVfaW5kZXggICovDQo+Pg0KPj4g ICAgICAgICAgIF9fdTMyIGVncmVzc19pZmluZGV4OyAgLyogdHhxLT5kZXYtPmlmaW5kZXggKi8N Cj4+IH07DQo+Pg0KPj4gV2UgY291bGQgYWRkICBfX3U2NCBod190aW1lc3RhbXAgdG8gdGhlIHhk cF9tZCBzbyB1c2VyDQo+PiBjYW4ganVzdCBkbyB4ZHBfbWQtPmh3X3RpbWVzdGFtcCB0byBnZXQg dGhlIHZhbHVlLg0KPj4geGRwX21kLT5od190aW1lc3RhbXAgPT0gMCBtZWFucyBod190aW1lc3Rh bXAgaXMgbm90DQo+PiBhdmFpbGFibGUuDQo+Pg0KPj4gSW5zaWRlIHRoZSBrZXJuZWwsIHRoZSBj dHggcmV3cml0ZXIgY2FuIGdlbmVyYXRlIGNvZGUNCj4+IHRvIGNhbGwgZHJpdmVyIHNwZWNpZmlj IGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhLg0KPiANCj4gSWYgdGhlIGRyaXZlciBnZW5l cmF0ZXMgdGhlIGNvZGUgdG8gcmV0cmlldmUgdGhlIGRhdGEsIGhvdydzIHRoYXQNCj4gZGlmZmVy ZW50IGZyb20gdGhlIGtmdW5jIGFwcHJvYWNoPw0KPiBUaGUgb25seSBkaWZmZXJlbmNlIEkgc2Vl IGlzIHRoYXQgaXQgd291bGQgYmUgYSBtb3JlIHN0cm9uZyBVQVBJIHRoYW4NCj4gdGhlIGtmdW5j cz8NCg0KUmlnaHQuIGl0IGlzIGEgc3Ryb25nIHVhcGkuDQoNCj4gDQo+PiBUaGUga2Z1bmMgYXBw cm9hY2ggY2FuIGJlIHVzZWQgdG8gKmxlc3MqIGNvbW1vbiB1c2UgY2FzZXM/DQo+IA0KPiBXaGF0 J3MgdGhlIGFkdmFudGFnZSBvZiBoYXZpbmcgdHdvIGFwcHJvYWNoZXMgd2hlbiBvbmUgY2FuIGNv dmVyDQo+IGNvbW1vbiBhbmQgdW5jb21tb24gY2FzZXM/DQoNCkJleW9uZCBod190aW1lc3RhbXAs IGRvIHdlIGhhdmUgYW55IG90aGVyIGZpZWxkcyByZWFkeSB0byBzdXBwb3J0Pw0KDQpJZiBpdCBl bmRzIHVwIHdpdGggbG90cyBvZiBmaWVsZHMgdG8gYmUgYWNjZXNzZWQgYnkgdGhlIGJwZiBwcm9n cmFtLA0KYW5kIGJwZiBwcm9ncmFtIGFjdHVhbGx5IGludGVuZHMgdG8gYWNjZXNzIHRoZXNlIGZp ZWxkcywNCnVzaW5nIGEgc3Ryb25nIHVhcGkgbWlnaHQgYmUgYSBnb29kIHRoaW5nIGFzIGl0IGNh biBtYWtlIGNvZGUNCm11Y2ggc3RyZWFtbGluZWQuDQoNCj4gDQo+Pj4gVGhlcmUgYXJlIHRocmVl IG1haW4gZHJhd2JhY2tzLCBBRkFJQ1Q6DQo+Pj4NCj4+PiAxLiBJdCByZXF1aXJlcyBkcml2ZXIg ZGV2ZWxvcGVycyB0byB3cml0ZSBhbmQgbWFpbnRhaW4gdGhlIGNvZGUgdGhhdA0KPj4+IGdlbmVy YXRlcyB0aGUgdW5yb2xsZWQgQlBGIGJ5dGVjb2RlIHRvIGFjY2VzcyB0aGUgbWV0YWRhdGEgZmll bGRzLCB3aGljaA0KPj4+IGlzIGEgbm9uLXRyaXZpYWwgYW1vdW50IG9mIGNvbXBsZXhpdHkuIE1h eWJlIHRoaXMgY2FuIGJlIGFic3RyYWN0ZWQgYXdheQ0KPj4+IHdpdGggc29tZSBpbnRlcm5hbCBo ZWxwZXJzIHRob3VnaCAobGlrZSwgZS5nLiwgYQ0KPj4+IGJwZl94ZHBfbWV0YWRhdGFfY29weV91 NjQoZHN0LCBzcmMsIG9mZnNldCkgaGVscGVyIHdoaWNoIHdvdWxkIHNwaXQgb3V0DQo+Pj4gdGhl IHJlcXVpcmVkIEpNUC9NT1YvTERYIGluc3RydWN0aW9ucz8NCj4+Pg0KPj4+IDIuIEFGX1hEUCBw cm9ncmFtcyB3b24ndCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgbWV0YWRhdGEgd2l0aG91dCB1c2lu ZyBhDQo+Pj4gY3VzdG9tIFhEUCBwcm9ncmFtIHRoYXQgY2FsbHMgdGhlIGtmdW5jcyBhbmQgcHV0 cyB0aGUgZGF0YSBpbnRvIHRoZQ0KPj4+IG1ldGFkYXRhIGFyZWEuIFdlIGNvdWxkIHNvbHZlIHRo aXMgd2l0aCBzb21lIGNvZGUgaW4gbGlieGRwLCB0aG91Z2g7IGlmDQo+Pj4gdGhpcyBjb2RlIGNh biBiZSBtYWRlIGdlbmVyaWMgZW5vdWdoIChzbyBpdCBqdXN0IGR1bXBzIHRoZSBhdmFpbGFibGUN Cj4+PiBtZXRhZGF0YSBmdW5jdGlvbnMgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgYXQgbG9hZCB0 aW1lKSwgaXQgbWF5IGJlDQo+Pj4gcG9zc2libGUgdG8gbWFrZSBpdCBnZW5lcmljIGVub3VnaCB0 aGF0IGl0IHdpbGwgYmUgZm9yd2FyZC1jb21wYXRpYmxlDQo+Pj4gd2l0aCBuZXcgdmVyc2lvbnMg b2YgdGhlIGtlcm5lbCB0aGF0IGFkZCBuZXcgZmllbGRzLCB3aGljaCBzaG91bGQNCj4+PiBhbGxl dmlhdGUgRmxvcmlhbidzIGNvbmNlcm4gYWJvdXQga2VlcGluZyB0aGluZ3MgaW4gc3luYy4NCj4+ Pg0KPj4+IDMuIEl0IHdpbGwgbWFrZSBpdCBoYXJkZXIgdG8gY29uc3VtZSB0aGUgbWV0YWRhdGEg d2hlbiBidWlsZGluZyBTS0JzLiBJDQo+Pj4gdGhpbmsgdGhlIENQVU1BUCBhbmQgdmV0aCB1c2Ug Y2FzZXMgYXJlIGFsc28gcXVpdGUgaW1wb3J0YW50LCBhbmQgdGhhdA0KPj4+IHdlIHdhbnQgbWV0 YWRhdGEgdG8gYmUgYXZhaWxhYmxlIGZvciBidWlsZGluZyBTS0JzIGluIHRoaXMgcGF0aC4gTWF5 YmUNCj4+PiB0aGlzIGNhbiBiZSByZXNvbHZlZCBieSBoYXZpbmcgYSBjb252ZW5pZW50IGtmdW5j IGZvciB0aGlzIHRoYXQgY2FuIGJlDQo+Pj4gdXNlZCBmb3IgcHJvZ3JhbXMgZG9pbmcgc3VjaCBy ZWRpcmVjdHMuIEUuZy4sIHlvdSBjb3VsZCBqdXN0IGNhbGwNCj4+PiB4ZHBfY29weV9tZXRhZGF0 YV9mb3Jfc2tiKCkgYmVmb3JlIGRvaW5nIHRoZSBicGZfcmVkaXJlY3QsIGFuZCB0aGF0DQo+Pj4g d291bGQgcmVjdXJzaXZlbHkgZXhwYW5kIGludG8gYWxsIHRoZSBrZnVuYyBjYWxscyBuZWVkZWQg dG8gZXh0cmFjdCB0aGUNCj4+PiBtZXRhZGF0YSBzdXBwb3J0ZWQgYnkgdGhlIFNLQiBwYXRoPw0K Pj4+DQo+Pj4gLVRva2UNCj4+Pg0K