From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75519C2D0BF for ; Mon, 16 Dec 2019 20:13:22 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4C14F21739 for ; Mon, 16 Dec 2019 20:13:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="XFf2xGWO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4C14F21739 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 01E426E87A; Mon, 16 Dec 2019 20:13:22 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2068.outbound.protection.outlook.com [40.107.94.68]) by gabe.freedesktop.org (Postfix) with ESMTPS id F21346E87A for ; Mon, 16 Dec 2019 20:13:20 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fbq3tYFMjh719j+vs0Cy2Vnej6THmZEl28+q/TQQxn6S3UUnsKixkZaQgVJ7shlEQgvtDylG4BE4K6t7wWjow4kC7D+SIubaYQc2FWr6ZqOs1lTPm54pPn0VIbZCOLGbkHKfIW8FDxU4Ni+Gl/AP+r5mYoGRaw4caBDD/iIXU9cLajcVj8A5JpnUoKsVr6Tcukuhi0uUg/0DzgTypjhiTHXkaeja8scstzlnaTB6ILtyjU7UhsqbeEeC0KvtQU3NVt770MhdyANgSe1dHk8eMXGXriLqrES9aJTlKYUDF8qhz3nR+9hAX1Pc+cyHgEJSCAmmLbGRfVvzYpXVIQIg9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JhreRW5/iO6rg8KRpOUpPn+XTsm53jvS8C+nNfUT20c=; b=HZ/qJ/kJtaiLTPHznIb4VNtaZhi9c51ecMxx9hNlsjqUzw4nCovwgu8OPt9XajPGjKx18kyGszxrvKt6vT2JIuQ9aL8OjYzlag8w0Gyu6dPvtgoK/UqPITfDNrTZGlyt7GGlOoKLKdhJsuGE1tKDUfrCS4gN4PBISmXXFm2p9J+8ruVDNYXjqOYM82FO+AaTIiTx0wuYfKFgkkYb+MwgBZFC3/IScLi4tFu+Pp+S5bd9bd6wtA3AmGWLEPmfaPce0wys0gzypRN8fOs4kfOFsZ3dYtZcvx1mzDGOYqtDkh0FRshY1GmqFclpIclkTY0DqubE+C8rp7hde1uXFr3ocw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JhreRW5/iO6rg8KRpOUpPn+XTsm53jvS8C+nNfUT20c=; b=XFf2xGWOMDqvJ9S+ZhpixEXhti5dzmWdhiEGRADU+SJk+Ri4QBRonbUDXX+cWHZrv1QWrubh+VgMt1yhmPEpqtA7sRpg8PYPhavWafGO7HmHBnLJqO4TXMROtF6aOmJ/SYJCFZHZAtbLGloaDHoK4uMO/J/4DuI+f0XCLpfWI3Q= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Kuehling@amd.com; Received: from DM6PR12MB3947.namprd12.prod.outlook.com (10.255.175.222) by DM6PR12MB4089.namprd12.prod.outlook.com (10.141.184.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.15; Mon, 16 Dec 2019 20:13:20 +0000 Received: from DM6PR12MB3947.namprd12.prod.outlook.com ([fe80::a099:6fd7:e4d6:f560]) by DM6PR12MB3947.namprd12.prod.outlook.com ([fe80::a099:6fd7:e4d6:f560%3]) with mapi id 15.20.2538.019; Mon, 16 Dec 2019 20:13:18 +0000 Subject: Re: [PATCH] drm/amdkfd: Improve function get_sdma_rlc_reg_offset() To: "Zhao, Yong" , "amd-gfx@lists.freedesktop.org" References: <20191213163807.27139-1-Yong.Zhao@amd.com> <34c29118-32e9-3c37-9b48-ad33a0de8b99@amd.com> From: Felix Kuehling Organization: AMD Inc. Message-ID: Date: Mon, 16 Dec 2019 15:13:16 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 In-Reply-To: Content-Language: en-US X-ClientProxiedBy: YT1PR01CA0011.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01::24) To DM6PR12MB3947.namprd12.prod.outlook.com (2603:10b6:5:148::30) MIME-Version: 1.0 X-Originating-IP: [165.204.55.251] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 10e0c349-ef6f-4140-9a18-08d78264640b X-MS-TrafficTypeDiagnostic: DM6PR12MB4089:|DM6PR12MB4089: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 02530BD3AA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(376002)(366004)(136003)(346002)(39860400002)(189003)(199004)(53546011)(6512007)(478600001)(52116002)(8936002)(5660300002)(81166006)(36916002)(8676002)(6506007)(81156014)(6486002)(31696002)(2616005)(86362001)(186003)(66556008)(66476007)(31686004)(2906002)(4001150100001)(110136005)(66946007)(44832011)(26005)(316002)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR12MB4089; H:DM6PR12MB3947.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9+gkCKwAuNtd+O+UNv8C6lBtGfx6RT21yA9qQ7tQ/3WxciRjv37iOUkCgBJidENEfSGMfa5bDWdhmg/K1eDtpFlNFIln67zIzr8nJbNR3ZefpHxSgV9L8iW/3MNtKp3IiekIAC9rHoip9lIRCdZ1NvH+KKS4Peie/OOhwFozVbZTHoNZxK9UsePTtMiL66NUQuSlAKal6E8VZoyTuR0pbill4NOg4eiDpUf42GlZfhyrATHM6Mt8qQWQIuwqC6XkYDL/ibYqU4vl6hkTEkvJitOpAo6FkcgDU/RwvT7MycFXVIXsU+YdxVBKzGN6CJBbEkWh1d6Wm1kW+ah5b8I6t01PFNg/RyYVFAFGe83zvBuiz9DHtoqCpdJc0MQjw/nxsMpcklcdxt2+j+MHbO8yXb7VIiLkd+91FzsgUEH+fLE6fWqheaHoBNz4i6pkid0B X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10e0c349-ef6f-4140-9a18-08d78264640b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Dec 2019 20:13:18.4506 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Kdv9Z4UxDzfPONYWmOYgUABLAq8dbGHgZLJz7bxO0Fic3gcAkLm/UOoON5Y7+6kth+erU0977uVEIl/rjt6KXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4089 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Ck9uIDIwMTktMTItMTYgMzowNiBwLm0uLCBaaGFvLCBZb25nIHdyb3RlOgo+Cj4gW0FNRCBPZmZp Y2lhbCBVc2UgT25seSAtIEludGVybmFsIERpc3RyaWJ1dGlvbiBPbmx5XQo+Cj4KPiBUaGUgcHJv YmxlbSBoYXBwZW5zIHdoZW4gd2Ugd2FudCB0byByZXVzZSB0aGUgc2FtZSBmdW5jdGlvbiBmb3Ig QVNJQ3MgCj4gd2hpY2ggaGF2ZSBmZXdlciBTRE1BIGVuZ2luZXMuIFNvbWUgcG9pbnRlcnMgb24g d2hpY2ggU09DMTVfUkVHX09GRlNFVCAKPiBkZXBlbmRzIGZvciBzb21lIGhpZ2hlciBpbmRleCBT RE1BIGVuZ2luZXMgYXJlIDAsIGNhdXNpbmcgTlVMTCBwb2ludGVyLgoKVGhlIG9ubHkgd2F5IHRv IGRvIHRoYXQgd291bGQgYmUgdG8gY29weSB0aGUgY29kZSBpbnRvIGFub3RoZXIgc291cmNlIApm aWxlIHRoYXQgaW5jbHVkZXMgZGlmZmVyZW50IHJlZ2lzdGVyIGhlYWRlcnMuIEF0IHRoYXQgdGlt ZSB5b3UgY2FuIAp1cGRhdGUgdGhlIGNvZGUgdG8gc3VwcG9ydCBmZXdlciBTRE1BIGVuZ2luZXMg aW4gdGhlIG5ldyBzb3VyY2UgZmlsZS4gClRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoaXMg QXJ0dXJ1cy1zcGVjaWZpYyBzb3VyY2UgZmlsZS4KCgpSZWdhcmRzLAogwqAgRmVsaXgKCgo+Cj4g SSB3aWxsIGZpeCB0aGUgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KPgo+IFlvbmcKPgo+IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ICpGcm9tOiogS3VlaGxpbmcsIEZlbGl4IDxGZWxpeC5LdWVobGluZ0BhbWQu Y29tPgo+ICpTZW50OiogTW9uZGF5LCBEZWNlbWJlciAxNiwgMjAxOSAyOjM5IFBNCj4gKlRvOiog WmhhbywgWW9uZyA8WW9uZy5aaGFvQGFtZC5jb20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZyAKPiA8YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+Cj4gKlN1YmplY3Q6KiBSZTog W1BBVENIXSBkcm0vYW1ka2ZkOiBJbXByb3ZlIGZ1bmN0aW9uIAo+IGdldF9zZG1hX3JsY19yZWdf b2Zmc2V0KCkKPiBPbiAyMDE5LTEyLTEzIDg6MzgsIFlvbmcgWmhhbyB3cm90ZToKPiA+IFRoaXMg cHJldmVudHMgdGhlIE5VTEwgcG9pbnRlciBhY2Nlc3Mgd2hlbiB0aGVyZSBhcmUgZmV3ZXIgdGhh biA4IHNkbWEKPiA+IGVuZ2luZXMuCj4KPiBJIGRvbid0IHNlZSB3aGVyZSB5b3UgZ290IGEgTlVM TCBwb2ludGVyIGluIHRoZSBvbGQgY29kZS4gQWxzbyB0aGlzCj4gY2hhbmdlIGlzIGluIGFuIEFy Y3R1cnVzLXNwZWNpZmljIHNvdXJjZSBmaWxlLiBBRkFJSyBBcmN0dXJ1cyBhbHdheXMgaGFzCj4g OCBTRE1BIGVuZ2luZXMuCj4KPiBUaGUgbmV3IGNvZGUgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUg b2xkIGNvZGUuIEkgZG9uJ3Qgc2VlIGhvdyB0aGF0J3MgYW4KPiBpbXByb3ZlbWVudC4gU2VlIG9u ZSBtb3JlIGNvbW1lbnQgaW5saW5lLgo+Cj4KPiA+Cj4gPiBDaGFuZ2UtSWQ6IElhYmFlOWJmZjc1 NDZiMzQ0NzIwOTA1ZDVkNGE1Y2ZjMDY2YTc5ZDI1Cj4gPiBTaWduZWQtb2ZmLWJ5OiBZb25nIFpo YW8gPFlvbmcuWmhhb0BhbWQuY29tPgo+ID4gLS0tCj4gPsKgwqAgLi4uL2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9hbWRrZmRfYXJjdHVydXMuY8KgwqAgfCA2NCArKysrKysrKysrKystLS0tLS0tCj4g PsKgwqAgMSBmaWxlIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQo+ ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1k a2ZkX2FyY3R1cnVzLmMgCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1k a2ZkX2FyY3R1cnVzLmMKPiA+IGluZGV4IDNjMTE5NDA3ZGMzNC4uMmFkMDg4ZjEwNDkzIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9hcmN0 dXJ1cy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2Zk X2FyY3R1cnVzLmMKPiA+IEBAIC03MSwzMiArNzEsNTIgQEAgc3RhdGljIHVpbnQzMl90IGdldF9z ZG1hX3JsY19yZWdfb2Zmc2V0KHN0cnVjdCAKPiBhbWRncHVfZGV2aWNlICphZGV2LAo+ID7CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1bnNpZ25lZCBpbnQgZW5naW5lX2lkLAo+ID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgcXVldWVfaWQp Cj4gPsKgwqAgewo+ID4gLcKgwqDCoMKgIHVpbnQzMl90IHNkbWFfZW5naW5lX3JlZ19iYXNlWzhd ID0gewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTT0MxNV9SRUdfT0ZGU0VUKFNETUEw LCAwLAo+ID4gLSBtbVNETUEwX1JMQzBfUkJfQ05UTCkgLSBtbVNETUEwX1JMQzBfUkJfQ05UTCwK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU09DMTVfUkVHX09GRlNFVChTRE1BMSwgMCwK PiA+IC0gbW1TRE1BMV9STEMwX1JCX0NOVEwpIC0gbW1TRE1BMV9STEMwX1JCX0NOVEwsCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNPQzE1X1JFR19PRkZTRVQoU0RNQTIsIDAsCj4gPiAt IG1tU0RNQTJfUkxDMF9SQl9DTlRMKSAtIG1tU0RNQTJfUkxDMF9SQl9DTlRMLAo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBTT0MxNV9SRUdfT0ZGU0VUKFNETUEzLCAwLAo+ID4gLSBtbVNE TUEzX1JMQzBfUkJfQ05UTCkgLSBtbVNETUEzX1JMQzBfUkJfQ05UTCwKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgU09DMTVfUkVHX09GRlNFVChTRE1BNCwgMCwKPiA+IC0gbW1TRE1BNF9S TEMwX1JCX0NOVEwpIC0gbW1TRE1BNF9STEMwX1JCX0NOVEwsCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFNPQzE1X1JFR19PRkZTRVQoU0RNQTUsIDAsCj4gPiAtIG1tU0RNQTVfUkxDMF9S Ql9DTlRMKSAtIG1tU0RNQTVfUkxDMF9SQl9DTlRMLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBTT0MxNV9SRUdfT0ZGU0VUKFNETUE2LCAwLAo+ID4gLSBtbVNETUE2X1JMQzBfUkJfQ05U TCkgLSBtbVNETUE2X1JMQzBfUkJfQ05UTCwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg U09DMTVfUkVHX09GRlNFVChTRE1BNywgMCwKPiA+IC0gbW1TRE1BN19STEMwX1JCX0NOVEwpIC0g bW1TRE1BN19STEMwX1JCX0NOVEwKPiA+IC3CoMKgwqDCoCB9Owo+ID4gLQo+ID4gLcKgwqDCoMKg IHVpbnQzMl90IHJldHZhbCA9IHNkbWFfZW5naW5lX3JlZ19iYXNlW2VuZ2luZV9pZF0KPgo+IEkn bSBub3Qgc3VyZSB3aGVyZSB5b3Ugd2VyZSBnZXR0aW5nIGEgTlVMTCBwb2ludGVyLCBidXQgSSBn dWVzcyB0aGlzCj4gY291bGQgaGF2ZSB1c2VkIGEgcmFuZ2UgY2hlY2sgdG8gbWFrZSBzdXJlIGVu Z2luZV9pZCBpcyA8IDggYmVmb3JlCj4gaW5kZXhpbmcgaW50byB0aGUgYXJyYXkuIFRoZSBlcXVp dmFsZW50IGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50IHdvdWxkIGJlCj4gYSBkZWZhdWx0IGNhc2Uu IFNlZSBiZWxvdy4KPgo+Cj4gPiArwqDCoMKgwqAgdWludDMyX3Qgc2RtYV9lbmdpbmVfcmVnX2Jh c2U7Cj4gPiArwqDCoMKgwqAgdWludDMyX3Qgc2RtYV9ybGNfcmVnX29mZnNldDsKPiA+ICsKPiA+ ICvCoMKgwqDCoCBzd2l0Y2ggKGVuZ2luZV9pZCkgewo+ID4gK8KgwqDCoMKgIGNhc2UgMDoKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2RtYV9lbmdpbmVfcmVnX2Jhc2UgPSBTT0MxNV9S RUdfT0ZGU0VUKFNETUEwLCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1tU0RNQTBfUkxDMF9SQl9DTlRMKSAtIAo+IG1tU0RN QTBfUkxDMF9SQl9DTlRMOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ ICvCoMKgwqDCoCBjYXNlIDE6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNkbWFfZW5n aW5lX3JlZ19iYXNlID0gU09DMTVfUkVHX09GRlNFVChTRE1BMSwgMCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtbVNETUExX1JM QzBfUkJfQ05UTCkgLSAKPiBtbVNETUExX1JMQzBfUkJfQ05UTDsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArwqDCoMKgwqAgY2FzZSAyOgo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzZG1hX2VuZ2luZV9yZWdfYmFzZSA9IFNPQzE1X1JFR19PRkZTRVQoU0RN QTIsIDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbW1TRE1BMl9STEMwX1JCX0NOVEwpIC0gCj4gbW1TRE1BMl9STEMwX1JCX0NO VEw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gK8KgwqDCoMKgIGNh c2UgMzoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2RtYV9lbmdpbmVfcmVnX2Jhc2Ug PSBTT0MxNV9SRUdfT0ZGU0VUKFNETUEzLCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1tU0RNQTNfUkxDMF9SQl9DTlRMKSAt IAo+IG1tU0RNQTNfUkxDMF9SQl9DTlRMOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiA+ICvCoMKgwqDCoCBjYXNlIDQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNkbWFfZW5naW5lX3JlZ19iYXNlID0gU09DMTVfUkVHX09GRlNFVChTRE1BNCwgMCwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBt bVNETUE0X1JMQzBfUkJfQ05UTCkgLSAKPiBtbVNETUE0X1JMQzBfUkJfQ05UTDsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArwqDCoMKgwqAgY2FzZSA1Ogo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZG1hX2VuZ2luZV9yZWdfYmFzZSA9IFNPQzE1X1JFR19P RkZTRVQoU0RNQTUsIDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbW1TRE1BNV9STEMwX1JCX0NOVEwpIC0gCj4gbW1TRE1BNV9S TEMwX1JCX0NOVEw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gK8Kg wqDCoMKgIGNhc2UgNjoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2RtYV9lbmdpbmVf cmVnX2Jhc2UgPSBTT0MxNV9SRUdfT0ZGU0VUKFNETUE2LCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1tU0RNQTZfUkxDMF9S Ql9DTlRMKSAtIAo+IG1tU0RNQTZfUkxDMF9SQl9DTlRMOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCBjYXNlIDc6Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNkbWFfZW5naW5lX3JlZ19iYXNlID0gU09DMTVfUkVHX09GRlNFVChTRE1BNywg MCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBtbVNETUE3X1JMQzBfUkJfQ05UTCkgLSAKPiBtbVNETUE3X1JMQzBfUkJfQ05UTDsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArCj4KPiBEbyB5b3UgbmVl ZCBhIGRlZmF1bHQgY2FzZSBmb3IgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ/IEkgdGhpbmsgeW91IGdl dCBhCj4gY29tcGlsZXIgd2FybmluZyB3aXRob3V0IG9uZS4KPgo+IFJlZ2FyZHMsCj4gwqDCoCBG ZWxpeAo+Cj4KPiA+ICvCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqAgc2RtYV9ybGNfcmVn X29mZnNldCA9IHNkbWFfZW5naW5lX3JlZ19iYXNlCj4gPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArIHF1ZXVlX2lkICogKG1tU0RNQTBfUkxDMV9SQl9DTlRMIC0gCj4gbW1TRE1BMF9S TEMwX1JCX0NOVEwpOwo+ID4KPiA+wqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoIlJMQyByZWdpc3Rl ciBvZmZzZXQgZm9yIFNETUElZCBSTEMlZDogMHgleFxuIiwgCj4gZW5naW5lX2lkLAo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcXVldWVfaWQsIHJldHZhbCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdWV1ZV9pZCwg c2RtYV9ybGNfcmVnX29mZnNldCk7Cj4gPgo+ID4gLcKgwqDCoMKgIHJldHVybiByZXR2YWw7Cj4g PiArwqDCoMKgwqAgcmV0dXJuIHNkbWFfcmxjX3JlZ19vZmZzZXQ7Cj4gPsKgwqAgfQo+ID4KPiA+ wqDCoCBzdGF0aWMgaW50IGtnZF9ocWRfc2RtYV9sb2FkKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHZv aWQgKm1xZCwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K YW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==